本文由 发布,转载请注明出处,如有问题请联系我们! 发布时间: 2021-06-01解决latex数学公式渲染不正确及行内公式中文渲染乱码问题

加载中

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

评论(0条)

刀客源码 匿名评论