使用Pandoc创建文档

时间:2016-10-02 08:53:11

标签: haskell pandoc

我想创建一个 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文件的实例?

2 个答案:

答案 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