【问题标题】:Pandoc Lua filters: how to specify attributes for Span elementPandoc Lua 过滤器:如何为 Span 元素指定属性
【发布时间】:2017-11-15 03:40:40
【问题描述】:

我有一个包含原始 LaTeX 命令的 Markdown 文档。我正在尝试使用带有 Pandoc (2.0.1.1) 的 Lua filter 将 LaTeX 命令转换为更便携的东西。特别是,指定文本语言的命令应转换为具有lang 属性的范围。问题是我不知道如何将属性传递给pandoc.Span 构造函数。这是我对过滤器的尝试 (filter.lua):

function RawInline(elem)
  if elem.format == "tex" then
    text = string.match(elem.text, "\\textspanish{(.+)}")
    if text then
      contents = {pandoc.Str(text)}
      attrs = pandoc.Attr("",{},{lang = "es-SP"})
      return pandoc.Span(contents, attrs)
    end
  else
    return elem
  end
end

示例用法:

echo '\textspanish{hola}' | pandoc -f markdown -t native --lua-filter=filter.lua

输出为[Para [Span ("",[],[]) [Str "hola"]]],跨度上没有属性。

如果我将名称和/或类传递给 pandoc.Attr,它们就会通过,例如,attrs = pandoc.Attr("name",{"class"},{lang = "es-SP"}) 产生 [Para [Span ("name",["class"],[]) [Str "hola"]]]。但是我传递给构造函数的属性永远不会出现在输出中。将属性传递给pandoc.Attr 的正确方法是什么?

【问题讨论】:

  • 我不明白你想要什么。把什么从哪里传到哪里?您说您不能将属性传递给 Span 构造函数,但您表明更改属性并将它们放入 span 构造函数最终会出现在您的输出中?我很困惑
  • 似乎将属性传递给pandoc.Span 的唯一方法是通过调用pandoc.Attr 将它们“打包”到特定对象中,然后将该对象传递给pandoc.Span。您可以在一行中完成:return pandoc.Span({pandoc.Str(text)}, pandoc.Attr("name",{"class"},{lang = "es-SP"}))
  • 我已经编辑了我的问题的最后一句话,以便更清楚。我的问题是我传递给pandoc.Attrlang 属性没有出现在输出中。无论我是按照我的问题还是按照@EgorSkriptunoff 的建议在一行中执行此操作,都会发生这种情况。他建议的代码的输出是[Para [Span ("name",["class"],[]) [Str "hola"]]],没有属性,只有一个ID和一个类(我不需要)。由于lang 属性没有出现在输出中,我认为我必须以错误的方式传递它。因此我的问题是:通过它的正确方法是什么?

标签: lua pandoc


【解决方案1】:

您在 lua 过滤器实现中发现了其中一个粗糙的边缘;应该解决这个问题并使其更加用户友好。

当前实现使用二元素表来保存键值对:

attrs = pandoc.Attr("", {}, {{"lang", "es-SP"}})

这不是表示对的好方法。当前实施的原因有两个:

  1. 它反映了 pandoc 的 JSON 输出中对(和一般属性)的编码方式。
  2. 这些对具有固定顺序。

最后一部分很重要,当我们想保证属性的顺序在通过过滤器时不会改变。 lua 中没有决定表中键顺序的规则:lua 表{one = 1, two = 2} 可以作为属性列表{one="1" two="2}{two="2" one="1"} 读回pandoc。现在,对于大多数应用程序来说,属性的顺序应该无关紧要,但我们不能确定。因此不太直观的表示。

【讨论】:

  • 请提出issue 并描述您喜欢的界面。我们需要为此找到一个良好、直观的界面。
猜你喜欢
  • 1970-01-01
  • 2019-10-16
  • 1970-01-01
  • 2019-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-05
  • 2015-07-29
相关资源
最近更新 更多