Markdown中的转义字符

关键字

  • Markdown语法
  • Markdown转义字符
  • HTML标签
  • HTML字符实体

声明

本文在创作时使用的是Obsidian。由于对于HTML标签支持有所限制,导致排版效果无法正常显示。具体而言本文内容,体现于标签无法被正常渲染,因此相关涉及部分只能依赖读者自行调整和调试,敬请原谅。

背景概述

众所周知,Markdown是一种基于HTML的排版语法,会使用众多特殊符号来实现特定的排版需求。在Markdown排版语法中,经常用到的特殊符号有:

符号 作用和排版效果 代码示例
# 设置标题等级,标准Markdown语法支持1~6级标题,但各Markdown编辑器
支持情况各不相同。对应于HTML中的

标签。
# 一级标题
## 二级标题
### 三级标题
! 在标准Markdown语法中用于插入图片,对应于HTML中的标签。
但是,很多Markdown编辑器都会对标准语法有所扩展。
例如:在Obsidian中,如果需要引用视音频文件和PDF文档,
以及使用 #块引用 时就需要!作为引导标识。对应于HTML中的
![无法加载时的提示信息(图片网址)]
* _ 用于设置文字 粗体斜体 样式。
分别对应于HTML中的标签。
**粗体文字**
_斜体文字_
~ 用于设置文字 删除线 样式。对应于HTML中的标签。 ~~删除线~~
+ - 用于表示无序列表,对应于HTML中的
  • 标签组合。
    此外,+-也会在表示任务列表时使用到。
- 无序列表第1项
+ 无序列表第2项
+ [ ] 没有完成的任务列表
- [x] 完成的任务列表
> 用于表示引用信息。对应于HTML中的
标签。
> 路漫漫其修远兮
> 吾将上下而求索
< > 使用HTML标签进行排版以补充Markdown语法的不足之处。
例如:添加下划线上标下标效果。
下划线
上标
下标
[ ] 用于设置超链接,对应于HTML中的标签。 [显示文字](网址 "鼠标悬停时文字")
` 用于书写行内代码段间代码。对应于HTML中的标签。行内代码不限于标注编程语言,也可以强调专用术语词汇等。 行内代码:
`#include `

段间代码:
```c
int a = 1;
char b = 'a';
```
. 用于表示有序列表,对应于HTML中的
  1. 标签组合。
1. 有序列表第1项
2. 有序列表第2项
^ 用于表示脚注。 《咏鹅》[^脚注名称]是一首诗。
[^脚注名称]: 作者是骆宾王。

这些特殊符号在实际排版中都有使用,但问题也随之而来:在写作技术文档时,难免会在行文之间会用到这些具有特殊功能的符号。那么,如何才能将这些特殊符号书写在Markdown文档之中?答案很简单,使用Markdown转义字符 。然而在具体实践过程中,由于各Markdown编辑器在实现中使用的编程方法不及相同,所以彼此之间会有所差异。但无论如何,通过尝试或组合总能找到适合的方法。

实现方法

事实上,Markdown确实提供了一种相对通用的方法来实现特殊功能的转义效果,即使用\字符。这种形式非常类似于C语言中的转义字符序列。然而,也正如前文所述,在实际排版过程中,由于编程过程中底层实现的原因,有时我们还是需要借助一些特殊技巧才能实现特定效果。

前缀\实现转义

Markdown转义字符是\。也就是说,在这些具有特殊含义的字符前加上\后,Markdown编辑器在渲染排版效果时将展现其原始的含义。

举例来说:

  • 针对HTML标签。使用HTML上下标标签书写数学公式Sin2(x1)[1],当然应该录入Sin2(x1)。但如需展示的是完整的HTML代码,则应在文档中键入Sin\2\(x\1\)才能实现。
  • 针对Markdown排版:使用Markdown语法展示强调效果,应当录入**强调**。但是如需展示的只是Markdown代码则应在文档中键入\*\*强调\*\*才能显示成功。

此处两例演示了\引导进行Markdown转义字符的方式,可以解决绝大多数转义字符的需求,读者大可以自行尝试。但极少数情况下,不能适用时则需使用下文中的补足用法。

