LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
12
返回列表 发新帖
楼主: boiyoo

Chapter 1. 前言

[复制链接]
 楼主| 发表于 2003-7-2 07:47:39 | 显示全部楼层

中文 locale 的設定

當一個程式啟動時,系統會預設給它一個初始 locale,稱為 POSIX 或 C locale。在此 locale 下,程式的表現會與傳統的 C 語言中一樣, 使用英文做?息輸出,只能處理英文等 ASCII 碼等等。 如果該程式有支援 I18N,也就是說它有按照 I18N 的標準?韺懀 則它在啟動後就會馬上呼叫系統函式?砀淖兯 locale, 如此它就搖身一變,變成可以處理該 locale 所代表的地區語文了。

zh_TW.Big5 的 locale 設定檔在 /usr/src/share/mklocale/zh_TW.Big5.src, 而?作中,則是儲存在 /usr/share/locale/ 目錄下, 以我們的 zh_TW.Big5 locale 為例,該目錄中就包含了 LC_COLLATE、LC_CTYPE、 LC_TIME。

而 LC_MESSAGES 則是儲存在 /usr/local/share/locale/zh_TW/LC_MESSAGES/ 或是 /usr/X11R6/share/locale/zh_TW.Big5/ 底下。由於 LC_MESSAGES ?別掌管的是程式?息輸出所用的語言, 而且不同程式間的?息都不會一樣,因此它不能像其他?別一樣, 只提供單一一個資料檔即可。相反的, 在這裏所採取的方式是由各應用程式自行提供它們的?息資料檔, ?K統一放在各 locale 的 LC_MESSAGES 的目錄下。例如 mutt 程式, 其?息的部分除了英文以外,可能還同時提供了繁體中文、簡體中文、 日文、法文 等翻譯,因此,在以上這些語文所代表的 locale 中, 其底下的 LC_MESSAGES 目錄中都會有一份屬於 mutt 程式的?息資料檔。 換句話說,在 I18N 架構下,程式?息部分是與程式分離的, 如此才能分別對各 locale 做 ``區域化'' (即翻譯成各地區的語言)。 如此,當 mutt 在執行時,系統會根據目前它的 LC_MESSAGES locale 設定去找找看有沒有它的?息資料檔存在,有的話就以該語言做?息輸出, 否則的話則以 C locale 的方式 (即英文) ?磔敵鲇?息。

以上所有的 locale ?別中,除了 LC_MESSAGES 之外,最重要的就是 LC_CTYPE 了。此?別掌管的是該 locale 中所有字元的處理方式。 一個應用程式若要能被 ``區域化'' 成某地區的語文, 首要工作就是要能處理該地區的文字。例如每個字的內碼如何編碼? 是單一 byte 還是由多個 bytes 組成的?怎樣的編碼才是合法可用的? 這個字是不是可以印?是不是數字?若給定任意的文字字串, 要如何能區分出一個個字 等等。因此,此?別牽涉的層面相當?V, 除了程式本身的文字處理能力以外,甚至到 X Window 中的文字顯示 (即 XOM: X Output Method)、文字輸入 (即 XIM: X Input Method) 等等, 都與它有關。因此,當我們要開始使用一個支援 I18N 的程式之前, 一定要先設好 LC_CTYPE 這個 locale ?別。
4.3.1. 設定 Shell locale 環境變數

我們必須指定 zh_TW.Big5 這個 locale 環境變數給 Shell,Shell 才能正確的處理中文?息,一般而言我們只要指定 locale 的字元定義 LC_CTYPE 為 zh_TW.Big5 即可讓 Shell 正確的處理中文,若要讓 Shell 的輸出?息也顯示中文,則可將 locale ?息顯示 LC_MESSAGES 也設定為中文的 locale data。

至於要設定 stty pass8 的原因是,台灣地區所通行的 Big5 編碼, 及大陸地區所使用的 GB 編碼,其開頭的位元幾乎都是大於 128 的數值, 也就是所謂 non-ASCII 碼的範圍(ASCII 是指小於 128 的編碼)。 中文問題就在這裡,許多程式由於各式各樣的原因, ?K未考慮到輸入的資料可能是 non-ASCII 碼的問題, 程式往往假設了她所要處理的資料都是 ASCII 碼 (因為大部分軟體為外國人發展的),更糟糕的是, 當程式遇到 non-ASCII 碼時,常常假設她不存在, 而將它的第八個位元截去,這是所謂的 8-bit 輸入中文時, 每每將第八位元砍掉,所以中文都變成?y碼。因此必須指定 stty pass8, 警告 Shell 不要將輸入的第八個位元截掉,這樣才能正確顯示中文。

ENABLE_STARTUP_LOCALE 則是 a.out 遺物,他會?娭 ld.so 載入程式前, 先呼叫 setlocale(),在 3.x 前就把這個 ugly hack 拿掉了。
4.3.2. 字元的分?與編碼

