MathType MTEF v.5学习文档

2023-05-16

前言

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 的总体结构是:
1MTEF header
2、等式偏好(大小、样式、间距),前面是它们所指的 定义记录Record(可以理解为样式定义,被下面的记录引用)
3、最初的SIZE记录 Record 
4PILELINE记录 Record
5PILELINE的内容 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数据

1MTEF 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(使用前将#替换为@)

MathType MTEF v.5学习文档 的相关文章

  • c语言入门这一篇就够了-学习笔记(一万字)

    内容来自慕课网 xff0c 个人学习笔记 加上了mtianyan标签标记知识点 C语言入门 gt Linux C语言编程基本原理与实践 gt Linux C语言指针与内存 gt Linux C语言结构体 https www imooc co
  • GPS接收机(一)概述

    概述 接下来的几篇博客包括如下内容 1 xff0c 圆极化天线 xff1a 包括圆极化天线的设计 xff0c 场路协同仿真 xff08 电磁场和电路 xff09 xff0c 相位中心的计算 2 xff0c 低噪放 xff1a 包括低噪放的设
  • ERROR: invalid message type: fl_com/sensor_connect_state. If this is a valid message type, perhaps y

    ERROR invalid message type fl com sensor connect state If this is a valid message type perhaps you need to type rosmake
  • libcurl进行post

    libcurl进行post main函数 xff0c 初始化和清理curl 全局初始化curl curl global init CURL GLOBAL ALL std string url 61 34 http xxxx 34 std s
  • STL几个容器的比较

    vector xff1a 连续内存 xff0c 随机访问数据成员快 xff0c 但是频繁的插入 xff08 需要移动要插入的元素的后面的所有元素 xff09 或者扩容 vector扩容后会清掉原来的数据 xff0c 拷贝到新的申请的大的内存
  • STL注意问题

    1 由于继承的存在 xff0c 拷贝会导致分割 那就是说 xff0c 如果你以基类对象建立一个容器 xff0c 而你试图插入派生类对象 xff0c 那么当对象 xff08 通过基类的拷贝构造函数 xff09 拷入容器的时候对象的派生部分会被
  • CAN总线通信协议详讲

    CAN简介 CAN是Controller Area Network 的缩写 xff08 以下称为CAN xff09 xff0c 是ISO国际标准化的串行通信协议 由德国电气商博世公司在1986 年率先提出 此后 xff0c CAN 通过IS
  • gazebo仿真——controller配置(transmission/hardwareInterface标签)

    参考roswiki controller官方说明 本文作为古月大神的补充ROS探索总结 xff08 三十一 xff09 ros control 为了在gazebo中实现机器人关节的控制 xff0c 需要求建立一个controller控制器
  • NDK--CMakeLists配置第三方so库

    当我们创建一个NDK工程时 xff0c 会自动创建一个CMakeLists txt的文件 xff0c 在AS中c 43 43 的编译器是使用LLVM xff0c 规则为cmake xff0c 今天来学习下cmake的基本套路 首先 xff0
  • postman插件下载安装教程(详细)

    一 前言 postman是一款强大网页接口调试工具 xff0c 我们在平时开发过程中经常会使用到 xff0c 一般使用最多的是postman的客户端 xff0c 实际上postman在谷歌浏览器上也提供了插件 xff0c 可以不必要安装客户
  • CMake交叉编译简单教程

    首先要安装cmaek 然后安装交叉编译链 一 CMake简介 xff1a CMake是一个跨平台的安装 编译 工具 可以通过简单的语句来描述所有平台的安装 编译过程 他能够输出各种各样的 makefile 或者 project 文件 二 C
  • 锂电池的常见接口

    我们在做一些小型化便携式设备的时候 xff0c 经常会用到锂电池 xff0c 常见的锂电池接口如图 xff1a
  • Ubuntu14.04_ROS学习笔记(7) odroid板上操作系统和电脑端主从连接

    4 29日 xff0c 距离上次写过于odroid ROS的博客已经过去近4周 xff0c 在这四周发生了很多曲折事 xff0c 研究生的调剂和面试问题 xff0c 导师双向选择也出现了问题 xff0c 调档问题 xff0c 然后和GF出去
  • ROS学习----Publisher与Subscriber

    1 Publisher 发布者 与subscriber 订阅者 关系 Publisher的主要作用是对于指定话题发布特定数据类型的消息 下面是利用代码实现一个节点 xff0c 节点创建一个Publisher并发布字符串 Hello worl
  • liunx 下如何查看make与cmake版本

    cmake cmake version 即可查看cmake的版本 make 如果是在 shell 中查看 xff0c 那么直接 make v 即可 如果是在 makefile 中获取 xff0c 则用 MAKE VERSION xff0c
  • CAN协议解析

    CAN协议解析 CAN 总线组网连线图CAN的报文格式报文格式扩展CAN错误检测 波形解析ID数据长度数据字段CRC CAN 总线组网连线图 根据CAN总线的硬件特性 xff0c 当一条CAN总线上挂接多个驱动器的时候 xff0c 应当按照
  • 字节序的大端和小端

    字节序 字节序 xff08 Byte Order xff09 是指在多字节的数据类型 xff08 如整型 浮点型等 xff09 在内存中存储时 xff0c 字节的排列顺序 大端字节序 xff08 Big Endian xff09 xff1a
  • STM32 HAL 串口收发(无DMA,中断接收)

    STM32CUBE配置 一 使用printf发送数据 xff0c 在usart c中添加代码串口重定向 USER CODE BEGIN 0 include lt stdio h gt ifdef GNUC define PUTCHAR PR
  • 2019年电赛综合测评题详解

    2019年全国大学生电子设计竞赛综合测评已经结束 xff0c 邀请到西电研究生李天红同学给大家做重点分析 首先看题目 xff1a 视频要点提示 xff1a 题目分析 常用波形变换电路 两种可行方案 方案仿真 实际过程中遇到的问题分析 完整视
  • 《Spring源码深度解析 郝佳 第2版》SpringBoot体系分析、Starter的原理

    往期博客 Spring源码深度解析 郝佳 第2版 容器的基本实现与XML文件的加载 Spring源码深度解析 郝佳 第2版 XML标签的解析 Spring源码深度解析 郝佳 第2版 bean的加载 循环依赖的解决 Spring源码深度解析

随机推荐