pandoc 中将 asciimath 公式转换为 latex 公式

文章目录

  • 问题
  • 解决方法

问题

本人觉得 asciimath 的公式语法比 latex 的公式语法要简洁一下, 也对 asciimath 公式语法比较熟悉. 但是, pandoc markdown 文档中, 只能嵌入 latex 公式语法, 比如使用 latex 语法:

$$\displaystyle f{{\left({x}\right)}}={\sum_{{{n}={0}}}^{\infty}}\frac{{{{f}^{{{\left({n}\right)}}}{\left({a}\right)}}}}{{{n}!}}{\left({x}-{a}\right)}^{n}$$

会转换为

f ( x ) = ∑ n = 0 ∞ f ( n ) ( a ) n ! ( x − a ) n \displaystyle f{{\left({x}\right)}}={\sum_{{{n}={0}}}^{\infty}}\frac{{{{f}^{{{\left({n}\right)}}}{\left({a}\right)}}}}{{{n}!}}{\left({x}-{a}\right)}^{n} f(x)=n=0n!f(n)(a)(xa)n

如果使用 asciimath 语法:

$$f(x)=sum_(n=0)^oo(f^((n))(a))/(n!)(x-a)^n$$

会原样显示为

f ( x ) = s u m ( n = 0 ) o o ( f ( ( n ) ) ( a ) ) / ( n ! ) ( x − a ) n f(x)=sum_(n=0)^oo(f^((n))(a))/(n!)(x-a)^n f(x)=sum(n=0)oo(f((n))(a))/(n!)(xa)n

解决方法

可以编写一个过滤器, 将 asciimath 公式格式转换为 latex 公式格式. 这里用到了 python 编写的工具 belerico /py_asciimath , 由它完成真正的 asciimath 到 latex 的转换.

下面是使用 lua 编写的 pandoc 过滤器:

-- 过滤器
function asciimath2latex(m)
    local ot = io.popen("py_asciimath \'" ..  m.text .. "\' from asciimath to latex", "r")
    local line = ot:read("*a")
    local latex = string.gsub(line, "%$", "", 2)
    -- print(latex)
    return pandoc.Math(m.mathtype, latex)
end

-- 导出函数
return {
    {Math = asciimath2latex},
}

假如有 asciimath 格式公式

x/x={(1,if x!=0),(text{undefined},if x=0):}

执行 pandoc --lua-filter=asciimath2latex.lua ... 后在目标文档中会生成公式

x x = { 1 if x ≠ 0 undefined if x = 0 \displaystyle\frac{x}{{x}}={\left\lbrace\begin{matrix}{1}&{\quad\text{if}\quad}{x}\ne{0}\\\text{undefined}&{\quad\text{if}\quad}{x}={0}\end{matrix}\right.} xx={1undefinedifx=0ifx=0

你可能感兴趣的:(pandoc,lua)