我正在用Rmarkdown中的Bookdown撰写我的论文(我最终会将其导出为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
答案 0 :(得分:2)
选项1: 你可以试试这样的东西
includes:
after_body:Title_page.tex
选项2: 由于我对乳胶更加舒服,我会将主要论文和官方页面生成为两个单独的pdf文档,然后使用latex package pdfpages将这两个文档组合起来。
像
这样的东西\usepackage{pdfpages}
\begin{document}
\includepdf[pages={5}, scale=1]{OfficialFrontpages.pdf}
\newpage
\includepdf[pages={-}, scale=1]{MyThesis.pdf}
\end{document}
我最终会用pdflatex编译。
请告诉我这是否有用。
答案 1 :(得分:2)
一种策略是编辑乳胶模板,以便在\includepdf
之前调用\maketitle
进行评估。似乎bookdown正在使用常规rmarkdown latex template。让我们复制并编辑它。有几种替代方法可以做到这一点:
您可以完全删除此部分:
$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与自定义模板一起使用时的行为并不完全相同(例如,您可能需要自己重新定义边距大小)。
答案 2 :(得分:1)
如果您将外部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"))
答案 3 :(得分:0)
这是一种简单的方法,但是将所有内容都保留在rmarkdown中,结合了scoa's answer的精华并使用了其他stackoverflow example的一些技巧。
它从bookdown demo开始
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
,在其中将名为cover_pdf.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
那你应该很甜蜜!
如果遇到问题,可以从this github repo branch
下载或克隆一个有效的示例。