【问题标题】:What are the rules of converting one markdown title into an HTML anchor?将一个 Markdown 标题转换为 HTML 锚点的规则是什么?
【发布时间】:2017-09-02 14:03:22
【问题描述】:

我需要生成一个长的README.md 文件和一些指向不同部分的链接,比如开头的目录。 Markdown 将部分标题转换为链接:

这是 Markdown 中的标题和链接

为了生成目录的链接,我需要锚点的值。我有的文字。我需要规则的片段。大概是这样的:

[This is a heading and a link in Markdown](#thisisaheadingandalinkinmarkdown)

有人知道markdown中的标题如何转换为锚/片段值的规则吗?

【问题讨论】:

    标签: github hyperlink markdown anchor gitlab


    【解决方案1】:

    GitLab documentation 说明了它如何从 Markdown 标头创建锚点:

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

    这意味着# Standard markdown 的锚点将转换为standard-markdown

    虽然我找不到任何明确的规则,但关于 GitHub 如何生成其锚点,通过检查一些README.md 似乎上述大多数规则也适用于 GitHub。

    【讨论】:

      【解决方案2】:

      将标题文本转换为锚点不是标准的 Markdown 功能。原始规则没有提及它,参考实现也没有提供该功能。因此,各种实现都创建了自己的一套规则,并且每一个都是不同的。 @Fairy 的回答概述了 Gitlab 使用的规则。

      GitHub 已经发布了他们使用的规范,其中没有提及锚点。事实上,headers 部分显示了没有在标签上定义任何 id 的示例。大概是因为他们将它们作为后处理器添加到他们的markup 项目中。虽然没有公布的规则。您需要阅读source code 来制定规则。纵观代码,规则似乎与 GitLab 相同,但可能存在一些细微差别,只有在仔细测试各种边缘情况后才会显现出来。

      【讨论】:

        【解决方案3】:

        我发现在 markdown 标头规则中,对之前的注释中的这些进行了调整。
        1.文字全部转为小写
        2.所有非单词文本(例如标点符号、HTML)被删除,而是被转换为连字符
        3.所有空格都转换为连字符
        4.连续两个或多个连字符转换为一个
        5.如果已经生成了相同ID的header,则附加一个唯一的递增数字,从1开始。
        所以,SEND EMAIL TO DBA'S - is created like this: * [5. SEND EMAIL TO DBA'S](#5-send-email-to-dba-s)。
        希望这对任何寻找的人都有帮助。

        【讨论】:

          猜你喜欢
          • 2022-01-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-09-09
          • 1970-01-01
          • 2022-10-04
          • 2010-09-11
          • 2016-02-20
          相关资源
          最近更新 更多