gpt4 book ai didi

haskell - 如何在 Hakyll 中使用 pandoc-crossref

转载 作者:行者123 更新时间:2023-12-05 04:20:11 27 4
gpt4 key购买 nike

我正在尝试 Hakyll对于学术和数学为主的静态网站。我想使用 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,但我不知道如何整合引用书目。

最佳答案

使用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

尝试在 readwrite 之间插入:

    fmap (write . fmap crossRef) (getResourceString >>= read csl bib)

使用pandoc-crossref可执行文件

pandoc-crossref 提供一个过滤器作为可执行文件。

pandoc 库有一个函数 applyFilters允许您通过提供可执行文件的路径来运行此类过滤器。

applyFilters :: ... -> Pandoc -> m Pandoc

您可以在readwrite 之间插入。

-- 
filterCrossRef :: Pandoc -> PandocIO Pandoc
filterCrossRef = applyFilters env ["pandoc-crossref"] []

将其嵌入到 hakyll Compiler monad 中需要一些额外的步骤(可能是 hakyll 中的 recompilingUnsafeCompiler 以及从 PandocIOIO 在 pandoc 中)。

关于haskell - 如何在 Hakyll 中使用 pandoc-crossref,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74600615/

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