关键字
- 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 字符实体`
后无法显示出<code>`</code>所呈现的效果所致。
需求:在行间代码
中加入<code>`</code>。即:显示诸如<code>ctrl+`</code>的效果。
问题:可能是某种Bug使然,在行间代码
中加入<code>`</code>不能使用前置\
的方法,此时只得借助于HTML标签
。
解决方案:
- 只借助于
HTML标签
:`ctrl+`<code>\`</code>。毫无疑问,<code>\`</code>有其作用,但必须借助<code>
标签才能完整的解决问题。 - 借助
HTML标签
和HTML字符实体
:`ctrl+`<code>`</code>。其中,`
是HTML字符实体
,用于显示字符<code>`</code>。
最后需要强调注意的是:
-
HTML标签
(HTML tags)能够补足Markdown语法不足,能够实现特定语法效果。但是,无论如何,在排版时还是应当优先使用Markdown
语法。 -
HTML实体字符
(HTML entities)[3]只起到显示作用,无法替换Markdown
中的特殊语法符合,可以算是一种更为通用的Markdown转义字符方式。
在标题中加入#
最后的谜题,到了此时已经变得相对容易。已有的解决方法有:
- 在标题中使用
\#
加以解决,缺点是会有个别Markdown编辑器会出现解析问题。 - 使用
HTML字符实体
替换,即在标题中加入#;
,缺点是行文语义表达不够流畅。
假如,你使用等待Markdown编辑器在渲染时存在问题,不妨借用下面这种形式:
-
Markdown
关于标题的语法可以采用## 二级标题 ##
的形式。所以,我们可以利用语法形式实现在标题中加入#
符号。具体实现为:### 三级#标题 ###
。
注释
-
事实上,由于
Markdown
编辑器广泛支持Mathjax
渲染数学公式,所以更好的方式是使用LaTeX
语法录入数学公式。例如,应当使用<code>$Sin^2(x_1)$</code>的方式来显示<code></code>。这样不但更符合数学公式排版对于字体方面的要求,同时也能实现更为复杂的效果。 ↩ -
在
Markdown
文档中强调*
其实非常容易处理,可以参照下面的示例:- 使用通用的Markdown转义字符,即
\
作为前缀的方法:**\***
。这也是最应被推崇的方法,通常不会引起Markdown编辑器异常,也最为符合Markdown语法规定。 - 使用
HTML
字符实体:*****
。这种方法当然也能适用,但可能会引发某些Markdown编辑器渲染问题。例如:在Obsidian中使用这种用法,在预览模式中没有任何问题,但在编辑模式下则会引发显示问题。 - 当然使用
HTML
中的<strong>标签也是一种方法,即使用<strong>\*</strong>
的方式。但是,为了保证显示的正确性,还是要书写为\*
方能有效避免在显示方面潜藏的问题。类似的,也可以使用<strong>*</strong>
的方式加以实现。
- 使用通用的Markdown转义字符,即
-
关于完整的HTML字符实体列表,可以参考https://www.freeformatter.com/html-entities.html。
由于HTML字符实体
参考了ASCII
代码,所以ASCII
码值可应用于HTML字符实体
。例如:#
在ASCII
中码值为96
,则对应的HTML字符实体
码值为`
。 ↩
网友评论