我想知道是否有一个技巧可以将当前日期放在.rmd
要处理的文档的YAML前端knitr
和rmarkdown
包中.我以前在我的维基页面顶部有以下行,
_baptiste, `r format(Sys.time(), "%d %B, %Y")`_
它将在html输出中转换为2014年5月3日的baptiste.现在,我想利用由提供的高级pandoc包装器rmarkdown
,但在YAML头中使用r代码似乎不起作用:
--- title: "Sample Document" output: html_document: toc: true theme: united date: `r format(Sys.time(), "%d %B, %Y")` author: baptiste --- Error in yaml::yaml.load(front_matter) : Scanner error: while scanning for the next token at line 6, column 7 found character that cannot start any token at line 6, column 7 Calls:... output_format_from_yaml_front_matter -> parse_yaml_front_matter -> -> .Call
任何解决方法?
这有点棘手,但你只需要date
通过引用内联R表达式使字段在YAML中有效,例如
date: "`r format(Sys.time(), '%d %B, %Y')`"
然后解析错误将消失,日期将在降价输出中生成,因此Pandoc可以使用来自的值Sys.time()
.
刚刚关注@Yihui.奇怪的是,我发现:
'`r format(Sys.Date(), "%B %d, %Y")`'
效果比:
"`r format(Sys.Date(), '%B %d, %Y')`"
对于后者,RStudio选择'
在HTML和PDF输出之间切换时更改外部引号,从而破坏代码.
一种解决方法是使用该brew
包并将您的YAML前端内容编写为brew
模板.
--- title: "Sample Document" output: html_document: toc: true theme: united date: <%= format(Sys.time(), "%d %B, %Y") %> author: baptiste ---
您现在可以使用一个brew_n_render
函数来预处理doc brew
,然后运行rmarkdown
.
brew_n_render <- function(input, ...){ output_file <- gsub("\\.[R|r]md$", ".html", input) brew::brew(input, 'temp.Rmd'); on.exit(unlink('temp.Rmd')) rmarkdown::render('temp.Rmd', output_file = output_file) }
为了使用KnitHTML
RStudio中的按钮,您可以编写一个自动brew
用作预处理器的自定义输出格式.使用brew
预处理可确保knitr
在预处理阶段保持文档中的代码块不受影响.理想情况下,rmarkdown
程序包应在其API中公开元数据,并允许用户通过自定义函数运行它.
或者只引用双引号,反之亦然,这很有效.
--- title: "Sample Document" output: html_document: toc: true theme: united date: '`r format(Sys.time(), "%d %B, %Y")`' author: baptiste ---