无字库汉字演示和设计软件

2.0版)

使用说明

 

一、总说

 

一、       软件的功能和意义:

5000年历史的汉字维系着占世界1/5人口的中华民族,也维系着占世界1/3的整个汉字文化圈的人民。在5000年的历史长河中,随着社会和技术的进步,汉字的书写工具(笔)和保存汉字的载体(纸),发生了几次渐进性的变化,汉字的形态也随着发生了几次大的变化。但是依然保持着象形表意为主、兼表音而允许有完全不同的方言读音、全世界唯一的非拼音文字。20世纪80年代,全新的信息技术使文字的主要载体发生了质的跃变,一时间是汉字难以适应,几乎要遭淘汰的灭顶之灾。

        现在,这个灭顶之灾终于被聪明的国人在极短的时间(35年)内解决了,汉字在新的环境下仍永葆青春。从这个按历史的尺度看,只是一瞬间的时刻里找到的解决的方法,不免留有后患。因为英文进入电脑的方法,是对52个字母进行编码,每个编码只要对应7×5的点阵图形就可以显示了。汉字远比英文字母复杂,开始时是绝对做不到的。好在电脑技术进步很快,一年半即翻一翻。这帮了大忙,我们立刻把字模点阵扩大为16×16,这就可以区别显示几百、几千的汉字。第一个编码标准GB80产生了,共有6763个汉字,足够一般使用。成为难题的反倒是所谓的输入瓶颈。英文只有26个字母。26个键即可输入每个字母,没有这个问题。汉字有几千上万,要用小键盘输入似乎是不可能的。但难关奇迹般的攻克了,我们兴奋了,几乎得意忘形。

        可能是由于解决的太快太容易,我们没有把汉字与英文字彙对应,而仅据表面现象,简单地把汉字对应于英文字母。实际上英文字母很少(26×2个),有限且稳定,而汉字量大、字数无限。它们根本不可能是同一档次的事物。而要让文字植根于电脑,必须数字化,即要进行编码,才能存贮 、传输。大家知道,进行编码通讯的前提条件是:编码对象,即信号集必须是有有限而固定的。文字是公共的通讯信号,更必须是数量有限而且完全公开、长期稳定。按此通讯本质看,与英文字母等价的应该是汉字笔画。可是我们过去没有突出并重视组成汉字的基本元素——笔画,更重要的是由于字母组成英文字是简单的线性排列,而笔画组成汉字是复杂的平面结构。在20年前的软件技术不容易解决笔画组字问题。这就造成了目前汉字植根于电脑的方法只能是大字库加编码。我这里指的是输入码。机内码是机械指定的,技术比较简单。但是由于字符集太大,内码标准不易统一,产生乱码的问题,造成通讯困难,以致潜伏着“定量炸弹”。于是提出限制、固定汉字集的主张,这却使电脑不能处理古字、地方字、冷僻字,而西文世界就没有不能处理古拉丁文的问题。

        所以,21世纪首先要解决笔画组字的技术,把汉字植根于电脑的方式,转到无字库的以汉字笔画为基础的正确方向上来。由于过去没有研究,对绝大多数人来说更是闻所未闻,认为是不可能的事。我们这个软件首先用来证明这是可行的,而且还提出一套方法,用来研究解决笔画组字的优秀方案。这比输入法的研究是更根本、更有意义的。

 

二、       软件的组成和使用

 本软件现在只包括三个文件,除了“使用说明”这个文本文件外,第二个是可执行文件(hz1024.exe,也可以用hz800.exe,但它是老版本),第三个是 Access 的数据库文件:wzk.mdb。可执行文件是用VB编研的,一般只要使用它就可以了;有编程兴趣,想进一步改进提高的,可以向作者索取源文件或者自己反编译进行研究。数据库文件可用Access 6.0版打开,它包含笔画BH,字根ZG和汉字GBKHZ三个数据表。表中已有数据,可供一般演示,但也让使用者修改,以试验自己的更理想的设计。不过最好在修改数据前备份这个文件,如果修改不满意,可以恢复原有的。自己试验新方案时,每得到一个满意的阶段性成果时,也应该备份下来,以免后续的修改中,万一失误发生数据损坏的情况时,可以恢复以前已成功的部分。

