我的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视为纯文本。我该如何解决这个问题?
答案 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文档的额外好处。