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

Include Image in R Markdown Template Without Having to Create a New Directory for Template

我正在构建一个 beamer 演示文稿模板,我想在幻灯片的前面包含一个徽标。虽然这可以通过在演示文稿的目录中包含图像来实现,但我宁愿不必为每个新演示文稿只为那一张图像创建一个新目录。

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

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

我设法通过一种解决方法做到了这一点:

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

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

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

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

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

这道题有两个关键问题:

  1. 无论 R Markdown 文件位于何处,都有一种简单的方法来提供图像的文件路径。
  2. 使徽标不必每次都在 YAML 中指定,如 nnn
  3. 的解决方案所示

整体解决方案

由于这个问题需要一个包才能妥善解决,所以我整理了一个really basic repository here,大家可以fork一下。或者您可以在这里下载:

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

自定义函数

创建自己的 R Markdown 输出很有用,原因有二:

  1. 您可以 link 非常轻松地访问系统文件。在这种情况下,您希望引用您的徽标。
  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 自定义选项。我只对模板做了一个更改,这是强制徽标尺寸为 2 厘米高。因此,我将 [height=2cm] 添加到第 338 行:

\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

You probably want to read Chapters 17 and 18 of the R Markdown book if the concept of making Custom formats sounds intimidating!