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 里有这样的几句[code]sup = "^#2 ";
sub = "_#1 ";
subsup = "_#1^#2 ";[/code]而到了 6.9 的 TeX (base rules).tdl 里就变成[code]sup = "^#2";
sub = "_#1";
sup/scan = "{#1^#3}";
sub/scan = "{#1_#2}";
subsup = "_#1^#2"; [/code]很明显,多出的两句就是 $a^2+b^2$ 变成 {a^2} + {b^2} 的原因,搞不懂这样做的用意。
去掉那两句应该就会少很多 { } 了,不过我没这样做,因为我不想改原文件,我想应该可以自己创建一个文件来自定义规则,试了一下果然可以。
当然我不可能完全重写,毕竟有很多东西还搞不清楚,只能是拿现有的来改,由于 6.9 的比较复杂,我用了 6.0 的来改。
这三个文件是初步成果:[attach]5632[/attach][attach]5630[/attach][attach]5631[/attach]
将它们放到 C:\Program Files\MathType\Translators 中,重启 mathtype,再到转换设置里就会看到 kkkkk 这一项。
[attach]5629[/attach]
目前转换一般公式的代码已经很少有多余的东西了,而且比较符合我自己的习惯,比如 $\ge$ 会转成 \geqslant ,$\Rightarrow$ 会转成 \riff ,复制多行会转成 align* 环境等等,当然还有一些没处理好,如极限就还会有 \mathop 这些多余的东西,\left( \right) 内也会有多余的 { }。
测试一下,将以下文件保存到电脑上,用 mathtype 打开,按上述方法设好 kkkkk 后,全选、复制、粘贴来这里,看看代码如何。
[attach]5633[/attach]
如果OK的话,输出的将是:[code]\begin{align*}
&\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}\\
&\riff \sum_{i=1}^na_n+\prod_{i=1}^\infty b_i+\bigcup_{i=1}A_i+\bigcap B_i\\
&\iff \int f(x)dx+\int_a^bx^2\rmd x+\vv {AB}=\bm a+\sin 30\du\\
&\liff x_{1,2}=\frac {-b\pm \sqrt {b^2-4ac}}{2a}+\{x|x\text{ is odd}\}
\end{align*}[/code]欢迎大家测试。 [i=s] 本帖最后由 isee 于 2017-11-24 20:44 编辑 [/i]
[b]回复 [url=http://kuing.orzweb.net/redirect.php?goto=findpost&pid=24221&ptid=5016]1#[/url] [i]kuing[/i] [/b]
你算半个mathtype 的开发人员了。
直接把你指出的两行标注了,转换后,果然清爽不少。
反正你会经常用,就会有维护,哈哈,我就用你的修改方案。。。。
=====================
擦,将mathtype转换成LaTeX代码,官方自己的,都不能将方程组,晕。 [b]回复 [url=http://kuing.orzweb.net/redirect.php?goto=findpost&pid=24222&ptid=5016]2#[/url] [i]isee[/i] [/b]
并不是很复杂的东西,你也可以研究下,按自己的喜好来定义
也可以参考我那三个文件的改法,改动的地方我都用 //*** 标记的 仔细看了下 6.9 的那些,发现其实也并不是复杂很多,而且它们更科学更易于管理,一方面是文件分得更清,另一方面是定义了更多的变量来统一控制某些东西。
而具体的规则其实除了1楼提到的那个之外,其他也没差多少。
另外我看修改定义时注释似乎不是必要的,直接在后面重写就行(类似于 tex 的 \def),这样说来,如果只是少量修改的话,只需创建一文件,读入需要的文件,再在后面重写想改的那些即可。
先眯一会,晚点再试。 [b]回复 [url=http://kuing.orzweb.net/redirect.php?goto=findpost&pid=24227&ptid=5016]4#[/url] [i]kuing[/i] [/b]
的确与 $\mathrm \LaTeX$ 语法很像,这也许就是这种语法的优点。 [b]回复 [url=http://kuing.orzweb.net/redirect.php?goto=findpost&pid=24227&ptid=5016]4#[/url] [i]kuing[/i] [/b]
试了下,基本上和我想的一样,但也有两句意外。
将这个文件 [attach]5636[/attach] 放到 C:\Program Files\MathType\Translators 中,到转换设置里就会看到 kuing 这一项。
(如果你在用较低版本则可能会提示缺少文件)
效果和1楼的大致相同,不同的几点有:
[list]
[*]直接输入 * 会转为 \cdot ,这是为了方便打点乘
[*]内部多行公式(如方程组)会转成 aligned 环境
[*]矩阵会转成 matrix 环境
[/list]
测试文件:
[attach]5638[/attach]
用 mathtype 打开,按上述方法设好 kuing 后,全选、复制、粘贴来这里,OK的话,转出来的代码是:[code]\begin{align*}
&\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}\\
& \riff \sum_{i=1}^na_n+\prod_{i=1}^\infty b_i+\bigcup_{i=1}A_i+\bigcap B_i\\
& \iff \int f(x)dx+\int_a^bx^2\rmd x+\vv {AB}=\bm a+\sin 30\du\\
& \liff x_{1,2}=\frac {-b\pm \sqrt {b^2-4ac}}{2a}+\{x|x/2\text{ is odd}\}\\
&a\cdot b=\left\{ \begin{aligned}
&ax^2+bx+c=0\\
&2ax+b=0\\
&2a=0
\end{aligned} \right.=\begin{matrix}
{11}&{22}&{33}\\
{44}&{55}&{66}\\
{77}&{88}&{99}
\end{matrix}
\end{align*}[/code] 试了一下其他类型的转换规则,发现 Texvc 那套规则也是不错嘀(选项中的最后一个),它转出来的代码空格相对少,紧凑一些,支持的符号也比较全(LaTeX 2.09 and later 就有些符号不支持或者是用奇怪的方式来实现),唯一的问题是单个字符的上下标也会用 { },不过这没关系,因为可以在某些文本编辑器(如 winedt)里轻松处理掉。
用楼上的方式改写 Texvc ,得:[attach]5639[/attach]
(设置方法相同,同样,如果你在用较低版本则可能会提示缺少文件)
测试文件:
[attach]5641[/attach]
用 mathtype 打开,按上述方法设好 kk_Texvc 后,全选、复制、粘贴来这里,OK的话,转出来的代码是:[code]\begin{align*}
&\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}\\
&\riff \sum_{i=1}^{n}a_{n}+\prod_{i=1}^{\infty }b_{i}+\bigcup_{i=1}A_{i}+\bigcap B_{i}\\
&\iff \int f(x)dx+\int_{a}^{b}x^{2}\rmd x+\vv{AB}=\bm{a}+\sin 30\du\\
&\liff x_{1,2}=\frac{-b\pm \sqrt{b^{2}-4ac}}{2a}+\{x|x/2\text{ is odd}\}\\
&a\cdot b=\left\{ \begin{aligned}
&ax^{2}+bx+c=0\\
&2ax+b=0\\
&2a=0
\end{aligned} \right.=\begin{matrix}
11 & 22 & 33 \\
44 & 55 & 66 \\
77 & 88 & 99 \\
\end{matrix}\\
&\left( \lim _{x\to \infty }f'(x)+f''(x) \right)
\end{align*}[/code]将其放到 winedt 中做几下批量替换将单个字符的 { } 去掉后:[code]\begin{align*}
&\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}\\
&\riff \sum_{i=1}^na_n+\prod_{i=1}^{\infty }b_i+\bigcup_{i=1}A_i+\bigcap B_i\\
&\iff \int f(x)dx+\int_a^bx^2\rmd x+\vv{AB}=\bm a+\sin 30\du\\
&\liff x_{1,2}=\frac{-b\pm \sqrt{b^2-4ac}}{2a}+\{x|x/2\text{ is odd}\}\\
&a\cdot b=\left\{ \begin{aligned}
&ax^2+bx+c=0\\
&2ax+b=0\\
&2a=0
\end{aligned} \right.=\begin{matrix}
11 & 22 & 33 \\
44 & 55 & 66 \\
77 & 88 & 99 \\
\end{matrix}\\
&\left( \lim _{x\to \infty }f'(x)+f''(x) \right)
\end{align*} [/code]已经几乎和手工输入差不多。
页:
[1]