Github docx 的风味 Markdown 和自定义样式属性

Github Flavoured Markdown and custom-style attribute for docx

在我的 github-flavoured markdown webkalk.md 文件中有一行:

<span custom-style="OS">something</span>

在 reference.docx 中,我为 pandoc 声明了一个样式 "OS"。

当我使用命令生成 .docx 时:

pandoc -s webkalk.md > webkalk.docx -f markdown -t docx --reference-doc="reference.docx"

单词 something 的样式符合我的预期(样式 "OS"),但是当我尝试命令时:

pandoc -s webkalk.md > webkalk.docx -f gfm -t docx --reference-doc="reference.docx"

它的样式与纯文本一样。

是否可以在 Github-Flavoured Markdown 中为 docx 使用自定义样式?

gfm 不包括对 native_spans 扩展的支持。 Pandoc 的默认 markdown 包括对 Pandoc 提供的大多数扩展的支持,默认情况下包括 native_spans

但是,如文档所述:

Note, however, that commonmark and gfm have limited support for extensions. Only those listed below (and smart, raw_tex, and hard_line_breaks) will work. The extensions can, however, all be individually disabled. Also, raw_tex only affects gfm output, not input.

gfm (GitHub-Flavored Markdown)

pipe_tables, raw_html, fenced_code_blocks, auto_identifiers, gfm_auto_identifiers, 
backtick_code_blocks, autolink_bare_uris, space_in_atx_header, 
intraword_underscores, strikeout, task_lists, emoji, shortcut_reference_links, 
angle_brackets_escapable, lists_without_preceding_blankline.

作为解释,native_spansnative_divs 扩展解析原始 HTML 并将其转换为 Pandoc 的本地内部格式。如果输出格式包含支持,则允许将内容和任何关联的属性传递给输出格式。但是,如果没有扩展名,任何不直接支持 HTML 的输出格式将只能获取原始 HTML 的纯文本内容,这就是您所看到的行为。

commonmarkgfm 都是用严格的规范定义的,所以看起来 Pandoc 不允许与那些严格的规范有太大的差异。因此,使用 gfm 格式时不支持 native_spansnative_divs 扩展。

关于此的文档warns

Because pandoc’s intermediate representation of a document is less expressive than many of the formats it converts between, one should not expect perfect conversions between every format and every other. ... While conversions from pandoc’s Markdown to all formats aspire to be perfect, conversions from formats more expressive than pandoc’s Markdown can be expected to be lossy.

这里要记住的重要一点是 "pandoc's Markdown"(markdown 格式)是唯一保证不是 "lossy." 的格式 gfm 格式是不是 "pandoc's Markdown",因此不提供该保证。

也就是说,native_spans 扩展似乎应该受到 gfm 的支持,即使它在默认情况下未启用。但是,Commonmark 规范(GFM 扩展)完全重新设计了原始 HTML 的解析方式。据推测,Pandoc 需要重新定义将原始 HTML 解析为 commonmarkgfm 格式的方法。因此,在 raw HTML 中工作的扩展不会与备用解析器方法一起工作。换句话说,任何对原始 HTML 进行操作的扩展,包括 native_spans,都需要重写以使用 commonmarkgfm 格式。在此之前,这些扩展在使用这些格式时不可用。 Pandoc 是否计划在未来增加支持不是我所知道的信息,并且不在本次讨论的范围内。