【发布时间】:2014-11-26 17:54:52
【问题描述】:
如何以编程方式在 knitr 钩子中设置图形标题?
如果没有明确定义,我想将图形标题设置为块标签。我已经阅读了 options、options 和 hooks 上的 knitr 文档,虽然我认为我了解其中的机制,但我无法让它发挥作用。
我的用例可能证明了这种行为的合理性:我的工作流程最近适应了在 Rmd 文件中开始我的数据和可视化探索。我将使用块进行清理、子集等,然后为每个可视化使用一个示例块。这是快速和肮脏的,意味着最小的降价。当我查看报告(通常呈现为 PDF)时,我会看一个图并想直接找到它的源代码。尽管图形之前/之后的文本可以提供洞察力,但由于 LaTeX 图形规则,这不是确定的事情。计算数字是可行的,但并不“容易”(并且对于许多数字来说会变得有问题)。标题总是与数字一起,所以如果我可以默认使用块标签填充标题,那就太好了。 (是的,我有点懒。)
MWE 在下方。
钩子代码运行得很好;钩子中返回的字符串正确显示。然而,图形标题并没有改变。 例外:当有一个未定义fig.cap的块时,所有后续块的标题都设置为第一个未加标题的块名称;由于opts_chunk 的全球性,这并不让我感到惊讶,所以它已经出局了。
我怀疑它可能与“输出挂钩”副“块挂钩”有关,但这确实是每个块的事情,我不想修改情节,只需设置标题.
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列表中的您的问题来到这里的。只有几个选项可以作为您需要的替代/扩展。查看kfigr包,它处理markdown 中的数字编号。我还在tex 上发布了一个相关问题,可能会有所帮助。 -
这肯定是相关的,如果没有其他方法,我可能会考虑它。谢谢!