笔画数据表BH,是25×2个笔画的矢量数据。每对笔画包括两个形状相似的笔画,分别以大小写英文字母aA……yY作为代码。现有笔画数据表,包含5套字体(宋体、黑体、楷体、隶体、魏碑)的数据。每个笔画的矢量点(nxy)数值是可改的,而笔画的序号、代码是固定的,序号02493位数,前两位是25种笔画类,个位数为偶数时对应小写字母代码,奇数则对应大写字母,其中01是宋体;23是黑体;45是楷体;67是隶体;89是魏碑。

        字根数据表ZG,现在可包含1035 个字根,字根号051是固定作为52个常用偏旁部首(都是位居首位的部首),分别用大小写英文字母作为编码,52号以后的字根可以随意设计修改。修改的主要部分是字段ZG,它是字符字段,长度是30,记录该字根的笔画码组成(包括括号和调整笔画位置的数字)。另一个要修改的结构码JG,详见后面“汉字设计”一节。字根设计完成后,可以由程序排序,并编定它的代码(这是经修改的首尾笔画码)。它还有一个字段,即字根汉字ZGHZ,是用WINDOWS系统汉字表示的字根字形,系统汉字库中没有相应字体的,则用含有该字根的汉字加两个数码来表示,第一个是开始笔画序号,第二个是该字根的笔画数。

        汉字数据表GBKHZ:它共有26383个记录。系统汉字库中的2万多个汉字都已记在它的HZ字段中,nm字段则是它的内码,主要可以修改设计的是15个整数数值字段ZG0GZ14,当它是<2000的整数时,是字根表中字根号,>2000时是调用的汉字号(即本表的记录号加2000)。当它是负数时,去掉负号就是笔画码和其他ASCII字符。由这些数据,即可组出汉字字形。此外还有字根串数ZGS(等于ZG0GZ14不为0的数目)、笔画数BHS、全拼音PY、该汉字的频数PINSU等字段。

      

二、软件界面

 

        软件启动时,屏幕显示:“演示无字库汉字————信息时代的汉字和中文信息处理的出路是:————汉字植根于电脑的方法————必须建立在笔画组字上————陕西省气象局   张时钊————20041月”。这里将是以后显示笔画、字根、汉字形态的工作窗口。它的左边显示“请点击这里开始”。鼠标双击该处或简单地按回车后,即开始读入笔画和字根数据,然后在这部分显示本软件所有操作按钮,它们大概可以分为以下几部分:

一、       常驻的显示信息:

    首先是左边的二列笔画和二列部首,最左边是它们的代码字母。不论是笔画还是部首的代码,都是左边一列用小写字母,右边用大写字母。笔画没有Z代码,它专门用来表示空笔画。这个常驻的笔画部首右边,就是一些操作按钮。最顶端的右边有个小输入框,可输入笔画字体代号04,分别代表宋、黑、揩、隶、魏。然后击左边按钮“显示笔画、部首”,即可将笔画部首形态改为指定的字体。这时下部白色的信息输出框中,会显示这一显示动作耗时多少秒。信息输出框专门用来输出各种操作的输出信息,如开始时还有读笔画、字根数据所耗费的时间。输出框下面是输入框和提示框,它是在设计字根和汉字是使用的,见下面。输入框的右边是xy坐标值,它们指示鼠标在工作窗口中的位置。

二、       常用操作框:

    这是用红线框起来的部分,有以下几个操作:

  A、在2.0版之前,原有三个还没有完成的按钮:“新文本”、“读文本” 、“存文本”,计划用于进行文本编辑的。但无字库的文本编辑,本身就应搞一个专门的软件,所以连同其下的“帮助”按钮,现在都已删去。另外增加两个分别生成张码10和张码30码源表文件的新按钮。“张码10”的文件已按字频增加一、二级简码。“张码30”的文件没有简码,毎个汉字后除列出3个字母的全码外,还列出它的字频,三者以逗号分隔。显然,它须要经过处理,才可作码源文件用。这两个按钮还会生成专门文件,列出字根代码和汉字重码的分布。所有这些文件,都以中文文件名存放在安装本程序的子目录下。

