markdown转html c语言,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)Sin2(x1)。但如需展示的是完整的HTML代码,则应在文档中键入Sin\2\(x\1\)才能实现。

      针对Markdown排版:使用Markdown语法展示强调效果,应当录入**强调**。但是如需展示的只是Markdown代码则应在文档中键入\*\*强调\*\*才能显示成功。

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

      补足用法

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

      例如:

      在文档中演示被强调的内容中包含字符*

      在文档中演示行内代码中包含字符`

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

      使用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)Markdown中的特殊语法符合,可以算是一种更为通用的Markdown转义字符方式。

      在标题中加入#

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

      在标题中使用\#加以解决,缺点是会有个别Markdown编辑器会出现解析问题。

      使用HTML字符实体替换,即在标题中加入#;,缺点是行文语义表达不够流畅。

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

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

      注释

      事实上,由于Markdown编辑器广泛支持Mathjax渲染数学公式,所以更好的方式是使用LaTeX语法录入数学公式。例如,应当使用$Sin^2(x_1)$的方式来显示

      math?formula=Sin%5E2(x_1)。这样不但更符合数学公式排版对于字体方面的要求,同时也能实现更为复杂的效果。 ↩

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

      使用通用的Markdown转义字符,即\作为前缀的方法:**\***。这也是最应被推崇的方法,通常不会引起Markdown编辑器异常,也最为符合Markdown语法规定。

      使用HTML字符实体:*****。这种方法当然也能适用,但可能会引发某些Markdown编辑器渲染问题。例如:在Obsidian中使用这种用法,在预览模式中没有任何问题,但在编辑模式下则会引发显示问题。

      当然使用HTML中的标签也是一种方法,即使用\*的方式。但是,为了保证显示的正确性,还是要书写为\*方能有效避免在显示方面潜藏的问题。类似的,也可以使用*的方式加以实现。

      关于完整的HTML字符实体列表,可以参考https://www.freeformatter.com/html-entities.html。

      由于HTML字符实体参考了ASCII代码,所以ASCII码值可应用于HTML字符实体。例如:#在ASCII中码值为96,则对应的HTML字符实体码值为`。 ↩

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值