[英]set fig.cap to options$label
如何以編程方式在 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 內部函數.img.cap
函數。
```{r}
.img.cap = function(options) {
if(is.null(options$fig.cap)) options$label else options$fig.cap
}
assignInNamespace(".img.cap", .img.cap, ns="knitr")
```
它有幫助嗎?
```{r}
library(knitr)
knit_hooks$set(htmlcap = function(before, options, envir) {
if(!before) {
caption <- ifelse(is.character(options$htmlcap), options$htmlcap, options$label)
paste('<p class="caption">', caption, "</p>", sep="")
}
})
```
```{r Hello, htmlcap=TRUE}
library(ggplot2)
ggplot(diamonds,aes(price,carat)) + geom_point()
```
```{r, htmlcap="Hello again"}
ggplot(diamonds,aes(price,carat)) + geom_point()
```
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.