B、显示字根和汉字的两个按钮,分别叫“字根列表”、“汉字列表”。它们从“转到记录号”下面输入框中的记录号开始,在右边的工作窗口中逐一列出所有字根或汉字,直到窗口写满为止(没有汉字数据的记录,则显示一个点)。汉字列表时,在每个显示的无字库汉字的右下角,按行空间的大小,显示它的字库汉字字形及它的拼音,可资对照。注意,只有WindowsXP才能显示所有2万多字库字,Win98只能显示6763个国标字,其它位置显示空格。字库里不是汉字的,无字库汉字位置填一个点“、”,国标字位置显示空白、符号或 “?”号。字根列表时,字根左下角会显示一个0,如果您已点击过“统计调用”,则0会变为它的被调用数:如果它>100000,则除以100000的商是字根内的调用数,后5位数才是在汉字中的调用数。

C、输出以上字形的字体、大小、间隔、笔画粗细(后两者分xy两个方向),都由中部一组输入框指定。开始时字体为0,大小为50(可取10600),间隔为20,笔画粗细为30,这样每屏刚好可输出10×10100个字形,这样很容易算得每个字形的记录号。当笔画粗细在100以上时,“阴影”这个输入框如果指定为“y”,则显示以阴影线组成的字形。(“圆角”输入框可取110,它控制笔画转角处的形态,现在已没有作用)。

D、数据转换开关:专门用来选择三个数据表的开关,只有选中了一个表,关于那个表的操作按钮才会显示,这个开关上也会显示这个表的名字。开始时是显示“汉字”两个字,最上部的笔画数据表及其下的字根数据表的一些按钮不显示。击一下这个“汉字”按钮,“汉字”两字即变为“笔画”,下部的一组汉字按钮被隐去,改为显示顶上方的另一组笔画按钮。再击一下“笔画”,又改为“字根”两字,位于公共操作框上方的字根数据表和有关按钮就成为可以操作的了 (hz800.exe的三个数据表的有关按钮都在公共操作框上方) 。“转到记录号”这个按钮的作用,随显示的数据表而变,总成为转到当时显示的数据表的某个记录上。

E、公共操作框上部,另有两个关于字根的按钮。一个是“查字根码”,在其右边的输入框中输入两个字母后再击它,即可在工作屏幕下部输出所有以这两个字母为编码首字符的字根。每个字根下方列出它的三个字符的编码(最后一个字符表示顺序)及它的字根号。在设计字根时,要调用另一字根,就是在尖括号内写入这个字根号。另一个是“定字根码”,当字根的数据设计有变动时,应按一下这个按钮,它可以自动对这1130个字根(前52个部首除外)编码,编码是该字根的首尾笔画为首两个码,首两码一样的为一组,其次序用“0”以后的ASCII码标在第三个字符上。这个操作要费一些时间,完成后显示各组编码的字根数,这一统计结果还形成一个文本文件“字根编码统计.txt”。

F、最后一个输入框位于常用操作框中心,很小,只能输入一个红色字符,但值得特别注意。它的左边注有“记录”两字,其意义是:只有这个输入框中有红色的大写“R”时,修改的字根数据和汉字数据,才会记入数据库中,以后才可调用。否则,如果是其他字符,包括小写“r”,操作之后虽然显示了需要的字形,但不会记入数据库中。不过笔画数据不受它控制。

另三个与三个数据表有关的操作按钮组,将在以下三节“笔画设计”、“字根设计”、“组出汉字”中介绍。

     

           三、笔画设计

    

第一个数据表BH的数据控件,上标“笔画”两字。左右各有两个三角箭头,击最外面的两个箭头,左边的是转到第一个记录,右边的是转到最后一个记录。内层的两个箭头则是转到上一个记录或转到下一个记录。如果要转到一个指定的记录号,则可用公共操作框中的“转到记录号”按钮。其他两个数据表控件的操作完全相同,只不过控件上标的不是“笔画”而是“字根”或“汉字”。对于笔画数据控制,还有第三个跳转到所需要记录的方法:在左边显示的某个笔画上击一下,即可跳转到该笔画的记录上。因为那里只显示一种字体的笔画,也就只能转到这类笔画上,要用此法转到别种字体的笔画上,必须先把显示字体转到这种字体。

