Pandoc编号示例列表不适用于自定义编写器

时间:2014-08-28 16:23:31

标签: lua pandoc

Pandoc在整个文档中连续编号列表具有惊人的扩展名example_lists。我们尝试使用自定义编写器生成html,但结果html中的编号被打破。请考虑以下md代码:

(@) item 1
(@) item 2

## header ##

(@) item 3

Pandoc默认生成以下html页面:

1. item 1
2. item 2
  header
3. item 3

但是使用自定义编写器(我们用pandoc --print-default-data-file sample.lua作为例子)它产生:

1. item 1
2. item 2
  header
1. item 3

示例lua-writer包含以下有序列表处理代码:

function OrderedList(items)
  local buffer = {}
  for _, item in pairs(items) do
    table.insert(buffer, "<li>" .. item .. "</li>")
  end
  return "<ol>\n" .. table.concat(buffer, "\n") .. "\n</ol>"
end

如果为print

中的第一对元素添加items
function OrderedList(items)
  local buffer = {}
  for elem, item in pairs(items) do
    print(elem)
    table.insert(buffer, "<li>" .. item .. "</li>")
  end
  return "<ol>\n" .. table.concat(buffer, "\n") .. "\n</ol>"
end

我们只会查看最终列表项目&#39;数:

1
2
1 

所以我不认为这个问题出现在作家本身。您有任何想法如何解决这个问题吗?

2 个答案:

答案 0 :(得分:4)

通过pandoc sources查看自定义编写器(src/Text/Pandoc/Writers/Custom.hs),您可能会发现OrderedList函数实际上有四个参数,其中第三个是列表样式。您应该对Example列表样式感兴趣。因此,您可以相应地更新OrderedList实现:引入全局变量来计算Example中的总项目 - 列表,根据列表样式更改功能代码(在ol html标记中为{{添加start属性1}} - 列表)

Example

答案 1 :(得分:1)

您实际上不需要像Artem Pelenitsyn的回答那样保留ExampleIdx全局变量。您所要做的就是让列表项编写器对第二个参数(Pelenitsyn代码中的起始编号:num)敏感。请注意,您可以使用pandoc -t native来检查传递给writer的AST;您会看到读者已正确设置起始编号。

function OrderedList(items, num)
  local buffer = {}
  for _, item in pairs(items) do
     table.insert(buffer, "<li>" .. item .. "</li>")
  end
  local start = ""
  if num > 1 then
    start = ' start="' .. num .. '" '
  end
  return '<ol' .. start .. '>\n' .. table.concat(buffer, "\n") .. "\n</ol>"
end