lua 过滤器来插入自定义参考文献

能帮我写一个运行在 html 页面上的 lua 过滤器,提取所有 class 为“bibliographie”的 div 并插入处理后的参考文献(即 index.bib 的内容)吗?

我尝试了一下,但离我想要的还差得远呢。 非常感谢!

YAML 的一部分:

bibliography: index.bib

template.html 的一部分:

<div class="bibliographie">
<h2 class="sources-def-bib-title">参考文献</h2>
</div>

以及我的 lua 脚本:

function Pandoc(doc)
    local hblocks = {}
    for i,el in pairs(doc.blocks) do
        if (el.t == "Div" and el.classes[1] == "bibliographie") then
           table.insert(meta.bibliography, value)
        end
    end
    return pandoc.Pandoc(hblocks, doc.meta)
end

编辑

我们正在开发一个 R 包,下面是我们使用的 pandoc_args:

pandoc_args <- c(pandoc_metadata_arg("lang", "fr"), pandoc_args)
# 使用非断空格 pandoc lua 过滤器
pandoc_args <- c(nbsp_filter_pandoc_args(), pandoc_args)
# 连字符
pandoc_args <- c(pandoc_metadata_arg("hyphenopoly"), pandoc_args)
点赞
用户2425163
用户2425163

逐步看这个过程,首先我们要通过过滤所有的 div 元素来提取 div 的内容;我们可以使用一个 Div 过滤函数来实现这个功能,并将内容存储在一个本地变量中。之后,我们需要将提取的内容添加到元数据中;Lua 过滤器可以使用一个 Meta 函数来访问并修改元数据。如果没有明确的顺序,pandoc 将首先过滤块,然后是元数据,这正是我们想要的。

-- 这将包含带有 "bibliographie" id 的 div 的内容。
local bibliographie

function Div (div)
  if div.classes[1] == 'bibliographie' then
    bibliographie = div.content
    return {} -- 从文档中删除此项。
              -- 如果要保留 div,请删除这些行。
  end
end

function Meta (meta)
  meta.bibliographie = bibliographie
  return meta
end

这假设 pandoc-citeproc 已经运行,因此 Lua 过滤器必须在 pandoc-citeproc 过滤器之后给出:--filter pandoc-citeproc --lua-filter bibliographie-to-meta.lua

如果需要更多细节,可以查看官方文档

2020-06-07 06:00:34