【问题标题】:figure captions, references using knitr and markdown to html图形标题,使用 knitr 和 markdown 到 html 的引用
【发布时间】:2012-11-30 15:38:27
【问题描述】:

我正在编写一个 Rmd 文件,由 knitr 处理成 HTML。它包含一些生成图形的 R 块,这些图形在 HTML 中存储为数据 URI。

1) 如何为这样的图像添加标题?我想要一个标题,上面写着“图 3:等等等等”,其中“3”是自动生成的。

2) 我以后如何引用这张图片,即“如图 3 所示,等等等等”。

【问题讨论】:

标签: r markdown knitr r-markdown


【解决方案1】:
  1. 您可以使用 R 中的简单计数器创建图形编号;见one example here。问题在于 Markdown 渲染器是否会为您呈现图形标题:R Markdown v1 不会,但 v2(基于 Pandoc)会。
  2. 我不知道。没有直接的方法可以插入标签作为图形的标识符,因此可能无法使用纯 Markdown 交叉引用图形。一旦你遇到这样的问题,想想(1)我真的需要它吗? (2)如果打算做一个结构复杂的文档,我觉得还是直接用LaTeX比较好(Rnw文档)。

【讨论】:

    【解决方案2】:

    这里描述了实现这两种方法的一种方法:http://rmflight.github.io/posts/2012/10/papersinRmd.html

    这里描述了另一个(但我不知道它是否符合您的 #2)。 http://gforge.se/2014/01/fast-track-publishing-using-knitr-part-iii/

    【讨论】:

    • 由于我帖子中的新 rmarkdown 工作流需要 be changed,我目前已经实现了一些简单的函数来完成添加数字计数器的工作 - 尽管它不如前。这些函数存在于Gmisc-package 中,分别是figCapNofigCapNoLastfigCapNoNext——在first figCapNo 的文档中查看如何使用它。
    【解决方案3】:

    我迟到了,但我想提一下我最近创建的一个小程序包,用于与knitr 进行图形字幕和交叉引用。它被称为kfigr,您可以使用devtools::install_github('mkoohafkan/kfigr') 安装它。它仍在积极开发中,但主要功能已经存在。请务必查看小插图,它显示了一些使用示例并定义了一些用于图形标题和锚点的钩子(我以后可能会选择让包导入 knitr 并在加载时定义这些钩子)。

    编辑:kfigr 现在可以在 CRAN 上使用!

    【讨论】:

    • 看起来kfigr 将在bookdown 处于beta 测试阶段后立即过时:bookdown.org/yihui/bookdown。我鼓励人们尝试bookdown,因为kfigr 并不总是与pandoc 配合得很好,并且不支持markdown-->PDF。
    【解决方案4】:

    也很晚了,我改了易辉的建议here,他也在上面链接做参考。

    ```{r functions, include=FALSE}
    # A function for captioning and referencing images
    fig <- local({
        i <- 0
        ref <- list()
        list(
            cap=function(refName, text) {
                i <<- i + 1
                ref[[refName]] <<- i
                paste("Figure ", i, ": ", text, sep="")
            },
            ref=function(refName) {
                ref[[refName]]
            })
    })
    ```
    ```{r cars, echo=FALSE, fig.cap=fig$cap("cars", "Here you see some interesting stuff about cars and such.")}
    plot(cars)
    ```
    
    What you always wanted to know about cars is shown in figure `r fig$ref("cars")`
    

    【讨论】:

    • 谢谢@user3355146。唯一的问题是 fig$ref() 只能在生成图形后调用,即图形r fig$ref("cars") BELOW 显示...等等不起作用。但仍然是解决我的问题的一个非常好的解决方案。谢谢,
    【解决方案5】:

    另一种解决方案:

    https://github.com/adletaw/captioner

    来自自述文件:

    captioner() returns a captioner function for each set of figures, tables, etc. that you want to create. See the help files for more details.
    
    For example:
    
    > fig_nums <- captioner()
    
    > fig_nums("my_pretty_figure", "my pretty figure's caption")
    
    "Figure 1: my pretty figure's caption"
    
    > fig_nums("my_pretty_figure", cite = TRUE)
    

    【讨论】:

      【解决方案6】:

      我在 bookdown 中做了这两个(数字+参考)。我在文件头的输出部分添加了:

      output:
        bookdown::html_document2:
          fig_caption : TRUE
      

      然后我在 R 代码块中创建了一个图形,如下所示:

      {r, my-fig-label,echo=F, eval=T, fig.align = 'center', fig.cap="This is my caption"}
      knitr::include_graphics(here::here("images", "my_image.png"))
      

      这会在您的图形下方生成一个自动编号。可以通过\@ref(fig:my-fig-label)参考。

      【讨论】:

        【解决方案7】:

        使用官方bookdown文档4.10 Numbered figure captions

        ---
        output: bookdown::html_document2
        ---
        
        ```{r cars, fig.cap = "An amazing plot"}
        plot(cars)
        ```
        
        ```{r mtcars, fig.cap = "Another amazing plot"}
        plot(mpg ~ hp, mtcars)
        ```
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-11-02
          • 2013-06-14
          • 1970-01-01
          • 2013-11-05
          • 2013-05-13
          相关资源
          最近更新 更多