第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的位元映像公用程式
來建立、編輯和使用影像。