使用 Pandoc 创建文档

Creating a document with 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 文件的工作示例?

您没有设置正确的 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

您已启用选项 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