Android完美解决LaTeX中文显示问题
一、目标二、解决方案三、测试数据1.2.3.4.5.6.7.8.9.10.11.12.13.四、遗留问题五、Next六、Finally在上一篇文章《Android实现方程编辑器》中,我们遗留了2个问题,其中一个是中文的显示问题。只要在公式中插入中文字符,将导致RuntimeException。之前的处理方式是try/catch,捕获到异常则处理为无效方程。更加合理的实现方案是支持中文显示。
一、目标
方程编辑器支持中文。
二、解决方案
在《Android插入方程技术方案分析》一文中,我们列举了几种开源的解析渲染库。其中大神sixgodIT的JLaTexMath-andriod已经完美实现对中文的支持,推荐使用该项目渲染中文LaTeX。
三、测试数据
1.
CO2+H2O⟶叶绿素日光CO _{2} +H _{2} O \mathrel{\mathop{\kern{0pt}\longrightarrow}\limits_{叶绿素}^{日光}} CO2+H2O叶绿素⟶日光
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.
CuSO4⋅5H2OCuSO _{4} \cdot 5H _{2} O CuSO4⋅5H2O
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\% %Δprice=100×[exp(age)−1]=100×[exp(−0.008)−1]=−0.8%
6.
Cu⟶△H2SO4(浓)CuSO4⟶NaOH溶液Cu(OH)2Cu \mathrel{\mathop{\kern{0pt}\longrightarrow}\limits_{\triangle }^{H_{2}SO_{4}(浓)}} CuSO _{4} \stackrel{NaOH溶液}\longrightarrow Cu (OH) _{2} Cu△⟶H2SO4(浓)CuSO4⟶NaOH溶液Cu(OH)2
7.
溶解⟶黏液→体壁→毛细血管→{溶解}\over\longrightarrow 黏液\rightarrow 体壁\rightarrow 毛细血管\rightarrow ⟶黏液→体壁→毛细血管→溶解
8.
a+bi和a+bia+b\bold{i} 和 a+b\bold{i} a+bi和a+bi
9.
电梯上升10米里做的功电梯上升米里做的功电梯上升10米花的时间电梯上升米花的时间\frac{电梯上升10米里做的功\phantom{电梯上升米里做的功}}{电梯上升10米花的时间\phantom{电梯上升米花的时间}} 电梯上升10米花的时间电梯上升米花的时间电梯上升10米里做的功电梯上升米里做的功
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.
解:∵A∪B={1, 2},则A,B均为{1, 2}的子集,即A,B∈{∅, {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=∅,共9种情况,故选:D解:∵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 解:∵A∪B={1,2},则A,B均为{1,2}的子集,即A,B∈{∅,{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=∅,共9种情况,故选:D
四、遗留问题
方程编辑器会将以下方程判断为无效方程 对应[测试数据.5]KaTeX parse error: Expected '}', got '\buildrel' at position 47: …exp (a\mathord{\̲b̲u̲i̲l̲d̲r̲e̲l̲{\lower0pt\hbox…
对应[测试数据.7]
KaTeX parse error: Expected 'EOF', got '\buildrel' at position 2: \̲b̲u̲i̲l̲d̲r̲e̲l̲{溶解}\over\longr…
对应[测试数据.8]
a+bi和a+bia+b\boldsymbol{i} 和 a+b\pmb{i} a+bi和a+biii
以上3个方程在方程编辑器中,将被视为无效方程。MathJax显示则为有效方程。
方程编辑器目前不支持以下命令
方程编辑器中出现以上命令,将会被视为无效方程。
五、Next
部分LaTex无法支持的问题将在未来版本中继续解决。
下一步将尝试优化空方程的判定。
六、Finally
~杯汝来前~老子今朝~点检形骸~