前言

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上编辑的数学公式不一致】

目录

  1. 摘要
  2. 介绍
  3. MTEF历史版本
  4. MTEF存储格式
    • MTEF header 格式
    • MTEF data 格式
      • type字节
      • option字节

内容

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):点缀清单

MathType MTEF v.5学习文档相关推荐

  1. 手把手教最新最全最详细Git使用教程(图文并茂,附Git命令大全学习文档)

    导读 因为教程详细,所以行文有些长,新手边看边操作效果出乎你的预料.GitHub虽然有些许改版,但并无大碍. 最全Git命令学习文档下载(集合整理,非常适合新手) 一.Git是什么? Git是目前世界 ...

  2. 2w多字总结的VUE学习文档

    VUE学习文档 文章目录 VUE学习文档 回顾: 总结 0 目标 1.前言 2.认识Vue 3.快速入门 3.1.创建工程 3.2.安装vue 3.2.1.下载安装 3.2.2.使用CDN 3.3.v ...

  3. Hadoop大数据平台实践(二):Hadoop生态组件的学习文档

    Hadoop基础组件学习-Yzg-2019-03-06 Hadoop基础组件学习文档.. 1 简介.. 4 HDFS. 5 HDFS读文件.. 6 HDFS写文件.. 7 Mapreduce 8 单词 ...

  4. linux个人学习文档

    Linux系统基础 第1章 Linux简介 1.1开源的力量 1.1.1 我们已经用过的开源软件 1.1.2 开源软件领域的旗帜:Linux 1.1.3 软件开源的好处 1.2 Linux的来历 1. ...

  5. kotlin入门学习文档

    kotlin入门学习文档 前言:本文会着重对比java和kotlin,方便Java选手理解 提前总结:kotlin在服务端应用本质上是基于Java进行的改进,底层都是由JVM翻译成底层语言,我们只需要 ...

  6. 全网最全Flutter的学习文档,不可转载

    Flutter学习文档-Author:Brath 由于文章内容较干,请允许Brath打一波广告- 面试记APP Github:https://github.com/Guoqing815/intervi ...

  7. Eigen 学习文档: 矩阵和向量运算

    Eigen 学习文档: 矩阵和向量运算 本页旨在提供有关如何使用Eigen在矩阵.向量和标量之间执行算术的概述和一些详细信息. 介绍 Eigen通过重载常见的 C++ 算术运算符(如 +.-.*)或通 ...

  8. FreeMarker中文帮助手册API文档,基础入门学习文档

    FreeMarker中文帮助手册API文档,基础入门学习文档 分类: 编程技术 发布: bywei 浏览: 7 日期: 2011年5月28日 分享到: QQ空间 新浪微博 腾讯微博 人人网 什么是Fr ...

  9. ffmpeg的中文学习文档

    ffmpeg的中文学习文档 文章目录: 一.ffmpeg介绍 二.学习参考文档 1.中文 一.ffmpeg介绍 ffmpeg是视频处理工具,可选参数非常多,功能也非常的强大,可以用来开发各种视频处理工 ...

最新文章

  1. python 豆瓣评论数据分析_Python爬虫实战案例:豆瓣影评大数据分析报告之网页分析...
  2. python参考手册 豆瓣_python之父亲自撰写两年后豆瓣评分9.8《python深度学习》PDF分享...
  3. 想成为一名优秀的数据分析师,应该做些什么?
  4. jenkins ssh发布配置
  5. codebrag审核代码工具安装配置
  6. 嵌入式开发环境构建_设计模式:不可变的嵌入式构建器
  7. 毕业就业推荐表计算机,毕业生就业推荐表
  8. sqlite3.h:没有那个文件或目录
  9. 【英文写作日知录 第1期】句式汇总 Sun, 05 July 2020
  10. Spring框架----Spring的bean注解
  11. 树的平衡之AVL树——错过文末你会后悔,信我
  12. Java面试题之:分布式缓存
  13. TCP 之 抓包分析
  14. 未来软件是什么样子?-SIF期货
  15. 中专计算机专业包括哪些方面,中专计算机有什么专业?
  16. 工信部宣布新规,微信支付存在漏洞必须整改,网友:马化腾会赔偿损失吗?
  17. MySQL按日期依次统计
  18. 【四二学堂】标准GPS坐标,转换成百度坐标
  19. java 过滤中文_Java 过滤字母、数字和中文 正则表达式
  20. 淘宝店图片尺寸是多少?怎么修改淘宝图片的尺寸?

热门文章

  1. 企微管家如何自动给客户打标签?
  2. 基于PLC系统的点焊机器人数据通讯采集方案
  3. typora图片居中问题
  4. 如何控制秒杀商品页面购买按钮的定时点亮
  5. 咸鱼硬件—ZTMS串口终端交互
  6. 萨尔曼可汗 数学视频
  7. 量子力学 一 基础4 态空间、对偶与线性算符
  8. Bootstrap CSS
  9. matlab离散信号的绘制
  10. DeFi聚合层的价值可能被低估了 |链捕手