gpt4 book ai didi

haskell - 使用pandoc作为库制作PDF

转载 作者:行者123 更新时间:2023-12-02 10:04:40 26 4
gpt4 key购买 nike

我正在从事的项目的一部分涉及使用 Pandoc 创建 PDF。我有制作 PDF 的程序部分。为了弄清楚如何做到这一点,我正在尝试修改 JGM BayHack 2014 中的 fuel.hs .

但是,我遇到了困难。我有以下功能:

export :: (MonadIO m) => Pandoc -> m (Either BL.ByteString BL.ByteString)
export = liftIO . makePDF "xelatex" writeLaTeX def { writerStandalone = True }

在我修改过的fuel.hs的正文中,

  pdfbytes <- export letter
print pdfbytes

我得到以下输出:

$ stack runghc fuel.hs
Run from outside a project, using implicit global project config
Using resolver: lts-3.7 from implicit global project's config file: /home/stevejb/.stack/global/stack.yaml
Left "! Emergency stop.\n<*> /tmp/tex2pdf.8283/input.tex\n \nNo pages of output.\nTranscript written on /tmp/tex2pdf.8283/input.log.\n"
"Fail"

但是,正在引用的日志文件不存在。我不知道如何调试这个。我已经安装了xelatex。

<小时/>

最佳答案

在 #haskell IRC 的大力帮助下,我得以让它正常工作。关键是添加我自己的 LaTeX 模板。因此,可以使用以下内容:

export :: (MonadIO m) => String ->  Pandoc -> m (Either BL.ByteString BL.ByteString)
export tmpl pdoc = liftIO $ makePDF "xelatex" writeLaTeX (def { writerStandalone = True, writerTemplate = tmpl}) pdoc

getLetter = do
json <- BL.readFile "cng_fuel_chicago.json"
let letter = case decode json of
Just stations -> createLetter [s | s <- stations,
"Voyager" `elem` cardsAccepted s]
Nothing -> error "Could not decode JSON"
return $ letter


main :: IO ()
main = do
letter <- getLetter
temp <- readFile "template.tex"
let str_should_have_something = writeLaTeX (def {writerStandalone = True, writerTemplate = temp}) letter
print str_should_have_something
mybytes <- export temp letter

case mybytes of Right b -> BL.writeFile "mypdf.pdf" b
Left _ -> putStrLn "Export error"

要获取模板,您可以在 shell 中以独立模式使用 Pandoc:


pandoc -D Latex > template.tex

此外,使用堆栈、使用 cabal 和使用系统包管理器安装的 Pandoc 在查找默认模板方面可能存在问题。我不确定所有这些到底是如何相互作用的。

<小时/>

完全包含要点here

关于haskell - 使用pandoc作为库制作PDF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34484570/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com