本发明涉及排版印刷领域,尤其涉及一种排版处理方法及装置。
背景技术:
目前的排版技术中,排版引擎通常将数学公式看成是一个整体,把它作为一个长度较大的单个字符进行排版。然而当数学公式的长度过长时,即单个公式的宽度已经超出一个文本行的宽度,就会导致数学公式超出文本框。
对此,目前一种方案为人工手动将数学公式进行拆分换行,但是人工操作会带来一些问题,比如需要人工检测待排版的文本中是否存在数学公式,这个过程很耗时,并且很容易造成数学公式的遗漏,另外,用户对公式的认识水平,也可能导致数学公式的意义改变,这就造成时间成本和人工成本的浪费,并且无法保证排版的合理性。
技术实现要素:
本发明提供一种排版处理方法及装置,用于解决现有的数学公式拆分方案耗时长效率低的问题。
本发明的第一个方面是提供一种排版处理方法,包括:获取数学公式的当前长度和所述数学公式所在行的剩余宽度并进行比较,若所述数学公式的当前长度大于所述数学公式所在行的剩余宽度,则根据所述数学公式的树形结构,通过拆分处理,获得由n个子公式构成的原始序列;将所述原始序列中的所有子公式存储至当前的第一数据,计算并记录当前第一数据中存储的前n-m个子公式的长度至第一存储器,其中,m的初始值为1;若所述第一存储器中当前记录的长度大于第一数据所在行的剩余宽度,则将m的值加1并将当前m的取值记录至第二存储器,并再次执行所述计算并记录当前第一数据中存储的前n-m个子公式的长度至第一存储器的步骤,直至所述第一存 储器中当前记录的长度不大于所述剩余宽度;获取所述第二存储器中当前记录的m的取值,根据所述第一数据中的前m个子公式,生成第一公式,并将所述第一公式的排版位置设置为所述第一数据所在行;根据所述第一数据中除前m个子公式以外的子公式,生成第二公式,并将所述第二公式的排版位置设置为所述第一数据所在行的下一行;根据所述第一公式和所述第二公式的排版位置,进行排版处理。
本发明的另一个方面是提供一种排版处理装置,包括:获取模块,用于获取数学公式的当前长度和所述数学公式所在行的剩余宽度并进行比较;拆分模块,用于若所述数学公式的当前长度大于所述数学公式所在行的剩余宽度,则根据所述数学公式的树形结构,通过拆分处理,获得由n个子公式构成的原始序列;处理模块,用于将所述原始序列中的所有子公式存储至当前的第一数据,计算并记录当前第一数据中存储的前n-m个子公式的长度至第一存储器,其中,m的初始值为1;所述处理模块,还用于若所述第一存储器中当前记录的长度大于第一数据所在行的剩余宽度,则将m的值加1并将当前m的取值记录至第二存储器,并再次计算并记录当前第一数据中存储的前n-m个子公式的长度至第一存储器,直至所述第一存储器中当前记录的长度不大于所述剩余宽度;编辑模块,用于获取所述第二存储器中当前记录的m的取值,根据所述第一数据中的前m个子公式,生成第一公式,并将所述第一公式的排版位置设置为所述第一数据所在行;根据所述第一数据中除前m个子公式以外的子公式,生成第二公式,并将所述第二公式的排版位置设置为所述第一数据所在行的下一行;排版模块,用于根据所述第一公式和所述第二公式的排版位置,进行排版处理。
本发明提供的排版处理方法及装置,当检测到数学公式的长度大于其所在行的剩余宽度时,则根据数学公式的树形结构,通过拆分处理获得包括多个子公式的序列,并比较该序列中前一部分子公式的长度与数学公式所在行的剩余宽度,确定需要换行至下一行的子公式,根据各行的子公式生成相应公式并根据各公式的排版位置进行排版,实现数学公式的自动拆分和换行,减少人工拆分和排版,使得排版更合理,数学公式的意义更准确,并且加快排版速度,提高排版效率,减少时间成本和人工成本。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例一提供的一种排版处理方法的流程示意图;
图2为本发明实施例一提供的另一种排版处理方法的流程示意图;
图3为本发明实施例一提供的又一种排版处理方法的流程示意图;
图4为本发明实施例一提供的又一种排版处理方法的流程示意图;
图5为本发明实施例一提供的又一种排版处理方法的流程示意图;
图6为本发明实施例二提供的一种排版处理装置的结构示意图;
图7为本发明实施例二提供的另一种排版处理装置的结构示意图;
图8为本发明实施例二提供的又一种排版处理装置的结构示意图;
图9为本发明实施例二提供的又一种排版处理装置的结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
图1为本发明实施例一提供的一种排版处理方法的流程示意图,如图1所示,所述方法包括:
101、获取数学公式的当前长度和所述数学公式所在行的剩余宽度并进行比较,若所述数学公式的当前长度大于所述数学公式所在行的剩余宽度,则根据所述数学公式的树形结构,通过拆分处理,获得由n个子公式构成的原始序列;
102、将所述原始序列中的所有子公式存储至当前的第一数据,计算并记录当前第一数据中存储的前n-m个子公式的长度至第一存储器,其中,m的初始值为1;
103、若所述第一存储器中当前记录的长度大于第一数据所在行的剩余宽度,则将m的值加1并将当前m的取值记录至第二存储器,并再次执行所述计算并记录当前第一数据中存储的前n-m个子公式的长度至第一存储器的步骤,直至所述第一存储器中当前记录的长度不大于所述剩余宽度;
104、获取所述第二存储器中当前记录的m的取值,根据所述第一数据中的前m个子公式,生成第一公式,并将所述第一公式的排版位置设置为所述第一数据所在行;根据所述第一数据中除前m个子公式以外的子公式,生成第二公式,并将所述第二公式的排版位置设置为所述第一数据所在行的下一行;
105、根据所述第一公式和所述第二公式的排版位置,进行排版处理。
具体的,可以将数学公式的完整结构数据,记录在一个对象中,作为其在文字流中的占位。其中,对数学公式进行拆分获得的子公式并不是一个独立的,与其他子公式没有联系的个体,而是各个子公式之间存在序列结构关系,属于数学公式的一部分,不能随意变换位置。
举例来说,在对数学公式进行排版时,先计算出公式的总宽度TotalWidth,如果总宽度大于数学公式所在行的剩余行宽LineWidth,则进行公式拆分,在计算第一序列中n-m个子公式的长度时,可以当前第一序列中,移除掉最后一个子公式,对剩下的子公式的进行长度计算,得到更新后的公式宽度TotalWidth,将其与剩余行宽LineWidth进行比较,如果依然大于剩余行宽LineWidth,则继续移除掉当前第一序列中的最后一个子公式,进行余下子公式的长度计算,直至计算出来的TotalWidth不大于LineWidth。
在找到能够使TotalWidth不大于LineWidth的拆分位置后,则将匹配剩余行宽的前m个子公式合并为一个公式,将剩余的子公式合并为另一公式,分别放在数学公式所在行和数学公式所在行的下一行,从而实现数学公式的拆行。
实际应用中,当某行当前未排版有任何内容时,其剩余行宽即该行整行的行宽。
具体的,对数学公式进行拆分的方式有多种,如图2所示,图2为本发明实施例一提供的另一种排版处理方法的流程示意图,在图1所示实施方式的基础上,101中所述根据所述数学公式的树形结构,通过拆分处理,获得 由n个子公式构成的原始序列,具体可以包括:
201、将数学公式的树形结构中第一层节点下的子节点标记为拆分点;
202、获取每一个所述拆分点下的公式数据,并根据所述公式数据生成对应的子公式,获得由n个子公式构成的原始序列。
具体的,如果将层节点过深的节点标记为拆分点进行公式拆分,由于过深的节点是一个嵌套的整体,基于过深的节点进行拆分可能会破坏数学公式的数学意义,造成最后拆行后的数学公式的不准确。本实施方式中,将数学公式的树形结构中第一层节点下的子节点标记为拆分点,在有效保证数学公式准确性的基础上,实现对数学公式的拆分。
进一步的,为了保证排版的合理性,生成第一公式后,还需要确定第二公式的长度是否能够匹配下一行的宽度。
具体的,如果能够匹配下一行的宽度,相应的,如图3所示,图3为本发明实施例一提供的又一种排版处理方法的流程示意图,在前述任一实施方式的基础上,104中所述根据所述第一数据中除前m个子公式以外的子公式,生成第二公式之前,还可以包括:
301、获取所述第一数据所在行的下一行的剩余宽度;
相应的,104中,所述根据所述第一数据中除前m个子公式以外的子公式,生成第二公式,具体可以包括:
302、比较第一数据中除前m个子公式以外的子公式的长度和所述下一行的剩余宽度,若所述第一数据中除前m个子公式以外的子公式的长度不大于所述下一行的剩余宽度,则根据所述第一数据中除前m个子公式以外的子公式,生成第二公式。
具体的,如果不能够匹配下一行的宽度,相应的,如图4所示,图4为本发明实施例一提供的又一种排版处理方法的流程示意图,在图3所示实施方式的基础上,在302之后,还可以包括:
401、若所述第一数据中除前m个子公式以外的子公式的长度大于所述第一数据所在行的下一行的剩余宽度,则清空第一数据并对m的值进行初始化,将所述第一数据中除前m个子公式以外的子公式构成的序列存储至第一数据,并再次执行所述计算并记录当前第一数据中存储的前n-m个子公式的长度至第一存储器的步骤。
通过上述实施方式,根据下一行需要排版的子公式的长度,对其进行进一步的拆行,从而提高排版的合理性。
此外,实际应用中,在排版过程中,有可能会对数学公式进行再次编辑,为了保证数学公式的准确性,需要重新进行数学公式的拆行,相应的,如图5所示,图5为本发明实施例一提供的又一种排版处理方法的流程示意图,在前述任一实施方式的基础上,所述方法还可以包括:
501、若检测到所述数学公式发生再编辑,则重新执行所述获取数学公式的当前长度和所述数学公式所在行的剩余宽度的步骤。
需要说明的是,501可以在数学公式拆行过程中的任一时刻执行,也就是说,只要检测到当前进行拆行的数学公式发生再编辑,则忽略本次的拆行结果,重新对编辑后的数学公式进行拆行。图中给出的只是一种举例的实施方式,并未对其进行限制。
本实施例提供的排版处理方法,当检测到数学公式的长度大于其所在行的剩余宽度时,则根据数学公式的树形结构,通过拆分处理获得包括多个子公式的序列,并比较该序列中前一部分子公式的长度与数学公式所在行的剩余宽度,确定需要换行至下一行的子公式,根据各行的子公式生成相应公式并根据各公式的排版位置进行排版,实现数学公式的自动拆分和换行,减少人工拆分和排版,使得排版更合理,数学公式的意义更准确,并且加快排版速度,提高排版效率,减少时间成本和人工成本。
图6为本发明实施例二提供的一种排版处理装置的结构示意图,如图6所示,所述装置包括:
获取模块61,用于获取数学公式的当前长度和所述数学公式所在行的剩余宽度并进行比较;
拆分模块62,用于若所述数学公式的当前长度大于所述数学公式所在行的剩余宽度,则根据所述数学公式的树形结构,通过拆分处理,获得由n个子公式构成的原始序列;
处理模块63,用于将所述原始序列中的所有子公式存储至当前的第一数据,计算并记录当前第一数据中存储的前n-m个子公式的长度至第一存储器,其中,m的初始值为1;
处理模块63,还用于若所述第一存储器中当前记录的长度大于第一数据所在行的剩余宽度,则将m的值加1并将当前m的取值记录至第二存储器,并再次计算并记录当前第一数据中存储的前n-m个子公式的长度至第一存储器,直至所述第一存储器中当前记录的长度不大于所述剩余宽度;
编辑模块64,用于获取所述第二存储器中当前记录的m的取值,根据所述第一数据中的前m个子公式,生成第一公式,并将所述第一公式的排版位置设置为所述第一数据所在行;根据所述第一数据中除前m个子公式以外的子公式,生成第二公式,并将所述第二公式的排版位置设置为所述第一数据所在行的下一行;
排版模块65,用于根据所述第一公式和所述第二公式的排版位置,进行排版处理。
具体的,拆分模块62可以将数学公式的完整结构数据,记录在一个对象中,作为其在文字流中的占位。其中,拆分模块62对数学公式进行拆分获得的子公式并不是一个独立的,与其他子公式没有联系的个体,而是各个子公式之间存在序列结构关系,属于数学公式的一部分,不能随意变换位置。
举例来说,在对数学公式进行排版时,获取模块61先计算出公式的总宽度TotalWidth,并获取数学公式所在行的剩余行宽,如果总宽度大于数学公式所在行的剩余行宽LineWidth,则拆分模块62根据公式的树形结构进行公式拆分,处理模块63在计算第一数据中n-m个子公式的长度时,可以从当前第一数据中,移除掉最后一个子公式,对剩下的子公式的进行长度计算,得到更新后的公式宽度TotalWidth并将其记录至第一存储器,将当前移除掉的子公式的个数m记录至第二存储器,处理模块63将第一存储器中当前记录的长度与剩余行宽LineWidth进行比较,如果依然大于剩余行宽LineWidth,则继续移除掉当前第一数据中的最后一个子公式,计算并记录余下子公式的长度,将当前移除掉的子公式的个数m记录至第二存储器,直至第一存储器中记录的长度不大于LineWidth。
当第一存储器中记录的长度不大于LineWidth后,编辑模块64从第二存储器中获取当前的m值,根据匹配剩余行宽的前m个子公式,生成相应的公式,根据剩余的子公式生成另一公式,并分别将其排版位置设置在数学公式所在行和数学公式所在行的下一行,排版模块65根据各公式的排版位置即可 进行合理的排版处理,从而实现数学公式的拆行。
实际应用中,当某行当前未排版有任何内容时,其剩余行宽即该行整行的行宽。
具体的,拆分模块62对数学公式进行拆分的方式有多种,如图7所示,图7为本发明实施例二提供的另一种排版处理装置的结构示意图,在图6所示实施方式的基础上,拆分模块62包括:
标记单元621,用于将将数学公式的树形结构中第一层节点下的子节点标记为拆分点;
处理单元622,用于获取每一个所述拆分点下的公式数据,并根据所述公式数据生成对应的子公式,获得由n个子公式构成的原始序列。
本实施方式中,标记单元621将数学公式的树形结构中第一层节点下的子节点标记为拆分点,在有效保证数学公式准确性的基础上,实现对数学公式的拆分。
进一步的,为了保证排版的合理性,编辑模块64生成第一公式后,还需要确定第二公式的长度是否能够匹配下一行的宽度。
具体的,如果能够匹配下一行的宽度,相应的,本发明实施例二还提供又一种排版处理装置,在前述任一实施方式的基础上,
获取模块61,还用于获取所述第一数据所在行的下一行的剩余宽度;
编辑模块64,具体用于比较第一数据中除前m个子公式以外的子公式的长度和所述下一行的剩余宽度,若所述第一数据中除前m个子公式以外的子公式的长度不大于所述下一行的剩余宽度,则根据所述第一数据中除前m个子公式以外的子公式,生成第二公式。
具体的,如果编辑模块64通过比较检测到第二公式的长度不能够匹配下一行的宽度,相应的,如图8所示,图8为本发明实施例二提供的又一种排版处理装置的结构示意图,在前述实施方式的基础上,所述装置还包括:
初始化模块66,用于若所述第一数据中除前m个子公式以外的子公式的长度大于所述第一数据所在行的下一行的剩余宽度,则清空第一数据并对m的值进行初始化;
处理模块63,还用于将所述第一数据中除前m个子公式以外的子公式构成的序列存储至第一数据,并再次计算并记录当前第一数据中存储的前n-m 个子公式的长度至第一存储器。
通过上述实施方式,根据下一行需要排版的子公式的长度,对其进行进一步的拆行,从而提高排版的合理性。
此外,实际应用中,在排版过程中,有可能会对数学公式进行再次编辑,为了保证数学公式的准确性,需要重新进行数学公式的拆行,相应的,如图9所示,图9为本发明实施例二提供的又一种排版处理装置的结构示意图,在前述任一实施方式的基础上,所述装置还包括:
检测模块67,用于若检测到所述数学公式发生再编辑,则指示获取模块61重新获取数学公式的当前长度和所述数学公式所在行的剩余宽度。
本实施例提供的排版处理装置,当检测到数学公式的长度大于其所在行的剩余宽度时,则根据数学公式的树形结构,通过拆分处理获得包括多个子公式的序列,并比较该序列中前一部分子公式的长度与数学公式所在行的剩余宽度,确定需要换行至下一行的子公式,根据各行的子公式生成相应公式并根据各公式的排版位置进行排版,实现数学公式的自动拆分和换行,减少人工拆分和排版,使得排版更合理,数学公式的意义更准确,并且加快排版速度,提高排版效率,减少时间成本和人工成本。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。此外,还需要说明的是,本发明各实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通 技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。