汉字笔画组字理论

摘要:IDL描述两个字根组成新字时,前面要加结构码,我则把它固定在字根的结构特性中。CDL用笔画描述一个字时,要两个字节指明它的左上角和右下角,我则用层积理论。这样不但简单,缩短描述序列,而且意义清晰。左上角、右下角位置难用键盘指定,采用缩放拷贝,更不能保证笔画的粗细和形态不变。汉字笔画组字理论解决这些问题,用来建立无字库或小字库汉字系统。

关键词:字根、笔画组字、结构码、层积理论

     

一、          汉字组织的三个层次

 

我近5年的实践证明:只要50个笔画,就可由软件自动组出所有汉字。汉字只取三个层次,笔画组成字根,字根组成汉字。有些字根可以成字,少数笔画也可独立成字,称为独体字。合体字与独体字、字根一样,也可成为更复杂的汉字之组成部分,这时可平等地看作是“子字”。

笔画数量少,不同作者的看法基本一致。但名称略有出入,而且常有如“横折竖折横折竖钩(简称:横折折折钩)”这等长长的怪名称,我提议用“乃钩”之类简短形象的名字。参见附表,共25对,以字母大小写表示主副笔,许多形状栏以例字加数n表示,即其第n笔。对于组字来说,要决定每个笔画在汉字中应占的位置和大小,以及在拉长或压扁时,保证笔画的粗细和形态不变。我在笔画轮廓线中间,起落笔及转折处,都另设一骨干点。这骨干线,在不同汉字中是要随它应占的空间不同而变形的:拉长或压扁。但轮廓点相对于与它最近的骨干点的相对距离是不变的,以此来保证笔画的粗细和形态特征。其他所有组字方法,都是整体缩放后放到新字上的,笔画粗细必然要改变。

字根也被称作部件、字元等。笔画组字用的字根,要从便于组出所有汉字的角度来选择。我现在用了936个字根,实际上有许多可合并,如 “翅14”(翅字第一到第四)和“支”。下一步试验按形状相似或性质相近(如水、氵)合并为250左右,同种字根在组字时到底用那一个,用条件语句选定,而条件可在字根的特性值中描述。

 

二、          由字根组出汉字

               ——————结构码

IDL描述两个字根组成新字时,前面要加结构码。我在1984年就发现,绝大部分情况下,字根都是以其固有的结构方式参加组字,不需要特别的结构码,只要给定字根结构特性就可以了,个别例外才要加结构码。

字根结构特性分三类10种,用0——9表示:0左右结构类;1上下结构类;以下是嵌套结构类: 2左上包围;3右上包围; 4上三包围;5左三包围;6下三包围;7左下包围;8走之包围;9全包围。每个字根的结构特性,除上述一个数字外,还可规定其他的。我原加两位数给嵌套结构定死xy方向缩进的百分数,更好的方法可能是规定xy方向的线数(线数的含义见下),再按它与被包围部分线数的比例决定位置。另外,走之包围原来是属于左下包围的,这样要先写走之,再写被包围部分,不符合书写的笔顺。把它独立成一类,用子程序处理,就可把被包围的右上部分用圆括号括起来移到前面。全包围之“囗”字,前两笔先写,最后用横封口,无论如何不能符合笔顺要求,也可在计算笔画排序时使用特别的子程序。

加圆括号组织汉字,意义清晰。括号内的一切可看作子字,与调用别的汉字一样。子字与后面部分的缺省关系是左右结构。这子字或其他字根要改为上下结构,可在后面加结构符“:”。强迫字根改为左右结构的结构符是“”。强迫改为包围结构的结构符是“=”,后面也可以附加数字规定详情。用此结构符就可在汉字上叠加对号∨、错号×或加圈○。

 

 

三、          由笔画组出字根

                       ——————层积理论

