摘要
处理latex公式3D渲染有误及内行人公式计算汉语3D渲染错码难题 难题以前数学课OCR3D渲染公式用的 katex 来3D渲染,前面解决方法,大家的开展公式计算撰写的情况下是必须键入汉语的,如:Fe_O_ 3 C O \stackrel 2 F e 3CO_亦或:c = \sqrt b_^ e^}在上篇 处理Latex輸出PDF打印纸张响应式尺寸及汉语无法显示难题,…
正文
处理latex公式3D渲染有误及内行人公式计算汉语3D渲染错码难题
难题
以前数学课OCR3D渲染公式用的 katex 来3D渲染,前面解决方法,大家的开展公式计算撰写的情况下是必须键入汉语的,如:
Fe_{2}O_{3} 3 C O \stackrel{高溫}{=} 2 F e 3CO_{2}
亦或:
c = \sqrt{a^{平方米} b_{xy}^{平方米} e^{x三次方}}
在上篇 处理Latex輸出PDF打印纸张响应式尺寸及汉语无法显示难题,必须适用化学方程式鉴别,大家的服务项目是适用全量的latex英语的语法,因此化学方程式和数据信息公式计算统一应用新服务项目来开展鉴别,终究katex便是latex的一个迅速web公式渲染器,如今把2个公式计算合拼一下在大家的服务项目上3D渲染一下试一下
Fe_{2}O_{3} 3 C O \stackrel{高溫}{=} 2 F e 3CO_{2}\\c = \sqrt{a^{平方米} b_{xy}^{平方米} e^{x三次方}}
WTF! 汉语的难题并不是处理了没有?如何又出难题了, 早已对汉语开展了解决,怎么不起效了?
一些事例:
Fe_{2}O_{3} 3 C O \stackrel{HighTemperature}{=} 2 F e 3CO_{2}检测汉语
Fe_{2}O_{3} 3 C O \stackrel{HighTemperature}{=} 2 F e 3CO_{2}$检测汉语
Fe_{2}O_{3} 3 C O \stackrel{\mbox{高溫}}{=} 2 F e 3CO_{2}
剖析
内行人公式计算和行与行公式计算
latex中国银行内公式计算和行与行公式计算各自应用 $ 和 $$ 来做为公式计算的起始符,假如在内行人公式计算表明汉语则必须用\mbox{}来包囊汉语,那样汉语就能在公式计算中一切正常表明
以前大家立即在chemfig公式计算后边立即键入汉语,因为chemfig有显著起止分辨,大家的汉语latex并沒有鉴别为公式计算的一部分,因此能一切正常表明,一旦我们在公式计算內部应用汉语,依然会发生汉语没法3D渲染的难题,但是这个问题在katex下是不会有,理应是katex干了兼容
解决方案
计划方案一:依照规范的latex英语的语法来,客户在键入公式计算的情况下对汉语一部分自主添加 \mbox{} 或在公式计算完毕部位标识 $结束符,那样内行人公式计算和公式计算外的汉语就能一切正常表明,有理有据
计划方案二:因为公式沒有显著起止标志,因此能够在把传到的标识符中全部的持续汉语在后台管理用 \mbox{} 包囊起來,必须在编码中手动式提取相对应的持续汉语并应用mbox包囊就可以
处理
不容置疑,为了更好地维持客户应用的惯性力,采用计划方案二,上编码
def with_mbox(mix_str):
""" 混和字符串数组填充mbox
:param mix_str: chemfig关系式
:return: 全自动包囊持续汉语的chemfig关系式
"""
flag = False
t = ''
for char in mix_str:
if not flag and is_chinese(char):
flag = True
t = "\\mbox{" char
elif flag and not is_chinese(char):
t = "}" char
flag = False
elif is_chinese(char):
t = char
else:
t = char
flag = False
if is_chinese(t[len(t) - 1]):
t = "}"
return t
def is_chinese(check_char):
""" 查验是不是中文字符,含中文标点
:param check_char: 标识符
:return: True|False
"""
if u'\u4e00' <= check_char <= u'\u9fff' or is_zw_punctuation(check_char):
return True
return False
def is_zw_punctuation(char_arr):
punctuation = """!?。。《》"#$%&'()*+-/:;<=>@[\]^_`{|}~⦅⦆「」、、〃》「」『』【】〔〕〖〗〘〙〚〛〜〝〞〟〰〾〿–—‘'‛“”„‟…‧﹏"""
re_punctuation = "[{}] ".format(punctuation)
result = re.match(re_punctuation, char_arr)
return result is not None
应用前启用一下with_mbox方式 chem_fig = with_mbox(request.json['chemfig'])
极致处理
参照连接
TeX,LaTeX和KaTeX介绍:https://blog.csdn.net/wobushisongkeke/article/details/99677578
python 配对中文字符:https://www.cnblogs.com/iamjqy/p/6824297.html
关注不迷路
扫码下方二维码,关注宇凡盒子公众号,免费获取最新技术内幕!
评论0