Subject: Make new charactor (~{TlWV#(6~#)~})

From: [email-masked] (Zhiping You)
Date: 9 Aug 93 01:52:39 GMT

自己造字（二）

    上次贴了一点关于自己造字的东西，留下了一个尾巴，不少网友要求我
把它补全了。看来，不收尾是脱不了干系了（四川话叫脱不了爪爪）。只好
牺牲掉原来准备用来到 IGS 上下棋的时间来收这个尾。

    这里再重复一下上次已交代过的东西。如果你造字的目的是在网上贴文
章让别人看，那么请跳过此文。因为这问题没有解。别人看中文用的是别人
自己的字库，你造的字不在里面。本文讲的造字能解决的问题是能让自己在
荧光屏上看或在纸上印出来。

一．字库（FONT）：

    要懂得自己造字，首先要懂得什么是字库（FONT）。所谓字库就是一些
点阵。为便于解说，我们以 CCLIB.16 为例。关于其它字库，后面会简单提
到。 CCLIB.16 每个字就是一个 16 X 16 的方点阵。点阵中不同的
点的开或关就形成不同的字。表达开、关的最自然的办法就是用二进制数。
开就是 1，关就是 ０。 一个 16 X 16  的方阵相当于一
个 256 位的二进制数。大家都知道，英文字母的国际标准码 (ASCII) 
是 0-255，任何一个八位二进制数都可以用这标准码中的一个字母来表示。
如果把 256 位按八个一组分成 32 组，每组用一个 ASCII 字母来
表示，则每个汉字可以用 32 个 ASCII 字母来表示。所谓造字就是
造这个 16 X 16 的方阵，确定相应的 32 个 ASCII 字母，把它们
放在字库中的相应位置上。

二．造点阵

    造字要先造点阵。自己造点阵的办法有四种（跟茴香豆的茴字的写法一
样多 :-)）。

    １．描字：这是最麻烦的办法。先画一个 16 X 16 的方阵，将你要造的
字一点一点地填上去。比如，你想造一个‘字’字（这里不能真正用没有的字，
否则诸位就看不见了），先用手将‘字’字写入一个 16 X 16 的方阵，
用空格键代替没有填到的点，用‘&’代替填到的点，这样就得到如下点阵：

               &&       
           &    &&    & 
          &&&&&&&&&&&&&&
         &&&         && 
          &        & &  
             &&&&&&&&   
                  &&    
                 &&     
                &&    & 
          &&&&&&&&&&&&&&
                &&      
                &&      
                &&      
                &&      
              &&&&      
                &       

诸位一定立刻感到此方法太难。麻烦不说，还不一定准确。所以，我们有后面
三种偷懒的方法。但是偷懒的方法不一定总有效。在别的方法都不行时，还是
要回到这一最原始的方法来。尤其是当你需要造一些特殊符号时（比如上标、
下标、平方号等等），这一方法还是很有用的。对于大号字库（比如 64 X 64,
72 X 72 等等），你甚至可以把自己的单线条自画像造成字放入字库。或者把
四个小号字放在一个大号字中，象印章一样。

    ２．偷字：CCLIB.16 只有七千多字。有些字库有上万字。如果你要的字
在你的软件所支持的字库中没有，而别的字库中有。那么，如果你知道这个字
的ＧＢ码（或其它任何码），则可以用一定的程式把这个字从那个字库中抽出，
显示成点阵形式，然后放入你自己的字库。（理论上讲，可以不经过点阵这一
步，但为了与其它三种方法一起便于处理，我们将它先换成点阵）。要将ＧＢ
码换成点阵，可以用 CHTEX 中的 CHIVIEWER。如果懂得字库的排列，
自己动手写一个转换程式也是很容易的（以后也许会讲到）。

    ３．拼字：很多时候，你想要的字与字库中现有的字只差一个偏旁。或者
每个部分都有，但就是没有组合在一起的时候。这种时候就可以用拼字的办法。
比如，如果你想要造繁体的‘并’字（左人右并）字。那么你可以用能找到的
拼音的‘拼’字，将提手换成单人旁即可。先抽出‘拼’字，换成点阵。再找
一个有单人旁的字，（比如‘你’字），换成点阵。最后，将‘你’字的单人
旁放到‘拼’字的提手处既得下面的点阵：

            &           
            && &     && 
            && &&   &&  
           &&   &&  &&  
           &    &  &    
          &&&  &&&&&&&& 
          &&&   && &&   
         & &&   && &&   
           &&   && &&   
           &&   && && & 
           && &&&&&&&&&&
           &&   && &&   
           &&&  && &&   
           &&  &&  &&   
           &&  &   &&   
           &  &    &    
        
请注意这个点阵与从繁体字库抽出来的并字的点阵不同，繁体字库（16 X 16）
的字比较单薄。请比较：

              &     &   
           &   &&   &   
           &    &  &    
          &  &&&&&&&&&& 
         &&     &  &    
        & &     &  &    
        & &     &  &  & 
          & &&&&&&&&&&&&
          &     &  &    
          &     &  &    
          &     &  &    
          &    &&  &    
          &    &   &    
          &   &&   &    
          &   &    &    
          &  &     &    

    ４．改字：如果你想要的字与字库中的字只差一点点，则可以将字库的字
抽出，显示成点阵形式，减去或加上不同的部分，然后在放入字库。比如，你
想要‘勺’字的上部，而不想要下面那一点（五笔字型字根之一：金勺缺点…），
则可以将‘勺’字抽出，换成点阵取掉那一点。而得如下点阵：

             &&         
            &&&&        
           &&&       &  
           &&&&&&&&&&&&&
          &&         && 
          &          && 
         &           && 
                     && 
                     && 
                     && 
                     && 
                     && 
                     && 
                     && 
                   &&&& 
                    &&  

有了点阵，剩下的任务就是将点阵换成 32 个 ASCII 放入字库。

    本人用拼音打字，每分钟只能打 16 个。很羡慕黄鱼等五笔派高手，每
分钟打 80 字。打累了。剩下的部分下次再讲。下一部分需要自己动手写一
点小程序来完成。不会写计算机程序的网友可以到此为止，我也许会写一个
抽字放字的程序放到 IFCSS.ORG 去（只适用于 CCLIB.16），你只须提供点
阵即可。（大约一周以后）。

    下次的小标题有：点阵换 ASCII，放字入库，取字。有空也许会讲ＧＢ
码与 CCLIB 的关系（这对打算自己写中文程序的网友很有用）。
－－－（未完待续）
-- 
-万精油-