如何以编程方式在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)
```