首页 > 解决方案 > Github Flavored Markdown 和 docx 的自定义样式属性

问题描述

在我的 github 风格的 markdown webkalk.md 文件中,我有一行:

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

在 pandoc 的 reference.docx 中,我声明了一种样式“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-Flavored Markdown 中为 docx 使用自定义样式?

标签: markdowndocxgithub-flavored-markdown

解决方案


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

但是,正如文档所解释的:

但是请注意,commonmark并且gfm对扩展的支持有限。只有下面列出的那些(和smart、、raw_texhard_line_breaks)才有效。但是,这些扩展都可以单独禁用。而且,raw_tex只影响gfm输出,不影响输入。

gfm(GitHub 风格的 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 的纯文本内容,这就是您所看到的行为。

commonmark并且gfm每个都有严格的规范定义,因此 Pandoc 似乎不允许与这些严格的规范有太大差异。因此,使用该格式时不支持native_spansand扩展名。native_divsgfm

文档对此提出警告:

因为 pandoc 对文档的中间表示比它在其之间转换的许多格式的表现力要差,所以人们不应该期望在每种​​格式和其他格式之间都能完美转换。...虽然从 pandoc 的 Markdown 到所有格式的转换都渴望完美,但从比 pandoc 的 Markdown 更具表现力的格式转换可以预期是有损的。

这里要记住的重要一点是“pandoc's Markdown”(markdown格式)是唯一保证不会“有损”的格式。该gfm格式不是“pandoc 的 Markdown”,因此不提供该保证。

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


推荐阅读