如何在RMarkdown文件中引用YAML前置内容?
解决RMarkdown直接引用YAML前置内容的问题
不用折腾params重复定义字段,RMarkdown本身就有更简洁的方法直接读取YAML里的内容。
最直接的方法:用rmarkdown::metadata访问所有YAML字段
rmarkdown::metadata是内置对象,能直接调用YAML前置区里的所有字段,不管是title、author还是output,都能直接取到。
完整示例代码
--- title: This is my title author: My Name output: html_document --- # Main page ```{r} # 直接读取YAML里的output字段 if (rmarkdown::metadata$output == "html_document") { outputtype <- "HTML" } else { outputtype <- "Not HTML" }
The output type is r outputtype.
### 渲染后效果 > # Main page > The output type is HTML. ## 处理嵌套的output配置 如果你的`output`字段是带参数的嵌套写法(比如给`html_document`加`toc`选项),直接取`metadata$output`会得到列表结构,这时候可以用`knitr::opts_knit$get('rmarkdown.pandoc.to')`精准获取输出格式: ```yaml --- title: 带参数的输出示例 author: My Name output: html_document: toc: true number_sections: true --- # Main page ```{r} output_format <- knitr::opts_knit$get('rmarkdown.pandoc.to') # 这里会返回"html" outputtype <- if (output_format == "html") "HTML" else "Not HTML"
The output type is r outputtype.
## 其他YAML字段的引用 除了`output`,你还能直接调用其他任意YAML字段,比如: ```{r} # 获取文档标题 doc_title <- rmarkdown::metadata$title # 获取作者名 doc_author <- rmarkdown::metadata$author
之后在文档里直接用 r doc_title 或者 r doc_author 就能插入对应内容了。
内容的提问来源于stack exchange,提问作者dmonder
相关产品推荐
相关产品推荐

