在R Markdown模板中包含图像,而无需为模板创建新目录

时间:2018-02-21 23:31:32

标签: r latex r-markdown knitr beamer

我正在构建一个投影仪演示模板,我想在幻灯片的正面添加一个徽标。虽然这可以通过在演示文稿的目录中包含图像来实现,但我不希望为每个新演示文稿创建一个新目录,仅针对该图像。

有没有办法可以从包resources文件夹中检索相关文件路径并让它在LaTeX beamer模板中引用该位置?

我尝试将图片与.tex模板一起放在资源文件夹中,但当我尝试编织时,我收到file not found错误。

2 个答案:

答案 0 :(得分:3)

我设法通过一种解决方法来实现这一目标:

我使用R函数导出yaml头中资源文件夹的绝对路径:

---
output:
  myPackage::myCustomFunction
resource-folder: '`r system.file("rmarkdown/templates/myPackage/resources/", package="myPackage")`'
---

在我的tex模板中,我使用:

\includegraphics[]{$resource-folder$myImage.png}

这样我可以将我的图像与tex模板一起放在资源文件夹中,而不必将它们与文档的每个新实例一起复制。

答案 1 :(得分:1)

这个问题有两个关键问题:

  1. 不管R Markdown文件在哪里,都有一种简单的方法可以提供图像的文件路径。
  2. 进行修改,这样就不必每次都在YAML中指定徽标,如nnn在解决方案中所见

总体解决方案

由于此问题需要一个软件包才能正确解决,因此我整理了一个really basic repository here,您可能希望分叉。另外,您也可以在这里下载:

devtools::install_github("mikey-harper/rmarkdown-image")

自定义功能

创建您自己的R Markdown输出非常有用,其原因有两个:

  1. 您可以非常轻松地链接到系统文件。在这种情况下,您需要引用徽标。
  2. 您可以提供默认的pandoc参数,而不是将其包含在YAML中。

可以同时使用这两点,将徽标文件(存储在程序包中)直接提供给模板titlegraphic YAML选项。这是包装中的基本功能。

beamer_custom <- function(...){

  # Define filepaths
  logo <- system.file(package = "template", "logo.png")
  template <- system.file(package = "template", "template.tex")

  # supply files to your custom format
  rmarkdown::beamer_presentation(...,
                                 template = template,
                                 pandoc_args = rmarkdown::pandoc_variable_arg("titlegraphic", logo))
}

请注意,函数中的...意味着我们可以为新函数提供任何参数,这些参数将直接传递给beamer_presentation函数。

自定义模板

这里并不需要完全定义自己的模板,因为default template包含了许多关于Beamer的自定义选项。我仅对模板进行了一次更改,这是为了将徽标大小强制为2cm高。因此,我在第338行中添加了[height=2cm]

\titlegraphic{\includegraphics[height=2cm]{$titlegraphic$}}

在模板中使用它。一些附加选项已添加到输出中(themecolorthemefonttheme),以突出显示将其他参数传递给我们的新函数仍然很容易。

---
title: "R Markdown"
date: \today
author: Michael Harper
subtitle: How to make awesome R Markdown presentation
output: 
  template::beamer_custom:
    theme: "AnnArbor"
    colortheme: "dolphin"
    fonttheme: "structurebold"
---


# Text

Beautiful text

enter image description here

  

如果使“自定义”格式的概念听起来令人生畏的话,您可能想阅读R Markdown book的第17和18章!