1

我想将保存为 GIF 格式的 MathType 方程转换为 MathML。首先,我打开了这些 GIF 文件并将它们保存在 MathType 6.7 中。因此,MathML 文本被插入到 GIF 文件的末尾。但是,当我使用 Perl 脚本从这些 GIF 文件中提取 MathML 文本时,我发现 MathML 文本中有一些乱码,如下所示:

<mn >xxx</mn>

在上面的行中,在'mn'标签之前插入了一个乱码。这是 MathType 的 BUG 吗?我该如何解决这个问题?我已经上传了我的测试 GIF 文件。网址是:http ://ubuntuone.com/p/1352/

更新:我试图在这里粘贴完整的 MathML 块,但我发现 MathML 文本的语法格式混乱。所以我把 MathML 贴在了 GitHub 上:https ://gist.github.com/1068723 。

MathML 文本第 7 行出现乱码:“?#x00A0;”。

不包含 MathML 文本的原始 GIF 文件:http: //ubuntuone.com/p/13Ba/

从 MathType 生成的 GIF 图像中提取 MathML 的 Perl 脚本:https ://gist.github.com/1068749

谢谢,想想

4

1 回答 1

2

谢谢思思。可能是您错误地提取了数据(我们还没有查看您的脚本)。只有一个 GIF 包含 MathML——文件名以 106R 开头的那个。在那一个中​​,如果您只是从看起来像 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/

于 2011-07-06T19:29:58.120 回答