在Pandoc过滤器中嵌套额外的Span会导致图片消失

我目前正在处理Pandoc过滤器的HTML输出,因为CMS中有一些令人讨厌的限制,这些限制是我努力工作的最终受益者。

我的工作过滤器(现在具有明显的声明)如下:

local List = require 'pandoc.List'

local Emph = pandoc.Emph
local Quoted = pandoc.Quoted
local Span = pandoc.Span
local Str = pandoc.Str
local Strong = pandoc.Strong

local image_base = "http://my.website.example/images/"
local image_author = "Someone Not Stigma"

function process_images(el)
  el.src = el.src:gsub("^file:images/", image_base)
  el.caption = {
    Strong( Quoted( "DoubleQuote", el.caption ) ),
    Str(" by "),
    Emph(image_author)
  }
  return el
end

return {{Image = process_images}}

在最终的HTML中,这给了我一个带有img和figcaption元素的漂亮图形。很棒。不幸的是,我的CMS破坏了figcaption(就像它破坏其他东西一样),因此我认为我会将所有内容都包装在一个额外的span中,以便我可以样式化它。

function process_images(el)
  el.src = el.src:gsub("^file:images/", image_base)
  el.caption = {
    Span(
      {
        Strong( Quoted( "DoubleQuote", el.caption ) ),
        Str(" by "),
        Emph(image_author)
      },
      { class="img-caption" }
    )
  }
  return el
end

但不知何故,这导致Pandoc完全从生成的HTML中删除了该图像。

我已经尝试用List({})语法替换表格语法,但那只会让我收到upvalue的抱怨。我看了手册,但我可以告诉我正在做正确的事情。

我在这里缺少什么?

我调用pandoc如下:

pandoc --from=markdown-tex_math_dollars "Content.pure.txt" --lua-filter=".\pandoc-filter.lua" --to=html5 --template=".\pandoc-template.txt" -o "Content.txt"

扩展名为.txt(因为这些文件无法在浏览器中使用)。使用的模板相当长(有一定数量的YAML变量和相关标记),但请放心:$body$可以在其中找到。

点赞
用户207504
用户207504

我不是一个聪明的人。大家在发问题之前一定要始终更新到最新版本。

我曾经在使用旧版本的 Pandoc (v2.6),升级到 v2.9.1.1 突然使输出再次出现。在一年左右的时间内发布了如此多的版本!

(为自己辩护,我的 Pandoc-filter-fu 不是特别强,所以假定是用户错误而不是程序错误是有道理的。为什么每次你假定是程序错误时,其实是用户错了,而每次你假定是用户错误时,却是明显的程序错误呢?)

2020-02-06 13:33:11