歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux綜合 >> Linux資訊 >> 更多Linux

X Window 系統使用指南 -- 第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 (藍))
三元素來指定,設定之形式為:

#<r><g><b>

必須合乎以下的原則:

.設定必需以井字號(#) 開頭。

.元素需依照紅、綠、藍的次序依序設定。

.三元素均必須指定。

.每一個元素為十六進位,共占一到四個位數,因此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的位元映像公用程式
來建立、編輯和使用影像。



統建立時,它並不會被裝設)。所以,要在你的資料庫中加入一個新的色彩,
先用文字編輯器將色彩輸入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的位元映像公用程式
來建立、編輯和使用影像。



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



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



Copyright © Linux教程網 All Rights Reserved