настройка вывода HTML Pandoc с помощью CSS или шаблона
У меня есть программа 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>
с некоторыми другими элементами?
2 ответа:
Когда опция 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 "..."