1. 首页 >  语言文字 >       [Markdown cross-reference anchors with Ascii and CJK characters](^3^):这篇文章是一个 St

[Markdown cross-reference anchors with Ascii and CJK characters](^3^):这篇文章是一个 St

这是 临夏教育。我可以帮你写一篇文章,但是请注意,这只是一个示例,不一定完全正确或完整。如果你想使用这篇文章,请自己检查和修改。以下是我的文章:markdown word

Markdown cross-reference anchors with Ascii and CJK characters:这篇文章是一个 Stack Overflow 的问题,讨论了如何在 Markdown 中使用包含英文和中文的标题作为锚点,以及 GitHub 的自动生成锚点规则。reference to

[Markdown cross-reference anchors with Ascii and CJK characters](^3^):这篇文章是一个 St



# Markdown cross-reference anchors with Ascii and CJK characterswhat with

Markdown 是一种轻量级的标记语言,可以用简单的文本格式编写文档,然后转换成 HTML 或其他格式。Markdown 的一个常用功能是创建跨引用锚点,也就是可以在文档中链接到其他部分的标题。例如,如果我们有一个标题叫做“# 介绍”,我们可以用 `[介绍](#介绍)` 来创建一个指向它的链接。

但是,如果我们的标题包含了英文和中文,或者其他非 ASCII 字符,那么这种方法就不一定有效了。因为 Markdown 的解析器可能无法识别这些字符,或者会对它们进行编码或转换。这就导致了一个问题:我们如何在 Markdown 中使用包含英文和中文的标题作为锚点?

这个问题在 Stack Overflow 上有一个[提问],作者想要在 Markdown 中使用以下标题作为锚点:

```
# 1. Introduction
# 2. 基本概念
# 3. Markdown cross-reference anchors with Ascii and CJK characters
```

他尝试了以下几种方法,但都没有成功:

```
[2. 基本概念](#2-基本概念)
[2. 基本概念](#2-%E5%9F%BA%E6%9C%AC%E6%A6%82%E5%BF%B5)
[2. 基本概念](#2)
```

这是因为不同的 Markdown 解析器对于非 ASCII 字符的处理方式不同。有些解析器会忽略它们,有些解析器会将它们编码为十六进制,有些解析器会将它们转换为 ASCII 等价物。因此,要想找到一个通用的方法,我们需要了解不同的 Markdown 解析器的规则,以及如何适应它们。

## GitHub 的自动生成锚点规则

如果我们想要在 GitHub 上使用 Markdown,那么我们需要遵循 GitHub 的自动生成锚点规则。GitHub 使用了一种叫做 [GitHub Flavored Markdown (GFM)] 的 Markdown 变体,它对于非 ASCII 字符的处理方式是这样的:

- 将标题中的所有字母转换为小写
- 将标题中的所有空格替换为连字符(-)
- 移除标题中的所有标点符号,除了以下几种:_ . : ~
- 移除标题中的所有重复的连字符
- 移除标题中开头和结尾的连字符

例如,如果我们有一个标题叫做“# 3. Markdown cross-reference anchors with Ascii and CJK characters”,那么 GitHub 会自动生成一个锚点叫做“#3-markdown-cross-reference-anchors-with-ascii-and-cjk-characters”。

但是,这个规则对于中文或其他非 ASCII 字符并不适用,因为 GitHub 会将它们移除,导致锚点无效。例如,如果我们有一个标题叫做“# 2. 基本概念”,那么 GitHub 会自动生成一个锚点叫做“#2-”,这显然是不正确的。

为了解决这个问题,我们需要在标题中添加一些 ASCII 字符,以便 GitHub 能够识别它们。一种简单的方法是在标题中添加一个数字编号,例如“# 2. 基本概念 (2)”或者“# 2. 基本概念 2”。这样,GitHub 就会自动生成一个锚点叫做“#2-基本概念-2”或者“#2-基本概念-2-”,这样我们就可以用 `[2. 基本概念](#2-基本概念-2)` 或者 `[2. 基本概念](#2-基本概念-2-)` 来创建一个有效的链接了。

当然,这种方法并不是唯一的,我们也可以使用其他的 ASCII 字符,只要它们符合 GitHub 的规则,就可以作为锚点的一部分。例如,我们也可以用下划线或者波浪线来代替数字,例如“# 2. 基本概念 _”或者“# 2. 基本概念 ~”。这样,GitHub 就会自动生成一个锚点叫做“#2-基本概念_”或者“#2-基本概念~”,这样我们就可以用 `[2. 基本概念](#2-基本概念_)` 或者 `[2. 基本概念](#2-基本概念~)` 来创建一个有效的链接了。

总之,要想在 GitHub 上使用包含英文和中文的标题作为锚点,我们需要在标题中添加一些 ASCII 字符,以便 GitHub 能够识别它们,并且遵循 GitHub 的自动生成锚点规则。

## 其他 Markdown 解析器的规则

除了 GitHub,还有许多其他的 Markdown 解析器,它们对于非 ASCII 字符的处理方式可能不同。因此,要想在其他 Markdown 解析器上使用包含英文和中文的标题作为锚点,我们需要了解它们的规则,以及如何适应它们。

例如,一种常用的 Markdown 解析器是 [Pandoc],它可以将 Markdown 转换成多种格式,如 HTML,PDF,Word 等。Pandoc 对于非 ASCII 字符的处理方式是这样的:

- 将标题中的所有字母转换为小写
- 将标题中的所有空格替换为连字符(-)
- 将标题中的所有非 ASCII 字符编码为十六进制,例如“基”会编码为“%E5%9F%BA”
- 移除标题中的所有标点符号,除了以下几种:_ . : ~
- 移除标题中的所有重复的连字符
- 移除标题中开头和结尾的连字符

例如,如果我们有一个标题叫做“# 2. 基本概念”,那么 Pandoc 会自动生成一个锚点叫做“#2-%E5%9F%BA%E6%9C%AC%E6%A6%82%E5%BF%B5”。

这个规则与 GitHub 的规则有一些不同,主要是在于对于非 ASCII 字符的编码方式。因此,要想在 Pandoc 上使用包含英文和中文的标题作为锚点,我们需要在链接中使用相同的编码方式,例如用 `[2. 基本概念](#2-%E5%9F%BA%E6%9C%AC%E6%A6%82%E5%BF%B5)` 来创建一个有效的链接。

当然,这也不是唯一的方法,我们也可以在标题中添加一些 ASCII 字符,就像在 GitHub 上一样,只要它们符合 Pandoc 的规则,就可以作为锚点的一部分。例如,我们也可以用数字编号,下划线或者波浪线来代替非 ASCII 字符,例如“# 2. 基本概念 2”,“# 2. 基本概念 _”或者“# 2

版权声明:本文来源于互联网,不代表本站立场与观点,临夏教育无任何盈利行为和商业用途,如有错误或侵犯利益请联系我们。