免費論壇 繁體 | 簡體
Sclub交友聊天~加入聊天室當版主
分享
返回列表 发帖

MathType转码规则研究

之前一直用 mathtype6.0,昨天换了 mathtype6.9,发现在复制为 latex 代码时比之前有了更多的 { },就连简单的 $a^2+b^2$ 都变成 {a^2} + {b^2}。

闲来无事,不如鼓捣一下它的转码规则,于是在其安装目录里找到了相关文件,它们都在 C:\Program Files\MathType\Translators 中,用文本编辑器打开里面的文件就可以看到内容,那些代码连蒙带猜大概还是看得懂的。

为了对比研究,我同时也打开以前保存的 6.0 绿色版的 Translators 里的来看,发现以前的简单很多。

通过对比很快就发现了刚才提到的问题所在:
在 6.0 的 TeX (base).tdl 里有这样的几句
  1. sup         = "^#2 ";   
  2. sub         = "_#1 ";   
  3. subsup      = "_#1^#2 ";
复制代码
而到了 6.9 的 TeX (base rules).tdl 里就变成
  1. sup         = "^#2";   
  2. sub         = "_#1";   
  3. sup/scan    = "{#1^#3}";
  4. sub/scan    = "{#1_#2}";
  5. subsup      = "_#1^#2";
复制代码
很明显,多出的两句就是 $a^2+b^2$ 变成 {a^2} + {b^2} 的原因,搞不懂这样做的用意。

去掉那两句应该就会少很多 { } 了,不过我没这样做,因为我不想改原文件,我想应该可以自己创建一个文件来自定义规则,试了一下果然可以。

当然我不可能完全重写,毕竟有很多东西还搞不清楚,只能是拿现有的来改,由于 6.9 的比较复杂,我用了 6.0 的来改。

这三个文件是初步成果: kkkkk.tdl (37.14 KB) kk1.tdl (28.62 KB) kk2.tdl (17.82 KB)

将它们放到 C:\Program Files\MathType\Translators 中,重启 mathtype,再到转换设置里就会看到 kkkkk 这一项。
捕获.PNG
2017-11-24 17:21


目前转换一般公式的代码已经很少有多余的东西了,而且比较符合我自己的习惯,比如 $\ge$ 会转成 \geqslant ,$\Rightarrow$ 会转成 \riff ,复制多行会转成 align* 环境等等,当然还有一些没处理好,如极限就还会有 \mathop 这些多余的东西,\left( \right) 内也会有多余的 { }。

测试一下,将以下文件保存到电脑上,用 mathtype 打开,按上述方法设好 kkkkk 后,全选、复制、粘贴来这里,看看代码如何。
tran_test.gif
2017-11-24 18:48


如果OK的话,输出的将是:
  1. \begin{align*}
  2. &\sum \frac {a^2}{b^2}\geqslant \sum \frac ab+{\underbrace {1+\cdots +n}_n}+\sqrt a+\sqrt {aa}+\sqrt[3]a+\sqrt[3]{aa}\\
  3. &\riff \sum_{i=1}^na_n+\prod_{i=1}^\infty b_i+\bigcup_{i=1}A_i+\bigcap B_i\\
  4. &\iff \int f(x)dx+\int_a^bx^2\rmd x+\vv {AB}=\bm a+\sin 30\du\\
  5. &\liff x_{1,2}=\frac {-b\pm \sqrt {b^2-4ac}}{2a}+\{x|x\text{ is odd}\}
  6. \end{align*}
复制代码
欢迎大家测试。
分享到: QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
冇钱又冇样、冇型又冇款、冇身材又冇文采、冇学历又冇能力、冇高度冇速度冇力度兼夹冇野做!(粤语)
口号:珍爱生命,远离考试。

本帖最后由 isee 于 2017-11-24 20:44 编辑

回复 1# kuing


    你算半个mathtype 的开发人员了。

    直接把你指出的两行标注了,转换后,果然清爽不少。


    反正你会经常用,就会有维护,哈哈,我就用你的修改方案。。。。



=====================

擦,将mathtype转换成LaTeX代码,官方自己的,都不能将方程组,晕。

TOP

回复 2# isee

并不是很复杂的东西,你也可以研究下,按自己的喜好来定义
也可以参考我那三个文件的改法,改动的地方我都用 //*** 标记的

TOP

仔细看了下 6.9 的那些,发现其实也并不是复杂很多,而且它们更科学更易于管理,一方面是文件分得更清,另一方面是定义了更多的变量来统一控制某些东西。

而具体的规则其实除了1楼提到的那个之外,其他也没差多少。

另外我看修改定义时注释似乎不是必要的,直接在后面重写就行(类似于 tex 的 \def),这样说来,如果只是少量修改的话,只需创建一文件,读入需要的文件,再在后面重写想改的那些即可。

先眯一会,晚点再试。

TOP

回复 4# kuing


    的确与 $\mathrm \LaTeX$ 语法很像,这也许就是这种语法的优点。

TOP

回复 4# kuing

试了下,基本上和我想的一样,但也有两句意外。

将这个文件 kuing.tdl (4.48 KB) 放到 C:\Program Files\MathType\Translators 中,到转换设置里就会看到 kuing 这一项。
(如果你在用较低版本则可能会提示缺少文件)

效果和1楼的大致相同,不同的几点有:

  • 直接输入 * 会转为 \cdot ,这是为了方便打点乘
  • 内部多行公式(如方程组)会转成 aligned 环境
  • 矩阵会转成 matrix 环境


