前言
MathType是一款公式工具,可以作为插件安装到office等软件,其将公式存储两部分wmf文件和二进制objectOle对象,其中公式存储是以MTEF语言内嵌在这两部分中,这是一款MathType私有的技术规范,学习MTEF相关知识为为后续公式工作打基础。
MathType是一个由Design Science创建的软件应用程序,允许创建数学符号以纳入桌面和网络应用程序中。在2017年Design Science被Maths for More收购后,他们的WIRIS网络方程编辑软件被重新命名为MathType[1]。自1987年首次推出以来,Design Science已经发布了MathType的新版本,最新的是2019年。
MTEF的文档资料比较少,而且基本上都是英文文档,读出来比较费事。
本文参考 主要 https://rtf2latex2e.sourceforge.net/MTEF5.html 的是MTEF5的文档,将学习过程中的一些知识点记录下来。
其他参考:
- https://en.wikipedia.org/wiki/MathType
- https://www.mathtype.cn/jiqiao/mathtype-sxbj.html 【Word文档中展现的数学公式与MathType上编辑的数学公式不一致】
目录
- 摘要
- 介绍
- MTEF历史版本
- MTEF存储格式
- MTEF header 格式
- MTEF data 格式
内容
1、摘要
本文档描述了MTEF,MathType 4.0(所有平台)使用的二进制方程格式。MTEF被嵌入由MathType产生的OLE方程对象中,以及MathType可以保存方程的所有文件格式中。MathType用于将此信息嵌入此类文件的方法在另一份文件中描述。参见MTEF如何存储在文件和对象中。
这个文件是1999年8月9日的,是用Wayback机器恢复的。MathType的人有更多最新的文件,但许可证限制与GPL不兼容。
2、介绍
该文件描述了MathType 4.0(所有平台)使用的二进制方程格式。虽然MTEF不是定义方程的最友好的媒介,但有很多人要求得到这些信
息,我们决定还是要发布它。我们必须警告读者,它不是一种容易理解的格式,更重要的是,MathType在处理它时一点也不宽容。这意味着,如果你发送MathType MTEF有错误,它可能会崩溃。至少,你会得到一个有格式问题的方程。另外,它是一种二进制格式。这意味着你不能用字符串来表示方程,这使得用Visual Basic等编程语言创建MTEF变得有点困难。
MathType如何将方程描述存储在OLE方程对象、文件或剪贴板上,这里不作描述。请参阅关于MathType MTEF存储的文件,以了解这方面的更多信息。
本文件有时会提到MathType的内部值的名称(例如,parmLINESPACE)。这些是为参考目的而给出的,当这些值由人传达时,便于减少错误。
3、MTEF历史版本
MTEF数据存在于以下版本中。
0 MathType for the Mac 1.x (此格式在此不作描述)
1 MathType for the Mac 2.x 和 MathType for Windows 1.x
2 MathType 3.x 和 Equation Editor 1.x
3 方程编辑器 3.x (此格式不在此描述)
4 MathType 3.5
5 MathType 4.0
版本2与版本1的不同之处仅在于标题的格式。
4、MTEF存储格式
MTEF stream 的总体结构是:
1、MTEF header
2、等式偏好(大小、样式、间距),前面是它们所指的 定义记录Record(可以理解为样式定义,被下面的记录引用)
3、最初的SIZE记录 Record
4、PILE或LINE记录 Record
5、PILE或LINE的内容 Records
6、结束记录 Record
整体可以分为 MTEF header Record + MTEF data Records
两部分
4.1、MTEF header Record 格式
长度以字节为单位 描述 价值
1 MTEF版本 5
1 生成平台 0 for Macintosh, 1 for Windows
1 产生的产品 0 for MathType, 1 for Equation Editor
1 产品版本 4
1 产品颠覆 0
应用钥匙的长度 应用程序密钥,空尾字符串,用于识别编写应用程序。 (例如:"DSMT4 "代表MathType的设计科学版本)
1 方程选项 如果第0位被设置,方程是内联的,否则显示方程的其他位是未使用的,必须为0
4.2、MTEF data Records 格式
MTEF header 之后的实际MTEF数据
1、MTEF data 由一系列的 Records 组成。
2、每条 Record 记录以一个记录类型字节type和一个选项字节options开始,然后是针对该记录的数据。
一旦头被读取,MTEF流的读取应通过读取下一个记录类型来驱动,然后对其采取行动。如果一个给定的记录依赖于不包含在记录本身中的数据,这种数据是由它前面的记录定义的。简单理解就是上一个记录会有指向下一个连续记录的指针。
其中MTEF data的每一条Record前面会有一个字节的type
和一个字节的options
开始,如果记录类型是100或更大,它代表了一个将在未来版本的MTEF中定义的记录。
(1)type字节
目前,读者可以认为在记录类型type后面有一个无符号整数,是记录中后面的字节数(即不包括记录类型和长度)。这使得读取MTEF的软件很容易跳过这些记录。尽管如果所有的记录都有这样的长度值可能会很方便,但它只会出现在未来的扩展记录中(即那些记录类型type >= 100的记录)。
MTEF的一些记录LINE、CHAR、TMPL、PILE、MATRIX和RULER
是定义每个方程结构内容的对象列表Records。简单理解就是这些type的记录Records存储着公式信息.每个对象列表包含一个任意类型的很多记录Records,最后以以END Records结束。
在LINE记录的特殊情况下,如果列表中没有对象,LINE记录将设置mtefOPT_LINE_NULL
选项,在这种情况下,对象列表被完全省略(即没有END Records,只有一个单LINE Record)。尽管MTEF格式对任何特定列表中可能出现的记录类型没有限制,但用户界面会阻止某些事情发生。例如,定义堆的内容的对象列表只包含LINE记录。
MTEF的一些记录(FONT_STYLE_DEF、FONT_DEF、COLOR_DEF和ENCODING_DEF
)本身并不代表方程结构,而是被方程结构记录所引用。MTEF data stream 中的定义记录被分配索引,从1开始(除了ENCODING_DEFs,从5开始),按照它们在流中出现的顺序。引用这些定义的记录使用定义的索引值来进行引用。定义记录总是出现在流中的第一个引用之前。简单理解就是这些是声明的记录,为对象列表Records提供一个索引引用。
(2)option字节
每条 MTEF 5 记录都以类型字节type开头,后跟一个选项字节option。这与早期版本的 MTEF 不同,在早期版本中,选项标志存储在类型字节的上部 4 位中。
但是特定的type后面只能跟特定的option字节
4.3、数值存储格式
(1)对于有符号整数值,如果是在-128~127
范围,那么加上128,范围变成0~255
,使用1个byte表示(1byte = 8bits
、2的8次方为256)
(2)对于无符号整数值,以255为分界,小于255的直接1个字节,大于255的3个字节(255 ,低位 ,高位)
,也就是倒着排,不足的补0
(3)对于偏移值,是所有Record option 记录都能有的,LINE,CHAR,TMPL,PILE,MATRIX和EMBELL记录
可以存储偏移的结果(用户设置的小偏移量)。偏移记录具有mtefOPT_NUDGE选项 (0×8
),选项字节option后紧跟偏移。
偏移量由2个字节或6字节组成,具体取决于偏移量。
- 如果
-128 ≤ dx < +128
并且 -128 ≤ dy < +128
,则偏移量存储为dx + 128 后跟 dy + 128
,(2个字节16位) - 否则,将存储
2个字节 128 + 偏移量 dx 和 dy
(2个128占2个字节16位,dx和dy分别存储为 2个字节16 位,低字节后跟高字节)
(4) 对于字符值,是CHAR Record 特有的,写为有符号整数,如果为正数,表示MathType样式之一。如果该值为负数,则表示由 FONT 记录指定的显式字体。
(5)对于类型大小值,类型大小值(有时称为 lsize)在多个 MTEF 记录中使用。并非所有值在特定记录中都有效。
(6)对于字符样式值,字符样式由单个字节表示,位 0 表示粗体,位 1 表示斜体。
(7)对于水平对齐值,水平对齐值用于多个 MTEF 记录。并非所有值在特定记录中都有效。
(7)对于垂直对齐值,水平对齐值用于多个 MTEF 记录。并非所有值在特定记录中都有效。
5、Record格式
(1)对于结束Record,单一条记录type字节为0,无选项字节。
(2)对于行Line Record,组成
- record type (1) :type类型值为1
- options:选项字节值
- [nudge] if mtefOPT_NUDGE is set:偏移值
- [line spacing] if mtefOPT_LINE_LSPACE is set (16-bit integer):行距值
- [RULER record] if mtefOPT_LP_RULER is set
- object list contents of line (a single pile,characters and templates, or nothing):关联的Records
(3)对于字符CHAR Record,组成
- record type (2):类型
- options:选项
- [nudge] if mtefOPT_NUDGE is set :偏移
- [typeface] typeface value (signed integer;see FONT_STYLE_DEF record below :字体值
- [character] character value (see below) :字符值,字符值本身由一个或多个值表示。这些值的存在与否由选项指示,并按以下顺序显示:
- [embellishment list] if mtefOPT_CHAR_EMBELL is set (embellishments):点缀清单
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)