2016-10-02 6 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を有効にしています。個人的に、私は、テンプレートを使用していないと私はそれを動作させるためにFalse

writerStandaloneオプションを設定し、これらのWriterOptionsはプレーンテキストライターのために使用します。DOCXライター用

let textfile = writePlain WriterOptions{ writerStandalone=False 
             , writerExtensions=plainExtensions 
             , writerWrapText=True 
             , writerColumns=80} pandoc 

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 
関連する問題