【发布时间】:2014-07-15 07:22:00
【问题描述】:
我有一个非常简单的 markdown 文本文件,我可以使用以下命令行调用轻松地将其转换为 RTF:
pandoc foo.md -o foo.rtf -s
那里没什么特别的。当我将其转换为 PDF(通过 LaTeX)时,我知道我可以创建这样的模板
pandoc -D latex > mytemplate.txt
然后修改模板以包含
\usepackage{setspace}
\doublespacing
在序言中。
似乎在 RTF 中,双倍行距是每个段落的变量。我试图生成一个模板,如在 LaTeX 中,然后相应地修改它,但似乎没有办法启用全局双倍行距。此外,pandoc 中没有像 --reference-docx 和 --reference-odt 这样的选项,让我提供示例文档然后导入样式。
我还查看了 pandoc 中的 RTF writer 代码,发现代码中的段落间距似乎是固定的,虽然我不完全确定。
有人对如何解决这个问题有任何提示吗?还是我应该忘记 RTF 并转而使用 ODT 或 DOCX?
2014-05-28 更新:
根据 Oliver 的回复,我一直在查看文档,但仍有一些我看不清楚的地方。似乎在 RTF 格式的 Writer (Text.Pandoc.Writers.RTF) 中,段落的间距是通过创建两个分别具有正常间距和无间距的闭包(rtfPar 和 rtfCompact)来固定的:
-- | Default paragraph.
rtfPar :: Int -- ^ block indent (in twips)
-> Int -- ^ first line indent (relative to block) (in twips)
-> Alignment -- ^ alignment
-> String -- ^ string with content
-> String
rtfPar = rtfParSpaced 180
-- | Compact paragraph (e.g. for compact list items).
rtfCompact :: Int -- ^ block indent (in twips)
-> Int -- ^ first line indent (relative to block) (in twips)
-> Alignment -- ^ alignment
-> String -- ^ string with content
-> String
rtfCompact = rtfParSpaced 0
然后,当遍历 JSON Pandoc 文档并访问 Para 块时,这些闭包按原样使用:
blockToRTF indent alignment (Para lst) =
rtfPar indent 0 alignment $ inlineListToRTF lst
也许我遗漏了一些东西,但如果作者要忽略与间距相关的所有内容,我看不出如何使用过滤器来更改 JSON 表示,然后创建双倍行距段落。
【问题讨论】:
-
无法访问我的盒子来查找我直到今天晚上使用的代码,但基本上你需要重写作者并自己进行转换,所以当段落处理程序获取它时它已经是 rtf .这不是很好,但有效。
-
好的。这很好,因为这意味着我没有疯 ;)。我以为我错过了一些东西,但现在我发现我对必须修改编写器代码的第一印象是正确的。我会将您的答案标记为有效,尽管我认为出于我的目的,不值得覆盖作者。谢谢你,奥利弗。