一個 locale 所包含的合法字元與其編碼方式,我們稱之為 character set (字集)。以我們的 zh_TW.Big5 locale 為例, 其?它內部包含了兩個 sub-character set,一個是 ASCII 用?肀硎疽痪幍挠⑽摹底帧㈦娔X慣用符號 等等,另一個就是以 Big5 編碼方式的,我們俗稱的 ``全形'' 字,包括了中文字、 全形英文、數字、以及符號 等。前者每個字元的長度是一個 byte,而後者每個字元的長度則是兩個 byte。

在 locale 的設定中,以 LC_CTYPE 最為重要, LC_CTYPE 包含了字元內碼資?, 直接影響部份 C 函式隊字元的處理結果,包括:

    *

      ctype.h: isalnum(), isalpha(), iscntrl(), isdigit(), isgraph(), islower(), isprint(), ispunct(), isspace(), isupper(), isxdigit(), tolower(), toupper().
    *

      wctype.h: iswalnum(), iswalpha(), iswcntrl(), iswdigit(), iswgraph(), iswlower(), iswprint(), iswpunct(), iswspace(), iswupper(), iswxdigit(), towlower(), towupper().
    *

      stdlib.h: mblen(), mbtowc(), mbstowcs(), wctomb(), wcstombs().

zh_TW.Big5 locale 的設定檔在 /usr/src/share/mklocale/zh_TW.Big5.src, 在 LC_CTYPE 的設定檔中,它將所有的字元分?成以下幾種:

UPPER: 拼音字的大寫字。
LOWER: 拼音字的小寫字。
ALPHA: 所有的拼音字母。
DIGIT: 阿拉伯數字。
SPACE: 空隔字元,如空白 (space)、換行、tab ...字元等。
XDIGIT: 代表十六進位數字的字元。
BLANK: 空白字元,通常只包括空白 (space) 與 tab 兩個。
CNTRL: 電腦的控制字元。
PUNCT: 標點符號。
GRAPH: 所有有筆畫的字元,不包括空白與空格。
PRINT: 所有可以印出的字元,包括空白 (blank) 字元。
TOUPPER: 小寫拼音字母轉大寫拼音字母的對應表。
TOLOWER: 大寫拼音字母轉小寫拼音字母的對應表。

Prev         Home         Next
使用字型         Up         時區的設定
 楼主| 发表于 2003-7-2 07:48:52 | 显示全部楼层

PostScript

