Pandoc编号列表在自定义编写器中如何处理长尾词疑问?

2026-04-01 19:341阅读0评论SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计446个文字,预计阅读时间需要2分钟。

Pandoc编号列表在自定义编写器中如何处理长尾词疑问?

Pandoc为文档中的连续编号列表提供了令人惊叹的扩展功能:`example_lists`。我们尝试使用自定义编写器生成HTML,但生成的HTML中编号被破坏了。考虑以下MD代码示例:`+ ( @( ) item 1 + ( @( ) item 2)`。

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

Pandoc编号列表在自定义编写器中如何处理长尾词疑问?

(@) 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

如果为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

我们只会看到最终列表项的数字:

1 2 1

所以我认为这个问题不在作家本身.你有什么想法如何解决这个问题?

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

-- for counting examples (@) local ExampleIdx = 1 function OrderedList(items, num, sty, delim) local buffer = {} for _, item in pairs(items) do table.insert(buffer, "<li>" .. item .. "</li>") end local start = "" if sty == "Example" then if ExampleIdx > 1 then start = ' start="' .. ExampleIdx .. '" ' end ExampleIdx = ExampleIdx + table.getn(items) end return '<ol' .. start .. '>\n' .. table.concat(buffer, "\n") .. "\n</ol>" end

本文共计446个文字,预计阅读时间需要2分钟。

Pandoc编号列表在自定义编写器中如何处理长尾词疑问?

Pandoc为文档中的连续编号列表提供了令人惊叹的扩展功能:`example_lists`。我们尝试使用自定义编写器生成HTML,但生成的HTML中编号被破坏了。考虑以下MD代码示例:`+ ( @( ) item 1 + ( @( ) item 2)`。

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

Pandoc编号列表在自定义编写器中如何处理长尾词疑问?

(@) 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

如果为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

我们只会看到最终列表项的数字:

1 2 1

所以我认为这个问题不在作家本身.你有什么想法如何解决这个问题?

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

-- for counting examples (@) local ExampleIdx = 1 function OrderedList(items, num, sty, delim) local buffer = {} for _, item in pairs(items) do table.insert(buffer, "<li>" .. item .. "</li>") end local start = "" if sty == "Example" then if ExampleIdx > 1 then start = ' start="' .. ExampleIdx .. '" ' end ExampleIdx = ExampleIdx + table.getn(items) end return '<ol' .. start .. '>\n' .. table.concat(buffer, "\n") .. "\n</ol>" end