regex 将adoc转换为markdown,同时保留latex风格的数学公式

gab6jxml  于 2023-04-22  发布在  其他
关注(0)|答案(1)|浏览(127)

我有一组adoc文档,我正在转换为markdown。对于其中的大多数,我已经能够转换它们:

asciidoc -b docbook -o temp.xml <infile>
pandoc -f docbook -t markdown_strict --atx-headers --mathjax temp.xml -o <outfile>

然后是一些正则表达式来清理一些损坏的图像链接并修复标题。然而,这对内联数学方程不起作用。在adoc中,它们的语法是:latexmath:[$some_equation_here$]有时没有美元符号的多行方程。
当它被转换成DocBook XML时,它似乎被保留了下来,并且是以下格式:

<inlineequation>
<alt><![CDATA[$some_equation_here$]]></alt>
<inlinemediaobject><textobject><phrase></phrase></textobject></inlinemediaobject>
</inlineequation>

但是当pandoc将其转换回markdown时,它会忽略这些xml块。在pandoc转换期间,我如何将其保持为markdown可读的方程($some_equation_here$)格式?mathjax扩展似乎对此操作没有帮助。
我尝试使用一个单独的python正则表达式,它将使用re.sub(r'latexmath:\[\$?(.*?)\$?\]', r'$\g<1>$', file_contents来保留$,但它会导致一些双转义文本,然后必须手动修复,并且有时会给出一些额外的/sup标记。尝试对XML文件做类似的事情,结果也是类似的。

aoyhnmkz

aoyhnmkz1#

查看pandoc代码,似乎DocBook读者希望公式位于<inlineequation>下面的<mathphrase>元素中。因此,将<alt>标记替换为<mathphrase>就足以让pandoc获取公式。这通常会产生无效的DocBook XML,因为<inlineequation>应该包含 either a <mathphrase>or<inlinemediaobjects>,但这对Pandoc来说无关紧要

cat << EOF | pandoc --from=docbook --to markdown --lua-filter=unwrap-math.lua
<para>
  <inlineequation>
    <mathphrase><![CDATA[$some_equation_here$]]></mathphrase>
    <inlinemediaobject><textobject><phrase></phrase></textobject></inlinemediaobject>
  </inlineequation>
</para>
EOF
$some_equation_here$

请注意,pandoc插入的是美元本身,因此这些美元也应该被删除。unwrap-math.lua包含

function Math (mth)
  mth.text = mth.text:gsub('^%$', ''):gsub('%$$', '')
  return mth
end

相关问题