PostScript為美國Adobe( http://www.adobe.com)公司於1985年所發表的文件描述技術, Adobe?K利用這個技術,創造著名合乎PostScript技術的字型, ?K?亩淖冋麄印刷工業,PostScript 可以精確的描述平面繪製任何文字及圖形,現今PostScript 的技術已經非常普遍的使用在印刷領域,包括螢幕顯示(Display), 雷射印表機(Laser Printer), 輸出機(Imagesetter), 數位印刷機(Digital Printing)..等等輸出設備。

而與PostScript技術搭配最重要的是PostScript字型, 使用者可以透過PostScript技術調整某些參數,而改變字型的大小, 陰影/立體/空心/粗細等特殊效果, 由於PostScript在印刷方面卓越表現, 目前世界上主要的文獻幾乎多是以PostScript的形式出現。

目前常見的中文列印方案都是產生 Postscript 後, 再進行列印。產生的檔案又可分為內嵌(bg5ps、enscript、cnprint) 與不內嵌字型(truetype、cid font), 目前的解決方案偏向於使用 CID-Keyed font。

CID-Keyed font,CID是Character ID的簡稱。

CID字形格式的設計主要是為了各種PostScript輸出設備, ATM(Adobe Type Manager)軟體, CPSI(Configurable PostScript Interpreter)解譯器及 DPS(Display PostScript)顯示型PostScript軟體等, 能使用於大字庫字體集,特別是台灣、大陸、日本、韓國 等雙位元語系的國家文字。

CJK(Chinese , Japan , Korean)字集上日、韓二國文字, 除了平假名、片假名及韓文字外,?鬃疃嘧煮w容量的還是?h字部份, 而且中、日、韓的?h字很多都是相同的?h字,如果一套CJK字集能包括 Big5、GB、JIS及KSC碼的所有的字形、 容量一定比四種碼位分開的字形少30%以上,而且可以不用擔心, 以後?囊陨纤膫地區?淼奈募,輸出時沒有對應的字形輸出。

在1990年Adobe發表可以支援雙位元架構的PostScript字形格式, 一般我們通稱為OCF(Original Composite Font)格式, 它使用比較複雜字形構造及字形儲存方式, 因為它為了要支援雙位元的字形,就必須要做成這樣複雜的架構, 像目前大家所使用的中文Type1、Type3、Type4等字形格式, 都是屬於OCF格式。

OCF字形要抓取列印一個雙位元字形時,必須要經過複雜的對應關係, 才能取得字形的外框資料去列印,所以Type1、Type3、Type4等OCF 字形的檔頭(header)描述都非常複雜, 而且每一家字形?S商都不太一樣。

CID字形的架構比OCF字形就簡單多了, 直接由CMap檔案去對應字形外框資料, 所以解譯器能快速的取得及解譯字形的外框資料及列印, 而且比較?省記憶體的使用。

Character Collection(字形集)及CMap File(對應檔)這二者Adobe 有定義標準格式,字形?S商可以使用Adobe的標準格式, 以繁體中文為例,Adobe定義一個Character Collection, 和很多個的CMap File,如Adobe-CNS1-0,B5-H,B5pc-H,ETen-B5-H 等不同的CMap file。 不同的CMap file使用於不同的內碼系統, 如果這些內碼系統的字碼有擴充時,只要增加新的CMap file及CID 字形即可,可以不影響到原?淼腃Map file及CID字形檔。

WWW: http://www.arphic.com.tw/faqs/faqs_cid.htm

WWW: http://partners.adobe.com/asn/developer/technotes/fonts.html
6.2.1. 使用 TrueType 字型當作是 CID font

gs-cjk 是一個讓 Aladdin/Artifex/GNU ghostscript(gs) 能夠使用 CJK 功能的發展計畫。在這個網站中,所提供的程式集, 包含讓 gs 能夠把 CJK ( 繁、簡中文,日文,韓文 ) 的 TrueType 字型當作 CID-Keyed 的字型?硖幚淼谋匾扪a檔案( patch), 以及改進在 gs CID-Keyed 字型的handler。

該計畫已經整合到 ghostscript7

CID-Keyed font 由 CID font 和 CMap 所組成, 使用前記得安裝 print/adobe-cmap 。

使用 ghostscript ?砹杏∥募:

# gs -sDEVICE=cdj550 -sOutputFile=/dev/lpt0 xx.ps
     

gs --help 會有更多的選項

以此套件搭配 arphicttf 就可以讓大部分的軟體可以透過 gs 讀取 ttf ?懋a生正確的 gs 檔。

以下是利用 ttfm ?韺 arphicttf 的字型加入 gs-cjk 的列表:

# ttfm.sh --add gs-cjk bkai00mp.ttf
# ttfm.sh --add gs-cjk bsmi00lp.ttf

這樣會分別產生常用的 CID-Keyed:ShanHeiSun-Light-Eten-B5-H 以及 ZenKai-Medium-Eten-B5-H 以供需要列印的軟體使用,例如 Mozilla、KDE等。

WWW: http://www.cs.wisc.edu/~ghost/index.html

gs-cjk WWW: http://www.gyve.org/gs-cjk/
6.2.2. moefonts-cid - 由 Adobe 轉譯的 MOE CID Font

CID-Keyed font 由 CID font 和 CMap 所組成, CMap 可以透過安裝 print/adobe-cmaps ?磉_成, 而 CID font 則必須另外安裝。 中文 CID font(MOEKai 和 MOESung) 是?慕逃慷?淼模 原本為 48x48 點陣字型,由 Adobe 製作成 CID font。

moefonts-cid 的安裝:

# cd /usr/ports/chinese/moefonts-cid
# make install

自行安裝的話,CID-Keyed font 可以? ftp://ftp.oreilly.com/pub/examples/nutshell/cjkv/adobe/samples/ 取得 MOEKai-Regular MOESung-Regular 這兩個 CIDFont,?K在 ftp://ftp.oreilly.com/pub/examples/nutshell/cjkv/adobe/ 取得 ac14.tar.Z,裡面包含了 Adobe-CNS1 的 CMap 檔案。

裝完後就有如下的 CID-Keyed font 可以使用:

MOEKai-Regular-ETen-B5-H
MOEKai-Regular-ETen-B5-V
MOESung-Regular-ETen-B5-H
MOESung-Regular-ETen-B5-V

以下是一個測試的範例:

% cat cid.ps
/MOEKai-Regular-ETen-B5-H findfont 60 scalefont setfont
50 600 moveto (眾裡尋他千百度) show                          
50 520 moveto (驀然回首) show      
50 440 moveto (那人卻在燈火欄珊處) show
showpage                              
quit
% gv -antialias cid.ps
% ps2ps cid.ps cid2.ps
% ps2pdf cid.ps
% ps2pdf cid2.ps
% xpdf cid.pdf (可能不行)
% xpdf cid2.pdf

Figure 6-2. cid-gv snapshot

目前已經可以由 ttfm 搭配 gs-cjk 的方式?砣〈倚Ч谩

以下是以 MOESung-Regular 為例子,?碓黾哟煮w、斜體、粗斜體支援, 在安裝時,由於必須額外安裝 adobe-cmaps ?泶钆洌 所以會 DEPENDS print/adobe-cmaps。

再?硎墙⒋煮w,斜體,粗斜體等,在看完 ttfm 的 gs-cjk 模組後, 有個想法就是 gs-cjk 的做法是在 ttf 上面建立粗體,斜體,粗斜體等, 這些做法是不是應該也適用於 moefonts-cid?

因此就建立了 MOESung-Regular-Bold

%!PS-Adobe-3.0 Resource-CIDFont
%%BeginResource: CIDFont (MOESung-Regular-Bold)
/MOESung-Regular-Bold
/MOESung-Regular /CIDFont findresource
16 dict begin
  /basecidfont exch def
  /basefont-H /.basefont-H /Identity-H [ basecidfont ] composefont def
  /basefont-V /.basefont-V /Identity-V [ basecidfont ] composefont def
  /CIDFontName dup basecidfont exch get def
  /CIDFontType 1 def
  /CIDSystemInfo dup basecidfont exch get def
  /FontInfo dup basecidfont exch get def
  /FontMatrix [ 1 0 0 1 0 0 ] def
  /FontBBox [
    basecidfont /FontBBox get cvx exec
    4 2 roll basecidfont /FontMatrix get transform
    4 2 roll basecidfont /FontMatrix get transform
  ] def
  /cid 2 string def
  /BuildGlyph {
    gsave
    exch begin
      dup 256 idiv cid exch 0 exch put
      256 mod cid exch 1 exch put
      rootfont /WMode known { rootfont /WMode get 1 eq } { false } ifelse
      { basefont-V } { basefont-H } ifelse setfont
      .03 setlinewidth 1 setlinejoin
      newpath
      0 0 moveto cid false charpath stroke
      0 0 moveto cid show
      currentpoint setcharwidth
    end
    grestore
  } bind def
  currentdict
end
/CIDFont defineresource pop
%%EndResource
%%EOF

以及 MOESung-Regular-Bold-ETen-B5-H.gsf

/MOESung-Regular-Bold-ETen-B5-H
/MOESung-Regular-Bold (MOESung-Regular-Bold)
/ETen-B5-H (CMap/ETen-B5-H)

1 index /CMap resourcestatus
{pop pop pop}
{runlibfile} ifelse
/CMap findresource

3 1 roll
1 index /CIDFont resourcestatus
{pop pop pop}
{runlibfile} ifelse
/CIDFont findresource

[ exch ] composefont pop

結果發現在測試檔 cid.ps

/MOESung-Regular-ETen-B5-H findfont 30 scalefont setfont
50 600 moveto (2000年5月29日) show
/MOESung-Regular-Bold-ETen-B5-H findfont 30 scalefont setfont
50 560 moveto (2000年5月29日) show
/MOESung-Regular-Italic-ETen-B5-H findfont 30 scalefont setfont
50 520 moveto (2000年5月29日) show
/MOESung-Regular-BoldItalic-ETen-B5-H findfont 30 scalefont setfont
50 480 moveto (2000年5月29日) show
/MOEKai-Regular-ETen-B5-H findfont 30 scalefont setfont
50 440 moveto (2000年5月29日) show
/MOEKai-Regular-Bold-ETen-B5-H findfont 30 scalefont setfont
50 400 moveto (2000年5月29日) show
/MOEKai-Regular-Italic-ETen-B5-H findfont 30 scalefont setfont
50 360 moveto (2000年5月29日) show
/MOEKai-Regular-BoldItalic-ETen-B5-H findfont 30 scalefont setfont
50 320 moveto (2000年5月29日) show
showpage
quit

粗體的部分出現了預期的效果,所以就繼續製作斜體與粗斜體, 這部分可以參考 gs-cjk,斜體的名稱定為 MOESung-Regular-Italic, 而粗斜體則是 MOESung-Regular-BoldItalic。

最後,記得把這些 .gsf 寫入 /usr/local/share/ghostscript/7.05/lib/Fontmap.GS 寫法是:字型 (字型.gsf) ;

/MOESung-Regular-ETen-B5-H (MOESung-Regular-ETen-B5-H.gsf) ;
/MOESung-Regular-Bold-ETen-B5-H (MOESung-Regular-Bold-ETen-B5-H.gsf) ;
/MOESung-Regular-BoldItalic-ETen-B5-H (MOESung-Regular-BoldItalic-ETen-B5-H.gsf) ;
/MOESung-Regular-Italic-ETen-B5-H (MOESung-Regular-Italic-ETen-B5-H.gsf) ;

最後修改一下 -H 成 -V 再重複上面的過程即可, 其他的字型也是幾乎一樣的做法就可以完工了, 不過,真的比不上用 ttf 做出?淼难

如此建立完,就會有一堆可用的 CID-Keyed 字型

MOESung-Regular-ETen-B5-H
MOESung-Regular-Bold-ETen-B5-H
MOESung-Regular-BoldItalic-ETen-B5-H
MOESung-Regular-Italic-ETen-B5-H

這樣子在配合文書軟體上,應該會更好,我想文書軟體慢慢的也會把列印的部分用 gs 所提供的字型?砟M,像是 editors/Abiword 就是個很棒的例子, 而 kde2 則是自己做粗體,斜體等的模擬,不過我還沒去測試到粗體和斜體的部分, 等有空閒了再去試試。

Figure 6-3. moefonts-cid snapshot

6.2.3. 以 gs 觀看不內嵌的 pdf 檔

gs/gv 有個 dirty hack,就是看到

name                                 type         emb sub uni object ID
------------------------------------ ------------ --- --- --- ---------
國字標準宋體                         CID TrueType no  no  no      22  0

這種?型的不內嵌字,就自己到 /usr/local/share/ghostscript/7.05/lib/CIDFnmap 中加上 alias,以我而言會加上文鼎上海宋的 alias:

/國字標準宋體           /ShanHeiSun-Light       ;

李果正 Edward G.J. Lee 也提出比較正式的解法如下:

昨天玩了一下 gs。發現可能不必這麼麻煩,因為 CJK-latex + dvipdfmix 製作出?淼牟粌惹吨形 PDF 檔,頗合 PDF-spec。雖然,pdffonts 看到的是:

name                                 type         emb sub uni object ID
------------------------------------ ------------ --- --- --- ---------
國字標準宋體                         CID TrueType no  no  no      22  0

但其? PDF 檔裡頭會標記成 Adobe-CNS1,也就是說會去使用 PDF browser Adobe-CNS1 的預設字型,例如:

34 0 obj
<<
/Type/Font
/Subtype/CIDFontType2
/BaseFont/#b0#ea#a6r#bc#d0#b7#c7#a7#ba#c5#e9,Italic
/FontDescriptor 35 0 R
/CIDSystemInfo<<
/Registry(Adobe)
/Ordering(CNS1)
/Supplement 0
>>
>>
endobj

以此 object 為例。其中 # 是代表 hex notation,那一堆就是『國字標準 宋體』,後面會有 /Registry(Adobe) /Ordering(CNS1),因此,只要 gs 的 CIDFnmap 設成:

/Adobe-CNS1             /ShanHeiSun-Light       ;

就可以了,也就是說,不管 PDF 使用什麼字型,如果找不到此字型,就會使 用預設的 (Adobe-CNS1)ShanHeiSun-Light。這樣就不必遇到沒有的字型就得 去加入 alias。而 acroread 也會去找他的預設字型 MHei-Medium 或 MSung-Light(視 acroread 如何設定,設成 sans 則取用黑體,設成 serif 則取用宋體)。為防意外,建議以下兩行也加入:

/Adobe-CNS1-Big5        /ShanHeiSun-Light       ;
/Adobe-CNS1-Unicode     /ShanHeiSun-Light       ;

這樣一?恚杏〉膯栴}也解決了。pdf2ps(pswrite device) 時 gs 會去取用 ShanHeiSun-Light。當然,前提是 /usr/share/ghostscript/Resource 要把 ShanHeiSun-Light 預先設定好。
Prev         Home         Next
中文輸出字型         Up         TrueType
 楼主| 发表于 2003-7-2 07:59:37 | 显示全部楼层

