[英]Pandoc Lua filters: how to specify attributes for Span element
我有一個包含原始LaTeX命令的Markdown文檔。 我正在嘗試使用帶有Pandoc(2.0.1.1)的Lua過濾器將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
的正確方法是什么?
你找到了lua過濾器實現中的一個粗糙邊緣; 這應該被解決,並使用戶更友好。
當前實現使用兩元素表來保存鍵值對:
attrs = pandoc.Attr("", {}, {{"lang", "es-SP"}})
這不是表示對的好方法。 目前實施的原因有兩個:
當人們想要保證在通過過濾器時不會改變屬性的順序時,最后一部分很重要。 lua中沒有規則確定表中鍵的順序:lua表{one = 1, two = 2}
可以作為屬性列表{one="1" two="2}
讀回到pandoc中as {two="2" one="1"}
。現在,屬性的順序對於大多數應用程序而言並不重要,但我們無法確定。因此,不太直觀的表示。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.