linux下总没有一款办公软件能尽如人意。openoffice虽然功能强大,但跟微软格式兼容性不好,而最重要的一点在于,二者的公式无法实现兼容。用word编写的公式(不管是用ms公式3.0、mathtype还是office2007最新的公式编辑器)到openoffice下总不能很好的显示,更不用说编辑了。openoffice的公式拿到word下也是一样。这对于我们这种经常要写包含大量公式的科技论文,并且需要与别人交流(比如投稿)的人来说,可能是从windows迁移到linux的最大障碍之一了。
最新的docx格式微软已经将其开放了,它与openoffice的odt格式同样是用xml语言表示的,并且docx的公式用的是mathml语言,而odt的公式虽然不是用mathml表示的,但能在内部转换,所以理论上能够实现一种方法,将两种格式(包括其中的公式)相互转换。sourceforge上已经有几个项目在做这件事了,但目前只能做到文档之间基本等价的转换(事实上odt格式还不完善,docx的部分功能odt不能支持。二者的对比见http://office.microsoft.com/zh-cn/word-help/HA010355788.aspx),而公式目前仍然是通过转换为图片来暂时实现显示功能。
至于用mathtype等公式编辑软件编写的公式,在转换时更是有难度。目前的做法是仍然保留为ole对象,这样做在windows下是没有问题的,openoffice的windows版本也可以正确的调用mathtype来编辑ole对象;但在linux下可就没有ole机制了,mathtype的公式显示时变得混乱,试图双击打开时,openoffice会无情的告诉你出现了“一般错误“(图1)。可见两种格式之间的完全转换还是任重而道远。
图1 在openoffice中打开包含mathtype公式的doc文档并双击公式
这篇文章主要分享一下我探索wine安装msoffice2007和mathtype的经历,成功和失败。
今天偶然想到wine一个ms office,于是google一番,欣喜的发现wine已经能很好的运行ms office 2003和2007了。经过试验之后,发现用playonlinux来安装ms office 2007应该是最简单的一种方法了。方法如下:
安装playonlinux:
sudo apt-get install playonlinux -y --force-yes
然后打开playonlinux(应用程序-游戏),选office类,里面有ms office 2007,选中之,应用(见图2)。然后按提示进行就好了,中间会让插入ms office的安装光盘(图3)。在安装过程中有一点必须注意,那就是一定不要安装microsoft拼音输入法,以及access和outlook(血泪经验啊...,图4)。playonlinux会自己完成其他事情,比如安装必要的dll以及msxml等,不需要手动安装任何dll文件。
图2 playonlinux安装windows软件界面
图3 选择office2007安装光盘位置
图4 选择office安装组件
如果注意了上面提到的那点注意:-),安装应该是很顺利的,安装完成后playonlinux的主界面出现了安装软件的列表(图5),word运行起来也很稳定(图6)。于是开始考虑公式的问题,尝试安装mathtype。
图5 playonlinux安装软件列表
图6 word运行界面
还是在playonlinux中安装mathtype(这次要点击playonlinux界面左下角的文字链接了),安装很顺利。但打开word后却并没有识别出mathtype的宏,没有出现mathtype的集成菜单,也没有加载项。突然想到playonlinux对每个应用程序都使用一个单独的wine配置(prefix,图7),也就是说相当于各个应用程序是安装在不同的虚拟windows机器中的,那word当然不知道有mathtype的存在了。
图7 playonlinux的wine prefix
为了把mathtype安装在office所在的prefix之下,复制mathtype的prefix下的C:\program files\mathtype目录到office所在的prefix下,然后复制mathtype的prefix下mathtype安装目录下的mathpage\mathpage.wll和office support\mathtype commands 6 for word.dot复制到office的prefix下的C:\program files\microsoft office\office12\startup下,然后重新启动word。这次能够发现mathtype的宏,将其加为信任的发布者之后,在word的“加载项“标签下能够显示mathtype的功能按钮,但点击mathtype的任何命令按钮,都显示“隐含模块编译错误“(图8),尝试了无数次也没有解决。
图8 mathtype加载项运行问题
考虑到mathtype安装时,可能向系统注册表中写入了信息,而且也可能向系统的其他地方写入了文件,而上面的做法仅仅复制了部分文件到office所在的prefix中。有没有别的办法能把两个软件安装到同一个prefix下呢?纠结了很长时间,试验了几种想法都没有实现。后来想到其实playonlinux安装office,跟wine安装完全一样,仅仅是省去了手动配置wine和安装附加dll的麻烦而已。打开office所在的prefix一看,果然是~/.wine/一样的结构:dosdevice目录、drive_c目录、system.reg文件、user.reg文件、userdef.reg文件,完全一样(图9)。那么完全可以将其复制到~/.wine/下,就相当于在wine中安装了office。这样再用wine安装mathtype不就能安装到同一个虚拟windows了吗?赶快试试。
图9 playonlinux prefix的文件结构
复制office所在的prefix(~/.PlayOnLinux/wineprefix/Office2007/)下的所有文件覆盖~/.wine/下的内容,然后修改user.reg文件中出现的路径~/.PlayOnLinux/wineprefix/Office2007为~/.wine/,然后用wine安装mathtype,这样就把mathtype和office装到同一个虚拟windows中了。打开word试验一下。这次识别了mathype的宏,也出现了集成菜单。但杯具的是,点击mathype的任何菜单命令时,还是显示“隐含模块编译错误“(图10)。
图10 mathtype集成菜单运行问题
于是退而求其次,用“插入-对象“来插入mathtype公式。这种情况下mathype是能正常运行的(图11),但一旦公式编辑完退出mathtype返回word时,就像任何事情都没有发生一样,并没有公式插入文档中。office自带的公式编辑器也是一样的情况。而当编辑文件中已有的公式时,返回word后公式仍是原样,并没有编辑过的痕迹。由此可见,wine对于com接口和ole对象的支持还是不完善,com组件无法启动,而ole对象的退出操作也存在问题。看来只能等待wine的继续发展了。
图11 mathtype运行界面
可以预见,将来wine发展更加完善时,能很好的处理com组件和ole,那么word和mathtype协同工作,将是一件振奋人心的好事。当然,也希望openoffice和odt格式在oracle和开源社区的努力下更加完善,从而把用wine运行msoffice变成一件多余的事。
作为没有办法的办法,目前一种可行的解决办法是在wine出来的word中使用2007新增的公式编辑器,文档保存为docx格式。如果与使用office2003的人交流,可以建议对方打上office2007格式兼容的补丁(http://www.microsoft.com/downloads/details.aspx?displaylang=zh-cn&FamilyID=941b3470-3ae9-4aee-8f43-c6bb74cd1466)。另一种办法就是使用mathtype编辑公式,但将其保存为wmf图元文件,然后在word里导入这个图元文件。