pandoc markdown 到 docx - 将列表保留在一页上

And*_*arr 3 markdown ms-word pandoc

我有一个像这样的降价列表:

* Question A - Answer 1 - Answer 2 - Answer 3 当我使用 pandoc 将 markdown 文档转换为 docx 时,我需要确保所有答案 (1 - 3) 与问题 A 出现在同一页面上。我怎样才能做到这一点?

Way*_*lan 7

在 Markdown 中使用自定义样式,然后在自定义 docx 模板中定义这些样式。

\n\n

值得注意的是,Pandoc 的文档指出(添加了重点):

\n\n
\n

由于 pandoc\xe2\x80\x99s 文档的中间表示形式的表现力不如其之间转换的许多格式,因此不应期望每种格式之间都能实现完美的转换。\n Pandoc 尝试保留文档的结构元素,但\n 不格式化详细信息...

\n
\n\n

当然,Markdown 没有“页面”或“分页符”的概念,因此 Pandoc 默认情况下无法处理。然而,Pandoc 知道 docx 样式。正如文档所解释的:

\n\n
\n

默认情况下,pandoc\xe2\x80\x99s docx 输出对段落和块引号等块应用一组预定义的样式,并为内联使用大部分默认格式(斜体、粗体)。这适用于大多数用途,尤其是与reference.docx文件一起使用。但是,如果您需要将自己的样式应用于块,或者匹配预先存在的一组样式,pandoc 允许您分别使用divs和为块和文本定义自定义样式spans

\n\n

如果您使用 属性定义div或,pandoc\n 会将您指定的样式应用于所包含的元素。因此,例如使用语法,spancustom-stylebracketed_spans

\n\n
[Get out]{custom-style="Emphatically"}, he said.\n
Run Code Online (Sandbox Code Playgroud)\n\n

将生成一个 docx 文件,其中 \xe2\x80\x9cGet out\xe2\x80\x9d 的样式为字符样式\n Emphatically。类似地,使用fenced_divs语法,

\n\n

狄金森在这首诗的开头很简单:

\n\n
::: {custom-style="Poetry"}\n| A Bird came down the Walk---\n| He did not know I saw---\n:::\n
Run Code Online (Sandbox Code Playgroud)\n\n

将使用段落样式设置两个包含的行的Poetry样式。

\n\n

如果样式尚未在您的 中reference.docx,则它们将在输出文件中定义为从normal文本继承。如果它们已经定义,pandoc 将不会更改定义。

\n
\n\n

如果您不想手动定义样式,但希望它自动应用于每个列表(或者可能应用于遵循特定模式的每个列表),您可以定义一个自定义过滤器,将样式应用于每个文档中的匹配元素。

\n\n

当然,这只是将样式名称添加到输出中。您仍然需要定义样式(告诉 Word 如何显示分配了这些样式的元素)。正如该选项的文档--reference-doc所解释的:

\n\n
\n

为了获得最佳结果,参考 docx 应该是使用 pandoc 生成的 docx 文件的修改版本。参考 docx 的内容将被忽略,但其样式表和文档属性(包括边距、页面大小、页眉和页脚)将在新 docx 中使用。reference.docx如果在命令行上未指定引用 docx,pandoc 将在用户数据目录中查找文件(请参阅--data-dir参考资料)。如果也未找到,则将使用合理的默认值。

\n\n

要生成自定义reference.docx,请首先获取默认值的副本\n reference.docx: pandoc --print-default-data-file reference.docx >\n custom-reference.docx。然后custom-reference.docx在 Word 中打开,根据需要修改样式,然后保存文件。

\n
\n\n

当然,custom-reference.docx在Word中修改时,您可以添加您在Markdown中使用的新自定义样式。正如@CindyMeister 在评论中指出的那样:

\n\n
\n

Word 将使用样式来处理此问题,其中问题样式\n 的段落设置为“与下一个保持一致”。答案风格也会有这个。对于最后一个条目,第三种样式不会激活该设置。此外,所有三种样式都将激活段落设置“保持在一起”。

\n
\n\n

最后,当使用 pandoc 将 Markdown 转换为 Word docx 文件时,使用该选项--reference-doc=custom-reference.docx,您的自定义样式定义将包含在生成的 docx 文件中。只要您还正确识别 Markdown 文档中的哪些元素采用哪种样式,只要整个列表适合一页,您就应该拥有一个不会因分页符而被破坏的列表。

\n