Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Markdown 是否可以在pandoc中启用全局双间距,以便将减价转换为RTF?_Markdown_Rtf_Pandoc - Fatal编程技术网

Markdown 是否可以在pandoc中启用全局双间距,以便将减价转换为RTF?

Markdown 是否可以在pandoc中启用全局双间距,以便将减价转换为RTF?,markdown,rtf,pandoc,Markdown,Rtf,Pandoc,我有一个非常简单的标记文本文件,可以使用以下命令行调用轻松地将其转换为RTF: pandoc foo.md -o foo.rtf -s 没什么特别的。当我将其转换为PDF(通过LaTeX)时,我知道我可以创建这样的模板 pandoc -D latex > mytemplate.txt 然后修改模板以包括 \usepackage{setspace} \doublespacing 在序言中 似乎在RTF中,每个段落的双间距都是一个变量。我曾尝试生成一个模板(如LaTeX中的模板),然后对

我有一个非常简单的标记文本文件,可以使用以下命令行调用轻松地将其转换为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:

根据奥利弗的回答,我一直在看文档,但仍然有一些东西我看不清楚。在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表示,然后创建双倍行距的段落。

您应该可以通过添加过滤器来做到这一点。如果您了解haskell,那么您可以通过这种方式直接扩展pandoc,但如果不了解,那么我建议使用python库()——创建一个python脚本,修改json,在命中段落元素时插入每段落双倍间距格式

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


pandocfilters的文档是。。。稀疏,但如果您查看示例并在文件末尾(用于选择您可以使用的类型),那么开始应该不会太难。

谢谢您的想法。我一直在看文件,但还是很困惑。为了描述我的发现,我编辑了这个问题。总之,我认为RTF编写器的间距值是固定的。直到今天晚上才可以访问我的框来查找我使用的代码,但基本上你需要重写编写器并自己进行转换,这样当段落处理程序得到它时,它已经是RTF了。这不是很好,但很有效。那很好,因为这意味着我没有疯。我以为我遗漏了一些东西,但现在我发现我对修改编写器代码的第一印象是正确的。我将把你的答案标记为有效,尽管我认为就我的目的而言,不值得推翻作者的观点。谢谢你,奥利弗。