У меня есть документ Markdown, содержащий необработанные команды LaTeX. Я пытаюсь использовать фильтр Lua с Pandoc (2.0.1.1) для преобразования команд 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
?
pandoc.Span
- это упаковать их в конкретный объект, вызвавpandoc.Attr
и затем передав этот объект вpandoc.Span
. Вы можете сделать это одной строкой:return pandoc.Span({pandoc.Str(text)}, pandoc.Attr("name",{"class"},{lang = "es-SP"}))
- person Egor Skriptunoff   schedule 14.11.2017lang
, который я передаюpandoc.Attr
, не отображается в выводе. Это происходит независимо от того, делаю ли я это, как в моем вопросе, или в одной строке, как предложил @EgorSkriptunoff. На выходе из предложенного им кода будет[Para [Span ("name",["class"],[]) [Str "hola"]]]
, без атрибутов, только с идентификатором и классом (который мне не нужен). Поскольку атрибутlang
не отображается в выводе, я предполагаю, что должен передать его неверным способом. Таким образом, мой вопрос: как правильно его пройти? - person jcr   schedule 14.11.2017