繁体   English   中英

使用knitr,r markdown和pandoc(pander)进行块参考

[英]Chunk reference using knitr, r markdown and pandoc (pander)

我无法尝试在ar markdown文档中引用块,我试图使用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")
```

当使用'pandoc.convert'从.md文件转换为.pdf时,表格会给出一个很好的标题'表3这是汽车的摘要'并且已编号,但我似乎无法使用该标签作为参考\\ref{car_sum}它总是显示为'??'。 有些论坛似乎提到你必须在标签名称之前加入'tab:'或'fig:',但这对我来说仍然不起作用。

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

一切皆有可能!!

请看看你所描述的这个要点 只需保存并编织它就可以看到它的运行......出于某种原因,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")`

即使是“页面顶部”链接和“页面底部”标记和标签......

更简单的解决方案参考数字:把它放在fig.cap字段中(双\\\\以逃避第一个\\ ):

fig.cap="\\label{mylabel}Caption of my figure."

然后,使用\\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}.

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM