Rmarkdown YAML 中的引号和内联 R 代码

Posted

技术标签:

【中文标题】Rmarkdown YAML 中的引号和内联 R 代码【英文标题】:Quotes and inline R code in Rmarkdown YAML 【发布时间】:2018-12-20 03:17:44 【问题描述】:

我想在 R Markdown 文档中添加一些特殊字体作为标题/副标题的一部分,但根据我使用的引用类型,我得到的结果会有所不同。

这是一个小的 R 降价示例,显示了我的问题。我想在 twitter 句柄之前打印 twitter 徽标,作为 R 降价字幕的一部分。

---
title: "Untitled"
subtitle: '`r fontawesome::fa("twitter", fill = "steelblue")` @twitter handle'
author: "My Name"
date: "7/12/2018"
output: html_document
---

This is it.

如果我使用单引号,那么我几乎可以得到我想要的结果。徽标和 twitter 句柄之间有一个换行符,如下所示,但这很好 - 它可以用 css 修复,因为徽标设置在 <svg> ... </svg> 内。

但是,如果我使用双引号,那么事情就会变得混乱:

subtitle: "`r fontawesome::fa('twitter', fill = 'steelblue')` @twitter handle"

现在没有的 YAML 信息出现在最终的 html 文档中。我猜它与 this question on entering the current date as part of the yaml 或可能与 this post where the YAML inline code doesn't run 有关,但我很好奇 为什么 YAML 中引用类型的更改对渲染产生如此深远的影响,因为双引号显然适用于其他 YAML 参数。

我正在使用rmarkdown v1.10。

【问题讨论】:

【参考方案1】:

fontawesome::fa() 函数返回一个SVG 元素。 比如fontawesome::fa("twitter", fill = "steelblue")返回的字符串是:

<svg style="height:0.8em;top:.04em;position:relative;fill:steelblue;" viewBox="0 0 512 512">
  <path d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"/>
</svg>

此字符串包含双引号:这就是单引号导致正确结果而双引号不能正常执行的原因。 如果您使用keep_md 选项检查中间markdown 文件,则很明显:

---
title: "Untitled"
subtitle: "`r fontawesome::fa('twitter', fill = 'steelblue')` @twitter handle"
author: "My Name"
date: "7/12/2018"
output: 
  html_document:
    keep_md: true
---

可以使用 YAML literal 或 folded 块来消除这些引用注意事项:

subtitle: |
    `r fontawesome::fa('twitter', fill = 'steelblue')` @twitter handle

subtitle: >
    `r fontawesome::fa('twitter', fill = 'steelblue')` @twitter handle

【讨论】:

精彩的解释。正是我想要的

以上是关于Rmarkdown YAML 中的引号和内联 R 代码的主要内容,如果未能解决你的问题,请参考以下文章

r Markdown的Yaml标头中的单引号和双引号有啥区别?

使用 R markdown 和 knitr:可以在 YAML 中解释 R 对象

带有外部和嵌入式 yaml 的 RMarkdown

内联代码的 R Markdown 语法突出显示的差异

我们可以为 rmarkdown 的 yaml 标头中的 biblio-style 参数设置哪些选项?

转义引号以使用 ODBC 在 R Markdown 中提交 sql