【问题标题】:Inserting a pdf BEFORE the bookdown frontpage在 bookdown 头版之前插入 pdf
【发布时间】:2017-09-21 03:37:29
【问题描述】:

我正在用 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

【问题讨论】:

    标签: r pdf latex r-markdown bookdown


    【解决方案1】:

    选项 1: 你可以试试这样的

    includes:
        after_body:Title_page.tex
    

    选项 2: 由于我对latex比较熟悉,所以我会将论文和官方页面生成为两个单独的pdf文档,然后使用latex包pdfpages将这两者结合起来。

    类似

    \usepackage{pdfpages}
    
    \begin{document}
    
    \includepdf[pages={5}, scale=1]{OfficialFrontpages.pdf}
    \newpage
    \includepdf[pages={-}, scale=1]{MyThesis.pdf}
    
    \end{document}
    

    我最终会用 pdflatex 编译。

    让我知道这是否有用。

    【讨论】:

      【解决方案2】:

      一种策略是编辑latex 模板,以便在\maketitle 之前评估您的\includepdf。似乎 bookdown 使用的是常规的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 在与自定义模板一起使用时的行为并不完全相同(例如,您可能需要自己重新定义边距大小)。

      【讨论】:

      • rmarkdown 乳胶模板的链接已损坏。默认情况下,我的 bookdown 项目文件夹似乎没有我可以看到的 .tex 文件。你能修复链接吗?
      • 这个链接有一些关于位置和你的默认乳胶文件可能被调用的建议。 link
      【解决方案3】:

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

      一种解决方案是创建一个单独的 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 只是众多用于合并 PDF 的跨平台实用程序(Windows、Mac、Linux)之一。另一个选择是qpdf。

      【讨论】:

        【解决方案4】:

        这是一种简单的方法,但将所有内容都保留在 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 的第1 页作为文档的封面。

        \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 下载或克隆一个工作示例

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-09-12
          • 1970-01-01
          • 1970-01-01
          • 2019-11-05
          • 1970-01-01
          相关资源
          最近更新 更多