在Markdown中,Sphinx的`.. raw:html`是什么意思?

时间:2019-02-14 14:59:45

标签: markdown python-sphinx

问题标题应该是自我解释的。我在Sphinx的Markdown raw中找不到任何内容。

我知道我可以在md文件中直接键入html,但是我有一个很长的html代码段,我想与markdown保持分隔。

1 个答案:

答案 0 :(得分:2)

rules的简明状态(添加了强调):

  

对于Markdown语法未涵盖的任何标记,您只需   使用HTML本身。 无需在其前添加或定界为   表示您正在从Markdown切换为HTML;你只用   标签。

     

唯一的限制是块级HTML元素-例如<div>,   <table><pre><p>等-必须与周围的内容分开   用空行,并且该块的开始和结束标签不应为   带有制表符或空格的缩进。 Markdown足够聪明,无法添加   HTML块级标签周围的多余(不需要的)<p>标签。

如果您担心Markdown可能会破坏原始HTML的内容,则规则还应指出:

  

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

因此,只要您的HTML块正确地包装在块级HTML标记中,Markdown便不会处理它们。当然,这不适用于Markdown文本中包含的内联HTML元素:

  

跨度HTML标签-例如<span><cite><del>-可以是   在Markdown段落,列表项或标题中的任何位置使用。如果你   想要的话,甚至可以使用HTML标签代替Markdown格式;例如   如果您希望使用HTML <a><img>标签而不是   Markdown的链接或图片语法,请继续。

     

与块级HTML标签不同,Markdown语法在   跨度标签。

同样重要的是要注意,某些 Markdown实现未遵循上述规则。因此,您可能需要查看正在使用的实现的文档,以确保它遵循规则,或者具有强制使其遵循规则的配置开关。

然后是Commonmark,它不遵循原始的Markdown规则,而是使用different set of rules。具体来说,Commonmark在原始HTML块内不需要空白行,以避免Markdown解析。 CommonMark会将所有内容都视为原始HTML块中第一个空白行之后的Markdown。但是,如果您使用的是老式的Markdown解析器而不是Commonmark解析器,那么这应该不是问题。

最后请注意,Markdown(不是Commonmark)比HTML 5早得多。因此,添加到HTML 5的较新的块级元素(<section><article>等)大多数Markdown实施都不认为它是块级元素。一些实现已被更新以增加支持,但是即使在实现之间也没有一致性,关于哪些新元素应被视为块级,因为尚未更新参考实现以设置总裁。因此,最好坚持使用旧的HTML 4和/或XHTML 1规范中定义为块级的元素。