如何在自定义格式的RMarkdown模板的YAML标头中的Latex中包含R代码

时间:2019-03-14 22:22:20

标签: r latex yaml r-markdown

我正在创建一个R包“ mytemplate”,其中包含rmarkdown::pdf_document派生的RMarkdown格式(作为R脚本函数,以报告为输出,它调用header.tex文件):

report <-  function() {

  ## location of resource files in the package
  header <- system.file("resources/header.tex", package = "mytemplate")

  ## derives the style from default PDF template
  rmarkdown::pdf_document(
    latex_engine = "xelatex", fig_caption = FALSE,
    includes = rmarkdown::includes(in_header = header)
    )
}

在header.tex中,我使用了system.file()检测到的图像文件,该文件位于inst /软件包目录的resources /文件夹中:

\usepackage{fancyhdr}
  \thispagestyle{fancy}
  \fancyhead[LC]{
    \includegraphics{`r system.file("resources/cover.png", package = "mytemplate")`}
  }

在我的软件包之外,并在.Rmd文件中提供完整的YAML部分,pdf呈现为OK:

---
title: ""
output:
  pdf_document:
    latex_engine: xelatex
    fig_caption: false
header-includes:
  \usepackage{fancyhdr}
  \thispagestyle{fancy}
  \fancyhead[LC]{
    \includegraphics{`r system.file("resources/cover.png", package = "mytemplate")`}
  }
---

text

但是在安装后,当我使用mytemplate::report作为RMarkdown输出时,返回了错误:

  

! LaTeX错误:文件“ r system.file(“ resources / cover.png”,程序包=“ mytemp   找不到”)。

是在导致错误的R脚本中调用header.tex,还是应该修改header.tex代码以及如何修改?

1 个答案:

答案 0 :(得分:2)

您正在tex文档中使用内联R块。那行不通。

相反,请使用pandoc_args的参数pdf_document()将变量传递给pandoc。然后,您可以在header.tex内部使用pandoc变量:

args <- pandoc_variable_arg("cover", system.file("resources/cover.png", package = "mytemplate"))

report <-  function() {

  ## location of resource files in the package
  header <- system.file("resources/header.tex", package = "mytemplate")

  ## derives the style from default PDF template
  rmarkdown::pdf_document(
    latex_engine = "xelatex", fig_caption = FALSE,
    includes = rmarkdown::includes(in_header = header),
    pandoc_args = args  # pass to pandoc
    )
}

还有header.tex

\usepackage{fancyhdr}
  \thispagestyle{fancy}
  \fancyhead[LC]{
    \includegraphics{$cover$}
  }