Markdown链接到标题

138

我正在使用GitLab编写read.me文件。

我试图创建一个指向标题的链接。根据维基,应该自动创建一个id:

请看这里

我使用以下方式创建了一个标题:

### 1. This is my Header

并尝试创建一个链接到它:

[link](#1--this-is-my-header)

但它没有起作用。我做错了什么?


可能与编程无关。(GitLab?程序员使用的工具?我不确定) - user202729
请问如何在GitLab Wiki中创建同一页内的链接? - user202729
@user202729 不确定如何使用 #toc_4 标题。如果我只写 [link](#toc_4) 它不会链接到第四个标题。 - user7431005
3个回答

199

在你提供的文档中,我们了解到...

根据以下规则生成ID:

  1. 所有文本转换为小写字母。
  2. 除单词外的所有非文本字符(例如标点符号、HTML)均被删除。
  3. 所有空格都转换为连字符。
  4. 连续两个或更多的连字符将被转换为一个。
  5. 如果已经生成具有相同ID的标头,则附加一个唯一递增的数字,从1开始。

请注意第4条规则:“连续两个或更多的连字符将被转换为一个。” 但是,您尝试的示例中有两个连续的连字符(在1后面)。删除其中一个即可。

[link](#1-this-is-my-header)

时不时地我会遇到一个独特的标题,它以某种不明显的方式转换为ID。 要快速找出这个ID,可以使用浏览器的查看源代码和/或检查工具查看HTML源代码。例如,您可能会在示例中找到以下HTML:

<h3 id="1-this-is-my-header">1. This is my Header</h3>

然后,只需使用 id 属性的内容和哈希标记来链接到该标题:#1-this-is-my-header


2
非常感谢您的回答,加一。如果我们更改(重新措辞)标题,那么引用就会丢失吗?如果是的话,那个功能对我来说几乎没有价值。在2022年,有没有什么解决办法? - Binarus
2
@Binarus 这取决于您使用的实现方式。这个问题和答案是针对Gitlab特定的。有些实现方式允许您定义使用的“slug”。而其他则不行。不幸的是,由于这是Markdown行为的扩展,没有任何规范来定义它,因此在实现方式之间没有一致性。即使那些允许您定义slug的实现方式,在如何定义上也是不一致的。当然,您始终可以回到使用原始HTML,这样可以完全控制。 - Waylan
我明白了。那我就走HTML这条路线。再次感谢! - Binarus
我发现在标题中添加包含 HTML 的链接不起作用。例如,我有# this.txt<span> </ span>,试图使用 [test](#this.txt) 进行链接不起作用。同样适用于涉及连字符的一堆组合。 - Recessive

2
Markdown ID是根据一些规则生成的,我能够通过谷歌找到这些规则:(文本转换为小写,非单词标点符号被移除,空格转换为连字符,两个或多个连字符转换为一个,命名冲突时会添加递增数字...)
我发现一个简单的方法来确定锚链接应该是什么。使用您的浏览器的HTML检查器来检查您想要链接的标题。标题标签的ID应该是您使用的内容。例如,在HTML检查器中,我的标题如下所示:
<h2 id="markdown-header-changing-plsql-parameters-and-shared-developers-lifecycle">
  Changing PL/SQL parameters and shared developer's lifecycle
</h2>

"最初的回答" 可以在标记中像这样链接到它:

而我可以像这样在标记中链接它:

[See instructions below](#markdown-header-changing-plsql-parameters-and-shared-developers-lifecycle)

现在,“请参见下面的说明”已链接到我的页眉锚点。最初的回答。

使用浏览器的检查器是个好主意,但HTML可能会因生成它的方式而有所不同。例如,grip实用程序不会在<h2>上放置id标签,而是插入一个带有类anchor和以#开头的href变量的<a>标签 - 这是要链接到的文本。它的id是这个文本加上前缀user-content-,并不是正确要使用的文本。 - David C.

-2

有一种比检查器更简单的方法,至少在GitLab风格的mardown中:将鼠标悬停在标题上,会出现一个“链”图标:右键单击它并复制链接。

带可点击链的标题


你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心找到有关如何编写良好答案的更多信息。 - Community

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