6

我有一个 Happstack 程序,它使用以下方法将 Markdown 文档动态转换为 HTML Text.Pandoc

import qualified Text.Pandoc as Pandoc
...
    return $ toResponse $ Pandoc.writeHtml Pandoc.def contents

即 Pandoc 正在返回一个Text.Blaze.Html.Html值。(这有一个ToMessage实例,这意味着它可以用作对请求的响应。)

如何将自定义 CSS 样式表插入 Pandoc 的输出?如果我想自定义 HTML,例如通过<body>使用其他元素包装内容怎么办?

4

3 回答 3

7

当 Pandoc 的“独立模式”选项启用时,它使用模板来格式化输出。模板及其替代变量可以在writerTemplate和的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 "..."
于 2014-04-19T20:53:27.593 回答
3

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

文档位于https://pandoc.org/MANUAL.html#templates,默认模板(用于灵感)位于https://raw.githubusercontent.com/jgm/pandoc-templates/master/default.html5

于 2019-01-29T04:54:15.227 回答
1

Pandoc,当从命令行运行时,接受一些参数,允许您在<head>标签(-H)中,在内容之前(-B)和内容之后(-A)插入一些东西。我不了解 Happstack,但肯定有办法将这些参数传递给Pandoc.writeHtml

于 2013-09-06T11:43:16.200 回答