【问题标题】:Setting HTML meta elements with knitr使用 knitr 设置 HTML 元元素
【发布时间】:2013-01-02 14:45:58
【问题描述】:

我正在使用 knitr 生成 HTML 报告,并且我想包含作者和生成日期元标记。

我的 Rhtml 页面看起来像这样。

<html>
<head>
  <meta name="author" content="<!--rinline Sys.getenv('USERNAME') -->">
  <meta name="date" content="<!--rinline as.character(Sys.time()) -->"> 
</head>
<body>
</body>
</html>

不幸的是,我knit("test.Rhtml")之后,knitr生成的HTML是

  <meta name="author" content="<code class="knitr inline">RCotton</code>">
  <meta name="date" content="<code class="knitr inline">2013-01-02 14:38:16</code>"> 

这不是有效的 HTML。我真正想要生成的是类似

  <meta name="author" content="RCotton">
  <meta name="date" content="2013-01-02 14:38:16">

我可以生成没有 code 标记的 R 代码吗?或者有没有其他方法来指定标签属性(比如这些内容属性)?

到目前为止,我最不坏的计划是使用 readLines/str_replace/writeLines 手动修复内容,但这似乎相当笨拙。

【问题讨论】:

  • 你也可以简单地brew那个文件。

标签: html r knitr literate-programming


【解决方案1】:

另一种(未记录的)方法是在您的内联代码周围添加 I() 以按原样打印字符而不使用 &lt;code&gt; 标记,例如

<html>
<head>
  <meta name="author" content="<!--rinline I(Sys.getenv('USERNAME')) -->">
  <meta name="date" content="<!--rinline I(as.character(Sys.time())) -->"> 
</head>
<body>
</body>
</html>

【讨论】:

  • 我相信新添加的knit_expand功能在这里会很理想。通过先通过knit_expand 再通过knit2html 传递文件,您可以轻松实现brewknitr 的最佳性能。或许@Yihui 可以补充一下。
  • @DieterMenne 当然,我会添加到网站上; @Ramnath 在这种情况下,如果文件中有更多块,&lt;!--rinline --&gt; 不是一个坏选择,knit_expand() 将是knit() 之前的附加步骤
  • @yihui 有道理。但是 knit_expand 提供了类似 brew 的功能,这是 Sweave 用户长期以来一直在寻找的。减少工具链的一种方法是允许用户指定opts_knit$set(expand = TRUE),它将在编织之前通过knit_expand 运行文档。或者,它可以使用文档挂钩来实现,我认为这更有意义,因为 knit_expand 然后可以使用来自父框架的数据。
【解决方案2】:

不是很好,但似乎无需添加钩子就可以工作:

<head>
<!--begin.rcode results='asis', echo=FALSE
cat('
  <meta name="author" content="', Sys.getenv('USERNAME'), '"> 
  <meta name="date" content="', as.character(Sys.time()),'-->"> 
',sep="")
end.rcode-->

</head>

【讨论】:

    猜你喜欢
    • 2012-07-19
    • 2011-08-11
    • 1970-01-01
    • 2014-01-12
    • 1970-01-01
    • 2011-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多