公司正在做教育类产品,在遇到数学公式时,我们一般会使用latex表达式来做保存和渲染。
在其中一个项目上,遇到一个需求是要从office文档(Word或Excel)中导入题目内容至数据库,题目内容中就有可能包括数学公式,而在文档中编辑希望使用office的公式插件来写公式元素。
其实公司之前的产品已经使用.net实现过此功能,不过现在公司全面转型Java,我们也要研究出一个适用Java的解决方案。
office文档中的公式编辑器
mathtype插件
mathtype是一个第三方的数学公式插件,它能在Office文档中启用编辑,并生成一个带有公式矢量图的ole对象插入到文档中。
原来.net的方案就是使用此种方式,使用mathtype提供的c#库包来解析ole对象,抽取LaTeX表达式。
但在纯Java环境下就无法做到了。
office自带公式编辑器
从2007版开始,Office也自带了一个公式编辑器。
在2007版中Word与Excel之间不同的是,前者插入的公式对象是Office MathML节点,后者插入的还是ole。
到了2010版开始,两个产品的公式编辑器插入的都是Office MathML节点了,但是两者对公式对象中的默认文字编码处理不同。
这些不同点可以看出就算同样属于Office的产品,他们之间也是有很多不统一的地方。
公式表达式
LaTeX
LaTeX是一种基于ΤΕΧ的排版系统,它非常适用于生成高印刷质量的科技和数学类文档。
例如勾股定理用LaTeX表达:
a^{2}+b^{2}=c^{2}
常用的LaTeX渲染组件是MathJax。
我们在项目中使用的便是LaTeX,所以本次研究就是如何将Office中的公式对象转换成LaTeX表达式。
Mathml
全称为数学标记语言(Mathematical Markup Language),是一种基于XML的标准,用来在互联网上书写数学符号和公式的置标语言。
例如一个表达式:
n
p
-
1
≡
1
(
mod
p
)
Office MathML (OMML)
<