三、分隔文字
在包含前导文字、上标文字、下标文字和后续文字的带上下标文字中,显然必须只要用3个特殊文字来分隔它们,称为分隔文字,取名为"上下标开始"、"上下标隔"和"上下标结束"。在包含前导文字、下标文字和后续文字的带上标文字中,要用两个分隔文字"上标开始"和"上标结束"。在包含前导文字、下标文字和后续文字的带下标文字
中,同样也要用两个分隔言文字"下标开始"和"下标结束"。
对带上下标的文字,在前导文字和上标文字之间有分隔文字"上下标开始,这之间要进行上标文字位置和高度的调整;在上标文字和下标文字之间有"上下标分割",这之间要进行下标文字位置的调整;在下标文字和后续文字之间有"上下标结束",这之间要进行后续文字位置和高度的调整。如果这3个分隔文字能完成这些指定功能,那么TEXT命令就能直接写出带上下标的文字。
在带上下标、上标和下标的文字中,并要用到7个分隔文字。如果单个字符表示只能将其插Z入西文字库,而西文字库中的字符有些输入不方便、有些常用不可替代、有些与汉字冲突,可供使用的字符不多,用单个字符表示不方便。如果两个字符表示可将其插入汉字字库,考虑到输入的方便性和直观性,这7个分隔文字用下划线加括号组成,分别为:"_{"(上下标开始)、"_|"(上下标分隔)和"_}"(上下标结束)、"
_("(上下标开始)和"_)"(上标结束)、"_["(下标开始)和"_"(下标结束)。
实质上,分隔文字可以看作是特殊的形。在带上下标文字中用到的3个形(分隔文字),定义如下。"上下标开始"为:(1)2(抬笔);(2)5(B点位置进栈);(3)0A4(从B点位移到C点);(4)0 10 (再位移到D点)(5)3及2(向量数据缩小2倍);(6)0(定义结束)。"上下标分隔"为:(1)2(抬笔);(2)6(B点位置出栈);(3)04C(从B点位移到F点);(4)020(再位移到G点);(5)0(定义结束) 。此时,由于向量数据已被缩小2倍;实际长度仅有原来的1/2,故F点到G点的位移020与C点到D点的位移010相同,这样才能保证上标和下标的起点在一条垂线上。"上下标结束"为:
(1)2(抬笔);
(2)3及2(向量数据放大2倍);
(3)5(B点位置进栈);
(4)010(从H
点位移到I点);
(5)024( 再位移到J点);
(6)0(定义结束)。在写带上标和带下标文字中用到的另外4个形,请参见表2。
上述用作分隔文字的7个形有了明确的定义。因此只要将这7个形插入到多字形文件(汉字字库)中,就能用TEXT命令直接写出带上下标的文字。形文件有严格、固定、不可阅读的格式,形并不能直接插入,因此只有将这7个形插入到形文件的源文件(SHP文件)中,并对源文件的第一行作相应修改,重新编译后才可使用。表2给出的数据是相对于12(基线上方向量长度)而言的,如果在你的多字形文件中此值不是12,如果你对上下标的位置和高度不满意,可对数据适当修改。使用时,要写同时带上标和下标的文字,只要输入一行文字:BASE_{SUPPER_|SU _}DATA;要写带上标的文字,输入:BASE_(SUPPER_)DATA;要写带下标的文字,输入:BASE_ [SUB_]DATA。
使用中需注意的问题是:
(1)在行未的分隔文字可省略;
(2)在带上下标的文字中,如下标文字个数比上标文字少要用空格补足;
(3)由于分隔文字被放在多字形文件中,所以只有使用这个多字形文件,即将这个多字形文件设置成当前字体,才能写出带上下标的文字。在AutoC AD中,多字体文件与普通形文件要配套使用,并按此顺序取数据,由于下划线字符"_"已被用在分隔文字中,被多字形文件占用,在普通形文件中这个字符就无法被使用,为确保完整性,必须在多字形文件中对这个字符重新定义(见表2),重新定义后用"----"表示"--"。
使用这种方法扩充TEXT命令,有很多好处:
(1)不必修改AutoCAD程序;
(2)对AutoCAD的所有命令(包括TEXT命令)都没有任何影响;
(3)适用于各种操作系统下的所有AutoCAD版本;
(4) 使用方便,用一个TEXT命令一次就能直接写出带上标、下标或上下标的文字;
(5)写入图中的基本文字及上下标是一个实体,所以修改方便;
(6)所有文字(西文字符、汉字)都可作为基本文字、上标文字、下标文字或上下标文字;
(7)在一行文字中前导文字、后续文字、上标文字、下标文字或上下标文字均可省略或多次使用;
(8)TEXT命令中所有输入方法都可使用;
(9)文字的所有属性对上下标文字仍然适用;
(10)适用所有能产生、改变文字的AutoCAD命令,如尺寸标注命令DIM;
(11)上下标都可以嵌套使用(例子见表3),即上下标文字都可以再带上下标;
(12)节省存储空间;
(13)由于上下标位置和高度非人为控制,所以能确保图中所有文字的上下标完全一致。
最后,要说明的是此方法还可进一步推广,比如在一行文字中实现变字高(不同高度文字)输入等。