笔画数据表控件右边的“笔画交换”按钮,可以使两个设计好的笔画相互交换。当然会先弹出输入框,输入指定的两个笔画的原代码,再进行交换。它们的记录位置交换了,代码自然也变了。这一操作也要把字根和汉字数据表中的笔画代码都作出相应的交换,所以费时间。安排这个功能,虽然只有一个作用:就是改变笔画的命名(即代码),但是也影响字根和汉字按笔画的排序,因为排序是按笔画代码顺序排的。 请注意:使用频率最高的点、横、竖、撇的四种笔画已固定用abcd作代码。我们在“定字根码”的操作说明中已知,程序会把首笔是这四种笔画代码的字根,另指定其他字母作代码。如果真的交换一对笔画码,这个自动编字根码的功能,就不能起到改善字根码分布的作用。就是说,将会有更多的编码组没有字根,而有些编码组的字根很多,甚至超过一百。我们没有把点、横、竖、撇按拼音分别命名为dhsp,而用开头4个字母,就是为了程序简单,如果都用拼音首字母命名,这个“定字根码”的程序就会复杂化。实际上按拼音字母命名笔画,也不可能全面贯彻,有些笔画的中文名字还值得商榷,怎么能用拼音字母作代码呢?所以没有这样做。这四种笔画频数大,排序时应该排在前面,用abcd来命名,自然是适当的。

“清除”按钮,会清除当前笔画记录的全部数据。除非该笔画数据不要了,或难以修改,才可以用它,从新开始设计。“写笔画”是在一个笔画设计完成后,用它来显示大小不同,纵向或横压缩一半的四种实际笔画形态,用来判断设计结果的好坏。击“画线”按钮,则画出该笔画的轮廓线。它是黑绿两色的封闭线,围着另一条红色的骨干线。这两种线是分别设计的,由“画线”按钮左边的两值按钮控制,击一下该按钮,按钮上可反覆显示“轮廓”和“骨干”两字。特别要注意:当它显示“骨干”而点取轮廓线上的小圆点时,程序会认为是增加一个新的骨干点。显示“轮廓”而点取骨干线上的小圆点时也一样,都会使设计图打乱。只有正确选取小圆点,光标形态改变,然后拖动它,改变它的位置,就可修改这些折线。当选取的是折线的末端时,光标变为“十”号,拉开来就会成为一个新点。

 需要特别说一说黑绿两色的轮廓线。绿色的是折线,通过每一个轮廓点。黑色的是平滑的曲线,它只通过标有数字的轮廓点。这些数字是轮廓点的序号,都是3的倍数,这就是说,每两个黑色曲线通过的点中间,都有两个它不通过的点。这两个点是控制曲线形状的控制点,拖动控制点,可任意改变曲线的形状,以便生成需要的汉字笔画轮廓。所生成的实际使用的黑色曲线就是三阶贝塞尔曲线。所以,设计轮廓线时,不仅要封闭,而且点数必须是3的倍数。

曲线中小圆点的xy坐标值,就是笔画记录的数据,都显示在屏幕右边的表格中。这表格只有在设计笔画时才显示。顶部一行三个,从左到右分别是笔画记录号、笔画代码及线数。线数是两位数,十位是x向线数,个位是y向线数,可分别取值13。线数的概念将在字根设计时再说,现在可理解为笔画占据的空间高度和宽度。其下才是030行的坐标点数据,06行可记7个骨干点。730行则记轮廓点,每点除xy值外,左边还有一个n值。现在说明这个n值的意义。笔画在实际汉字或字根中,必须按它所能占的空间大小进行压缩。为了保持笔画起落笔及转折处的特有形态及笔划的统一粗细,压缩的只是骨干点,而实际轮廓线相对于骨干点的距离必须保持不变。这个n值就指轮廓点相对于哪一个骨干点来计算它的实际位置。所以它的值可取06,且不能大于骨干点的最大记录号,而骨干点本身则没有n值。设计笔画时,必须先设计骨干点,再设计轮廓点,在取定轮廓点时,软件会自动找最近的骨干点作为它的参考点。因此,如果骨干点有变动,相关的轮廓点必须再点击一下,以便修正它的n值。否则,画出的图形将是奇形怪状的。

当鼠标选取一个小圆圈时,数据表中相应的一行数据会变为红色,拖动该点时,红色的数字也跟着变。如果用鼠标右键选取一点,经过确认后可以删去该点,数据清为0。如果被删点在折线中间,折线就会断为两段。如果需要要把两段折线连接起来,则应该先在表中找到这两段数据,在中间数值为0的记录上,填上任意数据,再击“画线”按钮,就可连接起来。所填数据当然不会合适,只要把新增加的连接点拖到合适的地方就可以了。

 

四、字根设计

 

