我正在为一个学术和数学的静态网站试用哈基尔。我想用pandoc-crossref作为方程的交叉引用.
将pandoc-crossref包含到编译器链中的最简单方法是什么?
到目前为止,我能够像这样将参考书目集成到编译器中。
pandocComplilerWithBibAndOptions :: Compiler (Item String)
pandocComplilerWithBibAndOptions = do
csl <- load $ fromFilePath "apa.csl"
bib <- load $ fromFilePath "bibliography.bib"
fmap write (getResourceString >>= read csl bib)
where
read = readPandocBiblio readerOptions
write = writePandocWith writerOptions
readerOptions = defaultHakyllReaderOptions {
readerExtensions = newExtentions <> pandocExtensions
}
writerOptions = defaultHakyllWriterOptions {
writerExtensions = newExtentions <> pandocExtensions,
writerHTMLMathMethod = MathJax ""
}
newExtentions = extensionsFromList [Ext_tex_math_double_backslash,
Ext_citations,
Ext_latex_macros]
main :: IO ()
main = hakyll $ do
...
match "posts/*" $ do
route $ setExtension "html"
compile $ pandocComplilerWithBibAndOptions
>>= loadAndApplyTemplate "templates/post.html" postCtx
>>= loadAndApplyTemplate "templates/default.html" postCtx
>>= relativizeUrls
match "*.bib" $ compile biblioCompiler
match "*.csl" $ compile cslCompiler
...虽然这很好,但我不知道如何集成交叉引用。我的最佳选择是将其表示为某种转换并使用pandocCompileWithTransformM,但这样我就不知道如何集成参考书目了。
发布于 2022-11-28 13:23:30
使用Text.Pandoc.CrossRef API
import Text.Pandoc.CrossRef
import Text.Pandoc.Definition (Pandoc) -- pandoc-types
crossRef :: Pandoc -> Pandoc
crossRef = runCrossRef meta Nothing defaultCrossRefAction
where
meta = defaultMeta -- Settings for crossref rendering试着在read和write之间插入这个
fmap (write . fmap crossRef) (getResourceString >>= read csl bib)使用pandoc-crossref可执行文件
pandoc-crossref作为可执行文件提供了一个过滤器。
pandoc库有一个函数applyFilters,它允许您通过提供可执行文件的路径来运行这样的过滤器。
applyFilters :: ... -> Pandoc -> m Pandoc可以在read和write之间插入。
--
filterCrossRef :: Pandoc -> PandocIO Pandoc
filterCrossRef = applyFilters env ["pandoc-crossref"] []还需要一些额外的步骤将其嵌入到hakyll Compiler monad中(可能是recompilingUnsafeCompiler在hakyll中,以及从PandocIO到IO在pandoc中的某些内容)。
https://stackoverflow.com/questions/74600615
复制相似问题