使用knitr、r markdown和pandoc(pander)的块引用
我在尝试引用r标记文档中的块时遇到问题,我正在尝试使用pandoc.convert将其转换为.pdf 如果我在文本中包含使用knitr、r markdown和pandoc(pander)的块引用,r,knitr,pandoc,r-markdown,R,Knitr,Pandoc,R Markdown,我在尝试引用r标记文档中的块时遇到问题,我正在尝试使用pandoc.convert将其转换为.pdf 如果我在文本中包含\label{mylabel},我可以通过\ref{mylabel}引用它。然而,我想我也可以同样地引用一个块(或块中的表/图)——但我运气不好 例如,对于区块: ```{r myplot, echo=FALSE, warning=FALSE} plot(cars) ``` 我想我可能会把\ref{myplot}或者\ref{fig:myplot}或者甚至是一个内部标记参考[
\label{mylabel}
,我可以通过\ref{mylabel}
引用它。然而,我想我也可以同样地引用一个块(或块中的表/图)——但我运气不好
例如,对于区块:
```{r myplot, echo=FALSE, warning=FALSE}
plot(cars)
```
我想我可能会把\ref{myplot}
或者\ref{fig:myplot}
或者甚至是一个内部标记参考[car plot](myplot)
。文档似乎提到了标签是基于块的名称创建的,这些是针对类似问题建议的格式。但似乎都不管用
类似地,对于表(我使用pander创建),我有如下块:
```{r car_sum}
library(pander)
car_summary<-summary(cars)
pander(car_summary, caption = "This is a summary of cars")
```
`{r car\u sum}
图书馆(潘德尔)
汽车总结:一切皆有可能!!
请看哪个和你描述的一样。只要保存并编织它,就可以看到它的作用。。。由于某些原因,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();
}
})
````
或
作为块选项:
```{r car-summary, echo=T, warning=FALSE, anchor=T, pgbreak=T, echo.label=F}`
然后
即使是“页面顶部”链接和“页面底部”标记和标签……参考图形的更简单解决方案:将其放入fig.cap
字段(双击\\
以转义第一个\
):
然后,使用\autoref{mylabel}
参考正文中的图
我正在使用RStudio和Rmarkdown。完整RMD文件:
---
output: pdf_document
---
```{r fig.cap="\\label{mylabel}Caption of my figure."}
plot(1)
```
The generated figure is \autoref{mylabel}.
在pandoc中,您必须在绘图标题中显式地编写一个latex\label{}
,并在文本中引用它。它只对乳胶有效。我希望我错了。我不确定降价是否可行。我想降价最常见的问题是人们对它的要求太高了。。。LaTeX用户经常想到“见表2”,而降价用户应该只想到“见下表/上表”。乳胶可以是非线性的,降价最好是线性的。但愿我也错了。@Yihui,我正在看LazyWeave,想着你的引擎/挂钩设置。。。我在下面答案中的概念肯定可以整合到一种形式,比如乳胶包。还有另外一个问题,我相信你提到了html和Latex的合并。。。啊,是的,有一项计划是创造一种降价的味道,添加一些学术写作所需的功能(科学论文、博客等),其中一个缺失的功能是图形和表格的在线链接/引用,而没有扩展太多的标记。有关更多详细信息,请参阅github。欢迎访问SO,并感谢您分享您的解决方案。我认为这很聪明。我“稍微”编辑了你的帖子,使它更清晰,可读性更好。如果您不同意,请随时回滚编辑。这对我来说很有效,并且比当前的“获胜”答案简单得多。谢谢在序言中不添加hyperref包的情况下,这是否有效?
`r chunkref("car-summary")`
fig.cap="\\label{mylabel}Caption of my figure."
---
output: pdf_document
---
```{r fig.cap="\\label{mylabel}Caption of my figure."}
plot(1)
```
The generated figure is \autoref{mylabel}.