Haskell 定制Pandoc';使用CSS或模板创建HTML输出

Haskell 定制Pandoc';使用CSS或模板创建HTML输出,haskell,pandoc,Haskell,Pandoc,我有一个Happstack程序,可以使用Text.Pandoc将标记文档动态转换为HTML: import qualified Text.Pandoc as Pandoc ... return $ toResponse $ Pandoc.writeHtml Pandoc.def contents 也就是说,Pandoc正在返回Text.Blaze.Html.Html值。(这有一个ToMessage实例,这意味着它可以用作对请求的响应。) 如何将自定义CSS样式表插入Pandoc的输出?

我有一个Happstack程序,可以使用
Text.Pandoc
将标记文档动态转换为HTML:

import qualified Text.Pandoc as Pandoc
...
    return $ toResponse $ Pandoc.writeHtml Pandoc.def contents
也就是说,Pandoc正在返回
Text.Blaze.Html.Html
值。(这有一个
ToMessage
实例,这意味着它可以用作对请求的响应。)


如何将自定义CSS样式表插入Pandoc的输出?如果我想定制HTML,例如用一些其他元素包装
内容,该怎么办?

Pandoc从命令行运行时,使用一些参数,允许您在
标记(-H)、内容之前(-B)和内容之后(-A)插入内容。我不知道Happstack,但肯定有办法将这些参数传递给
Pandoc。writeHtml

当Pandoc的“独立模式”选项启用时,它会使用模板格式化输出。 模板及其子条件变量可以在
writeTemplate
writerVariables
成员的
WriterOptions
中设置

命令行工具具有其使用的默认模板集。您可以使用例如
pandoc-D html
查看格式的默认模板

使用库时,默认情况下使用空模板。您可以使用
getDefaultTemplate
以编程方式获取默认模板

下面是一些示例代码:

import Text.Blaze.Html.Renderer.String
import Text.Pandoc

getHtmlOpts = do
    template <- either (error . show) id
        `fmap` getDefaultTemplate Nothing "html"
    return $ def
        { writerStandalone = True
        , writerTemplate = template
        , writerVariables = [
            ("css", "/path/to/style.css"),
            ("header-includes",
             "<style>p { background-color: magenta; }</style>")]
        }

main = do
    opts <- getHtmlOpts
    putStrLn $ renderHtml $ writeHtml opts $ readMarkdown def "..."
import Text.Blaze.Html.Renderer.String
导入文本.Pandoc
getHtmlOpts=do

template您也可以编写自己的模板,例如调用它
template.html
,并在从命令行调用pandoc时使用
--template template.html
选项

文档位于,默认模板(用于灵感)位于