降价转义setext h1

markdown escape setext h1

下面几行是 markdown setext headers 以单个前导 backslash 转义,这个 post 被解析为 markdown 所以它是一个很好的展示,它有效h2 级别 header 没问题,但 h1 级别 header.

失败

降价解析之前的文本,换行符没有尾随空格:

This is an H1
\=============

This is an H2
\-------------

Markdown 解析的文本输出:

这是H1 \=============

这是H2 --------------

我知道 markdown 的风格问题,以及缺乏规范和实现的原件。尽管如此,如果可能的话,在 markdown 中逃避 h1 级别 setext header 的正确方法是什么?

你这里发生了很多事情。

首先,由于多余的字符,这两行都没有被识别为setext header。换句话说,您可以使用任何不是 =- 的字符,这会导致解析器将文本视为段落而不是 header.

其次,连字符 (-) 是 escapable character 而等号 (=) 不是。然而,这个处理很可能是作为内联标记完成的,而不是在块级别(当解析 header 与段落时)。发生的情况是,在所有其他处理完成后,字符串 \- 被替换为 -。换句话说,它对2级headers有效是侥幸。

如果你想要horizontal rules,那么你需要在行前有一个空行,这样就不需要转义任何东西(或者当然转义也会导致解析器无法将行识别为水平线规则)。顺便说一句,只有连字符(下划线和星号),不能使用等号,用于水平规则,这就是等号不能转义的原因。

如果您只想在段落中显示原始字符,请避免使用换行符,换行符无论如何都不会显示在浏览器中。像这样:

This is an H1 =============

This is an H2 -------------

如果您希望该行实际出现在单独的一行上,那么您可以使用一些原始的 HTML 来插入一个 <br> 标签:

This is an H1<br>=============

This is an H2<br>-------------

甚至可能:

This is an H1
<br>=============

This is an H2
<br>-------------

请注意,在最后一种情况下,您可以轻松阅读 Markdown,并且 <br> 标签完成与反斜杠相同的事情。它导致解析器不将其视为 setext header。但也提供了跨级别的一致结果,甚至保留了输出中的换行符。