rmarkdown中的内部链接不起作用

时间:2015-11-25 10:16:59

标签: r pdf-generation r-markdown

我使用rmarkdown来呈现pdf文档。现在我想在文本中添加内部链接。

rmarkdown的帮助页面中,它表示内部链接定义为:

See the [Introduction](#introduction).

当我使用例如下一个代码应该有两个内部链接:link1和link2。两者都没有联系。有什么明显的东西我做错了吗?非常感谢提前!

   ---
title: "Test"
author: "test test"
output:
  pdf_document:
    latex_engine: xelatex
    number_sections: yes
    toc: yes
    toc_depth: 3
  html_document:
    css: tables.css
    number_sections: yes
    theme: cerulean
    toc: yes
    toc_depth: 3
subtitle: test test test
mainfont: Calibri Light
fontsize: 12pt
header-includes:
- \usepackage[dutch]{babel}
- \usepackage{fancyhdr}
- \pagestyle{fancy}
- \fancyfoot[LE,RO]{this is a fancy foot}
- \usepackage{dcolumn}
- \usepackage{here}
- \usepackage{longtable}
- \usepackage{caption}
- \captionsetup{skip=2pt,labelsep=space,justification=justified,singlelinecheck=off}
---

# start

```{r results="asis",tidy=FALSE,eval=TRUE,echo=FALSE,message=FALSE, error=FALSE, warning=FALSE, comment = NA}
cat("click here: [link1](#test 1)")
```

click here: [link2](#test 1)

\pagebreak

#test 3

\pagebreak

#test 2

\pagebreak

#test 1

5 个答案:

答案 0 :(得分:29)

您没有正确设置锚点。

尝试以下方法:

# start

```{r results="asis",tidy=FALSE,eval=TRUE}
cat("click here: [link1](#test1)")
```

click here: [link2](#test1)

\pagebreak

# test 3 {#test3}

\pagebreak

#test 2 {#test2}

\pagebreak

#test 1 {#test1}

答案 1 :(得分:10)

Rmarkdown PDF输出中的内部链接有一些棘手的规则,在备忘单等上没有详细记录。

规则:

  • 只有一个#用于锚定,即使您使用的标题包含多个#

    示例:链接时###header变为#header

  • #和锚文本之间没有空格。

    示例:#header,而不是# header

  • 多字锚点应用短划线分隔。

    示例:#this is a header需要在链接中成为#this-is-a-header

  • 锚链接必须为小写,即使您链接的标题具有大写字母。

    示例:#Section在链接中变为#section

答案 2 :(得分:1)

Josh Paulson在Rstudio网站上发表了一篇详细介绍的文章。这是他的解决方案

Slide 1
====================================
id: slide1

Slide 2
====================================
[Go to slide 1](#/slide1)

这对我有用。 Handcart和Mohair的代码不适用于RHTML

答案 3 :(得分:1)

@rPirate的列表很好,但是缺少使我迷惑的案例。我有一个像### 1.1.1 My Section Title这样的节标题,需要在链接中为#my-section-title

经过一番搜索,我在Pandoc manual中找到了转换规则的正式列表:

  

用于从标题文本中获取标识符的默认算法是:

     
      
  • 删除所有格式,链接等。
  •   
  • 删除所有脚注。
  •   
  • 删除所有非字母数字字符,下划线,连字符和点号除外。
  •   
  • 用连字符替换所有空格和换行符。
  •   
  • 将所有字母转换为小写。
  •   
  • 删除所有内容,直到第一个字母为止(标识符不能以数字或标点符号开头)。
  •   
  • 如果在此之后什么都没有留下,请使用标识符部分。
  •   
     

例如,

Header                      | Identifier
--------------------------------------------------------
Header identifiers in HTML  | header-identifiers-in-html
Maître d'hôtel              | maître-dhôtel
*Dogs*?--in *my* house?     | dogs--in-my-house
[HTML], [S5], or [RTF]?     | html-s5-or-rtf
3. Applications             | applications
33                          | section

答案 4 :(得分:1)

这是在RMarkdown PDF文档中进行内部链接/引用的一种简单方法:

A)创建一个节标题:

## Homework Assignments{#hwks}

B)创建节标题之后。我可以在我的文字中这样引用它:

If you are having a hard time with your [homework](#hwks), we have some tutors who can help you. 

这将创建一个指向标题为“作业分配”的节的链接。

请注意我设置链接的方式:

  1. “作业” ==>我用来称呼标题的单词(或短语)放在方括号中

  2. [作业]后面紧跟我上面创建的标识符“ #hwks”,但是该标识符现在放在括号中,例如:(#hwks)

这总是对我有用!

(这是我在这里的第一篇文章;希望如此。:))