Markdown编辑在段落下不起作用



我的一个GitHub页面有以下MD代码。

<p align="justify">
Text Text Text.
</p>
<p align="justify">
**Text** Text Text.
`Text` Text.
</p>

虽然第一个段落标记工作正常,因为它内部没有进行Markdown编辑,但第二个段落标记中的文本没有按应有的格式设置。(无粗体,无quotes)

为什么会这样??那么如何在段落内使用Markdown编辑呢?

Markdown规则明确规定:

请注意,Markdown格式语法不在块级HTML标记中处理。例如,您不能在HTML块中使用Markdown样式的*emphasis*

也就是说,GitHub Pages使用Kramdown来解析Markdown,而Krandown的行为略有不同,这给了你更多的灵活性。事实上,Kramdown的文件指出:

如果HTML标记具有属性markdown="1",则使用该标记中解析语法的默认机制。

换句话说,这样做:

<p align="justify" markdown="1">
**Text** Text Text.

`Text` Text.
</p>

您将得到以下输出:

<p align="justify">
<strong>Text</strong> Text Text.
<code>Text</code> Text.</p>

Kramdown足够聪明,可以识别出您在<p>标记中,并且不会将单行包装在新的<p>标记中,这将是无效的HTML。如果你真的希望每一行都是一个单独的段落,那么你应该使用<div>来包装所有内容。像这样:

<div align="justify" markdown="1">
**Text** Text Text.

`Text` Text.
</div>

结果是:

<div align="justify">
<p><strong>Text</strong> Text Text.</p>
<p><code>Text</code> Text.</p>
</div>

为了完整性,需要注意的是,GitHub README和Gist没有使用相同的Markdown解析器。相反,他们使用了一个扩展的Commonmark解析器,该解析器以与上述两种方式不同的方式处理原始HTML中的Markdown。在Commonmark中,原始HTML块的内容是否被解析为Markdown取决于内容是否被空行包裹。在这种情况下,正确的方法是这样做:

<div align="justify">
**Text** Text Text.

`Text` Text.
</div>

然而,由于GitHub将去掉align属性,因此它在GitHub.com上托管的页面(如README)上这样做毫无意义。还有一个问题是,Commonmark不够聪明,无法检测到包装的原始HTML标记是<p>标记,并将每一行包装在另一个<p>中,导致HTML无效。因此,在这种情况下,必须使用<div>

虽然告诉解析器将内容解析为Markdown的使用空行方法是比markdown="1"更优雅的解决方案,但它只受Commonmark解析器的支持,而Kramdown不支持。因此,只要GitHub Pages使用Kramdown,就需要遵循Kramdown的规则。

最新更新