中文輸出字型

TrueType

TrueType字型格式為美國Apple ( http://www.apple.com)及Microsoft ( http://www.microsoft.com )所共同制定,最先使用於Apple的Macintosh系列及 Microsoft Windows 3.1, 而目前Apple的OS 8.0及 Microsoft Windows 95/NT/2000/XP也都使用 TrueType作為字型格式。

基本上TrueType和PostScript一樣,都是使用??曲線(Bezier Curve) ?砻枋龅耐饪蜃帧 字型可以作任意尺寸的放大縮小, 或作其他屬性的變化,不過由於Apple及Microsoft 的作業系統都直接支援此字型格式,所以?K不需要如PostScript 一樣,外掛(Adobe)Type Manager之?的程式。

WWW: Features of TrueType and OpenType
6.3.1. ttfm - TrueType 字型管理工具

目前有許多程式都會要求使用 TTF 字型,所以我們最好還是幫 X 加 上中文的 TTF 字型支援。目前安裝字型所需的 fonts.dir 已經不需要 使用暴力的方法產生,使用 ttfm 就可以很順利的管理所有的中文字 型了。而現在在 ports 中的 TrueType 字型有三套, arphicttf、 moettf、 wangttf。

ttfm 的安裝:

# cd /usr/ports/chinese/ttfm
# make install

安裝後包含了:

ttfinfo:一個可以用?碜x取 ttf 字型格式資?的小程式,範例如下:

# ttfinfo /usr/local/share/fonts/TrueType/bkai00mp.ttf
TTFINFO_FONT_FILE="/usr/local/share/fonts/TrueType/bkai00mp.ttf"
TTFINFO_FONT_NAME="AR PL KaitiM Big5"
TTFINFO_FONT_PSNAME="ZenKai-Medium"
TTFINFO_FOUNDRY_NAME="Arphic"
TTFINFO_WEIGHT_NAME="medium"
TTFINFO_WIDTH="normal"
TTFINFO_NUMCMAP="2"
TTFINFO_CMAP0="1,0"
TTFINFO_CMAPNAME0="Apple,Roman"
TTFINFO_CMAP1="3,1"
TTFINFO_CMAPNAME1="Windows,Unicode"
TTFINFO_MAPNUM="1"
TTFINFO_FONTMAP1="-Arphic-AR PL KaitiM Big5-medium-r-normal--0-0-0-0-c-0-big5-0"

ttfinst.tk:圖形介面的 tk script, 可以用?戆惭b字型,不建議使用。

ttfm.sh:shell script,預備作為 ttf 字型總管。

# ttfm.sh --help
True-Type Font Manager 0.9.3

Usage: /usr/local/bin/ttfm.sh [option]

       --add [module] <file>...    install ttf font
       --remove [module] <file>... remove ttf font from the system
       --list <module>... list all ttf fonts on the system
       --modules          list all ttf manager modules on the system
       --setdefault <module> <file>
                          set default ming font of module to file
       --initm <module>.. initialize modules
       --help             show this info

這個程式會去利用位於 /usr/share/fonts/install/ 底下以 ".ttfm" 結尾的可執行檔?戆惭b、設定字型, 這些 .ttfm 檔案我稱 為 ttfm module,由需要使用到 ttf 字型的程式提供,這些模組必 須符合以下要求:

    *

      可獨立使用,不一定透過 ttfm.sh 呼叫執行。
    *

      不對系統字型目錄有任何預設,只管理自己模組字型目錄下的檔案。
    *

      對 ttf 檔案位置需求不同於 ttfm.sh 中的系統字型目錄時,以 link 方式處理,不 copy ttf 檔案,移除字型時不更動系統字型目 錄中的檔案。
    *

      提供至少下面幾個參數供 ttfm.sh 使用:

    --name         顯示模組名稱
    --list         列出模組管理的現有字型與對應的名稱
    --add <file>   增加字型,file 為一字型檔案名稱,如
                   /mnt/windows/fonts/mingliu.ttc
    --remove <file>    移除字型,file 為字型檔案名稱,可以是
                   fullpath、亦可以是單純檔案名,如
                   /usr/local/share/fonts/TrueType/bkai00mp.ttf or bkai00mp.ttf
    --setdefault <file>   設定預設字型,file 為字型檔案名
                   稱,可以是fullpath、亦可以是單純檔案名,如
                   /usr/share/fonts/ttf/bkai00mp.ttf or bkai00mp.ttf
         



ttfm 採用模組化的設計。 每一個需要使用到 ttf 字型的 程式都可以提供 ttfm 的模組, 然後便可透過 ttfm.sh ?碜龅 字型的安裝,移除,列表,設定預設字型等管理的動作。 目前已有的 ttfm 模組有:

abiword        給 AbiWord 0.7.12 或是以上的版本使用。
chitex      安裝 ChiTeX 字型  (by cwhuang)
gscjk       給 Aladdin Ghostscript 使用。可以管理 TrueType 字型
        和 CID 字型,Ghostscript 必須修補可以使用 TrueType 字型。
ttf2pk      供 freetype-contrib 的 ttf2tfm, ttf2pk 使用  (by cwhuang)
xfreetype   給 XFree86's freetype backend,在 3.x 是 Xfsft,
        在 4.x 是 freetype 模組。
xttfm-tcl   給 XFree86 3.3.x X-TrueType server。
xttfm       安裝給 X window 用的 font.dir, font.alias  (by 小虫)

一些使用範例:

1. 加入字型:

# ttfm.sh --add <path>/bsmi00lp.ttf

(xttfm 會令 xfs 重新載入字型名稱。如果您不是使用 xfs, 您要自己下 xset fp rehash 令新的字型名稱生效,或者重新啟動 X Window )

2. 列出字型:

# ttfm.sh --list xttfm

會列出 xttfm 模組所有安裝的字型。 您現在可以用 xlsfonts 看到這些字型名稱。 ?K可用 xfd -fn <字型名稱> 試試能否看到字型。

3. 移除字型:

# ttfm.sh --remove bsmi00lp.ttf

這不需多做解釋吧?

4. 設定預設字型:

# ttfm.sh --setdefault xttfm bkai00mp.ttf

將 xttfm 模組的預設字型更改為 bkai00mp.ttf 這或許是 ttfm 最 powerful 的功能之一了。 您可發現 X Window 預設的中文字型通通變成楷體的。

注意預設字型是跟 encoding 有關的。您可以對不同的 encoding 分別給定預設字型。ttfm 會自動根據所給定 ttf 自動判斷應設定那種 encoding 的預設字型。 例如 ttfm.sh --setdefault xttfm gkai00mp.ttf 會設定 GB 的預設字型為楷體。

5. 模組的初始化:

# ttfm.sh --initm <module name>...

這個功能是用?碓诎惭b一模組時,將系統已有的 ttf 字型通通安裝到該模組中。 如果下:

# ttfm.sh --initm all

會令所有已安裝的模組都做初始化的動作。 (也就是將所有字型安裝到所有的模組中)

如果您撰寫了一個 ttfm 的模組,請記得在安裝時 執行 ttfm.sh --initm <您的模組名稱>

    Note: TrueType 字型的設定

    還有,在啟動您的 X 之前,記得檢查 /etc/XFree86 下面有沒有

FontPath   "/usr/X11R6/lib/X11/fonts/TrueType"

    或是在 ~/.xinitrc 中加上這一行

xset +fp /usr/X11R6/lib/X11/fonts/TrueType/

# cvs -d :pserver:anonymous@cle.linux.org.tw:/var/lib/CVSROOT login
(Logging in to anonymous@cle.linux.org.tw)
CVS password:
# cvs -d :pserver:anonymous@cle.linux.org.tw:/var/lib/CVSROOT checkout ttfm

WWW: http://cle.linux.org.tw/cgi-bin/cvsweb.cgi/ttfm/
6.3.2. moettf - 台灣教育部標準 TrueType 字型

moettf 台灣教育部標準楷書、宋體 ttf 字形檔,現在又加了兩個字型 moe_sungext.ttf 和 moe_sungsym.ttf,雖然字型是 BIG5 編碼, 字元和符號在 CNS 中還是偶而會用到。

moettf 的安裝:

# cd /usr/ports/chinese/moettf
# make install

以下按照年代說明

85.12.03    國字標準字體楷書母稿
85.12.03    國字標準字體宋體母稿
85.12.05    國字方體母稿

這時 Wukai ?慕逃康臉藴首煮w轉成兩個 ttf, http://bbs.ee.ntu.edu.tw/boards/Linux/7/8/4.html ,也就是第一版的 moe_kai.ttf 與 moe_sung.ttf, moe_sung 的字數是 13865,moe_kai 的字數是 13849 少了幾個特別複雜的字, 這是教育部原始提供的字面母稿的少了的,不是轉換過程中 lost 掉的。

87.12.28    國字隸書母稿
88.05.20    國字標準字體宋體母稿增補編

這兩個就是後?碓黾拥 edustd-15.exe、edustds1.exe、edustds2.exe, 也就是後?淼牡诙版。

92.02       教育部楷書字形檔

這個則是最近新增的檔案,品質比楷書母稿好很多, 有 Big5 和 Unicode 版。當然有機會取代原 moe_kai.ttf, 不過還需要比較字數等可能問題。

總結:目前在 ports/chinese/moettf 中有五個檔案,方別是

2059101    edustd-15.exe   教育部隸書字形檔[註1]
1971355    edustds1.exe    教育部標宋體增補編字形檔[註2]
  139950    edustds2.exe    教育部標宋體增補編字形檔[註2]
9194491    moe_kai.ttf     國字標準字體楷書母稿[註3]
8647174    moe_sung.ttf    國字標準字體宋體母稿[註3]

[註1] http://www.edu.tw/mandr/allbook/lishu/lishu.htm
[註2] http://www.edu.tw/mandr/result/5879/5879.html
[註3] http://www.edu.tw/mandr/bbs/1-4-2/ksf.html

但是在教育部楷書字形檔[註4],看到三個不同的楷書字型?

13842688    kai-pc.ttf      PC 版(92.2)     Windows 系統適用
13837924    kai-linux.ttf   Linux 版(92.2)  Linux作業環境適用
9300584    ct.sit          MAC 版(92.2)    APPLE電腦適用

[註4] http://www.edu.tw/mandr/bbs/1-4-2/kai.htm

Figure 6-4. moettf snapshot

WWW: 教育部國字標準字體公告

6.3.3. arphicttf - 文鼎科技 TrueType 字型

arphicttf 是由文鼎科技提供, 包含文鼎PL細上海宋,文鼎PL中楷 (BIG-5碼)和文鼎PL簡報宋、文鼎PL簡中楷(GB碼)。它可以被用? 作為 X Window 系統或是排版軟體例如 CJK。感謝文鼎科技,您可以 在 GPL-base 版權下自由散?堰@些高品質的字型。 ARPHIC_*.TXT 有更詳細的文件。

arphicttf 的安裝:

# cd /usr/ports/chinese/arphicttf
# make install

以下表格式整理過後的文鼎字體速查表, 會有兩個 Font Family 是因為英文的是 Microsoft,Unicode,English - United States 的資?,常用於 gtk2 等字型設定, 中文的則是 Microsoft,Unicode,Chinese - Taiwan 的資?,通常是 utf8 編碼,常用於 openoffice 的字型設定, Font Family, Unique subfamily identification, Full name 的資?通常都會相同。

Table 6-1. 文鼎字體速查表
檔名         PostScript name         Font Family         Font Family
bkai00mp         ZenKai-Medium         AR PL KaitiM Big5         文鼎PL中楷
bsmi00lp         ShanHeiSun-Light         AR PL Mingti2L Big5         文鼎PL細上海宋
gkai00mp         GBZenKai-Medium         AR PL KaitiM GB         文鼎PL簡中楷
gbsn00lp         BousungEG-Light-GB         AR PL SungtiL GB         文鼎PL簡報宋

Figure 6-5. arphicttf snapshot

WWW: 文鼎科技
6.3.4. wangttf - 王?h宗教授 TrueType 字型

wangttf 由 Dr. Hann-Tzong Wang 提供的字型,可以看看 wangttf.txt 得到更詳細的資?, 不過安裝起?碛 80MB,所以請斟酌後再使用。 繼 文鼎科技 捐出四套字形之後, 研發天蠶字庫的中原大學數學系王?h宗教授, 也捐出十套字型,給 Linux 社群使用。版權採用 GPL 釋出。 王?h宗教授捐出了以下十種字型: 王?h宗新潮體--波浪、 王?h宗特明體--標準、 王?h宗波卡體--空陰、 王?h宗綜藝體--雙空陰、 王?h宗標楷體--空心、 王?h宗仿宋體--標準、 王?h宗粗鋼體--標準、 王?h宗粗黑體--?陰、 王?h宗粗圓體--雙空、 王?h宗海報體--半天水。

wangttf 的安裝:

# cd /usr/PORT 218,18,38,190,234,229
有一個好處... 因 OpenOffice 只認 Unicode 編碼的 TrueType 字,引至很多 Big5 編碼的字不能用。 現在只要將轉變後的字抄到 OpenOffice 下的 share/fonts/truetype/ 就可以用了。好! 我已經測試了幾個王?h宗教授的字型, (確係靚)!---?V東話

chinese/oto 的安裝:

# cd /usr/ports/chinese/oto
# make install

wangttf 的字型只有 Big5 編碼,所以我們幫她加上 Unicode 編碼。

# oto wcl-01.ttf wcl-01-unicode.ttf
# ttfinfo wcl-01.ttf
TTFINFO_FONT_FILE="wcl-01.ttf"
TTFINFO_FONT_NAME="unknown"
TTFINFO_FONT_PSNAME="unknown"
TTFINFO_FOUNDRY_NAME="misc"
TTFINFO_WEIGHT_NAME="medium"
TTFINFO_WIDTH="normal"
TTFINFO_NUMCMAP="1"
TTFINFO_CMAP0="3,4"
TTFINFO_CMAPNAME0="Windows,Big 5"
TTFINFO_MAPNUM="1"
TTFINFO_FONTMAP1="-misc-unknown-medium-r-normal--0-0-0-0-c-0-big5-0"
# ttfinfo wcl-01-unicode.ttf
TTFINFO_FONT_FILE="wcl-01-2.ttf"
TTFINFO_FONT_NAME="unknown"
TTFINFO_FONT_PSNAME="unknown"
TTFINFO_FOUNDRY_NAME="misc"
TTFINFO_WEIGHT_NAME="medium"
TTFINFO_WIDTH="normal"
TTFINFO_NUMCMAP="2"
TTFINFO_CMAP0="3,1"
TTFINFO_CMAPNAME0="Windows,Unicode"
TTFINFO_CMAP1="3,4"
TTFINFO_CMAPNAME1="Windows,Big 5"
TTFINFO_MAPNUM="1"
TTFINFO_FONTMAP1="-misc-unknown-medium-r-normal--0-0-0-0-c-0-big5-0"

oto 另外一個好用的功能就是能修改字型的屬性:

% oto NTU_KAI.TTF > test
% iconv -f utf-8 -t big5 test > test.big5
% vi test.big5
% iconv -f big5 -t utf-8 test.big5 > test.utf-8
% oto NTU_KAI.TTF ntu-kai-new.ttf --names test.utf-8

編輯 test.big5 把 (Microsoft,Unicode,Chinese - Taiwan) .... at ...: 改成你想要顯示的字,使用 iconv 可能要注意?K非整個檔都是 utf-8 編碼的, 大概把 Unicode 那些區段自己找出?磙D成 big5 編輯後再寫回去, 最後再搭配 --names ?戆褜傩愿牡簟

以下是 Edward G.J. Lee(李果正) 所貢獻的。

Pfaedit 也是可以修改字型的屬性

#!/usr/bin/env pfaedit
# Reencoding a font to Unicode TTF.
# By Edward G.J. Lee, this code is public domain.
# $1: your TTF name.

if ($argc != 2)
  Print("usage: ", $0, " your.tt[fc]")
  Quit(1)
endif

Print("Loading ", $1, "...")
Open($1)

SetFontNames("myfont","myfont","myfont")

Reencode("iso10646-1")

ClearHints()
Print("Generating fonts...")
Generate($1 + ".ttf")

Close()
Quit(0)

chmod +x unifont.pe 就可以執行了(Unix-like 系統/環境)。這個 script 會把不是 Unicode 的 TTF 轉成 Unicode TTF。其中 ps name 的部份請自 行更改,我這裡是使用 myfont。

./unifont.pe your.ttf

就可以了,會產生 your.ttf.ttf,再自行更改檔名。

WWW: http://sourceforge.net/projects/oto
Prev         Home         Next
PostScript         Up         中文的顯示及輸入
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表