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

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

一、目标

方程编辑器支持中文。
Android完美解决LaTeX中文显示问题

二、解决方案

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

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

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

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

三、测试数据

1.

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

2.

KaTeX parse error: Expected '}', got '\substack' at position 63: …H_{2}O \mathop{\̲s̲u̲b̲s̲t̲a̲c̲k̲{= \!= \!= \!= …

3.

KaTeX parse error: Expected '}', got '\substack' at position 25: …H_{2}O \mathop{\̲s̲u̲b̲s̲t̲a̲c̲k̲{= \!= \!= \!= …

4.

CuSO45H2O CuSO _{4} \cdot 5H _{2} O

5.

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

6.

CuH2SO4()CuSO4NaOHCu(OH)2 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+bia+bi a+b\bold{i} 和 a+b\bold{i}

9.

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

10.

KaTeX parse error: Expected '}', got '\substack' at position 24: …_{2} \mathop{\̲s̲u̲b̲s̲t̲a̲c̲k̲{=\!=\!=\!=\!=\…

11.

KaTeX parse error: Expected '}', got '\substack' at position 30: …\; \mathop{\̲s̲u̲b̲s̲t̲a̲c̲k̲{-\!-\!-\!-\!-\…

12.

KaTeX parse error: Expected '}', got '\substack' at position 10: \mathop{\̲s̲u̲b̲s̲t̲a̲c̲k̲{-\!-\!-\!-\!-\…

13.

AB={1, 2}AB{1, 2}AB{, {1}, {2}, {1, 2}}A=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=9D 解:∵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]

KaTeX parse error: Expected '}', got '\buildrel' at position 47: …exp (a\mathord{\̲b̲u̲i̲l̲d̲r̲e̲l̲{\lower0pt\hbox…

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

KaTeX parse error: Expected 'EOF', got '\buildrel' at position 2: \̲b̲u̲i̲l̲d̲r̲e̲l̲{溶解}\over\longr…

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

a+bia+bi 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

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