rmarkdown 中的内部链接不起作用

Posted

技术标签:

【中文标题】rmarkdown 中的内部链接不起作用【英文标题】:Internal links in rmarkdown don't work 【发布时间】:2016-02-28 01:58:06 【问题描述】:

我使用 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
- \usepackagefancyhdr
- \pagestylefancy
- \fancyfoot[LE,RO]this is a fancy foot
- \usepackagedcolumn
- \usepackagehere
- \usepackagelongtable
- \usepackagecaption
- \captionsetupskip=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

【问题讨论】:

对于未来的读者,this thread and answer 特别有用——它展示了如何在 pandoc 中使用显式引用 【参考方案1】:

您没有正确设置锚点。

尝试以下方法:

# 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

【讨论】:

虽然在 rmarkdown 教程中没有提到锚点很奇怪。相反,它说:“要链接到同一文档的另一部分,请使用自动生成的标识符” @user1983395,没有检查文档。我知道在 HTML 中,它们通常被称为锚点,但也许“标识符”更准确。 认为它可能值得一提,虽然不是特别针对这个例子,但我测试了像 (#1) 这样的链接,这不起作用,它必须以 C 中的有效变量名开头/Java 必须如此 (#quest1) 可以为### headings设置achor吗?【参考方案2】:

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

规则:

只有一个# 用于锚点,即使您使用的是带有多个# 的标头。

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

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

示例:#header,而不是 # header

多词锚点应该用破折号分隔。

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

锚链接必须是小写的,即使你链接的标题有大写。

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

【讨论】:

【参考方案3】:

@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】:

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

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

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

这对我有用。手推车和马海毛的代码在 RHTML 上不起作用

【讨论】:

【参考方案5】:

这是在 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. 

这会创建一个链接返回到标题为“家庭作业”的部分标题。

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

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

    [homework] 后面紧跟我在上面创建的标识符“#hwks”,但标识符现在放在括号中,如:(#hwks)

这总是对我有用!

(这是我在这里的第一篇文章;我希望它有意义。:))

【讨论】:

以上是关于rmarkdown 中的内部链接不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Phonegap链接不起作用

单击leaflet bindpopup内部的链接不起作用[重复]

Google Play 商店内部测试链接不起作用

为啥将内部类注入同一个外部类中的另一个内部类不起作用?

滚动在 chrome 中的 svg 异物内部不起作用

Codeigniter 控制器链接在 IIS 中不起作用