美文网首页
Markdown中的转义字符

Markdown中的转义字符

作者: grass_rt | 来源:发表于2021-02-19 11:24 被阅读0次

关键字

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

声明

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

背景概述

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

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

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

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

实现方法

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

前缀\实现转义

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

举例来说:

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

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

补足用法

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

例如:

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

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

使用HTML标签或HTML字符实体

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

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

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

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

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

解决方案

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

最后需要强调注意的是:

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

在标题中加入#

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

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

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

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

注释


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

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

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

相关文章

  • Markdown集锦

    输出markdown中有功能性定义的符号的方法 使用转义字符,Markdown中的转义字符为\,可以转义的有:\ ...

  • Markdown需要转义的字符

    下面的字符,在Markdown中是需要转义的;

  • Markdown中的转义字符

    关键字 Markdown语法 Markdown转义字符 HTML标签 HTML字符实体 声明 本文在创作时使用的是...

  • HTML 支持的常用转义字符或实体

    HTML 支持的常用转义字符或实体 字符转义 使用 Markdown 语法进行写作的时候,免不了会遇到一些特殊字符...

  • 语法补充

    0x00 特殊符号 Markdown中的转义字符为\,可以转义的有:1.\\ 反斜杠2.\` 反引号3.\* 星号...

  • html中转义字符(适用于markdown )

    html中转义字符(适用于markdown ) 一般用‘\’能够实现转义,特殊情况下可以用下列字符实现。

  • Python语法小记忆

    1、转义字符 Python 中的字符串还支持转义字符。所谓转义字符是指使用反斜杠“\”对一些特殊字符进行转义。 转...

  • Test

    markdown常用字符 markdown风格标签 1. 转义: \**这是粗体字** 2. 欢迎光临【Gala...

  • Markdown -- '$' 特殊字符转义

    在我写的上一篇 AngularJS ns-repeat产生的$$hashkey中大量出现 $美元符号,单独一个 $...

  • 3.9 PHP字符串单引号和双引号的区别

    双引号中可以解析变量,而单引号中不能。 在双引号中可以用转移字符,单引号中转义字符\只能转义单引号,和转义转义字符...

网友评论

      本文标题:Markdown中的转义字符

      本文链接:https://www.haomeiwen.com/subject/lyxaxltx.html