【问题标题】:Using table caption on R markdown file using knitr to use in pandoc to convert to pdf在R markdown文件上使用表格标题,使用knitr在pandoc中使用以转换为pdf
【发布时间】:2013-02-21 21:16:36
【问题描述】:

我想知道是否可以在 .Rmd 文件中使用 knitr 的表格标题,如图形标题?

我看到了图形标题的选项,但我看不到表格标题的选项。我还想删除诸如 "% latex table generated in R 2.15.2 by xtable 1.7-0 package % Wed Mar 06 15:02:11 2013" 之类的消息。

我使用X表创建表:我使用的示例代码如下:

```{r table2, results='asis', message=FALSE} 
library(xtable) 
print(xtable(head(iris))) 
``` 

我通过pandoc处理后得到的表如下:

我尝试在 Rmd 文件中使用 message=FALSE 来消除上面显示的消息。我还想知道是否可以在 Rmd 中自动为表格添加标题?

我的标题是指下面的内容(这是针对数字的),并且数字会自动更新。

此输出是pdf使用knitr创建的markdown文件生成的pdf的快照。

谢谢。

【问题讨论】:

  • 我认为您寻求的大部分答案都是通过使用?xtable?print.xtable。看typecaption
  • 对于LaTeX的评论,问题已经在xtable解决了;见github.com/yihui/knitr-book/issues/3xtable 的新版本现在在 CRAN 上)
  • @Yihui:我从 CRAN 升级了我的 xtable,现在我有了最新版本,我仍然得到相同的输出。我使用了代码
    {r table2, results='asis', message=FALSE,echo=FALSE}  library(xtable)  print(xtable(head(iris)))  
    。我做错什么了吗?
  • @Jdbaba 阅读文档?print.xtable 并查看comment 参数
  • 所以,这里是解决方案: print(xtable(yourtable, comment = getOption("xtable.comment", FALSE))

标签: r markdown knitr pandoc


【解决方案1】:

我知道这是多年前的事了,但如果有像我这样的人来到这里寻找答案,我会告诉你我找到的相同问题的答案。

真的很简单,我们只需要输入:

```{r mostrarSerie,results='asis',echo=FALSE}
library(xtable)
options(xtable.floating = TRUE)
print(xtable(AP, digits = 0,caption = "Serie de tiempo"),comment = FALSE)
```

重要的一步是输入选项xtable.floating = TRUE,因为这样LaTeX会识别表格。

【讨论】:

    【解决方案2】:

    您可以使用xtable 完成此操作。将caption 添加到xtablecomment=FALSEprint 函数。

    print(
      xtable(
        head(iris),
        caption = 'Iris data'
      ),
      comment = FALSE,
      type = 'latex'
    )
    

    请参阅 xtableprint.xtable 文档。

    【讨论】:

      【解决方案3】:

      您可以在 markdown 中插入带有自动编号标题的表格,以便使用直 knitr 代码使用 pandoc 进行处理。将此代码 sn-p 插入 .rmd 文件的顶部:

      ```{r setup, echo=FALSE}
      tn = local({
        i = 0
        function(x) {
          i <<- i + 1
          paste('\n\n:Table ', i, ': ', x, sep = '')
          # The : before Table tells pandoc to wrap your caption in <caption></caption>
        }
      })
      knit_hooks$set(tab.cap = function(before, options, envir) {
        if(!before)
          tn(options$tab.cap)
      })
      default_output_hook = knit_hooks$get("output")
      knit_hooks$set(output = function(x, options) {
        if (is.null(options$tab.cap) == F)  
          x
        else
          default_output_hook(x,options)
      })
      ```
      

      插入编号表标题:

      ```{r myirischunk, tab.cap="This is the head of the Iris table"}
      kable(head(iris))
      ```
      

      通过覆盖输出挂钩并使用 tab.cap,您无​​需使用 results='asis' 来混淆块选项。

      谢谢针织者!

      PS:如果您想转换为 Latex/pdf,您可能希望 Latex 为您的表格编号。在这种情况下,您可以将 tn(options$tab.cap) 更改为 paste('\n\n:', options$tab.cap, sep='') - 但我尚未对此进行测试。

      【讨论】:

      • 我用运行 rmarkdown_0.3.3 的 RStudio 试过这个;在\n\n 之后我不需要:。因为 : 正在打印。但是,我无法弄清楚如何在表格之前(上方)获取标题。我怎样才能修改钩子以使其工作?对于数字,我可以使用knit_hooks$set(plot = function(x, options) { paste('&lt;figure&gt;&lt;figcaption&gt;', options$fig.cap, '&lt;/figcaption&gt;&lt;img src="', opts_knit$get('base.url'), paste(x, collapse = '.'), '"&gt;&lt;/figure&gt;', sep = '')
      • 我更改了:paste('\n\n:Table ', i, ': ', x, sep = '') to paste('\n\n&lt;caption&gt;Table ', i, ': ', x, sep = '','&lt;/caption&gt;&lt;p&gt;&lt;/p&gt;') 在标题后添加空格,删除打印的 :,并保留标题格式
      • @DeanK:如果我想向 TOC 添加简短版本的标题,例如tab.scap,有什么建议吗?另见github.com/yihui/knitr/issues/1679
      【解决方案4】:

      如果你不坚持使用 LaTeX/HTML-only 解决方案和其他很棒的 xtable 包,你可以通过 Pandoc 的降价实现相同的效果。一种选择是在表格下方添加caption manually,或使用我的R Pandoc writer package

      > library(pander)                         # load pkg
      > panderOptions('table.split.table', Inf) # not to split table
      > set.caption('Hello Fisher!')            # add caption
      > pander(head(iris))                      # show (almost) any R object in markdown
      -------------------------------------------------------------------
       Sepal.Length   Sepal.Width   Petal.Length   Petal.Width   Species 
      -------------- ------------- -------------- ------------- ---------
           5.1            3.5           1.4            0.2       setosa  
      
           4.9            3.0           1.4            0.2       setosa  
      
           4.7            3.2           1.3            0.2       setosa  
      
           4.6            3.1           1.5            0.2       setosa  
      
           5.0            3.6           1.4            0.2       setosa  
      
           5.4            3.9           1.7            0.4       setosa  
      -------------------------------------------------------------------
      
      Table: Hello Fisher!
      

      然后使用 Pandoc 将此 markdown 文件转换为 HTML、LaTeX、docx、odt 或任何其他流行的文档格式。

      【讨论】:

      • 我正在尝试使用你漂亮的pander 包,但找不到控制表格标题位置的选项(默认情况下,位置在表格下方,但我需要在上面)。我查看了文档和网络,但无济于事。有什么建议吗? (我知道我可以独立生成标题作为 R Markdown 文本,但是标题和表格之间存在边距问题。能够同时指定位置(上方/下方)和边距会很好。 )
      • @AleksandrBlekh 具有表格上方的标题不是有效的降价语法,它应该保留在表格下方。另一方面,您可以将其呈现在表格/图像上方,例如HTML 或 LaTeX。对于前者,使用 JavaScript,对于后者,我建议使用 captionfloatrow LaTeX 包,如 \floatsetup[table]{capposition=top}
      • 感谢您的快速回复和好建议!我尝试使用 pander 和 R Markdown 格式的原因之一是能够根据需要生成多格式输出。在这方面走特定格式的路线并不是最优的(没有单一的代码库);我实际上以特定于 LaTeX 的方式实现了一些东西,为此花了一段时间。无法想象花更多的时间来支持 HMTL 等。实际上,我找到了一个解决方案:我需要 pandoc 1.13+,其中包含此修复(标题应该在顶部):在此处搜索“表格上方的表格标题”: johnmacfarlane.net/pandoc/releases.html.
      • @AleksandrBlekh 这个修复听起来不错,但对我来说似乎只有 LaTeX。 RStudio 已经发布了一些二进制文件:s3.amazonaws.com/rstudio-buildtools/pandoc-1.13.1.zip 无论如何,您仍然可以使用带有多种输出格式和“表格/图像上方的标题”的 markdown,但是这样您就必须为 HTML、PDF 等开发自定义模板。这是一个时间投资,您可以将其用于所有未来的报告,因此除了上面提到的单行 LaTeX 调用之外,您还需要在自定义 HTML 模板中进行另一个单行 JavaScript 调用以将标题移动到对象上方。
      • @AleksandrBlekh 您上面链接的更改日志在“LaTeX writer”部分下方有引用部分,所以我认为此更新与其他输出格式无关。另外,我认为字幕的降价规范(将其放在表格下方)也没有改变。关于“模板”:可能我应该改写“样式表”,参见例如--template-H johnmacfarlane.net/pandoc/README.html#general-writer-options 简而言之:您可以覆盖 Pandoc 创建文档的捆绑设计。
      猜你喜欢
      • 2013-05-13
      • 2013-05-01
      • 2013-07-27
      • 2013-06-14
      • 1970-01-01
      • 2013-04-07
      • 1970-01-01
      相关资源
      最近更新 更多