A、           总说

在字根设计部分的左下角,也就是公共操作框的左上方,有一个“显示字根”按钮。它的作用是显示“转到记录号”下输入框指定的字根。如果该字根号非空,将显示该字根的五种字形,并跳出一个信息框,如果按回车“确定”,则顺次显示下一个字根。如果显示的某个字体不理想,则可按“取消”,然后停下来修改它的笔画结构序列或者可能要回到笔画设计部分,修改笔画数据。这里只讨论笔画结构序列的设计。

我们先全面介绍有关字根的其他按钮(公共操作框中的两个按钮除外)。除“显示字根”外,老版本只有字根数据表控件上方的“字根排序”和“相似字根”(原名“加字根”)是可操作按钮。这两按钮上方新加3个调用按钮放在最后介绍。先说“相似字根”。它右边和右下方有两个小文本框,都显示字根数据表的HZ字段,只有上部较小的可以操作,可以输入字库里有的字根,如果是字库里没有的字根,可输入含此字根的汉字,后加两个数码来代表,第一个为开始笔画,第二个为笔画数。下部那个大的不能操作,因为字形大,不能显示后加的两个数码,只能显示第一个代表汉字,其作用就是便于看清楚字形。点击“相似字根”时,能查出与当前显示的字根相似的字根号。所谓相似有二:一是它们的代表汉字相同(实际上这根本不反映字根字形的相似性),二是它们的笔画序列相同。这个按钮的作用是防止选用相同的字根。

“字根排序”是把已设计好的字根,按其笔画序列重新排列。这将使每个字根获得一个新的字根号,于是所有调用这个字根的地方,不论是字根数据、不论是汉字数据,凡是用到该汉字根的,旧字根号都要换成新字根号。这很费时间,所以只在字根设计告一段落时,才进行字根排序。在排序过程中,如果发生错误,所有数据可能会被打乱,不能再用了。因此最好在事先备份一下数据库,以便出错后恢复。另外要注意:每个字根记录笔画结构序列(结构串)的字段ZG,只能记30个字符。如果它原已记满,且包含调用别的字根,这调用字根号本是两位数,经过字根排序后却变为3位或4位数,就超过30个字符了。这样必然要丢失最后的字符,使字根的设计变得不正确。所以字根排序后,要用“字根列表”看一遍,发现错误,及时改正。

字根数据表控件下面的一行小文本框,自左向右显示字根号,字根码及结构码,前两者是自动生成的,只有结构码是一个三位数,且可以修改。不过它是在组汉字时用的,我们留到下一节说明。再下面是笔画结构序列(结构串)和纯笔画序列,后者只包括a——y等笔画代码(纯为英文小写字母,但没有空笔画z),前者还会有括号和数字等。在按了“显示字根”这个按钮后,结构序列的内容,会自动拷贝到输出信息框下面的文本输入框中。如果显示的字形不理想,可以在这个输入框中修改序列,再按回车,显示新的字形。这时,如果公共操作框中间的标有“记录”二字的输入框是红的大写“R”,就会用下面的输入框内容,修改上面的笔画结构序列,也就修改了字根数据表的ZG字段。不能直接修改结构序列(结构串)和纯笔画序列,它们都是不可操作的。“显示字根”这个按钮的左边,是该字根的笔画数及字根的xy两个方向的“线数”(其意义见下),它们都是自动计算出来的,也不容修改。

B、           笔画结构序列

现在说明程序是如何按笔画结构序列的线性排列,组成平面结构的字形。这是本节的重点。

   与字根各有特殊的组字特性可以利用不同,笔画之间,既可以左右并列,也可以上下叠加,还可以在不同部位相交错,不能确定一种笔画的主要结构特性。所以我们把所有笔画都看成是有同样的上下结构特性,而且一个笔画构成一个“层”。不同形态的笔画构成的层,厚度是不一样的,我们称之为线数,横、横钩的y方向的线数为1,而折钩、竖、斜钩等y方向的线数为3。汉字的笔画是从上到下,逐层书写的,如果笔画相交,就把它看成是从下层延伸到上面的层,与上层的笔画交错。笔画要向上延伸n线数,就在该笔画后面加上一个数字nn超过9,就用两个以上数字的相加值。这样,短横B、长横b加上竖c再加数字1Bbc1),就会组成“干”字。这整个字的纵向线数,是两个横的1,加上一个竖的3,共计5,程序按这总线数分配空间,两个横只占上部2/5弱,而竖笔的y向线度3则在横笔下面,另在长横之上延伸线度1,故显得头重脚轻。为此在长短横间插入2个空笔z2z后的数字表示有几个空笔或该空笔占多少线数),变成Bz2bc3,则竖在长横上下都一样长,就好看了。

