字符宽度(Character Width)指从字符的最左黑网点到最右黑网点的值,一般只用于位映象字库,它指定了按网点计算的物理页面坐标系中字符的宽度。
字符宽度(Character Width)指从字符的最左黑网点到最右黑网点的值,一般只用于位映象字库,它指定了按网点计算的物理页面坐标系中字符的宽度。
字符宽度的有效范围是从 1 到 16384 个网点。
简介
字符宽度
一个字符的宽度被称做它的“设置宽度”,是用像素表示的。单个字符的宽度是随着字体的不同而不同的,有些字体中每个字符的宽度互不相同,例如:Times 字体和 Windows 中大多数的字体。也可能每个字符的宽度都是相同的,例如:Courier 字体。在它自己的度量单位制中,一种字体的设置宽度等于它的像素尺寸,但是单个字符有各自的宽度。在一个 Truetype 字体中,字符的宽度在建立字体时被包含在一宽度表中。
字间距
字符也有一个固定的间隔,叫做字间距,用来加到字符宽度上以及提供字符间的宽度。一个字符所占的位置,实际上也许会超过包含自己的字符单元,许多斜体的字符在被设置的时候,就伸展到下一个字符单元中去了。调整字间距能够提供更合适的字符间距离,它经常针对某些字符进行调整,以得到更好看的字体。例如:一个大写字母 T 和一个小写字母例如:a 或 o,通过字间距调整可以被安排得更近,把小写字母安放在 T 的翅膀之下。
如果使用现代排版设备,可以调整字体的设置宽度是,尤其是使用 TrueType 字体时。例如:可以为一个 12 像素的字体指定 10 像素的设置距离,这样字符将会被轻微的压缩。直到计算机化的排版出现后,这种情况才可能发生。当一个字符被打印到矩阵上时,字符的宽度和字间距才被决定,而且每一个从矩阵上输出的字符是大小相等的。
LOGFONT 结构的 lfWidth 成员用来指定一个逻辑单元中的字体的平均字符宽度。在大多数的实践应用中平均字符距离是一条无用的信息,当创建一个字体的时候应该把这个成员设置成 0。
等宽字体
等宽字体是指字符宽度相同的电脑字体。与此相对,字符宽度不尽相同的电脑字体称为比例字体。
在传统西文印刷中,比例字体可以提高单词的可读性。但因早期的电脑显示器、打字机,由于技术的局限,无法进行字母宽度的比例调整,因此将每个字元都制作成一样的宽度,从而形成了等宽字体。在等宽字体中,字母 i,j 显得两侧馀白较多,而字母 w,m 等的笔画显得相当拥挤。
但是随着图形用户界面主流的更新和电脑技术的提高,处理比例字体的局限性得到了突破,因此现在排版上显得比较自然的比例字体的使用已经相当普及。
东亚语言中,方块字基本上都作为等宽字体处理,如各个地区的汉字、日语假名的全形字符、韩语谚文音节等字符都是等宽的。 但是一些中文、日文字体中,由于同时涵盖西文的半形文字字符,因此也含有比例字体,造成一个字体中两种类型混杂的局面。
Windows 简体中文操作系统中,老版本的默认字体中易宋体全部是等宽字体(因此用中易宋体进行西文排版看起来很不自然),而 Windows Vista 的默认字体微软雅黑中,半角的西文部分是比例字体,全角字符是等宽字体。
由于等宽字体的特点,当今的平面设计上也有特意使用等宽字体所具有的文化特征进行创作的风格,其中最具有代表性的就是 ASCII 艺术。ASCII 艺术所使用的字符都是等宽字体,如果改用比例字体,图片往往变形而无法表达创作者本意。在网页设计中,<tt> </tt>或<pre> </pre>HTML 标记通常都是使用等宽字体。在 LaTeX 中也是使用等宽字体。
另外,代码也经常使用等宽字体。
设置字符宽度
不同软件的设置字符宽度方法有很大不同,在此举例进行说明。
Turboc
Turboc 提供了一个函数 Setusercharsize(),该函数设置图形字符的放大系数:滞用该函数以后。每个显示在屏幕上的字符都以其缺省值大小乘以 mulx/divx 为字符宽,乘以 muly/divy 为字符高,例如若想使字符宽度 2 倍于缺省值,高度比缺省值高 50%,可设置 muItx=2,divx=l;multy=3,divy=2。只有当先前调用 Bettextstyle 函数设置 char size=0。该函数设置的值才有效。
例:
#include<graphics.h>
main()
{
int driver.mode;
driver=EGA;/*设置 EGA 图形适配器*/
mode=EGAHI;/ *设置 EGA 图形模式*/
initgraph(&driver,&mode,"");/*图形系统初始化*/
seitextstyle(TRIPLEX_FONT,HORIZ_DIR,4);
SEIUSERCHARSIZE(1,3,1,1);/*确定字符宽度和高度*/
outtextxy(150,100,"ABCDEF");/*输出字符串*/
getch();
closegraph();/*关闭图形系统*/
}
Word
首先在对多个不满行的文字进行两端对齐时,我们可以使用 Word 的“调整文字宽度”功能。文字会根据设定扩大间距或自动紧缩,以达到所需要求。使用步骤如下:
1.选中要调整宽度的文字。
2.执行“格式”→“调整文字宽度”,打开“调整宽度”对话框。
3.在“新文字宽度”框中设置所需的宽度值。
注意:首次对表格中的文字操作时,只能选中单元格中文字(可按住 Ctrl 键选择不连续文本),不能选中整个单元格,否则会出现“所选区域包含对‘适应文字’范围无效的字符或对象”的提示。但一经设置,需再次调整时,就可以直接选中单元格进行操作了。
4.单击“确定”按钮。
注意:
1.需要删除所设置的宽度时,可在设置的文本上单击(其下方将出现一青绿色下划线),然后打开“调整宽度”对话框,再单击“删除”按钮。
2.仅选中单元格内文字,单击“格式”工具栏的“分散对齐”按钮,可以打开“调整宽度”对话框;选中或单击进行过调整宽度的文字,再单击“分散对齐”按钮(对于本例中的“名单”二字,则需单击两次,第一次为取消居中对齐),同样能打开“调整宽度”对话框,另外,“调整宽度”命令也会出现在快捷菜单中。
计算字符宽度
不同软件的计算字符宽度方法不尽相同,在以 Python 为例进行说明。
urwid 是一个成熟的 python 终端 UI 库,它在 curses 的基础之上包装了类似 HTML 的控件用以显示文本内容,比直接使用 curses 库方便很多,它对 unicode 的文本宽度截取非常准确,文本宽度计算方面其核心代码如下:
widths = [
(126, 1), (159, 0), (687, 1), (710, 0), (711, 1),
(727, 0), (733, 1), (879, 0), (1154, 1), (1161, 0),
(4347, 1), (4447, 2), (7467, 1), (7521, 0), (8369, 1),
(8426, 0), (9000, 1), (9002, 2), (11021, 1), (12350, 2),
(12351, 1), (12438, 2), (12442, 0), (19893, 2), (19967, 1),
(55203, 2), (63743, 1), (64106, 2), (65039, 1), (65059, 0),
(65131, 2), (65279, 1), (65376, 2), (65500, 1), (65510, 2),
(120831, 1), (262141, 2), (1114109, 1),
]
def get_width( o ):
"""Return the screen column width for unicode ordinal o."""
global widths
if o == 0xe or o == 0xf:
return 0
for num, wid in widths:
if o <= num:
return wid
return 1
如代码所示,首先根据 unicode 的官方 EastAsianWidth 文档整理出字符宽度的范围表,然后使用 unicode 代码查表即可。