使用 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
我想创建一个 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