使用knitr、r markdown和pandoc(pander)的块引用

使用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}或者甚至是一个内部标记参考[

我在尝试引用r标记文档中的块时遇到问题,我正在尝试使用pandoc.convert将其转换为.pdf

如果我在文本中包含
\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}.