Markdown to RTF转换是否可以在pandoc中启用全局双倍间距?

时间:2014-05-26 13:39:18

标签: markdown rtf pandoc

我有一个非常简单的降价文本文件,我可以使用以下命令行调用轻松将其转换为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编写器代码,发现段落间距似乎在代码中已修复,但我并不完全确定。

有没有人提示如何解决这个问题?或者我应该忘记RTF并去ODT或DOCX吗?

更新2014-05-28:

根据Oliver的回复,我一直在查看文档,但仍然有一些我看不清楚的东西。似乎在Writer for RTF格式( 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表示,然后如果编写者要忽略与间距相关的所有内容,则创建双倍行距的段落。

1 个答案:

答案 0 :(得分:2)

您应该可以通过添加过滤器来实现。如果你知道haskell,那么你可以直接扩展pandoc,但如果没有,那么我建议使用python库(here) - 创建一个python脚本,修改json以插入per-命中段落元素时段落双倍格式。

然后,您可以通过将-F ./myfilter.py添加到您的pandoc调用中来调用它。

pandocfilters的文档是......稀疏的,但是如果你看一下这些例子和pandocfilters.py文件的末尾(对于你可以使用的类型的选择),它不应该是'太难走了。