【问题标题】:Embed indented HTML in Markdown with Pandoc使用 Pandoc 在 Markdown 中嵌入缩进的 HTML
【发布时间】:2016-08-31 20:41:22
【问题描述】:

我的 Markdown 中有一些嵌入的 HTML(表格中的项目符号列表)。有没有办法在不将我的 HTML 缩进而不用 Pandoc 将其视为逐字代码块?

【问题讨论】:

    标签: markdown pandoc


    【解决方案1】:

    有点,但您必须更改 Pandoc 的默认设置。

    Markdown rules 明确禁止这样做:

    唯一的限制是块级 HTML 元素——例如<div><table><pre><p> 等 — 必须与周围的内容用空行分隔,并且块的开始和结束标记不应使用制表符或空格缩进。

    但是,如果您注意到,上面引用的规则确实明确指出“块的开始和结束标记不应缩进”。缩进“开始和结束标签”内的内容没有限制。事实上,“开始和结束标签”之间的内容甚至都没有被处理为 Markdown,所以可以随意缩进。换句话说,这是完全可以接受的:

    <table>
        <thead>
            <tr>
                <th>A header</th>
            </tr>
        </thead>
    </table>
    

    除了在 Pandoc 中默认为 doesn't work。正如 Pandoc 的 documentation 中所述:

    标准 Markdown 允许您包含 HTML“块”:平衡标记之间的 HTML 块,它们与周围的文本用空行分隔,并在左边距开始和结束。在这些块中,所有内容都被解释为 HTML,而不是 Markdown;所以(例如)* 并不表示强调。

    当使用markdown_strict 格式时,Pandoc 会以这种方式运行;但默认情况下,pandoc 将 HTML 块标记之间的材料解释为 Markdown。

    因此,您需要使用raw_html 扩展名或markdown_strict 输出格式。

    对于“严格模式”使用:

    pandoc --from markdown_strict
    

    或者不使用严格模式但仍然获得您想要的 HTML 行为(禁用 markdown_in_html_blocks 扩展并启用 raw_html 扩展):

    pandoc --from markdown-markdown_in_html_blocks+raw_html
    

    【讨论】:

    • 那么这是否意味着pandoc默认应用“markdown_in_html_blocks”来转换包裹在&lt;table&gt;{{content}}&lt;/table&gt;中的内容?