将 Fig.cap 设置为 options$label

2024-05-02

如何以编程方式在knitr hook 中设置图形标题?

如果没有明确定义,我想将图形标题设置为块标签。我已经阅读了knitr文档options http://yihui.name/knitr/options, options http://yihui.name/knitr/options, and hooks http://yihui.name/knitr/hooks,虽然我认为我理解其中的机制,但我无法让它发挥作用。

我的用例也许证明了这种行为的合理性:我的工作流程最近进行了调整,以开始我的数据和可视化探索Rmd文件。我将使用块进行清理、子集化等,然后为每个可视化使用一个示例块。这是快速而肮脏的,意味着最小的降价。当我查看报告(通常呈现为 PDF)时,我会查看一个图表并想直接查看其来源。虽然图形之前/之后的文本可以提供洞察力,但由于 LaTeX 图形规则,这并不是确定的事情。计算图形数量是可行的,但并不“容易”(并且对于许多图形来说会出现问题)。标题始终与图形一起出现,因此如果我可以默认使用块标签填充标题,那就太好了。 (是的,我有点懒。)

MWE 如下。

钩子代码运行得很好;钩子中返回的字符串正确显示。然而,图标题没有改变。例外:当存在未定义的块时fig.cap, all 随后的块的标题设置为第一个无标题的块名称;由于全球性,这并不令我感到惊讶opts_chunk,这样就可以了。

我怀疑它可能与“输出挂钩”和“块挂钩”有关,但这确实是每个块的事情,我不想modify情节,只需设置标题即可。

MWE:

---
title: "Document Title"
author: "My Name"
output:
  pdf_document:
    fig_caption: yes
---

# Header

```{r setup}
knit_hooks$set(autocap = function(before, options, envir) {
    if (before) {
        if (is.null(options$fig.cap)) {
            options$fig.cap <- options$label
            knitr::opts_current$set(fig.cap = options$label)
            knitr::opts_chunk$set(fig.cap = options$label)   # wrong!
            paste('Set: `', options$label, '`, `',
                  knitr::opts_current$get('fig.cap'), '`', sep = '')
        } else {
            paste('Kept: `', options$fig.cap, '`', sep = '')
        }
    }
})
opts_chunk$set(autocap = TRUE)
```

## No Plot

```{r textOnly}
1+1
```

## Caption Already Set

```{r someplot, fig.cap='someplot caption'}
plot(0)
```

## Caption Not Set

```{r anotherPlot}
plot(1)
```

这样可以吗?我只是修改了knitr内部函数.img.cap功能可以在这里找到 https://github.com/yihui/knitr/blob/master/R/hooks-html.R.

```{r}
.img.cap = function(options) {
  if(is.null(options$fig.cap)) options$label else options$fig.cap
}
assignInNamespace(".img.cap", .img.cap, ns="knitr")
```
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 Fig.cap 设置为 options$label 的相关文章

随机推荐