pandoc:将包含混合html和markdown的GitHub风格的MarkDown转换为html

时间:2018-05-24 16:02:50

标签: html markdown pandoc

我的markdown是根据this top-result cheatsheet的样式使用HTML指令创建的,使用此命令:

pandoc -f gfm -t html --atx-headers -s -o out.html in.md

但是,生成的html总是忽略包含上面HTML代码的标题,在我的输出HTML中留下了大量的#######。我的标题看起来像这样:

# H1

<a name=toc-anchor-h2 />
## H2

<a name=toc-anchor-h3 />
### H3

<a name=toc-anchor-h4 />
#### H4

然后H1工作正常,但其余级别的#都被pandoc视为纯文本。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

标题前面必须有空行。缺少的空白行导致Markdown解析器无法将它们识别为标题。因此,请将文档编辑为以下内容:

# H1

<a name=toc-anchor-h2 />

## H2

<a name=toc-anchor-h3 />

### H3

<a name=toc-anchor-h4 />

#### H4

如果你担心这会使锚点离目标目标太远,请将它们包含在内:

# H1


## <a name=toc-anchor-h2 />H2


### <a name=toc-anchor-h3 />H3


#### <a name=toc-anchor-h4 />H4

或者,当您使用Pandoc时,您可以使用许多Pandocs扩展中的一个,它直接为每个标头分配标识符。

事实证明,Pandoc的Markdown gfm variant(您正在使用)已包含auto_identifiers扩展名。顾名思义,auto_identifiers扩展将为每个标头自动生成id个属性。提醒一下,为HTML元素分配id属性与定义锚点具有相同的效果;你可以链接到哈希片段。因此,您只需删除锚点并使用已自分配给标题的自动生成的id

但是,如果您想为每个标头定义自己的自定义id属性,那么您可能需要启用header_attributes扩展并更改Markdown,如下所示:

# H1

## H2 {#toc-anchor-h2}

### H3 {#toc-anchor-h3}

#### H4 {#toc-anchor-h4}

将生成以下HTML:

<h1 id="h1">H1</h1>
<h2 id="toc-anchor-h2">H2</h2>
<h3 id="toc-anchor-h3">H3</h3>
<h4 id="toc-anchor-h4">H4</h4>

请注意,“H1”标题具有指定的自动ID(基于元素的文本内容),而其余标题具有分配给它们的自定义ID。

关于header_attributes扩展的一个注意事项:定义自定义ID的语法是非标准的,大多数Markdown实现都不支持。如果你想要便携式Markdown,那么你应该坚持使用自动生成的ID,因为它不需要文档中的任何非标准标记。

更新:请注意,根据文档,header_attributes扩展名与gfm不兼容。因此,您将无法使用该扩展名。但是,默认情况下会获得auto_identifiers。如果您需要自定义标识符,则需要使用自定义原始HTML锚点。当然,这为您提供便携式Markdown文档的额外好处。