我想将保存为GIF格式的MathType方程转换为MathML。首先,我打开这些GIF文件并将它们保存在MathType 6.7中。因此,MathML文本将插入到GIF文件的末尾。但是,当我使用Perl脚本从这些GIF文件中提取MathML文本时,我在MathML文本中发现了一些乱码,如下文所示:
<mn> XXX和LT; / MN>
在上面的行中,在'mn'标签之前插入了乱码字符。。这是MathType的BUG吗?我该如何解决这个问题?我上传了我的测试GIF文件。网址为:http://ubuntuone.com/p/1352/
更新: 我试图在这里粘贴完整的MathML块,但我发现MathML文本的语法格式是混乱的。所以我在GitHub上粘贴了MathML:https://gist.github.com/1068723。
MathML文本的第七行中有一个乱码:“?#x00A0;”。
原始GIF文件,不包含MathML文本:http://ubuntuone.com/p/13Ba/
从MathType生成的GIF图像中提取MathML的Perl脚本:https://gist.github.com/1068749
谢谢, thinkhy
答案 0 :(得分:2)
谢谢你。它可能是您错误地提取数据(我们尚未查看您的脚本)。只有一个GIF具有MathML - 文件名为106R的MathML。在那一个中,如果你只是抓住第一个看起来像MathML的位的所有字节,直到结束,你会定期在那里得到奇数字节,除了最后一个,大多数是255个。 (但这似乎不是你所看到的垃圾字符。)255的原因是MathML分布在多个注释记录中,每个注释记录都以记录中的字节数开始。从MathType SDK(免费下载;链接如下):
GIF图像文件
MathML文本作为应用程序扩展记录嵌入到GIF文件中,该记录由14字节标头(应用程序扩展描述符)和MTEF数据组成。标题包含:
Byte Introducer = 0x21;
Byte ExtensionLabel = 0xFF;
Byte BlockSize = 0x0B;
Byte ApplicationId[8] = "MathType";
Byte AuthenticationCode[3] = "003";
数据在此标题后面,并写为一系列块,每个块包含255个字节或更少。每个块以单字节计数开始,后跟数据。结尾标记为长度为0的块。
标头足够独特,提取数据的最简单方法可能是扫描文件中的14字节标头,然后期望遵循MathML数据块。正确解码GIF记录也不是那么难,但显然需要你阅读GIF规范。
您可能已经在使用SDK了,但是您没有说明您是否是,所以这里是链接:http://www.dessci.com/en/reference/sdk/。