交叉引用预订:: html_document2不起作用

时间:2019-08-12 23:42:28

标签: r r-markdown pandoc bookdown cross-reference

我正在Rmarkdown中研究论文,并且正在使用bookdown::html_document2来编织输出。交叉引用图和表可以使用常用的Bookdown语法,例如\@ref(tab:example_table)。但是,无法交叉引用章节的章节/标题:\@ref(introduction)不起作用。我将以??结尾,这很奇怪,因为链接指向正确的标记:/example_path/example_filename.html#introduction。我正在处理一个文档。

我检查了源代码,并且章节标题的标签ID也正确。当我使用Pandoc的本机语法引用章节/标题时,它确实起作用:[introduction]有效。但是,这将打印介绍部分/标题的标签,而不是标题本身,因此以“介绍”代替大写“ I”的“介绍”。一个明显的解决方法是使用[Introduction][introduction],但这在我的案例中违反了交叉引用的目的。我也尝试给我的章节节/标题自定义标签,但这也不起作用。它也不适用于bookdown::pdf_document2

根据“使用R Markdown编写书籍”中的this部分,我使用的语法应该可以正常工作,所以我在这里缺少什么?

我正在使用Pandoc版本2.7.3

编辑

已删除会话信息,因为它与问题无关。

编辑

@RalfStubner请求了一个修补程序(我应该首先提供它-感谢Ralf的建议!):

---
title: "Document Title"
author: "Jono3030"
date: "Last updated: `r Sys.time()`"
output:
  bookdown::html_document2:
    number_sections: no
  bookdown::pdf_document2:
    keep_tex: no
    number_sections: no
  bookdown::word_document2: default
---

# Introduction

This is the introduction

# Chapter_one

This is chapter one.

# Chapter_two

This is chapter two. Trying to reference the Introduction.

This does not work: \@ref(introduction)

This works: [Introduction][introduction]

This does not result in the title but in the tag: [introduction]

Rendered output

这是我收到的错误消息:

Output created: mre.html
Warning message:
The label(s) introduction not found

但是标记似乎已根据html正确分配:

<div id="introduction" class="section level1">
<h1>Introduction</h1>
<p>This is the introduction</p>
</div>

这是href:

<p>This does not work: <a href="#introduction"><strong>??</strong></a></p>
<p>This works: <a href="#introduction">Introduction</a></p>
<p>This does not result in the title but in the tag: <a href="#introduction">introduction</a></p>

在创建mre的过程中,我还注意到,如果未禁用部分编号,则\@ref(introduction)的行为会有所不同。在这种情况下,\@ref(introduction)返回段号,即'1'。

mre:

---
title: "Document Title"
author: "Jono3030"
date: "Last updated: `r Sys.time()`"
output:
  bookdown::html_document2: default
  bookdown::pdf_document2:
    keep_tex: no
    number_sections: no
  bookdown::word_document2: default
---

# Introduction

This is the introduction

# Chapter_one

This is chapter one.

# Chapter_two

This is chapter two. Trying to reference the Introduction.

This does work - returns number: \@ref(introduction)

This works: [Introduction][introduction]

This does not result in the title but in the tag: [introduction]

Rendered output

2 个答案:

答案 0 :(得分:1)

R-Markdown / bookdown中的部分标题具有实际文本(例如@someProperty)和ID。该ID可以是自动的(在示例中为Hello World),也可以是手动定义的(例如hello-world)。有几种方法可以交叉引用一个部分:

  • Hello World {#hello-world-section},即\@ref(ID)\@ref(hello-world)。如果该部分已编号,这将产生对该部分的数字引用。否则会产生错误/警告。

  • \@ref(hello-world-section),即[section text]。您可以通过实际文本来引用一节。该节标题的实际文本也将是链接文本。

  • [Hello World],即[link text][section text]。您仍使用节文本,但使用备用链接文本。

  • [see above][Hello World],即[link text](#ID)[see above](#hello-world)。在这里,您将使用部分ID并指定实际的链接文本。

请注意,没有可以指定ID并自动获取实际文本的模式!另外,您从不指定ID括号,而总是在括号中。

顺便说一句,我发现书本中的cross-reference a section很清楚。但是由于您似乎误会了它,因此您可以suggest an improved wording

答案 1 :(得分:0)

参考ID不适用于ID中的_:例如{#hello_world}\@ref(hello_world)不起作用,但是{#helloworld}\@ref(helloworld)应该可以