Вставка pdf ПЕРЕД записью на передний план

Я пишу диссертацию с Bookdown в Rmarkdown (и в конечном итоге экспортирую ее в формат PDF). Чтобы передать мой тезис, я должен включить несколько отсканированных документов с рукописными подписями ПЕРЕД первой страницей моей диссертации.

Bookdown поражает сочетанием разных файлов Rmd, но мне не удалось включить документ PDF перед титульной страницей.

Я пробовал это:

bookdown::pdf_book: 
  includes:
    in_header: preamble.tex
    before_body: beforebody.tex

С помощью preamble.tex:

\usepackage{pdfpages}

и в beforebody.tex:

\includepdf[pages={5}, scale=1]{OfficialFrontpages.pdf}
\newpage

Однако затем он сначала создает титульную страницу Bookdown и только вставляет эти страницы перед Оглавлением. Есть ли способ заставить этот документ быть включенным ПЕРЕД первой страницей окончательного документа PDF?

Включение этих команд в соответствие с строками первых файлов .Rmd также не работает:

![Caption](OfficialFrontpages.pdf) 
\raggedright 
\clearpage

Ответ 1

Вариант 1: Вы можете попробовать что-то вроде этого

includes:
    after_body:Title_page.tex

Вариант 2: Поскольку я более удобен в латексе, я бы сгенерировал основной тезис и официальные страницы в виде двух отдельных pdf-документов, а затем использовал пакеты PDF-пакетов latex для объединения этих двух.

Что-то вроде

\usepackage{pdfpages}

\begin{document}

\includepdf[pages={5}, scale=1]{OfficialFrontpages.pdf}
\newpage
\includepdf[pages={-}, scale=1]{MyThesis.pdf}

\end{document}

Я бы, наконец, скомпилировал с pdflatex.

Сообщите мне, было ли это полезно.

Ответ 2

Одна стратегия заключается в редактировании латексного шаблона, так что вы называете свой \includepdf оценкой до \maketitle. Кажется, bookdown использует обычный шаблон rmarkdown latex. Позвольте сделать копию и отредактировать ее. Существует несколько альтернативных способов сделать это:

  • Вы можете полностью удалить эту часть:

    $if(title)$
    \maketitle
    $endif$
    

    И затем напишите в своем документе Rmd:

    \includepdf[pages={5}, scale=1]{OfficialFrontpages.pdf}
    \maketitle
    
  • Или вы можете перенести эту часть, ту, которая заботится о before_body:

    $for(include-before)$
    $include-before$
    $endfor$ 
    

    до \maketitle и используйте свою текущую стратегию с помощью before_body.

В любом случае вам нужно будет сказать, что knitr использует ваш настраиваемый шаблон:

bookdown::pdf_book:
  template: mytemplate.tex

И вам, возможно, придется отрегулировать некоторые другие параметры, так как knitr не ведет себя точно так же, когда используется с пользовательскими шаблонами (например, вам, вероятно, потребуется переопределить размер поля самостоятельно).

Ответ 3

Если вы прикрепляете внешние PDF файлы как часть рабочего процесса Bookdown, вы добавляете ненужные накладные расходы на его процесс сборки (особенно для отсканированных документов). Вместо этого вам нужно слияние только при обращении с продуктом к персоналу администратора.

Одним из решений является создание отдельного TeX и объединение документов через пакет LaTeX pdfpages. Это уже было опубликовано здесь, но для меня это кажется немного излишним для двух PDF файлов. Я бы просто пошел с:

pdftk OfficialFrontpages.pdf MyThesis.pdf cat output final.pdf

В зависимости от размера документов (цифр и т.д.) вам также может быть полезно добавить compress в качестве последнего аргумента.

Конечно, если вы не хотите оставлять комфорт в консоли R, ничто не мешает определить функцию:

pdfMerge <- function(doc1, doc2)
    system2("pdftk", paste(doc1, doc2, "cat output final.pdf"))

pdftk - это лишь одна из многих межплатформенных утилит (Windows, Mac, Linux) для объединения PDF файлов. Альтернативой является qpdf.