2016-10-02 75 views
3

我想創建一個Haskell程序自動生成文檔Pandoc用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 docuement應包含短語This is some text,我不明白爲什麼它不會出現。

你知道我做錯了什麼嗎?

你有一個關於如何使用Haskell生成Pandoc文件的工作示例嗎?

+0

當您嘗試在不指定'writerTemplate'的情況下使用'writeMarkdown'時會發生什麼? –

回答

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