在 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 模板一起放在资源文件夹中,而不必将它们与文档的每个新实例一起复制。
这道题有两个关键问题:
- 无论 R Markdown 文件位于何处,都有一种简单的方法来提供图像的文件路径。
- 使徽标不必每次都在 YAML 中指定,如 nnn
的解决方案所示
整体解决方案
由于这个问题需要一个包才能妥善解决,所以我整理了一个really basic repository here,大家可以fork一下。或者您可以在这里下载:
devtools::install_github("mikey-harper/rmarkdown-image")
自定义函数
创建自己的 R Markdown 输出很有用,原因有二:
- 您可以 link 非常轻松地访问系统文件。在这种情况下,您希望引用您的徽标。
- 您可以提供默认的 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$}}
在模板中使用它。一些附加选项已添加到输出中(theme
、colortheme
、fonttheme
)以强调将其他参数传递给我们的新函数仍然很容易。
---
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!
我正在构建一个 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 模板一起放在资源文件夹中,而不必将它们与文档的每个新实例一起复制。
这道题有两个关键问题:
- 无论 R Markdown 文件位于何处,都有一种简单的方法来提供图像的文件路径。
- 使徽标不必每次都在 YAML 中指定,如 nnn 的解决方案所示
整体解决方案
由于这个问题需要一个包才能妥善解决,所以我整理了一个really basic repository here,大家可以fork一下。或者您可以在这里下载:
devtools::install_github("mikey-harper/rmarkdown-image")
自定义函数
创建自己的 R Markdown 输出很有用,原因有二:
- 您可以 link 非常轻松地访问系统文件。在这种情况下,您希望引用您的徽标。
- 您可以提供默认的 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$}}
在模板中使用它。一些附加选项已添加到输出中(theme
、colortheme
、fonttheme
)以强调将其他参数传递给我们的新函数仍然很容易。
---
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!