是否可以在 pandoc 过滤器上启用扩展?
Is it posible to enable extensions on pandoc filters?
我正在尝试制作一个过滤器,将 org-mode 的某些功能转换为 GitLab-markdown(开箱即用的 Pandoc 不支持),特别是数学块。
过滤器应该在转换为 markdown
时起作用,但不是给出数学块的降价格式(由 $$...$$
括起来),它应该将块写为
``` math
a + b = c
```
我现在的preces是
在 org-mode 中,数学块就是乳胶代码:
\begin{equation}
a + b = c
\end{equation}
这被解析为格式为 latex
的 pandoc AST RawBlock
。然后我删除第一行(\begin{equation}
)和最后一行(\end{equation}
),并构建一个带有属性 {"math"}
的 pandoc CodeBlock
,因此 CodeBlock
对象显示在AST 为
CodeBlock ("",["math"],[]) "a + b = c\n"
然后我让Pandoc创建markdown文档,写出来的结果是
``` {.math}
a + b = c
```
问题:
我想要 math
,而不是 {.math}
,不使用 CLI 选项。
我知道这可以通过将 Writer 扩展 fenced_code_attributes
设置为 false(例如 $pandoc -w markdown-fenced_code_attributes ...
)来完成,但我更希望在过滤器中完成此操作。
或者是否可以在过滤器中设置扩展?
这是我尝试的 lua-过滤器:
function split(str,pat)
local tbl = {}
str:gsub(pat, function(x) tbl[#tbl+1]=x end)
return tbl
end
function RawBlock(rb)
if rb.format == "latex" then
local text = rb.text
split_text = split(text, "[^\n]*")
if split_text[1] == '\begin{equation}' and split_text[#split_text-1] == '\end{equation}' then
table.remove(split_text, #split_text-1)
table.remove(split_text, 1)
text = table.concat(split_text, "\n")
local cb = pandoc.CodeBlock()
cb.attr = {"",{"math"}}
cb.text = text
return cb
end
end
end
您可以通过自己创建所需的块来完全控制输出。
例如,您可以写
而不是 local cb = pandoc.CodeBlock()
ff.
return pandoc.RawBlock('markdown',
string.format('``` math\n%s\n```\n', text)
)
所以你基本上是自己创建 Markdown,这在代码块的情况下相对安全(假设数学不包含 ```
,这将是非常不寻常的)。
至于原问题:目前无法在过滤器中启用扩展或选项。
我正在尝试制作一个过滤器,将 org-mode 的某些功能转换为 GitLab-markdown(开箱即用的 Pandoc 不支持),特别是数学块。
过滤器应该在转换为 markdown
时起作用,但不是给出数学块的降价格式(由 $$...$$
括起来),它应该将块写为
``` math
a + b = c
```
我现在的preces是
在 org-mode 中,数学块就是乳胶代码:
\begin{equation}
a + b = c
\end{equation}
这被解析为格式为 latex
的 pandoc AST RawBlock
。然后我删除第一行(\begin{equation}
)和最后一行(\end{equation}
),并构建一个带有属性 {"math"}
的 pandoc CodeBlock
,因此 CodeBlock
对象显示在AST 为
CodeBlock ("",["math"],[]) "a + b = c\n"
然后我让Pandoc创建markdown文档,写出来的结果是
``` {.math}
a + b = c
```
问题:
我想要 math
,而不是 {.math}
,不使用 CLI 选项。
我知道这可以通过将 Writer 扩展 fenced_code_attributes
设置为 false(例如 $pandoc -w markdown-fenced_code_attributes ...
)来完成,但我更希望在过滤器中完成此操作。
或者是否可以在过滤器中设置扩展?
这是我尝试的 lua-过滤器:
function split(str,pat)
local tbl = {}
str:gsub(pat, function(x) tbl[#tbl+1]=x end)
return tbl
end
function RawBlock(rb)
if rb.format == "latex" then
local text = rb.text
split_text = split(text, "[^\n]*")
if split_text[1] == '\begin{equation}' and split_text[#split_text-1] == '\end{equation}' then
table.remove(split_text, #split_text-1)
table.remove(split_text, 1)
text = table.concat(split_text, "\n")
local cb = pandoc.CodeBlock()
cb.attr = {"",{"math"}}
cb.text = text
return cb
end
end
end
您可以通过自己创建所需的块来完全控制输出。
例如,您可以写
而不是local cb = pandoc.CodeBlock()
ff.
return pandoc.RawBlock('markdown',
string.format('``` math\n%s\n```\n', text)
)
所以你基本上是自己创建 Markdown,这在代码块的情况下相对安全(假设数学不包含 ```
,这将是非常不寻常的)。
至于原问题:目前无法在过滤器中启用扩展或选项。