簡體   English   中英

Pandoc Lua過濾器:如何為Span元素指定屬性

[英]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"}})

這不是表示對的好方法。 目前實施的原因有兩個:

  1. 它反映了在pandoc的JSON輸出中如何編碼對(以及一般屬性)的方式。
  2. 這些對具有固定的順序。

當人們想要保證在通過過濾器時不會改變屬性的順序時,最后一部分很重要。 lua中沒有規則確定表中鍵的順序:lua表{one = 1, two = 2}可以作為屬性列表{one="1" two="2}讀回到pandoc中as {two="2" one="1"} 。現在,屬性的順序對於大多數應用程序而言並不重要,但我們無法確定。因此,不太直觀的表示。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM