我想创建一个 Haskell 程序,以使用 Pandoc 自动生成文档。
我创建了一个包含Pandoc提供的数据类型的小示例文档,但是当我启动程序时,ODT文档为空(但属性中标题为My own test file
)和文本文件仅包含单词Template
。
这是我程序的代码片段:
import Text.Pandoc
import qualified Data.ByteString.Lazy as Byt
import Data.Map (fromList)
main = do
doc <- writeODT WriterOptions{ writerStandalone=True
, writerReferenceODT=Nothing
, writerUserDataDir=Nothing
, writerTemplate="Template"} doctest
let doc2 = writeMarkdown WriterOptions{ writerStandalone=True
, writerTemplate="Template"} doctest
putStrLn $ show doctest
Byt.writeFile "test.odt" doc
writeFile "test.txt" doc2
doctest = Pandoc ( Meta {unMeta = fromList [("title", MetaInlines [Str "My own testfile"])
,("authors", MetaInlines [Str "My Name"]) ]} )
[Para [Str "This",Space,Str "is",Space,Str "some",Space,Str "text"],HorizontalRule]
文本文件和ODT文档都应包含短语This is some text
,我不明白为什么它不会出现。
你知道我做错了吗?
您是否有关于如何使用Haskell生成Pandoc文件的实例?
答案 0 :(得分:2)
您没有设置正确的writerTemplate
。
您可以自己调整模板,但应从默认模板开始,以了解其所需的结构。这对于ODT导出器尤其重要,其中模板需要包含非常详细的XML前奏。
我首先加载了默认模板,然后用你的文档填充它,从而使代码正常工作:
main = do
Right odtTemplate <- getDefaultTemplate Nothing "odt"
doc <- writeODT def{ writerStandalone = True
, writerTemplate = odtTemplate
}
doctest
Byt.writeFile "test.odt" doc
Right mdTemplate <- getDefaultTemplate Nothing "markdown"
let doc2 = writeMarkdown def{ writerStandalone = True
, writerTemplate = mdTemplate
}
doctest
writeFile "test.txt" doc2
答案 1 :(得分:1)
您已启用选项writerStandalone
,该选项需要定义模板才能正常工作。就个人而言,我没有使用模板,我将writerStandalone
选项设置为False
要使其正常工作,请将这些WriterOptions
用于纯文本编写器:
let textfile = writePlain WriterOptions{ writerStandalone=False
, writerExtensions=plainExtensions
, writerWrapText=True
, writerColumns=80} pandoc
为docx编写者:
docxfile <- writeDocx WriterOptions{ writerStandalone=False
, writerReferenceDocx=Nothing
, writerUserDataDir=Nothing
, writerHighlight = False
} pandoc