2017-04-24 20 views
11

我正在用Rmarkdown的Bookdown写我的论文(我最终将它导出为PDF格式)。为了交出我的论文,我需要在我论文的第一页之前包括一些手写签名的扫描文档。插入一个pdf之前的bookdown前页面

在合并不同的Rmd文件时,Bookdown是惊人的,但我还没有设法在标题页之前包含PDF文档。在preamble.tex

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

有了:

我已经试过这

\usepackage{pdfpages} 

和beforebody.tex:

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

但是,那么它首先创建Bookdown titlepage,并且只在目录之前插入这些页面。有什么办法可以在最终的PDF文档的第一页之前强制包含这个文档?

包容这些命令作为第一.Rmd文件的线条也不起作用:

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

回答

2

选项1: 你可以尝试这样的事情

includes: 
    after_body:Title_page.tex 

选项2: 由于我对乳胶更舒适,因此我会将主要论文和官方网页生成为两个单独的pdf文档,即th使用乳胶包pdfpages结合这两个。

喜欢的东西

\usepackage{pdfpages} 

\begin{document} 

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

\end{document} 

我最后用pdflatex编译。

让我知道这是否有用。

2

一个策略是编辑乳胶模板,以便您致电您的\includepdf之前评估\maketitle。看起来好像是使用常规的rmarkdown latex template。让我们复制并编辑它。有几个替代的方式来做到这一点:

  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并不表现完全一样使用自定义模板(例如,您可能需要自己重新定义边距大小)。

1

如果您将外部PDF作为您的Bookdown工作流程的一部分附加,则会为其构建过程(尤其是扫描文档)增加不必要的开销。相反,只有在处理产品给管理员时才需要合并。

一个解决方案是创建一个单独的TeX并通过LaTeX包pdfpages合并文档。这已经发布在这里,但对我来说,似乎有点过分的两个PDF。我会简单地去:

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

根据文件(数字和这样)的大小,你也可能会受益于增加compress作为最后一个参数。

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

pdftk只是众多跨平台的实用工具中的一种(在Windows,Mac:

当然,如果你不想离开R控制台的舒适性,从没有定义功能可防止,Linux)合并PDF文件。另一种方法是qpdf