解决数学公式乱码,让中文更美好。

摘要

处理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']) 极致处理

关注不迷路

扫码下方二维码,关注宇凡盒子公众号,免费获取最新技术内幕!

温馨提示:如果您访问和下载本站资源,表示您已同意只将下载文件用于研究、学习而非其他用途。
文章版权声明 1、本网站名称:宇凡盒子
2、本站文章未经许可,禁止转载!
3、如果文章内容介绍中无特别注明,本网站压缩包解压需要密码统一是:yufanbox.com
4、本站仅供资源信息交流学习,不保证资源的可用及完整性,不提供安装使用及技术服务。点此了解
5、如果您发现本站分享的资源侵犯了您的权益,请及时通知我们,我们会在接到通知后及时处理!提交入口
0

评论0

请先

站点公告

🚀 【宇凡盒子】全网资源库转储中心

👉 注册即送VIP权限👈

👻 全站资源免费下载✅,欢迎注册!

记得 【收藏】+【关注】 谢谢!~~~

立即注册
没有账号?注册  忘记密码?

社交账号快速登录