补足用法

最难处理的Markdown转义字符情况,往往出现在循环嵌套的情况之中。

例如:

  • 在文档中演示被强调的内容中包含字符*[2]
  • 在文档中演示行内代码中包含字符`

针对这种嵌套,在底层的编程实现过程中很难以优雅的方式完美解决,甚至很难被有效解决。无奈之下,我们最好抱持一事一论的态度进行尝试。下面的几种方式,就是最常见的解决方法。

使用HTML标签或HTML字符实体

论及Markdown时,开宗明义即强调其为基于HTML加以实现。毫无疑问,在Markdown能够实现HTML中的众多特性,其中也包括了HTML标签(HTML tags)以及HTML字符实体(HTML entities)。也正是因为可以引用这些特性,使得我们能够相对较为容易的满足Markdown转义字符的特殊需求。

相信下面的示例能给予读者一些启发:

注意:本节中会有经常出现类似于`的情况,这是由于只对HTML标签提供有限支持所致。之所以没有使用`的形式,是因为符号`非常小,不适于被强调显示出来。这也是由于行间代码中键入HTML 字符实体`后无法显示出`所呈现的效果所致。

需求:在行间代码中加入`。即:显示诸如ctrl+`的效果。

问题:可能是某种Bug使然,在行间代码中加入`不能使用前置\的方法,此时只得借助于HTML标签

解决方案

  • 只借助于HTML标签:`ctrl+`\`。毫无疑问,\`有其作用,但必须借助标签才能完整的解决问题。
  • 借助HTML标签HTML字符实体:`ctrl+``。其中,`HTML字符实体,用于显示字符`

最后需要强调注意的是:

  • HTML标签(HTML tags)能够补足Markdown语法不足,能够实现特定语法效果。但是,无论如何,在排版时还是应当优先使用Markdown语法。
  • HTML实体字符(HTML entities)[3]只起到显示作用,无法替换Markdown中的特殊语法符合,可以算是一种更为通用的Markdown转义字符方式。

在标题中加入#

最后的谜题,到了此时已经变得相对容易。已有的解决方法有:

  • 在标题中使用\#加以解决,缺点是会有个别Markdown编辑器会出现解析问题。
  • 使用HTML字符实体替换,即在标题中加入#;,缺点是行文语义表达不够流畅。

假如,你使用等待Markdown编辑器在渲染时存在问题,不妨借用下面这种形式:

  • Markdown关于标题的语法可以采用## 二级标题 ##的形式。所以,我们可以利用语法形式实现在标题中加入#符号。具体实现为:### 三级#标题 ###

注释


  1. 事实上,由于Markdown编辑器广泛支持Mathjax渲染数学公式,所以更好的方式是使用LaTeX语法录入数学公式。例如,应当使用$Sin^2(x_1)$的方式来显示。这样不但更符合数学公式排版对于字体方面的要求,同时也能实现更为复杂的效果。 ↩

  2. Markdown文档中强调*其实非常容易处理,可以参照下面的示例:

    • 使用通用的Markdown转义字符,即\作为前缀的方法:**\***。这也是最应被推崇的方法,通常不会引起Markdown编辑器异常,也最为符合Markdown语法规定。
    • 使用HTML字符实体:*****。这种方法当然也能适用,但可能会引发某些Markdown编辑器渲染问题。例如:在Obsidian中使用这种用法,在预览模式中没有任何问题,但在编辑模式下则会引发显示问题。
    • 当然使用HTML中的标签也是一种方法,即使用\*的方式。但是,为了保证显示的正确性,还是要书写为\*方能有效避免在显示方面潜藏的问题。类似的,也可以使用*的方式加以实现。
  3. 关于完整的HTML字符实体列表,可以参考https://www.freeformatter.com/html-entities.html。
    由于HTML字符实体参考了ASCII代码,所以ASCII码值可应用于HTML字符实体。例如:#ASCII中码值为96,则对应的HTML字符实体码值为`。 ↩

你可能感兴趣的:(Markdown中的转义字符)