笔画码右边直接加数字,是表示该笔画所占的空间向上延伸,字形拉长了。没延伸时它原来应占的空间仍是它占据的。如果数字n前加一个*号,则表示它占据的是从上一层笔画的底部向上延n个线数,即自己没有独立的层,整个字也不增加线数,完全是重叠的笔画。如Bzc*1b,它是个“工”字。竖笔c虽然原有纵向线数3,但它没有自己的空间,只在空笔z的空间里延伸1个线度。

组成左右结构的笔画,则必须放在方括号[ ]之内,它们只形成一个层。这个层内的诸笔画,后面可加不同的数字而向上延伸不同的高度。如果左边第一个笔画加*n,则整层将有同样的高度n,而且也是从上一层底部开始向上延伸,没有自己独立的空间,是一个重叠的层。笔画没有向上延伸不同高度时的左右结构层(包括重叠层),其中的笔画将有同一个高度,即有相同的纵向线数,数字等于其中线数最大者,线数较小的笔画自动伸长。同样,同一个字或子字中,所有层的横向线数也是相同的。如果有一个层是左右结构的,随着该层中笔画的增加,横向线数必然增加,那么其他所有层的横向线数都增加到相同的数值。例如zbz[c*3c]是“艹”的笔画序列,横向线数是横b3,因为竖c的横向线数是1,层[c*3c]的横向线数本为2,也增为3了。而zbz[c*3ccc]是汉字“卌”,横向线数等于层[c*3ccc]4,横b的线数也增为4。但是线数只用来安排笔画的相对位置的。上面举的两个字的横b,虽然有不同的横向线数,但有同一个长度,它们都占一个字的宽度。实际上只使竖笔c在两个字中疏密不同,第一个字中,各占1/2(总线数为3,每笔伸展为1.5);第二个字中各占1/4(总线数为4,每笔保持原有值1)

一个字根的笔画结构序列中,可以调用别的字根。方法是把被调用的字根号写到一对尖括号<>中。字根号当然记不住,但可用被调用字根的首尾笔画(注意:首笔点、横、竖、撇要进行为代码变换),用“查字根码”按钮来查找。被调用的字根可称为子字,是被当作一个普通笔画来看待的,这个特殊笔画具有的线数,就是该字根的总线数。子字有自己的笔画结构序列,按原有的规律组成字形,只不过它已被压缩,被安置在母字的一定位置中。“<字根号>”既然作为一般笔画看待,也可以在它后面加数字进行位置微调。有时我们还把一部分笔画用大括号{}括起来,也称为子字,也当作一个笔画看待。圆括号()内的笔画也是一个子字,不过它有一点特殊作用,这个子字是写到前一笔画(例如折弯钩、弯钩)的左下方,而且这笔画的线数会随子字线数的增加而增加。 注意:除方括号外,所有括弧内的笔画,都以上下结构开始,括弧也必须配对,只有方括号的右括号,有时可省。

方括号内的笔画后面,可加“-n”或“+n”而使起笔点向左或向右移动n个线数,这用来调整笔画间的相互关系。调整笔画关系的方法还可以用空笔画z。因为向上向左延伸,都不能超过一个字的范围,所以要下面的笔画穿出顶部的横b,则这横上面要加适当的空笔zn,否则下面的笔画后加多么大的数字也没有用。这个数字要恰到好处,也不能过大。过大时,调试该字本身时没有问题,而当调用该字作为子字,子字的上面有其他笔画时,它就会冲到这些笔画层中。设计字根时,必须反覆试验,才可选定最合适的。

