我有一个GitHub页面的MD代码。
<p align="justify">
Text Text Text.
</p>
<p align="justify">
**Text** Text Text.
`Text` Text.
</p>
&#13;
虽然第一个段落标记工作正常,因为其中没有完成Markdown编辑,但第二段标记内的文本不是应该格式化的。 (没有大胆,没有quotes
)
为什么会这样?那么如何在段落内使用Markdown编辑?
答案 0 :(得分:1)
Markdown rules明确表示:
请注意,在块级HTML标记中不处理Markdown格式化语法。例如,您不能在HTML块中使用Markdown样式的
*emphasis*
。
那就是说,GitHub Pages uses Kramdown来解析Markdown,而Krandown的行为略有不同,这为你提供了更大的灵活性。事实上,Kramdown的documentation州:
如果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和Gists不使用相同的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's rules。