如何在Markdown中链接到同一文档的某个部分?

1149

我正在编写一份大型的Markdown文档,想在开头放置一个目录,以便提供到文档中各个位置的链接。我该如何实现这个目录?

我尝试使用:

[a link](# MyTitle)

其中MyTitle是文档中的标题,但这并没有起作用。


3
R Markdown(Rmd)中的链接请参考https://dev59.com/cGct5IYBdhLWcg3wSbjY#jKPknYgBc1ULPQZF4Av-。 - Etienne Low-Décarie
1
你唯一的问题是MyTitle不应该是一个标题,而应该是文档中锚点的名称(例如<a name="MyTitle"></a>)。然后你就可以在文档的任何地方使用原始链接。 - userfuser
32
大多数人来说,被接受的答案实际上并不相关。请参考下面的第二个答案:https://dev59.com/PnE85IYBdhLWcg3wViE4#16426829 - BrainSlugs83
17个回答

5
Gitlab使用GitLab Flavored Markdown (GFM)
这里“所有Markdown渲染的标题都会自动获得ID”。
可以使用鼠标来:
  • 将鼠标移动到标题上
  • 将鼠标移动到悬停选择器上,该选择器在标题左侧变为可见状态
  • 使用右键单击复制和保存链接

    例如,在README.md文件中我有一个标题:

## Boettcher函数的级数展开公式

这将给出一个链接:

https://gitlab.com/adammajewski/parameter_external_angle/blob/master/README.md#series-expansion-formula-of-the-boettcher-function

前缀可以被移除,因此这里的链接只是

file#header

这里的意思是:
README.md#series-expansion-formula-of-the-boettcher-function

现在它可以用作:

[博特彻函数级数展开公式](README.md#series-expansion-formula-of-the-boettcher-function)

你也可以手动完成:用连字符替换空格。

现场示例在这里


文件会自动预期,您不需要指定它。[Boettcher函数的级数展开公式](#series-expansion-formula-of-the-boettcher-function)应该能解决问题。 - magic_al

2
这对我来说很有效:
这里有一个更长的示例,可以在GitHub上预览:https://gist.github.com/manero6/a0a67e8f9ebd7028f6fae51c49208b5d
# Title
title blablabla

#### Table of Content

- [First](#first)
- [Second](#second)
- [Third](#third-ᵗᵒᵖ)
- [Fourth](#fourth-)
- [Fifth](#-fifth)

## [First][toc]
1st

## [Second][toc]
2nd

## Third [ᵗᵒᵖ][toc]
3rd

## Fourth [^][toc]
4th

## [^][toc] Fifth
5th

[toc]: #table-of-content "go to Table of Content"

2
除了以上的回答,
当在YAML头中设置选项number_sections: true时:
number_sections: TRUE

RMarkdown会自动为您的章节编号。

要引用这些自动编号的章节,请在您的R Markdown文件中输入以下内容:

[我的章节]

其中我的章节是章节的名称。

似乎无论章节级别如何,这种方法都可以使用:

# 我的章节

## 我的章节

### 我的章节


1
使用kramdown,似乎这样做效果很好:

[I want this to link to foo](#foo)
....
....
{: id="foo"}
### Foo are you?

我看到已经提到了

[foo][#foo]
....
#Foo

这两种方法都能高效地工作,但前者可能是除标题或具有多个单词的标题之外其他元素的良好替代方案。


1

关于 <a name=""> 技巧的更多变化:

<a id="a-link"></a> Title
------

#### <a id="a-link"></a> Title (when you wanna control the h{N} with #'s)

1
在我的情况下,我正在寻找一种不需要Pandoc的目录解决方案。每个目录条目都包含一个链接,指向格式为[显示名称](#-标题的url格式化名称)的标题。
对于只有两个缩进级别的简单情况,
1. [Installation](#1-installation)  
1.1. [Minimum System Requirements](#11-minimum-system-requirements)  
1.2. [Prerequisites](#12-prerequisites)  

结果如下:

  1. 安装
    1.1 最低系统要求
    1.2 先决条件

对于包含三个或更多缩进级别的一般多级编号列表,在第三级或更高级别(例如 1.3.2.)时,该列表无法进一步缩进。相反,我能找到的最佳解决方案是使用嵌套块引用标记 >>> 进行格式化。

## Table of Contents  
>1. [Installation](#1-installation)  
>>1.1. [Minimum System Requirements](#11-minimum-system-requirements)  
>>1.2. [Prerequisites](#12-prerequisites)  
>>>1.2.1. [Preparation of Database Server](#121-preparation-of-database-server)  
>>>1.2.2. [Preparation of Other Servers](#122-preparation-of-other-servers)  
>>  
>>1.3. [InstallingSingle Server](#13-installing-single-server)  
>>1.4. [InstallingMulti Server](#14-installing-multi-server)  
>>>1.4.1. [Database Server](#141-database-server)  
>>>...  

在GitHub上可以得到一个漂亮的目录。在这里无法呈现,因为SO的代码编辑器会抱怨格式不正确。
请注意1.2.2后面有一个空白项。
如果没有空白项,你接下来的内容将保持在第3个引用块缩进级别。
与项目列表形成对比,项目列表只需要使用空格或制表符作为缩进标记即可“正常工作”-
## Table of Contents  
- [Installation](#1-installation)  
  - [Minimum System Requirements](#11-minimum-system-requirements)  
  - [Prerequisites](#12-prerequisites)  
    - [Preparation of Database Server](#121-preparation-of-database-server)  
    - [Preparation of Other Servers](#122-preparation-of-other-servers)  
  - [Installing – Single Server](#13-installing-single-server)  
  - [Installing – Multi Server](#-installing-multi-server)  
    - [Database Server](#141-database-server)  
    - ...  

结果如下:

目录

  • 安装
    • 最低系统要求
    • 先决条件
      • 数据库服务器的准备
      • 其他服务器的准备
    • 单服务器安装
    • 多服务器安装
      • 数据库服务器
      • ...

以上所有缩进列表都会成功链接到GitHub Markdown中的以下标头(由于某种原因,标头在SO-flavored Markdown中无法链接) -

# 1. Installation  
## 1.1. Minimum System Requirements  
## 1.2. Prerequisites  
### 1.2.1. Preparation of Database Server  
### 1.2.2. Preparation of Other Servers  
## 1.3. Installing – Single Server  
## 1.4. Installing – Multi Server   
### 1.4.1. Database Server 


1

由于评论中提到了MultiMarkdown作为一个选项。

MultiMarkdown中,内部链接的语法非常简单。

对于文档中的任何标题,只需以此格式[heading][]给出标题名称即可创建一个内部链接。

在此处阅读更多信息:MultiMarkdown-5交叉引用

交叉引用

经常被要求的功能是让Markdown能够像处理外部链接一样轻松地处理文档内链接。为此,我添加了解释 [Some Text] [] 作为交叉链接的功能,如果存在一个名为 “Some Text” 的标题。

例如,[Metadata] [] 将带您到# Metadata(或任何## Metadata,### Metadata,#### Metadata,##### Metadata,###### Metadata)。

或者,您可以包括一个可选标签,以帮助消除具有相同标题的多个标题的歧义:

### 概述 [MultiMarkdownOverview] ##

这使您可以使用[MultiMarkdownOverview]来特别指代本节,而不是另一个名为概述的部分。这适用于atx-或settext-style标题。

如果您已经使用与标题使用的相同id定义了锚点,则定义的锚点优先。

除了文档内的标题外,您还可以为图像和表格提供标签,然后也可以用于交叉引用。


这对于Multimarkdown是正确的;显式锚点方法<a>应该在任何Markdown文档中都可以工作。此外,您可以将锚点放置在文档正文中的任何位置,而不仅仅是在标题、图像或表格中。 - Steve Powell

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接