当前位置:Linux教程 - Linux - X-windows 系统使用指南(13)

X-windows 系统使用指南(13)



         第13章 使用X的字型和色彩

    13.1 字型初步
    13.2 字型如何命名
    13.3 观察特定字型的内容 -- xfd
    13.4 如何储存字型及存在何处
    13.5 □例:增加新字型至你的server
    13.6 使用X的色彩
    13.7 结论

    第13章 使用X的字型和色彩

    X支援多种的字型及几乎无限多种变化的色彩,大多数的应用程式允许你指
    定应用视窗中各个不同部份的颜色,而几乎所有的X程式均允许你指定你想要使
    用的字型。

    在X中的字型(fonts):

    .有固定的宽度(像哑终端机的字元)或成比例的间隙。

    .由本文字元(text characters) 或符号组成,或以上两者均有。

    .具有多种的点尺寸(point size)。

    .可以修改以适应特定的萤幕解析度(例如对於同一点尺寸的某一种字型,
    你可能对75 dpi (dots-per-inch 每寸若干点) 的萤幕有一种版本,对
    100 dpi 的萤幕有另一种版本)。

    .有一种标准命名的传统。

    .可以以全名存取,也可以用通用字元(wildcard)。

    .储存在特定建构的目录树中,只要server在执行时,字型便可以加入或
    移出。

    在系统间进行字型的交换有一套标准的格式,并且有工具程式可以将这个
    格式转换成你的server能了解的格式,工具程式也包含了列出可用字型的目录
    、观察某一特定字型内容等功能。

    本章先对字型作一简短的介绍,让你能尽快的使用它们,然後才转而详细
    地解释字型的结构、格式、工具程式等,最後一节讨论色彩:如何设定和使用
    它们。


    13.1 字型初步

    本节的目的是让你尽快地能使用字型,我们将告诉你如何找出有哪些字型
    可用、指定你欲使用的字型名称、看字型的外观、如何在X应用程式中使用字型。


    13.1.1 列出可用的字型

    xlsfonts程式一行行的列出server上可用的字型,图13-1显示部份的
    xlsfonts的输出,内容为MIT 版标准的字型。

    ┌——————————————————┐
    │ p146 fig 13.1 │
    │ │
    │ 图13-1 典型的字型目录列表 │
    └——————————————————┘


    13.1.2 字型命名

    有些字型的名称太长以致使用不便,但很幸运的,它们也不常被使用,并
    且,X支援字型名称可使用通字元(wildcard):

    ? 对应任何一个字元
    * 对应从(字元)长度为零至长度若干的字串

    这和Unix shell传统的通用字元档案名称相同,使用通用字元可使你更容
    易指定字型名称。

    注意:如果你在shell 的命令列指定一个通用字元的字型名称,需要在名称前
    後加上双引号 。


    13.1.3 观察一个特定的字型

    xfd (X font displayer 的缩写) 程式由引数(argument)得到字型的名
    称之後,建立一个视窗并且在视窗中显示此名称之字元字型,例如:

    xfd -fn \"*symbol*-180-*\"

    将显示如图13-2的视窗。

    ┌——————————————————┐
    │ p147 fig 13.2 │
    │ │
    │ 图13-2 字型的展示 │
    └——————————————————┘


    13.1.4 以X程式使用字型

    大多数的X程式使用文字,并且允许你指定使用的字型,如何使用的详细
    细节可能因不同的程式而异,如果有问题的话可以看指南页。但是几乎都是以
    命令列中选项 -fn fontname 或 -font fontname 来指定字型名称,bitmap、
    xclock、xterm、xload、xmb 和 xedit都是这样操作的。例如假设你是为了展
    示的缘故,以很大的字型执行xterm ,你可以用下列命令列:

    xterm -fn \"*courier-bold-r-*-240-*\"

    注意:如果你给程式的指定对应到一种以上的字型,则server会随便在其中选
    取一个,例如:如果你省略了上例中的 -r 的指定,则你会使用到意大
    利斜体(italic)字型或反斜体(reverse oblique) 字型,和原来所指定
    的罗马(roman) 字型的机会是一样的。

    现在你应该有一些概念了,我们将从不同的观点详细地讨论。


    13.2 字型如何命名

    在X中,字型可以取成任何名称,但几乎所有的字型均依照它们的本质来
    命名,这样的命名方式,名字是由几个不相关的部份组合而成,而我们在使用
    应用程式时,光凭著字型名称便可以大略了解字型的内涵。

    我们以一个字型名称为□例,逐一解释它的组件,组件之间是由短横线(-)
    所分开的,而且可以包含空白,字型名称对字元大小写并不会区别,□例如下:

    -adobe-times-bold-normal--12-120-75-75-p-67-iso8859-1

    adobe :字型的制造厂商。

    times :型态家族(type family) ,其它尚包含courier ,helvetica 和
    new century schoolbook。

    bold :粗体字,其它包含light (细)和medium(中等)。

    r :字体倾斜的型态,r 是roman (罗马体),其它是 i(italic意
    大利体),o (oblique 倾斜体)。

    12 :字元的高度,单位为像素。

    120 :字型的点尺寸(point-size),为点的10倍(120 意为12点,一点
    约为1/72英□宽)。

    75-75 :字型被设计在显示装置上的水平和垂直的解析度(每□若干点)。

    p :字和字之间的间隙,p 是proportional(成比例的),相对的是
    m (monospaced固定宽度)。

    如果你对某一栏有特别的兴趣,在本版的说明文件档

    $TOP/doc/fontnames/fname.txt

    中,有对每一个组件完整的说明。

    你通常比较有兴趣的项目为家族型态、字体粗细、何种斜体字以及字型大
    小,除了指定这几项的值外,其它的项目不妨藉著通用字元的方式去指定。


    13.2.1 通用字元和字型名称

    在第13.1节中,我们曾经解释过通用字元的规则:星号(*)表示对应到
    零或多个字元,问号(?)对应到一个任意的单一字元。

    你可以随意的使用通用字元,当你的设定对应到一种以上的可用字型时,
    server会随便挑一种字型来用,如果你的设定什麽字型也没对应到,通常你会
    获得一行讯息,而server将会使用预设字型。

    你可以对字型的点尺寸使用通用字元,而不是像素尺寸,因为在显示器上
    一个给定点尺寸的字型对不同的解析度有不同的像素尺寸,所以用通用字元指
    定点尺寸可以造成与装备无关的效果,上述的□例你可以如此设定:

    *-times-bold-r-*-120-*

    也就是说以-120-取代-12-


    13.2.2 列出可用的字型 -- xlsfonts

    xlsfonts列出在你server上可用的字型(如果你使用用命令列中-display
    选项,便可列出其它server上可用的字型)。预设是列出所有的字型,但是就
    如同Unix的ls命令一样,如果你加上限制,便只会列出合乎限制的项目,例如:

    xlsfonts \"*-times-*-180-*\"

    列出所有18点Times的字型。

    原则上,xlsfonts试图在每行列印出尽量多的字型名称,但实际上,大部
    份的字型名称都很长以致一次只能印一个名称,但是要小心,当字型名称含有
    空白时,一行有数个字型名称常常容易混淆。

    注意:许多的字型名称开头为一短横线(-) ,所以xlsfonts会误把此种状况当
    成命令列的选项来解释以致发生错误,例如:

    xlsfonts \"-adobe-*\"

    会失败,你可以用选项-fn 加以区分,或者只要在设定之前加一个星号(*)
    即可:

    xlsfonts \"*-adobe-*\"
    xlsfonts -fn \"-adobe-*\"



    13.3 观察特定字型的内容 -- xfd

    xfd 是一个”字型显示”的程式,它建立一个视窗,而後在视窗中将字型
    的元素显示在长方格子中。视窗可能没有大到一次将字型中所有的字元显示出
    来(尤其是你可能对它重定过大小),但你仍然可以存取它们:

    向前移动:在xfd 视窗中碰触滑鼠右按钮,视窗的下一页将会出现。

    向後移动:碰触滑鼠左按钮。

    获取字元的资讯:在字元上碰触滑鼠中按钮,xfd 会给你字元号码,如果
    你在程式一开始设定命令列选项-verbose,你将获得一些更多的资讯,例
    如字元的大小以及它在字元”cell”中的位置。



    13.4 如何储存字型及存在何处

    在本节中,我们描述字型不同的格式,以及转换两种不同格式的工具,然
    後讨论server是如何存取字型和你如何更改对字型的选择。最後,我们会给一
    个完整的□例来说明如何加入一种新的字型到你的系统。


    13.4.1 字型的格式 -- Server Natural Format (SNF)

    字型在server上是以Server Natural Format (SNF) 方式储存,这种格式
    并不是一种标准,而且为server所专用,所以你不能将字型移到不同型态的
    server。

    showsnf 程式印出储存在SNF 档中字型的资讯,对字型本身执行xprop 可
    获得更多类似的资讯。(showsnf的引数为档案名称,xprop 则为字型的名称,
    字型名称和档案名称并不相关。)

    Bitmap Distribution Format(位元映像分布格式)-- BDF

    为了克服字型流传的问题,X协会对字型交换指定了一种格式,就是Bitmap
    Distribution Format (BDF) ,BDF 以ASCII 的方式表示字元的位元映像,并
    且只包含可印出的字元,所以它具有完整的可携性(portable)。

    在”Bitmap Distribution Format”文件中包含了对BDF 完整的描述。

    从BDF 转换成SNF - bdftosnf

    为了让BDF 能够有用,你必需能将BDF 字型档转换成SNF 档,目前X协会
    放弃让这个需求成为X的成品。

    在MIT 版,你可以用bdftosnf来完成转换。

    由其它的格式转换

    许多的绘图机器拥有它们制造商自己发展的字型,通常特别适合它们的显
    示器。如果这些字型能在X使用那是再好也不过了,但是因为格式的问题,你
    不能使用它们。

    MIT core版并不管这个问题,但是core版则有许多的工具程式将制造商特
    制的字型转换成BDF 格式,从BDF 你又可以用bdftosnf转换成你自己的SNF ,
    本章稍後我们会有一个这样的□例。


    13.4.2 字型储存在何处 -- 字型目录

    字型被储存在server上某一个或多个字型目录(font directory)中,字型
    目录由三个部份组成:

    1. 一个普通的目录,为包含著字型的SNF 档案之所在。

    2. 一个被X使用,将SNF 档案名称对应到字型名称的资料库。

    3. 一个可选择性的别名档(aliase file) ,可以让你用一个以上的名称
    参考到同一字型(不论你使用了多少个目录,你只需要一个别名档)。

    维护字型目录 -- mkfontdir

    mkfontdir 设定新的字型目录并且可以修改它:

    1. 在档案目录中搜集了所有你要使用字型的档案,档案可以是BDF 档(通
    常档名结尾为.bdf),SNF 档案(.snf)或被压缩的SNF 档(.snf.Z),mkfontdir
    会自动将非SNF 档案转换为SNF 档案。(被压缩的档案是被BSD 压缩程式执行
    过用以节省档案空间。)

    2. 如果你要使用别名,需要在字型目录中建立(或编辑)一个名为
    fonts.aliase的档案。有关此档案格式的细节部份在指南页中有说明,简单地
    说,它的格式为每行以空白间隔出两个栏位,第一栏是别名的名称,第二栏则
    是字型的名称(可包含通用字元),例如:

    tbi12 *-times-bold-i*-120*

    注意:你对字型定义的第一个别名将造成该字型真正的名称无法使用,以上例
    而言,你只能以tbi12 来存取字型,这种情形也许下一版会改进,但目
    前你可以在第二行将第一行反过来即可(但不可使用通用字元)。

    tbi12 *-times-bold-i*-120*
    -adobe-times-bold-i-normal--12-120-75-755-p-68-iso8859-1 tbi12

    3. 执行mkfontdir ,需把档案名称当成引数输入,以你使用预设的X建构
    为例 :

    mkfontdir /usr/lib/x11/fonts/misc\\
    /usr/lib/x11/fonts/75dpi\\
    /usr/lib/x11/fonts/100dpi

    (如果档案目录中没有包含字型资料库,mkfontdir 会忽略它。)

    注意:建立一个字型目录并不会导致server”注意”它,你必需重新启动server
    或重设字型搜寻路径(search path) (下面描述):

    字型搜寻路径 -- xset

    你可以使用任何数目的字型目录,但如果它们有任何和预设建构不同的地
    方,你需明确的告诉server,这些字型目录的列表称之为字型搜寻路径(font
    search path)或字型路径(font path) ,你可以设定这个一连串以逗点为区隔
    的档案目录。

    查看你目前的字型路径:使用命令xset q,如此会印出一大堆资讯,其中有
    一行包含著你的字型路径类似下面:

    Font Path : /usr/lib/x11/fonts/misc/,(cond.)
    /usr/lib/x11/fonts/75dpi/,/usr/lib/x11/fonts/100dpi/

    设定不同的字型路径:使用命令xset fp new-path,例如,如果你有大量
    的本地字型且不欲使用多数的标准字型:

    xset fp /usr/local/xfonts, /usr/lib/x11/fonts/75dpi

    注意:fp之前并无一短横线(-) ,是fp而非 -fp(-fp 的意义不同,见下述)。

    当你想重新设定server对字型路径的预设值时,使用命令:

    xset fp default

    告诉server重新读入字型的目录,使用命令:

    xset fp rehash

    它告诉server你可能已经改变了字型目录的内容而和它必须重读字型资料
    库,现在新加入的字型可以开始存取了。

    在现存的路径加入新的字型目录,使用命令:

    xset +fp dirlist

    加入一列由逗号分隔的目录列(dirlist) 在现存路径之左,而

    xset fp+ dirlist

    则将目录列加到路径之右。

    将字型目录自路径移去:下两个命令列

    xset -fp dirlist
    xset fp- dirlist

    均可将在dirlist 中的目录自现有路径移去。

    注意:字型路径由server所掌握,而被所有使用该server的client所应用。

    字型路径的次序是重要的,我们曾经提过字型设定可以对应至一或多个字型,
    server会自行选择,但如果对应的字型是在不同的目录中,则server会选择在
    路径中较早出现者。

    你可以利用这个原则来安排最适合你的显示器解析度的字型。假设你的显
    示器解析度为100dpi,则将100dpi字型设在75dpi 之前,例如:

    xset fp /usr/lib/x11/fonts/100dpi/,\\
    /usr/lib/x11/fonts/75dpi/

    如果你指定字型为:

    * -times-bold-r-*-120-*

    虽然字型有75dpi 和100dpi两种版本,但你会用到100dpi的字型,这正是你所
    需要的。


    13.5 □例:增加新字型至你的server

    现在我们将说明如何增加一个新的字型到你的server的完整□例,为了
    真实起见,我们以Sun所提供的字型为例,将它转换至BDF ,然後装设(install)
    它,字型开始时在:

    /usr/lib/fonts/fixedwidthfonts/screen.r.7

    欲将Sun 的字型转换成BDF ,我们需使用contrib 版的软体程式vtobdf(
    其它系统也有类似的工具)。vtobdf有两个引数,分别是输入档档名和欲建立
    之BDF 档档名,我们可以事先自contrib 磁带取得此程式,编译它,而後加入
    我们可执行的目录中,我们就可以使用它了,我们将或多或少依据X的标准来
    命名这个新的字型,我们喜欢把输出档的档尾名用.bdf,但由於vtobdf会在字
    型名称後自动产生.bdf,所以可以省略它,但在稍後之重定名称则不可省略。

    venus% cd/tmp
    venus% vtobdf /usr/lib/fonts/fixedwidthfonts/screen.r.7\\
    -sun-screen--r-normal---70-75-75-m---

    现在重新命名档案,并将其搬入字型目录:

    venus% mv- -sun-screen--r-normal---70-75-75-m---\\
    /usr/lib/x11/fonts/misc/-sun-screen--r-normal---70-75-75-m---.bdf

    最後,执行mkfontdir 和告诉server重新读入字型目录以便能使用此字型:

    venus% mkfontdir
    venus% xset fp rehash

    检查一下此字型是否真的可用:

    venus% xlsfonts \"*-sun_screen*\"\\
    -sun-screen--r-normal---70-75-75-m---

    注意:你的字型可能可以取代其它的预设字型,但这些字型档案可能因有保护
    而无法更改,必须问一下你的系统管理者。


    13.6 使用X的色彩

    我们已经用过一些色彩,但并未细述它们,原因是X允许你用日常常用的
    彩色名,在本节我们描述一些其它指定颜色的方法,解释命令结构如何工作和
    你如何设定一些你自己拥有的色彩名称。


    13.6.1 RGB 色彩设定

    换一种指定色彩的方式,你可以用RGB (Red (红)、Green (绿)、Blue (蓝))
    三元素来指定,设定之形式为:

    #

    必须合乎以下的原则:

    .设定必需以井字号(#) 开头。

    .元素需依照红、绿、蓝的次序依序设定。

    .三元素均必须指定。

    .每一个元素为十六进位,共占一到四个位数,因此ffff代表色彩的最大
    强度,0000代表没有该色彩,例如:

    #0000ffff0000

    是最亮的绿色,红色和蓝色一点都没有,同样的:

    #000000000000 黑色(什麽色彩都没有)
    #ffff0000ffff 紫色(全部的红色加蓝色)
    #ffffffffffff 白色(全部的色彩)

    注意#rgb和#rrrgggbbb代表的色彩强度是相同的,但後者较亮一些。

    .每一个元素可由一到四个位数代表,但每个元素的位数则相同(例如你
    不可以用#rrbbbbgg )。

    你可以在设定色彩时直接使用色彩名称,例如:

    xclock -fg #3d7585 -background pink

    色彩设定的形式往往和你的显示器非常相关,通常没有什麽可携性。


    13.6.2 X色彩资料库

    为了克服#rgb色彩设定不可携的缺点,而且使系统更易於使用,X使用一
    个储存色彩名称及其相关之rgb 值的资料库。

    除非你的系统在装设之後作了明显地改变,应该会有一个/usr/lib/x11/rgb.txt
    的文字档说明资料库的内容。这个档的前数行类似於:

    112 219 147 aquamarine (绿玉色、碧绿色)
    50 204 153 medium aquamarine (中度碧绿色)
    50 204 153 Medium Aquamarine (中度碧绿色)
    0 0 0 black (黑色)
    0 0 255 blue (蓝色)
    95 159 159 cadet blue (学生蓝)

    每一行前三个数字表示rgb 的元素值,但在此数值是10进位的,且只从0
    到255 ,255 代表色彩最大强度,第四个部份为色彩名称,允许名称中间有空
    格。

    你可以用程式$TOP/rgb/rgb将此文字档转换为内部的形式,(当你的X系
    统建立时,它并不会被装设)。所以,要在你的资料库中加入一个新的色彩,
    先用文字编辑器将色彩输入rgb.txt 档,然後:

    venus% cd usr/lib/x11
    venus% $TOP/rgb/rgb < rgb.txt

    事实上,rgb 并不需要每次均重建内部资料库,只需加入新增(或修改)的项
    目即可,所以你可以用标准输入来输入色彩:

    venus% $TOP/rgb/rgb
    255 50 50 mypink


    因为没有任何标准的工具程式可以查询内部资料库的内容,因此上面的作法会
    造成rgb.txt 和内部的资料库不一致,所以还是以修改rgb.txt 的方式为佳。


    13.7 结论

    本章你已经看到如何命名和储存字型,你如何找到可用的字型及字型的内
    容,在X应用程式中如何使用字型,和如何在你的系统中加入新的字型。

    最後一节则描述了X的色彩命名原则,色彩资料库和如何加入你自己的色
    彩。

    这里所描述的公用程式只包含core版,contrib 版包含更多的软体,例如
    有一个叫做xcolors 的程式,它可以建立一个视窗,并在其中显示在你系统上
    已命名的色彩。

    多种的字型和色彩在你的萤幕上出现是一种冲击,接下来你会看到更多的视窗系统的功能,并□试调整使其适合你工作的习惯及品味。

    下一章我们将继续定制这个系统,告诉你如何利用X的位元映像公用程式来建立、编辑和使用影像。
    发布人:netbull 来自:嵌入式Linux