CDL用笔画描述一个字时,要两个字节指明它的左上角和右下角。我则把笔画都看作是有上下结构特性的一个“层”。不同形态的笔画构成的层,厚度是不一样的,我们称之为纵向线数y,横、横钩的y线数为1,而折钩、竖、斜钩等y线数为3。汉字的笔画是从上到下,逐层书写的,如果笔画相交,就把它看成是从下层延伸到上面的层,与上层的笔画交错。笔画要向上延伸n线数,就在该笔画后面加上一个数字n。如短横B、长横b加上竖c再加数字1Bbc1(因不能显示笔画,用字母代),就会组成“干”字。把B改为空笔zz bc1),则成“十”,这里z是不可省的,否则横已是字顶,竖不能上伸。如果数字n前加一个*号,则表示它占据的是从上一层笔画的底部向上延n个线数,自己没有独立的层。如“工”字Bzc*1b,竖笔c只在空笔z的空间里延伸1个线度,整个字y线数为3。再看“干”的y线数共计5,两个横只占上部2/5弱,显得头重脚轻。可在两横间插入2个空笔z2(或说该空笔有2线数),变成Bz2bc3,则在长横上下等长,就好看了。

几个笔画成左右结构时,必须放在方括号[ ]之内,它们只形成一个层。这个层内的诸笔画将有同一y线数,数字等于其中线数最大者,线数较小的笔画自动伸长。个别笔画可加数字n向上延伸不同高度;如果左边第一个笔画加*n,则整层将有同样的高度n,而且也是从上一层底部开始向上延伸,没有自己独立的空间。同样,一个子字中,所有层的横向线数x也是相同的,如果含有一个左右结构的层,随着该层笔画数增加而增加了x线数,所有层都要增加到同一值。例如“艹”字zbz[c*3c]x线数最大是横b3,层[c*3c]本为2,也增为3。而“卌”zbz[c*3ccc]x线数等于层[c*3ccc]4,横b的线数也增为4。不过线数只用来安排笔画的相对位置,上面两字的横b虽有不同的线数,但有同一个长度,即占一个字的宽度。

只有方括号内各元素是左右结构的,其他括号内都是上下结构,且是被当作一个普通笔画来看待,这个特殊笔画具有的线数,就是该子字的总线数。尖括号<>中是单一的字根或汉字的内码;大括号{}是由笔画组成的子字;圆括号()内的子字有一点特殊作用,这个子字要写到前一笔画(例如折弯钩、弯钩)的左下方,而且该笔画的xy线数会随子字线数的增加而增加。

 

附表125*2个笔画表

 

主笔画     线数xy    形状或例字    付笔画        线数xy    形状或例字

a点            11    主1           A竖点            12    心1

b横            31                 B短横            21    王2

c竖            13    丨,上1       C短竖            12     川2

d撇            33    丿,不2       D竖撇            23     川1

e捺            33    人2           E平捺            32     辶3

f横钩          32    买1           F长横钩          23     子1

g竖钩          23    寸2           G撇钩            33     乄1

h竖提          23    以1           H小竖提          23     卯2

i斜钩          33    戈2           I卧钩(心钩)      22     心2

j提            33    站5           J点提            22     氵3

k横折提(言提)  22    让2           K横折折(凹折)  22     凹2

l横折钩(同钩)  33    同2           L横弯钩(力钩)  22     力1

n竖折折钩(马钩)22    马2           N竖折折(鼎折)    22     鼎6

m横折          23    丑1           M短横折          23     夬1

o横三折钩(乃钩)33    乃1           O横三折(凸折)  33     凸4

p竖折撇(专折)  23    专3           P竖折撇          22     奊6

q竖折          33    断7           Q竖弯            22     甚9

r撇折(发折)    22    发1           R绞丝撇折        22     乡1

s横撇(又撇)    33    又1           M短横撇          22     对1

t走之折        12    辶2           N横折折撇(建折)  23     建7

u横撇弯钩(耳钩)33    阝1           U横撇折折钩(扬钩)33     扬4

v撇点          23    巡1           V横折弯          22     殳2

w横斜钩(风钩)  33    风2           W横折弯钩(九钩)33     九2

x竖弯钩(儿钩)  33    儿2           X横撇弯钩(乙钩)  33    

y弯钩          23    犭2           Y直弯钩          23     子2