【问题标题】:Include Image in R Markdown Template Without Having to Create a New Directory for Template在 R Markdown 模板中包含图像,而无需为模板创建新目录
【发布时间】:2018-08-01 16:53:33
【问题描述】:

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

有没有一种方法可以让我从包 resources 文件夹中检索相对文件路径,并让它在 LaTeX beamer 模板中引用该位置?

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

【问题讨论】:

    标签: r latex r-markdown knitr beamer


    【解决方案1】:

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

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

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

    在我使用的 tex 模板中:

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

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

    【讨论】:

    • 非常感谢。我觉得我已经尝试了一切,甚至在某一时刻尝试了一些类似的东西。但它对我有用。再次感谢!您是否认为有一种方法可以进一步抽象这一点,并将此 YAML 元数据放在自定义函数调用中,这样用户甚至都看不到这一点?
    • 是的,这就是为什么我对这种方法也不是 100% 满意的原因。我不知道。
    • @nnn 您可能想查看我的解决方案,这意味着不必在 YAML 中调用图像路径 :)
    【解决方案2】:

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

    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 包含许多用于投影仪的自定义选项。我只对模板进行了一次更改,这是强制徽标大小为 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
    

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

    【讨论】:

    • 非常好,谢谢!不必每次都在 YAML 中指定图像的路径,这样会更简洁。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-03
    • 1970-01-01
    • 2022-08-13
    • 1970-01-01
    • 2022-12-18
    相关资源
    最近更新 更多