C、有关调用的3个按钮。它们在所有字根按钮的最上面,都是新加的,目的是为了选择最好的字根表。最好字根表的标准应该是,用最少的字根数目,能很方便地组出所有汉字。软件里允许最多设计使用2000个字根。其中前52个用大小字母作代码的偏旁(已显示在25*2种笔画右边)是不能增删的,其它可按需要增减。用已有的字根,组完2万汉字后,可按字根命令区左上角的“调用统计”按钮,统计每个字根的使用次数,统计结果除最后显示外,还记在文件“字根调用统计.txt”中备查。经过统计之后,在字根列表时,每个字根下还显示一个数字,如果有第5位以上的数字,那是被别的字根调用的次数,第5位后的数字是在汉字中的调用次数。如果这个数字为0,表示没有被调用过,完全可以删去。这可以简单的按一下右边的“删零调用”。有些只调用12次的字根,只要能在调用它的汉字中,直接用笔画代替,就可使调用数变为0,最后把它删去。按最右面的“调用汉字”,输入想查的字根号,就可查出调用它的前几个汉字的序号了。用这样的方法,可以调整选择字根表。开始时我们用了1130个字根,现在只有900多个了。

 

五、组出汉字

   

A、           总说:

汉字数据表GBKHZ的操作界面在公共操作框下面。这里除了汉字数据表控件和一个命令按钮“显示汉字”可以操作外,其他都是输出信息。首先是显示字库汉字字形和它的内码。在这个数据表中,我们已把Windows操作系统中用的2万多个字库汉字都放进去了。这实际上很简单,只要在字段HZ中依次放上内码就可以了,汉字方框中即可显示该汉字,并在内码输出框中显示16进制内码。可以用“转到记录号”按钮,在其下方输入026383的数字再击按钮,即可转到任一个汉字记录上。当然也可以用数据表控件中的三角形箭头键。有一些记录可能只显示内码,而没有汉字或者汉字方框内是“?”号,这是因为系统中没有这个字模,但我们也可以为这些记录号设计一个新汉字。但我们主要是要为有字模的汉字内码设计出一个同样的无字库汉字字形来。

已经设计好或者说已写入一个无字库汉字的记录,标有“字根数”的右边会显示它调用的字根数。“笔画数”则显示总笔画数,它是所调用字根的笔画数之和。如果这两个输出框中不为0,只要一击“显示汉字”,就可在工作窗口中显示设计的字形。诺大的工作窗口只显示一个汉字,所以笔画形态清晰可见。但现在这些放大的字形不怎么好。笔画轮廓虽已使用贝塞尔函数,但内部的填充还没有好程序来处理,不能很好发挥作用。

击“转到记录号”,由其下的十进制数字出发,找到这个记录号,在该记录的内码输出框中显示相应的十六进制内码。反之,击“显示汉字”时,则由当时显示的内码出发,找到该汉字,并在“转到记录号”下面显示相应的记录号。这样,无论从那个数字出发,都可找到另一个相应的数字。当然,“显示汉字”主要作用是在工作窗口中显示一个很大的无字库汉字。与此同时,在信息输出框下面的输入栏中还显示原来输入的字根序列。如果字形不理想,可以停下来,即按弹出框中“取消”,可以修改这个字根序列,再按回车,显示修改的字形。如果标记“记录”右边是红色的大写“R”,就会修改数据库,并跳到下一个记录。

B、           汉字组字方法:

本节主要是介绍如何组成汉字。为此,先要说明字根的结构码,它规定字根组成汉字是的特性。字根结构特性分三类9种,结构码是3位数,百位数指明属那一种。

1、            左右结构类:结构码百位数为0,绝大部分末两位也为0。对于一些笔划很少的字根,组成结构复杂的汉字时,它们所占的位置太窄小,显现不出应有特性。可以输入一个两位数,它除以10,就用来规定扩大它应占空间的倍数(应占空间是以笔画数分摊的)。

2、            上下结构类:结构码百位数为1,一般为100。有些字根底部中空,如“宀”等,希望后续字根能升高写入其中空部分,末两位数用来规定后续笔画升到该字根内部的百分数。

3、            嵌套结构类:结构码百位数大于1,其后续笔画写入其内部。后续笔画占据的空间之边缘,离开嵌套字根边缘各有不同的距离。一般来说,如果上下两端或左右两边都有距离的话,是相等的。所以只要用一个数N(十位数)指定x方向离开十分之几,用一个位数M指定y方向离开十分之几。而结构码是百位数L(整个结构码为LNM),它用来指明嵌套种类时,就已指明到底那几个方向是离开嵌套字根的边缘的,这些百位数分别是:

a.     左上包围(L=2):如“厥”字之“厂”、“扇”字之“户”等,左边离开N/10,上边离开M/10