图标题,使用knitr和markdown到html的引用

时间:2012-12-12 20:36:10

标签: r markdown knitr r-markdown

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

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

2)我以后如何参考这张图片,即“你可以在图3中看到,等等等等。”

6 个答案:

答案 0 :(得分:25)

我来晚了,但是我想提一下我最近建立的一个小包,用于制作人物标题和交叉引用knitr。它被称为kfigr,您可以使用devtools::install_github('mkoohafkan/kfigr')进行安装。它仍在积极开发中,但主要功能在那里。请务必查看小插图,它会显示一些用法示例,并为图标题和锚点定义一些挂钩(我稍后可能会选择将包导入knitr并在加载时定义这些挂钩)。

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

答案 1 :(得分:16)

  1. 您可以使用R中的简单计数器创建图号;见one example here。问题是降价渲染器是否会为您呈现数字标题:R Markdown v1不会,但v2(基于Pandoc)将会。
  2. 我不知道。没有直接的方法来插入标签作为数字的标识符,因此可能无法将参考数字与纯Markdown交叉。一旦你遇到这样的问题,想想(1)我真的需要吗? (2)如果它是一个结构复杂的文件,我认为最好直接使用LaTeX(Rnw文件)。

答案 2 :(得分:11)

也很晚,我改变了Yihuis的建议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")`

答案 3 :(得分:5)

这里描述了执行这两种操作的一种方法:http://rmflight.github.io/posts/2012/10/papersinRmd.html

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

答案 4 :(得分:2)

另一种解决方案:

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)

答案 5 :(得分:1)

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

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

{r, my-fig-label,echo=F, eval=T, fig.align = 'center', fig.cap="这是我的标题"} knitr::include_graphics(here::here("images", "my_image.png"))

这会在您的数字下生成一个自动数字。您可以使用以下语法引用它:

@ref(fig:my-fig-label).

最好的问候, 让-吕克。