受到this帖子的启发,我尝试转换MathML示例,如下所示:
<math>
<mrow>
<mfrac>
<mrow><mi>x</mi></mrow>
<mrow><mi>y</mi></mrow>
</mfrac>
</mrow>
</math>
使用xsltproc
到Latex。首先,我从here下载了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
哪个不正确,它不是乳胶部分。有什么建议我可能在这里做错了吗?
答案 0 :(得分: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}
[此命名空间]的典型用法是:
<math xmlns="http://www.w3.org/1998/Math/MathML">
答案 1 :(得分:1)
我正在寻找一种快速的在线方法。
下面是指向npm软件包的链接,该软件包将MathML转换为LateX。 https://npm.runkit.com/mathml-to-latex
只需复制,粘贴并运行