将MathML转换为Latex

Jea*_*eri 3 xslt latex transformation mathml

这篇文章的启发,我尝试转换MathML示例,如下所示:

<math>
  <mrow>
    <mfrac>
      <mrow><mi>x</mi></mrow>
      <mrow><mi>y</mi></mrow>
    </mfrac>
  </mrow>
</math>
Run Code Online (Sandbox Code Playgroud)

到乳胶使用xsltproc.首先,我从这里下载了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
Run Code Online (Sandbox Code Playgroud)

所以,当我这样做的时候

$> xsltproc mmltex.xsl input.mml




                    x


                    y
Run Code Online (Sandbox Code Playgroud)

哪个不正确,它不是乳胶分数.有什么建议我可能在这里做错了吗?

Mat*_*ler 5

仅将文本内容作为转换的结果通常表示样式表中没有应用任何模板.然后,内置模板单步执行并跳过除文本节点之外的所有内容,这些文本节点将发送到输出.

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

match="m:math[not(@mode) or @mode='inline'][not(@display)] | m:math[@display='inline']">
Run Code Online (Sandbox Code Playgroud)

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

xmlns:m="http://www.w3.org/1998/Math/MathML"
Run Code Online (Sandbox Code Playgroud)

另一方面,您显示的输入文件不在任何名称空间中.尝试以下输入文件:

<math xmlns="http://www.w3.org/1998/Math/MathML">
  <mrow>
    <mfrac>
      <mrow><mi>x</mi></mrow>
      <mrow><mi>y</mi></mrow>
    </mfrac>
  </mrow>
</math>
Run Code Online (Sandbox Code Playgroud)

在上面的XML文档中,我已经在元素上声明了一个默认命名空间math.它的所有子元素也都采用这个命名空间.

然后,输出包含:

\frac{x}{y}
Run Code Online (Sandbox Code Playgroud)

正如 W3C页面所说:

[命名空间]的典型用法是:

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