将MathML转换为Latex

4

这篇帖子的启发,我试图转换类似以下所示的MathML示例:

<math>
  <mrow>
    <mfrac>
      <mrow><mi>x</mi></mrow>
      <mrow><mi>y</mi></mrow>
    </mfrac>
  </mrow>
</math>

使用xsltproc将文本转换为Latex。首先,我从这里下载了XSLT文件。现在,对于那些不懂MathML的人来说,上面的例子是一个分数:1/2。

在我解压缩xslt文件并创建MathML文件(input.mml)之后,我有以下文件:

$ ls
README  cmarkup.xsl  entities.xsl  glayout.xsl  input.mml  mmltex.xsl  scripts.xsl  tables.xsl  tokens.xsl

所以,当我执行:

$> xsltproc mmltex.xsl input.mml




                    x


                    y

这不正确,这不是一个LaTeX分数。有什么建议可以帮助我纠正吗?

2个回答

5

仅获得转换结果的文本内容通常意味着样式表中没有应用任何模板。然后,内置模板会介入并跳过除文本节点之外的所有内容,这些文本节点将被发送到输出。

查看您使用的样式表,样式表假定MathML输入在一个命名空间中。例如,看一下我从mmmltext.xsl样式表中获取的这个模板匹配:

match="m:math[not(@mode) or @mode='inline'][not(@display)] | m:math[@display='inline']">

正如您所看到的,元素以m:为前缀,并且更有趣的是,m:被声明为前缀

xmlns:m="http://www.w3.org/1998/Math/MathML"

另一方面,你展示的输入文件不属于任何命名空间。请尝试使用以下输入文件:
<math xmlns="http://www.w3.org/1998/Math/MathML">
  <mrow>
    <mfrac>
      <mrow><mi>x</mi></mrow>
      <mrow><mi>y</mi></mrow>
    </mfrac>
  </mrow>
</math>

在上面的XML文档中,我在math元素上声明了一个默认命名空间。所有子元素也采用此命名空间。
然后,输出包含:
\frac{x}{y}

正如W3C页面所述:

此命名空间的典型用法是:

<math xmlns="http://www.w3.org/1998/Math/MathML">


2
我正在寻找一种快速在网上实现此操作的方法。
以下是一个将MathML转换为LateX的npm软件包链接。 https://npm.runkit.com/mathml-to-latex 只需复制,粘贴和运行即可。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接