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

我正在编写一个大型Markdown文档,并希望在开头放置一个目录,该目录将提供指向文档中各个位置的链接。我该怎么做?

我尝试使用:

[a link](# MyTitle)

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

581033 次浏览

Markdown规范中没有这样的指令。对不起。

pandoc中,如果您在生成html时使用选项--toc,将生成一个目录,其中包含指向各节的链接,并从节标题返回到目录。它与其他pandoc写入格式类似,如LaTeX、rtf、rst等

pandoc --toc happiness.txt -o happiness.html

这一点Markdown:

% True Happiness
Introduction------------
Many have posed the question of true happiness.  In this blog post we propose tosolve it.
First Attempts--------------
The earliest attempts at attaining true happiness of course aimed at pleasure.Soon, though, the downside of pleasure was revealed.

将产生这个作为html的主体:

<h1 class="title">True Happiness</h1><div id="TOC"><ul><li><a href="#introduction">Introduction</a></li><li><a href="#first-attempts">First Attempts</a></li></ul></div><div id="introduction"><h2><a href="#TOC">Introduction</a></h2><p>Many have posed the question of true happiness. In this blog post we propose to solve it.</p></div><div id="first-attempts"><h2><a href="#TOC">First Attempts</a></h2><p>The earliest attempts at attaining true happiness of course aimed at pleasure. Soon, though, the downside of pleasure was revealed.</p></div>

通过实验,我找到了一个使用<div…/>的解决方案,但一个明显的解决方案是将您自己的锚点放在您喜欢的页面中,因此:

<a name="abcde">

之前

</a>

之后您要“链接”到的行。然后是一个降价链接,如:

[link text](#abcde)

文件中的任何地方都会带您到那里。

<div…/>解决方案插入一个“虚拟”除法只是为了添加id属性,这可能会破坏页面结构,但<a name="abcde"/>解决方案应该是无害的。

(PS:将锚放在您希望链接的行可能是可以的,如下所示:

## <a name="head1">Heading One</a>

但这取决于Markdown如何处理这个问题。我注意到,例如,Stack Overflow答案格式化程序对此很满意!)

这可能是过时的线程,但要在Github中使用Markdown创建内部文档链接…
(注:小写#title)

# Contents- [Specification](#specification)- [Dependencies Title](#dependencies-title)
## SpecificationExample text blah. Example text blah. Example text blah. Example text blah.Example text blah. Example text blah. Example text blah. Example text blah.Example text blah. Example text blah. Example text blah. Example text blah.Example text blah. Example text blah.
## Dependencies TitleExample text blah. Example text blah. Example text blah. Example text blah.Example text blah. Example text blah. Example text blah. Example text blah.Example text blah. Example text blah. Example text blah. Example text blah.Example text blah. Example text blah.

提出了一个很好的问题,所以我编辑了我的答案;

使用-##########可以将内部链接制作成任何标题大小我在下面创建了一个快速示例…https://github.com/aogilvie/markdownLinkTest

Github会自动从您的标头中解析锚标签。因此,您可以执行以下操作:

[Custom foo description](#foo)
# Foo

在上面的情况下,Foo标头生成了一个名称为foo的锚标记

说明:所有标题大小只有一个##和锚点名称之间没有空格,锚标记名称必须小写,如果是多单词,则由破折号分隔

[click on this link](#my-multi-word-header)
### My Multi Word Header

更新

pandoc也可以开箱即用。

pandoc手册解释了如何使用它们的标识符链接到您的标头。我没有检查其他解析器对此的支持,但据报道它在github上不工作

标识符可以手动指定:

## my heading text {#mht}
Some normal text here,including a [link to the header](#mht).

或者您可以使用自动生成的标识符(在本例中为#my-heading-text)。两者都在pandoc手册中有详细说明。

:这个只有在转换为超文本标记语言LaTexConTeXt纺织品AsciiDoc时起作用。

是的,Markdown确实会这样做,但您需要指定名称锚点<a name='xyx'>

一个完整的例子,

这将创建链接
[tasks](#tasks)

在文档的其他地方,您创建命名锚点(无论它叫什么)。

<a name="tasks">my tasks</a>

请注意,您也可以将其包装在标题周围。

<a name="tasks">### Agile tasks (created by developer)</a>

使用Kramdown,似乎效果很好:

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

我看到有人提到过

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

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

因为MultiMarkdown在评论中被提到是一个选项。

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

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

阅读更多:MultiMarkdown-5交叉引用

交叉引用

一个经常要求的功能是能够让Markdown自动处理文档内链接,就像处理外部链接一样容易。为此,我添加了将[一些文本][]解释为交叉链接的能力,如果存在名为“一些文本”的标题。

例如,[元数据][]将带您到#元数据(或任何##元数据、###元数据, #### 元数据, ##### 元数据, ###### 元数据)。

或者,您可以包含您选择的可选标签,以帮助消除多个标题具有相同标题的情况:

###Overview[MultiMarkdown Overview]##

这允许您使用[MultiMarkdown Overview]专门引用此部分,而不是另一个名为Overview的部分。这适用于atx或settext样式的标题。

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

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

Gitlab使用GitLab风格的Markdown(GFM)

这里“所有Markdown渲染的标题都会自动获得ID”

可以使用鼠标:

  • 将鼠标移到标头上
  • 将鼠标移动到悬停选择器上,从标题向左可见
  • 使用右键单击复制并保存链接

    例如,在README.md文件中,我有头:

## series expansion formula of the Boettcher function

它提供了一个链接:

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

现在它可以用作:

[series expansion formula of the Boettcher function](README.md#series-expansion-formula-of-the-boettcher-function)

也可以手动执行:用连字符符号替换空格。

现场示例是这里

更多关于<a name="">技巧的旋转:

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

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

一些额外的事情要记住,如果你曾经得到花式标题内的符号,你想导航到…

# What this is about

------

#### Table of Contents

- [About](#what-this-is-about)
- [&#9889; Sunopsis](#9889-tldr)
- [:gear: Grinders](#it-grinds-my-gears)
- [Attribution]

------

## &#9889; TLDR

Words for those short on time or attention.

___

## It Grinds my :gear:s

Here _`:gear:`_ is not something like &#9881; or &#9965;

___

## &#9956; Attribution

Probably to much time at a keyboard


[Attribution]: #9956-attribution

…标题字符串中的#;&:通常会被忽略/条带化而不是转义,并且还可以使用引文样式链接来使快速使用更容易。

备注

GitHub在提交、自述文件等中支持:word:语法,如果对使用'em感兴趣,请参阅要点(来自rxaviers)。

对于几乎所有其他地方,十进制或十六进制都可以用于现代浏览器;w3学校的备忘单是Purdy Handy,特别是如果使用带有符号的CSS::before::after伪元素更符合您的风格。

奖励积分?

以防有人想知道标题中的图像和其他链接如何解析为id

- [Imaged](#alt-textbadge__examplehttpsexamplecom-to-somewhere)

## [![Alt Text][badge__example]](https://example.com) To Somewhere

[badge__example]:https://img.shields.io/badge/Left-Right-success.svg?labelColor=brown&logo=stackexchange"Eeak a mouse!"

警告

降价渲染因地而异,所以像这样的事情…

## methodName([options]) => <code>Promise</code>

…在GitHub上将有一个id的元素,例如…

id="methodnameoptions--promise"

香草的卫生设施将导致id的…

id="methodnameoptions-codepromisecode"

…这意味着从模板编写或编译MarkDown文件要么需要针对迟缓的一种方式,要么为各种聪明方式添加配置和脚本逻辑,这些方式喜欢清理标题的文本。

除了以上的回答,

在YAML标头中设置选项number_sections: true时:

number_sections: TRUE

RMarkdown将自动为您的部分编号。

要引用这些自动编号的部分,只需将以下内容放入R Markdown文件中:

[My Section]

其中My Section是节的名称

无论部门级别如何,这似乎都有效:

# My section

## My section

### My section

通用解决方案

这个问题似乎根据Markdown的实现有不同的答案。
事实上,官方Markdown留档对这个话题保持沉默。在这种情况下,如果你想要一个可移植的解决方案,你可以使用超文本标记语言。

在任何标题之前,或在同一标题行中,使用一些超文本标记语言定义一个ID。
例如:<a id="Chapter1"></a>
您将在代码中看到这一点,但不会在呈现的文档中看到。

完整示例:

查看完整示例(在线和可编辑)这里

## Content
* [Chapter 1](#Chapter1)* [Chapter 2](#Chapter2)
<div id="Chapter1"></div>## Chapter 1
Some text here.Some text here.Some text here.
## Chapter 2 <span id="Chapter2"><span>
Some text here.Some text here.Some text here.

要测试此示例,您必须在内容列表和第一章之间添加一些额外的空间或减小窗口高度。
另外,不要在id的名称中使用空格。

只需遵循[text](#link)语法并遵循以下指南:

  • 按原样写字母和数字
  • 用破折号替换空格-
  • 删除其余字符

例如,如果您有这些部分:

# 1. Python
# 2. c++
# 3. c++11
# 4. asp.net-core

您可以使用以下命令添加引用:

[1. Python](#1-python)[2. c++](#2-c)[3. c++11](#3-c11)[4. asp.net-core](#4-aspnet-core)

注意asp.net-core如何变成aspnet-core1. python如何变成1-python,等等。

在我的情况下,我正在寻找一个没有Pandoc的TOC解决方案。每个TOC条目都包含一个指向格式为[Display Name](#-url-formatted-name-of-header)的标头的链接

对于2个缩进级别的简单情况,

1. [Installation](#1-installation)1.1. [Minimum System Requirements](#11-minimum-system-requirements)1.2. [Prerequisites](#12-prerequisites)

结果在:

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

对于包含3个或更多缩进级别的通用多级编号列表,列表在3级或更高级别(例如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. [Installing – Single Server](#13-installing-single-server)>>1.4. [Installing – Multi Server](#14-installing-multi-server)>>>1.4.1. [Database Server](#141-database-server)>>>...

结果在GitHub上呈现得很好。如果SO的linter没有抱怨未格式化的代码,就无法在这里呈现它。

注意1.2.2之后的空白条目。
如果没有空白条目,您的以下行将停留在第三个区块引用缩进级别。

相比之下,项目符号列表“只是工作”,只使用空格或制表符作为缩进标记-

## 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风格的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