Вставка 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

person Lena    schedule 24.04.2017    source источник


Ответы (4)


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

includes:
    after_body:Title_page.tex

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

Что-то вроде

\usepackage{pdfpages}

\begin{document}

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

\end{document}

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

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

person Sukanya B    schedule 04.06.2017

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

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

    $if(title)$
    \maketitle
    $endif$
    

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

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

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

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

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

bookdown::pdf_book:
  template: mytemplate.tex

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

person scoa    schedule 04.06.2017
comment
Ссылка на латексный шаблон rmarkdown не работает. В моей папке проекта bookdown по умолчанию нет файла .tex, который я могу видеть. Можете восстановить ссылку? - person Mark Neal; 14.03.2020
comment
По этой ссылке есть несколько предложений относительно местоположения и того, как может называться ваш латексный файл по умолчанию. ссылка - person Mark Neal; 15.03.2020

Если вы прикрепляете внешние 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.

person antonio    schedule 10.06.2017

Это простой подход, но сохраняя все в рамках rmarkdown, сочетая лучшее из ответа scoa и используя некоторые советы из этого другого пример stackoverflow.

Он начинается с демоверсии bookdown preamble.tex, внизу добавлены две строчки.

\usepackage{booktabs}
\usepackage{pdfpages}
\usepackage{amsthm}
\makeatletter
\def\thm@space@setup{%
  \thm@preskip=8pt plus 2pt minus 4pt
  \thm@postskip=\thm@preskip
}
\makeatother
\let\oldmaketitle\maketitle
\AtBeginDocument{\let\maketitle\relax}

Создайте этот новый файл, before_body.tex, где вы хотите, чтобы страница 1 pdf под названием cover_pdf.pdf использовалась в качестве обложки для вашего документа.

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

\let\maketitle\oldmaketitle
\maketitle

Отредактируйте _output.yml, включив свой before_body.tex, в результате получится следующее:

bookdown::gitbook:
  css: style.css
  config:
    toc:
      before: |
        <li><a href="./">A Minimal Book Example</a></li>
      after: |
        <li><a href="https://github.com/rstudio/bookdown" target="blank">Published with bookdown</a></li>
    edit: https://github.com/rstudio/bookdown-demo/edit/master/%s
    download: ["pdf", "epub"]
bookdown::pdf_book:
  includes:
    in_header: preamble.tex
    before_body: before_body.tex
  latex_engine: xelatex
  citation_package: natbib
  keep_tex: yes
bookdown::epub_book: default

Тогда ты должен быть милым!

Если у вас возникнут проблемы, вы можете загрузить или клонировать рабочий пример из этой ветки репозитория github

person Mark Neal    schedule 17.03.2020