knitr / pandoc:对章节,

时间:2016-06-16 21:58:57

标签: r rstudio knitr r-markdown pandoc

[环境:Win 7,R 3.2.3,RStudio,最新]

我有一个knitr .Rmd文档作为文章,我想标记部分,如

## Mean differences {#sec:meandiff}

然后引用该部分,使其在文本中显示为“在3.2节中,我讨论......”我可以看到使用bookdown这样的事情是可能的,并且有一些提到“内部链接“在pandoc文档中,http://rmarkdown.rstudio.com/authoring_pandoc_markdown.html#links,但我无法使其工作。我记得在与RStudio相关的文档或博客中看到了一些内容,但现在找不到它。

我尝试了各种各样的事情,比如

In Section (@#sec:meandiff) ...
In Section (@sec:meandiff) ...
In Section (#sec:meandiff) ...

但是,生成的PDF将其呈现为

In Section (@#sec:meandiff) ...
In Section (???) ..., with: pandoc-citeproc: reference sec:meandiff not found
In Section (#sec:meandiff) ...

我正在使用的YAML标题是:

---
title: "My title"
author: Moi Meme
date: '`r format(Sys.time(), "%B %d, %Y")`'
output:
  pdf_document:
    fig_caption: yes
    keep_tex: yes
    number_sections: yes
    includes:
        in_header: mystyles.tex

没有那么多这样的交叉引用我不能手动完成它们,但是如果我错过了一些关于pandoc完成它们的语法的话会更容易。

2 个答案:

答案 0 :(得分:3)

啊,因为我正在生成LaTeX,我可以使用它来进行交叉引用,而\label是由markdown / pandoc生成的

在序言中,

\newcommand*{\secref}[1]{Section~\ref{#1}}

然后在文本中

In \secref{sec:mean-diff} ...
...

## Mean differences {#sec:meandiff}

答案 1 :(得分:2)

您可以使用pandoc-secnos过滤器套件中的pandoc-xnos。该部分

My Title
========
使用@sec:my-title引用

。另外,可以将ID明确分配给标题,例如

My Title {#sec:title}
========

,使用@sec:title进行引用。通过向pandoc命令行调用中添加--filter pandoc-secnos来应用过滤器。

这种方法的好处是可以输出多种不同格式(LaTeX / pdf,html,epub,docx等)。