Android完美解决LaTeX中文问题

Android完美解决LaTeX中文显示问题

在上一篇文章《Android实现方程编辑器》中,我们遗留了2个问题,其中一个是中文的显示问题。只要在公式中插入中文字符,将导致RuntimeException。之前的处理方式是try/catch,捕获到异常则处理为无效方程。更加合理的实现方案是支持中文显示。

一、目标

方程编辑器支持中文。

二、解决方案

在《Android插入方程技术方案分析》一文中,我们列举了几种开源的解析渲染库。其中大神sixgodITJLaTexMath-andriod已经完美实现对中文的支持,推荐使用该项目渲染中文LaTeX。

方案 描述 参考资料
JLaTexMath-andriod JLaTexMath for Android
完美支持、数学、物理、化学公式、汉字解析、图文混排

本项目借鉴自jlatexmath-android(由java Api 转化来的Android版本)

本项目针对化学、生物类的中文公式做了优化。
https://github.com/sixgodIT/JLaTexMath-andriod

三、测试数据

1.

\[ CO _{2} +H _{2} O \mathrel{\mathop{\kern{0pt}\longrightarrow}\limits_{叶绿素}^{日光}} \]

2.

\[ 用\rm Pt电极电解\rm CuSO_{4}溶液,\\发生\rm 2CuSO_{4}+ 2H_{2}O \mathop{\substack{= \!= \!= \!= \!= \!= }}^{电解\phantom{电解}}2Cu+ O_{2}\uparrow + 2H_{2}SO_{4},\\只在阳极产生气体,由阴阳两极产生相同体积的气体,\\还发生\rm 2H_{2}O \mathop{\substack{= \!= \!= \!= \!= \!= }}^{电解\phantom{电解}}2H_{2}\uparrow + O_{2}\uparrow ,\\结合转移的电子数来计算解答. \]

3.

\[ 解:由\rm 2H_{2}O \mathop{\substack{= \!= \!= \!= \!= \!= }}^{电解\phantom{电解}}2H_{2}\uparrow + O_{2}\uparrow \sim 4e^{-},\\\rm 2 1 4\\\rm 0.2mol 0.1mol 0.4mol\\则\rm 2CuSO_{4}+ 2H_{2}O \mathop{\substack{= \!= \!= \!= \!= \!= }}^{电解\phantom{电解}}2Cu+ O_{2}\uparrow + 2H_{2}SO_{4},\\\rm 0.1mol 0.2mol\\即当电路中通过\rm 0.4mol电子时,阴阳两极产生相同体积的气体时,生成\rm n(H_{2}SO_{4})= 0.2mol,\\所以\rm n(H^{+ })= 0.4mol,\\则\rm c(H^{+ })= \dfrac{0.4mol}{4L}= 0.1mol/L,\\所以\rm pH= 1,故选\rm D. \]

4.

\[ CuSO _{4} \cdot 5H _{2} O \]

5.

\[ \% \Delta price = 100\times [\exp (a\mathord{ g} e) - 1] = 100\times [\exp ( - 0.008) - 1] = - 0.8\% \]

6.

\[ Cu \mathrel{\mathop{\kern{0pt}\longrightarrow}\limits_{\triangle }^{H_{2}SO_{4}(浓)}} CuSO _{4} \stackrel{NaOH溶液}\longrightarrow Cu (OH) _{2} \]

7.

\[ {溶解}\over\longrightarrow 黏液\rightarrow 体壁\rightarrow 毛细血管\rightarrow \]

8.

\[ a+b\bold{i} 和 a+b\bold{i} \]

9.

\[ \frac{电梯上升10米里做的功\phantom{电梯上升米里做的功}}{电梯上升10米花的时间\phantom{电梯上升米花的时间}} \]

10.

\[ 3Fe+2O _{2} \mathop{\substack{=\!=\!=\!=\!=\!=}}^{点燃} Fe _{3} O _{4} \]

11.

\[ \rm CO_2+4H_2\; \mathop{\substack{-\!-\!-\!-\!-\!\rightharpoonup \\ \leftharpoondown\!-\!-\!-\!-\!-}}^{phantom}_{\triangle}\; CH_4+2H_2O \]

12.

\[ \mathop{\substack{-\!-\!-\!-\!-\!\rightharpoonup \\ \leftharpoondown\!-\!-\!-\!-\!-}}^{催化剂}_{\triangle} \]

13.

\[ 解:∵A\cup B= \{1,\, 2\},则A,B均为\{1,\, 2\}的子集,\\即A,B\in \{\varnothing ,\, \{1\},\, \{2\},\, \{1,\, 2\}\},\\当A= \varnothing 时,B= \{1,\, 2\},\\当A= \{1\}时,B= \{1,\, 2\}或B= \{2\},\\当A= \{2\}时,B= \{1,\, 2\}或B= \{1\},\\当A= \{1,\, 2\}时,B= \{1,\, 2\},或B= \{1\},或B= \{2\},或B= \varnothing ,\\共9种情况,\\故选:D \]

四、遗留问题

  • 方程编辑器会将以下方程判断为无效方程
  1. 对应[测试数据.5]

\[ \% \Delta price = 100\times [\exp (a\mathord{\buildrel{\lower0pt\hbox{$\scriptscriptstyle\frown$}}\over g} e) - 1] = 100\times [\exp ( - 0.008) - 1] = - 0.8\% \]

  1. 对应[测试数据.7]

\[ \buildrel{溶解}\over\longrightarrow 黏液\rightarrow 体壁\rightarrow 毛细血管\rightarrow \]

  1. 对应[测试数据.8]

\[ a+b\boldsymbol{i} 和 a+b\pmb{i} \]

以上3个方程在方程编辑器中,将被视为无效方程。MathJax显示则为有效方程。

  • 方程编辑器目前不支持以下命令
序号 命令 说明
1 buildrel
2 lower
3 hbox
4 scriptscriptstyle
5 frown
6 over
7 boldsymbol 使用bold可以实现粗体功能
8 pmb 使用bold可以实现粗体功能

方程编辑器中出现以上命令,将会被视为无效方程。

五、Next

部分LaTex无法支持的问题将在未来版本中继续解决。

下一步将尝试优化空方程的判定

六、Finally

~杯汝来前~老子今朝~点检形骸~