测试文件:
tran_test2.gif
2017-11-25 19:18

用 mathtype 打开,按上述方法设好 kuing 后,全选、复制、粘贴来这里,OK的话,转出来的代码是:
  1. \begin{align*}
  2. &\sum \frac {a^2}{b^2}\geqslant \sum \frac ab+{\underbrace {1+ \cdots +n}_n}+\sqrt a+\sqrt {aa}+\sqrt[3]a+\sqrt[3]{aa}\\
  3. & \riff \sum_{i=1}^na_n+\prod_{i=1}^\infty b_i+\bigcup_{i=1}A_i+\bigcap B_i\\
  4. & \iff \int f(x)dx+\int_a^bx^2\rmd x+\vv {AB}=\bm a+\sin 30\du\\
  5. & \liff x_{1,2}=\frac {-b\pm \sqrt {b^2-4ac}}{2a}+\{x|x/2\text{ is odd}\}\\
  6. &a\cdot b=\left\{ \begin{aligned}
  7. &ax^2+bx+c=0\\
  8. &2ax+b=0\\
  9. &2a=0
  10. \end{aligned} \right.=\begin{matrix}
  11. {11}&{22}&{33}\\
  12. {44}&{55}&{66}\\
  13. {77}&{88}&{99}
  14. \end{matrix}
  15. \end{align*}
复制代码
冇钱又冇样、冇型又冇款、冇身材又冇文采、冇学历又冇能力、冇高度冇速度冇力度兼夹冇野做!(粤语)
口号:珍爱生命,远离考试。

TOP

试了一下其他类型的转换规则,发现 Texvc 那套规则也是不错嘀(选项中的最后一个),它转出来的代码空格相对少,紧凑一些,支持的符号也比较全(LaTeX 2.09 and later 就有些符号不支持或者是用奇怪的方式来实现),唯一的问题是单个字符的上下标也会用 { },不过这没关系,因为可以在某些文本编辑器(如 winedt)里轻松处理掉。

用楼上的方式改写 Texvc ,得: kk_Texvc.tdl (3.77 KB)
(设置方法相同,同样,如果你在用较低版本则可能会提示缺少文件)

测试文件:
tran_test3.gif
2017-11-26 14:25

用 mathtype 打开,按上述方法设好 kk_Texvc 后,全选、复制、粘贴来这里,OK的话,转出来的代码是:
  1. \begin{align*}
  2. &\sum \frac{a^{2}}{b^{2}}\geqslant \sum \frac{a}{b}+{\underbrace{1+\cdots +n}_{n}}+\sqrt{a}+\sqrt{aa}+\sqrt[3]{a}+\sqrt[3]{aa}\\
  3. &\riff \sum_{i=1}^{n}a_{n}+\prod_{i=1}^{\infty }b_{i}+\bigcup_{i=1}A_{i}+\bigcap B_{i}\\
  4. &\iff \int f(x)dx+\int_{a}^{b}x^{2}\rmd x+\vv{AB}=\bm{a}+\sin 30\du\\
  5. &\liff x_{1,2}=\frac{-b\pm \sqrt{b^{2}-4ac}}{2a}+\{x|x/2\text{ is odd}\}\\
  6. &a\cdot b=\left\{ \begin{aligned}
  7. &ax^{2}+bx+c=0\\
  8. &2ax+b=0\\
  9. &2a=0
  10. \end{aligned} \right.=\begin{matrix}
  11.    11 & 22 & 33  \\
  12.    44 & 55 & 66  \\
  13.    77 & 88 & 99  \\
  14. \end{matrix}\\
  15. &\left( \lim _{x\to \infty }f'(x)+f''(x) \right)
  16. \end{align*}
复制代码
将其放到 winedt 中做几下批量替换将单个字符的 { } 去掉后:
  1. \begin{align*}
  2. &\sum \frac{a^2}{b^2}\geqslant \sum \frac ab+{\underbrace{1+\cdots +n}_n}+\sqrt a+\sqrt{aa}+\sqrt[3]a+\sqrt[3]{aa}\\
  3. &\riff \sum_{i=1}^na_n+\prod_{i=1}^{\infty }b_i+\bigcup_{i=1}A_i+\bigcap B_i\\
  4. &\iff \int f(x)dx+\int_a^bx^2\rmd x+\vv{AB}=\bm a+\sin 30\du\\
  5. &\liff x_{1,2}=\frac{-b\pm \sqrt{b^2-4ac}}{2a}+\{x|x/2\text{ is odd}\}\\
  6. &a\cdot b=\left\{ \begin{aligned}
  7. &ax^2+bx+c=0\\
  8. &2ax+b=0\\
  9. &2a=0
  10. \end{aligned} \right.=\begin{matrix}
  11.    11 & 22 & 33  \\
  12.    44 & 55 & 66  \\
  13.    77 & 88 & 99  \\
  14. \end{matrix}\\
  15. &\left( \lim _{x\to \infty }f'(x)+f''(x) \right)
  16. \end{align*}
复制代码
已经几乎和手工输入差不多。
冇钱又冇样、冇型又冇款、冇身材又冇文采、冇学历又冇能力、冇高度冇速度冇力度兼夹冇野做!(粤语)
口号:珍爱生命,远离考试。

TOP

返回列表 回复 发帖