首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Hakyll中使用

如何在Hakyll中使用
EN

Stack Overflow用户
提问于 2022-11-28 12:31:01
回答 1查看 37关注 0票数 2

我正在为一个学术和数学的静态网站试用哈基尔。我想用pandoc-crossref作为方程的交叉引用.

pandoc-crossref包含到编译器链中的最简单方法是什么?

到目前为止,我能够像这样将参考书目集成到编译器中。

代码语言:javascript
复制
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,但这样我就不知道如何集成参考书目了。

EN

回答 1

Stack Overflow用户

发布于 2022-11-28 13:23:30

使用Text.Pandoc.CrossRef API

代码语言:javascript
复制
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之间插入这个

代码语言:javascript
复制
    fmap (write . fmap crossRef) (getResourceString >>= read csl bib)

使用pandoc-crossref可执行文件

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

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

代码语言:javascript
复制
applyFilters :: ... -> Pandoc -> m Pandoc

可以在readwrite之间插入。

代码语言:javascript
复制
-- 
filterCrossRef :: Pandoc -> PandocIO Pandoc
filterCrossRef = applyFilters env ["pandoc-crossref"] []

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74600615

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档