如何在R Markdown的footer.html中调用YAML头部的作者字段
嘿,这个问题我之前也碰到过,R Markdown默认不会自动把YAML里的变量传给外部的footer.html文件,不过有几个简单的办法可以解决:
方法一:直接在Rmd里动态生成footer(不用单独的footer.html)
这个方法最省事,不用额外的模板文件,直接在文档末尾加个代码块,把author变量插进去:
首先,你的Rmd文件可以改成这样:
--- title: "title" author: "Mister-A" output: html_document --- content ```{r echo=FALSE, results='asis'} # 直接获取YAML里的author字段,生成footer的HTML cat(paste0('<footer style="margin-top: 2em; padding-top: 1em; border-top: 1px solid #eee;">I am ', rmarkdown::metadata$author, '</footer>'))
这里用`rmarkdown::metadata$author`可以直接读取YAML里的author值,`results='asis'`让R把输出的内容直接当成HTML渲染,不会转义。 ## 方法二:用模板渲染单独的footer.html文件 如果你一定要保留单独的`footer.html`文件,可以把它改成一个模板,用`whisker`包来替换变量: 1. 先安装`whisker`包(如果还没装的话): ```r install.packages("whisker")
- 把你的
footer.html改成模板格式,用{{ author }}作为变量占位符:
<footer style="margin-top: 2em; padding-top: 1em; border-top: 1px solid #eee;"> I am {{ author }} </footer>
- 在Rmd里添加代码,渲染这个模板并插入到文档末尾:
--- title: "title" author: "Mister-A" output: html_document --- content ```{r echo=FALSE, results='asis'} # 读取footer模板文件 footer_template <- readLines("footer.html") # 用whisker渲染模板,传入author变量 rendered_footer <- whisker::whisker.render(footer_template, list(author = rmarkdown::metadata$author)) # 输出渲染后的footer cat(rendered_footer)
## 方法三:自定义HTML模板(进阶) 如果需要更灵活的控制整个页面的结构,可以自定义HTML模板,在模板里直接调用YAML的author字段: 1. 复制R Markdown默认的HTML模板(可以用`rmarkdown::html_template()`找到路径),然后在模板的合适位置(比如末尾)添加footer部分,用`{{ author }}`调用变量: ```html <!-- 模板里的其他内容 --> <footer> I am {{ author }} </footer> </body> </html>
- 在Rmd的YAML里指定这个模板:
--- title: "title" author: "Mister-A" output: html_document: template: custom_template.html ---
这样渲染的时候,模板里的{{ author }}会自动被YAML里的作者名替换。
这几个方法里,方法一最适合快速解决问题,方法二适合需要保留单独footer文件的场景,方法三适合需要自定义整个页面布局的情况。
内容的提问来源于stack exchange,提问作者Yan Holtz
相关产品推荐
相关产品推荐

