gpt4 book ai didi

r - 使用Knitr,R Markdown和Pandoc(Pander)的 block 引用

转载 作者:行者123 更新时间:2023-12-03 12:14:04 27 4
gpt4 key购买 nike

我在尝试引用r markdown文档中的块时遇到麻烦,我试图使用pandoc.convert将其转换为.pdf。

如果我在文本中包括\label{mylabel},则可以通过\ref{mylabel}引用它。但是,我认为我可能能够类似地引用一个块(或块中的表/图形),但是没有运气。

例如,对于块:

```{r myplot, echo=FALSE, warning=FALSE}
plot(cars)
```

我虽然可以将 \ref{myplot}\ref{fig:myplot}甚至是内部markdown引用 [car plot](myplot)放入。该文档似乎提到标签是根据块的名称创建的,这些是针对类似问题建议的格式。但是似乎没有任何作用。

同样,对于表(我使用pander创建的表)-我有类似以下的块:
```{r car_sum}
library(pander)
car_summary<-summary(cars)
pander(car_summary, caption = "This is a summary of cars")
```

当使用'pandoc.convert'从.md文件转换为.pdf时,这些表会被赋予一个漂亮的标题'Table 3这是汽车的摘要'并被编号,但我似乎无法将标签用作引用 \ref{car_sum},它始终显示为“??”。一些论坛似乎提到您必须在标签名称前添加“tab:”或“fig:”,但这对我仍然不起作用。

可以在文本中进行块引用吗?如果是这样,则需要键入什么才能正确执行此操作,以便它可以在最终文档中显示“见表2”之类的内容。

最佳答案

一切皆有可能!!

请参阅this gist,它描述了您的内容。只需保存并编织起来即可查看它的实际效果...由于某种原因,Rpub不想发布它(未知错误)。

通过pandoc将knitr生成的.html转换为.pdf的测试也可以正常工作,这是一个很好的奖励!

主力是:

```{r setup, echo=FALSE, results='hide'}
chunkref <- local({
function(chunklabel) {
sprintf('[%s](#%s)', chunklabel, chunklabel )
}
})

secref <- local({
function(seclabel) {
sprintf('[%s](#%s)', seclabel, seclabel )
}
})

pgref <- local({
function(n)
sprintf('[Page-%i](#Page-%i)', n, n)
})

sec <- local({
function(seclabel) {
sprintf('# <a name="%s"/> %s', seclabel, seclabel )
}
})

pgcount <- local({
pg <- 0
function(inc=T) {
if( inc ) { pg <<- pg + 1 }
return( pg )
}
})

pganchor <- local({
function(doLabel=T) {
if( doLabel) {
sprintf('\n-----\nPage-%i\n<a name="Page-%i"/>\n', pgcount(inc=F), pgcount() )
} else {
sprintf('\n<a name="Page-%i"/>\n', pgcount() )
}
}
})

knit_hooks$set( anchor = function(before, options, envir) {
if ( before ) {
sprintf('<a name="%s"/>\n', options$label )
}
})

knit_hooks$set( echo.label = function(before, options, envir) {
if ( before ) {
sprintf('> %s', options$label )
}
})

knit_hooks$set( pgbreak = function(before, options, envir) {
if ( !before ) {
pganchor();
}
})
````

允许创建多种类型的引用...
Inline: `r sec("Introduction")` then `r secref("Introduction")`

要么

作为块选项:
```{r car-summary, echo=T, warning=FALSE, anchor=T, pgbreak=T, echo.label=F}`

然后
`r chunkref("car-summary")`

甚至“页面顶部”链接和“页面底部”标记和标签...

关于r - 使用Knitr,R Markdown和Pandoc(Pander)的 block 引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17167140/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com