FreeBSD Chinese HOWTO

The Chinese FreeBSD Documentation Project

本文說明如何在 FreeBSD 的系統上使用中文。其中包括了在 FreeBSD 系統上使用中文可能遭遇的問題,以及如何取得, 安裝與設定各種不同的中文軟體,以及 FreeBSD 的中文化工作等。

如果您在使用 FreeBSD/Linux 上遇到任何的中文問題, 都歡迎寫信跟我討論,當您遇到的中文問題有解答的時候, 也希望能寫封信通知小弟 Shen Chuan-Hsing 新增或修改。

Redistribution and use in source (SGML DocBook) and 'compiled' forms (SGML, HTML, PDF, PostScript, RTF and so forth) with or without modification, are permitted provided that the following conditions are met:

  1. Redistributions of source code (SGML DocBook) must retain the above copyright notice, this list of conditions and the following disclaimer as the first lines of this file unmodified.

  2. Redistributions in compiled form (transformed to other DTDs, converted to PDF, PostScript, RTF and other formats) must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.

Important: THIS DOCUMENTATION IS PROVIDED BY THE FREEBSD DOCUMENTATION PROJECT "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FREEBSD DOCUMENTATION PROJECT BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS DOCUMENTATION, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.


Table of Contents
1. 前言
1.1. 簡介
1.2. 如何取得這份文件?
1.2.1. jadetex - SGML+JadeTex 產生不內嵌字型的中文 PDF
1.3. 注意事項
1.4. 目標
1.5. 如何學 BSD?
2. 以 FreeBSD 建立中文 Desktop 的安裝指南
2.1. 輕鬆安裝FreeBSD中文桌面
2.2. 使用其他字型作為預設字型
2.3. 保持最新的 Ports Tree
3. 中文環境
3.1. 漢字概論
3.2. 閩南語和客家話
3.3. 編碼標準
3.4. ASCII
3.5. ISO8859-1
3.6. Big5
3.7. CNS11643
3.8. CCCII
3.9. EUC-TW
3.10. GB
3.11. Unicode/ISO 10646
3.12. 基本中文環境的要件
3.13. 國際化與中文化
3.14. 可能的問題
3.15. 什麼是 locale ?
4. 中文 X Window
4.1. XFree86-4
4.2. 使用字型
4.2.1. X11 Core Font - XLFD
4.2.2. xtt Module
4.2.3. fontconfig
4.3. 中文 locale 的設定
4.3.1. 設定 Shell locale 環境變數
4.3.2. 字元的分類與編碼
4.4. 時區的設定
5. 中文的訊息
5.1. 幫助本地化和翻譯的工作
5.1.1. FreeBSD handbook
5.1.2. FreeBSD FAQ
5.1.3. FreeBSD Porters Handbook
5.2. 參加中文 I18N/L10N 的計畫
5.3. 翻譯 PO 檔注意事項
5.4. 中文 manual page
6. 輸出字型
6.1. Bitmapped Font - 點陣字型概論
6.2. cmexfonts - 中推會 Big5+ 點陣字型
6.3. kcfonts - 國喬點陣字型
6.4. gugod-clean - 搭配中文點陣字型用的英文點陣字型
6.5. intlfonts - 各國的免費點陣字型
6.6. PostScript 概論
6.7. 使用 TrueType 字型當作是 CID fonts
6.8. moefonts-cid - 由 Adobe 轉譯的 MOE CID Font
6.9. 以 gs 觀看不內嵌的 pdf 檔
6.10. TrueType - 全真字型概論
6.11. ttfm - TrueType 字型管理工具
6.12. mingliu - 微軟細明體 TrueType 字型
6.13. simsun - 微軟宋體 TrueType 字型
6.14. mingunittf - 香港補增字符集2001
6.15. moettf - 台灣教育部標準 TrueType 字型
6.16. arphicttf - 文鼎科技 TrueType 字型
6.17. wangttf - 王漢宗教授 TrueType 字型
6.18. ntuttf - 台大字型
6.19. oto - Open Type Organizer 程式
7. 中文的顯示及輸入
7.1. 輸入法
7.1.1. zh_hex - 內碼輸入法
7.1.2. cj - 倉頡輸入法
7.1.3. simplex - 簡易輸入法
7.1.4. phone,bimsphone - 注音輸入法
7.1.5. jyutping - 粵語拼音輸入法
7.1.6. bimspinyin - 拼音輸入法
7.1.7. chewing - 酷音輸入法
7.1.8. array30 - 行列30輸入法
7.1.9. liu - 嘸蝦米輸入法
7.1.10. dayi - 大易輸入法
7.2. big5con - 類似倚天的中文 Console
7.3. zhcon - 基於 FrameBuffer 的控制台多內碼中文平台
7.4. big5cce - 繁體中文 Console 環境
7.5. cce - 簡體中文控制台環境
7.6. kon2
7.7. xcin25 - 繁體中文 XIM Server
7.8. GTK_IM_MODULE
7.9. chinput - 簡體中文 XIM Server
7.10. miniChinput - 簡體中文 XIM Server
7.11. xsim - 簡體中文 XIM Server
7.12. fcitx - 簡體中文 XIM Server
7.13. aterm - 支援 XIM 的中文終端機
7.14. rxvt
7.15. Eterm
7.16. mlterm - 多國語言終端機
7.17. cxterm - X Window 下的內建輸入法中文終端機
7.18. 新增輸入法 - 嘸蝦米輸入法為例
7.19. 在 Bash/Tcsh Shell 底下的中文輸入
7.20. big5fs - Joliet, VFAT 和 NTFS 檔案系統的中文顯示
7.21. ls - 用 ls 顯示特殊中文檔名和目錄
7.22. xpdf - 中文 PDF 的顯示
8. 中文視窗管理程式
8.1. GNOME 程式的中文支援
8.1.1. gtk2
8.1.2. gtk1
8.1.3. Nautilus 中文字變成 ???
8.2. Enlightenment 的中文化
8.3. KDE 的中文化
8.3.1. KDE1 [OBSOLETE]
8.3.2. KDE2 [OBSOLETE]
8.3.3. KDE3
8.4. WindowMaker 的中文化
8.5. Sawfish 的中文化
9. 中文的列印
9.1. 現在的中文列印
9.1.1. mozilla 僅有普通字體
9.1.2. why MSung-Light?
9.1.3. 修改 CIDFnmap 的測試
9.1.4. KDE3 的 kword 仍然有問題
9.1.5. fonts.dir 的粗體與斜體
9.1.6. gscjk 的粗體與斜體
9.1.7. AbiWord 的粗體與斜體
9.1.8. kde2 的中文列印 [OBSOLETE]
9.2. bg5pdf - 轉換中文 Big5 編碼文件成為不內嵌的 PDF
9.3. bg5ps - 使用 TTF 字型轉換中文 Big5/GB 編碼文件成為 Portscript
9.4. enscript - 直接使用 CID-font 來列印
9.5. gb2ps - 轉換中文 GB 編碼文件成為 PostScript
9.6. gbscript - 轉換中文 GB 編碼文件成為 PostScript
9.7. tocps - 轉換中文編碼文件成為 PostScript
9.8. vflib - 使用自由向量字型的向量字型函式庫,支援 BIG5 和 GB
9.9. cnprint
9.10. wprint
10. 中文排版軟體
10.1. OpenOffice - 整合性的辦公室軟體
10.2. eioffice - 永中Office 2003
10.3. AbiWord - 開放原始碼、跨平台、所見即所得的文字編輯器
10.4. XEmacs - 支援 XIM 且 Big5 設定的 XEmacs 文字編輯器
10.5. wvware - 可以轉換微軟 Word 檔案的工具
10.6. Emacs
10.7. celvis - 類似 vi/ex 且中文顯示的文字編輯器
10.8. joe - 簡易且功能不錯的編輯程式
10.9. nvi - 類似 vi/ex,有多種語言修補,預設為 big5
10.10. qe - qe 是一個模仿 PE2 的編輯程式
10.11. ve - NTHU-CS Maple BBS 發展的 BBS-like 文字編輯器
10.12. ChiTex - 中文 Tex/LaTex
10.13. CJK - 可以使用 CJK scripts 的 LaTeX2e 巨集套件
10.14. CJK-LyX - 有 LaTeX 使用介面的文件編輯器(所見即所得)
10.15. 在 ConTeXt 使用 Big-5 中文
10.16. cwTeX
10.17. dvipdfmx - 轉換 *.dvi 成為不內嵌中文字型的 *.pdf 檔
10.18. ttf2pt1 - TTF 轉中文 Type1 字型
11. 中文轉碼軟體
11.1. iconv
11.2. cn2jp - 在中文和日文間的編碼轉移函式庫
11.3. autoconvert - 智慧的中文編碼轉換
11.4. c2t - 轉譯 GB/Big5 編碼成拼音
11.5. hc - 漢字轉換器,在 GB 和 Big5 編碼間轉換
11.6. gb2jis - GB漢字轉換JIS漢字
11.7. hztty - 在 GB Big5 和 HZ tty 中轉換
11.8. jis2gb - JIS漢字轉換GB漢字
11.9. pycodec - 中文碼/萬國碼轉換程式
11.10. fzzdxfw - 方正中等線繁體
12. 中文郵件用戶端
12.1. sylpheed - 建構在 GTK+ 上,輕量級且快速的電子郵件軟體
12.2. mutt - 功能強大的電子郵件軟體
12.3. pine4 - 操作便利的電子郵件軟體
12.4. 郵件亂碼?
12.4.1. UU 編碼 (uuencode與uudecode)
12.4.2. QP - Quote-Printable
12.4.3. BASE64
12.4.4. 其他亂碼?
13. 中文網際網路軟體
13.1. bind8
13.2. samba - 網路芳鄰,資源分享程式
13.3. Konqueror - KDE 內建的瀏覽器
13.4. mozilla - Mozilla 繁體中文語言包
13.5. lynx - console 網頁瀏覽器
13.6. w3m - console 網頁瀏覽器
13.7. links - 現在的預設 console 瀏覽器
13.8. netscape [OBSOLETED]
13.9. IglooFTP
13.10. gftp - gtk ftp
13.11. NcFTP3
13.12. bbsnet - BBS 跨海大橋
13.13. qterm - 好用的 BBS 連線軟體
13.14. telnet - Telnet 的中文問題
13.15. licq - ICQ clone
13.16. gaim - ICQ, MSN Clone
13.17. oicq - Tencent QQ CLI client
13.18. bluefish - 網頁編寫
13.19. tin - 新聞討論群閱讀器
13.20. tintin++ - MUD 工具
13.21. xchat
13.22. irssi
13.23. bitchx
13.24. mldonkey - P2P
13.25. gaimqq - Tencent QQ GUI client
14. 中文程式設計
14.1. 在 FreeBSD 下寫程式應該注意的問題
14.2. JSP / Servlet 怎樣才能處理中文?
14.3. Java 連結到 MySql 如何使用中文?
14.4. linux-gtk - gtk-1.2.6 的函式庫 rpm,有 Big5/GB 的支援
14.5. php 的 ImageTTFText() 經常抓錯字?
14.6. php 上傳中文檔名的檔案
14.7. 用 php 製作中文 PDF 檔
14.8. Tcl/Tk - 廣為運用的一種高階電腦語言與 GUI 發展工具
14.9. PostgreSQL 不能處理中文?
14.10. PostgreSQL + JDBC + Servlet + XMLC 中文完全解決方案
14.11. Java 中文程式設計
14.12. Perl 中文程式設計
14.13. MySQL Localisation and International Usage
14.14. 在 LDAP 下使用中文
14.15. 用 perl 寫 CGI 時的中文顯示問題?
15. 中文多媒體軟體
15.1. mplayer
15.2. xmms - mp3 播放軟體
16. 字典軟體
16.1. dictd-database - dictd 的字典檔資料庫
16.2. pyDict - 英漢、漢英兩用字典
16.3. stardict - 中文與英文的翻譯字典
16.4. stardict2
16.5. oxford
16.6. edict-big5 - 日文漢字轉中文漢字後的漢英字典
17. 有用的中文軟體
17.1. FreeWnn
17.2. acroread5-chtfont - Acrobat Reader 5.0 的 PDF 閱讀軟體
17.3. cle_base - 利用 CLE 所提供的中文 L10N [OBSOLETE]
17.4. cless - 一個較好用的分頁閱讀程式
17.5. Dia - 類似 Vision 的流程設計軟體 [OBSOLETE]
17.6. Firebird - BBS 伺服器
17.7. fortunetw - 唐詩三百首與易經
17.8. Gnumeric - GNOME 報表軟體
17.9. hanzim - 中文字學習軟體
17.10. libtabe - xcin 的中文處理函式庫
17.11. lunar - 轉換陽曆和陰曆的對應日期
17.12. linux_locale - linux 模擬器所需的中文 locale 資訊 [OBSOLETE]
17.13. mkisofs - 建立光碟影像檔
17.14. mule-freewnn
17.15. muni
17.16. p5-Date-Chinese
17.17. qkmj - 中國的國粹:麻將
18. 發展中的中文軟體 Outta-port
18.1. xfig
18.2. MT - movabletype blog
19. 其它軟體的中文相關問題
19.1. sendmail
19.2. procmail
19.3. vim - VI 的進階編輯器
19.4. mailman - How to Enable Chinese in Mailman2.1.1
19.5. pvpgn - Blizzard's Battle.net service
20. FreeBSD 的中文化
20.1. FreeBSD 中文文件計畫
20.2. FreeBSD 中文化計劃
20.3. FreeBSD 的中文站台
20.4. FreeBSD 的中文討論區
20.5. FreeBSD 的中文 IRC 聊天室
20.6. Organisations Working in Open Source
21. 常見問題解答
21.1. 為何無法輸入中文?
21.2. 如何在 Netscape 輸入中文? [OBSOLETE]
21.3. ChiTeX 與 CJK 有何不同? 可否同時安裝?
21.4. rxvt-2.7.3 為何是日文的?
21.5. 加快 X Win 的方法?
21.6. 為何 Netscape 的圖示是黑白的? [OBSOLETE]
21.7. 中文的 SSH client for windows?
21.8. 在 FTP 中輸入中文?
21.9. Oracle8i 沒辦法使用中文?
21.10. 安裝 Oracle9i 出現亂碼?
21.11. wu-ftp 無法上傳中文檔名的檔案?
21.12. kdm 登入畫面是亂碼?
21.13. vi 輸入中文會顯示 /XX/XX?
21.14. write 無法送中文訊息?
21.15. talk 無法送中文訊息?
21.16. wall 無法送中文訊息?
21.17. finger 無法看到中文project?
21.18. mail 無法看到中文?
21.19. xml 是否具有處理中文的能力?
21.20. 如何刪除以中文命名的檔案?
21.21. X-win32 如何安裝中文字型?
21.22. 網頁亂碼?
21.23. vnc 抓 XFree86 的中文問題?
21.24. CCCII-FT
21.25. 如何更改 X 的預設中文字體?
21.26. Gdk-WARNING **: BIG5-0
21.27. unzip 解開中文檔名變亂碼?
21.28. squid 瀏覽 ftp 與 gopher 中文亂碼?
21.29. apache2 預設顯示中文網頁
21.30. Windows 網址列不能使用中文檔名?
21.31. wget 中文檔名變亂碼
21.32. 如何造字?
21.33. 內建 ftpd 的中文問題
21.34. pure-ftpd 的中文問題?
21.35. .chm 怎麼在 Unix 底下觀看?
21.36. konsole 字距過大
21.37. Cyrus-IMAP 將 8-bit 文字轉換為 X 的問題
21.38. 英文字和中文字等寬?
21.39. pw 開帳號碰到'@'問題?
21.40. mount_smbfs 不能用中文 share 名稱?
21.41. flash 中文顯示?
21.42. KDE 下使用 GTK 的字型問題?
21.43. 檔名大寫換小寫,含子目錄?
21.44. opera 無法輸入中文?
22. 文字編碼
22.1. 中文編碼
22.1.1. Big5 文字內碼表
23. 感謝
List of Tables
3-1. 不同時期的漢字總數
3-2. Big5 字區與編碼範圍
3-3. 七個擴充字
3-4. ISO-2022-CN 的規格 -1,2
3-5. ISO-2022-CN 的規格 -3
3-6. 台灣漢字字集規則
3-7. CCCII 第一層的構造
3-8. 10月18日
3-9. GB 的漢字編碼規則
6-1. 文鼎字體速查表
List of Figures
5-1. man snapshot
6-1. showttf snapshot
6-2. cid-gv snapshot
6-3. moefonts-cid snapshot
6-4. moettf snapshot
6-5. arphicttf snapshot
6-6. wangttf snapshot
6-7. ntuttf snapshot
7-1. big5con snapshot
7-2. zhcon snapshot
7-3. cce snapshot
7-4. xcin25 snapshot
7-5. aterm snapshot
7-6. rxvt snapshot
7-7. Eterm snapshot
7-8. mlterm snapshot
7-9. cxterm snapshot
7-10. tcsh snapshot
7-11. ntfs snapshot
7-12. gnuls snapshot
7-13. xpdf snapshot
8-1. nautilus snapshot
8-2. konq_3_1 snapshot
8-3. konq_3_2 snapshot
8-4. konq_3_3 snapshot
8-5. kfont_3_1 snapshot
8-6. konq_3_4 snapshot
8-7. windowmaker snapshot
9-1. 20020527 snapshot
9-2. 20020527-2 snapshot
9-3. kde-print snapshot
9-4. bg5pdf snapshot
9-5. bg5ps snapshot
10-1. openoffice snapshot
10-2. abiword snapshot
10-3. joe snapshot
10-4. qe snapshot
10-5. ve snapshot
10-6. CJK snapshot
10-7. CJK-LyX snapshot
10-8. dvipdfmx snapshot
10-9. ttf2pt1 snapshot
11-1. hztty snapshot
11-2. fzzdxfw snapshot
12-1. sylpheed snapshot
12-2. mutt snapshot
13-1. konqueror snapshot
13-2. mozilla snapshot
13-3. lynx snapshot
13-4. IglooFTP snapshot
13-5. ncftp3 snapshot
13-6. bbsnet snapshot
13-7. qterm snapshot
13-8. licq snapshot
13-9. gaim snapshot
13-10. kmerlin snapshot
13-11. bluefish snapshot
13-12. tin snapshot
13-13. tintin++ snapshot
13-14. xchat snapshot
14-1. php-imagettftext snapshot
14-2. php-pdf snapshot
14-3. tcltk snapshot
14-4. applet snapshot
14-5. swing snapshot
14-6. ldap snapshot
15-1. mplayer snapshot
15-2. xmms snapshot
16-1. dict snapshot
16-2. pydict snapshot
16-3. stardict snapshot
16-4. stardict2 snapshot
16-5. oxford snapshot
16-6. edict-big5 snapshot
17-1. acroread snapshot
17-2. fortunetw snapshot
17-3. hanzim snapshot
17-4. qkmj snapshot
19-1. vim snapshot
21-1. vnc snapshot
21-2. cccii snapshot
21-3. konsole snapshot

Chapter 1. 前言

Last Update: 2003年10月12日 周日 17時18分53秒 CST

與其抱怨四周黑暗,不如點燃一根火柴照亮它。

從筆者在大一時開始接觸 FreeBSD 到現在已經五年有餘, 一開始除了李建達的黑皮書,以及 news:tw.bbs.comp.386bsd 的文章外, 還有一群喜愛玩弄 FreeBSD 的朋友。 從一開始幫忙維護風之塔 BBS 到後來專注於 FreeBSD 的中文化, 不斷的從錯誤嘗試中獲得快樂,為每一個新的軟體而讚嘆, 最重要的是總有一群跟你一樣在錯誤中摸索的人。 與其抱怨文件不多,不如自己開始寫文件。 雖然在網路上做過的蠢事不少,也不知道有多少人會認同這樣子的文件, 總有這樣子的傻子會做下去,直到連自己都不認同了。

還記得大一時在宿舍第一次把 X Window 安裝起來時, 順利執行漂亮的 Enlightenment,那種興奮,會讓人想在宿舍把左鄰右舍都吵醒, 還好沒有做,不然應該會被海扁一頓。

FreeBSD 的環境的確不如 GNU/Linux 那樣的多人使用, 現有的文件量也是明顯的少,商業炒作更是少見, 或許把 FreeBSD 歸類為學術用作業系統,會讓人在使用上更為輕鬆。

FreeBSD 的中文化,實際上筆者並沒有做過十分多的貢獻, 只有把前人的做法做整理與測試,然後又自己簡陋的文筆, 記憶下來當時的狀況。 曾經想弄過 Chinese FreeBSD Extension(CFE), 當初並沒有像很多細節, 只是希望能有個像 Chinese Linux Extension(CLE) 一樣的討論環境, 這大概是做過的重大蠢事之一, 大部分的人都不贊成類似 CLE 的做法, 後來為了避免與 CLE 繼續做比較,改名為 Chinese FreeBSD Collection(CFC), 做了幾個版本後,發現維護版本的問題十分花時間, 另一方面是這樣子一個人的專案終究活不久, 慢慢的轉向寫文件來紀錄自己的測試結果, 這樣子對自己比較輕鬆。

中文化慢慢穩定,也慢慢被忽略。 已經沒有那麼多迫切的中文問題的時候,也該是中文化該落幕劇終的時候。 目前只要任選一套 FreeBSD 或是 GNU/Linux 都可以簡單的使用中文, 當商業介入後,情況應該只會更好,畢竟有瑕疵的產品銷售量都不會太好, 不過,微軟例外。


1.1. 簡介

這份文件大部分都不是作者親自撰寫的, 由網路上大家所努力出來的成果蒐集為主, 雖然有想過要轉型成為 "FreeBSD 中文使用環境" 簡介文件, 不過礙於作者本身的能力與時間的不足,所以還在慢慢規劃中。

關於 FreeBSD 可以先參考它的官方網站 The FreeBSD Project ,以及他所提供的豐富文件,目前較為建議的閱讀是 FreeBSD Handbook

本文目前適合給已經有安裝 FreeBSD 概念,但遇到中文相關問題時, 可以用來找資料的文件,初學者可能要先閱讀過其他基本概念的文章後, 例如 FreeBSD Ports Collection 的使用概念,會更為適合閱讀此份文件。 在閱讀此份文件時, 目前還沒辦法一步步的引導使用者去建立個人的 FreeBSD 中文使用環境, 不過已經提供了基本的方法。

本文件雖已力求正確,然而無法保證所有操作/設定範例, 都可以順利的在您的系統上面進行。 如果您依照本文件的說明而使您的系統發生任何問題或損失, 作者都將不負任何責任

希望由於本文的出現,能大量減少在網路上一再重複出現的問題: "為什麼不能輸入/看到中文?" 等等。 雖然筆者也了解這是不太可能的...


1.2. 如何取得這份文件?

這份文件目前可以在這個網址取得:

WWW: FreeBSD Chinese HOWTO

這份文件是由 SGML 所編寫而成的,如果想取得原始檔案, 可以用以下的方式:

% cvs -d :pserver:anoncvs@freebsd.sinica.edu.tw:/home1/ncvs login
(Logging in to anoncvs@freebsd.sinica.edu.tw)
CVS password: anoncvs
% cvs -d :pserver:anoncvs@freebsd.sinica.edu.tw:/home1/ncvs checkout zh-tut

如果想手動產生 HTML、TXT 等格式,則必須照以下的方式:

# cd /usr/ports/textproc/docproj
# make JADETEX=yes install clean
# cvsup -g /usr/share/examples/cvsup/doc-supfile

接著修改 /usr/local/share/texmf/web2c/texmf.cnf, 將以下改成 hash_extra = 25000,max_strings = 150000, pool_free = 50000,這樣應該就可以了。

接著就可以到 zh-tut/ 底下用 make FORMATS=html 製作整頁模式的 HTML 版本, make FORMATS=split-html 製作章節模式的 HTML 版本, 因為以 make FORMATS=pdf 製作出來的 PDF 中文無法正常顯示,make FORMATS=ps 製作出來的 PS 版本也是如此,所以目前的 PDF 版本是用 Adobe Distiller 以預設值 PDF 1.3 做出非內嵌中文的 PDF 版本,以及以 PDF 1.2 , 並內嵌字型製做出內嵌中文的 PDF 版本。 並用 WebCapture2CK 增效模組做出了 PDF 的有超連結版本。 TXT 版本則是使用 lynx-dump 並搭配 -assume_charset=big5 -assume_local_charset=big5 瀏覽整頁模式 HTML 版本所製作出來的。 PS 的版本則是由 pdf2ps 所製作, 不過做出來會變成 30 MB,不太適合下載。


1.2.1. jadetex - SGML+JadeTex 產生不內嵌字型的中文 PDF

Contributed by 海邊的野孩子 (edwar.bbs@bbs.sayya.org)

Last Update: 2003年 4月 7日 周一 19時11分14秒 CST

在產生中文 HTML 的部分沒什麼問題,只要在 freebsd.dsl 的 style-specification-body 的標籤內,加上如下的宣告即可:

(define %html-header-tags% '(("META" ("HTTP-EQUIV" "Content-Type") ("CONTENT" "text/html; charset=Big5"))))

但是要產生 PDF 則要先安裝 teTeXdocprojCJKxpdf 等應用軟體,請參考前一節的說明。

jade 可以將 XML/SGML 轉換成 tex 檔,若是 XML 原本內含中文, 或是其他 CJK 文字,原本會輸出成一般的中文, 加上環境變數 SP_ENCODING=Big5 後, 輸出的 tex 檔會將這些文字用 \Character{29992} 表示,這數字是 unicode,「用」在 unicode 裡是中文的「用」字。

若是直接以 jadetex 編譯這個 .tex,會出現 Unknown character 的錯誤訊息,方式很簡單,既然這些字元沒有定義,就幫他定義一下, 在編譯的時候先引入就好了。

定義一個 cjk-char.sty,每行的內容像:

\DefineCharacter{19968}{4E00}{\begin{CJK*}{Bg5}{bsmi}XXX\end{CJK*}}

XXX 是經過 bg5conv 處理過的中文字。因為每個字都用 \begin{CJK*} 和 \end{CJK*} 包住,所以編譯時會很久。 這個做法可能可以在一份文件中用到好幾種編碼的文字。

若要加快編譯速度,就要將 \begin{CJK*} 用在開頭, \end{CJK*} 放在 \endFOT{} 之前。這樣可以大幅提昇速度, 但是一份文件裡可能就只能有一種編碼的亞洲文字。 還有一種做法是最開始使用 \begin{CJK*}{}{bsmi}, 在每個字定義的地方都用 \CJKenc{Bg5} 來指定編碼, 這樣速度會比第一種快一些。

然後在 .tex 的開頭加入 \usepackage{CJK,pslatex}\input cjk-char.sty 再進行編譯。下面就是步驟,cjk-char.sty 要自行下載。

# env SP_ENCODING=Big5 make FORMATS=tex
# echo '\usepackage{CJK,pslatex}\input cjk-char.sty' > zh-tut.tex.2
# cat zh-tut.tex >> zh-tut.tex.2
# mv zh-tut.tex.2 zh-tut.tex
# env SP_ENCODING=Big5 make FORMATS=dvi
# dvipdfmx zh-tut.dvi

最後用 xpdfpdffont 檢驗。 在 type 的地方全都是 Type 1 就沒問題囉。

# pdffonts zh-tut.pdf
name                                 type         emb sub uni object ID
------------------------------------ ------------ --- --- --- ---------
Helvetica-Bold                       Type 1       no  no  no       8  0
Times-Roman                          Type 1       no  no  no      15  0
ShanHeiSun-Light                     CID TrueType no  no  no      18  0
Courier                              Type 1       no  no  no      19  0
Helvetica                            Type 1       no  no  no      20  0
Times-Bold                           Type 1       no  no  no      25  0
Times-Italic                         Type 1       no  no  no      26  0
Courier-Bold                         Type 1       no  no  no      59  0
UJULYZ+CMMI10                        Type 1       yes yes no     167  0

WWW: cjk-char.sty


1.3. 注意事項

本文中範例的使用以 csh/ tcsh 為主。若您使用的是 sh/bash ,請注意其中的差異。例如對環境變數的設定,在 csh/ tcsh 中則是

% setenv TERM vt100

sh/bash 中是

% export TERM=vt100

1.4. 目標

本文希望能提供在 FreeBSD 系統上使用中文的完整而自足的說明。 只要是與 FreeBSD 上使用中文有關的,都希望能夠包括進來!然而, 限於個人智識與能力,筆者知道這幾乎是個"不可能的任務"。 因此,有任何的不足或遺漏之處,請別在意,儘量告訴筆者 Shen Chuan-Hsing


1.5. 如何學 BSD?

目前網路文件已經有幾本觀念還算完整的書, 建議先閱讀 FreeBSD 使用手冊網路農夫 來獲得一些基本的觀念, GNU/Linux 初探 也是十分值得參考的文件之一, 有了基本的觀念後,就可以進階的閱讀 FreeBSD 入魔手冊 以及 王波的 FreeBSD 大全繁體 FreeBSD handbook。 從這些文件中,就可以涵蓋從安裝到使用的觀念與用法, 對一個入門 BSD 的人應該是十分足夠的了。 如果對任何中文的相關議題有興趣可以參考拙作的 FreeBSD Chinese HOWTO

好的文件 (manpage 也算) 大多數都是原文的,需要時間慢慢看, 但是資料也最豐富、完整。 如果想要找中文的文件,您可以用 Google 搜尋: BSD 找看看有沒有寫出中文的文件。 用 Google 的時候善用 site: 這個指令,有時候您只想找中文的資料, 但是您的 keyword 只有英文,這時候您可以加 site:tw 讓它只找 *.tw 的 site。

想要找已經移植好的軟體,到 /usr/ports 底下用 make search key=keyword 或是 make search name=keyword 找。 通常 pkg-descr 會有 Website url,如果 ports 內的軟體不會用, 可以去原來的 site 翻翻看 mailing list。再不行到 Google 再找。


Chapter 2. 以 FreeBSD 建立中文 Desktop 的安裝指南

以下是筆者自己在安裝 FreeBSD 時的作法, 並不會適合所有人喜好,純粹是參考的過程。

在建立中文 Desktop 前,請先參考 Installing FreeBSD 安裝好基本的 FreeBSD 環境, 並設定好網路卡。

一般使用者的需求是要能夠在 X Window 下使用中文環境, 所以下面就是建立基本中文環境的做法。 當按照下面的中文環境設定好後,就可以使用 startx 開啟 GNOME 美化過後的 X Window,並使用滑鼠右鍵開啟選單,先執行 xcin2.5 & 後,再執行 gnome-terminal,這樣子即可在 gnome-terminal 上進行基本的中文顯示與輸入, 這對在 X Window 底下使用 Console 軟體已經十分足夠。


2.1. 輕鬆安裝FreeBSD中文桌面

如果網路還算快, FreeBSD 桌面系統的安裝是可以在三十分鐘內完成的。

在這個部分以 package 安裝的方式來進行, 這樣子可以快速的使用 FreeBSD。 在安裝完 FreeBSD 後,系統上應該沒有許多方便的套件, 而就算是光碟上有一些,大部分的狀況仍然不敷使用, 特別是本地化的套件不會放在第一片光碟中。 雖然有第三片與第四片光碟內含許多,但時常會沒包含本地化套件要用的, 畢竟現在的套件已經太多,空間不足容納。 但是目前各大學都有 mirror 完整的 packages, 這對抓取 packages 而言是個非常有利的,只要知道哪個站離你最快, 很快的就能建立新的 FreeBSD 環境。

先設定 PACKAGEROOT,這是用來抓取套件的位置, 筆者通常設定 setenv PACKAGEROOT ftp://ftp.tw.freebsd.org, 因為這是筆者認為最穩定的機器,然後就可以透過 pkg_add -r 套件名 來安裝套件,他會自動的到 pub/FreeBSD/ports/i386/packages-4.9-release/Latest/ 底下尋找套件,而且不需要知道版本,只要知道套件名稱即可, 他會自動安裝當時的最新版,中文的部分只要加上 zh-, 像是 zh-xcin

Note: 如果要讓 sysutils/portupgrade 能夠使用,則要在 pkgtools.conf 裡面加上 ENV['PACKAGEROOT'] = 'ftp://ftp.tw.FreeBSD.org', 並在使用 portupgrade 時加上 -P 或是 -PP 來利用 packages 安裝。

  1. 設定 PACKAGEROOT

    # setenv PACKAGEROOT ftp://ftp.tw.freebsd.org
    

    在大陸設定為 ftp://ftp.freebsdchina.org

  2. 調整時區,並對時。

    # tzsetup /usr/share/zoneinfo/Asia/Taipei
    # ntpdate time.stdtime.gov.tw
    

    請參考 時區的設定 一節。

  3. 安裝 x11/XFree86-4x11/wrapper

    # pkg_add -r XFree86
    

    請參考 中文 X Window 一節設定 XF86Config

  4. 安裝 x11/gnome2 Window Manager。

    # pkg_add -r gnome2
    

    設定使用 startx 時啟動:

    # echo exec gnome-session > ~/.xinitrc
    

    之後就可以用 startx 來啟動 X 了。

    # startx
    

    進去 X 後把字體改成想要的: 應用程序 -> 桌面首選項 -> 字體應用程序字體: Bitstream Vera Sans桌面字體: Bitstream Vera Serif終端字體: Bitstream Vera Sans Mono

    請參考 GNOME 的中文化 一節。

  5. 安裝 chinese/arphicttf 文鼎繁簡中文字型。

    # pkg_add -r zh-arphicttf
    

    接著編輯 /etc/XF86Config, 在 Section "Module" 區段, 加入 Load "xtt"

    Section "Module"
            :
            Load  "xtt"
    EndSection
    

    Section "Files" 區段, 加入 FontPath "/usr/X11R6/lib/X11/fonts/TrueType/"FontPath "/usr/X11R6/lib/X11/fonts/local/"

    Section "Files"
            :
            FontPath     "/usr/X11R6/lib/X11/fonts/TrueType/"
            FontPath     "/usr/X11R6/lib/X11/fonts/local/"
    EndSection
    

    請參考 輸出字型 一節。

  6. 安裝 chinese/auto-tw-l10n

    # pkg_add -r zh-auto-tw-l10n
    

    安裝完,在 /usr/local/share/skel/zh_TW.Big5/ 目錄底下會有許多的參考設定。簡體中文請另外設定。

    # cat /usr/local/share/skel/zh_TW.Big5/dot.cshrc >> ~/.cshrc
    # cat /usr/local/share/skel/zh_TW.Big5/dot.Xdefaults >> ~/.Xdefaults
    # cat /usr/local/share/skel/zh_TW.Big5/dot.gtkrc >> ~/.gtkrc.mine
         
    

    請參考 中文 locale 的設定 一節。

  7. 中文繁體輸入安裝 xcin25, 簡體中文輸入可以安裝 fcitx

    # pkg_add -r zh-xcin
    # pkg_add -r zh-fcitx
    

    接著編輯 ~/.cshrc, 加入 setenv XMODIFIERS "@im=xcin" 或是 setenv XMODIFIERS "@im=fcitx", 讓大部份軟體都可以知道您有安裝了 XIM。

    並且修改 xcinrc 的部份設定, 先 chmod 644 /usr/X11R6/etc/xcin 後, 修改其內容,把 DEFAULT_IM 改成 chewing,並且把預設的字型大小 24 改成 16。

    請參考 中文的顯示與輸入 一節。

  8. 瀏覽器就裝 www/mozilla-gtk2。 如果安裝 GNOME2 那麼這個也是預設會安裝的一部分。開啟後來改字型: Edit -> Preferences -> Appearance -> FontsFonts for: Simplified ChineseSerif: Bitstream Vera SerifSans-serif: Bitstream Vera SansCursive: Bitstream Vera SerifFantasy: Bitstream Vera SerifMonospace: Bitstream Vera Sans MonoMinimum font size: 12

    並且到 http://themes.mozdev.org/ 下載 ORbit 3+1http://themes.mozdev.org/themes/orbit.html 的網頁中, 可以選擇安裝模式或是檔案模式,安裝模式就是在 Mozilla底下點選就可以安裝, 檔案模式可以自行下載後,在透過 Mozilla 的功能來匯入。

    請參考 Mozilla 繁體中文語言包 一節。

  9. 雖然預設的 ls 能看到中文和彩色,不過有些人還是偏好使用 misc/gnuls

    # pkg_add -r gnuls
    

    安裝完後,在 ~/.cshrc 增加一行 alias ls 'gnuls --color=auto --show-control-chars', 讓 gnuls 的顏色和中文功能啟動。

    請參考 gnuls - 特殊中文檔名和目錄的顯示 一節。

  10. 當需要遠端 telnet 輸入中文時,就會需要 chinese/telnet 這樣子的軟體。

    # pkg_add -r zh-telnet
    

    然後在 ~/.cshrc 裡面加上 alias telnet zh-telnet

    請參考 telnet 的中文問題 一節。

  11. MP3 撥放器就用 chinese/xmms, 中文的曲名都可以看到。

    # pkg_add -r zh-xmms
    

    請參考 xmms - mp3 播放器 一節。

  12. Media Player,支援 vcd dvd DivX,安裝 multimedia/mplayer, 中文字幕都支援。

    # pkg_add -r mplayer
    

    請參考 mplayer 一節。

  13. PDF Reader 安裝 chinese/xpdf, 設定一下中文取代字型,就可以看到大部分的中文 PDF。

    # pkg_add -r zh-xpdf
    

    請參考 中文 PDF 的顯示 一節。

  14. 常用的有 FTP Client 有 fetchftp/wgetftp/ncftp3ftp/IglooFTP, 前三個是文字介面使用的,最後一個在 X 底下,以下是安裝:

    # pkg_add -r wget
    # pkg_add -r ncftp3
    # pkg_add -r IglooFTP
    

    由於 wget 的中文有點問題, 所以目前都用 outta-port 在安裝。

  15. MSN Messeger 使用 net/gaim 來當作慣用的 MSN Messenger。

    # pkg_add -r gaim
    

    請參考 gaim - ICQ, MSN clone 一節。


2.2. 使用其他字型作為預設字型

Last Update: 2003年 1月25日 周六 12時54分03秒 CST

不得不承認現在的文鼎字型不如細明體, 主因是系明體的內嵌小字看起來真的舒服很多, 以下介紹將預設字型設定成細明體的方式。

首先要有 mingliu.ttc, 將該字型拷貝到 /usr/local/share/fonts/TrueType/ 下,然後用 ttfm 安裝該字型:

# ttfm.sh --add xttfm /usr/local/share/fonts/TrueType/mingliu.ttc
# fc-cache -f -v /usr/X11R6/lib/X11/fonts/TrueType/

接著是根據每個軟體來修改,在 gtk1 系列的軟體,可以修改 ~/.gtkrc, 在英文字型後,第一個加上 -DynaLab-MingLiU-medium-r-normal--16-*-*-*-c-*-big5-0, 就可以了。

gtk2 系列的改 ~/.fonts.conf

        <alias>
                <family>serif</family>
                <prefer>
                        <family>Bitstream Vera Serif</family>
                        <family>PMingLiU</family>
                </prefer>
        </alias>
        <alias>
                <family>sans-serif</family>
                <prefer>
                        <family>Bitstream Vera Sans</family>
                        <family>PMingLiU</family>
                </prefer>
        </alias>
        <alias>
                <family>monospace</family>
                <prefer>
                        <family>Bitstream Vera Sans Mono</family>
                        <family>PMingLiU</family>
                </prefer>
        </alias>

WindowMaker 則是修改 ~/GNUstep/Defaults/WindowMaker, 把所有包含 Font 的設定加上 ,-DynaLab-MingLiU-medium-r-normal--16-*-*-*-c-*-big5-0 ,這邊的 16 要根據前面 Font 的字型大小設定,設定完後, 重開 X 就可以了。

Mozilla-gtk2 修改字型可以進入選單後修改, Edit -> Preference -> Appearance -> Fonts, Fonts for: 選擇 Traditional Chinese,然後把字型都選擇成 PMingLiU 就可以了。

xpdf 則是修改 /usr/X11R6/etc/xpdfrcdisplayCIDFontX Adobe-CNS1 "-dynalab-mingliu-medium-r-normal--%s-*-*-*-c-*-iso10646-1" UCS-2 就可以了。


2.3. 保持最新的 Ports Tree

Last Update: 2003年 1月27日 周一 04時50分10秒 CST

Contributed by Gea-Suan Lin

在安裝軟體前,最好先更新 Ports Tree, 建議先由安裝光碟中選擇 Ports Collection 先安裝好後, 再來更新 Ports Tree,這樣子更新的時間會比較短。

接著設定好 /etc/make.conf (若沒有則自行建立)。

SUP_UPDATE=     yes
SUP=            /usr/local/bin/cvsup
SUPFLAGS=       -g -L 2
#
# SUPHOST 代表要到哪台 CVSup,請改成離您比較近的 Server。
# cvsup[1-9].tw.FreeBSD.org
SUPHOST=        cvsup.tw.FreeBSD.org
#
# 如果您是用 -stable,請用 stable-supfile (目前的 -stable 是 4.3)
# 如果您是用 -current,請用 standard-supfile (目前的 -current 是 5.0)
SUPFILE=        /usr/share/examples/cvsup/stable-supfile
PORTSSUPFILE=   /usr/share/examples/cvsup/ports-supfile
DOCSUPFILE=     /usr/share/examples/cvsup/doc-supfile
# 國內主要的 FreeBSD distfiles mirror 站台
MASTER_SITE_BACKUP?=    \
    ftp://ftp.tw.freebsd.org/pub/FreeBSD/distfiles/${DIST_SUBDIR}/\
    ftp://ftp2.tw.freebsd.org/pub/FreeBSD/distfiles/${DIST_SUBDIR}/\
    ftp://ftp3.tw.freebsd.org/pub/FreeBSD/distfiles/${DIST_SUBDIR}/\
    ftp://ftp4.tw.freebsd.org/pub/FreeBSD/distfiles/${DIST_SUBDIR}/\
    ftp://ftp5.tw.freebsd.org/pub/FreeBSD/distfiles/${DIST_SUBDIR}/\
    ftp://ftp7.tw.freebsd.org/pub/FreeBSD/distfiles/${DIST_SUBDIR}/\
    ftp://ftp8.tw.freebsd.org/pub/FreeBSD/distfiles/${DIST_SUBDIR}/\
    ftp://ftp9.tw.freebsd.org/pub/FreeBSD/distfiles/${DIST_SUBDIR}/
MASTER_SITE_OVERRIDE?=  ${MASTER_SITE_BACKUP}

Note: 可以安裝 sysutils/fastest_cvsup 來檢察那一個 cvsup 最適合您,安裝完後修改 /usr/local/bin/fastest_cvsup, 把台灣的個數 'tw' => 3, # Taiwan 改成 'tw' => 13, # Taiwan, 然後執行 fastest_cvsup -c tw

安裝好基本的 Ports Tree 後,安裝 net/cvsup-without-gui

接著就可以進行更新了:

# cd /usr/ports
# make update

WWW: 如何用 CVSup 去更新您的 source 以及 ports


Chapter 3. 中文環境

在談中文環境前,必須先正名一下,台灣是 "Taiwan, Republic of China" 或者簡稱 "Taiwan, ROC"、"Taiwan",千萬不要用 "Taiwan, Province of China", 兩者的差異性十分巨大,不管是在民主政治、人權、言論自由等等。


3.1. 漢字概論

漢字是由部首等較小的元件組成的;可以將部首等當作建築積木用。 這些元件可作為構成漢字的基本單位用。漢字使用 214 種部首作索引。

漢字的種類很多;常見的有四種:象形(pictographs)、 指事(simple ideographs)、會意(compound ideographs)、 形聲(phonetic ideographs)。

最基本的是象形字;象形字如同是一張小圖,通常與其所表達的對象很像。 如:日、月、山、火、木、車、口。 而指事字則表達數字和方向等抽象概念或意思。 如:上、下、中、一、二、三。 象形字和指事字可以組成更複雜的字,通常其意思是各個組成部分的意思的綜合, 稱為會意字。 如:林、森、明。 形聲字佔了漢字的 90% 以上,一般至少有兩個部分; 一個是語音,另一個則是字源。 如:銅、洞。 漢字可以合併成詞組,用來表達更複雜的意思或概念。

漢字的發展是以表意的圖畫開始的,並保持字形狀與語意的連結。

Table 3-1. 不同時期的漢字總數

西元 漢字總數 參考文獻
100 9,353 說文解字
1716 47,021 康熙字典
1986 56,000 漢語大字典
1994 85,000 中華字海

兩千年來,漢字的總數增加了將近五倍。在此期間出現的漢字大多數是形聲字。


3.2. 閩南語和客家話

Contributed by KhoGuan Phuann

Last Update: 2003年10月13日 周一 02時17分56秒 CST

在台灣,漢字的使用,除了國語(Mandarin)的書寫以外, 也有用漢字寫成的閩南話(Holo)或客家話(Hakka)的文字作品 (以下敘述中的台灣話(Taiwanese)包括閩南話及客家話)。 近年來,雖然政府已開始進行母語教育,但其書面文字仍未標準化。 要完全使用漢字來充份書寫台灣話,實際上極困難。 不是要用到一些冷僻的漢字,就是無漢字可用,要創造新的漢字。 一些過去民間常用的台灣話漢字(如 个 ),Big5未收; 即使是 Unicode 4.0 也還有所遺漏。更不用說台灣話中有許多外來語, 勉強用漢字近音字來表記,非常笨拙。

有許多人主張用漢字與拚音文字混用的方式來書寫台灣話, 以解決上述的問題,也有人主張完全使用拚音文字。

台灣話的拚音文字中,歷史最長久的是「白話字」 (Pçh-öe-ji,簡寫為 POJ)。 白話字就是教會羅馬字(Church Romanization), 十九世紀從西洋來到福建及廣東傳教的長老教會牧師, 開始設計閩南話及客家話的羅馬拚音書寫系統,並傳播到台灣來。 歷經變遷,目前教會羅馬字是最多人使用的台灣話拚音文字, 並不限於教會人士。

近年台灣語文學會(Taiwan Languages and Literature Society) 以教會羅馬字為基礎加以修訂,制定了台灣語言音標方案(Taiwanese Language Phonetic Alphabet,簡寫為 TLPA)。自教育部於 1998 年公告以來,有越來越多台灣話的語文教材、民間採集、文學作品 以及研究著作採用這套音標。

自由軟體中,yudit 這個 Unicode 編輯器,配合相應的 keymap 可以很方便的輸入 POJ 或 TLPA。詳情請參考 潘科元台語 Linux 網站


3.3. 編碼標準

在電腦開始使用的時候,所有的字都只用 1byte 來儲存, 1byte 包含 8bits,每個 bits 都只能表示 on/off, 也就是 1byte 只能表示 0000 0000 到 1111 1111 的編碼範圍, 只有 256 個編碼空間,這對數萬字的中文而言,是不夠的。

中文字在目前常見的電腦上是由兩個位元組(two bytes) 所編碼組成的。 最常見的編碼方式有台灣地區所通行的 Big5 編碼,及大陸地區所使用的 GB 編碼。而且開頭的位元組幾乎都是大於 128 的數值,也就是所謂 non-ASCII 碼的範圍(ASCII 是指小於 128 的編碼)。

字集(Character Set)是一組符號或文字的組合, 而編碼(Encoding)則是將這一組符號或文字以適當的方式編入位元組中, 以便電腦能夠表示與儲存。 目前現有的字集如中文字集、英文字集、日文字集等, 而中文編碼則是選取部份或全部字集中的部分或全部字, 給予一個號碼,如 Big5 包含部分中文字集、英文字集、部分日文字集等。

接下來就是萬碼奔騰,眾多中文編碼標準的問題, 目前台灣使用的中文編碼存在許多問題,第一是中文編碼有數種 Big5、CCCII、CNS11643、Big5E、Big5+、ISO 10646、CP950、EUC-TW, 每個編碼所包含的中文字數不同,編碼方式也不相同, 而且大部分都沒有國家標準規格, 第二是常用的 Big5 編碼字數不足。

雖然常用的 Big5 已經使用 2bytes 來表示中文字,但是 2bytes = 16bits = 2^16 = 65536 個編碼空間, 以 Big5 的標準而言,為了要和 ASCII 能夠相容,最多只能使用兩萬多字 ([0x80-0xFE][0x40-0x7E,0xA1-0xFE] = 127*190 = 24,130), 現存的中文字最少在七萬以上,造成許多字在 Big5 的系統下, 無法使用。在加上中文標準繁多,卻又沒有最後的國家標準規格, 各家廠商所實做產品也就未必相容。 最明顯的例子就是日文平假片假名, 在這些中文編碼中並不是每個都包含, 當遇到所謂的「Big5日文」時,就會產生許多問題。


3.4. ASCII

ASCII 分成兩個區域,0x00 到 0x1F 給控制字元用,共十六個位置。 0x20 到 0x7F 給一般的圖形字元用(大小寫英文、數字和符號), 有 94 個位置,0x20 和 0x7F 分別是 SPACE 和 DELETE。


3.5. ISO8859-1

又稱為 Latin-1,0x00 到 0x1F 給控制字元用,共十六個位置。 0x20 到 0x7F 給一般的圖形字元用(大小寫英文、數字和符號), 0xA0 到 0xFF 為 Latin-1 額外加的部份, 由於使用了八位元,讓目前許多僅支援 ISO8859-1 卻不支援 Big5 的, 可以暫時的使用而不會有太多的問題,像是 vi, write, talk, talk, finger, mail 等等的 FreeBSD 內建程式可以顯示中文, 因為這些程式在處理時不會把 Latin-1 額外加的部份過濾掉, 中文的顯示也就沒有問題。


3.6. Big5

Big5 是在 CCCII 不為政府單位採納, 國家頒布的中文標準碼又不堪用的情況下, 在民國 73 年,由台北市電腦公會 主導,聯合了十三家業者, 共同制定,又稱為 Big5_1984 (包括 5401 個常用字、7652 個次常用字、以及 441 個各式符號)。 Big5 的字符空間是個非連續的 94x157 矩陣,其容量為 14,758 位。

Big5_ETen 為倚天中文在原本的 Big5 碼上, 增加了日文、俄文、輸入法特殊符號、七個擴充字、以及表格符號區。

CP950 是微軟在原本的 Big5 碼上, 全名是 Microsoft Windows Codepage 950 (Traditional Chinese Big5), 增加了七個擴充字、以及表格符號區。

如不去考慮特殊符號,及後來的七個擴充字, 將所有的字分成兩大群: 常用字區與次常用字區, 每一個字區分別用筆畫來排序, 同一個筆畫的字,依部首來排。

目前主推的是 Big5_ETen,每個字由兩個位元組(2 bytes)組成, 其第一位元組編碼範圍為 0xA1-0xF9, 第二位元組編碼範圍為 0x40-0x7E 與 0xA1-0xFE, 總計收入 13868 個字 (包括 5401 個常用字、7652 個次常用字、7 個擴充字、以及 808 個各式符號) ,其中可以大致劃分為以下幾個字區:

Note: 由於 CNS11643-1992 初期的不堪用, Big5 雖然不是國家標準,但是在台灣比 CNS11643-1992 的國家規格用的更廣。換句話說,Big5 是台灣的業界標準 (de facto standard)。

Table 3-2. Big5 字區與編碼範圍

第一位元組 第二位元組 字區 制定
A1-A2 40-7E, A1-FE 各種符號區 1984
A3 40-7E, A1-BF 各種符號區 (包括標點符號、ASCII 全形符號、注音符號等) 1984
A3 E1 歐元符號 CP950
A4-C5 40-7E, A1-FE 常用字區 1984
C6 40-7E 常用字區 1984
C6 A1-FE 罕用符號區 倚天
C7 40-7E, A1-FE 罕用符號區 (包括日文、俄文等) 倚天
C8 40-7E, A1-D3 罕用符號區 (包括俄文、輸入法特殊符號等) 倚天
C9-F8 40-7E, A1-FE 次常用字區 1984
F9 40-7E, A1-D5 次常用字區 1984
F9 D6-DC 七個擴充字 倚天
F9 DD-FE 表格符號區 倚天

Table 3-3. 七個擴充字

擴充字 Big5 碼 Unicode 碼 Big5_1984 的同義字
0xF9D6 0x88CF
0xF9D7 0x92B9
0xF9D8 0x7CA7
0xF9D9 0x58BB
0xF9DA 0x6052
0xF9DB 0x7881
0xF9DC 0x5AFA

Big5 有兩個重複編碼的漢字,分別是 A461, C94a 和 DCD1, DDFC, CNS11643-1992 刪除了第二次編碼的漢字(C94A 和 DDFC)。

Big5 最大的問題是字數不足。政府部分單位雖然有交換造字區, 卻沒有把新的標準制定出來並大力推廣,雖然相繼出現 Big5+, Big5E,但是都未普及到業界,而且相關的資源也是無法公開取得的, 像是與 Unicode 的轉碼表,範例字型等,造成國內中文的用字無法推展。


3.7. CNS11643

CNS11643 中文標準交換碼, 一般簡稱 CNS 碼或 CNS11643 , 因中央標準局 公佈及修訂之先後而有二個版本,一般稱為 CNS11643-1986 版(1986公告版)及 CNS11643-1992 版(1992年修訂版), 此二個版本之差異僅在於其所編定之字數不同。 75 年公告之 CNS11643-1986 定義 13,051個漢字(去掉 Big5 多出兩個漢字), 名稱為「通用漢字標準交換碼」 81 年修訂版 CNS11643-1992 擴編為48,027 個漢字, 擴充後修訂名稱為「中文標準交換碼」。

CNS11643 以2個位元組 (byte)為中文碼編碼單位。 字碼中之 00 至 20 以及 7F 均予避開, 則 7bit 字碼集共有 94 個編碼位置, 兩個位元組共可編 8,836 個字碼,訂為一字面。 依字之使用頻率編排於各字面。 依先筆畫後部首排列順序編碼。

CNS11643-1992 可用的編碼法有:ISO-2022-CN、ISO-2022-CN-EXT、 EUC-TW。從某角度來看,可以把 Big5 看成是 CNS11643-1992 第一和第二字面的一種編碼法, 因為 CNS11643 直接取用 Big5 的第一和第二級漢字區, 作為 CNS11643 的第一和第二字面。

目前現有的 CNS11643 七個字面的字型可以在 x11-fonts/intlfonts 中找到, 有 16、24、40 點字等字體大小可以取用。

Table 3-4. ISO-2022-CN 的規格 -1,2

字集 十六進位 圖形字符(ASCII)
CNS 11643-1992 第 1 字面 1B 24 29 47 <ESC> $ ) G
CNS 11643-1992 第 2 字面 1B 24 2A 48 <ESC> $ * H
CNS 11643-1992 第 3 字面 1B 24 2B 49 <ESC> $ + I
CNS 11643-1992 第 4 字面 1B 24 2B 4A <ESC> $ + J
CNS 11643-1992 第 5 字面 1B 24 2B 4B <ESC> $ + K
CNS 11643-1992 第 6 字面 1B 24 2B 4C <ESC> $ + L
CNS 11643-1992 第 7 字面 1B 24 2B 4D <ESC> $ + M
One-byte shift 0F  
Two-byte shift 0E  

Table 3-5. ISO-2022-CN 的規格 -3

移位種類 十六進位 字集
SO 0E CNS 11643-1992 第 1 字面
SS2 1B 4E CNS 11643-1992 第 2 字面
SS3 1B 4F CNS 11643-1992 第 3 至第 7 字面

Table 3-6. 台灣漢字字集規則

字集 公佈時間 第一級 第二級 附加漢字 符號
CCCII 1980 75684      
Big5 1984 5401 7652   441
Big5_ETen 1985 5401 7652 7 808
CNS11643 1992 5401 7650 34976 684

CNS11643 雖然是國家標準,但是如其名的只是個中文標準標換碼, 雖然國內有 文鼎科技 推出 ATE-EUC之政府應用 來給政府的戶政機構使用, 但是由於 CNS11643 的相關資料獲取不易, 加上業界使用 Big5 成習,因此整個中文的編碼環境陷入膠著狀態。

WWW: http://www.cns11643.gov.tw/


3.8. CCCII

CCCII(Chinese Character Code for Information Interchange: 中文資訊交換碼),是精心設計的台灣字集規則之一。 該規則是台灣的國字整理小組開發的。 第一版頒布於1980年。

CCCII總共有16層,每一層都有六個連在一起的94x94字面 (共有94個字面)。 這樣子就產生了一個94x94x94的字碼空間(皆為 0x21-0x7E 的編碼範圍)。 字符按其種類收編於不同的層。

CCCII的漢字先按部首,後按總筆劃數排列(昇序)。

CCCII第一層用於基本漢字集合,包括 4808 常用漢字, 17032 次常用漢字,20583 其他漢字。 剩下的層用於第一層的異體字。

最新的CCCII正式版頒布於1987年,共收編了53,940個字符。 下版(1989年)將收編75,684個字符(44,167個正體字和31,517個異體字)。

目前CCCII的實作有:直接使用CCCII編碼、ISO-2022-CN、 CCCII-FT、 以及永麟中文碼等四種。

Table 3-7. CCCII 第一層的構造

字面 字符 內容
1 1 0 保留給控制碼
1 2 56 數學符號
1 3 94 ASCII
1 4-10 0 未編排
1 11 35 中文標點符號
1 12-14 214 繁體部首
1 15 78 41中文數字, 37拼音符號, 4音調符號
1 16-67 4808 常用漢字(213021~21637E)
1-3 68-64 17032 次常用漢字(216421~23607E)
3-6 65-5 20583 其他漢字(236121-262543)
6 6-94 0 未編排

目前 CCCII 只有圖書館在使用,但並不是直接用 CCCII 的編碼, 而是有經過轉換,而完整的轉換方式也是不得而知。 不過國內最近有個計畫 中文資訊交換碼(CCCII) 正在籌劃相關的議題, 希望能夠帶動全字集中文電腦的發展。


3.9. EUC-TW

EUC-TW 將 CNS11643-1992 的 16 進位加上 0x8080。 第二字面轉換 8E A2,第三字面轉換 8E A3,第四字面轉換 8E A4, 第五字面轉換 8E A5,第五字面轉換 8E A6,第七字面轉換 8E A7。

該編碼目前不知道有什麼環境正在使用,歡迎來信告知。

Table 3-8. 10月18日

編碼 表示法 解釋
CCCII 21 23 31 21 23 30 21 43 5B 21 23 31 21 23 38 21 42 73 212331:1 212330:0 21435B:月 212331:1 212338:8 214273:日
Big5 31 30 A4 EB 31 38 A4 E9 31:1 30:0 A4EB:月 31:1 38:8 A4E9:日
CNS11643-1992 1B 24 29 47 31 30 0E 45 4C 0F 31 38 0E 45 4A 0F 1B242947:(第一字面) 31:1 30:0 0E:(漢字) 454C:月 0F:(ASCII) 31:1 38:8 0E:(漢字) 454A:日 0F:(結束)
EUC-TW 31 30 C5 CC 31 38 C5 CA 31:1 30:0 C5CC:月 31:1 38:8 C5CA:日

3.10. GB

在中國,中文信息編碼由政府負責制定並監督實施。 這是為了保證對於所有的系統中文的編碼都是一致的,能夠互相進行操作。 從計算機的應用開始,已經頒布了多種中文信息編碼標準, 常用的是 GB2312-1980,GB12345,GB13000(GBK),以及最新標準 18030。 值得一提的是,最新的 GB18030 標準將要作為強制標準實行,所有不支持 GB18030 標準的軟體將不能作為產品的出售。

從 GB2312-1980 編碼開始,漢字都是採用雙字節編碼。 為了與系統中基本的 ASCII 字符集區分開, 所有漢字編碼的每個字節的第一位元都是1, 這個部分與繁體中文相同。例如:"啊" 字的編碼為 0xB0A1。

Table 3-9. GB 的漢字編碼規則

編碼 第一個字節 第二個字節 第三個字節 第四個字節
GB2312 0xB0 - 0xF7 0xA0 - 0xFE    
GBK 0x81 - 0xFE 0x40 - 0xFE    
GB18030 的雙字節 0x81 - 0xFE 0x40 - 0x7E, 0x80 - 0xFE    
GB18030 的四字節 0x81 - 0xFE 0x30 - 0x39 0x81 - 0xFE 0x30 - 0x39

3.11. Unicode/ISO 10646

Unicode (Universal Multiple Octet Coded Character Set), Unicode 國際標準組織於1984年4月成立 IOS / IEC JTC1 / SC2 / WG2工作組,針對各國文字、 符號進行統一性編碼,1991年美國跨國公司成立Unicode Consortium, 並於1991年10月與WG2達成協議,採用同一編碼字集 。 目前Unicode是採用16 bit之編碼架構,其字集內容與ISO 10646之 BMP(Basic Multilingual Plane)相同。

Unicode (Unicode Consortium)並於1992年6月通過 DIS(Draft International Standard),目前版本為Unicode v2.0 於1996年公佈, 內容包含符號6811、 漢字20902、韓文拼音11172、 造字區6400,保留20249共65534個碼位 。

目前碼位空間為 U+0000 到 U+10FFFF,共有 1,114,112 個空間。

漢字計算大略如下:

Big5碼 = 13053 繁體漢字, GB2312碼 = 6763 簡體漢字, CJK = 20902 簡繁漢字 = Unicode 1.0 = Big5 + GB2312, GBK = CJK 20902 + 101 漢字造字 = 21003 漢字, Unicode 3.0 = CJK 20902 + Unicode Ext-A 6582 漢字 = 27484 漢字, GB18030 = GBK + Unicode Ext-A 漢字, Unicode 3.1 = Unicode 3.0 + Unicode Ext-B 42711 漢字 = 70205 漢字 = Super CJK 1.4, Unicode Ext-C 24365 漢字.

目前最適合的字型是 ming_uni.ttf, 為 Unicode 3.0 加上四千多香港造字, 由於 Unicode Ext-A 已收錄兩千多個香港造字, 故該字體有 27484 + 千餘個香港字 = 29000++ 漢字.

當國內的政府不夠積極的時候, 許多人開始傾向於使用 UTF-8/UCS-2 來作為交換碼, 甚至是當做基本的內碼。 畢竟他們能夠顯示的字元遠遠比常用的 Big5 還要多, 也同時解決了多國語言共存的問題。 目前如果要使用 zh_TW.UTF-8, 可以安裝 misc/utf8locale

WWW: ISO 10646 HK

WWW: Various Versions of CJK

WWW: Unicode Home Page


3.12. 基本中文環境的要件

先讓我們一起來想一想, 一個基礎中文平台要能夠做到那些事情, 不妨就以編輯一份文件為例吧(像我現在在這邊寫稿一樣), 我們希望開啟的程式可以有友善的介面,有中文的選單跟說明(中文訊息), 還要有慣用的中文輸入法可以把中文打進去(輸入), 打字進去以後必須可以看到輸入的結果(顯示), 打字出錯了還要可以修改才行,必要的時後還得可以改變字型等等的(處理), 文章打完了,要能夠順利的把結果印出來(列印); 從這一個例子裡面我們就可以歸納出一個基本中文環境, 應該要可以做到下面這幾件事情:

  • 中文的訊息

  • 中文的顯示

  • 中文的輸入

  • 中文的列印

  • 中文的處理

上面的列表就是我們認為一個基本中文環境所要滿足的要件, 也是我們在評估一個系統中文支援優劣時所用的基準, 其實所謂的"中文化",代表的就是在作為基礎的英文版作業系統上面, 做出修正的工作,目的不外是要能夠滿足上面所提到的這些要件罷了, 這個列表的順序剛好是依照程式設計加以支援的困難程度排出來的, 順序是從簡單到困難;提供中文的訊息跟介面所牽涉到的大多只是翻譯的工作, 最為簡單,在顯示時要考慮到字型的搭配問題, 在輸入時要有一個程式之間共用的輸入介面,這些就比較困難, 而列印不只要作到應用程式跟列印伺服程式之間的整合, 還需要有產生大點數美觀字體的能力,這件工作牽涉的問題更加複雜了, 這幾點裡面要讓應用程式處理中文是最困難的一部分, 例如中文正規表示法、中文字串搜尋等等,都是目前還難以解決的課題。

那麼,在目前的 FreeBSD 環境底下, 要用甚麼方法才可以讓系統支援上面提到的這些基本要件呢?


3.13. 國際化與中文化

要讓系統支援中文,可能的解決方案不出三種, 一是使用外掛式的中文系統,二是撰寫獨立的中文程式, 三是利用系統上提供的國際化架構來支援。所謂的外掛式中文環境, 指的是如同 DOS 底下的倚天中文或者 Windows 底下的雙橋中文這樣的系統, 在 FreeBSD 系統底下,外掛式的中文環境可以藉著 LD_PRELOAD 的機制來達成,只要設定 LD_PRELOAD 這個環境變數, 適時的指到提供中文支援的動態函式庫去,就可以在程式執行時, 動態的用支援中文的函式來替換掉原本不支援中文的函式, 結果就可以讓不支援中文的程式變得可以顯示中文跟接受中文輸入了, 例如 xa+cv 或者是在 TurboLinux 裡面使用的 zhWinPro 都是屬於這類的程式。 利用這種方式來提供中文的支援很簡單,很靈活, 也不需要去修改程式的原始碼並重新編譯, 可是這個方法卻沒辦法讓應用程式對中文作正確的"處理", 常見的例子是雖然加上了外掛的中文系統, 可是編輯文字時在中文字上面按一次刪除鍵卻還是只能刪除半個中文, 這是因為在應用程式內部仍然是把一個中文字當成兩個英文字來看待, 而這顯然是不正確的,此外這個方式也不支援跟函式庫作靜態連結的程式, 還控會造成系統的不穩定,因此大家已經理解到這個方式無法解決根本問題, 漸漸的捨棄這種外掛的方式,而用其他的方法提供中文支援了。

第二種方式是修改程式,直接讓每個程式都支援中文的使用, 這種是最簡單也是最困難的方法,說它簡單,因為這件工作很直接, FreeBSD 底下的程式又大多數都可以拿到程式的原始碼, 只要對這些原始碼作修正,加入支援中文的部份,就可以支援中文的使用囉, 例如很多人使用的中文 cpine 郵件程式就是用英文版 pine 的原始碼改出來的, 其他如 cxterm 程式或者支援多種語言的 emacs 等等程式都是由應用程式自行提供中文支援的, 這些程式對中文的支援很好,也都受到了大家的歡迎愛用,可是, 使用者一旦離開這些有提供中文支援的程式以後就無法用中文了, 一個 FreeBSD 套件少說有五六百個程式套件, 想要全面的中文化,必須要一個一個完整的對這些程式做出修改才行, 這件工作在人力跟物力上都會是一個天文數字的投資,是不可能的事情, 所以我們前面說這也是最困難的方法 :) 況且,因為編碼系統不一樣, 這些程式拿到日本就要改一次日文版,拿到韓國也要再改一次韓文版, 這種作法會使得資源重複浪費的部份十分嚴重,由此可見, 靠獨立的程式來提供中文環境並不是個聰明的作法, 必須要有更好的方式才行。

那麼甚麼才是這個更好的方式呢? "國際化"可能是目前我們找得到的最好解答, 國際化的英文名稱是 InternationalizatioN,這個英文單字的第一個字母 I 與最後一個字母 N 之間有 18 個字母,所以也被簡稱為 I18N。 I18N 是一種觀念跟目標,這個想法是要提供一個架構, 讓同樣的程式碼可以適用在各種語文習慣跟編碼系統上面, 程式設計人員只要利用這個架構的機制跟準則撰寫應用程式, 就可以在不需重新編譯程式的情況下,自然的支援各式各樣的語言, 不過為了要達成這樣的目標,作業系統必須提供一定程度的支援, 特別是在各種的程式庫裡面都得有支援 I18N 的 設計才可以, 這邊特別重要的就屬 C 程式庫以及 X 視窗系統的國際化設計了。 過去,FreeBSD 上的 C 程式庫跟 X 對國際化的支援都不完整, 整個基礎環境還不成熟,所以多數的程式並沒有照著 I18N 的標準來撰寫, 導致中文化的問題困難重重,這個現象在這一年來已經有了大幅的改善, 目前國際上大家寫程式的時候已經有支援 I18N 的普遍共識了, 主流的程式也都漸漸提供了 I18N 的支援,利用標準的 FreeBSD 國際化架構來支援中文還是要改程式,不過這個改法是國際的主流, 也可以保證投資可以有最大的獲益,所以我們認為這才是建構中文環境的正途, 在後續的文章裡面我們將會一一跟大家介紹目前 FreeBSD 底下 I18N 環境的實作方法,以及設計 I18N 程式所該注意的事項。

一般國際化架構設計的基本原則, 是把程式處理會跟語文編碼相關的部份獨立出來, 這些資料不只是編碼系統的定義,還包括該語文下的一些使用習慣, 例如數字、日期、排序、貨幣的格式,以及翻譯的訊息等等... 這些跟語文環境有相關的資料,我們稱之為 "區域環境資料庫" (locale database,LOCALization Environment database), 把這些資料分離出來以後,就可以定義一個跟語文編碼無關的介面, 給程式設計師使用,讓程式設計人員在設計程式時不必考慮, 對特定語文環境提供支援的細腹A寫出來的程式就可以不限於支援特定語言, 而是在程式執行的時候才依使用者的選擇的區域環境 (locale) 聯繫到不同的資料庫,進而提供該語文的支援。

I18N 只是提供可能用來支援中文的大架構,要能夠使用中文, 還必須要在這個架構裡面加入對中文語文編碼的支援才可以, 這個在國際化架構之下加入對某種特定語文支援的動作稱為"區域化", 英文稱為 LocalizatioN,因為 L 跟 N 之間有 10 個英文字母, 也常被簡稱為 L10N,一般的 "中文化" 是泛指為應用程式加上中文支援的過程,不過我們這邊提到的中文化, 事實上就是在國際化架構下面加入中文區域化支援的工作; 就目前的FreeBSD 環境而言, 當前在 FreeBSD 上用來提供中文支援的國際化架構可說是已經大致完備, 底層程式庫的中文區域化工作也都大致完成了, 在這個架構之上已經可以提供一個不錯的中文環境可以用了,說起來, 我們能有今日的中文環境可用,實在要感謝這些國際性程式開發組織(XFree86) 有心重視亞洲語系使用者的需求,此外, 長久以來許許多多網路上自由軟體作者的貢獻也是功不可沒, 正就是因為有這許多前人不計個人報酬的努力, 我們才能享受當前的中文環境。


3.14. 可能的問題

許多程式由於各式各樣的原因, 並未考慮到輸入的資料可能是 non-ASCII 碼的問題。 它往往假設了它所要處理的資料都是 ASCII 碼,更糟糕的是,當它遇到 non-ASCII 碼時,常常假設它不存在,而將它的第八個位元截去! 這是所謂的 8-bit clean 問題。

例如,您的 telnet 程式 總是認為您輸入的都是七位元的 ASCII 碼。當您輸入中文時, 每每將第八位元砍掉,所以都變成亂碼。

網路上的通訊程式也常常只能傳輸七位元的資料。較早期的 sendmail 程式就是惡名昭彰的例子。 sendmail 只能接送含七位元的信件, 導致我們在傳送中文信件時,必須採用各式各樣奇怪的 編碼格式 (如 uuencode,base64,QP 等),這往往又為收信者帶來很大的困擾! (我常在想如果當初電子郵件的創造者能多一點點的遠見, 我們今天就會少許多的問題!)

在網路上這個問題顯得更為複雜。 即使您和您的收信人的機器都已經安裝了可以處理中文信件的 sendmail 程式 ,對方仍有可能收到亂碼信件。 因為這封信在到達對方手中前可能經過好多部主機, 如果其中一部機器的 sendmail 將第八位元截去,事情就完了! 對於 client/server 架構的程式,問題可能出在 client 端, 也可能是在 server 端,或是雙方都有。

除了無法處理 non-ASCII 碼資料的問題之外, 應用程式無法辨識中文編碼也是一大問題。也就是,很多程式 (即使能正確處理八位元的資料)都將一個中文字視為兩個獨立的位元組。 這在許多情況下不會有什麼不好,但在某些場合下就顯得很糟!

最顯然的例子,即使您能正確的輸入中文,可是當您按下倒退鍵 (backspace)時,往往只倒後了一個位元組而將一個好好的中文字截成兩半, 剩下的那半當然就成了亂碼。還有, 文書編輯器可能在一個中文字中間換行而導致出現亂碼, 或是將一行很長的中文句子當作一個很長的英文字母而不換行, 使得畫面變得很難看。

還有更糟的!某些中文字所含的特殊內碼對某些應用程式具有特別的意義, 這導致程式遇到這些內碼時將產生嚴重的錯誤,或是當掉。

下面將試著為這些問題提出一些解決之道,但是這仍是片面的, 不完全的,而且不能令人滿意。 也許只有當所有的軟體都能為中文量身打造時問題才可能真正的解決。

話雖如此,愈來愈多的程式在設計上已經注意到國際化的問題, 例如現在大部分主機的 sendmail 程式都已經能正確處理 8-bit 的信件 --- 因為不僅僅是傳輸中文信件需要 8-bit, 現在很多的多媒體郵件也都需要用 8-bit 傳送。 很多軟體已經完全不需修改, 或者只要開啟一些特殊的選項,就能使用中文。 同時也有愈來愈多人正在為軟體的中文化而努力。且讓我們拭目以待。


3.15. 什麼是 locale ?

locale 是一組 C 程式語言處理自然語言(文字)的程式介面, 也可以簡單的說,locale 就是一組 [地區性語言] 的資訊。 由國家語言和各地習俗影響所決定的慣例,或代表一個地理區域的定義所組成, 這些慣例包含文字、日期、數字、貨幣格式和排序等等。這代表著 locale 可讓程式的輸出可以直接反應地方區域性的文化。C 語言的 locale 定義,分為下列各大類:

  • LC_ALL 代表所有的 Locale

  • LC_CTYPE 字元定義 (包含字元分類與轉換規則)

  • LC_MESSAGES 訊息顯示

  • LC_TIME 時間格式

  • LC_NUMERIC 數字格式

  • LC_MONETARY 貨幣格式

  • LC_COLLATE 字母順序與特殊字元比較

其中與一般使用者息息相關的,是字元定義 (LC_CTYPE) 與訊息顯示 (LC_MESSAGES)。LC_CTYPE 直接關係到某些字元或內碼在目前的 locale 下是否可列印?要如何轉換字碼?對應到哪一個字?.... 等等。LC_MESSAGES 則關係到軟體的訊息輸出是不是符合地域性,例如 :我們需要的是中文。而一個真正完整支援 locale 系統, 是當使用者在 shell prompt 下,直接設好環境變數後, 則馬上就能切換到那個語言了。例如:

% setenv LC_CTYPE zh_TW.Big5

locale 命名規則:語言_地區名.字元編碼名稱

設定 Locale 的字元定義為台灣地區的 Big5 繁體中文碼定義, 有了正確的 locale 的定義後,使得任何地區的語文,只要在加入適當的 locale data 之後,C Library 就能正確地處理軟體顯示訊息, 而我們使用的 [中文] 當然也不例外,而目前常用的中文 locale data 就是 zh_TW.Big5,代表的就是中文語系(zh)台灣地區(TW) 使用Big5編碼系統(Big5)。


Chapter 4. 中文 X Window

X Window 系統是 UNIX 下強而有力的圖形環境。 XFree86 由 MIT X Window 系統 X11R6 改版而來,它是開放源碼的。

完整中文化 X Window System:

建立 I18N 的環境:

基本上只要安裝完 X Window 後,再安裝中文字型, 這樣子就可以看到 X Window 的中文了,而再安裝 xcin2.5 就可以輸入中文, 剩下的就選自己所偏好的軟體來安裝囉。


4.1. XFree86-4

安裝 x11/XFree86-4

先用 XFree86 -configure 產生 XF86Config.new,然後用 XFree86 -xf86config XF86Config.new 來測試這個檔案能不能正常的運作,如果可以的話,就 mv XF86Config.new /etc/X11/XF86config, 然後依照以下的方式繼續做下去。

# XFree86 -configure
# mv XF86Config.new /etc/XF86Config

由於筆者通常使用三鍵滑鼠,所以會設定一下, 接著編輯 /etc/XF86Config, 在 Section "InputDevice" 區段, 加入 Option "ZAxisMapping" "4 5"。 並且用 /stand/sysinstall 來設定好 moused, 以便讓 /dev/sysmouse 有作用。 Configure → Mouse → Enable

Section "InputDevice"
        Identifier  "Mouse0"
        Driver      "mouse"
        Option      "Protocol" "MouseSystems"
        Option      "Device" "/dev/sysmouse"
        Option      "ZAxisMapping" "4 5"
EndSection

通常都需要指定 HorizSync 和 VertSync 才能讓解析度設定的高一點, 在 Section "Monitor" 區段, 加入 HorizSync 31.5 - 57.0VertRefresh 50.0 - 100.0

Section "Monitor"
        Identifier   "Monitor0"
        VendorName   "Monitor Vendor"
        ModelName    "Monitor Model" 
        HorizSync    31.5 - 57.0
        VertRefresh  50.0 - 100.0
EndSection

筆者通常都用 16bpp 和 1024x768 的螢幕, 在 Section "Screen" 區段, 加入 DefaultDepth 16,並在 SubSection "Display" 中, Depth 16 的地方加上 Modes "1024x768"

Section "Screen"
        Identifier "Screen0"
        Device     "Card0"  
        Monitor    "Monitor0"
        DefaultDepth    16   
        SubSection "Display" 
                Depth     16 
                Modes     "1024x768"
        EndSubSection
EndSection

WWW: http://www.xfree86.org/


4.2. 使用字型

要在 X 底下看中文,就必須先設定好字型, 目前 X 取用字型主要有兩種方式, 一種是傳統的 X11 Core Font, 要使用 TrueType 字型,就要利用 X 內建的 freetype 模組或是 xtt 模組來讀取字型, 或是直接取用 Font Server 的字型, 另一種則是目前流行的 fontconfig, 詳細的情況可以參考 Fonts in XFree86

通常筆者都會同時設定這兩種字型取用的方式, 雖然 fontconfig 在 KDE3 與 GNOME2 廣泛的被使用, 但是仍然有許多軟體只支援 X11 Core Font 的取用方式, 兩者都加以設定可以避免許多問題, 如果確定您所使用的所有軟體都支援 fontconfig, 那麼只設定 fontconfig 也是可以的。

Hinting 是字型額外的資訊,他告訴 Render 該如何處理向量字型的縮放, 使得小字的時候能夠好看,但是 Hinting 是非常費時費力的工作, 有良好 Hinting 的字型不多。

由於 TrueType 的 hinting 有專利,freetype 提供了 autohint, 但是反而在中文字上容易造成反效果。

Anti-alias 把未滿一格的部分用灰階補點。


4.2.1. X11 Core Font - XLFD

Last Update: 2003年 1月20日 周一 10時25分06秒 CST

X11 Core Font 以 XLFD 的格式來讓選擇字型,以下稍微介紹一下:

-kc-fixed-medium-r-normal-*-16-160-72-72-c-160-big5-0

廠商名稱(Foundry):字型提供廠商,如 Arphic(文鼎)、kc(國喬)。

種類(Family):所屬的類型。

粗細度(Weight):粗細程度,如 medium(適中)、bold(粗體)。

傾斜度(Slant):傾斜程度,如 r(不傾斜)、o(傾斜)、 i(傾斜並且具有較奇特變化)。

寬度(Setwidth):如 normal(正常)、condensed(最窄)、 semicondensed(稍窄)。

附加型式(Add Style):額外的格式,如 sans(無)、medium(適中)。 目前大部分字體均已不用此欄位。

像素大小(Pixels):用像素來表示字體大小。

點數大小(Points):用點數來表示字體大小。10 個點數等於 1 個像素。

水平解析度(Resolution X):每英吋的點數,如 72、75、100。

垂直解析度(Resolution Y):每英吋的點數,如 72、75、100。

字距(Spacing):間隔,如 Proportional(依比例大小)、 Monospace(等寬字)、 Charcell(等寬等高字)。

平均寬度(Average Width):以點數為單位。

字型集(Character Registry and Charset Encoding):如 big5-0、iso8859-1。

但是 X11 Core Font 在反鋸齒上的支援不佳、 使用 CJK TrueType 的效率不好, 特別是目前常用的 Unicode 字型在效率和記憶體的使用都會是很大的問題, 因此需要較現代化的系統 Xft/fontconfig。


4.2.2. xtt Module

xtt 模組目前由 After X-TT Project 維護中。 要使用 xtt Module 必須修改 XF86Config, 幫他加上新的 FontPath,因為 ports 會將中文TrueType安裝到 /usr/X11R6/lib/X11/fonts/TrueType/, 而且把中文PCF 安裝到 /usr/X11R6/lib/X11/fonts/local/

Section "Files"
        :
        :
        FontPath     "/usr/X11R6/lib/X11/fonts/TrueType/"
        FontPath     "/usr/X11R6/lib/X11/fonts/local/"
EndSection

以及讓 X 去使用 xtt 模組, 如果在模組區發現已經有設定 Load "freetype", 請將該行刪除,因為這兩個模組是互斥的:

Section "Module"
        :
        :
        Load  "xtt"
EndSection

最後再透過 ttfm 來安裝新字體就可以了。

是不是一定要 xtt 模組才能使用中文 TrueType?答案不是。 freetype 模組也可以用來處理中文,但是兩者只能選一個, 而 xtt 是專為 CJKV 字型而設計產生的 TrueType 處理模組, 其中 TTCap 選項所提供的粗體、斜體、粗斜體, 以及其他功能是中文 TrueType 所不能或缺的。

對 TTCap 而言,他的語法是擴充 fonts.dir 來提供更多的選項,例如:

ds=y:ai=0.3:bsmi00lp.ttf -Arphic-AR PL Mingti2L Big5-bold-i-normal--0-0-0-0-c-0-iso10646-1

最前面的 ds=y:ai=0.3: 就是 X-TT 擴充的部份。 在這個例子中,文鼎明體的名稱是 bsmi00lp.ttf, ds=y(Double Strike) 使用粗體, ai=0.3(Automatic Italic) 使用斜體, 所以相對應的產生 -bold-i- 的文鼎明體粗斜體字型。 另外,最後面的 iso10646-1 就是 Unicode 字型, 目前文鼎字型在這個部分的支持並不是很好。

常用的還有 fn=INTEGER 來指定 TrueType Collection(.ttc) 檔案的 face 號碼, 像是目前處理 mingliu 就是跳過固定寬的細明體, 而改採用直接指定變動寬的新細明體 fn=1

Note: 如果使用 freetype 模組,載入字型和顯示的的速度會比較快, 可以透過 x11-fonts/ttmkfdir 來產生簡單的 fonts.dir 和用 mkfontdir -e 來產生 encodings.dir

# cd /usr/X11R6/lib/X11/fonts/TrueType
# ttfmkdir & fonts.dir

4.2.3. fontconfig

fontconfig 目前由 freedesktop.org 維護中。 Fontconfig 提供 font matching 的機制, 讓使用的程式不必自己實作字型選取的方法, 應用程式利用 Fontconfig 所得到的字型名稱去畫字。

fontconfig 安裝完後的設定檔在 /usr/X11R6/etc/fonts/fonts.conf, 它是個 xml 格式的檔案,一般不建議直接更改它,如果要加東西則是另外寫在 ~/.fonts.conf

使用 fontconfig 只需要將字型檔拷貝到 fonts.conf 所指定的目錄下(<dir>/usr/X11R6/lib/X11/fonts</dir>), 然後執行 fc-cache -f -v 來建立字型資料庫, 也可以用 fc-list 來取得已經建立的資料。

# fc-cache -f -v
      :
      fc-cache: "/usr/X11R6/lib/X11/fonts/TrueType": caching, 8 fonts, 0 dirs
      :
fc-cache: "/root/.fonts": no such directory, skipping
fc-cache: succeeded
# fc-list | grep Big5
AR PL KaitiM Big5:style=Regular
AR PL Mingti2L Big5:style=Reguler

但是在使用 fontconfig 時,中文方面還有些比較特殊的需求。 例如字型顯示破碎的問題,必須修改 freetype2 將 BYTECODE INTERPRETER 給啟用。 本身沒有粗體、粗斜體的設計。字距過大是因為某些字型是固定字距, 因為含有 CJK 字型,系統以 CJK 字型的寬度作為英數字型的寬度。 字型名稱(family)目前不支援中文的使用。


4.3. 中文 locale 的設定

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

zh_TW.Big5 是目前台灣內廣泛使用的 locale, zh 是華語(Chinese),1998 年 ISO639 裡面以兩個英文字母來代表語言編碼, 這個縮寫據筆者所知沒有任何含義,而 TW 代表的就是台灣(Taiwan) 地區的縮寫,最後的 Big5 則是編碼方式。

locale 設定檔在編譯後, 則是儲存在 /usr/share/locale/ 目錄下, 以 zh_TW.Big5 locale 為例,該目錄中就包含了 LC_COLLATELC_CTYPELC_TIME

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

以上所有的 locale 類別中,除了 LC_MESSAGES 之外,最重要的就是 LC_CTYPE 了。此類別掌管的是該 locale 中所有字元的處理方式。 一個應用程式若要能被 ``區域化'' 成某地區的語文, 首要工作就是要能處理該地區的文字。例如每個字的內碼如何編碼? 是單一 byte 還是由多個 bytes 組成的?怎樣的編碼才是合法可用的? 這個字是不是可以印?是不是數字?若給定任意的文字字串, 要如何能區分出一個個字等等。因此,此類別牽涉的層面相當廣, 除了程式本身的文字處理能力以外,甚至到 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 的編碼)。 中文問題就在這裡,許多程式由於各式各樣的原因, 並未考慮到輸入的資料可能是 non-ASCII 碼的問題, 程式往往假設了她所要處理的資料都是 ASCII 碼 (因為大部分軟體為外國人發展的),更糟糕的是, 當程式遇到 non-ASCII 碼時,常常假設她不存在, 而將它的第八個位元截去,這是所謂的 8-bit 輸入中文時, 每每將第八位元砍掉,所以中文都變成亂碼。因此必須指定 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 用來表示一編的英文、數字、電腦慣用符號 等等,另一個就是以 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 LC_CTYPE 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: 大寫拼音字母轉小寫拼音字母的對應表。

4.4. 時區的設定

Last Update: 2002年12月30日 周一 00時13分37秒 CST

台灣時區是 CST,如果設定錯的話 date 跟檔案建立的時間看起來就會很怪。

使用 tzsetup 來修改:

首先安裝程式會問,您的 CMOS 時間是否是格林威治時間(UTC), CMOS 通常都是設為當地的時間,所以請選 『NO』。 接下來要選時區,選『5 Asia』、『43 Taiwan』。 或是直接使用以下的指令。

# tzsetup /usr/share/zoneinfo/Asia/Taipei

另外也可以利用 ntpdate 來與網路時間協定 (NTP) 伺服器對時。

# ntpdate time.stdtime.gov.tw

比較常用的對時伺服器有:

time.stdtime.gov.tw
clock.stdtime.gov.tw
time.chttl.com.tw
time.windows.com

Note: 如果想要漸漸調到正確,而不是馬上調準,可以用 ntpd, 將 server time.stdtime.gov.tw 寫到 /etc/ntp.conf

然後用 date 確認一下時間是不是正確。

% date
2002年12月30日 周一 00時13分37秒 CST

Chapter 5. 中文的訊息


5.1. 幫助本地化和翻譯的工作

目前 FreeBSD 的主要文件如下:FreeBSD Handbook,FAQ, ports-handbook,developers-handbook,articles,manual,www。

但是有翻譯的部份不多,僅有 handbook,FAQ,ports-handbook。


5.1.1. FreeBSD handbook

本來是由 FreeBSD 中文文件計畫所主持(FDP), 歷經 ijliao@FreeBSD.ORG,foxfair@FreeBSD.ORG & vanilla@FreeBSD.ORG,目前由筆者代為維護中。

WWW: ijliao 的 Handbook 翻譯分配表

WWW: foxfair 的 Handbook 翻譯分配表

WWW: statue 的 Handbook 翻譯分配表

WWW: 繁體 FreeBSD Handbook 4.3

而大陸已經有翻譯完成的簡體 Handbook 的書籍正在販售中, 也有其簡體的 PDF 檔案可以提供下載,希望大家可以參考該書, 把繁體 Handbook 也翻譯完成。

WWW: 簡體 FreeBSD Handbook 4.7


5.1.2. FreeBSD FAQ

曾經由 vanilla@FreeBSD.ORG 帶領翻譯完成整個 FAQ, 不過後來沒有與總部繼續更新,不過最近他又回來了, 繼續領導著 FAQ 的翻譯。

WWW: vanilla 的 FAQ 翻譯分配表


5.1.3. FreeBSD Porters Handbook

這對想做自己 port 的人是一份很好的文件,不過目前尚未翻譯, 但是有簡體的使用者翻譯好了,不過還需要修飾和整理成繁體的。

WWW: 簡體 FreeBSD Porters Handbook


5.2. 參加中文 I18N/L10N 的計畫

PO 翻譯:GNOME,KDE

目前國內幫忙翻譯訊息的組織集中在 KDE3,如果有興趣可以前往 http://i18n.linux.org.tw/ 瀏覽目前的翻譯狀況。


5.3. 翻譯 PO 檔注意事項

以下摘錄 kde3 翻譯小組的一些建議,原始文件可以在 http://www.linux.org.tw/~ycheng/kde/trans-po.txt 找到。

Contributed by pofeng@linux.org.tw

Last Update 2003年 5月10日 周六 11時26分18秒 CST

標頭部份:

每個 po 檔一開頭的幾行,大多固定長的像底下的樣子, 其中比較要注意的幾個項目為:

==== 標頭範例 ===============================================================
# traditional Chinese translation for XXX.
# Pofeng Lee <pofeng@linux.org.tw>, 2001-2002.
# Abel Cheung <maddog@linux.org.hk>, 2002.
# Yuan-Chung Cheng <platin@ms.ccafps.khc.edu.tw>, 1998.
msgid ""
msgstr ""
"Project-Id-Version: XXX X.X.X\n"
"POT-Creation-Date: 2001-07-23 14:32-0400\n"
"PO-Revision-Date: 2001-08-27 15:53+0800\n"
"Last-Translator: Chung-Yen Chang <candyz@linux.org.tw>\n"
"Language-Team: Chinese (traditional) <zh-l10n@linux.org.tw>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
=============================================================================
  • PO-Revision-Date: 此欄位就請填入您翻譯時的日期時間

  • Last-Translator: 最後翻譯的人,若您是最後翻的人,就填入您的資料,以便讓人有疑問時可以連絡的上。 至於之前翻譯者的資料該如何處理呢? 或許比較好的方式,您可以把他的資料放在最前面,並將該行以 # 開頭註解起來, 如在 po 檔的最前面幾行加入這樣的資訊:

    # Translator: aaa <aaa@aaa.com>, bbb <bbb@bbb.com>
    #             ccc <ccc@ccc.com>
    #             ddd <ddd@ddd.com>
    


  • Language-Team: 若原本已是 Chinese (traditional) <zh-l10n@linux.org.tw> 那就不須要變動, 若是新的 po 檔,則可以將其改為 Chinese (traditional) <zh-l10n@linux.org.tw> 表示這是由繁體中文的翻譯小組所翻譯的。

  • Content-Type: text/plain; charset=utf-8 字元集部份,KDE3 用 utf-8,gnome & gnu 目前還在用 big5。

  • Content-Transfer-Encoding: 8bit encoding 部份中文字都是用 8bit。

翻譯提示(hint) (注意, 這是 KDE 獨有的 extention), 如底下的範例,在 msgid 中您會看到有 "_:" 開頭的字串, 凡以 "_:" 開頭的即表示之後的字串是翻譯的提示, 這部份是給您參考用的,所以您只要翻譯 "Screen at %1" 這行即可。

==== 翻譯提示(hint)範例 =====================================================
#: ui/konsole_mnu.cpp:85
#, c-format
msgid ""
"_: Screen is a program controlling screens!\n"
"Screen at %1"
msgstr ""
"視窗於 %1"
=============================================================================

翻譯者的姓名及e-mail: 如下的範例,若碰到這樣的狀況,請填您自己的姓名及e-mail, 千萬不要把它給翻成了 "您的姓名"、"您的電子郵件帳號"。 ref: Getting Credit for Your Work

==== 翻譯者的姓名及e-mail範例 ===============================================
#: _translatorinfo.cpp:1
msgid ""
"_: NAME OF TRANSLATORS\n"
"Your names"
msgstr ""
"張崇嚴, 張三"

#: _translatorinfo.cpp:3
msgid ""
"_: EMAIL OF TRANSLATORS\n"
"Your emails"
msgstr ""
"candyz@linux.org.tw,someone@linux.org.tw"
#                    ^ 註: 為了對齊, 英文逗點後勿留空白
=============================================================================

HTML TAG 部份: 如底下範例,若有 <p><b> 等 HTML TAG, 您必須保留其語法部份。

==== HTML TAG 部份範例 ======================================================
#: toplevel.cpp:110
msgid "<p><b>What can I do?</b></p><p>%1</p>>"
msgstr "<p><b>我能做什麼?</b></p><p>%1</p>"
=============================================================================

快速鍵部份: 如底下範例,若有看到 "&" 開頭的地方,如 &D, 則表示這可能是選單中的某快速鍵, 可以按 alt + d 鍵來快速執行等等, 此部份的翻譯方式,則是在最後面加上 "(&D)" 來表示。

==== 快速鍵部份範例 =========================================================
#: toplevel.cpp:61
msgid "&Debugger"
msgstr "除錯器(&D)"          # (&D) 之前不留空格
#: toplevel.cpp:61
msgid "&Debugger..."
msgstr "除錯器(&D)..."       # ... 是半形 ; (&D) 要放在 ... 之前"
#: toplevel.cpp:61
msgid "&Debugger:"
msgstr "除錯器(&D):"         # : 是半形 ; (&D) 要放在 : 之前"
=============================================================================

c-format 部份: 如底下範例中的 %1、%2 等變數,不一定 %1 就一定在前 %2 在後, 可以視翻譯的文法句型做適當的調整。

==== c-format 部份範例 ======================================================
#, c-format
msgid "%1 is beated by %2"
msgstr "%2 擊敗 %1"

msgid "%s is beated by %s"
msgstr "%2$s 擊敗 %1$s"
        ^^^^ ----------------> 請注意, %2$s 代表的是 msgid 中第二個 %s
=============================================================================

fuzzy(模糊)部份: 若看到 "#, fuzzy",則表示這部份的翻譯是電腦自動猜測幫您翻的, 有時候會對,但也有時會錯的很離譜,因此,您必須檢查一下, 並做適當的翻譯調整調整完後,也要記得把 "#, fuzzy" 那行給拿掉。

==== fuzzy(模糊)部份範例 ====================================================
#: ../partitioning.py:1425
#, fuzzy
msgid ""
"You are about to delete a RAID device.\n"
"\n"
"Are you sure?"
msgstr "您必須選擇一個磁碟陣列裝置"

#: ../partitioning.py:1428
#, fuzzy, c-format
msgid ""
"You are about to delete the /dev/%s partition.\n"
"\n"
"Are you sure?"
msgstr "您確定要刪除這個分割區嗎"
=============================================================================

淘汰部份: 有些在舊版本中有的訊息,但在新版本中已經沒有了,因此這部份就沒有用了, 會出現在整個 po 檔的最後面部份,都以 "#~" 為開頭, 關於這部份,您可以將它刪除掉,或是也可以將其保留,當做日後參考用也行。

==== 淘汰部份範例 ===========================================================
#~ msgid "&About"
#~ msgstr "關於(&A)"

#~ msgid "Panel Menu"
#~ msgstr "面板選單"

#~ msgid "Settings..."
#~ msgstr "設定..."

#~ msgid "Legacy Application"
#~ msgstr "傳統應用程式"
=============================================================================

單數複數: 中文沒有單數複數的問題,請直接填 msgstr[0] 即可。

==== 單數複數範例 ===========================================================
msgid "found %d fatal error"
msgid_plural "found %d fatal errors"
msgstr[0] "找到了 %d 個重大的錯誤"
=============================================================================

其他綜合建議:

標點符號請儘量用全形標點符號,但欄名尾的冒號則用回半形。

提示要用 "您" 取替 "你"。

編譯: msgfmt -cv xxx.po -o /dev/null

安裝: msgfmt -cv xxx.po -o /usr/share/locale/zh_TW/LC_MESSAGES/xxx.mo

測試: LC_MESSAGES=zh_TW.Big5 xxx ;

參考資料:

The KDE Translation HOWTO http://i18n.kde.org/translation-howto/

翻譯工具 KBabel http://i18n.kde.org/tools/kbabel/


5.4. 中文 manual page

groff-Tlatin1 選項,目前透過這個選項來顯示中文。

目前還沒有中文 manual page 的繁體翻譯計畫,不過有簡體的, 下面是一個翻譯與使用的範例:

.Dd January 15, 1991
.Dt APROPOS 1
.Os
.Sh NAME
.Nm apropos ,
.Nm whatis
.Nd 搜尋 whatis 資料庫
.Sh 用法概要
.Nm apropos
.Ar 關鍵字 ...
.Nm whatis
.Ar 關鍵字 ...
.Sh 詳細解說
.Nm
由指定的關鍵字,尋找一組含有系統命令簡短描述的資料庫檔案,
並且將結果顯示於標準輸出。
.Nm whatis
只顯示整個字完全符合的結果。
.Sh 傳回值
.Nm
這個命令在成功\時傳回 0,如果找不到符合的關鍵字則傳回 1。
.Sh 請參考
.Xr makewhatis 1 ,
.Xr man 1
# mkdir -p /usr/local/man/zh_TW.Big5/man1
# cd /usr/local/man/zh_TW.Big5/man1
# zcat /usr/share/man/man1/whatis.1.gz > whatis.1
# vi whatis.1
# cat whatis.1 | groff -man -Tlatin1

Figure 5-1. man snapshot

目前在 outta-ports 中有類似的測試 port,可以試用看看。

# cd /usr/ports/outta-port/man-doc
# make install clean
# cman whatis

WWW: CMPP 中文MAN-PAGE計劃(簡體)


Chapter 6. 輸出字型

在這個章節中將會介紹點陣字型(Bitmapped Font), 以及曲線描邊字型(Outline Fonts)。

點陣字型(Bitmapped Fonts): 這種字型就是直接將點矩陣的字型儲存在記憶體中, 使用時就直接取出,這種方式若儲存點數不多則輸出字型太難看; 但若儲存點數較多則需要佔掉太多記憶體, 同時將字體放大後可能產生鋸齒壯,因此目前除了特殊用途外, 幾乎很少用到。

曲線描邊字型(Outline Fonts)是利用曲線公式來描繪字框, 因此不論放大縮小位數是多少都一樣平滑, 但是缺點是計算耗時,常見的包括常用在印刷的 Postscript 與用在螢幕顯示的 TrueType Font(TTF) 等。

目前使用點陣字型的主要是控制台軟體,像是 big5con、zhcon 等, 主要是因為讀取曲線描邊字型的速度較慢, 也比較複雜,所以目前的控制台軟體都沒看到使用曲線描邊字型的。

WWW: Chinese, Japanese and Korean characters in English Windows

WWW: Chinese Fonts

Figure 6-1. showttf snapshot


6.1. Bitmapped Font - 點陣字型概論

點陣字型代表字型 BDF(Bitmap Distribution Format,點陣分散格式)、 HBF(Hanzi Bitmap Font,漢字點陣字體)、 PCF(Portable Compiled Font)。

BDF Spec: 5005.BDF_Spec.pdf


6.2. cmexfonts - 中推會 Big5+ 點陣字型

該著作權為中華民國行政院研考會、中文電腦推廣基金會所共有, 字形設計為華康科技 Dynalab Inc.。

該套字型並不是標準的 Big5 字型,而是當時為了推廣 Big5+ 所製作的, 目前並無使用的價值。

安裝 chinese/cmexfonts

這個套件中包含了 16 點、24 點兩套中文點陣字型。

WWW: cmex org


6.3. kcfonts - 國喬點陣字型

國喬中文 PCF 字型是 FreeBSD 下最常用的點陣字型。

要得知已安裝的 BIG5 字型用:

% xlsfonts | grep big5
kc15f.pcf.gz -kc-fixed-medium-r-normal--16-160-72-72-c-160-big5-0
kc24f.pcf.gz -kc-fixed-medium-r-normal--24-240-100-100-c-240-big5-0

安裝 chinese/kcfonts

這個套件裡面包含了 16 點、20 點以及 24 點三套中 文點陣字體,足供一般情況顯示中文之用。

適用於 640x480 解析度 (NoteBook)

# rxvt -ls -fm kc15 -fn 8x16 &

適用於 +1024x768 解析度 (17 吋螢幕)

# rxvt -ls -fm kc24 -fn 12x24 &

6.4. gugod-clean - 搭配中文點陣字型用的英文點陣字型

看了一下 irc 上得聊天,終於懂得是為了終端機的殘影問題。

節錄 gugod 的一段話:

配合 kc15f 改了一下 schumacher 的 clean,本來這兩種字不一樣高, 所以用久了 term 會髒髒的,改成一樣高就不會了,這個 clean 是 15 的, 怎麼改成一樣高的?大致上是改 bdf 中的 PIXEL_SIZE, POINT_SIZE, FONT_ASCENT, FONT_DESCENT 還有 FONT 這些東東先,不過要先用 xmbdfed 把 bdf 字改成想要的長寬,不然 clean 字的每個字母長寬都不一樣,很難稿,相關工具請看 ports/x11-fonts

安裝 chinese/gugod-clean

# cd /usr/X11R6/lib/X11/fonts/local
# mkfontdir
# xset fp rehash

將以下加入 /usr/X11R6/lib/X11/fonts/local/fonts.alias

gugod16 -gugod-clean-medium-r-normal--16-160-75-75-c-90-iso8859-1
gugod18 -gugod-clean-medium-r-normal--18-180-75-75-c-80-iso8859-1
gugod20 -gugod-clean-medium-r-normal--20-200-75-75-c-100-iso8859-1
gugod22 -gugod-clean-medium-r-normal--22-220-75-75-c-110-iso8859-1

然後執行 Eterm --font gugod16 &

就可以看到很漂亮的 Eterm 透明背景, 原來會髒掉的終端機也沒問題了。


6.5. intlfonts - 各國的免費點陣字型

這個包含各國的免費 PCF 字型,而且裡面還包含了 cns11643 七個字面的 16pt、24pt 與 40pt,以及 big5 的 taipei16 與 taipei24, 裝完幾乎可以處理各種語言了。

安裝 x11-fonts/intlfonts


6.6. PostScript 概論

PostScript為美國Adobe( http://www.adobe.com)公司於1985年所發表的文件描述技術, Adobe並利用這個技術,創造著名合乎PostScript技術的字型, 並從而改變整個印刷工業,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)字集上日、韓二國文字, 除了平假名、片假名及韓文字外,佔最多字體容量的還是漢字部份, 而且中、日、韓的漢字很多都是相同的漢字,如果一套CJK字集能包括 Big5、GB、JIS及KSC碼的所有的字形、 容量一定比四種碼位分開的字形少30%以上,而且可以不用擔心, 以後從以上四個地區來的文件,輸出時沒有對應的字形輸出。

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

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

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

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

WWW: cid faqs at arphic

WWW: Fonts / Type / OpenType


6.7. 使用 TrueType 字型當作是 CID fonts

gs-cjk 是一個讓 Aladdin/Artifex/GNU ghostscript(gs) 能夠使用 CJK 功能的發展計畫。在這個網站中,所提供的程式集, 包含讓 gs 能夠把 CJK ( 繁、簡中文,日文,韓文 ) 的 TrueType 字型當作 CID-Keyed 的字型來處理的必要修補檔案( 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 來產生正確的 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: Ghostscript, Ghostview and GSview

WWW: gs-cjk project


6.8. 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。

安裝 chinese/moefonts-cid

自行安裝的話,CID-Keyed font 可以從 ftp://ftp.oreilly.com/pub/examples/nutshell/cjkv/adobe/samples/ 取得 MOEKai-Regular MOESung-Regular 這兩個 CIDFont,並在 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 為例子,來增加粗體、斜體、粗斜體支援, 在安裝時,由於必須額外安裝 adobe-cmaps 來搭配, 所以會 DEPENDS print/adobe-cmaps。

再來是建立粗體,斜體,粗斜體等,在看完 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 所提供的字型來模擬,像是 editors/Abiword 就是個很棒的例子, 而 kde2 則是自己做粗體,斜體等的模擬, 不過還沒去測試到粗體和斜體的部分, 等有空閒了再去試試。

Figure 6-3. moefonts-cid snapshot


6.9. 以 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 預先設定好。


6.10. 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 的作業系統都直接支援此字型格式,所以並不需要如PostScript 一樣,外掛(Adobe)Type Manager之類的程式。

WWW: Features of TrueType and OpenType


6.11. ttfm - TrueType 字型管理工具

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

安裝 chinese/ttfm

安裝後包含了:

ttfinfo:一個可以用來讀取 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, 可以用來安裝字型,不建議使用。

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
       --initm <module>.. initialize modules
       --help             show this info

這個程式會去利用位於 /usr/share/fonts/install/ 底下以 ".ttfm" 結尾的可執行檔來安裝、設定字型, 這些 .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
             
    

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 看到這些字型名稱。 並可用 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>...

這個功能是用來在安裝一模組時,將系統已有的 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: ttfm project


6.12. mingliu - 微軟細明體 TrueType 字型

Contributed by EricCheng

Last Update: 2003年 9月21日 周日 21時13分54秒 CST

mingliu 是微軟向華康購買的中文繁體字型, 也是 Windows 使用者最習慣的電腦字。

# cd /usr/ports/outta-port/mingliu
# make install clean

mingliu.ttc 有兩個 faces,第零個 face 是 細明體(MingLiU),英文字型是等寬的, 第一個是新細明體(PMingLiU),不等寬的英文字型, 預設會使用第零個,如果要使用新細明體的話,必須另外設定。

細明體在 11, 12, 13, 15, 16, 20 點的大小有特別做內嵌的點陣字, 換句話說,由於中文字的 hinting 不易,有時點陣字會比較有效。 又因為新細明體使用了 bytecode 來組合筆劃, 沒有編進 bytecode interpreter 的 freetype 版本在 render 的時候, 就會碎掉。 在目前 ports/print/freetype2 中,預設會利用 files/patch-include::freetype::config::ftoption.h 將 TT_CONFIG_OPTION_BYTECODE_INTERPRETER 打開。

設定讓細明體在這些大小時,顯示內建的點陣字而不要用 anti-aliased, 在 ~/.fonts.conf 加入:

    <match target="font">
        <test name="family"><string>MingLiU</string></test>
        <edit name="antialias"><bool>true</bool></edit>
        <edit name="hinting"><bool>true</bool></edit>
        <edit name="autohint"><bool>false</bool></edit>
    </match>
    <match target="font">
        <test name="family"><string>MingLiU</string></test>
        <test name="size" compare="less_eq"><int>12</int></test>
        <edit name="antialias" mode="assign"><bool>false</bool></edit>
        <edit name="hinting" mode="assign"><bool>true</bool></edit>
    </match>

因為 MingLiU 宣稱自己是 monospaced 字型, 但實際上它有兩種固定寬度:中文的全形以及英文的半形, 造成 freetype 誤判所有字都是跟中文的全形一樣寬, 使得英文字和中文字會等寬。

可以修改 freetype 的 globaladvance flag 或是 spacing, 0 是 proportional 的 spacing,100 是 mono,110 是 charcell:

    <match target="font">
        <test name="family"><string>MingLiU</string></test>
        <edit name="globaladvance"><bool>false</bool></edit>
    </match>
    <match target="font">
        <test name="family"><string>MingLiU</string></test>
        <edit name="spacing"><int>0</int></edit>
    </match>

Note: 記得在 ~/.fonts.conf 的頭尾加上

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
...
</fontconfig>

在 X11 Core Font 上,則是利用 xtt 的功能來選取 Face 1 的 PMingLiU 來顯示,也就是在最前面加上 fn=1,並檢查 Spacing 欄位是否為 p,MingLiU 的 Spacing 欄位是 m。 如果安裝 chinese/ttfm 會自動加入兩個 face。

mingliu.ttc -DynaLab-MingLiU-medium-r-normal--0-0-0-0-m-0-iso8859-1
fn=1:mingliu.ttc -DynaLab-PMingLiU-medium-r-normal--0-0-0-0-p-0-iso8859-1

WWW: EricCheng Fontconfig


6.13. simsun - 微軟宋體 TrueType 字型

simsun 是微軟向 ZHONGYI Electronic Co. 購買的中文簡體字型, 也是 Windows 使用者最習慣的電腦字。

# cd /usr/ports/outta-port/simsun
# make install clean

simsun.ttc 有兩個 faces,第零個 face 是 SimSun,英文字型是不等寬的, 第一個是NSimSun,等寬的英文字型, 預設會使用第零個,如果要使用NSimSun的話,必須另外設定。

因為 NSimSun 宣稱自己是 monospaced 字型, 但實際上它有兩種固定寬度:中文的全形以及英文的半形, 造成 freetype 誤判所有字都是跟中文的全形一樣寬, 使得英文字和中文字會等寬。

可以修改 freetype 的 globaladvance flag 或是 spacing, 0 是 proportional 的 spacing,100 是 mono,110 是 charcell:

    <match target="font">
        <test name="family"><string>NSimSun</string></test>
        <edit name="globaladvance"><bool>false</bool></edit>
    </match>
    <match target="font">
        <test name="family"><string>NSimSun</string></test>
        <edit name="spacing"><int>0</int></edit>
    </match>

Note: 記得在 ~/.fonts.conf 的頭尾加上

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
...
</fontconfig>

若要使用等寬的 NSimSun,在 X11 Core Font 上, 則是 xtt 的功能來選取 Face 1 的 NSimSun 來顯示,也就是在最前面加上 fn=1,並檢查 Spacing 欄位是否為 m,SimSun 的 Spacing 欄位是 p。 如果安裝 chinese/ttfm 會自動加入兩個 face。

simsun.ttc -misc-SimSun-medium-r-normal--0-0-0-0-p-0-iso8859-1
fn=1:simsun.ttc -misc-NSimSun-medium-r-normal--0-0-0-0-m-0-iso8859-1

6.14. mingunittf - 香港補增字符集2001

mingunittf 包含了香港補增字符集2001的所有字。

mingunittf 的安裝:

# cd /usr/ports/outta-port/mingunittf
# make install clean

由於搭配 ttfm 的 xttfm 模組,因此在 XF86Config 裡面一定要 Load "xtt" 才行。


6.15. moettf - 台灣教育部標準 TrueType 字型

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

安裝 chinese/moettf

以下按照年代說明

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

這時 Wukai 從教育部的標準字體轉成兩個 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.16. arphicttf - 文鼎科技 TrueType 字型

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

Note: 盡量避免使用文鼎PL細上海宋於教育用途, 該字型有許多字的字形會造成教育用途上的誤導, 為了避免誤人子弟,盡可能的不要使用該字體。 其中細上海宋的部份是採用對岸的慣用的繁體寫法,和台灣的寫法並不相同, 最顯著的例子是『角』,中間的『土』中間是縱穿的, 大家可以和 MS 的新細明比較便可知道。但中楷的部份則無此情形。 因此,提醒大家,如果是用在學校、公務單位,或家裡有在學子弟在使用的話, 建議盡量避免使用細上海宋,改採中楷,或另行購置台灣通用的字型。 能保留中文繁體的正體寫法的國家,大概就只剩台灣了, 請大家好好愛護珍貴文化遺產。 還有一些台灣繁體與大陸繁體的寫法差異, 「骨」、「體」、「過」字等等,「┌」那兩劃被簡化成一劃,變成「┐」。 草花頭:台灣標準寫法是 「十十」,大陸標準寫法是「廾」(四劃 --> 三劃)。 「吳」字,大陸標準寫法是「口天」,「娛、誤」等字同例。 「充」字,台灣五劃 (橫ㄙ),香港和大陸六劃 (點橫ㄙ)。 「這」字部首,台灣四劃 (點3捺),大陸三劃 (點7捺)。 「以」字,台灣五劃,大陸四劃 (最左邊的兩劃連筆)。

安裝 chinese/arphicttf

以下表格式整理過後的文鼎字體速查表, 會有兩個 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.17. wangttf - 王漢宗教授 TrueType 字型

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

安裝 chinese/wangttf

Figure 6-6. wangttf snapshot


6.18. ntuttf - 台大字型

Date: Thu, 17 Mar 94 14:18:18 CST

From: Lin YawJen <f1506015@csman.csie.ntu.edu.tw>

HISTORY: I had written a program to convert fonts from large bitmap into TrueTypefor MS-Windows. For Mac, see ifcss.org:/software/fonts/mac/ the bitmaps came from DYNAFONT (Hua2 Kang1) and ETen..

This is the critical point of this product.

Font styles includes:

kai: 楷書
br: 粗圓 
fs_m: 仿宋常用 
li_m:隸書常用 
mb: 中黑 
mm:中明 
mr:中圓 
tw: 極細

COPYRIGHT: These fonts are created by Mr. Lin Yaw-JenAll Right reserved. These fonts must not be used for any commercial activities.

Lab of OA Network
Home: 4F, No. 12-2 Alley 2 Lane 250 Sec 5 Nanking East Rd.
Department of Computer Science and Information Engineering
Taipei Taiwan R.O.C    National Taiwan University
Tel: 886-2-7641236      Taipei Taiwan R.O.C
Fax: 886-2-760184   Email: f1506015@csman.csie.ntu.edu.tw

安裝 chinese/ntuttf

Figure 6-7. ntuttf snapshot

WWW: ntu ctlg


6.19. oto - Open Type Organizer 程式

Joe Man post 到 zh-l10n 的文章中節錄部分如下:

Open Type Organizer(oto) 這個小小程式硬是要得! 它可以將原本只有 big5 或 gb 編碼的 TrueType 字再加入一個 unicode 編碼,但絕對不會攪亂原本的字型。[big5 部份是由 Joe Man 修正的, 請大家幫忙測試 :)] 這個方案還有一個好處... 因 OpenOffice 只認 Unicode 編碼的 TrueType 字,引至很多 Big5 編碼的字不能用。 現在只要將轉變後的字抄到 OpenOffice 下的 share/fonts/truetype/ 就可以用了。好! Joe Man 已經測試了幾個王漢宗教授的字型, (確係靚)!---廣東話 :)

安裝 chinese/oto

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 可能要注意並非整個檔都是 utf-8 編碼的, 大概把 Unicode 那些區段自己找出來轉成 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: oto project


Chapter 7. 中文的顯示及輸入

如果您總是從 DOS 的中文系統或是中文 Windows 95 之類的環境下透過 telnet 來利用 FreeBSD 主機的話,您是不需要看本節的。 只有當您直接在一部 FreeBSD 主機螢幕前操作時您才需要在 FreeBSD 上安裝中文系統。

進行中文化的工作,先從最簡單的中文終端機做起,若要讓 Virtual Console 擁有顯示及輸入中文的能力,目前有:big5con、zhcon 等中文虛擬終端機軟體可以選擇。

在 Console 下,目前的中文顯示都是靠直接驅動主機的顯示卡進入繪圖模式, 遠端是無法使用的。 像是 telnet、putty 等純文字的遠端連線軟體,更是無法處理繪圖模式的輸出, 所以遠端也就沒有辦法使用這些中文控制台(Console)。

若是打算使用 X Window 的中文環境,則必須安裝一套中文 XIM Server, xcin25 在輸入的部分支援 locale 與 XIM 協定,在 X Window 下的中文輸入是遵循的 X11R6 的標準,也就是說, 只要應用軟體只要有 XIM 的標準,都可以正常的輸入中文,未來的 X window 應用軟體應該漸漸會朝向 XIM 的標準,這樣才可以真正做到 xcin anywhere。 目前已知支援 XIM 的軟體如 bluefishrxvtmozillapyDictgnomeicu

目前筆者知道支援中文顯示和中文輸入的終端機並不多, 如 atermrxvtEtermmltermgnome-terminalkonsole 等。


7.1. 輸入法

目前在 FreeBSD 底下可以使用的中文輸入平台有: console 下的 big5conccebig5ccezhconkon2 只有顯示中文的能力, 而 xwindow 下的有 xcin25chinputxcimfcitx

各種各樣的輸入法不斷湧現,以字形為標準的、以字音為標準、 以字義為標準的、還有以字碼為基礎的,各自擁有各自的特點, 也各有各的優勢,都在為輸入法的研究盡綿薄之力。 目前的中文輸入法有以下主要四類:

第一,以字母為基礎。這類型輸入法,要求使用者只要知道該漢字的讀音, 即可輸入漢字到電腦裡面。但是輸入速度卻非常的慢, 因為漢字裡面有很多的字讀音相同的,當您輸入該字拼音時, 往往卻要花上一定的時間排除其它同音字,才能找到您所需的字。 因此它只能作為一種輔助輸入法使用。例如,台灣的注音、忘型、自然、 漢音、羅馬拼音、微軟新注音等;大陸的拼音、全拼、雙拼等; 香港的漢語拼音、粵語拼音等。

第二,以字形為基礎。進行字根拆解組合漢字。 這類型輸入法最大的優點是在於只要經過一段時間的訓練, 輸入中文字的效率會有大大的提高。這類型輸入法也是目前最受歡迎的一類。 例如,台灣的倉頡、大易、行列、嘸蝦米、華象直覺、微軟新倉頡等; 大陸的五筆、鄭碼等;香港的縱橫、快碼等。

第三,以字碼基礎。該類輸入法最典型的就是內碼輸入法, 只要您輸入該字的內碼,即可輸出該字。它最大優點是重碼率幾乎為零, 不用選字,節約時間,提高輸入速度。但卻要求使用者能夠記住內碼, 漢字數量驚人之多,如果不是專業人士,恐怕很難記住這麼多字的內碼, 因此,這類型輸入法是最不適用的,也就很少有人來使用它。

第四,以字義為基礎。此類型輸入法主要針對使用外語的人士, 只要輸入相應字義的單詞,即可輸入該字,但速度比較慢, 而且對使用者的英文程度有一定的要求。例如:英漢輸入法。

但總的來說,就目前形勢來看以字形為標準的輸入法, 在速度和重碼的問題解決得較好,輸入速度快,重碼率低, 較為用戶所廣泛接受,以字音為標準的輸入法雖然輸入速度較慢, 但最為簡單易學,作為一種後備輸入法也較為用戶所廣泛接受。

WWW: 鍵盤輸入法萬「碼」奔騰


7.1.1. zh_hex - 內碼輸入法

只要您輸入該字的內碼,即可輸出該字。它最大優點是重碼率幾乎為零, 不用選字,節約時間,提高輸入速度。但卻要求使用者能夠記住內碼, 漢字數量驚人之多,如果不是專業人士,恐怕很難記住這麼多字的內碼, 因此,這類型輸入法是最不適用的,也就很少有人來使用它。


7.1.2. cj - 倉頡輸入法

由朱邦復先生所發明,結合中國象形字的特性, 將所有的筆畫簡化為24個字根,每一個字根有許多不同基本字型的變化, 因此只要熟記這些字根及字型,就宛如寫字一樣, 依照筆畫及順序鍵入字根就可以表示想要的字。 如此的輸入法符合中國字的本質, 不會有注音用久卻忘記字怎樣寫的缺點。

WWW: 朱邦復工作室


7.1.3. simplex - 簡易輸入法

簡易輸入法是『倉頡首尾碼簡易輸入法』的簡稱, 是將倉頡輸入法的取碼簡化,對每個中文字而言, 只取其『首、尾』二碼,其餘的都省略不取。 所以只要手中有一張『中文字母表』,並了解中文字是由上而下, 由左而右,由外而內的取碼方式,牢記取碼規則 -- 只取『首、尾』二碼, 那麼就可以開始使用簡易輸入法輸入中文了。


7.1.4. phone,bimsphone - 注音輸入法

注音輸入法為目前中文輸入的主流,依據注音符號拼出中文字輸入。 另外因為中文字有許多同音字,因此選字是一項非常麻煩的手續, 因此 bimsphone 提供人工智慧幫您選字, 不過還不會學習使用者常用的字彙。


7.1.5. jyutping - 粵語拼音輸入法

早於一九九二年香港華通設計了《粵語拼音輸入法》, 後來又將它由1.0版發展到4.0,直至最新的2001各版本。 這個輸入法廣泛在香港被應用,例如,香港政府市政府圖書館、 區域市政局圖書館提供給市民查閱書籍, 聯網電腦上使用的「粵音」輸入法就是香港華通產品。

《粵語拼音輸入法》是用香港習慣的英文字母廣東拼音的方法輸入中文字。 主檔23,000碼,兼容並蓄的輸入碼,出字率高, 任何一種流行的拼法都能拼出所需之字。

實用的特別編碼檔,為香港常用字型、特殊符號、百家姓、日文字等, 提供了合情合理,易記實用的輸入碼。

主要特點如下:

適用於Windows中文平台等多個版本,以單字或詞組均可輸入中文。 輸入一碼、二碼等即出現待選字方便輸入,不影響全碼輸入的習慣。 手動調整待選字優先順序,即時增添漢字輸入編碼及增添詞組編碼。 提供豐富聯想字詞功能,一次輸入多級聯想,直到您找到所需之字。 一次性顯示所有待選漢字,能顯示漢字的所有兼容並蓄的粵拼編碼。 收錄了十萬個台灣、大陸及香港用詞,充分體現簡潔和實用的風格。


7.1.6. bimspinyin - 拼音輸入法

「注音」即是傳統的中文音標—一「玻坡摸佛」注音字母, 現今在台灣仍廣為采用。注音法把鍵盤上的字母、數字、 及符號重新編排成四十多個注音鍵,全無「拉丁化」的痕跡, 好處是完整,一鍵一音素,輸入速度理論上較快。 但因不與拉丁字母掛鉤,即使熟悉注音字母的用戶, 初學時也要強記注音字母在鍵盤的位置。 相反「拼音」比較簡單易學,在國際上亦較為廣泛接受。


7.1.7. chewing - 酷音輸入法

酷音輸入法是一種聰明的注音輸入法。它會根據常見的字詞, 自動將您所輸入的注音轉變為適當的中文字,減少同音字的選擇。 酷音輸入法還提供了許多好用功能,如常用符號輸入、手動斷詞功能、 中英混雜輸入等。

WWW: 酷音網站


7.1.8. array30 - 行列30輸入法

行列輸入法和其它的輸入法比較起來,亦是一種易學易用的輸入法, 它以字形為基礎、摒棄某些字形輸入法中一些較為複雜難明的部分, 結合自己的特色設計成。特別是熟練以後,在中文輸入上會有較大的突破, 比較適合大眾學習。行列輸入法的家,則提供行列輸入法的相關信息, 包括線上教學-教您學會如何使用行列輸入法, 線上指導-以FAQ形式指導您在學習行列輸入法過程中所遇到任何疑難問題, 以及行列科技公司最新動態、公司簡介、產品櫥窗等等欄目, 向您從多個方面介紹行列輸入法。如果您有興趣的話, 這裡是一個很好的切入點,幫助您學習並掌握它。

WWW: 行列科技


7.1.9. liu - 嘸蝦米輸入法

簡單易學,快速,在各項比賽中常名列前矛。 平均取碼數少,不過內建此輸入法的中文系統不多,需花錢買。

WWW: 行易公司網站

WWW: 蝦米族樂園


7.1.10. dayi - 大易輸入法

大易輸入法是中文Windows內付的輸入法, 新的【大易輸入法 v5.1 詞庫版】最新三碼功能, 每個字「最多」三碼,較上個版本快30%。快速輸入常用標點、 全英文及全形符號。依照筆劃順序寫碼。 提供大易輸入法技術支援您可以從選單中,來選擇您所要查詢的問題。

xcin25 底下新增大易輸入法

# cd /usr/X11R6/lib/X11/xcin25/tab/big5
# fetch ftp://xcin.linux.org.tw/pub/xcin/xcin/contrib/dayi3.cin
# ../../bin/cin2tab dayi3.cin
# vi /usr/X11R6/etc/xcinrc
--- xcinrc.orig Fri Oct 12 18:07:40 2001
+++ xcinrc      Fri Oct 12 18:08:10 2001
@@ -109,7 +109,7 @@
     (DEFAULT_IM_SINMD  "DEFAULT")
     (PHRASE            "default.phr")
     (CINPUT            (cj chewing simplex phone bimspinyin bimsphone jyutping
-                        array30 zh_hex))
+                        array30 zh_hex dayi3))
     (FONTSET           "-sony-*-24-*-iso8859-1,-*-24-*-big5-0")
     (OVERSPOT_FONTSET  "-sony-*-16-*-iso8859-1,-*-16-*-big5-0")))
 ;
@@ -138,6 +138,23 @@
 (define bimsphone@big5
        '((SETKEY               6)
          (MODULE               "bimsphone")))
+
+(define dayi3@big5
+        '((SETKEY               7)
+          (AUTO_COMPOSE         YES)
+          (AUTO_UPCHAR          YES)
+          (AUTO_FULLUP          NO)
+          (SPACE_AUTOUP         NO)
+          (SELKEY_SHIFT         YES)
+          (SPACE_IGNORE         YES)
+          (SPACE_RESET          YES)
+          (AUTO_RESET           YES)
+          (WILD_ENABLE          YES)
+          (SINMD_IN_LINE1       NO)
+          (END_KEY              NO)
+          (BEEP_WRONG           YES)
+          (BEEP_DUPCHAR         YES)))

 (define array30@big5
        '((SETKEY               8)

WWW: 大易公司網站


7.2. big5con - 類似倚天的中文 Console

一種在主控台(console)上提供顯示,輸入的中文文字顯示程式, 操作介面類似倚天中文。

安裝 chinese/big5con

在 console(vty or ttyv?) login 後直接打 b5c 會進入 big5con

Ctrl-Alt-1: 倉頡
Ctrl-Alt-3: 注音
Ctrl-Alt-6: 詞音
Ctrl-Alt-9: 嘸蝦米

其它按鍵習慣大部分和 et3 同。

通常 b5cscreen 一起搭配使用,以發揮 buffer & cut-paste & .... 的功效,執行順序為: b5c 先, screen 後,也就是 b5c 儘量在 console login 後立即執行,進入 big5 console 後再跑其它輔助功具。

b5c 造成 console 失常, 可透過 watch -W v0 遠端回復 -- man watch ftp://freebsd.ntu.edu.tw/freebsd/woju/source/vgalib.txt

若螢幕偏掉或花掉,通常是 scan freq 的問題,可利用螢幕硬體 微調開關調整顯示區域的位置和大小。若有裝 XFree86,也可啟動 X 後使用 xvidtune 調整妥當,將最佳參數記入 /usr/local/etc/big5con.cfg

若使用 telnet 無法輸入中文(出現亂碼), 請參考 telnet 一節。

如果執行時有問題,先檢查 /dev/vga 是不是 symlink 到 ttyv0? ls -l /dev/vga,如果不是的話請執行 ln -sf /dev/ttyv0 /dev/vga

% b5c
Big5con - Big5 Chinese Console version 0.92b
Big5con> fatal error: can't open /dev/vga
% ls -l /dev/vga
ls: /dev/vga: No such file or directory
% ln -sf /dev/ttyv0 /dev/vga
% ls -l /dev/vga
lrwx------  1 root  wheel  5  5 16 17:34 /dev/vga -> ttyv0

Note: 以下提供一個登入就執行 b5c 的方法, 在 ~/.cshrc 最後加入以下程式碼:

if ( `tty | cut -b 1-9` == "/dev/ttyv" ) then
  exec b5c
endif

Figure 7-1. big5con snapshot

WWW: 更多的資訊

WWW: big5con project


7.3. zhcon - 基於 FrameBuffer 的控制台多內碼中文平台

zhcon 是一個基於 FrameBuffer 的控制台多內碼中文平台。他能夠透過 FrameBuffer 在控制台上顯示簡體中文、繁體中文、日文、韓文。

目前版本的 zhcon 擁有以下的特性:

完全支持 FrameBuffer 設備(從640x480x8bpp 到 1024x768x32bpp), 支持多種內碼(GB2312,GBK,BIG5,JIS,KSCM), 並可使用熱鍵在五種內碼間動態切換自動識別GB2312/BIG5內碼, 並能在二者間自動切換可正確識別各種制表符號, 不會出現亂碼可用熱鍵瀏覽歷史螢幕, 支持所有基于碼表的Windows98輸入法和UCDOS輸入法(系統內建12種輸入法)。

安裝 chinese/zhcon

功能鍵說明:
CTRL_SPACE:                     打開/關閉輸入法
ALT_SPACE:                      顯示/隱藏輸入條
CTRL_,:                         切換全角/半角
CTRL_.:                         切換中文標點
CTRL_F1:                        切換至GB2312內碼
CTRL_F2:                        切換至GBK內碼
CTRL_F3:                        切換至BIG5內碼
CTRL_F4:                        切換至JIS內碼
CTRL_F5:                        切換至KSCM內碼
CTRL_F9:                        切換GB2312/BIG5自動識別模式
CTRL_F10:                       進入選單
CTRL_ALT_1 - CTRL_ALT_9:        切換輸入法
CTRL_ALT_0:                     英文輸入
輸入法選項:
CTRL_ALT_1:                     無蝦米
CTRL_ALT_2:                     倉頡
CTRL_ALT_3:                     注音
CTRL_ALT_8:                     行列30
CTRL_ALT_9:                     無蝦米

Note: 注音在選字上必須用 ALT_數字 才能選字, 用 + 或 = 換頁。

歷史瀏覽:
SHIFT_PAGEUP:                   上捲半個螢幕
SHIFT_PAGEDOWN:                 下捲半個螢幕
SHIFT_ARROWUP:                  上捲一行
SHIFT_ARROWDOWN:                下捲一行

Figure 7-2. zhcon snapshot

sourceforge WWW: zhcon project

main WWW: http://zhcon.gnuchina.org/


7.4. big5cce - 繁體中文 Console 環境

big5cce (BIG5 Console Chinese Environment)

一、前言

CCE (Console Chinese Environment) 為 Rui He, >herui@cs.duke.edu< 撰寫的中文控制台系統 (改寫自著名的 kon),但目前僅支援簡體(GB)的輸入 方式。 由於 CCE 支援 Mouse (Copy & Paste) 以及 multiple-terminal, 配合 Frame Buffer 顯示速度相當快速,蠻希望能讓使用繁體(Big5)的 GNU/Linux 和 FreeBSD users 也能使用這套極佳的中文界面,因此才有 big5cce 的出現。

big5cce 主要是增加繁體中文的各項輸入法支援,目前支援的輸入法計 有倉頡、注音、輕鬆、大易、行列、嘸蝦米、內碼等,而顯示的中文字形採用 FreeBSD 上著名的 big5con 所採用的 kc16.smf (轉成 cce 所使用的.bin)。 此外,還增加 了半形/全形的輸入,Ctrl+Shift的循環切換輸入法,對於其它 輸入法的增加可利 用 big5cce 所提供的 cin2tab 將輸入法的 .cin 轉換成 tab 並在 big5cce.cfg 中加入輸入法表格即可。

二、安裝

# cd /usr/ports/outta-port/big5cce
# make install clean
2) 依需求修改 /usr/lib/big5cce/big5cce.cfg
3) 執行檔將安裝在 /usr/bin/big5cce,輸入法、字型及設定檔(big5cce.cfg)
   則安裝在 /usr/lib/big5cce 目錄。

三、輸入法:

1) 使用 Ctrl+Shift 可輪流切換輸入法(Only GNU/Linux)。
2) Ctrl+Space  可切換 中/英 輸入狀態。
3) Shift+Space 可切換 半形/全形 輸入狀態。
3) Ctrl+Alt+0 內定為 內碼 輸入法,不須載入輸入法表格(.tab)
4) Ctrl+Alt+3 為預設的 注音 輸入法。
5) Ctrl+Alt+1 ~ 9 會依 big5cce.cfg 中設定載入輸入法表格(.tab)的順序切換。
6) Ctrl+Alt+9 預設為嘸蝦米輸入法,big5cce會使用獨立的嘸蝦米輸入處理,
   所以若想使用嘸蝦米輸入法請載入至 Ctrl+Alt+9 中。
   NOTE:
   big5cce 不提供嘸蝦米輸入法表格,請使用者自行 download
   嘸蝦米所使用的 .cin ,利用 big5cce 所提供的 cin2tab 轉換成 .tab
   並在 big5cce.cfg 中加入輸入法表格即可。

四、字形:

1) big5cce 內定使用 kc16.bin 字型。
2) 內附 hku-ch16.bdf 及 hku-ch16.bin 字形,原先 cce/kon 所附之
   bdf2bin 有些問題,經 cnoize 改良過後才能成功將 .bdf 轉成 .bin
   但仍有些字形會遺漏,詳細說明請參考 font/bdf2bin.c 的註解。
3) 若要增加新的字型(例如:BIG5+),請修改 font.c 關於字形 Coding
   的部份,以及使用 grep "hard code" *.c 中找尋相關的程式碼。

五、multiple-terminal:

1) Ctrl+Alt+A 開新視窗,最多可同時開十組視窗。
2) Ctrl+Alt+X 關閉所在視窗。
3) Ctrl+Alt+N 下一個視窗。
4) Ctrl+Alt+P 上一個視窗。

六、Mouse support:

1) 滑鼠支援,請在 big5cce.cfg 中設定使用的滑鼠(內定 PS2)。
2) 按住滑鼠左鍵可作文字反白(Copy)。
3) 按下滑鼠右鍵即在游標位址作 Paste 動作。
4) 修正原先 cce/kon 在 Paste 文字的 bug (by cnoize)。

七、其它功能:

1) Ctrl+Alt+R Refresh 所在視窗。

八、bugs/test:

1) 若欲使用 HardScroll 加速請在 Makefile 加入 -D__HardScroll__,
   但會有一些問題,請先不要使用。
2) FreeBSD 4.0 在 GNU/Linux vmware 下 mouse 需設為 MouseSystems 才能
   正常使用。

Gian-Yan Xu. <kids@linux.ee.tku.edu.tw>

WWW: http://linux.ee.tku.edu.tw/~kids/


7.5. cce - 簡體中文控制台環境

該程序是一個類似WZCE,yact和chdrv的控制台中文平台。 進入該環境可以用 "空格+Ctrl" 鍵來切換中文/英文的不同輸入方式, "Ctrl+Alt+0~9" 可以用來改變不同的輸入法。 "Ctrl+Alt+9" 是內碼輸入法。"Ctrl+Alt+0" 是拼音輸入法。 默認情況下,CCE以全拼輸入法作為默認輸入法, 並將五筆輸入法作為第二輸入法。您可以通過使用工具軟件cin2tab (安裝在/usr/lib/ccek中)和tab2cin來創建自己的輸入法。 cin2tab會將輸入法的源文件格式(*.cin)轉換成二進制格式, 而tab2cin完成的是相反的工作。

由於安全性問題,cce 被移出 ports tree, 不過筆者有另外保存了一份在 outta-port。

# cd /usr/ports/outta-port/cce
# make install clean
 Ctrl+Space              切換中文/英文輸入法 
 Ctrl+Alt+0              拼音輸入法 
 Ctrl+Alt+9              內碼輸入法 
 Ctrl+Alt+1              全拼輸入法 
 Ctrl+Alt+2              五筆輸入法 
 Ctrl+Alt+3-Ctrl+Alt+8   其它輸入法

Figure 7-3. cce snapshot

WWW: cce project

WWW: cce2k project


7.6. kon2

kon2 是ㄧ套支援 CJKV 的 Console 應用程式,也是目前 big5concce 的前身,不過他並不內含輸入法, 所以適合剛裝完找中文資料用,因為他是目前最穩定的了。

安裝 chinese/kon2

kon2 使用 kcfonts 內的 kc15f 中文繁體字型,這個字型包含了倚天外字等, 也包含了 fcitx 內的 gbkst16 中文簡體字型, 在切換的部份比較麻煩,目前預設是使用 BIG5-0, 如果要使用簡體環境,必須輸入 kon -Coding GBK-0, 繁體相對應的就是 kon -Coding BIG5-0, 而該程式目前也不管使用簡體或是繁體環境, 都會同時載入兩種字型,所以會有一點點慢,可以用 fld -i 來觀察目前載入的字型。

% fld -i
 No. ShmId Font Name       Size  MemSize
+---+-----+---------------+-----+-------+
  9  65541 JISX0201.1976-0  8x16    4080
 20  65540 GBK-0           16x16  774144
 24 196611 BIG5-0          16x15  472240

7.7. xcin25 - 繁體中文 XIM Server

如果您常使用 X Window,十分建議您採用 xcin25rxvt 組合的方式,來解決中文輸入的問題。

xcin25 是 Xwindow Chinese INput 的縮寫,是一個在 X Window 模式 下執行的中文輸入系統,因為 xcin25 是利用 X Window 的 Server/Client 方式執行的,所以您只要啟動一個 xcin25 輸入視窗 ,便可以對應許多的 rxvt 顯示虛擬終端機,佔用系統資源比較小。 也提供類似 DOS 環境下的忘形或自然輸入法的智慧型輸入選字環境。

安裝 chinese/xcin25

安裝完成後,在 ~/.cshrc 中增加下列的設定

export XMODIFIERS="@im=xcin"

並在 XF86Config 中的 Section "Files" 區段增加 FontPath "/usr/X11R6/lib/X11/fonts/local/"

目前的 port 還包進了酷音輸入法(chewing),一種聰明的注音輸入法。 它會根據常見的字詞,自動將您所輸入的注音轉變為適當的中文字, 使您幾乎不需要在輸入時一直選取同音字。

Figure 7-4. xcin25 snapshot

WWW: xcin project


7.8. GTK_IM_MODULE

GTK2 本身也提供不少輸入法供使用者選用, 您可以透過 gtk-query-immodules-2.0 來取得有那些 Input Method Module, 不過仍然沒有內建中文的輸入法模組, 所以他也支援非他本身所提供的其他方式來輸入, 例如 XIM。 GTK_IM_MODULE 在某些情況下的優先權會比 XMODIFIERS 還高, 如果為了保險起見, 可以設定為 xim。

% setenv GTK_IM_MODULE xim

如果要跨入 immodule 可以注意一下 japanese/uim。 uim 的目標是作為發展新 immodule 的基礎平台, 目前已經有不少 Emacs 的輸入法在上面,像是 PinYin。 或是 文具(wenju),他已經在上面開發五筆和拼音輸入法, 他利用 TIM(Table-based Input Method) 這個 GTK2 鍵盤輸入模組, 將輸入法以轉換碼表的方式控制,可以方便的修改或新增碼表來定義新的輸入法, wenju 的網站有詳細介紹 TIM 的安裝與使用方式。 某個大陸的輸入法 SCIM 也有做對 immodule 的支援。

筆者把 xcin25 的注音,倉頡,嘸蝦米的 .cin 轉成了 wenju 的 .tim, 有興趣的可以安裝 outta-port/wenju,然後設定 GTK_IM_MODULE 來選擇輸入法, 或是在視窗上按右鍵選擇。 注音是 phone.tim,倉頡是 cj.tim,嘸蝦米是 liu.tim, 如果要使用注音可以輸入如下:

% setenv GTK_IM_MODULE phone.tim
以下是轉換 .cin 到 .tim 的方式
# echo "TIMName=注音" > phone.tim.big5
# sed -e '/%/d' -e '/^#/d' phone.cin | awk '{print $1, $2}' | sort | uniq | \
      awk '{ if ( b == $1 ) { line = line "|" $2 } else { line = line "\n" $1 "=" $2 } b = $1 } END { print line }' \
      >> phone.tim.big5
# iconv -c -f big5 -t utf-8 phone.tim.big5 > /usr/X11R6/share/wenju/phone.tim
# gtk-query-immodules-2.0 > /usr/X11R6/etc/gtk-2.0/gtk.immodules

以下是輸入法的使用方式
Shift+Space 可切換英數輸入法
.           下一個字或詞
>           下十個字或詞
,           上一個字或詞
<           上十個字或詞
Space       選擇第零個字或詞
Ctrl+數字   選擇第幾個字或詞
Enter       送出

剛切換到 wenju 的時候,OverTheSpot 會在最左上角, 可以任意輸入一個字然後按方向鍵,他就會跑到正確的位置上。 不過選字的方式還需改進,目前是由 0 至 9, 通常是習慣 1 至 0 的鍵盤排列順序。

WWW: UIM input method collection

WWW: 文具(wenju) - Writing Tools

WWW: Smart Common Input Method(SCIM)


7.9. chinput - 簡體中文 XIM Server

Chinput-2.1 在 GNU/Linux 平台上移植過來的軟體。 目前有 chinputchinput2 兩種套件。 中文 GB、BIG5、日文碼輸入伺服器。

安裝 chinese/chinput

# cp work/chinput/fonts/*.pcf.gz /usr/X11R6/lib/X11/fonts/local/
# mkfontdir /usr/X11R6/lib/X11/fonts/local/
# xset fp rehash

安裝 chinese/chinput3

安裝好 chinput 後,記得要修改 .xinitrc 的 XMODIFIERS, 如果沒有的話就自行加上。

export XMODIFIERS="@im=Chinput"

然後只要用 chinput & 就可以開啟, 不過預設開啟的時候是隱藏的,必須再用 ctrl+space 叫出來。

熱鍵:
        Control-space:          隱藏/彈出輸入窗口
        Control-LeftButton:     隱藏輸入窗口(適用于在不支持XIM的軟件
                                中工作時想把輸入條隱藏的場合)
        Alt-space:              切換輸入條的顯示模式(根窗口模式和光標跟隨模式)
        Control-Alt-Space:      切換自動隱藏和非自動隱藏模式.
        F1:                     激活/禁止中文輸入
        (Shift)Fn:              切換輸入方法

接著開啟一個簡體終端機:rxvt -fm "-aliasdefault-ming-medium-r-normal--16-160-0-0-c-160-gb2312.1980-0" -im Chinput &

Author WWW: Yu Mingjian's Homepage


7.10. miniChinput - 簡體中文 XIM Server

安裝 chinese/miniChinput

修改 ~/.xinitrc 文件加入 export XMODIFIERS=@im=Chinput

WWW: miniChinput project


7.11. xsim - 簡體中文 XIM Server

安裝 chinese/xsim

確認存在 /usr/X11R6/lib/X11/locale/zh_CN/XI18N_OBJS, 如果沒有,可以拷貝這個 /usr/X11R6/lib/X11/locale/zh/XI18N_OBJS 並修改注釋 __XlcEucLoader 的一行。

修改 ~/.xinitrc 文件加入 export XMODIFIERS=@im=XSIM

WWW: xsim project


7.12. fcitx - 簡體中文 XIM Server

安裝 chinese/fcitx

修改 ~/.xinitrc 文件加入 export XMODIFIERS=@im=fcitx

測試:

% setenv LANG zh_CN.EUC
% setenv LC_CTYPE zh_CN.EUC
% setenv XMODIFIERS @im=fcitx
% rxvt -fm "-*-gbk-*" -km gb &

如果是 KDE3 的使用者可能會發現無法使用的問題, 可能是因為預設 Root 而 fcitx 並不支援, 可以透過執行 qtconfig,選擇 Interface -> XIM Input Style: Over The Spot, File -> Save,然後重開要輸入的軟體即可。

WWW: fcitx project


7.13. aterm - 支援 XIM 的中文終端機

aterm 是一套彩色 vt102 終端機軟體, 支援透明和 XIM。

安裝 chinese/aterm

筆者目前使用的設定 ~/.Xdefaults

! Begin ports/chinese/aterm configuration
aterm.borderColor:              black
aterm.background:               black
aterm.backspacekey:             "^H"
aterm.cursorColor:              IndianRed
aterm.foreground:               gray98
aterm.geometry:                 80x24
aterm.inputMethod:              xcin
aterm.multichar_encoding:       big5
aterm.preeditType:              OverTheSpot
aterm.scrollTtyKeypress:        True
aterm.scrollTtyOutput:          False
aterm.scrollBar_right:          True
aterm.shading:                  30
aterm.termName:                 xterm-color
aterm.transparent: True
aterm.transpscrollbar: True
aterm.troughColor:              black
!您可選擇想要的字體大小
! 國喬 16pt, 國喬 16pt
aterm.font:                     8x16
aterm.mfont:                    kc15f
! End ports/chinese/aterm configuartion

Figure 7-5. aterm snapshot

WWW: aterm project


7.14. rxvt

rxvt 是 ouR eXtended Virtual Terminal 的縮寫,一開始是與舊版本的 xcin 配合才有一個可以輸入中文的 Terminal,不過現在逐漸有其他的 Terminal 出現,以及 XIM 架構的確立, 和 X Window 的盛行,Terminal 逐漸顯得渺小。

目前 rxvt 有兩個版本, rxvtrxvt-devel 等,都支援 XIM, 建議使用 rxvt-devel,原因是 rxvt 無法使用 TrueType 的中文字型來顯示。

安裝 x11/rxvt-devel

另外再編輯 ~/.Xdefaults 來完成中文設定, 以下是筆者目前的設定:

! Begin ports/x11/rxvt-devel configuration
rxvt.borderColor:              black
rxvt.background:               black
rxvt.backspacekey:             "^H"
rxvt.cursorColor:              IndianRed
rxvt.foreground:               gray98
rxvt.geometry:                 80x24
rxvt.inputMethod:              xcin
rxvt.multibyte_cursor:         yes
rxvt.multichar_encoding:       big5
rxvt.preeditType:              OverTheSpot
rxvt.scrollTtyKeypress:        True
rxvt.scrollTtyOutput:          False
rxvt.scrollBar_right:          True
rxvt.termName:                 xterm-color
rxvt.troughColor:              black
!您可選擇想要的字體大小
! 國喬 16pt, 國喬 16pt
rxvt.font:                     8x16
rxvt.mfont:                    kc15f
! End ports/x11/rxvt-devel configuartion

不過 rxvt 無法使用拷貝與貼上到其他的應用軟體,所以通常都會改用 Eterm 來替代。

不過黑底白字還是會有點醜,通常筆者都會找 XPM 來當底圖, -pixmap xpmfile,或是找比較深色的桌布, 用 -tr 來把桌布當底圖。

另外,現在還支援 Multibyte Character Cursor movement 參數是 -mcc,可以一次移動一個漢字、一次漢字。 所有原先一次半個漢字的東東(如在 joepine等) 現在都可以方便的使用了!login 到別台電腦上也可以這樣子。 不過原先用 vim 會變成一次移動兩個漢字, 要 set fileencoding=ansi 才會正常。

Figure 7-6. rxvt snapshot

WWW: rxvt project


7.15. Eterm

除了 rxvt 以外的另一個選擇,支援 XIM,功能少但是比 rxvt 穩定。 tinting+transparency+scrollbar 則是另一個賣點。

安裝 chinese/eterm

如果習慣了 backspace 送出 ^H,可以將 eterm.backspacekey: "^H" 設定寫在 ~/.Xdefaults。 但是 Eterm 並不支援在 ~.Xdefaults 中的其他資訊, 所以通常都會另外寫一個 script 來啟動 Eterm, 例如寫在 /usr/X11R6/bin/eterm

Eterm --font "-*-medium-r-normal-*-*-160-*-*-c-*-iso8859-1"  \
    --mfont kc15f --mencoding big5 --input-method xcin \
    --preedit-type OverTheSpot -8 -g 80x24 -B next -O \
    --cmod 200 &

比較好玩的參數如:-P "gaia.jpg@100x100"-P "galleon.jpg@100x100"-P "fourthday.jpg@100x100"-P "night_of_the_dragon.jpg@100x100" 等漂亮的底圖。所以筆者通常都會把圖加到 /usr/X11R6/share/Eterm/pix/, 並修改 /usr/X11R6/share/Eterm/pix/pixmaps.list 只留自己喜歡的圖。底圖以深色系為主,因為預設的字是白色。 或是用自己喜歡的圖 -P "ffx.jpg@100x100"

Figure 7-7. Eterm snapshot

WWW: eterm project


7.16. mlterm - 多國語言終端機

安裝 x11/mlterm

並安裝 chinese/kcfonts, 接著開始設定環境。

在家目錄下建立 .mlterm 資料夾, 並且增加兩個檔案,一個檔案是 ~/.mlterm/main, 增加如下的內容:

bg_color=black
fg_color=white
geometry=80x24

若是 XFree86 4.1.0 之前則另外加上 big5_buggy=true 來解決複製貼上的問題。

並增加另一個檔案 ~/.mlterm/font 如下的內容:

BIG5=16,kc15f;20,-*-medium-r-normal--20-*-big5-0;24,kc24f;

若是要使用 anti-alias 的功能則要修改 ~/.mlterm/aafont 來增加以下的內容:

ISO8859_1=AR PL Mingti2l Big5-ISO8859-1;
BIG5=AR PL Kaitim Big5-ISO10646-1;
JISX0208_1983=AR PL Kaitim Big5-BIG5-0;

並在 ~/.mlterm/main 增加 use_anti_alias=true

mlterm 本來有個蠻困擾的問題,就是對色碼的處理並不是很好, 不過在 gugod 的提醒下,發現在處理色碼前先執行 screen, 例如用 mlterm 來連 BBS,mlterm 就可以蠻正常的顯示色碼的部份。

Figure 7-8. mlterm snapshot

WWW: mlterm project


7.17. cxterm - X Window 下的內建輸入法中文終端機

在 X Window 模式下執行的中文虛擬終端機,為最古老的中文顯示/輸 入環境,提供各種中文內碼模式,包含 BIG5,HZ,GB 等等。每一個 cxterm 虛擬終端機都必須載入中文資料, 耗用的系統資源相當大,故現在都以 rxvt 來取代之。

安裝 chinese/cxterm

然後用 CXterm -bg black -fg white -big5 & 啟動就可以看到中文的介面了。

以下是輸入法的切換方式:

SHIFT_F1  - 英文輸入 (ASCII input)
SHIFT_F2  - 漢字輸入::內碼::
SHIFT_F3  - CXTERM input configuration
SHIFT_F4  - 漢字輸入::拼音::
SHIFT_F5  - 漢字輸入::標點符號::
SHIFT_F6  - 漢字輸入::零壹注音::
SHIFT_F7  - 漢字輸入::倉頡::
SHIFT_F8  - 漢字輸入::英漢::
SHIFT_F9  - 漢字輸入::許式注音::
SHIFT_F10 - 漢字輸入::無蝦米::
CTRL_滑鼠中鍵 - POPUP CONFIGURATION PANEL

Figure 7-9. cxterm snapshot

WWW: cxterm project


7.18. 新增輸入法 - 嘸蝦米輸入法為例

目前常見的輸入法表格有兩種格式:titcin。這兩種都是純文字格式 (換句話說您可以直接用文書編輯器來觀看)。 但各個中文系統為了加快搜尋速度,多半提供工具 程式將純文字格式轉為特殊的二進位檔。如果您要安裝某種輸入法, 必須取得它的 titcin 表格,或是轉換後的格式。

以下嘸蝦米輸入法為例,分別說明如何在各中文系統中加入嘸蝦米輸入法:

行易公司已經不在允許嘸蝦米 .cin 檔的自由傳播, 所以就沒有了嘸蝦米的輸入法表格。 請自己利用檔案搜索引擎尋找。例如在以下的搜尋引擎輸入 liu55

Flobal Area Information Servers FTP

利用 xcin25 的工具程式 cin2tab.cin 表格轉換為 .tab 檔:

# /usr/X11R6/lib/X11/xcin25/bin/cin2tab liu55.cin
CIN2TAB 版本 (xcin 2.5.2.2) 字集編碼名稱=big5
cin2tab: cin 表格檔: liu55.cin, 使用模組: gencin 版本 20000827。
cin2tab: 定義鍵的數目: 31
cin2tab: 字鍵的最大長度: 5
cin2tab: 編碼的字元總數: 13973
cin2tab: 定義的字元數目: 23411
cin2tab: 已定義的字鍵編碼數目: 23411
cin2tab: 忽略的已定義字元數目: 0
cin2tab: 記憶體模式: 1

它會產生 liu55.tab 這個檔案。將它放到 /usr/X11R6/lib/X11/xcin25/tab/big5/ 的目錄中。

接下來請修改您的 xcinrc 的設定檔,其中每行開頭的 - 和 + 分別代表刪除這一行和新增這一行,內容如下:

;
;  This is the global configuration of the zh_TW.Big5 locale
;
(define zh_TW.Big5
  '((DEFAULT_IM         "cj")
    (DEFAULT_IM_MODULE  "gen_inp")
    (DEFAULT_IM_SINMD   "DEFAULT")
    (PHRASE             "default.phr")
    (CINPUT             (cj simplex phone bimspinyin bimsphone jyutping
-                         array30 zh_hex))
+                         array30 zh_hex liu55))
    (FONTSET            "-sony-*-16-*-iso8859-1,-*-16-*-big5-0")
    (OVERSPOT_FONTSET   "-sony-*-16-*-iso8859-1,-*-16-*-big5-0")))

;
;  Here are detailed configuration of each IM (for zh_TW.Big5 locale).
;
+ (define liu55@big5
+         '((SETKEY               9)))

啟動 xcin25

# xcin2.5 &

然後用 CTRL-ALT-9 即可叫出嘸蝦米輸入法。

WWW: xcin Cin檔案格式

以下是如何在 big5con 底下新增嘸蝦米輸入法。

到檔案搜索引擎找 boshiamy,就可以發現有 boshiamy.tgz, 下載之後,解壓縮到 /usr/local/lib

# fetch ftp://freebsd.csie.nctu.edu.tw/pub/taiwan/NTU/woju/binary/boshiamy.tgz
# tar zxvf boshiamy.tgz -C /usr/local/lib

然後編輯 /usr/local/bin/et 加入 -in9 Boshiamy.tab,然後直接打 et 來啟動 big5con


7.19. 在 Bash/Tcsh Shell 底下的中文輸入

在完成中文系統建立的工作,您已經可以在您的 FreeBSD 機器上面顯示中文了。但如果您使用 Shell,您會發現, 您的 FreeBSD 只能顯示中文,卻無法接受中文的輸入工作。 如果您想要改進這個問題,您必須自己修改一些設定,使 FreeBSD 系統可以接受中文的輸出與輸入工作。

您必須要在您使用的 Shell 起始檔增加 locale 的設定。 (如果您的家目錄中並未有這樣的檔案,請自行建立)

Bash Shell:

~/.profile~/.bashrc 增加下面的內容:

#stty cs8 -istrip
#stty pass8
export LANG=zh_TW.Big5
export LC_CTYPE=zh_TW.Big5

另外在 ~/.inputrc 檔增加設定如下:

# inputrc - global inputrc for libreadline
# See readline(3readline) and `info rluserman' for more information.

# Be 8 bit clean.
set meta-flag on
set input-meta on
set output-meta on

# To allow the use of 8bit-characters like the german umlauts, comment out
# the line below. However this makes the meta key not work as a meta key,
# which is annoying to those which don't need to type in 8-bit characters.
set convert-meta off

Tcsh Shell:

~/.login~/.cshrc 增加設定如下:

#stty cs8 -istrip
#stty pass8
setenv LANG zh_TW.Big5
setenv LC_CTYPE zh_TW.Big5
set dspmbyte="
0000000000000000000000000000000000000000000000000000000000000000
2222222222222222222222222222222222222222222222222222222222222220
2333333333333333333333333333333333333333333333333333333333333333
3333333333333333333333333333333333333333333333333333333333333330"

請將 dspmbyte 在 "" 中的字串接起來。

關於 dspmtype 設定的原因是因為在 tcsh 的 man page 中,對照 Big5 的使用字碼表 [\x81-\xFE][\x40-\x7E\x80-\xFE] 而設定的。

tcsh-6.11 內建了中文 big5 支援

       dspmbyte (+)
               If set to `euc', it enables  display  and  editing
               EUC-kanji(Japanese)  code.   If  set to `sjis', it
               enables display  and  editing  Shift-JIS(Japanese)
               code.   If  set  to `big5', it enables display and
               editing Big5(Chinese) code.  If set to the follow
               ing  format,  it  enables  display  and editing of
               original multi-byte code format:

所以以後 dspmbyte 設定成 big5,不用設定一大串; 或者乾脆不要設定 dspmbyte,只要 LANG 為 zh_TW.Big5 就可以了 :)

2001/09/05 -CURRENT 匯入 tcsh-6.11
2001/10/08 -STABLE  匯入 tcsh-6.11
http://www.freebsd.org/cgi/cvsweb.cgi/src/contrib/tcsh/Fixes

Figure 7-10. tcsh snapshot


7.20. big5fs - Joliet, VFAT 和 NTFS 檔案系統的中文顯示

如果您的電腦是 FreeBSD 與 VFAT (Windows95/98) 或是 NTFS (Windows NT/2000) 並存, 而且又須要存取 DOS 檔案系統或是 NTFS 檔案系統的中文檔名, 或是需要讀取 Joliet (CDROM) 內的中文, 請依照以下的步驟進行。 由於 cd9660, ntfs 等都是以 16-bit Unicode (UCS-2) 作為系統編碼, 因此要顯示的時候必須轉為目前的環境編碼(Big5), 因此在顯示前必須多一層的轉碼動作才能在 Big5 的環境底下看到中文。

它會安裝三個 kernel 模組, cd9660.ko, msdos.ko(msdosfs.ko) 和 ntfs.ko, 將可以讓使用者讀取在 Joliet, VFAT 和 NTFS 檔案系統上的 中文檔名。

必須把 kernel 中的 options MSDOSFSoptions CD9660 comment 掉,並重新 make kernel 後,並且重新開機後,才能安裝 big5fs。 因為上面的 kernel 選項會和這個 port 所安裝的 kernel 模組有衝突, 而 kernel 選項會比 kernel 模組優先, 也沒辦法關閉這些選項來讓 kernel 使用 kernel 模組, 所以就一定得重編 kernel。 不然當安裝完後,執行 big5fs.sh 就會出現 kldload: can't load cd9660: File exists 或是 module_register: module cd9660 already exists! linker_file_sysinit "cd9660.ko" failed to register! 17 之類的錯誤訊息,代表著模組有衝突,可能是已經設定為 kernel 選項, 或是已經用 kldload 載入了。

--- GENERIC.orig   Fri May 16 17:39:13 2003
+++ GENERIC     Wed May 28 03:37:52 2003
@@ -38,8 +38,8 @@
 options    MD_ROOT         #MD is a potential root device
 options    NFS         #Network Filesystem
 options    NFS_ROOT        #NFS usable as root device, NFS required
-options    MSDOSFS         #MSDOS Filesystem
-options    CD9660          #ISO 9660 Filesystem
+#options   MSDOSFS         #MSDOS Filesystem
+#options   CD9660          #ISO 9660 Filesystem
 options    CD9660_ROOT     #CD-ROM usable as root, CD9660 required
 options    PROCFS          #Process filesystem
 options    COMPAT_43       #Compatible with BSD 4.3 [KEEP THIS!]

在安裝前先檢查 /usr/src/sys 目錄要已有了, 若沒可用 /stand/sysinstall 和安裝光碟安裝。 由於 kernel 模組和系統有相依性, 必須取得您當時安裝時的 kernel 版本才行。

安裝 chinese/big5fs

安裝好後,執行 /usr/local/etc/rc.d/big5fs.sh 就會載入上述的模組, 好讓 mount 指令能使用這些模組,通常也會在開機時自動執行, 以防 mount 指令直接讀取了 /modules 底下的 kernel 模組。

如果不確定那些分割區可以 mount,可以用 /stand/sysinstall 的 Configure -> Label 取得。

以筆者為例,筆者有個 ad0s3 的分割區,所以先 mkdir -p /mnt/ad0s3,然後用 mount -t msdos /dev/ad0s3 /mnt/ad0s3 將該分割區 mount 起來測試看看, 如果確定可以的話,寫入 /etc/fstab

/dev/ad0s3              /mnt/ad0s3      msdos   ro,noauto       0  0

然後加個 /usr/local/etc/rc.d/big5mount.sh ,裡面按照 rc.d 的規則在 start 的地方執行 mount /mnt/ad0s3 就可以了, 也可以在 stop 時候加上相對應的指令來 umount。 注意 rc.d 裡的 *.sh 會依字母順序執行,所以新的 xx.sh 一定要在 big5fs.sh 後面, 才能確定已經載入 kernel 模組。

本來考慮使用 mount_msdos 的方式並修改該 table,不過因為 table 太小,沒辦法容納如此多的中文字元所以沒辦法實行。

The following example fstab(5) entry enables support for Russian
filenames in mounted MS-DOS filesystems:

    /dev/ad0s2      /dos/c  msdos   rw,-W=koi2dos,-L=ru_RU.KOI8-R 0 0

See mount_msdos(8) for a detailed description of the -W and -L options.

5-CURRENT 已經有 kiconv,也有熱心的日本人弄了 I18N 修補檔, 就不用裝這個 port,只要設定好參數就能正常的用中文。 也就是說 mount_cd9660(8), mount_ntfs(8) 等工具支援 -C 來指定目前的字集,用來轉換 Unicode 檔名, 而 mount_msdosfs(8) 則要用 -D 來指定 MS-DOS codepage,並用 -L 來指定目前的字集。

# mount_msdosfs -D CP950 -L zh_TW.Big5 /dev/ad0s1 /mnt/disk
# mount_ntfs -C Big5 /dev/ad0s2 /mnt/win
# mount_cd9660 -C Big5 /dev/acd0 /cdrom
# /etc/fstab
/dev/ad0s1  /mnt/disk   msdos   rw,-D=CP950,-L=zh_TW.Big5,noauto    0   0
/dev/ad0s2  /mnt/win    ntfs    ro,-C=Big5,noauto   0   0
/dev/acd0   /cdrom      cd9660  ro,-C=GBK,noauto    0   0

在 GNU/Linux 底下也是類似的做法:

# mount -t vfat -o iocharset=big5,codepage=950 /dev/hdb5 /mnt/disk
# mount -t ntfs -o codepage=950 /dev/hdb6 /mnt/win

不過在 zh_TW.UTF-8 的 locale 底下就要改成:

# mount -t vfat -o iocharset=utf8,codepage=950 /dev/hdb5 /mnt/disk

Figure 7-11. ntfs snapshot


7.21. ls - 用 ls 顯示特殊中文檔名和目錄

ls 觀看中文最簡單的方式就是用 ls -w 即可, 或是用 env LC_CTYPE=en_US.ISO8859-1 ls

大多數使用 GNU/Linux 的使用者可能會選擇安裝 misc/gnuls。 並用gnuls --color=auto --show-control-chars 這樣子能有色彩並能夠顯示中文,不過目前已經沒有必要的原因使用了, 在以前會有特殊控制字元的問題才必須使用它。

如果要將 ls 修補成 I18N 的程式, 可以嘗試安裝 outta-port/ls, 但是該修補可能只能用於 5-CURRENT。

Note:env TERM=xterm-color ls -G 就有彩色顯示的目錄與檔案了。以下的設定可以讓 /bin/ls 還有 tcsh 內建的 ls-F 的彩色顯示一致 ,它是 tcsh 內建指令, LSCOLORS 是給 ls 用的環境變數, 以下是設定成 gnuls 的顏色,而 LS_COLORS 則是給 gnuls, 相對的則是設定成 ls 的顏色, 兩者的格式並不相同,選一個習慣的即可。

# setenv CLICOLOR
# set color
# setenv LSCOLORS ExGxFxdxCxDxDxBxBxExEx
# setenv LS_COLORS 'di=0;34:ln=0;35:so=0;32:pi=0;33:ex=0;31:bd=0;34;46:cd=0;34;43'

Figure 7-12. gnuls snapshot


7.22. xpdf - 中文 PDF 的顯示

xpdf 是用來瀏覽 Portable Document Format (PDF) 檔案的好工具。 (通常也會稱這些檔案為 'Acrobat' 檔,因為 Adobe 的 PDF 軟體)

安裝 graphics/xpdf

安裝完後,只要在 ~/.Xdefaults 中設定中文字型,就可以很正常的看非內嵌中文的檔案。

xpdf.chineseCNSFont: -*-*-medium-r-normal-*-%s-*-*-*-*-*-big5-0
xpdf.chineseGBFont: -*-*-medium-r-normal-*-%s-*-*-*-*-*-gb2312.1980-0

現在 xpdf 已經將 xpdf 中的 CMap 與主程式分開了, 如果要看到中文還必須安裝 xpdf 的 CMap 檔。 當您看到這樣子的錯誤訊息:

Error: Couldn't find cidToUnicode file for the 'Adobe-CNS1' collection
Error: Unknown character collection 'Adobe-CNS1'

Error: Couldn't find 'ETen-B5-H' CMap file for 'Adobe-CNS1' collection
Error: Unknown CMap 'ETen-B5-H' for character collection 'Adobe-CNS1'

則表示沒安裝 xpdf CMap,所以要安裝 chinese/xpdf 並設定好字型。

如果裝好還看到以下的訊息:

Error: Couldn't find 'ETenms-B5-H' CMap file for 'Adobe-CNS1' collection
Error: Unknown CMap 'ETenms-B5-H' for character collection 'Adobe-CNS1'

這是因為 ETenms-B5-H 已經不在 Adobe 的現存標準內, 您可以手動把 /usr/local/share/ghostscript/Resource/CMap/ 底下的 ETen-B5-H 拷貝成 ETenms-B5-H

如果遇到 Error: Couldn't find a font to substitute for 'ShanHeiSun-Light' ('Adobe-CNS1' character collection) ,那麼就要改一下 xpdfrc:

psNamedFont16 ShanHeiSun-Light H ShanHeiSun-Light-B5-H Big5
psFont16 ShanHeiSun-Light H ShanHeiSun-Light-B5-H Big5

xpdf 中也包含一個 PDF 轉純文字檔的程式, 可以用 pdftotext -enc Big5ascii file.pdf 轉出文字檔 file.txt,如果只用 -euc Big5 英文會變成全形字。

xpdf-2.03 已加入 pdf bookmarks 的顯示功能,只是中文還不行。

Figure 7-13. xpdf snapshot

WWW: xpdf project


Chapter 8. 中文視窗管理程式


8.1. GNOME 程式的中文支援

GNOME 並不是一個軟體,而是由 GNU Project的另一項軟體計劃,而它的目標就是創造出一個完整 而友善的桌面環境。為了達成這個目標,在 GNOME 收集的工具中, 包含了發展工具,網路工具,數學工具,還有系統管理和桌面管理的 工具,甚至連娛樂用軟體和多媒體處理的工具都包含在它的收集之列, 讓您的 X Window 使用起來,簡直有如虎添翼一般。

但 GNOME 的好處不僅僅如此而己,現在在 X Windows 底下, 當您要開啟某個檔案,您只要在 GNOME 的檔案總管按二下就可以檢視它了。這原本只能在 Mac OS 或 MS Windows 看的到的能力,現在在 GNOME 之下,在 X Windows 下也能看到。

GNOME 程式是基於 GTK+ 這個函式庫開發出來的, GTK+ 的國際化一直做的不錯,所以在目前的環境底下,大部分的 GNOME 程式都可以正常使用中文了。

訊息翻譯也由 http://i18n.linux.org.tw 正在進行著, 有空請多多給他們鼓勵吧。

WWW: http://www.gnome.org/


8.1.1. gtk2

在 gnome2.2 之後採用 xft2 & fontconfig 來設定字型, gtk2 的設定方式是用 ~/.gtkrc-2.0, 設定的格式與 ~/.gtkrc相同, 但是取用字型的寫法不ㄧ樣。

style "gtk-default-zh-tw" {
    font_name = "Sans 16"
}
class "GtkWidget" style "gtk-default-zh-tw"

如果要更改預設字型大小直接修改 ~/.gtkrc-2.0 就可以了,而如果是要改顯示的字型則是可以選擇 ~/.gtkrc-2.0 或是 fonts.conf, 而字型名稱可以從 fc-list 這個指令得到。

Note: 中文字在小字的時候,某些字型使用 anti-alias 反而會變得模糊, gtk2 使用 Xft2,設定檔則是 /usr/X11R6/etc/fonts/fonts.conf ,以下的範例是關閉小於 13 點字型時的 anti-aliasing。

        <match target="pattern">
                <test qual="any" name="size" compare="less">
                        <int>13</int>               
                </test> 
                <edit name="antialias" mode="assign">
                        <bool>false</bool>         
                </edit>             
        </match>

另外 gtk2 不支援 OverTheSpot,只支援 Root 及 OnTheSpot, 可以用 gconftool-2 更改設定。如果還是不行,在輸入區按下右鍵, 選取輸入模組 XIM


8.1.2. gtk1

以下是 gtk1 的設定方式,設定檔的內容如下: (應該會在 /usr/X11R6/share/themes/Default/gtk/gtkrc.zh_TW.Big5 )

# $(gtkconfigdir)/gtkrc.zh_TW
#
# This file defines the fontsets for Chinese language (ch) using
# the traditional chinese Big5 encoding as used in Taiwan (TW)
#
# 1999, Pablo Saratxaga <pablo mandrakesoft.com>
#

# IMPORTANT NOTE: The name of this file *MUST* be "gtkrc.zh_TW.big5"
# the lowercasing of "big5" is done on purpose, if you change it it won't work

style "gtk-default-zh-tw" {
        fontset = "-adobe-helvetica-medium-r-normal--16-*-*-*-*-*-iso8859-1,\
                  -taipei-*-medium-r-normal--*-*-*-*-*-*-big5-0,\
                  -*-*-medium-r-normal--16-*-*-*-*-*-big5-0,*-r-*"
}
class "GtkWidget" style "gtk-default-zh-tw"

這個檔案裡面設定了 zh_TW.Big5 環境要用到的字型集, 上面的設定表示在使用 zh_TW.Big5 環境的時候會需要用到兩種字體, 一個是 iso8859-* 的字體,用來顯示英文字,一種是 big5-0 的字體, 用來顯示 BIG5 中文。讀者可以把這個設定檔複製一份到 ~/.gtkrc,更改裡面的設定, 就可以在 GNOME 環境底下使用自己喜歡的字體了。

# cp /usr/X11R6/share/themes/Default/gtk/gtkrc.zh_TW.Big5 ~/.gtkrc

這是筆者偷懶的 ~/.gtkrc 範例

style "default" {
 fontset = "8x16,kc15f,-*-16-*-big5-0"
}
widget_class "*" style "default"

Note: 如果是在 GNOME2 底下使用 gtk1 的程式, 要改成修改 ~/.gtkrc.mine

WWW: GNOME 中文使用手冊


8.1.3. Nautilus 中文字變成 ???

首先要設定好 ~/.gtkrc, 這樣子介面的部份就會是中文的,可是內容的部份還需要修正, 開啟軟體後:

偏好設定 -> 編輯偏好設定 -> 外觀 -> [取消] 使用平滑的圖像

Figure 8-1. nautilus snapshot

Contributed by mingchi@bbs.sayya.org

Q2: 要建立中文新檔或目錄時他用utf8來編碼, 與以前的Big5的檔案系統不和,該如何把他設成也是用 Big5碼來建立新的檔案或資料夾?

A2: glib與gtk2以後,對於檔案命名都是用utf8編碼, 所以用Nautilus新增中文檔名都是用utf8編碼。解決方式為 在自己home底下編輯 ~/.gnomerc 加入 export G_BROKEN_FILENAMES=1 那他就用您預設的locale LANG 與 LC_ALL的變數作編碼囉。

For more detail GTK+-2.2 Specific Notes


8.2. Enlightenment 的中文化

Enlightenment 的中文化雖然不是利用 po 檔翻譯,不過中文選單只要經過如下的 patch 後就應該沒問題了, 不過在 Vanilla I. Shu 的大力幫忙下,預設的 themes 已經都中文化好了, 只是如果下載新的 themes ,就必須自行做 patch 的部分。

安裝 x11-wm/enlightenment

選單的設定檔在 /usr/X11R6/share/enlightenment/config, 如果想中文化選單可以自己試試看。

Enlightenment 的中文化, 只要 theme 裡面的字型設定正確就可以了。大部分下載的 theme 都只有設定 iso8859-1 的字型,還要在後面加上 big5-0 的字型, E 的程式本體 "基本上" 不做任何字型設定, 任何字型都是從 theme 裡面定義的。

在 theme 的 __NORMAL 部分都是字型設定, 但這些字型設定是散在各個設定檔裡面。 所幸,textclasses.cfg 就是讓您覆蓋用的,現在的做法就是改成 fontset 的樣子就可以用了。例如原本的字串是:

__NORMAL "-*-helvetica-bold-r-normal-*-*-120-*-*-*-*-*-*"

要改成如下:

__NORMAL "-*-helvetica-bold-r-normal-*-*-120-*-*-*-*-*-*,-*-bold-r-*-12-*"

只要記得前面是 -bold-r- 就改成 -*-bold-r-*-12-*, -medium-r- 就改成 -*-medium-r-*-12-*, 這樣子出來的字型才會比較相近。

上述的方法有一個特例,就是 E 有個特異功能。 不用 Xtt server 就可以 show ttf 字型。而它的 __NORMAL 可以吃的字型有兩種。一種是 X 裡面設定好的字型。另一種是放在 theme 裡面的 *.ttf。 ([theme name]/ttfonts 裡面)

E 目前還不能夠把 "跟著 theme 來的 ttf" 和 "X 環境的任何字型" 混在一起寫成 fontset 的型式。

WWW: http://www.enlightenment.org/


8.3. KDE 的中文化

KDE, The K Desktop Environment 這套使用環境,包含了三個工作區域。位於螢幕下方的panel, 是用來開啟應用程式以及切換不同的虛擬桌面的。它有一個類似 MS-Windows 中的開始按鈕(Application Starter),是一個大K 的圖案,按下它就會顯示可以執行的應用程式。螢幕左上角的 taskbar,是用來切換跟管理目前正在跑的應用程式的。而 desktop 本身,可以用來放置檔案或是資料夾, KDE 提供數個虛擬桌面,按下在 panel 的按鈕可以切換他們。

KDE 有著很大的彈性, 可以很容易地設定成習慣的使用方式,就拿 KDE Control Center 來說吧,可以調整有關於 Applications(桌面管理以及 panel 的各項設定)、Desktop(背景圖、顏色、螢幕保護、字形和語言)、 Information(記憶體和CPU的使用率)、Input Device(鍵盤和滑鼠)、 Network(網路相關)、Sound(事件音效)以及Windows的各類模組(modules) 的設定。

KDE 在中文化的方面做的很不錯了,在 KDE 中大部分的軟體都支援 XIM ,一下子多了很多好用且可以輸入中文的軟體, 而且畫面的美觀是這次改變的重點之一,巫師好像也成為 KDE 象徵, 真的建議有空試試看這一套軟體。 訊息翻譯也由 http://i18n.linux.org.tw 正在進行著,有空請多多給他們 鼓勵吧。

KDE WWW: http://www.kde.org/

這是 Taiwan KDE Users' Group http://kde.linux.org.tw/


8.3.1. KDE1 [OBSOLETE]

Last Update: 2003年 1月19日 周日 08時18分25秒 CST

這邊有個進入 KDE 會比較快的小秘訣。 修改 ~/.qti18nrc

Ariel   -*-ming-medium-r-normal--*-*-*-*-c-*-big5-0
Andale  -*-ming-medium-r-normal--*-*-*-*-c-*-big5-0
Georgia -*-ming-medium-r-normal--*-*-*-*-c-*-big5-0
Times   -*-ming-medium-r-normal--*-*-*-*-c-*-big5-0
Trebuc  -*-ming-medium-r-normal--*-*-*-*-c-*-big5-0
Verdana -*-ming-medium-r-normal--*-*-*-*-c-*-big5-0
Courier -*-ming-medium-r-normal--*-*-*-*-c-*-big5-0
Helvetica       -*-ming-medium-r-normal--*-*-*-*-c-*-big5-0
kai     -*-ming-medium-r-normal--*-*-*-*-c-*-big5-0
ming    -*-ming-medium-r-normal--*-*-*-*-c-*-big5-0
*       -*-ming-medium-r-normal--*-*-*-*-c-*-big5-0

8.3.2. KDE2 [OBSOLETE]

Last Update: 2003年 1月19日 周日 08時18分25秒 CST

安裝 x11/kde2

Note: 記得安裝 chinese/arphicttf, 要不然設定出來的字還都會是問號。

如果沒有辦法輸入中文的話,用命令列模式試試加上 -im xcin ,例如 kword -im xcin

簡單的中文化設定:

先開啟 ``控制中心(Control Center)'', ``個人化(Personalization)'', ``國家及語言(Country & Language)'', 設定成 ``台灣(tw)'', ``繁體中文(zh_TW.Big5)'',``big5-0''。

經過這樣的設定之後,原則上,KDE2 就有完整的中文支援了。

筆者的 KDE + Anti-Alias 安裝過程:

1. 安裝 x11/XFree86-4,chinese/arphicttf,x11/kde2, chinese/kde2-i18n。

2. 編輯 /etc/X11/XF86Config, 將 load "freetype" 註解,加入 load "xtt",並在 FontPath 區段最前面加入 /usr/X11R6/lib/X11/fonts/TrueType

3. 編輯 ~/.xftconfig,加入:

dir "/usr/X11R6/lib/X11/fonts/TrueType"
# Danny:
# set the AA for different fonts
#
# most TT fonts do not need to be aliased between
# 8 and 15 points, although this might be a matter of taste.
match 
      any size > 8
      any size < 15
edit
      antialias = false;

4. 編輯 ~/.xinitrc,在 startkde 前加入 export QT_XFT=true

5. 在 控制中心(Control Center)外表 & 感覺(Look & Feel) 中的 字型(Fonts),將 在字型與圖示上使用反鋸齒的平滑潤飾 (Use Anti-Alising for fonts and icons) 勾選 ;或是編輯 ~/.kde/share/config/kdeglobals[KDE] 區段,修改 AntiAliasing=true

6. 在 控制中心(Control Center)個人化(Personalization)國家及語言(Country & Language) 設定成 台灣(tw)繁體中文(zh_TW.Big5)big5-0; 或是編輯 ~/.kde/share/config/kdeglobals[Locale] 區段,修改 Charset=big5-0Country=twLanguage=zh_TW.Big5

7. 重新進入 KDE

WWW: XFree86 Font De-uglification HOWTO

KDE2 的替代字型(fontguess):

在 KDE2 中修改 ~/.fontguess,使 qt lib 在選擇替代字型時能正確無誤。

[big5-0][gb2312.1980-0][ksc5601.1987-0]
helvetica       ming       ming       gulim
times           ming       ming       batang
courier         ming       ming       dotum 
utopia          ming       ming       gulim
clean           ming       ming       gulim
ming            helvetica  helvetica  helvetica
kai             helvetica  helvetica  helvetica

WWW: To support multibyte in KDE 2.0 applications.


8.3.3. KDE3

Contributed by EricCheng

Last Update: 2003年 1月19日 周日 08時18分25秒 CST

安裝 x11/kde3

安裝區域化訊息 x11/kde3-zh_TW

KDE3 的替代字型 (qtconfig):

用 qtconfig -> Fonts -> Font Substitution。 選一個英文字型,例如 Times New Roman [Xft]... Xft 代表是 Xft 的 render, 如果與 /usr/X11R6/lib/X11/XftConfig 或 ~/.xftconfig 沒有相左的話就會有 AA。

接著 Select substitute Family 選 PMingliu [Xft],Add。 高興的話可以選擇 SimSun 或是 SimHei, 再加選一個 Bitstream Cyberbit 做 fallback。 SimSun 和 SimHei 的特性是只有半形字有做 hinting, 全形字沒有。在很多情況下這樣反而比較好看, 缺點是半形字是 Fixed width, 字距太大有點醜。 這樣設好之後到 Konqueror 的 Appearance -> Font 地方把 Serif 字型調成剛剛設的 Times New Roman [Xft], 至於其他的 Sans Serif 可以調成 Verdana,效果很好, 自然也要在 qtconfig 中設定 Font Substitution。 Sans Serif 是沒有襯線的字型, 筆者以為中文的 equivalent 是黑體一類的字型, 所以可以加入 SimHei 當作中文的 Sans Serif 字型, Serif 的襯線字型就要用 PMingLiU 一類的字。

這樣做的意思是說,當使用 Qt3 的程式被設定為使用 Times New Roman [Xft] 來畫字的時候, 一旦遇到了 Times New Roman 沒有 cover 到的字元時 (如中文字) 就會去找第一個 Substituion Font 來看看有沒有, 如果沒有再往下找,一直到找到為止。 所以可以對各種不同語系分別設定不同的 Substitution Font, 來達到各取所長的效果。

Figure 8-2. konq_3_1 snapshot

注意標題列是用 Verdana/SimHei, 內文的字則是被設定為 Times New Roman/MingLiu。

Figure 8-3. konq_3_2 snapshot

Font Substitution: 用 PMingLiU 畫日文漢字,再用 Cyberbit 畫假名, 英文仍是用 Times New Roman。 但好像是因為 PMingLiU 的先天 coverage 不夠大, 導致有些日本寫法的漢字沒有出來。設成其他的應該不錯。

MS 的 Fonts 都花了很多心思在 Hinting 上面, 所以小字的 AA 或 ~AA 顯示效果都很棒。 用 Times New Roman 看英文文章 (有人統計過是最易閱讀的字體) 很舒服啊!但如果是斜體還有大量鋸齒就看得很累了。

Figure 8-4. konq_3_3 snapshot

QT_XFT 是給 QT 2.x 用的,Qt3.x 這個選項就不再有用了。

arphic 的字型有另一個問題是,有些字的寫法不是正確的 "正體中文" 寫法

像是『角』的裡面是穿出來的。所以叫做文鼎細『上海』宋。 SimSun 以及 SimHei 也是同樣的道理(大陸做的), 像是錯誤的誤右邊是口天吳,但是其餘的字因為沒有不當的 hinting, 所以整體還是很好看。

小字的時候有 Anti-Aliasing 不如沒有 Anti-Aliasing 的問題, 那應該是不當的 hinting 所致。像是 Verdana 一類小字的 AA 就非常好看啊。

Figure 8-5. kfont_3_1 snapshot

Fixed 的 Font 筆者喜歡用 MSung Light TC, 因為不但是 Unicode 而且半形很好看。

Figure 8-6. konq_3_4 snapshot

另外,Keith Packard 的 FontConfig 也出來了, 但還沒空研究怎麼用就是了。


8.4. WindowMaker 的中文化

WindowMaker 在中文化的方面做的很不錯了, 目前已經有 I18N 的套件了,介面大部分已經中文化了。這都是仰賴 I18N 的成果。

安裝 x11-wm/windowmaker

中文標題列的問題可以檢查以下的設定,不過筆者在 0.65.1_1 版本時 ,完全不需要修改就已經可以在選單與標題看到中文:

1. 檢查 ~/GNUStep/Defaults/WMGLOBAL 檔, 如果沒有就自己建立一個內容如下:

{
    MultiByteText = YES;
}

2. 確認中文字型,編輯 ~/GNUStep/Defaults/WindowMaker ,修改以下選項:

MultiByteText = YES;
WindowTitleFont = "-*-helvetica-bold-r-normal-*-12-*-*-*-*-*-*-*,
-*-ming-bold-r-normal--12-*-*-*-*-*-big5-0";
MenuTitleFont = "-*-helvetica-bold-r-normal-*-12-*-*-*-*-*-*-*,
-*-ming-bold-r-normal--12-*-*-*-*-*-big5-0";
IconTitleFont = "-*-helvetica-medium-r-normal-*-8-*-*-*-*-*-*-*,
-*-ming-medium-r-normal--8-*-*-*-*-*-big5-0";
ClipTitleFont = "-*-helvetica-medium-r-normal-*-10-*-*-*-*-*-*-*,
-*-ming-medium-r-normal--10-*-*-*-*-*-big5-0";

以上只是個例子,當然必須確認有無相對字型。

重新啟動 WindowMaker,用 rxvt -T "中文顯示" & 測試一下。

Figure 8-7. windowmaker snapshot

WWW: http://www.windowmaker.org/


8.5. Sawfish 的中文化

Sawfish 在中文化的方面做的很不錯了, 目前已經有 I18N 的套件了, 介面大部分已經中文化了。這都是仰賴 I18N 的成果。

安裝 x11-wm/sawfish

WWW: http://sawmill.sourceforge.net/


Chapter 9. 中文的列印

PostScript 是印表機控制語言的標準,GhostScript 是 PostScript 解譯器, 可以用來模擬實際的印表機支援。所以選購印表機時, 必須選擇印表機支援 PostScript 的,至少是 GhostScript 所支援的印表機。 GhostScript 的首頁 中有支援的印表機清單, LinuxPrinting.org 也有許多關於印表機支援的狀況。

但是如果您的印表機只支援 Windows 或是 MacOS,那麼請用 ps2pdf12/ ps2pdf13 將下面各方式做出的 output.ps 轉成 pdf 檔案到 windows 下去列印。只要打: ps2pdf1x output.ps output.pdf 即可。(其實若是有此情況, 建議您直接將原本需要列印的檔案直接傳至印表機所在的機器列印即可)

對本機印表機而言,支援 PostScript 的印表機只要將 PostScript 檔送給列印裝置即可完成列印。 不支援 PostScript 的印表機就要尋求 GhostScript 支援, 利用 GhostScript 將 PostScript 檔送給列印裝置才能完成列印, 也常用於不內嵌字型的檔案列印。 對網路印表機的話,仍然分為上面兩種。 以下以一個網路印表機 HP LasetJet 6P, 不支援 PostScript 但是有 GhostScript 支援的為例:

經過 linuxprinting 的查詢,得知有 print/hpijs 的支援。

在產生要列印的 PostScript 檔後,利用 gs 來產生 PCL 檔:

gs -sDEVICE=ijs -sIjsServer=hpijs -dIjsUseOutputFD \
  -sDeviceManufacturer="HEWLETT-PACKARD" -sDeviceModel="HP LaserJet" \
  -sOutputFile="output.pcl" input.ps

先利用 smbclient 得到 Printer 名稱:

% smbclient -L host.ip -U username
        Sharename      Type      Comment
    ---------      ----      -------
    HPLaserJ       Printer   HP LaserJet 6P

然後直接用 smbclient 來列印即可:

% smbclient //host.ip//HPLaserJ -U username
print output.pcl

最後是將該網路印表機當成本機印表機,修改 /etc/printcap

lp-remote:\
    :lp=/dev/null:\
    :mx=0:\
    :if=/usr/local/bin/smbprint:
lp:\
    :lp=/dev/null:\
    :sd=/var/spool/lpd/lp:\
    :af=/var/spool/lpd/lp/acct:\
    :if=/usr/local/bin/smbfilter:

並編寫 /usr/local/bin/smbprint

#!/bin/sh -x
logfile=/tmp/smbprint.log
server=host.ip
service=HPLaserJ
username=username
password=

echo "server $server, service $service, username $username" >> $logfile
(
    echo "print -"
    cat
) | /usr/local/bin/smbclient "\\\\$server\\$service" $password -U $username -N -P >> $logfile

以及 /usr/local/bin/smbfilter

#!/bin/sh
gs -dSAFER -dBATCH -dNOPAUSE -q \
   -sDEVICE=ijs -sIjsServer=hpijs -dIjsUseOutputFD \
   -sDeviceManufacturer="HEWLETT-PACKARD" -sDeviceModel="HP LaserJet" \
   -sOutputFile=- - | \
   lpr -Plp-remote
# mkdir -p /var/spool/lpd/lp
# setenv PRINTER lp

以下是一個小 script,幫您自動將純文字檔分頁

#!/usr/bin/perl -w
#
# This tiny script converts ^L to empty lines
# to fit a2ps
# Currently it only eats from STDIN and output to STDOUT.
# Fine enough.
# Customize the $expbl (Expected blank lines) to meet your
                 needs.
my $expbl=40; # Customize THIS !!!
meow
my $lc=0, $restlc=0 ;
foreach (<>) {
    if (/^L/) {
        $restlc = $expbl - (($lc % $expbl))  ;
        for ($i=1; $i < $restlc; $i++) {
            $lc++ ;
            # print "$lc " . "\n" ;
            # You could comment out above line to see the
          line number.
            print "\n" ;
        }
    }
    s/^L// ;
    if (/\n/) { $lc++ ;}
    # print "$lc " .$_ ;
    # You could comment out above line to see the line
                     number.
    print $_ ;
}

WWW: 自由軟體簡介 - 中文輸出

WWW: Japanese Printing and Text Processing With Linux


9.1. 現在的中文列印

在看現在的中文列印前,請先參考過 PostScript 一節, 簡單的來說 CID-Keyed font 創造出來, 就是要解決 cjk 這些方塊字型的國家。

目前的中文顯示已經算是完備,平常需求的粗體與斜體都能正常顯示, 利用 -medium-r 對應普通字型,-bold-r 對應粗體,-medium-i 對應斜體, -bold-i 對應粗斜體。

由於 print/ghostscript-gnu 從 6.53 升級到 7.05, 相對應的 chinese/ghostscript6print/ghostscript-gnu-cjk(gs-cjk) 也都 BROKEN, 中文列印就成了一個問題,不過,原來 gs-cjk 已經融入 7.05, 而且增加的方式更是簡單,以下用 mozilla 的中文列印來說明 只要修改 /usr/local/share/ghostscript/7.05/lib/CIDFnmap 最後增加:

% Chinese Big5 Truetype Fonts (Arphic)
/ZenKai-Medium          (/usr/local/share/fonts/TrueType/bkai00mp.ttf) 1 ;
/ShanHeiSun-Light       (/usr/local/share/fonts/TrueType/bsmi00lp.ttf) 1 ;
%                                                                            
% Convenient aliases for PS files on Chinese PostScript printer
%                                                              
/B5-H                   /ZenKai-Medium          ;
/ETen-B5-H              /ZenKai-Medium          ;
/B5-H                   /ShanHeiSun-Light       ;
/ETen-B5-H              /ShanHeiSun-Light       ;
%
% CID fontmap for chinese-big5 encoding CIDFontName
%
/Adobe-CNS1             /ShanHeiSun-Light   ;
/MSung-Light            /ShanHeiSun-Light       ;
/MHei-Medium            /ZenKai-Medium          ;
/MOESung-Regular        /ShanHeiSun-Light       ;
/MOEKai-Regular         /ZenKai-Medium          ;
% Chinese GB TrueType Fonts (Arphic)
/BousungEG-Light-GB     (/usr/local/share/fonts/TrueType/gbsn00lp.ttf) 1 ;
/GBZenKai-Medium        (/usr/local/share/fonts/TrueType/gkai00mp.ttf) 1 ;
%
% CID fontmap for chinese-big5 encoding CIDFontName
%
/Adobe-GB1              /BousungEG-Light-GB  ;
/STSong-Light           /BousungEG-Light-GB  ;

要完成以下的動作,請先確認是否安裝 ghostscript-gnu,並且版本大於 7.05, 或是安裝 6.53 版本加上 gscjk, 並且安裝好 arphicttf,也把 CIDFnmap 設定成功, 若要測試請參考 修改 CIDFnmap 的測試 一節。

WWW: gs-cjk project

WWW: Slackware 8.1 上的中文列印


9.1.1. mozilla 僅有普通字體

接著修改 /usr/X11R6/lib/mozilla/defaults/pref/unix.js 最後增加

pref("print.postscript.nativecode.zh-TW", "big5");
pref("print.postscript.nativefont.zh-TW", "MSung-Light-B5-H");

用 mozilla 開網頁,選取列印,然後用 /usr/ports/print/gv 來觀看, 這樣子就會看到中文的 ps 囉。

不過可以看到,並沒有粗體與斜體的相關設定,筆者在 CIDFnmap 並沒有找到 粗體與斜體的相關設定,不過這對 mozilla 而言是足夠的


9.1.2. why MSung-Light?

MSung-Light 與 MHei-Medium 則是許多軟體預設的 CID fontmap, 都把他連到 ShanHeiSun-Light 與 ZenKai-Medium, 而 STSong-Light 則是預設的簡體 CID fontmap, 日文用 HeiseiMin-W3 與 HeiseiKakuGo-W5, 韓文則是 HyGoThic-Medium 與 HYSMyeongJo-Medium

ShanHeiSun-Light 的來源是 ttfinfo /usr/local/share/fonts/TrueType/bsmi00lp.ttf 的 TTFINFO_FONT_PSNAME="ShanHeiSun-Light"

TTFINFO_FONT_FILE="/usr/local/share/fonts/TrueType/bsmi00lp.ttf"
TTFINFO_FONT_NAME="AR PL Mingti2L Big5"                         
TTFINFO_FONT_PSNAME="ShanHeiSun-Light" 
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 Mingti2L Big5-medium-r-normal--0-0-0-0-c-0-big5-0"

目前已經有類似的 ports,/usr/ports/japanese/ghostscript-gnu-jpnfont/ 剛筆者也 send-pr 去修改 /usr/ports/print/ghostscript-gnu-commfont 了


9.1.3. 修改 CIDFnmap 的測試

% cat cid.ps
/MSung-Light-B5-H findfont 60 scalefont setfont
50 600 moveto (2002年 5月29日) show
/MHei-Medium-B5-H findfont 60 scalefont setfont
50 520 moveto (2002年 5月29日) show
/MOESung-Regular-B5-H findfont 60 scalefont setfont
50 440 moveto (2002年 5月29日) show
/MOEKai-Regular-B5-H findfont 60 scalefont setfont
50 360 moveto (2002年 5月29日) show
showpage
quit
% gv -antialias cid.ps
% ps2pdf cid.ps
% xpdf cid.pdf

Figure 9-1. 20020527 snapshot

以下是 mozilla.ps 的 zh_TW 區段,mozilla 的列印正常

/Unicode2NativeDictzh-TW 0 dict def
/zh-TW_ls {
  /NativeFont /MSung-Light-B5-H def
  /UCS2Font /Courier def
  /Unicode2NativeDict Unicode2NativeDictzh-TW def
  /unicodeshow1 { real_unicodeshow } bind def
  /unicodeshow2 { real_unicodeshow_native } bind def   
} bind def

9.1.4. KDE3 的 kword 仍然有問題

以下是 kword.ps 的 zh_TW 區段,kde3 的 kword 列印仍然有問題

%%BeginSetup
% Fonts and encodings used
/MSung-Light-B5-HList [   
[ /MSung-Light-B5-H 1 0 ] 
  [ /MOESung-Regular-B5-H 1 0 ]
  [ /Helvetica 1.18991 0 ]
] d
% Asian postscript font requested. Using MSung-Light-B5-H
/MSung-Light-B5-HList [
[ /MSung-Light-B5-H 1 0.2 ]
  [ /MOESung-Regular-B5-H 1 0.2 ]
  [ /Helvetica-Oblique 1.18991 0 ]
] d
% Asian postscript font requested. Using MSung-Light-B5-H
/MSung-Light-B5-HList [
[ /MSung-Light-B5-H 1 0 ]
  [ /MOESung-Regular-B5-H 1 0 ]
  [ /Helvetica-Bold 1.12803 0 ]
] d
% Asian postscript font requested. Using MSung-Light-B5-H
/F1 30.375/MSung-Light-B5-H-Uni DF
/F2 30.375/MSung-Light-B5-H-Uni DF
/F3 30.375/MSung-Light-B5-H-Uni DF
%%EndSetup

但是用 gs 來看就會有如下的錯誤訊息

GNU Ghostscript 7.05 (2002-04-22)
Copyright (C) 2002 artofcode LLC, Benicia, CA.  All rights reserved.
This software comes with NO WARRANTY: see the file PUBLIC for details.
Can't find (or can't open) font file /usr/local/share/ghostscript/Resource/Font/MSung-Light-B5-H-Uni.
Can't find (or can't open) font file MSung-Light-B5-H-Uni.
Substituting font Courier for MSung-Light-B5-H-Uni.
Loading NimbusMonL-Regu font from /usr/local/share/ghostscript/fonts/n022003l.pfb... 18883696 17394664 1743000 367192 0 done.
Can't find (or can't open) font file /usr/local/share/ghostscript/Resource/Font/MSung-Light-B5-H-Uni.
Can't find (or can't open) font file MSung-Light-B5-H-Uni.
Substituting font Courier for MSung-Light-B5-H-Uni.
Can't find (or can't open) font file /usr/local/share/ghostscript/Resource/Font/MSung-Light-B5-H-Uni.
Can't find (or can't open) font file MSung-Light-B5-H-Uni.
Substituting font Courier for MSung-Light-B5-H-Uni.
>>showpage, press  to continue<<

9.1.5. fonts.dir 的粗體與斜體

回過頭來看 fonts.dir 的設定方式

bsmi00lp.ttf             -Arphic-AR PL Mingti2L Big5-以下略
ai=0.3:bsmi00lp.ttf      -Arphic-AR PL Mingti2L Big5-以下略
ds=y:bsmi00lp.ttf        -Arphic-AR PL Mingti2L Big5-以下略
ds=y:ai=0.3:bsmi00lp.ttf -Arphic-AR PL Mingti2L Big5-以下略

第一個是正常的字體。 ai 代表 Automatic Italic 會造成斜體。後面的數字是傾斜比例。 ds 代表 Double Strike 會造成偽粗體。y 代表 yes,表示要粗體。 兩個一起用就變成粗斜體了。

當然,以上在 ttfm 的模組應該都會自動產生,但也可以自己去手動 調整。也可以利用 fs=p 來調整成調合字(proportional font)。另外, 要使用 MS 的新細明,可以加上 eb=y 來強迫 FreeType 去使用內嵌 於字型內的點陣字(會比 AA 好看,不過這個功能不是很穩定)。


9.1.6. gscjk 的粗體與斜體

以文鼎宋體為例,PSNAME 是 ShanHeiSun-Light,而常用的 CMap 是 ETen-B5-H,所以 gscjk 的字型就會有 'ShanHeiSun-Light-ETen-B5-H'、 'ShanHeiSun-Light-Bold-ETen-B5-H'、'ShanHeiSun-Light-Italic-ETen-B5-H'、 'ShanHeiSun-Light-BoldItalic-ETen-B5-H',Bold 是粗體,Italic 是斜體, BoldItalic 是粗斜體,這樣就有了常用的字體了。

接著,gscjk 就會在 /usr/local/share/ghostscript/Resource/CIDFont/ 底下產生 ShanHeiSun-Light ShanHeiSun-Light-Bold ShanHeiSun-Light-BoldItalic ShanHeiSun-Light-Italic,並在 /usr/local/share/ghostscript/Resource/Font/ 底下產生與繁體中文 CMap 相結合的字型。

在此的產生方式是透過 ttfm.sh 的 gscjk module,可以直接使用 ports 中的版本, 檢察 /usr/local/share/ttfm 底下是否有 gscjk.ttfm 即可,ttfm 的使用方式 則自己參考 manual 或是網頁

/ShanHeiSun-Light-B5-H findfont 60 scalefont setfont
50 600 moveto (2002年 5月29日) show
/ShanHeiSun-Light-Bold-B5-H findfont 60 scalefont setfont
50 520 moveto (2002年 5月29日) show
/ShanHeiSun-Light-Italic-B5-H findfont 60 scalefont setfont
50 440 moveto (2002年 5月29日) show
/ShanHeiSun-Light-BoldItalic-B5-H findfont 60 scalefont setfont
50 360 moveto (2002年 5月29日) show
showpage
quit

Figure 9-2. 20020527-2 snapshot


9.1.7. AbiWord 的粗體與斜體

以下只適用於 editors/AbiWord, 如果是使用 editors/AbiWord2 請參考 gtk2 的設定方式。

AbiWord 也同樣的可以列印粗體與斜體。AbiWord 的字型目錄在 /usr/X11R6/share/AbiSuite/fonts,在其內先建立 zh-TW 目錄 接著只要利用 ttf 來建立 fonts.dir 就可以了。

格式如下:

PSFONT, TTFFONT, 880, 120, 1000

所以就建立如下的 fonts.dir

4
ShanHeiSun-Light-ETen-B5-H, -Arphic-AR PL Mingti2L Big5-medium-r-normal--0-0-0-0-c-0-big5-0, 880, 120, 1000
ShanHeiSun-Light-Bold-ETen-B5-H, -Arphic-AR PL Mingti2L Big5-bold-r-normal--0-0-0-0-c-0-big5-0, 880, 120, 1000
ShanHeiSun-Light-Italic-ETen-B5-H, -Arphic-AR PL Mingti2L Big5-medium-i-normal--0-0-0-0-c-0-big5-0, 880, 120, 1000
ShanHeiSun-Light-BoldItalic-ETen-B5-H, -Arphic-AR PL Mingti2L Big5-bold-i-normal--0-0-0-0-c-0-big5-0, 880, 120, 1000

利用 -medium-r 對應普通字型,-bold-r 對應 -Bold,-medium-i 對應 -Italic, -bold-i 對應 -BoldItalic。

不過還必須在 zh-TW 底下 touch .already-in-fp,abiword 才不會說

Abiword could not load the following font or fontset from the X Window System display server:
  [-*-Times New Roman-regular-r-*-*-*-0-*-*-*-*-*-*]

9.1.8. kde2 的中文列印 [OBSOLETE]

kde2.2.2 中文列印所需要的 PSNAME 是 MSung-Light 和 MHei-Medium, 所以在 ttfm.sh 搭配 gscjk.ttfm 後可以在 /usr/local/share/ghostscript/7.05/lib/CIDFnmap 的最後加上兩行來 alias

/MSung-Light            /ShanHeiSun-Light       ;
/MHei-Medium            /ZenKai-Medium          ;

還是要在 gscjk.ttfm 中作 -setdefault 時 alias 一個成 MSung-Light?

另外遇到一個問題,kde2 用 print to pdf 中文,內建的 viewer 可以看的見 但是 xpdf 則會有問題,xpdf-1.01 而 print to ps 內建的 viewer 看不見,但是 gs gv 都看的見

以下是 xpdf 的 error msg

Error: Unknown font tag 'R14'
Error (1850): No font in show

Figure 9-3. kde-print snapshot


9.2. bg5pdf - 轉換中文 Big5 編碼文件成為不內嵌的 PDF

這是由 Chen-Shan Chin 使用 python 及 PDFLib 所寫的軟體,直接由中文 big5 txt 轉成中文 pdf 檔,使用不內嵌的 Acrobat Reader 的中文 CIDKeyed font,可以使檔案變得非常的小 (只是註冊了中文字型的名稱而已), 只是目前只有固定大小的字體可用, 無法做出標題之類的變化。好處是, 可以做 copy & paste 及有 search 的功能。

安裝 chinese/bg5pdf

測試:

% echo "中文測試" > test.txt
% bg5pdf test.txt
Output File is test.txt.pdf
% pdffonts test.txt.pdf
name                                 type         emb sub uni object ID
------------------------------------ ------------ --- --- --- ---------
MSung-Light-ETen-B5-H                CID Type 0   no  no  no       7  0
Helvetica-Oblique                    Type 1       no  no  no       8  0

Figure 9-4. bg5pdf snapshot

WWW: http://students.washington.edu/cschin/


9.3. bg5ps - 使用 TTF 字型轉換中文 Big5/GB 編碼文件成為 Portscript

bg5ps 是一個使用巨蟒描述語言 (Python Scrpting Language)寫的一個小程式,能夠利用幾套免費的 Truetype 中文字型將一般用 BIG5 編碼的文字檔轉換成能夠在 沒有中文字型的 postscript 印表機或是只有 ghostscript 的系統上印列的 postscript 檔案。 bg5ps 也可以拿來當做過濾器(filter),用來過濾在 FreeBSD 上的 Netscape 或是 mpage 產生的 postscript 檔案來印列其中所包含的 BIG5 中文字元。因為 bg5ps 使用的是 Truetype 字型而非矩陣字型,當在雷射印表機上或是字型較大時, 可以獲得比較好的印列品質。

安裝 bg5ps

目前 bg5ps 是採用 moettf 為列印的字型。您必須設定 TTF 字型路徑,在安裝完之後,您必須參考 /usr/local/etc/bg5ps/bg5ps.conf.sample ,並將您的設定檔置於 ~/.bg5ps.conf/usr/local/etc/bg5ps/bg5ps.conf

用它所附的範例來測試,並用 ghostviewgv 觀看結果:

% cd /usr/local/share/doc/bg5ps
% bg5ps -if bg5ps.txt -of bg5ps.ps
% ghostview bg5ps.ps

bg5ps -h 來看有那些參數可以使用。

使用方法

bg5ps 可以以獨立(stand along)或是當成過濾器(filter)來使用。

以獨立方式執行。

如果您的設定檔沒有問題,在大多數的時候您只須下達

% bg5ps -if yourfile.big5 -of yourfile.ps

就可以將 big5 編碼的檔案轉成可以印列的 postscript 檔案。 在大部份的 類 UNIX 的系統裡,使用

% lpr yourfile.ps

就可將 postscript 檔案印出。需要注意的是您必須要有 postscript 印表 機或是用 ghostscript 模擬 postscript 的印表 機及印表過濾器。此外您 還需要確定您是否正確的指定印表機。 如果您想要將 mpage 及 netscape 所產生的 postscript中的 big5 碼做處 理,使其成為可以印列 big5 中文的 postscript檔。 那您需要加上 "-nps y" 這個選項如下

% bg5ps -nps y -if netscape.ps -of cnetscape.ps

因為在 netscape 產生的 postscript 檔中的英文是可變寬度的字型, 所以 有時會有和中文對不齊的狀況發生。如用 mpage 則沒有這方面 的問題。用 mpage+bg5ps 是用來預覽大的中文檔案節省紙張的好方案。

當成過濾器使用。

bg5ps 也可以利用 UNIX 中的管道(pipe)當成過濾器使用。方法如下

% cat yourfile.big5 | bg5ps > yourfile.ps
% cat yourfile.big5 | bg5ps | lpr

% cat netscape.ps | bg5ps -nps y > yourfile.ps
% cat netscape.ps | bg5ps | lpr

選項

   bg5ps 有下列的選項可以使用
     * -fp ChineseFontPath: 指定中文字型的路徑(預設值: 與 bg5ps 同)
     * -fn ChineseFontName: 指定中文字型的檔案名稱(預設值: ntu_kai)
     * -o [0|1]: 0 不輸出奇數頁,1 輸出奇數頁(預設值: 1)
     * -e [0|1]: 0 不輸出偶數頁,1 輸出偶數頁(預設值: 1)
     * -s num: 指定輸出字型的大小(預設值: 12)
     * -ls num: 指定行距(預設值: 6.0)
     * -cs num: 指定字距(預設值: 2.0)
     * -lm num: 指定左邊界(預設值: 72.0)
     * -rm num: 指定右邊界(預設值: 72.0)
     * -tm num: 指定上邊界(預設值: 72.0)
     * -bm num: 指定下邊界(預設值: 72.0)
     * -if filename: 指定輸入檔檔名
     * -of filename: 指定輸出檔檔名
     * -cf filename: 指定設定檔(預設值:  /.bg5ps.conf)
     * -nps [y|n]: y 使用 nps 模式,n 不使用 nps 模式(預設值: n)
     

範例

% bg5ps -fn ntu_kai -e 0 -o 1 -s 18 -cs 3 -if mybig5.txt -of myps.ps

設定檔(Configuration file)

bg5ps 的設定檔其實每一行都是 python script 語言的一 行指令,由 bg5ps 主程式去呼叫執行,所以可能有安全性上的 問題。請記得要將設定檔改成唯讀。 因為設定檔也是 python script,所以每一行的開始是不能有空格的。

   bg5ps 設定檔有下列參數可以改變
     * chineseFontPath: 指定中文字型的路徑(預設值: 與 bg5ps 同)
     * fontName: 指定中文字型的檔案名稱(預設值: ntu_kai)
     * oddPages: 0 不輸出奇數頁,1 輸出奇數頁(預設值: 1)
     * evenPages: 0 不輸出偶數頁,1 輸出偶數頁(預設值: 1)
     * size: 指定輸出字型的大小(預設值: 12)
     * lineSpace: 指定行距(預設值: 6.0)
     * chrSpace: 指定字距(預設值: 2.0)
     * leftMargin: 指定左邊界(預設值: 72.0)
     * rightMargin: 指定右邊界(預設值: 72.0)
     * topMargin: 指定上邊界(預設值: 72.0)
     * bottomMargin: 指定下邊界(預設值: 72.0)

範例:

chineseFontPath="/home/cschin/lib/cfonts"
fontName="ntu_kai"
oddPages=1
evenPages=1

Note: 如果在 netscape 的列印指令裡面把 "lpr" 換成 "bg5ps -nps y | lpr",就可以列印中文網頁了。

Figure 9-5. bg5ps snapshot

WWW: http://students.washington.edu/cschin/

Author: Chen-Shan Chin


9.4. enscript - 直接使用 CID-font 來列印

這一版的 ensctipt 是由 Chen-Shan Chin 的 補丁來支援 Big5 和 UniCNS-UTF8 編碼的純文字檔。 兩個新的編碼名稱, "big5" 和 "UniCNS-UTF8" 是新增的。 Since there is no easy way to get AFM for CJK CID-font, I simply assign the width for the same for all character.

You need to have a CID-font for these encoding to use this function.

安裝 chinese/enscript

使用 enscript

For BIG5 users, use commands like this to generate PS documents:
enscript -X big5 -f DefaultMingB5-Regular-B5pc-H@12 -o [output.ps] [file]
Make sure to use those fonts having "B5pc" in their names.

Author WWW: http://students.washington.edu/cschin/bg5ps/enscript-TW-support/

WWW: http://www.gnu.org/software/enscript/enscript.html


9.5. gb2ps - 轉換中文 GB 編碼文件成為 PostScript

gb2ps 是另一種可以列印 GB 與 HZ 編碼的工具程式。

安裝 chinese/gb2ps

字型:

csong24.ccf     ckai24.ccf
cfang24.ccf     chei24.ccf   
ftp://ftp.ifcss.org/pub/software/fonts/gb/misc/

將字型放在某個目錄下,例如 /usr/local/lib/chinese/CFONT


9.6. gbscript - 轉換中文 GB 編碼文件成為 PostScript

轉換簡體字(GB)成 PostScript 檔一個可將中文字轉成 PS 格式的程式。

安裝 chinese/gbscript


9.7. tocps - 轉換中文編碼文件成為 PostScript

解譯 Netscape 另存新檔的 PostScript 檔案,成為可列印的中文(GB) PostScript 檔案。

安裝 chinese/tocps 的安裝:


9.8. vflib - 使用自由向量字型的向量字型函式庫,支援 BIG5 和 GB

TurboLinux 採用的 VFlib + gs 5.5 來做中文列印, 將 VFlib patch 加到 gs 5.5 上去,因為 gs 5.5 不像 gs6 本身已經支援中文字,因此要透過 VFlib 來處理中文字, 效果不錯,而且又能夠印出斜體等變化字體。

在日本,比較常用的解決方法,就是利用 "VFlib patch" 讓 ghostscript 能夠使用一些商用的日文外框字型,點陣字型和 TrueType 字型, 同時 PostScript 程式透過這些 VFlib 修補, 也能夠將這些字型當作 OCF(original composite font) 的字型來使用。

WWW: http://TypeHack.aial.hiroshima-u.ac.jp/VFlib/


9.9. cnprint

cnprint 是一個將中文文章轉換為 PostScript 檔案以供列印的工具。 使用上就和標準的列印指令一樣。它同時支援 GB, HZ 與 BIG5 編碼。 cnprint 可以處理 Chinese/Japanese/Korean 文件轉換,DOS、VMS、UNIX 系統下, 都能使用。支援 GB, Hz, zW, BIG5, CNS, JIS, EUC, Shift-JIS, KSC, UTF8, UTF7, UTF16 等等格式。同時也支援 HBF『 Hanzi Bitmap Format』、 TTF『TrueType Format』字型。

安裝 chinese/cnprint

WWW: CAI's Software Page - cnprint

WWW: Japanese Printing and Text Processing With Linux


9.10. wprint

Last Update: 2003年 1月29日 周三 06時24分36秒 CST

Contributed by 陳漢儀 ( moto@chuany.net )

Wprint is a filter for Mozilla (Galeon, etc.), Htmldoc, and Netscape PostScript output that uses TrueType fonts to allow the printing of pages written in Unicode, Big5, KOI8, SJIS, the ISO-8859* charsets, and others.

安裝 print/wprint

若要直接列印, 修改 /usr/local/etc/wprint.conf, 加入底下兩行:

fontpath:/usr/local/share/fonts/TrueType/
default:EUC-TW:bkai00mp.ttf=zh_TW.Big5:|lpr -P lp

fontpath 的實際位置請依照您系統的目錄架構, 另外 ttf 字型請依照自己需求修改, 本例子採用文鼎中楷體 ( bkai00mp )。

若要列印成 ps 檔案, 修改 /usr/local/etc/wprint.conf, 加入底下兩行:

fontpath:/usr/local/share/fonts/TrueType/
default:EUC-TW:bkai00mp.ttf=zh_TW.Big5:mybig5.ps

設定最後一行的最後一欄中文 ps 檔案名稱可自訂, 這裡隨意以mybig5.ps 為例,當在 mozilla 中選擇列印到檔案時, 您的 $HOME 會出現 mozilla.ps ( mozilla 預設產生 ) 與 mybig5.ps ( wprint 轉換成中文後的 ps 檔 )。

以更改 mozilla 印表機選項為例,原來的列印流程:

mozilla -> print -> lpr

現在要改成:

mozilla -> print -> wprint -> lpr

設定步驟如下: 請選擇下拉選單的 『 列印 』-> 點選 『 印表機 』 右側的 『 屬性 』鍵 -> 將 『印命令 』由原來的 『 lpr ${MOZ_PRINTER_NAME:+'-P'}${MOZ_PRINTER_NAME} 』 改為 『 wprint 』

WWW: http://ttt.esperanto.org.uy/programoj/angle/wprint.html


Chapter 10. 中文排版軟體

10.1. OpenOffice - 整合性的辦公室軟體

安裝好 OpenOffice 1.0 後,預設是在 /usr/local/OpenOffice.org1.0/

任何使用者執行 /usr/local/OpenOffice.org1.0/program/soffice 都會出現是否要 repair 畫面(in X),選擇 Yes,並選擇 Complete 會把一些東西裝到 ~/OpenOffice.org1.0/, 並跳出 setup

再次執行 /usr/local/OpenOffice.org1.0/program/soffice 就可以看到 soffice 的 doc 文書處理畫面了

Q1: 如何加入中文字型?

A1: GUI 的加入方式:

執行 /usr/local/OpenOffice.org1.0/program/spadmin 列印管理程式,
Fonts -> Add -> Source directory: /usr/local/share/fonts/TrueType/
-> ˇCreate soft links only -> 文鼎PL細上海宋(bsmi00lp.ttf) -> Ok

CLI 的加入方式:

cd /usr/local/OpenOffice.org1.0/share/fonts/truetype
ln -s /usr/local/share/fonts/TrueType/bsmi00lp.ttf bsmi00lp.ttf
在加入完字型後,OpenOffice 在每次進入軟體前都會自動建立 fonts.dir

Q2: 畫面很醜,英文字很寬?

A2: 修改分成兩個部份,一個是將 Interface User 改成文鼎PL細上海宋, 另一個則是調整字型大小,字型稍微大一點就會有 AntiAlias 的效果, 建議值是 >= 120%

GUI 的修改方式:

啟動 soffice 後修改 Interface User
  Tools -> Options -> OpenOffice.org -> Font Replacement ->
  ˇApply replacement table -> Font: Interface User
  Replace with: 文鼎 PL 細上海宋 -> ˇ -> ˇalways -> Ok
修改字型大小
  Tools -> Options -> OpenOffice.org -> View -> Scale: 120% -> Ok

Q3: 輸入中文變成方塊?

A3: 因為預設的 Thorndale 並不能顯示中文,筆者會讓預設成文鼎PL細上海宋

GUI 的修改方式:

啟動 soffice 後修改 Basic Fonts(Western) 和 Basic Fonts(Asian)
  Tools -> Options -> OpenOffice.org -> Text Document ->
  Basic Fonts(Western) -> Default: 文鼎PL細上海宋 ->
  Heading: 文鼎PL細上海宋 -> Ok

Q4: 如何開啟中文的HTML及純文字檔?

A4: 如果您要開純文字檔,在開啟檔案的對話框中, FileType記得選:Text Encoded, 當選完您要開的檔案後,會再出現一個對話框, 最重要的是Fonts那兒要選:Chinese traditional ( Windows-950 ), 剩下的照您的要求選,之後中文就出來囉∼ 還是看不到?試試看改一下字形,也許您選到了英文字型。

如果是HTML呢?更是簡單,請在檔案一開頭加上:

<HEAD>
<META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=big5">
</HEAD>

Q5: 使用細明體與新細明體時,顯示的字會碎掉?

A5: 徵求解答中。

Figure 10-1. openoffice snapshot

WWW: http://www.openoffice.org/


10.2. eioffice - 永中Office 2003

eioffice 目前只有 Windows 和 GNU/Linux 的版本.

FreeBSD 做法其實很簡單, 因為本來以為他的 GNU/Linux 版用了特殊的壓縮來包裝, 結果抓去看了一下, 發現 fonts.data 和 source.data 這兩個最大的檔竟然是用 zip 壓縮的, 解開當然發現 fonts.data 裡面包的是字型, source.data 裡面就是主要的程式囉, 拷貝到相對應的地方後就可以執行了.

要注意的是, unzip 一定要用 chinese/unzip, 因為有弄中文的 patch 在上面, 不然可能會有錯.

jdk 只有測試 1.4.1, 不知道 1.4.2 有沒有差別.

也弄了兩個版本, 簡體(eioffice-zh_CN)和繁體(eioffice-zh_TW), 更新 outta-port 後就會看到囉.

WWW: 台灣永中

WWW: 大陸永中


10.3. AbiWord - 開放原始碼、跨平台、所見即所得的文字編輯器

AbiWord 可以說是 Word 的翻版, 只是換了個作業系統,容易上手、 介面友善的優點仍在。但因他仍是發展中的軟體,許多的功能, 並不能與微軟的 Word 相比,整體上有一點點缺憾。可是他仍是 FreeBSD 上的重要指標,代表著未來 FreeBSD 將有不輸於 Word 的軟體出現,也說明著,FreeBSD 將從伺服器走向個人使用者。

建議採用 editors/AbiWord2, 只要有設定好 gtk2 就可以正常使用,原本的 chinese/abiword 搭配 editors/AbiWord 已經無法正常使用, 所以以下的文章可以忽略,只要安裝完 AbiWord2, 輸入中文前選擇中文字體,就可以正常的輸入中文。

AbiWord 已經可以在 zh_TW.Big5 的 locale 底下工作並輸入, 選單也已經部份中文化,中文的列印也可以透過 moecid-fonts

在 AbiWord 中新增字型:

要在 AbiWord 中安裝中文字型才能輸入中文字, 安裝的方式必須透過 ttfm 這套好用的軟體。在此套件中已經預設安裝了文鼎繁體與簡體字型。 如果想自行安裝新字型,以下是文鼎繁體的安裝,可以參考看看:

# ttfm.sh --add abiword /usr/local/share/fonts/TrueType/bkai00lp.ttf
# ttfm.sh --add abiword /usr/local/share/fonts/TrueType/bsmi00lp.ttf

並在 XF86Config 加入 FontPath "/usr/X11R6/share/AbiSuite/fonts/zh-TW"

關於中文列印的部分,請參考 abiword 的粗體與斜體 一節。

Figure 10-2. abiword snapshot

WWW: abisource project

WWW: gnome-office abiword


10.4. XEmacs - 支援 XIM 且 Big5 設定的 XEmacs 文字編輯器

當您問一些使用Unix多年的老玩家, 他們認為最具代表性的文書處理軟體是什麼呢? 他們幾乎都會回答-Emacs,而在X Window的風行之下, Emacs也推出了XWindows版-XEmacs。

XEmacs一項著名的能力是它能夠處理多國語文, 能夠處理各種不同文字的軟體己經令人十分驚異, 但要在一個文件中同時處理好幾種不同語文, XEmacs還是可以做到,它在這方面的能力, 幾乎沒有同類形的軟體能望其項背。

除此之外,XEmacs為了能處理各種文件,它將瀏覽HTML文件, 還有收發E-mail的功能全部整合進來,讓您能夠用XEmacs來編寫 HTML或是寫信的工作。它甚至還整合了C和Lisp語言的編譯器, 讓您在XEmacs上寫程式,並且也可以在其中編譯程式, 使寫程式時減少面對繁瑣的事務。

像拼字檢查這種工作,一般都只有商業軟體提供, 但是XEmacs也提供了,連字典也可以自己指定,Unix的目錄結構, XEmacs也可以編輯。其它還有許許多多的功能,很多人用了一段時間, 都只有使用了一小部分,可見其功能之廣。

XEmacs是一個不可多得的文書處理軟體,試試看, 或許可以讓您有更方便處理文件的方法。

安裝 chinese/xemacs21

還有,emacs 和 xemacs 是不一樣的,初學 *emacs 還是從 xemacs 學比較好。至少 Jing-Tang Keith Jang 大大把一切都打點好了。

~/Emacs 則是設 fontset。

Emacs.Font:    fontset-18
Emacs.Fontset-0:   -*-*-medium-r-normal-*-18-*-*-*-*-*-fontset-18,\
  ascii:-*-lucidatypewriter-medium-r-normal-*-*-100-*-*-m-*-iso8859-1,\
  chinese-big5-1:-*-fixed-medium-r-normal-*-*-160-*-*-c-*-big5-0,\
  chinese-big5-2:-*-fixed-medium-r-normal-*-*-160-*-*-c-*-big5-0

10.5. wvware - 可以轉換微軟 Word 檔案的工具

Last Update: 2003年 1月26日 周日 03時34分02秒 CST

wv 是一套可以轉換微軟 Word 檔案的工具, 能夠讀取並且解析 Word 6-9 格式 (Word 6, 95, 97, 2000)。

並且提供許多轉換工具,通稱為 wvWare

wvHtml, wvLatex, wvCleanLatex, wvDVI, wvPS, wvPDF,
wvText, wvAbw, wvWml, wvMime

安裝 textproc/wv

接著以最常用的 wvHtml 為例,要轉 Word 成 HTML, 只要下 wvHtml --charset=big5 input.doc ouput.html

WWW: wvware project


10.6. Emacs

安裝 chinese/emacs20

emacs 不是完整的 XIM support,請看 http://www.FreeBSD.org/cgi/query-pr.cgi?pr=21160

~/.emacs 是設 mule

;; Set environment to Chinese-Big5
(set-language-environment 'chinese-big5)
(set-keyboard-coding-system 'chinese-big5)
(set-terminal-coding-system 'chinese-big5)
(set-buffer-file-coding-system 'chinese-big5)
(set-selection-coding-system 'chinese-big5)
(modify-coding-system-alist 'process "*" 'chinese-big5)

至於 ~/.emacs 還有很多好玩的,可以到 http://dotfiles.com 參考參考。


10.7. celvis - 類似 vi/ex 且中文顯示的文字編輯器

Celvis 是一個很像 UNIX 上標準編輯器 vi/ex 的東西,幾乎支援所有 vi/ ex 的指令。 Celvis 可編輯同時含有中英文的文章。 它也同時支援 GB2312-80 和 BIG5 編碼。

安裝 chinese/celvis


10.8. joe - 簡易且功能不錯的編輯程式

joe 是一個 UNIX 上免費專業的 ASCII 文字編輯器。它用起來就像大部份 IBM PC 上的文字編輯器。 它是一套操作相當方便的文書編輯程式。

安裝 chinese/joe

要在 joe 上使用中文,必須修改 /usr/local/lib/joerc/usr/local/lib/rjoerc的設定。

 -asis   Characters 128 - 255 shown as-is
quote             Enter Ctrl chars
    將以上的自傳修改成以下的字串
-asis      Characters 128 - 255 shown as-is
quote      .k;       Enter Ctrl chars

-asis 是要能顯示中文字, 而 quote 是要輸入特殊的控制字元時使用的按鍵, 而預設值是 ,就會遇到有些中文字的內碼, 然後只要加參數 -asia 就可以看中文,如: joe -asis filename 就可以了,但是 quote 則必須改檔案,或是兩個都改檔案吧。

Figure 10-3. joe snapshot


10.9. nvi - 類似 vi/ex,有多種語言修補,預設為 big5

nvi-big5nvi-enc-cnnvi-enc-tw 等不同的套件。 BIG5 或 GB 相容的 vi 操作介面編輯器 vi 是 UNIX 的標準編輯器,此程式和中文繁體、enc-cneuc-tw 相容。

安裝 chinese/nvi-big5

編輯 ~/.nexrc

set noskipdisplay
set displayencoding=big5
set inputencoding=big5
set fileencoding=big5
set autodetect=tw

WWW: http://www.itojun.org/


10.10. qe - qe 是一個模仿 PE2 的編輯程式

qe 是一個模仿 PE2 的編輯程式,叫 qe 的原因只是因為字母 Q 是排在 P 之後。和 DOS 不同的是,UNIX 沒有那麼多鍵可用,而且不同的 Terminal 的鍵碼也略有不同。因此一些常用的 function 最好定義到 Control Key 或 Meta Key 上,以免不堪使用。

安裝 chinese/qe

Figure 10-4. qe snapshot

WWW: qe project


10.11. ve - NTHU-CS Maple BBS 發展的 BBS-like 文字編輯器

一套由 NTHU-CS Maple BBS 2.36 發展的 BBS-like 文字編輯器。

安裝 chinese/ve

Figure 10-5. ve snapshot


10.12. ChiTex - 中文 Tex/LaTex

ChiTeX 是一套中文 LeX /LaTeX,只要會英文 TeX/LaTeX 就幾乎立刻可使用 ChiTeX,本版可適用於 Big5 及 GB 內碼之中文。此一 Unix 版可用於裝有 teTeX 的 GNU/Linux,FreeBSD,Solaris,與 SunOS 系統。

安裝 chinese/chitex

ChiTeX 6.1.2 一系列的改進, 以及下載位置請參考: chitex ftp site

ChiTex 的特點:

  • 用法簡單,不用特別學習,會用英文 TeX /LaTeX 就幾乎立刻可使用 ChiTeX (若要進一步使用較多功能,只要學習幾個簡單的特殊指令就可)。

  • 與英文 TeX/ LaTeX 相容性高。

  • 功能完備而多樣化。

  • 提供 cbibtex,cmakeindex 可用以引用內含中文的外在參考文獻資料及 自動編輯含中文之索引。提供中文化的 chilatex2html 可將含中文的 LaTeX 文件轉換為 HTML 格式檔。

  • 支援由 TeX/LaTeX 文件產生 pdf 檔。

  • 同時支援 Big5 碼中文 (台灣,香港) 及 GB 碼中文 (新加坡與大陸)。

現在您可以拿 ChiTeX 附的範例來測試:

# cd /usr/local/share/texmf/tex/chinese
# chilatex math2.tex    (編譯)
# xdvi math2.dvi    (預視)
# dvips math2.dvi -o math2.ps    (轉換成 PostScript 檔)
# gv math2.ps    (用 gv 觀看)

WWW: yih's homepage

WWW: Kile: LaTeX source editor


10.13. CJK - 可以使用 CJK scripts 的 LaTeX2e 巨集套件

TeX/LaTeX 是一套的幕後排版軟體。其優秀的輸出品質早已為廣大的 學術界朋友所喜愛及採用。CJK 是一個 LaTeX2e 的巨集套件(macro package), 能讓您在 TeX 文件中使用 CJK (Chinese/Japanese/Korean) 的文字編碼。

您的系統必須先安裝好 teTeX/ LaTeX。如果沒有的話,您也可以自己裝。 請參考 /usr/ports/print/teTeX 的說明。

安裝 chinese/CJK

在 CJK 套件中有一份中文文件,由李君宇先生所寫的介紹, 專門介紹 CJK 處理中文的語法,在 /usr/local/share/doc/CJK/chinese/READMEb5.tex, 在此提供 READMEb5.pdf 的下載。

# cd /usr/local/share/doc/CJK/chinese/
# bg5latex READMEb5.tex    (看看有沒有產生 READMEb5.dvi)
# xdvi READMEb5.dvi    (是否能看到中文? 當然您要先進 X Window)
# dvips READMEb5.dvi -o READMEb5.ps    (轉換成 PostScript 格式))
# gv READMEb5.ps    (用 gv 觀看)
% 測試文件
\documentclass{article}
\usepackage{CJK}
\begin{document}
\begin{CJK*}{Bg5}{song}
宋體
\end{CJK*}
\begin{CJK*}{Bg5}{kai}
楷體
\end{CJK*}
\end{document}

Figure 10-6. CJK snapshot

WWW: 我的 CJK - by Edward

WWW: cjk project


10.14. CJK-LyX - 有 LaTeX 使用介面的文件編輯器(所見即所得)

LyX 是一個有 LaTeX 介面文件編輯器,是一個容易使用的文字編輯器 ,也是一個有彈性且強大的 LaTeX

有著所見即所得的介面,和許多 LaTeX 風格和自動產生的設計。加速學習 LaTeX 並使複雜的設計簡單化和直覺化。新的特色包含拼字檢查 ,國際化,字元提供,所見即所得的圖形、表格、方程式。

LyX 是一個進可攻 TeX/LaTeX, 退可守 (把 LyX 當成文書處理軟體) 的一個功能強大,可以處理圖文的文書處理軟體。

安裝 print/cjk-lyx

必要的設定:

請編輯一個 ~/.lyx/preferences (沒有這個檔,請自行建立),內容如下:

\screen_dpi 100
\screen_font_roman "-*-times new roman"
\screen_font_sans "-*-arial"
\screen_font_typewriter "-*-courier new"
\screen_font_i18n1_encoding "big5-0"
\screen_font_i18n1_normal "-*-ar pl mingti2l big5"
\screen_font_i18n1_gothic "-*-ar pl mingti2l big5"
\screen_font_i18n2_encoding "big5-0"
\screen_font_i18n2_normal "-*-ar pl kaitim big5"
\screen_font_i18n2_gothic "-*-ar pl kaitim big5"

另外針對 CJK 還會設定如下的東西:

\language_package "\usepackage{CJK}"
\language_command_begin "\begin{CJK*}{Bg5}{aming}"
\language_command_end "\end{CJK*}"
\language_auto_begin false
\language_auto_end false
\mark_foreign_language false
\converter latex dvi "bg5latex $$i" "latex"
#\converter dvi pdf "dvipdfm $$i" ""
#\font_encoding default

如果您 TeX/LaTeX 是使用中文 Type1 字型的話,請將最後二行的 mark 拿掉。

測試:

請進入 LyX 後隨便編輯一個中文檔, 然後按 View => DVI 及 View => Postscript 看運作是不是正常。 另外 File => Export => Postscript 看是不是可以正確輸出文稿的 *.ps 檔。

* 在此建議使用中文 Type1 字型,以免多花時間等待系統製造 pk 字型。 請參考六月份的舊信,標題是: ``[FYI] CJK/LaTeX enviroment 中文 Type1 及 TTF 的使用''

要變換字型或做更複雜的變化,LyX 本身並沒有 CJK enviroment 的特殊功能,得自行加入 tags。例如要換字型, 可按功能表那個大的向下的黑箭頭選 LaTeX,以便輸入 CJK enviroment 的 tag:

   \CJKfamily{akai}

這樣以下的文字就會改用楷體字,注意,這裡指的是所輸出的 *.ps 檔的字型,而不一定是您螢幕上看到的字型 (依設定,螢幕上是明體)。

其他的中文 TeX/LaTeX 系統,如 cwTeX/ChiTeX 請參考以上設定,自行更改。

Copyright (c) 2001 李果正(Edward G.J. Lee )

本文為自由文件(FDL http://www.gnu.org/copyleft/fdl.html) 可自由複製/修改/散佈。但請保留版權聲明的部份。

Figure 10-7. CJK-LyX snapshot

WWW: CJK-LyX 中使用中文

WWW: lyx project

WWW: CJK-LyX project


10.15. 在 ConTeXt 使用 Big-5 中文

Contributed by Edward G.J. Lee

Last Update: 2003年 4月30日 周三 03時25分52秒 CST

在讓 ConTeXt 使用 Big-5 中文前, 至少要能在英文環境運作。

# cd ${TEXMF}/web2c
# texexec --make en metafun

為了和 CJK 和 dvipdfmx 配合, 請先安裝 chinese/CJKprint/dvipdfmx, 採用 CJK standard encoding vector,這樣一來, 字型方面的資料就可以共用了。

修改檔案:

1. ${TEXMF}/tex/context/config/cont-usr.tex

如果沒有這個檔,請將 ../base/cont-usr.ori 拷貝一份成 cont-usr.tex。 在 \protect \endinput 之前加入下列資料:

% 將 Poorman 的對應,轉成 CJK 的對應
\defineucharmapping{BIG5}#1#2%      
  {\unicodeposition=#1
   \advance\unicodeposition -161
   \multiply\unicodeposition 157
   \advance\unicodeposition #2  
   \advance\unicodeposition-\ifnum#2>160 98\else64\fi
   \dorepositionunicode}                             

% for Big-5 CJK standard encoding vector
\def\currentucharmapping{BIG5}          

% font alias。這樣就不必更動原來的字型設定了
\definefontsynonym [b5song]     [arb5sung]   [encoding=big5]
\definefontsynonym [b5songsl]   [arb5sungs]  [encoding=big5]
\definefontsynonym [b5kai]      [arb5kai]    [encoding=big5]
\definefontsynonym [b5kaisl]    [arb5kais]   [encoding=big5]

2. ${TEXMF}/tex/context/base/font-chi.tex

將某行只有 \SimChi 改成 \TraChi

改好後重新執行:

# cd ${TEXMF}/web2c/
# texec --make en

前置處理 script

由於「許、功」的問題,必須前置處理,以下是改自王佑中先生的 clatex 的 perl script。

#!/usr/bin/env perl
#
# Process Big-5 Traditional Chinese ConTeXt file.
# Usage: chcont.pl tex file(NO tex extension)
# By Edward G.J. Lee <edt1023@speedymail.org> 2003.04.24
# Inspire heavily from wycc's(wycc@iis.sinica.edu.tw) clatex.
#

$one = 161;
$two = 254;

open(CONT,">$ARGV[0].cont");
if ($ARGV[0] =~/(.*)\.tex$/)
{
  -r $ARGV[0] || die " file $ARGV[0] not found\n";
  open(INFILE,"<$ARGV[0]");
}
else
{
  -r "$ARGV[0].tex" || die "file $ARGV[0].tex not found\n";
  open(INFILE,"<$ARGV[0].tex");
}

while(<INFILE>)
{
  &trans_print($_);
}
close(CONT);
system "texexec ${ARGV[0]}.cont";

sub trans_print {
  local($s) = @_;
  local($i,$c,$nc,$ordc,$ordc1);
    
  for($i=0;$i<length($s);$i++)
  {
    $c = substr($s,$i,1);
    $ordc = ord($c);
    if (($ordc>=$one)&&($ordc<=$two))
    {
      $nc = substr($s,$i+1,1);
      if ($nc =~/[\\{}\^_]/)
      {
        $ordc1 = ord($nc);
        print CONT "\\uc{$ordc}{$ordc1}";
      }
      else
      {
        print CONT $c,$nc;
      }
    $i++;

    }
    else
    {
      print CONT $c;
    }
  }
}

測試:

\usemodule[chinese]
\starttext 

\completecontent
%\setupindenting[medium]
\setupwhitespace[10pt]

\chapter{桃花源記}

\ConTeXt\ 中文測試。

\section{桃花源記前段}

晉太元中,武陵人,捕魚為業,緣溪行,忘路之遠近;忽逢桃花林,夾岸數百步,
中無雜樹,芳草鮮美,落英繽紛,漁人甚異之。復前行,欲窮其林。林盡水源,
便得一山。山有小口,彷彿若有光,便捨船,從口入。

初極狹,纔通人;復行數十步,豁然開朗。土地平曠,屋舍儼然。有良田、美池、
桑、竹之屬,阡陌交通,雞犬相聞。其中往來種作,男女衣著,悉如外人;黃髮、
垂髫,並怡然自樂。見漁人,乃大驚,問所從來;具答之,便要還家,設酒、殺雞、
作食。村中聞有此人,咸來問訊。自云:「先世避秦時亂,率妻子邑人來此絕境,
不復出焉;遂與外人閒隔。」問今是何世;乃不知有漢,無論魏、晉。此人一一
為具言所聞,皆歎惋。餘人各復延至其家,皆出酒食。停數日,辭去。此中人語
云:「不足為外人道也。」

既出,得其船,便扶向路,處處誌之。及郡下,詣太守,說如此,太守即遣人隨
其往,尋向所誌,遂迷不復得路。南陽劉子驥,高尚士也,聞之,欣然規往,未
果,尋病終。後遂無問津者。

\chapter{將進酒}

君不見,黃河之水天上來,奔流到海不復回。
君不見,高堂明鏡悲白髮,朝如青絲暮成雪。
人生得意須盡歡,莫使金樽空對月。
天生我材必有用,千金散盡還復來。
烹羊宰牛且為樂,會須一飲三百杯。
岑夫子,丹丘生,將進酒,君莫停。
與君歌一曲,請君為我側耳聽。

鐘鼓饌玉不足貴,但願長醉不願醒。
古來聖賢皆寂寞,惟有飲者留其名。
陳王昔時宴平樂,斗酒十千恣讙謔。
主人何為言少錢,徑須沽取對君酌。
五花馬 千金裘,呼兒將出換美酒。
與爾同消萬古愁。

\chapter{許功開的問題}

許功開。這些有問題的字元要避開。

也就是說,要前置處理這些字元。

\stoptext
# chcont.pl cont-b5 ==> 千萬不要加副檔名,切記!

這樣會產生 cont-b5.dvi

# dvipdfmx cont-b5 ==> 產生不內嵌字型且可 copy&paste 的 pdf 檔。

這裡沒有用到 pdftex 嵌入 TTF 的功能,原因是他不僅嵌入整個 subfont 檔案會變得很大,而且又沒有 copy&paste&search 的功能。

WWW: http://www.pragma-ade.com/

WWW: http://www.pragma-ade.com/general/manuals/mchinese.pdf


10.16. cwTeX

cwTeX 排版系統由吳聰敏與吳聰慧共同發展, 它延伸 TeX/LaTeX 之功能,使之可以排版中文。

當初吳老師設計 cwTeX 字型時,對字型的編排是仔細設計的。 他將最常用的字型依先後順序編排,越是常用的,就越放在前面。 所以,這和 windows 上的字型順序不相同。當初之所以如此設計, 是為了讓編譯的速度能夠變得比較快。

不過,隨著電腦的速度越來越快,硬碟越來越便宜,他對這樣的設計 似乎覺得也可以改變。就和 Windows 的自行編排方式一致他覺得或許 亦不失為一個 user friendly 的方法。因為像 PuTeX 可以使用眾多 中文字字型的優點的確很吸引人,不過呢,這可能還需要「民意」。 請老師來傷腦筋吧。

內附字形為:明體(m)、黑體(bb)、楷書(k)、圓體(r)、仿宋體(f), 若需要垂直字體則在前面加上 v。

安裝 chinese/cwtex

cwTeX 的使用:

% vi file.ctx
% cwtex file
% latex file.tex
% dvips -o file.ps file.dvi
% gv -antialias file.ps

這裡有吳老師 cwTeX 排版系統二版手冊 cxbook.pdf

WWW: tmwu's homepage


10.17. dvipdfmx - 轉換 *.dvi 成為不內嵌中文字型的 *.pdf 檔

Copyright (c) 20021 李果正(Edward G.J. Lee )

這是 Jin-Hwan Cho(韓)、Shunsaku Hirata(日) 修改自 Mark A. Wicks 的 dvipdfm 而來的。

主要的功能是轉換 *.dvi 成為不內嵌中文字型的 *.pdf 檔。 一般的英文檔也是可以照常使用(含原有 dvipdfm 的功能)。 不管是可處理 double-byte code 的 Omega 或只能處理 single-byte 使用 subfont 的 CJK package 都可以使用。

最大的好處是可以利用 TeX/LaTeX 來製作中文 pdf 檔, 而且又不內嵌中文字型,可以使檔案小很多(是真的『很多』!:)。 可直接使用 TTF,但會被標記為 use font of acroread 所預設使用的字型(MHei-Medium 及 MSung-Light),這樣雖然不內嵌字型, 但在 acroread/xpdf 都可以正常閱覽,非常方便網路上的流通。 又不必再去花銀子買軟體來製作,更重要的是 TeX/LaTeX 的特殊功能還是可以繼續沿用。

如果和 pslatex 配合使用的話, 那連英文字型及少數特殊符號也會不內嵌,使檔案更小, 當然 mathtime 的一些數學符號並沒有 free 的,這會內嵌 CM 字型。

安裝 print/dvipdfmx

以 bsmi00lp.ttf 為例,安裝好後 $TEXMF/dvipdfm/config/cid-x.map 設為:

arb5sung@Big5@ ETen-B5-H :0:!arb5_sung.ttf
arb5sungs@Big5@ ETen-B5-H :0:!arb5_sung.ttf,Italic
arb5sung@Big5@ ETen-B5-H :0:!arb5_sung.ttf,Bold
arb5sungs@Big5@ ETen-B5-H :0:!arb5_sung.ttf,BoldItalic
arb5kai@Big5@ ETen-B5-H :0:!arb5_kai.ttf
arb5kais@Big5@ ETen-B5-H :0:!arb5_kai.ttf,Italic
arb5kai@Big5@ ETen-B5-H :0:!arb5_kai.ttf,Bold
arb5kais@Big5@ ETen-B5-H :0:!arb5_kai.ttf,BoldItalic
% 但不含 postscript name 的字型則無法使用。去掉 ``!'' 會嵌入 TTF(
% CIDFontType2,或 Type11),不需 *.enc 檔。

另外也有人建議將 ,Italic 改成 -s .167,BoldItalic 改成 ,Bold -s .167 以避免斜體字顯示不正常, 沒有逗點的問題。

Note: 裝完後記得執行 mktexlsr

即可。當然,原先的系統 CJK package 要能夠正常運作 (不管是使用 Type1或 pk 字型),因為需要正確的 *.tfm 字型描述檔。 然後,依照一般正常程序編譯 CJK 文稿即可。

由於並沒有去變造、嵌入字型本身, 所以只要是合法買來的字型應該都可以放心去使用了。

% 我不是律師,可不負擔保責任。:)

讓英文字型也不內嵌:由 *.tex 文稿中,加入:

\usepackage{pslatex}

測試:

% cat cjk.tex
\documentclass{article}
\usepackage{CJK}
\begin{document}
Hello World
\begin{CJK*}{Bg5}{song}
您好
\end{CJK*}
\end{document}
% bg5latex cjk.tex
% dvips -o ps2pdf-cjk.ps cjk.dvi
% ps2pdf ps2pdf-cjk.ps
% dvipdfmx -o dvipdfmx-cjk.pdf cjk.dvi
% cat bg5pslatex
#!/bin/sh
f=`echo $1 | sed -e 's|\(.*\)\.[^/]*$|\1|'`
bg5conv < $1 > $f.cjk && pslatex $f.cjk
% ./bg5pslatex cjk.tex
% dvipdfmx -o pslatex-cjk.pdf cjk.dvi
% pdffonts ps2pdf-cjk.pdf
name                                 type         emb sub uni object ID
------------------------------------ ------------ --- --- --- ---------
[none]                               Type 3       no  no  no       9  0
% pdffonts dvipdfmx-cjk.pdf
name                                 type         emb sub uni object ID
------------------------------------ ------------ --- --- --- ---------
TGRGZY+CMR10                         Type 1       yes yes no      10  0
ZenKai-Medium                        CID TrueType no  no  no      13  0
% pdffonts pslatex-cjk.pdf
name                                 type         emb sub uni object ID
------------------------------------ ------------ --- --- --- ---------
Times-Roman                          Type 1       no  no  no       8  0
ZenKai-Medium                        CID TrueType no  no  no      11  0
% ls -l *.pdf
-rw-r--r--  1 root  wheel  8427  7  6 00:17 dvipdfmx-cjk.pdf
-rw-r--r--  1 root  wheel  5373  7  6 00:17 ps2pdf-cjk.pdf
-rw-r--r--  1 root  wheel  3789  7  6 00:17 pslatex-cjk.pdf

問題:

無法由 pdf2ps/pdftops 來轉成 ps。也就是說一般表機會印不出來。

對策:

可經由 acroread 利用裡頭的 CIDKeyed font 來轉成 ps 檔。 品質相當精良,只是檔案很大就是了。

終究解決方法:

要和 gs 整合在一起。

Figure 10-8. dvipdfmx snapshot

WWW: 我的 CJK - by Edward

WWW: dvipdfmx project


10.18. ttf2pt1 - TTF 轉中文 Type1 字型

Copyright (c) 2001 李果正(Edward G.J. Lee )

本文為自由文件(FDL http://www.gnu.org/copyleft/fdl.html) 可自由複製/修改/散佈。但請保留版權聲明的部份。

安裝 chinese/ttf2pt1, 他會連 print/ttf2pt1 一起安裝。

chinese 套件只是 map 表,有倚天字集可用。

寫一個 sh script(mkfont) 內容如下:

=== mkfont begin ===
#!/bin/sh
#
# By Edward G.J. Lee 2001.11.25
# This code is Public Domain.
#
if [ $# -ne 1 ]
then
  echo "Usage: `basename $0` your.ttf"
  exit 1
fi

echo
echo "Now create *.t1a and *.enc and *.afm files. Wait... "
echo
FONTNAME=$1
MAPFILE=/usr/local/share/ttf2pt1/maps/cubig5.map
n=1
while [ $n -lt 10 ]
do
  m=0$n
  ttf2pt1 -GE -pft -Ohub -W0 -L $MAPFILE+$m $FONTNAME ${FONTNAME%.ttf}$m
  n=`expr $n + 1`
done

m=10
while [ $m -lt 56 ]
do
  ttf2pt1 -GE -pft -Ohub -W0 -L $MAPFILE+$m $FONTNAME ${FONTNAME%.ttf}$m
  m=`expr $m + 1`
done

# avoid dvips(k)(before v5.86) t1part module bug.
#
perl -pi -e 's/_/Z/g' *.t1a *.afm

echo
echo "Now create *.pfb, wait... "
echo
for ps in *.t1a
do
  t1asm -b $ps > ${ps%.t1a}.pfb
done

echo
echo "Now create *.tfm, wait... "
echo
for afm in *.afm
do
  afm2tfm $afm
done

AFM=${FONTNAME%.ttf}-afm
TFM=${FONTNAME%.ttf}-tfm
PFB=${FONTNAME%.ttf}-pfb
ENC=${FONTNAME%.ttf}-enc
rm -f *.t1a
mkdir -p $AFM $TFM $PFB $ENC
mv -f *.enc $ENC
mv -f *.afm $AFM
mv -f *.tfm $TFM
mv -f *.pfb $PFB
echo
echo "OK, all done. :-)"
echo
=== mkfotn end ===

在一個獨立目錄放 mkfont(要先 chmod +x mkfont), 再把字型置於同一目錄。

* 一些路徑有不一樣的話,請自行修改。

這裡以文鼎細上海宋和文鼎中楷為例:

./mkfont bsmi00lp.ttf; ./mkfont bkai00mp.ttf

即可。完成後會產生 afm, euc, tfm, pfb 等四個目錄,裡面都是字型資料。

將資料搬移到所屬的地方(arphic 目錄請自行建立)。

afm copy 至 /usr/local/share/texmf/fonts/afm/arphic。

tfm copy 至 /usr/local/share/texmf/fonts/tfm/arphic。

pfb copy 至 /usr/local/share/texmf/fonts/type1/arphic。

euc copy 至 /usr/local/share/texmf/dvips/arphic。

新增 /usr/local/share/texmf/dvips/config/aming.map 內容如下:

bsmi00lp01  ShanHeiSun-Light-01 <bsmi00lp01.pfb
bsmi00lp02  ShanHeiSun-Light-02 <bsmi00lp02.pfb
...
bsmi00lp55  ShanHeiSun-Light-55 <bsmi00lp55.pfb

新增 /usr/local/share/texmf/dvips/config/akai.map 內容如下:

bkai00mp01  ZenKai-Medium-01 <bkai00mp01.pfb
bkai00mp02  ZenKai-Medium-02 <bkai00mp02.pfb
...
bkai00mp55  ZenKai-Medium-55 <bkai00mp55.pfb

在 /usr/local/share/texmf/dvips/config/config.ps 加入:

p +aming.map
p +akai.map

新增 /usr/local/share/texmf/dvips/config/bsmi00lp.map 內容如下:

bsmi00lp01  <bsmi00lp01.enc <bsmi00lp.ttf
bsmi00lp02  <bsmi00lp02.enc <bsmi00lp.ttf
...
bsmi00lp55  <bsmi00lp55.enc <bsmi00lp.ttf

新增 /usr/local/share/texmf/dvips/config/bkai00lp.map 內容如下:

bkai00mp01  <bkai00mp01.enc <bkai00mp.ttf
bkai00mp02  <bkai00mp02.enc <bkai00mp.ttf
...
bkai00mp55  <bkai00mp55.enc <bkai00mp.ttf

* bsmi00lp.ttf,bkai00mp.ttf 要置於 kpathsea 找得到的地方,如 /usr/local/share/texmf/fonts/truetype (目錄可自行建立)。

修改 /usr/local/share/texmf/pdftex/config/pdftex.cfg,加入:

map +bsmi00lp.map
map +bkai00mp.map

新增 /usr/local/share/texmf/tex/latex/CJK/Bg5/c00aming.fd 內容如下:

\def\fileversion{4.2.0}
\def\filedate{2001/09/28}
\ProvidesFile{c00aming.fd}[\filedate\space\fileversion]
\DeclareFontFamily{C00}{aming}{}
\DeclareFontShape{C00}{aming}{m}{n}{<-> CJK * bsmi00lp}{}
\DeclareFontShape{C00}{aming}{bx}{n}{<-> CJK * bkai00mp}{}
\endinput

新增 /usr/local/share/texmf/tex/latex/CJK/Bg5/c00bsmi00lp.fd 內容如下:

\def\fileversion{4.2.0}
\def\filedate{2001/09/28}
\ProvidesFile{c00bsmi00lp.fd}[\filedate\space\fileversion]
\DeclareFontFamily{C00}{bsmi00lp}{}
\DeclareFontShape{C00}{bsmi00lp}{m}{n}{<-> CJK * bsmi00lp}{}
\DeclareFontShape{C00}{bsmi00lp}{bx}{n}{<-> CJK * bkai00mp}{}
\endinput

這樣粗體字會去選用文鼎楷書體(個人不喜歡模擬出來的粗體字)。 當然楷書體也要自行按上述方法製作出來。

執行 texhash(or mktexlsr)。這樣就可以了,要使用明體就使用 aming 的字型名稱,要使用楷體就使用 akai(依上述方法做一個 c00akai.fd)。

當然,CJK 的使用方法,請參考 CJK 所附文件,一定要指定 aming 才會去使用所定義出來的字型,否則會去抓 CJK 預設字型, 那當然一般系統上是沒有的。

為了配合中文 Type1 字型,執行 dvips 時請加上 -Ppdf 或 -Pcmz 參數, 這樣英文字型才會去使用 Type1。

最後記得執行 texhash。

測試例子

=== begin ex.tex ===
\def\Fn{\char}
\font\Aa=bsmi00lp01 scaled 1000
\font\CCC=bsmi00lp55 scaled 3000
\font\CCc=bsmi00lp55 scaled 2000
\font\Ccc=bsmi00lp55 scaled 1000
\font\JJJ=bsmi00lp24 scaled 3000
\font\JJj=bsmi00lp24 scaled 2000
\font\Jjj=bsmi00lp24 scaled 1000
{\CCC\Fn108}
{\CCC\Fn109}
{\CCc\Fn110}
{\CCc\Fn111}
{\Ccc\Fn112}
{\Ccc\Fn113}
{\Ccc\Fn114}
{\JJJ\Fn55}
{\JJj\Fn95}
{\Jjj\Fn84}
{\CCC\Fn101}
{\CCC\Fn102}
{\CCc\Fn103}
{\CCc\Fn104}
{\Ccc\Fn106}
{\Ccc\Fn107}
\bye
=== end ex.tex ===

pdftex ex.tex 即可產生內嵌中文 TTF 的 ex.pdf。 如果有製作中文 Type1 字型,則 tex ex.tex ; dvipdf ex 則是會內嵌中文 Type1,各位可比較看看兩者有何不同。

寫個 cjk-latex 稿試看看吧!字型名稱要使用 bsmi00lp。我寫的 sh script 只是個半成品,可能得多試幾次才會成功。have fun! :)

* LaTeX 稿請用 pdflatex。

要編譯 CJK-latex 文稿,可有兩種方式:

1. bg5latex test.tex ; pdflatex test.cjk

2. 寫一個 sh script(bg5pdflatex) 內容如下:

=== bg5pdflatex begin ===
#!/bin/sh
FILE=`echo $1 | sed -e 's|\(.*\)\.[^/]*$|\1|'`
bg5conv < $1 > $FILE.cjk
pdflatex $FILE.cjk
=== bg5pdflatex end ===

chmod +x bg5pdflatex 後置於 PATH 可及之處。

bg5pdflatex test.tex

即可。其實這個 script 的內容和 bg5latex 是一樣的,只不過是把 latex 換成 pdflatex 而已。

ps. 內容如有錯誤,請不吝指正。

Figure 10-9. ttf2pt1 snapshot

WWW: 使用 pdfTeX/pdfLaTeX 讓 pdf 檔內嵌中文 TTF/TTC

WWW: 由 TeX/LaTeX 製作中文 PDF 檔

WWW: CJK/LaTeX environment 中文 Type1 及 TTF 的使用

WWW: http://ttf2pt1.sourceforge.net/


Chapter 11. 中文轉碼軟體


11.1. iconv

由於版權的問題,FreeBSD 下的 iconv 2.0 大約是 2000 年的程式, 也就不能 GNU libiconv 所擁有的轉換表, 在使用上也是有許多缺點。

安裝 converters/iconv

基本的用法有:

% iconv -f gb2312 -t big5 file.gb > file.big5

以下是寫 C 程式的小範例:

#include <stdio.h>
#include "iconv.h"

void
my_iconv(char *fromcode, char *tocode, char *inbuf, char *outbuf)
{
  iconv_t cd;
  size_t status;
  char *inbufp, *outbufp;
  size_t inbytesleft, outbytesleft;

  inbytesleft = strlen(inbuf);
  outbytesleft = inbytesleft * 5;

  cd = iconv_open(tocode, fromcode);
  if ((iconv_t) (-1) == cd) {
    perror ("Error at iconv_open");
    exit(1);
  }

  inbufp = inbuf;
  outbufp = outbuf;
  status = iconv (cd, &inbufp, &inbytesleft, &outbufp, &outbytesleft);
 if (status == (size_t) -1)
  {
    perror ("Error at my_iconv");
  }

  status = iconv_close(cd);
  if (status == (int) -1)
  {
    perror ("Error at iconv_close");
  }

  return;
}

int
main(int argc, char* argv[])
{
  char *inbuf = "加上";
  char *outbuf =  (char *) malloc(sizeof (char) * strlen(inbuf)*5);

  my_iconv("Big5", "GBK", inbuf, outbuf);
  printf("%s -> %s\n", inbuf, outbuf);
  free(outbuf);
}

以下是編譯的方式:

gcc -I/usr/local/include -L/usr/local/lib -liconv -o my_iconv my_iconv.c

WWW: http://www.dante.net/staff/konstantin/FreeBSD/iconv/


11.2. cn2jp - 在中文和日文間的編碼轉移函式庫

一個可以中文 {GB,Big5,HZ} 和日文 (EUC-Jis/Shift-Jis/Jis) 之間互相轉換的程式。

安裝 converters/cn2jp

基本的用法有:

% b2j < file.big5 > file.jis
% g2j < file.gb > file.jis
% j2b < file.jis > file.big5
% g2b < file.gb > file.big5
% j2g < file.jis > file.gb
% b2g < file.big5 > file.gb

另外還有幾個可以使用的 Library:

char    *lang_big5_to_eucjis(istr)
        ;translate Big5 in istr to EUC-Jis in allocated buffer
        ;the allocated buffer is returned and valid until next call
        ;refer to subdirectory big2jis

char    *lang_gb_to_eucjis();
        ;translate GB in istr to EUC-Jis in allocated buffer
        ;the allocated buffer is returned and valid until next call
        ;refer to subdirectory gb2jis

char    *lang_eucjis_to_big5(istr)
        ;translate EUC-Jis in istr to Big5 in allocated buffer
        ;the allocated buffer is returned and valid until next call
        ;refer to subdirectory jis2big

char    *lang_gb_to_big5(istr)
        ;translate GB in istr to Big5 in allocated buffer
        ;the allocated buffer is returned and valid until next call
        ;refer to subdirectory gb2big

char    *lang_eucjis_to_gb(istr)
        ;translate EUC-Jis in istr to GB in allocated buffer
        ;the allocated buffer is returned and valid until next call
        ;refer to subdirectory jis2gb

char    *lang_big5_to_gb(istr)
        ;translate Big5 in istr to GB in allocated buffer
        ;the allocated buffer is returned and valid until next call
        ;refer to subdirectory big2gb

int     lang_uzpj
        ;uses the uzpj system for unmappable words

int     lang_debug
        ;turns on the debug info in translation

11.3. autoconvert - 智慧的中文編碼轉換

autoconverter 的特色是有自動判斷轉碼功能,適合用在 GB <=> Big5 <=> HZ 互轉。

安裝 chinese/autoconvert

如果您使用 procmail,在 /usr/local/share/autoconvert/procmailrc.example 底下有一個將 autoconvert 當作 procmail 過濾器的範例。

autoconvert使用方法:

% autob5 -i utf8 -o big5 < shed.utf8 > shed.utf8.big5-ac
     

WWW: http://banyan.dlut.edu.cn/~ygh/


11.4. c2t - 轉譯 GB/Big5 編碼成拼音

GB(大陸)/Big5(台灣)中文轉成拼音中文字轉成英文字母拼音。

安裝 chinese/c2t

% echo "您好" | b2g | c2t
nin2 hao3

11.5. hc - 漢字轉換器,在 GB 和 Big5 編碼間轉換

漢字轉換器,這是一個 BIG5 及 GB 編碼的轉換程式。

GB 與 Big5 屬於兩個不同組織各自制定的標準, 對應漢字編碼的轉換都是通過表格來轉換, 它們之間不存在任何內在的邏輯關係或函數。

安裝 chinese/hc

GB 轉為 BIG5 用:

% hc -m g2b -t /usr/local/share/chinese/hc.tab < INPUT_FILE > OUTPUT_FILE
     

BIG5 轉為 GB 用:

% hc -m b2g -t /usr/local/share/chinese/hc.tab < INPUT_FILE > OUTPUT_FILE
     

您可以自己寫一個 shell script 來簡化上面的指令。 或是直接使用已經寫好的 shell script g2bb2g


11.6. gb2jis - GB漢字轉換JIS漢字

安裝 chinese/gb2jis

可輸入以下編碼:

GB2312-80 + GB8565-88
GB2312-80
中國語EUC (8-bit GuoBiao)
HZ-encoding

可輸出以下編碼:

JISX0208-1983 + JISX0212-1990
JISX0208-1983 + JISX0212-1990 + UZPJ
JISX0208-1983
JISX0208-1983 + UZPJ
日本語EUC
日本語EUC + UZPJ
Shift-JIS
Shift-JIS + UZPJ

UZPJ(雙拼)規則等詳細說明請參閱 man 1 gb2jis 的操作指南。


11.7. hztty - 在 GB Big5 和 HZ tty 中轉換

Hztty 可在不同中文編碼格式做轉換。 可轉換國標(GB)/繁體(Big5)/漢字(HZ)標(GB)就是大陸用的簡體字, 繁體(Big5)是台灣用的,漢字(HZ)是其它地區用的, 各地區有不同的中文編碼,有了此程式讓不同地區間的中文溝通更順暢。

安裝 chinese/hztty

用法很簡單,如果您要在 Big5 的環境底下連上 GB 的 BBS,只要依照以下的步驟:

% hztty -I big2gb -O gb2big
[hztty started]  [using /dev/ttyp3]
% telnet bbs.tsinghua.edu.cn
% exit
exit

[hztty exited]

這樣子就可以輸出自動將簡體轉為繁體,並將輸入自動由繁體轉為簡體, 就可以很方便的與使用簡體的人溝通了。

bbs.tsinghua.edu.cn(水木清華) 有 FreeBSD 的討論版。

Figure 11-1. hztty snapshot


11.8. jis2gb - JIS漢字轉換GB漢字

安裝 chinese/jis2gb

可輸入以下編碼:

JISX0208-1983 (JISC6226-1978)
JISX0212-1990
日本語EUC
Shift-JIS

可輸出以下編碼:

GB2312-80 + GB8565-88
GB2312-80
中國語EUC (8-bit GuoBiao)
HZ-encoding

詳細說明請參閱 man 1 jis2gb 的操作指南。


11.9. pycodec - 中文碼/萬國碼轉換程式

這個套件支援Python和C兩種介面,可轉換中文碼和萬國碼(Unicode)。 如果您只用Python寫程式,請採用Python介面。 然而,如果您喜歡C,可以試著使用C介面。 C介面是用Python/C API寫出來的,目的是為了得到較佳的效能。 就目前而言,Python介面適用GNU/Linux和Windows系統, 但是,這一版的C介面只能用於GNU/Linux系統。

安裝 converters/py-cjkcodecs

在demo/子目錄下,您可以找到test_*.py; 這是用來示範如何把中文碼轉換成Unicode, 或者從Unicode轉換成中文碼。

在chinesetw/子目錄下,有四個對照表檔案,如下所示:

o big52utf1.py
o big52utf2.py
o utf2big51.py
o utf2big52.py

主檔名中最後一個數字是指BIG5碼的層級,如big52utf1.py指的就是第一層 BIG5碼,而big52utf2.py指的就是第二層BIG5碼。 由於第一層BIG5碼定義的都是最常用的中文字, 因此,把第一層和第二層分開,多少有助於加快辭典的搜尋速度。

此外,倚天版的Big5或是Big5 Plus並不保證能正常運作。

C介面:每個共享模組中只有兩個方函:decode()和encode()。 您可以把BIG5字串轉成萬國碼字串,也可以直接轉成UTF-8或UTF-16。 最原始的用法,請參見範例。

#!/usr/local/bin/python
twstring = "這是一個測試, 英文是\"This is a test.\"\n" + \
           "先把BIG5碼轉換成Unicode, 再把Unicode轉\n" + \
           "回BIG5碼. 效果還不錯, 但效能差一點."
uni = unicode(twstring, "big5_tw")
bstring = uni.encode("big5_tw")
print "Original BGI5 encoded string:"
print twstring
print "Transcode to Unicode encoding:"
print repr(uni)
print "Print as a BIG5 encoded string:"
print bstring

WWW: http://sourceforge.net/projects/python-codecs/


11.10. fzzdxfw - 方正中等線繁體

Contributed by 逸晨 (weonfu@hotmail.com)

Last Update: 2003年 4月 6日 周日 15時43分29秒 CST

把簡體網站直接變繁體的方式目前有不少種, 使用南極星的軟體,使用中介型網站例如 番薯藤的簡體網頁繁體化, 另ㄧ種就是直接從字型下手。 在這邊提供從字型下手的方式。

fzzdxfw 字型的安裝:

# cd /usr/ports/outta-port/fzzdxfw
# make install clean

安裝完後,可以用 ttfm.sh --list xttfm 來查看是否有裝好。

FZZDXFW.TTF -misc-FZZhongDengXian_Z07T-medium-r-normal--0-0-0-0-c-0-gb2312.1980-0 
FZZDXFW.TTF -misc-FZZhongDengXian_Z07T-medium-r-normal--0-0-0-0-p-0-iso8859-1 
FZZDXFW.TTF -misc-FZZhongDengXian_Z07T-medium-r-normal--0-0-0-0-c-0-iso10646-1

確認後,設定 Mozilla 的字型配置, 繁體字型與歐美字型的部分保持原設定, 只需要修改簡體字型的部分。

如果是 IE 的使用者可以將字型安裝到 C:/WINDOWS/Fonts 之下, 然後開啟 IE,工具 -> 網際網路選項 -> ㄧ般 -> 字型 -> 字集: 簡體中文 -> 網頁字型: FZZhongDengXian-Z07T -> 純文字字型: FZZhongDengXian-Z07T, 並且修改 工具 -> 網際網路選項 -> ㄧ般 -> 存取設定 -> 略過Wab網頁上指定字型樣式 勾起來,可以防止網頁直接寫死字型。

Figure 11-2. fzzdxfw snapshot

DL: 方正中等線繁體下載位址


Chapter 12. 中文郵件用戶端


12.1. sylpheed - 建構在 GTK+ 上,輕量級且快速的電子郵件軟體

GPL base client,base on GTK+。 它是日本人寫的,已經支援 I18N 和 XIM。 在顯示和輸入中文都沒問題,和 xcin2.5 也搭配良好。

安裝 mail/sylpheed

安裝完後,必須修改字型設定,修改 $HOME/.sylpheed/sylpheedrc 檔, 將 message_font 改成下面的樣子。

message_font=8x16,kc15f,-*-16-*-big5-0

Figure 12-1. sylpheed snapshot

WWW: http://sylpheed.good-day.net/


12.2. mutt - 功能強大的電子郵件軟體

console 模式下的中文電子郵件軟體。 Mutt -- "The Mongrel of Mail User Agents" 包含了很多其他 如 ElmPinemhslrn 的特點,特性是包含顏色支援, 訊息串流 ,MIME 解碼 (包含 RFC1522 支援得標頭編碼),個人化金鑰的保存 ,POP3,支援 DSN 和 PGP/MIME。

安裝 chinese/mutt

設定 .muttrc

set charset=big5
set locale="zh_TW.Big5"
set send_charset="big5:gb2312:us-ascii:iso-8859-1:utf-8:x-unknown"
charset-hook us-ascii big5                                        
charset-hook iso-8859-1 big5

如果寄信給 bbs 的朋友,有亂碼問題的話

echo "set bbsislame=yes" >> ~/.muttrc

mutt 1.3.x 讀 utf8 及簡體中文的信件都沒有問題。

Figure 12-2. mutt snapshot

WWW: http://www.mutt.org/

Mutt 使用者資訊: http://www.math.fu-berlin.de/~guckes/mutt/


12.3. pine4 - 操作便利的電子郵件軟體

console 模式下的中文電子郵件軟體。 大部份的訊息、選單都已經中文化了也可以正確無誤的處理中文信件, 是個很方便的讀信軟體。 pine4 的功能包含了支援 MINE 、通訊錄,還支援 IMAP、mail 與 MH 格式的資料。

安裝 chinese/pine4

若是顯示仍有問題的話,進入 pine4 之後選 SETUP/Configfeature list 中勾選(按 X):

   [X]  enable-8bit-esmtp-negotiation
   [X]  enable-8bit-nntp-posting

然後在 character-set 上按 C,將其值 改為 big5 或 gb2312。按 E 脫離儲存即可。

WWW: http://www.washington.edu/pine/


12.4. 郵件亂碼?

由於歷史原因,Internet 上有些郵件系統只支援 7Bit 的字元傳輸, 而漢字的內碼是 8Bit 的,當在電子郵件中發送中文時, 如果經過這些只支援 7Bit 字元的郵件系統, 便會將漢字內碼的第八位元的 1 全部變成 0。

以 "中文" 兩字為例,HEX 為 A4A4A4E5, 當最高位元被清掉時就會變成 24242465,也就是 "$$$e"。 telnet 也存在這樣子的問題。

除了中文郵件外,使用電子郵件傳送圖片、程式、 壓縮文件等也會發生這個問題。 所以在電子郵件中一般採用各種郵件編碼方式來解決這個問題, 將 8Bit 按照一定的規則進行編碼, 便可以完好地通過只支持 7Bit 字元的郵件系統。

常見的郵件編碼有 UU 與 MIME,而 MIME (Multipurpose Internet Mail Extentions) 一般翻譯成「多媒體傳送模式」, 顧名思義,它標榜的就是可以傳送多媒體型式的檔案, 可以在一封mail中附加各種型式檔案一起送出。

MIME 定義兩種編碼方法:Base64 與QP(Quote-Printable), 兩者使用時機不同,QP 的規則是對於資料中的7bits無須重複encode, 僅8bits資料轉成7bits。QP編碼適用於非US-ASCII的文字內容, 例如中文檔案,而Base64的編碼規則,是將整個檔案重新編碼, 編成7bits,它是用於傳送binary檔案時使用。 由於編碼的方式不同,會影響編碼之後的檔案大小。 有些較懶惰的軟體便都一律採用Base64編碼了。

含有 MIME 編碼的文件,您查看它的源始碼,一般都含有: "This is a multi-part message in MIME format." 這樣的句子。

以下以 mmencode (又稱為 mimencode) 作為 QP 與 BASE64 的範例, 安裝 converters/mmencode

RFC 2045 - Multipurpose Internet Mail Extensions (MIME) Part One: Format of Internet Message Bodies

RFC 2046 - Multipurpose Internet Mail Extensions (MIME) Part Two: Media Types

RFC 2047 - MIME (Multipurpose Internet Mail Extensions) Part Three: Message Header Extensions for Non-ASCII Text


12.4.1. UU 編碼 (uuencode與uudecode)

UU 是指 Unix 之間傳送二進制文件,就是 Unix to Unix。 使用 uuencode 將檔案編成7位元ASCII檔案,把它寄出, 收信人收到後,可以用 uudecode 將這份資料還原為原來的檔案。

uuencode 的第一個參數是要加碼的檔案,也就是您信件的內容。 第二個參數是希望收信人解開後檔案叫什麼名字。

% echo "中文" > infile
% uuencode infile remotefile
begin 644 remotefile
%I*2DY0KQ
`
end
% uuencode infile remotefile | mail statue
% mail
Mail version 8.1 6/6/93.  Type ? for help.
"/var/mail/statue": 1 message 1 new
>N  1 statue                Fri Dec 21 13:12  16/390
&
Message 1:
From statue Fri Dec 21 13:12:19 2001
Date: Fri, 21 Dec 2001 13:12:19 +0800 (CST)
From: statue <statuei>
To: statue

begin 644 remotefile
%I*2DY0KQ
`
end
& s mail1
"mail1" [New file]
& q
% uudecode mail1
% cat remotefile
中文

12.4.2. QP - Quote-Printable

Content-Transfer-Encoding: quoted-printable

QP編碼的方式,是將一個字元用二個16進位法的數值表示, 然後前面再加個「=」字元(等號):

% echo "中文" | mmencode -q
=A4=A4=A4=E5
% echo "=A4=A4=A4=E5" | mmencode -q -u
中文

或是用 perl 來將 QP 解碼:

while(defined($line = <STDIN>)) {
  $line =~ s/=([0-9A-Fa-f][0-9A-Fa-f])/chr hex $1/ge;
  $line =~ s/[\n\r]+$//;
  print STDOUT $line;
}

用 perl 來將文字編成 QP 碼:

while(defined($line = <STDIN>)) {
  $line =~ s/([=\x00-\x1F\x80-\xFF])/sprintf("=%02X",ord($1))/ge;
  print STDOUT $line;
}

12.4.3. BASE64

Content-Transfer-Encoding: BASE64

BASE64 的算法很簡單,它將字符流順序放入一個 24 位的緩衝區, 缺字符的地方補零。然後將緩衝區截斷成 4 個部分,高位在先, 每個部分 6 位,用下面的64個字符重新表示: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"。 如果輸入只有一個或兩個字節,那麼輸出將用等號 "=" 補足。 還可以隔斷附加的信息造成編碼的混亂。這就是BASE64。

% echo "中文" | mmencode
pKSk5Qo=
% echo "pKSk5Qo=" | mmencode -u
中文

12.4.4. 其他亂碼?

以 "中文" 兩字為例,整理一下以上的編碼會出現的狀況:

uuencode:%I*2DY0KQ
QP:=A4=A4=A4=E5
BASE64:pKSk5Qo=

以及其他語言性的轉碼可能出現的狀況:

GB2312:笢恅(iconv -t GB2312)
Unicode:U+4E2D U+6587
UCS-2:N-e(iconv -t UCS-2)
UTF-7:+Ti1lhw(iconv -t UTF-7)
UTF-8:銝剜??(iconv -t UTF-8) 
UTF-16:??N-e?(iconv -t UTF16)
UTF-32:??N-e?(iconv -t UTF32)
CNS11643:1-4463 1-4546
CCCII:213034 214258

另外一些有的沒的程式會出現的狀況:

hexdump:0000000 a4a4 e5a4 000a                         
0000005(hexdump)

Chapter 13. 中文網際網路軟體


13.1. bind8

chinese bind8 is just for 8-bit Domain Name , nothing need to document.

安裝 chinese/bind8


13.2. samba - 網路芳鄰,資源分享程式

Last Update: 2003年 1月25日 周六 12時24分45秒 CST

samba 是一個能把您的 Unix 電腦和其他 MS Windows 電腦相互共享資源的軟體。

samba 提供有關於資源分享的三個功能。 包括 smbd,執行了它,就可以使這台 Unix 能夠共享資源給其他的電腦,而 smbclient 就是讓這台 Unix 去存取其他電腦的資源了,最後一個 smbmount,則是類似 MS Windwos 下『網路磁碟機』的功能,可以讓您把其他電腦的資源 掛在自己的檔案系統下。

安裝 net/samba

設定檔修改 /usr/local/etc/smb.conf, 才算完整支援中文,在 [global] 中找到 for Traditional Chinese Users 的設定區,將 client code page=950 前面的 ; 拿掉 ,不要動 coding system=cap,並在後面加上 valid chars = 0xb9

[global]
# for Traditional Chinese Users
client code page=950
; coding system=cap
valid chars = 0xb9

關於 valid chars = 0xb9,這個好像是很久前遇過的一個小問題, 如果您在 smb.conf 中設定 "workgroup = 電腦", 這時候用網芳去瀏覽會發現出現的是 "鄒腦", 電=0xb971 鄒=0xb951 q=0x71 Q=0x51, samba 在遇到 0xb9 後,自動把下一個字元轉成大寫了, 如果設定 valid chars = 0xb9 就會正常。

而這邊會出現 coding system=cap 則是天大的錯誤, 十分容易誤導使用者,以下摘錄 smb.conf.5

coding system (G)

  This parameter is used to determine how incoming Shift-JIS Japanese
  characters are mapped from the incoming client code page used by the
  client, into file names in the UNIX filesystem. Only useful if client
  code page is set to 932 (Japanese Shift-JIS). The options are :

      * CAP - Convert an incoming Shift-JIS character to the 3 byte
        hex representation used by the Columbia AppleTalk Program (CAP),
    i.e. :AB. This is used for compatibility between Samba and CAP.

Default: coding system = <empty value>

在網芳上的名稱通常都要自己加上 netbios name = Elf,其中的 Elf 就是網芳上的名稱。

另一個 samba 的中文問題是 smb.conf 不能設定某些字為 Section,例如:

;[設計與科技] 
[計與科技] 
  comment= 設計與科技 
  browseable = yes 
  path = /home/design 
  read only = yes 
  guest ok = yes

因為 "設" 的第二個字元是 "]" 與 samba 的 Section 字元衝突, 所以解決的方法就是去修改 source/param/param.c

--- params.c.orig  Mon May 12 19:46:29 2003
+++ params.c    Mon May 12 20:37:24 2003
@@ -297,6 +297,15 @@
           i = end + 1;
           c = EatWhitespace( InFile );
           }
+        else if ( c > 0x80 )
+          {
+          bufr[i++] = c;
+          end = i;
+          c = mygetc( InFile );
+          bufr[i++] = c;
+          end = i;
+          c = mygetc( InFile );
+          }
         else                            /* All others copy verbatim.        */
           {
           bufr[i++] = c;

samba 大部分的程式都有中文問題,需要更多人去 patch, 像是 smbclient 去看 MicroSoft 的中文資料夾會是底線(_)。

Note: samba 是用TCP/IP通訊協定,所以在 MS Windows端的電腦也要裝上TCP/IP協定,不然就不能用囉。

而 samba 3.x 的部分可以透過 samba-devel 來安裝, 但是預設沒有支援 I18N,所以必須透過以下的方式來安裝:

# cd /usr/ports/net/samba-devel
# make -DWITH_LIBICONV all install clean
mangling method = hash
unicode = on
dos charset = UCS-2LE
unix charset = CP950
display charset = CP950

WWW: http://www.samba.org/

Online Book - Using Samba: http://www.oreilly.com/catalog/samba/

如果要方便的使用網芳上的東西,就要裝 smbfs 這個軟體,在 net/smbfs 底下,裝好後還需要重編 kernel, 將 options LIBMCHAINoptions LIBICONV 編進去才行。 4.5-RELEASE 之後已經不需要安裝 smbfs 和重新編譯 kernel 了。

然後只要用 smbutil view //user@host 找到要的分享名稱, 再用 mount_smbfs -I host-ip //user@host/share /smb/node 就可以方便的使用網芳囉。目前中文的 host 或是 share 會有問題。


13.3. Konqueror - KDE 內建的瀏覽器

KonquerorKDE 內建的瀏覽器, 在各方面的支持都都十分完善。

Figure 13-1. konqueror snapshot


13.4. mozilla - Mozilla 繁體中文語言包

Mozilla 是一個開放原始碼的網頁瀏覽器,設計方向是順從標準、 高性能和可移植性。 Mozilla 繁體中文語言包(Traditional Chinese Language Pack) 提供一個 L10N 的環境給 Big5 的使用者。 由於 mozilla-tclp 在 ports 中的維護不易, 加上種種的原因,目前已經沒有 mozilla-tclp 的 port 了, 不過還是可以透過新增語言的方式來安裝繁體中文語言包。

在安裝完後,選擇 View -> Languages and Web Content -> Tradition Chinese (zh-TW),然後關閉後從開就有中文的介面了。

Mozilla 在中文輸入及顯示方面並沒有什麼問題,但在列印部份,請修改一下 /usr/X11R6/lib/mozilla/defaults/pref/unix.js 加入中文的 ps font :

pref("print.psnativecode.zh-TW", "big5");
pref("print.psnativefont.zh-TW", "ShanHeiSun-Light-ETen-B5-H");

並安裝 print/adobe-cmapsprint/ghostscript-gnu-commfont 取得 ETen-B5-H 的 CMap name, 以及將 bsmi00lp.ttfttfm.sh --add bsmi00lp.ttf 取得 ShanHeiSun-Light 的 CIDFont name,這是 CID-Keyed Font 的兩個組成要素。也可以用 ttfm.sh --list | grep ETen-B5-H 來看看有那些可以用的字型。

如果直接用編輯器去看 .ps 則會發現有一段:

/Unicode2NativeDictzh-TW 0 dict def
/zh-TW_ls {
  /NativeFont /ShanHeiSun-Light-ETen-B5-H def
  /UCS2Font /Courier def
  /Unicode2NativeDict Unicode2NativeDictzh-TW def
  /unicodeshow1 { real_unicodeshow } bind def
  /unicodeshow2 { real_unicodeshow_native } bind def
} bind def

並且原來的 default_ls 會變成 zh-TW_ls。

在 0.9.8 時所用的是 print.psnativecode.zh-TWprint.psnativefont.zh-TW,到了 0.9.9 分得更細,ps 單獨當一「層」,變成 print.postscript.nativecode.zh-TWprint.postscript.nativefont.zh-TW

另外解釋一下 ports 中 files/ 底下的東西。Mozilla 把它的 resource 用一種很特殊的機制管理。當安裝東西時,它會記錄到 installed-chrome.txt (所以 files 底下的這個檔偶爾會變,因為 language pack 內容若有新增/刪改它也會跟著變)然後, all-locales.rdf 及 user-locales.rdf (存在於以前 keith 的 tclp) 是 Mozilla 參考 installed-chrome.txt 而做出來的檔案。 所以這兩個檔理論上是不應該擺在 ports 的 files 的 (應該讓 Mozilla 產生), 以前 keith 是在自己的電腦上先跑過, 然後抓產生出來的 rdf... 這就好像 FreeBSD 的 package, 會有 dependency 的問題。所以筆者把這兩個檔案拿掉, 改成在 Makefile 裡讓 mozilla 產生(這樣才像 ports 嘛 :P)。

不過直接使用 CIDKeyed-font 可能沒辦法直接送印表機列印, 要解決此問題可利用 ps2ps 指令, 將原 PostScript 文件轉成內嵌的 PostScript 文件。 這樣子需要兩道步驟,沒辦法直接取代原列印指令欄的 lpr ${MOZ_PRINTER_NAME:+'-P'}${MOZ_PRINTER_NAME}, 所以就必須改成比較複雜的方式:

gs -q -sDEVICE=pswrite "-sOutputFile=/tmp/out.ps" \
"-dNOPAUSE -dBATCH -dSAFER" && \
lpr ${MOZ_PRINTER_NAME:+'-P'}${MOZ_PRINTER_NAME} \
/tmp/out.ps && rm -f "/tmp/out.ps"

如果選擇了 mozilla 當作您的瀏覽器, 那麼一定要裝一下 x11-fonts/mozilla-fonts 或是 x11-fonts/webfonts, 前者是專門為 mozilla 所打造出來的 pcf fonts, 後者則是 ms 的 truetype fonts。

如果要看 flash 的話也可以裝 www/flashplugin-mozilla

另一個 Mozilla 的中文問題是當使用 Mozilla 的網址列中文使用 Google 搜尋變問號字串,可以透過以下的修正方式:

# cd /usr/X11R6/lib/mozilla/searchplugins
# fetch http://www.google.com/mozilla/google.src

或是安裝 chinese/mozilla-tclp ,這個 port 也會修正這些問題,不過方式不ㄧ樣。

現在的 mozilla 已經使用 XFT,所以一開始使用可能會找不到字體, 可以經由 env GDK_USE_XFT=0 mozilla & 的方式來執行 mozilla 讓他不採用 XFT,或是利用 fc-cache -f -v 來設定 XFT。 而中文馬賽克的問題可以加裝 x11-fonts/webfonts 來修復,或是在字型選擇的地方將 Allow documents to use other fonts 關閉。

Note: 常遇到的小問題是工具列的字很小,卻又不知道從那調整。 其實 mozilla 還有 Chrome 的設定檔, 在 ~/.mozilla/default/5e7k96bg.slt/chrome/userChrome.css, 只要設定如下就可以了:

/* Make all the default font sizes 16 pt: */
* {
   font-size: 16pt !important
}

Figure 13-2. mozilla snapshot

L10N WWW: http://www.csie.ntu.edu.tw/~b7506051/mozilla/

WWW: http://www.mozilla.org/


13.5. lynx - console 網頁瀏覽器

安裝 www/lynx

lynx v2.7 之後已經 可直接接觀看中文的網頁了。

由於設定檔常常防寫,所以先開啟寫的權限。chmod u+w /usr/local/etc/lynx.cfg

執行 lynx,按 O)ptionDisplay character set ,按上下鍵選 Taipei(Big5),再選 Assumed document character set,按上下鍵選 big5, 再存檔即可。

或是修改 /usr/local/etc/lynx.cfg

CHARACTER_SET:big5
ASSUME_CHARSET:big5
PREFERRED_LANGUAGE:zh-TW

抑或是 lynx -assume_charset=big5 -assume_local_charset=big5。

Figure 13-3. lynx snapshot

lynx WWW: http://lynx.isc.org/current/


13.6. w3m - console 網頁瀏覽器

目前比較常用,且支援中文的 console 瀏覽器有 lynx 和 w3m 兩套,雖然 lynx 在處理網頁上並不是很漂亮, 不過使用的人口不少,所以還是介紹一下關於中文方面的設定。

不過建議您使用 w3mw3m 在排版的部份比 lynx 好很多。

安裝 www/w3m

w3m WWW: http://w3m.sourceforge.net/


13.7. links - 現在的預設 console 瀏覽器

安裝 chinese/links, 這包含中文修補檔。

-g 的模式下無法正確的看到中文。


13.8. netscape [OBSOLETED]

netscape47-* linux-netscape47-*

  • 完整中文支援,感謝許多先進的幫忙,選單/設定/訊息全都是中文 ,沒有用到任何 hack 來修正亂碼的問題,自然就不會出現一堆狀 況。

  • 分成 communicator & navigator,可以選擇適合的,並且這樣比 較符合 official port layout,以後要加 slave port 會相當容 易。

  • 名稱改成像 zh-tw-netscape-communicator-4.75 或 zh-cn-netscape-...,目前暫時把支援大陸 GB 的部份拿掉,如果 有人需要簡體支援再加上去。

  • 加入 Big5 版的 nethelp,這部份是從 Netscape 網站拿下來的, 所以不會像 sysware 的翻譯會有版權問題,"輔助->內容" 就可以看到 nethelp

  • 新增 netscape.cfg。由於 resource 檔沒辦法將右邊的輔助選單轉成中文,必須用 netscape.cfg 才看得到。

  • preferences.js,指定內定使用的語言和字型。

  • Wheel Mouse 設定。

  • Navigator/Composer root/overthespot XIM input styles.

可以加強的地方:

  • 中文 Java applet 資源吃太兇

  • 開檔案時,netscape47-* 會直接跳到根目錄,linux-netscape47-* 很正?但會漏檔案(這應該是 linuxulator 的問題),不過 ja-netscape 沒有這種問題,看來是 Netscape.ad/netscape.cfg/preference.js 的設定。

  • 列印用的字型最好改成比較漂亮的 arphic ,而不是現在的 moe

netscapelinux-netscape 不同的地方:

  • linux-netscape 有比較多的 plugin,像 acrobat realplayernetscape 要加額外的軟體,像 pluggerxswallow (也許以後可以加進這些設定檔)

  • 目前 port 下裝的 XFree86 a.out library 由於是針對 FreeBSD 2.x 的版本,所以處理 Big5 還是有問題(沒有 GLGR patch),必 須要作個新的 libX11,安裝上會比較花時間。

WWW: http://www.netscape.org/


13.9. IglooFTP

這個軟體最主要的特點就是容易使用,並且對初學 FTP 者有著直覺化的操作設計。而老手們也可以發現他功能強大、 可以調整許多設定選項,以符合經驗老練的使用者們的需求。

很多的選擇項都可點選相關的圖示來完成,有快速的工具列、 快速連線列、和本地端的圖形化目錄瀏覽視窗,漂亮的檔案相關圖示, 並且還有 Netscape 的小工具列。

連線的資料庫管理上,使用了樹狀階層式的站台方法,每一個 ftp site 以及 group 的資料都能很容易地被調整。另外還有不同使用者 (user profile)的管理、遠端控制一台 FTP server 到 FTP client 傳輸資料(FXP transfers)、URL 剪貼簿中的監控、防火牆的支援( 包括了SOCKS 5、ftp-gw、WinGate proxy等等)、遠端目錄的快取功能 、佇列(queue)管理、還有許多進階的使用者命令等等。

安裝 ftp/IglooFTP

安裝完如果發現選項中文有問題,檢察一下是否有設定 ~/.gtkrc,如果沒有請參考 GNOME 程式的中文支援

Figure 13-4. IglooFTP snapshot

WWW: http://www.littleigloo.org/iglooftp.php3


13.10. gftp - gtk ftp

安裝 ftp/gftp, 可以用 WITH_GTK2=yes 來裝 GTK2 的版本。


13.11. NcFTP3

當在用許多文字介面的FTP程式時,常為了要抓一個檔或是一個目錄 ,往往就要輸入一些又臭又長的名稱,但如果使用了 NcFTP, 您只要輸入檔名或目錄名的前幾個字元,它就會自動幫您搜尋檔案或 目錄的名稱,使您減少了許多打字的時間。

不只如此,當您覺得一個 FTP 站不錯,您也可以用 NcFTP 把這個站記錄下來,不僅它可以記錄帳號和密碼, 它連路徑也一併記下了,當您下一次想連回原站時, 只要再從選單中選一下,就可輕鬆的連回去。

除此之外,NcFTP 也擁有不少小功能,它可以線上看文字檔, 線上去改變檔案的存取權限或名稱。而當您用 NcFTP 傳輸大檔案時, 您可以把它丟入背景執行,使您瀏覽檔案的動作不會中斷。 如果您想要用最基本的 FTP 傳輸語言測試遠端伺服器,也可以用 NcFTP。

也是在終端機底下可以輸入中文的 FTP 軟體,不過版本要是 3.0.2 或是之後的版本。

安裝 ftp/ncftp3

在 NcFTP 上使用 ls 可以正常的看到中文, 可是 lls 卻不能,而且有特殊字元時也會不正常, 於是有以下的解法,在啟動時加上 env LC_CTYPE=en_US.ISO8859-1,在傳特殊檔案時加上雙引號。

env LC_CTYPE=en_US.ISO8859-1 ncftp3 -u statue localhost
ncftp /usr/home/statue > mkdir "成功"
ncftp /usr/home/statue > ls
成功/
ncftp /usr/home/statue > lls
成功/

Figure 13-5. ncftp3 snapshot

WWW: http://www.NcFTP.com


13.12. bbsnet - BBS 跨海大橋

bbsnet 是 BBS 以前常提供的一項服務, 後來因為管理上的問題,現在比較少見了。 它提供了類似書籤的功能,能快速的讓您連結到常用的 BBS 站台。

安裝 net/bbsnet

Figure 13-6. bbsnet snapshot

WWW: http://linux.ee.tku.edu.tw/~kids/


13.13. qterm - 好用的 BBS 連線軟體

qterm 是目前在 Unix 中, 還算不錯的 BBS 連線軟體,由 qt 函式庫寫成的, 除了安裝需要 qt 外,其餘在使用上都還算不錯, 而且支援 auto-reply,anti-idle,另外還有 Mouse Support, 可以不需要按鍵盤就可以在 BBS 中看文章,選擇討論區, 整體上而言,這是一套很適合 BBS 使用的連線軟體了。

目前這套軟體已經在 ports 中了,可以很方便的安裝。

在 qterm-1.x 字型選擇上,筆者偏好使用 sony-fixed,也就是在選項的 Fixed[sony],其他的 TrueType 都因為字距不固定, 容易造成畫面有些字會破碎。

不過 qterm-2.x 已經可以使用文鼎字體了, 英文介面可以在 View -> Language -> Traditional Chinese 中切換成繁體中文,不過要關閉後重新開啟。

而中文的輸入和顯示也需要設定,預設是 GBK, 經由 Option -> Preference -> Input Method 選擇 Big5 ,以及 在每個連線的 Advanced -> Display -> BBS Encoding 選擇 BIG5,Display Code 選擇 BIG5 即可。

Figure 13-7. qterm snapshot

WWW: http://sourceforge.net/projects/qterm/


13.14. telnet - Telnet 的中文問題

如果您在自己的機器上可以輸入中文,但 telnet 到別的機器後卻無 法輸入中文,那麼問題可能出在 telnet 程式上。 當您還在 telnet 連線中時可以按 Ctrl-] 跳出,在 telnet> 提示符號下輸入 set binary 即可。 或是在 ~/.telnetrc 加上 DEFAULT set binary。 您也可以在連線時用 telnet -8 host -port。 但是在連某些 SunOS 時會出問題。

另一個辦法是直接改用可傳輸 8-bit 的 telnet 程式,也就是安裝在 ports 中的 chinese/telnet, 然後用 zh-telnet 來連線。

在安裝 chinese/telnet 前, 必須先有 /usr/src/usr.bin/telnet, 否則會出現以下的訊息:

===>  zh-telnet-1.0 is marked as broken: You need to build this port with
/usr/src/usr.bin/telnet.

以下是從光碟機安裝 /usr/src/usr.bin/telnet:

# mount /cdrom
# cd /cdrom/src/
# ./install.sh ubin

然後再到 ports 底下安裝 chinese/telnet

WWW: http://www.freebsd.org/cgi/query-pr.cgi?pr=6144


13.15. licq - ICQ clone

它是一個用 C++ 語言撰寫的非官方 ICQ clone。

裝完 ports/net/licq 後, 選擇 ports/net/licq-console 或是 ports/net/licq-qt-gui 來安裝。

licq-qt-gui 中文設定: System -> Options -> Font -> Select Font -> Chinese Font

Figure 13-8. licq snapshot

WWW: http://www.licq.org/


13.16. gaim - ICQ, MSN Clone

gaim 支援十分多種格式的線上溝通軟體。

由於目前 ports/net/gaim 還不支援 I18N,所以請用 ports/korean/gaim 暫時替代。

安裝 net/gaim

Blishs 來信告知, 目前 net/gaim 已經支援 I18N。 在筆者測試後發現可以,不過要設定一些東西: 工具 -> 偏好設定 -> 交談 -> 忽略字型。

如果選單中文有問題,請參考 GNOME 程式的中文支援

要使用 ICQ 就直接在帳號與密碼的地方設定好 ICQ 的帳號, 通訊協定則是選擇:AIM / ICQ, 其他使用預設值即可。

要使用 MSN 則在登入畫面先選擇 插件(Plugin), 選擇 讀取,並將 libmsn.so 選擇進來,這麼在通訊協定就會多一個 MSN 的選項。 接著在帳號與密碼的地方設定好 MSN 的帳號, 通訊協定則是選擇:MSN,其他使用預設值即可。

進入後,中文字體在接收訊息的部份會有問題, 工具 -> 偏好設定 -> 交談 -> 忽略字型,這樣子做就可以解決了。

如果遇到顯示字型過小的問題,檢察一下 ~/.gtkrc ,通常筆者的字型都是設 16。

gaim 0.58 的預設圖示有點大,可以 偏好設定 -> 介面 -> 好友清單顯 -> 顯示好友圖示

若是習慣使用 KDE 介面的話,可以使用 net/kmerlin 或是 net/kmess

Figure 13-9. gaim snapshot

Figure 13-10. kmerlin snapshot

WWW: http://www.marko.net/gaim/


13.17. oicq - Tencent QQ CLI client

最新版本:Version 0.7, Date June 29, 2003

oicq 是一套在中國十分流行的即時傳訊服務, 就像是 ICQ、MSN 一樣,不過在中國的用戶群遠高過其他即時傳訊, 但是騰訊 的政策讓第三方廠商完全無法介入,雖然有 gaim 的 libqq 模組, 但是在壓力下不能開放原始碼,因此也沒有辦法順利的在 FreeBSD 底下使用。 perl-oicq 找出了認證與基本的溝通方式, 利用 perl 可以簡單的在文字介面上使用 QQ,功能是沒有圖形介面的強, 不過基本的使用應該足夠。

Note: 由於 oicq 需要 perl 5.6 以上的版本, 因此需要先安裝 lang/perl5, 並且下 use.perl port 來啟用。

oicq 的安裝:

# cd /usr/ports/outta-port/oicq
# make install clean

基本的使用:

# setenv OICQ_PW your_password_of_oicq
# oicq your_id_of_oicq
# /help

WWW: Perl OICQ


13.18. bluefish - 網頁編寫

以標籤來編寫網頁,雖然不似微軟的 Front Page 所見即所得般方便,且在編寫網頁之前,需對所有的標籤有所認識, 卻可以完全的掌控整的網頁,讓您的網頁能擁有最精簡的內容, 一點都沒有多餘的程式。

隨著時代的進步,除了 Html 之外,還有 PHP、XML、SSI、WML 等等的出現。在 BlueFish 中,也完整的呈現出來,配合著標籤、 精靈等等的引導,讓您達到您想要的網頁。尤其是對於 PHP3、SSI、XML 更提供了相關的函式可供索引,讓您在編寫過程中, 能更容易的使用。連最近相當熱門的 WAP 手機用的 WML 網頁格式,在 BlueFish 中也有提供對應的功能。

這個網頁編寫軟體,是建構在 GTK 上的,所以在安裝本軟體之前, 需有 GTK+1.2 以上的版本。

安裝 www/bluefish

設定檔的部分也要修改一下,改 $HOME/.bluefish/rcfile 中的 editor_font 和 fontset。

editor_font: 8x16,-*-16-*-big5-0
fontset: 1

Figure 13-11. bluefish snapshot

WWW: http://bluefish.openoffice.nl/


13.19. tin - 新聞討論群閱讀器

新聞群組(Newsgroups)是架設在 News server 上的一個討論園地, 它分為很多版,每個人可以閱讀版上別人所刊登的討論信件, 也可以自己刊登自己的討論信件,或回覆別人的討論信件。

安裝 chinese/tin

tin 是一個已將所有訊息中文化的 新聞討論群閱讀器(news reader)。 執行 tin 前必須先設定環境變數 $NNTPSERVER 指向您想使用的新聞伺服器:

# setenv NNTPSERVER news.tw.freebsd.org

並設定 alias, alias tin 'env LC_CTYPE=en_US.ISO8859-1 tin'

然後執行 tin -r 即可。

在 news.freebsd.tw.org 中有所有 FreeBSD 的 mailing list, 只要用 y 就可以列出所有的 mailing list, 然後用 s 來訂閱。

Figure 13-12. tin snapshot

WWW: http://www.tin.org/


13.20. tintin++ - MUD 工具

TinTin++ 並非中文軟體。 它只是在您玩中文 mud 時非常的有用。

安裝 chinese/tintin++

下面是一些中文 mud 站:

FengYun                  fengyun.com       5555
Xi You Ji                129.105.79.24     6905
Xia ke Xing              207.76.64.2       5555

tt++ 來啟動,進去後可以用 #help 來獲得一些指令,然後用 #help command 可以知道更多的使用方式。 然後用 #end 來離開。

Figure 13-13. tintin++ snapshot

WWW: http://mail.newclear.net/tintin/index.html


13.21. xchat

IRC 可說是找志趣相投的人聊天的最好地方,可是為了讓聊天更有趣, IRC 的指令也十分之多,這時使用一個聊天軟體是比較方便的。

目前台灣 BSD 族群聚會的 IRC 通常都在 irc.seed.net.tw 與 irc.hinet.net 的 #bsdchat CHANNEL 中,由於之前 irc.hinet.net 不穩,目前大家都呆在 irc.seed.net.tw 中。

XChat 就是其中一個不錯的選擇, 它的狀態選單十分之多,是它的的一項特色,像是您個人狀態、 個人狀態用選單、各種狀態視窗,當然最基本的 IRC Channel 的列表視窗也有,而且還可以設定 Channel 人數的下限, 這樣就可以濾掉一些人數太少的Channel、斷線重連注意名單。

另外,XChat 熱鍵也作的十分不錯, F1∼F10 每個鍵都可以定義為熱鍵, 而在視窗右邊也有熱鍵, 而它們也都可以重新定義,而您可以只用視窗的上方工具列, 更改您自身的全部狀態,如果您是Op(管理者), 那麼在工具列上就可以更改聊天的主題了,讓您聊天幾乎都不需要打指令.

安裝 irc/xchat

安裝完 xchat 後,主畫面的地方還不是中文的,只需要改一下設定就可以了。

  1. 設定(S)

  2. Setup

  3. Channel Windows

  4. Use gdk_fontset_load 打勾

  5. Font: 的部份選用 fixed(kc)

  1. 設定(S)

  2. Setup

  3. Dialog Windows

  4. Use gdk_fontset_load 打勾

  5. Font: 的部份選用 fixed(kc)

,並關掉 xchat 重開。或是在 .xchat/xchat.conf 中修改

use_fontset = 1
font_dialog_normal = 8x16,kc15f,-*-16-*-big5-0
font_normal = 8x16,kc15f,-*-16-*-big5-0

Figure 13-14. xchat snapshot

WWW: http://xchat.org/


13.22. irssi

安裝 chinese/irssi

如果是使用 telnet 連線軟體而要有彩色 irrsi ,則必須先設定 setenv TERM xterm-color

使用方法:irssi -c irc.seed.net.tw -n your_nickname ,連上去之後,/join #bsdchat

WWW: http://www.irssi.org/


13.23. bitchx

一套中文字游標移動的 IRC 軟體。

安裝 chinese/bitchx

使用方法: BitchX -n your_nickname irc.seed.net.tw ,會自動連上 irc.seed.net.tw。 然後直接打 /join #bsdchat 就可以。

WWW: http://www.bitchx.com/


13.24. mldonkey - P2P

mldonkey 是一套免費的 e-Donkey 用戶端。 不過在文字介面的搜尋有點簡陋,筆者通常都是利用網頁介面來存取, 也有 GTK 圖形介面。

# cd /usr/ports/net/mldonkey
# make WITHOUT_TK=yes WITHOUT_X11=yes install clean

然後最好自己選個共同的地方放,像是建立一個新使用者 mldonkey, 然後將檔案都由該使用者來執行。

# mkdir -p /home/mldonkey
# cd /home/mldonkey

第一次執行會產生一些設定檔,接著先暫停執行, 修改一些設定檔後,利用遠端網頁來控制。

% mlnet-real &
% sh /usr/local/bin/kill_mldonkey
% vi servers.ini
 known_servers = [
  {     server_network = Donkey
     server_age = 59138548
     server_addr = ("140.123.108.139", 7654)
     server_desc = "TLF Taiwan ED Server"
     server_name = "TLF Taiwan ED Server"
  };]
% vi downloads.ini
 allowed_ips = [
  "127.0.0.1";
  "203.204.8.177";]
% mlnet-real &

然後就可以開啟遠端 http://127.0.0.1:4080/ 來抓檔案囉。

如果要使用中文搜尋,則先在搜尋介面先按右鍵, 編碼 -> 繁體中文, 然後再輸入要搜尋的中文名稱即可。 或是安裝 outta-port/mldonkey, 也可以直接把 outta-port/mldonkey/files 底下的檔案複製到 net/mldonkey/files 底下。 因為 mldonkey 直接在 http header 中設定了 charset=iso-8859-1, 因此最好的做法是希望作者提供其他編碼的選項, 不然只能 patch source 了。


13.25. gaimqq - Tencent QQ GUI client

QQ 是大陸非常流行的一套即時傳訊系統(Instant Messenger, IM), 目前可以安裝的版本有 perl-oicq,跟 puzzlebird 製作的 gaimqq,這個 port 是將原本 puzzlebird 在 0.76cvs 上所撰寫的部份取出, 改以 0.75 為主要版本來做的 port,主要的差別只有 prpl 的部份做了點修改。 gaimqq 這個版本實現了 QQ2003C, build 0925 的協議部份。

安裝 outta-port/gaimqq


Chapter 14. 中文程式設計

以下是一些軟體在中文支援方面,利用程式的判斷。

原則上如果是用 gtk 寫的軟體,裡面有呼叫到 gtk_set_locale() 這個函式的話應該都沒問題。

如果是其他的 X 軟體可能要找一下 source 裡面有沒有 setlocale(LC_CTYPE, NULL); 及 XIM 相關函式呼叫情形。如果有遵照正統做法, xcin2.5 應該都可以跟它搭配良好。

Qt 沒碰過,所以不知道他怎麼運作。不過猜想 XIM 這段應該跟 gtk 大同小異。

用 xforms 寫的軟體應該會有問題。

用 X11R6.4 版以後的 Xt/Xaw 寫的軟體應該是沒問題, 記得在 .Xdefaults 裡頭加入 *international:true*fontSet:-*-iso8859-1,-*-16-*-big5-0 等等。

用 fltk 寫的軟體似乎也沒支援 XIM。


14.1. 在 FreeBSD 下寫程式應該注意的問題

在FreeBSD下寫程式,結果發現一個中文的問題, 例如字串中包含這"許"這個字,因為許字的下半碼是 ascii中的\符號,結果就會造成錯誤,請問這種情形 應該如何解決?又還有沒有其他的碼有這種問題?

在程式中該字前加一個 '\',還有很多有這個問題呢,如下:

5C  +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
A0     ﹏ 兝 α 么 功 吒 吭 沔 坼 歿 俞 枯 苒 娉 珮
B0  豹 崤 淚 許 廄 琵 跚 愧 稞 鈾 暝 蓋 墦 穀 閱 璞
C0  餐 縷 擺 黠 孀 髏 躡 ツ \ 尐 佢 汻 岤 狖 垥 柦
D0  胐 娖 涂 罡 偅 惝 牾 莍 傜 揊 焮 茻 鄃 幋 滜 綅
E0  赨 塿 槙 箤 踊 嫹 潿 蔌 醆 嬞 獦 螏 餤 燡 螰 駹
F0  礒 鎪 瀙 酀 瀵 騱 酅 贕 鱋 鱭

'\' 的 ASCII code 是 \0x5c,從 [\0xa1-\0xf9][\0x5c] 都會有這個問題。

#!/usr/bin/perl
#
# create code table (Big5) [\0xa1-0xf9][\0x40-\0x7e\0xa1-\0xfe]
#

# 繁體中文 (Big5) 文字內碼表的產生
open (OUT, "> big55c.txt"); select OUT;

# 文字內碼表的產生
# 開頭的表示
print "\n5C  ";
print "+0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F\n";
$c = 1; # 1行文字數(16文字)
$head = "";
$line = "";
for ($c1 = 0xA0; $c1 i<= 0xF9; $c1++) { # $c1 是第一個位元 [\0xa1-\0xf9]
    $c2=0x5c;
    # 開頭第一個字
    if ("$head" eq "") {
        $head = sprintf ("%02X ", $c1);
    }

    $line .= " "; # 文字間的空白
    if ($c1 == 0xA0) {
        $line .= "  ";
    } else {
        $line .= pack("CC", $c1, $c2);
    }

    if ($c == 16 || $c1 ==0xf9) { # 16文字表示一行
        print "$head$line\n";
        $head = "";
        $line = "";
        $c = 1;
    } else {
        $c++;
    }
}
close(OUT);

exit;

14.2. JSP / Servlet 怎樣才能處理中文?

鄭原真 Yuan-Chen Cheng Copyright 2000.

本文版權 : GPL or BSD style,請保留作者姓名。

本文假設您已經會使用 JSP 或是 Servlet 撰寫英文的 Web-Page。 如果您還不會,或是根本不知道 JSP 或是 Servlet 是幹什麼的, 那這篇文章不是寫給您看的。

在 Java Servlet Spec v2.0 中,對於多國語言的支援,並不足。 您必須找到 Java Servlet Spec v2.2 的實作才行,筆者試過的 是 Apache Jakarta Tomcat 3.1 軟體(註一)。

本文測試平台是 Debian Woody, Sun jdk1.2.2, Tomcat 3.1, mm.mysql-2.0.2

Java Server 如何處理中文。

前言

首先,如何正確的了解您一個 Big5 中文在 Java 中是正確的 中文 Unicode 呢?

輸出一個 String("今").length() 吧 ! 由於 "今" 在 Big5 是由兩個 byte 組成,但對 java 來說,java 的字元是 unicode,也就是說, 無論是一個英文字或是一個中文字,其 length() 都是 1. 也就是說, (new String("今")).length() ==> 1。才是正確的。

Servlet 輸出中文的一個例子。

下面是一個典型的 Java Servlet。

HelloWorldExample.java =>
----------- cut here -----------------
import java.io.*;
import java.text.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class HelloWorldExample extends HttpServlet {

    public void doGet(HttpServletRequest request,
                      HttpServletResponse response)
        throws IOException, ServletException
    {
        response.setLocale(new Locale(new String("zh"), new String("TW")));
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();

        out.println("<html>");
        out.println("<head>");

        String title = new String("hello 大家好");

        out.println("<title>" + title + "</title>");
        out.println("</head>");
        out.println("<body bgcolor=\"white\">");
        out.println("<body>");

        out.println("<p>");

        out.println("<h1>" + title + "</h1>");
        out.println("</body>");
        out.println("</html>");
    }
}
----------- cut here -----------------

可以正常輸出中文的關鍵是:

        response.setLocale(new Locale(new String("zh"), new String("TW")));

注意這一行應該要放在

        PrintWriter out = response.getWriter();

之前執行。另外編譯時注意

        javac -encoding Big5 HelloWorldExample.java

或是 (linux 上的 jdk1.2.2)

        export LANG=zh_TW.Big5
        export LC_CTYPE=zh_TW.Big5
        javac HelloWorldExample.java

注意,這個例子在 jserv v1.1.2 並不能 work,因為該版本實做的 JavaSoft Java Servlet APIs 2.0, 而 setLocale 是到 Servlet APIs 2.2 才有。

Java Server Page 如何處理中文

在此簡略說明,先看下面的例子:

test.jsp
----------------------
<%@ page contentType="text/html; charset=big5" %>
<html>
<body bgcolor="white">
    中文TEST.<p>
    <%= (new String("今天")).length() %>
    out.println("大家好");
</body>
</html>
----------------------

關鍵在第一行。有了這一行就行了。

而如果使用 POST 時,要使用中文就先看下面的例子

test2.jsp
----------------------
<html>
<head>
    <title>Instropection</title>
</head>
<meta http-equiv="Content-Type" content="text/html; charset=big5">
<body>
<body bgcolor="#FFFFFF" text="#000000">
<form name="form1" action="test3.jsp" method="post"  >
  <p> 姓名:
    <input type="text" name="name">
  </p>
  <p>編號:
    <input type="text" name="number">
  </p>
  <p>
    <input type="submit" value="傳送">
    <input type="reset" value="清除">
  </p>
</form>
</body>
</html>
----------------------

test3.jsp
----------------------
<%@ page language="java" contentType="text/html;charset=Big5" %>
<html>
<head>
    <title>Instropection</title>
</head>
<body>
<%
    String name = new String(request.getParameter("name").getBytes("ISO-8859-1"), "Big5");
    String number = request.getParameter("number");
%>
姓名:<%= name %>
<br>編號:<%= number %>
</body>
</html>
----------------------

關鍵在於 String(str.getBytes("ISO-8859-1"), "Big5"), java.lang.String 的建構函式可以產生指定特定語系的 String, 透過這個範例,可以使 String 正確地轉換中文。

For Hacker:

理論上這一行可以放在文件的任何地方,但由於 Java 時做上 開檔案後通常就必須指定 encoding,當 java jsp engine 發現 charset 跟 default 不同時,通常必須重新開檔案。所以實做上 這一行放在越前面越好。不過話是這樣說,由於通常 jsp 會在 run time 被 compile 成 java bytecode,也就是說只有在 .jsp 更新時才需要 recompile。overhead 實在有限。

註一:請到 http://jakarta.apache.org/ 下去 Download。


14.3. Java 連結到 MySql 如何使用中文?

鄭原真 Yuan-Chen Cheng Copyright 2000.

本文版權 : GPL or BSD style,請保留作者姓名。

本文假設您已經會使用 JSP 或是 Servlet 撰寫英文的 Web-Page。 如果您還不會,或是根本不知道 JSP 或是 Servlet 是幹什麼的, 那這篇文章不是寫給您看的。

在 Java Servlet Spec v2.0 中,對於多國語言的支援,並不足。 您必須找到 Java Servlet Spec v2.2 的實作才行,筆者試過的 是 Apache Jakarta Tomcat 3.1 軟體(註一)。

本文測試平台是 Debian Woody, Sun jdk1.2.2, Tomcat 3.1, mm.mysql-2.0.2

Java 以 jdbc 連結到 databases server,MySql 有 Free 的 jdbc driver。以下不擬說明如何使用 jdbc,僅說明如何修改 您的 code 使可以用中文。

mysql 儲存中文資料有兩種方法,第一種是使用 big5 內碼儲存, 其優點是節省硬碟/記憶體空間,相較於使用 UTF8 之下,若輸出 為 Big5,更省去一次的 Unicode (UTF8) 與 Big5 需要經過 Table lookup 的轉換。但使用 Big5 就會有 Big5 先天上的問題。 典型的問題是 Big5 字串在處理字的邊界的問題。Big5 先天上的 問題是這樣的,就以 "問題" 這個字串為例,問字的第二個 byte 跟題字的第一個 byte 所形成的字是 "暋" 字。所以當我們在作 文字搜尋找包含 "暋" 的字串,我們會連包含 "問題" 的字串也 一起找到。但 UTF8 內碼在設計上就避開了這個問題, 犧牲的是 必須用較多的 byte (octets) 表示。

我只有試過 MySql 內的 Data 用 UTF8,Big5 沒試過。要注意的 是,在 UTF8 中,中文的長度是 3 個 bytes,由於 MySQL 固定 字串欄位送進過長的資料時,會發生過長處被截斷。但 MySql 不懂 UTF8,所以可能發生一個 UTF8 字元第二 or 三個 byte 被截掉 問題,在 ASCII 中問題不大,頂多出現一個 "I Love Yo","u" 不 見了。但在 java 把資料讀進來,把 UTF8 轉成 java 內部的表示 法時,就會發生有些 Byte 無法轉成功的問題,應該會造成 Exception。(註二)

好,回來,在 jdbc 中,並沒有規範在 Database 中的字元的內碼, 而把這個問題留給各個 jdbc driver 處理。mysql jdbc driver 要在 database 中設為 utf8 的設定方式如下:

        Properties pr;
        Connection db;

        pr = new Properties();
        pr.put("characterEncoding", "UTF8");
        pr.put("useUnicode", "TRUE");
        Class.forName("org.gjt.mm.mysql.Driver").newInstance();
        db = DriverManager.getConnection("jdbc:mysql:///test", pr);

其餘請自行參考一般 jdbc 程式寫作的資料。當然, compile 此 Servlet 時需要在呼叫 javac 時加上 "-encoding Big5"。

若要使用 Big5 的話, 上面 "UTF8" 改成 "Big5" 即可。但這樣作會 出現另一個問題, 就是中文第二個 byte 有 '\' 的問題。這個問題我 不知道有沒有方便的解法,不知道 compile mysql 時將 encoding 設 為 big5 可否解決這個問題。(註二)

註二:這個我沒有測試過,誰要測了跟大家說結果的?


14.4. linux-gtk - gtk-1.2.6 的函式庫 rpm,有 Big5/GB 的支援

以下是比 x11-toolkits/linux-gtk 更好的 I18N 的優點。

  Better word wrapping for CJK strings
  Specify default font's encoding explicitly
  Better XLFD handling
  Selection resync fixes
  Numerous gtkrc.$locale samples
  Other minor fixes

安裝 chinese/linux-gtk

唯一的缺點是這個套件是 CLE 用來給 i386 平台所使用的, 所以如果是 alpha 的使用者的話仍需使用 x11-toolkits/linux-gtk。


14.5. php 的 ImageTTFText() 經常抓錯字?

Contributed by jerry

Last Update: 2003年 4月29日 周二 19時43分15秒 CST

在安裝 www/mod_php4 時必須選擇 GD library support 及 freetype 的套件才能進行下面的步驟。

目前常見的有三種做法,一種是 patch gdttf.c, 一種是使用 iconv support 來將編碼轉成 UCS-2 , 還有一種就是直接使用 chinese/hc 的資料庫。

這邊是第一種做法,patch gdttf.c 讓 PHP 不會抓錯字。

--- gdttf.c.orig   Mon Oct 16 21:55:47 2000
+++ gdttf.c Sun Dec 31 18:00:34 2000
@@ -654,7 +654,7 @@
    TT_BBox **bbox, 
    char **next)
 {
-    int pc, ch, len;
+    int pc, ch, len, ch2;
    int row, col;
    int x2, y2;     /* char start pos in pixels */ 
    int x3, y3;     /* current pixel pos */
@@ -687,6 +687,8 @@
        (*next)++;
        if (ch >= 161                /* first code of JIS-8 pair */
            && **next) {                /* don't advance past '\0' */
+           ch2 = (**next) & 255;
+           if(ch2 >= 161) ch++; /* Big5 ttf patch */
            ch = (ch * 256) + **next;
            (*next)++;
        }

由於已經處理過 gdttf.c,在這邊就可以直接使用中文編碼的字。

<?php
    Header ("Content-type: image/gif");
    $im = imagecreate (400, 30);
    $black = ImageColorAllocate ($im, 0, 0, 0);
    $white = ImageColorAllocate ($im, 255, 255, 255);
    ImageTTFText ($im, 20, 0, 10, 20, $white,
      "/usr/X11R6/lib/X11/fonts/TrueType/moe_kai.ttf", "這是中文測試 許功蓋 "); 
    ImagePng ($im); 
    ImageDestroy ($im);
?>

第二種是使用 unicode 讓中文正常的顯示, 以下就是 big5 轉 unicode 的做法, 在這邊提供一個小函式來自動判斷為英文還是中文, 英文的部分不需要轉碼,只有中文才需要。

<?php
  /*  need iconv module */
  function big52uni($text) {
    $rtext="";
    $max=strlen($text);
    for($i=0;$i<$max;$i++){
      $h=ord($text[$i]);
      if($h>=160 && $i<$max-1){
        $rtext.="&#".base_convert(bin2hex(iconv("big5","ucs-2",
          substr($text,$i,2))),16,10).";";
        $i++;
      }else{
        $rtext.=$text[$i];
      }
    }
    return $rtext;
  }
?>

用法的範例如下,在 ImageTTFText 必須指定系統上的字型, 以下是安裝 chinese/arphicttf 來使用文鼎PL上海宋,所以必須根據自己的安裝的字型作修改, 然後搭配上面的 big52uni 這個函式:

<?php
Header("Content-type: image/gif");
$im = imagecreate(400,30);
$black = ImageColorAllocate($im, 0,0,0);
$white = ImageColorAllocate($im, 255,255,255);
ImageTTFText($im, 20, 0, 10, 20, $white, 
  "/usr/local/share/fonts/TrueType/bsmi00lp.ttf", 
  big52uni("Test中文測試"));
ImageGif($im);
ImageDestroy($im);
?>

Figure 14-1. php-imagettftext snapshot

WWW: http://www.php.net/


14.6. php 上傳中文檔名的檔案

by Wiseguy.bbs@bbs.nsysu.edu.tw

另開一個 <input type="hidden" name="filename"> 在 submit 前,把 file 裡的檔名取出來 (用 split('\\'),陣列最後一個。) 放到 filename 去,這樣就可知道原檔名是什麼,而不用 file 裡面處理的檔名。 這種作法可以使中文檔名、含空白、管道字元 | 、反斜線,通通可上傳。

<?php
if($_FILES['userfile']['name']) {
  echo $_POST['fname'];
} else {
?>
<script language="JavaScript">
function validate() {
  var Ary = document.uploadf.userfile.value.split('\\');
  document.uploadf.fname.value=Ary[Ary.length-1];
  return true;
}
</script>
<form enctype="multipart/form-data" action="index.php" method="post"
 name="uploadf" onsubmit="return validate()">
  Send this file: <input name="userfile" type="file">
  <input type="hidden" name="fname">
  <input type="submit" value="Send File">
</form>
<?php } ?>

WWW: http://www.php.net/manual/en/features.file-upload.php


14.7. 用 php 製作中文 PDF 檔

Contributed by Tim (tim@dnes.mlc.edu.tw)

Last Update: 2003年 4月20日 周日 15時59分41秒 CST

php 目前可以使用 PDFlib 來建立不內嵌字型的 PDF 檔, 在 pdf_findfont 的部分要給對字型就可以了。

$font = pdf_findfont($pdf, 'MSung-Light', 'ETen-B5-H', 0);

以下是完整範例,記得要先在該目錄底下建立 hello.pdf 並且將權限改成 666。

<?php
  echo '<meta http-equiv="Content-Type" content="text/html; charset=big5">';
  //create file
  $fp = fopen('hello.pdf', 'w');
  if(!$fp)
  {
    echo "Error: could not create the PDF file";
    exit;
  }

  // start the pdf document
  $pdf = pdf_open($fp);
  pdf_set_info($pdf, "Creator", "pdftest.php");
  pdf_set_info($pdf, "Author", "Shen Chun-Hsing");
  pdf_set_info($pdf, "Title", "Hello World (PHP)");

  // US letter is 11" x 8.5" and there are approximately 72 points per inch
  pdf_begin_page($pdf, 8.5*72, 11*72/2);
  pdf_add_outline($pdf, 'Page 1');

  // 取得字型
  $Efont = pdf_findfont($pdf, 'Times-Roman', 'host', 0);
  $Cfont = pdf_findfont($pdf, 'MSung-Light', 'ETen-B5-H', 0);

  // write text
  pdf_setfont($pdf, $Efont, 24);
  pdf_set_text_pos($pdf, 50, 700/2);
  pdf_show($pdf,'Hello world!');
  pdf_continue_text($pdf,'(says PHP)');
  pdf_setfont($pdf, $Cfont, 24);
  pdf_continue_text($pdf,'細明體中文字測試');

  // end the document
  pdf_end_page($pdf);
  pdf_close($pdf);
  fclose($fp);

  // display a link to download
  echo "<a href = 'hello.pdf' target='_blank'>測試檔PDF</a>";
  echo "<hr>";
  show_source( basename( getenv("SCRIPT_FILENAME") ) );
?>

在 pdf_findfont 的部分選擇 ('MSung-Light', 'ETen-B5-H') 這樣子的 CID-Keyed font 就可以使用明體了, 第一個欄位還可以換成 MHei-Medium 來使用楷體, 不過在目前的支援度下,所能看到的不管設定明體或是楷體, 都只會有明體而以, 這必須是 PDF 瀏覽器支援設定的字體有其相對應的字體才行, 而第二個欄位 CMap 基本上建議使用 ETen-B5-H 才能使用倚天外字。

可以用的英文字型如下: Courier Courier-Bold Courier-Oblique Courier-BoldOblique Helvetica Helvetica-Bold Helvetica-Oblique Helvetica-BoldOblique Symbol Times-Roman Times-Bold Times-Italic Times-BoldItalic ZapfDingbats。

可以用的中文 CMap 如下: B5pc-H B5pc-V HKscs-B5-H HKscs-B5-V ETen-B5-H ETen-B5-V ETenms-B5-H ETenms-B5-V CNS-EUC-H CNS-EUC-V UniCNS-UCS2-H UniCNS-UCS2-V。

Figure 14-2. php-pdf snapshot

而 pdf_add_bookmark 有人說有中文的問題,可是在筆者的測試之下, Big5 編碼的 bookmark 在 Acroread 5 可以正常看到,或是利用 iconv 轉成 UTF-16 也是正常的,所以如果您看到的 bookmark 有中文問題, 可以利用 iconv("Big5", "UTF-16", "中文字") 來試試看。

WWW: http://www.PDFlib.com/


14.8. Tcl/Tk - 廣為運用的一種高階電腦語言與 GUI 發展工具

tcl 是一個高階的電腦語言,語法類似 shell script 與 C 語言之間。而 tk 是一個使用者界面發展工具,有 buttons、menus、listboxes、 scrollbars 等等。

把這兩者結合起來,就形成了強有力的 GUI 發展套件。最新版本的 tcl/tk 支援了多平台的開發程式庫。所以我們可以寫一個 tcl/tk 的程式(也稱為script),然後在 UNIX 下看起來就像是 Motif 的應用程式;在 Windows9x/NT 下看起來像是 Win32 的應用程式;而在 Macintosh 下看起來像 Mac 的應用程式。

tcl/tk 的優點第一是 free(自由)。 第二是容易學習,您不須具備 object-oriented 或 threads 或 Microsoft Fundation Classes 的基礎,也不須寫一大串的程式碼。 像是傳統的 Hello, World! 程式,在 tcl/tk 只要兩行就搞定,

button .b -text "Hello, World!" -command exit
pack .b

第三是有許多的 extensions(延伸套件)可以支援其他軟體程式庫, 例如 Oracle, Sybase, Informix, OpenGL 等多達 400 種。

安裝 chinese/tcl83chinese/tk83

chinese/tcl83 和 chinese/tk83 主要是補上一個 --enable-i18nImprove 的選項, 修正 XIM 處理有問題的部份。

中文顯示都正常,中文輸入也是正常的。

#!/usr/local/bin/wish8.3
tk useinputmethods 1
font create bsmilpfont -family "ar pl mingti2l big5" -size 16
label .a -text "標籤" -font bsmilpfont
pack .a
button .b -text "按鈕" -command { puts stdout $cc; exit } -font bsmilpfont
pack .b
entry .c -textvariable cc -font bsmilpfont
pack .c

Note: after tcl 8.1, it add i18n support, you may change unix/tclUnixInit.c.

{"zh_CN", "euc-cn"}, 
{"zh_CN.gbk", "euc-cn"}, 
{"zh_CN.gb2312", "euc-cn"},

Figure 14-3. tcltk snapshot

WWW: http://www.scriptics.com/software/tcltk/8.3.html


14.9. PostgreSQL 不能處理中文?

PostgreSQL 中使用中文一向有小問題, 如 '許'、'社' 等等後面是 \ 的中文字都會出搥,直到 6.5 版以後,才加入了 multibyte 的支援。

PostgreSQL 的語言支援分 前/後端(frontend/backend),無論前端使用何種語言, 後端都會使用設定好的語言存入資料庫中。

這有什麼好處?例如:後端設定成繁體中文,前端設定成簡體中文, 然後,存入的繁體中文,顯示的是簡體中文,當然, 它不會做中、英翻譯。

要正確使用中文,比較保險的作法是後端使用 euc_tw 編碼,前端使用 big5 編碼,例如:

% createdb --encoding euc_tw test  ' 建>
立後端為 euc_tw 編碼的 db
% psql test  ' 使用 psql 管理工具,就像
mysql 般。
test=#  ' 已經進入 psql
test=# \encoding big5  ' 設定前端為 big5 編碼
test=# create table test (
test=# usrname char(20));  ' 建立 table
test=# insert into test values('許國榮');  ' 測試
test=# select * from test;  '您會看到正>
確的答案
test=# \q

也可以在 PostgreSQL 中下 PGCLIENTENCODING=BIG5 的指令,如果是使用 PHP + PostgreSQL 則使用以下方式:

 $conn = pg_connect("user=postgres dbname=stip");
 pg_exec($conn, "set client_encoding to 'BIG5'");

WWW: http://www.postgresql.org/


14.10. PostgreSQL + JDBC + Servlet + XMLC 中文完全解決方案

作者:smallufo,Email:smallufo@bigfoot.com

自古以來 Servlet 連結 Database 在中文方面總是有許多問題,尤其是在 web 端,要考慮的因素更多了。有時候,form的文字遇到「許,功」等字, 要使用者自行輸入“\”這個跳說字元;有時候明明把「許,功」insert 進資料庫,但是取出來又會變成〈?〉;而中文的許多次常用字, 例如宏眭滿u痋v,等怪怪的字元,更是讓 programmer 頭髮白了一半。而 encoding 又是個最重要的關鍵,常見的 encoding 有以下幾點:

code  +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
F9D0                              
F9E0                 
F9F0            ╭ ╮ ╰ ╯  
  • 作業系統 Locale 的 encoding

  • 資料庫端的 encoding

  • javac-encoding xxx

  • ServletRequest.setContentType("texe/html; charset=xxx)

  • web application deployment(web.xml) 所指定的 character-encoding="xxx"

  • new String(String.getByte("xxx),"yyy)

  • 如果使用 xmlc,還有 xmlc 的 encoding 以及 org.enhydra.xml.io.OutputOptions.setXmlEncoding("xxx")

這幾種 encoding 萬馬奔騰,常使 programmer 轉的暈頭轉向, 不知目前身在何處,不知多少 programmer 在此浪費青春。

中文解決方案以前在網路上有許多做法,但是通常都不太完整, 要不然就得大刀闊斧更動到 JDBC driver,或是重新 compile 整個資料庫系統。而為了系統的「完整性」,我並不考慮這些做法。 我的作法可以完整保留 postgreSQL 的完整性〈以 RPM 安裝,不用重新 compile〉,而且 JDBC driver 不用重新 compile。 以下的步驟後半部主要是針對 XMLC 而言,不過一般「純」的 servlet 程式,應該很容易粹取出來。

以下是我的一些環境:

RedHat Linux 7.0 (CLE 1.0),其他的中文環境也應該沒問題。 如果您是英文版的,請安裝 Chinese locale patch 即可。 重點是,當您輸入 'set' 時,可以看到 'LANG=zh_TW' 這個環境變數。

Servlet Engine:Resin 2.0.2

posrgreSQL-7.1.3-1PGDG.i386.rpm,檔案大小 1164817 bytes,直接以 rpm -Uvh 安裝即可,不用重新 compile。JDBC driver 也是直接使用 postgresql-jdbc-7.1.3-1PGDG.i386.rpm 所安裝的 jdbc7.1-1.2.jar 即可。

資料庫請以 Unicode 編碼〈createdb -E Unicode〉,這點最為重要。

Web application Deployment(web.xml) 中的 <web-app> 不要加上 character-encoding="xxx" 這個 attribute

在 servlet 中,請設定 res.setcontentType("text/html; charset=CP950");

form 的參數,直接以 getParameter("xxx") 讀取, 再 insert 進資料庫,不用作任何轉碼。

要從資料庫中讀取資料,得利用: new String(rs.getString("ColName").getBytes("8859_1"),"CP950")

要輸出整份文件〈implement org.enhydra.xml.xmlc.html.HTMLObject 的文件〉時, 不要用 out.println(doc.toDocument()),請改用如下的方法:

org.enhydra.xml.io.OutputOptions options = new OutputOptions();
options.setOmitEncoding(false);
options.setXmlEncoding("Big5");
DOMFormatter formatter = new DOMFormatter(options);
if(iChingVotingsPage.getDelefate() != null) {
  out.println(formatter.toString(iChingVotingsPage.getDelegate()));
) else {
  out.println(formatter.toString(iChingVoringPage));
}

Servlet 檔案要以 javac -encoding CP950 來編譯。

大功告成,如此解決方案,則可以完全正常處理所有罕見以及特殊字元, 不論是插入資料庫,從資料庫取出來在網頁上,都沒有問題。


14.11. Java 中文程式設計

FreeBSD 下的 java distribution 分為 Native JDK For FreeBSD、 Sun JDK For Linux、IBM JDK For Linux、Blackdown JDK For Linux, 都可以在 /usr/ports/java 目錄下找到, For Linux 的部分只要裝上 Linux 模擬器就可以執行, 而 Native JDK 就必須自己從 source 編譯。 而且安裝上都必須依照步驟先去網站上下載所需的檔案, 放置到 /usr/ports/distfiles

以最困難的 java/jdk13 安裝為例, 您必須到 Sun Community Source Licensing 下載 j2sdk-src-scsl.zip 和 j2sdk-bin.scsl.zip 這兩個檔案,並到 Java 2 on FreeBSD 下載 bsd-jdk14-patches.tar.gz。 又因為編譯的時候需要 java/linux-sun-jdk14, 所以還需要先安裝好才行。 並且根據編譯的需求,我們還需要一個 linprocfs, 您可以用 mount -t linprocfs linprocfs /compat/linux/proc 來將 linprocfs 掛上。並在系統上預留 2.5GB 的硬碟空間來進行編譯, 當以上都準備就緒,就可以開始編譯然後等明天再來驗收囉。

想知道您的 JDK 或 JRE 會用什麼樣的編碼方式來和作業系統溝通, 請執行下面的 Java 程式:

public class ShowNativeEncoding {
  public static void main(String[] args) {
    String enc = System.getProperty("file.encoding");
    System.out.println("NativeEncoding:" + enc);
    System.out.println("成功");
  }
}
% javac ShowNativeEncoding.java
% java ShowNativeEncoding
NativeEncoding:Big5
成功

如果出現以上的訊息,就表示中文正常,如果沒有的話, 請確定您的 LC_CTYPE 是 zh_TW.Big5,或是用 javac -encoding CP950 ShowNativeEncoding.java 來進行編譯,應該會出現如上的顯示才對。

Note: Big5:這是繁體中文 de facto 標準。

MS950 或 Cp950:ASCII + Big5,用於台灣和香港的繁體中文 MS Windows作業系統。

筆者的環境設定 ~/.cshrc

# For JAVA jdk1.3.1
setenv JAVA_HOME /usr/local/jdk1.3.1
setenv CLASSPATH /usr/local/jdk1.3.1/lib/tools.jar:/usr/local/share/java/classes/:./
setenv PATH /usr/local/jdk1.3.1/bin:$PATH

如果要執行 applet 或是 swing的話, 請按照以下步驟設定才能正確的看到中文字, font.properties.zh_TW 為 Forth 提供, 該設定檔專給 arphicttf 使用:

# cd /usr/local/jdk1.3.1/jre/lib/
# fetch http://freebsd.sinica.edu.tw/~statue/conf/font.properties.zh_TW

經筆者測試在 mozilla-1.0 + jdk1.3.1p6_4 之後已經不需要設定就可以正確的看到中文, 如果沒辦法就手動作如下步驟:

# cd /usr/X11R6/lib/mozilla/plugins/
# ln -s /usr/local/jdk1.3.1/jre/plugin/i386/ns600/libjavaplugin_oji.so libjavaplugin_oji.so

Figure 14-4. applet snapshot

Figure 14-5. swing snapshot

參考: Java繁體中文處理完全攻略(一)Java 繁體中文處理完全攻略(二)

WWW: http://java.sun.com/


14.12. Perl 中文程式設計

如何排除 Perl 程式處理中文資料的障礙?

在 CGI Perl 程式中,有許多符號字元是有特殊用途的, 而不幸的有某些這樣的字元卻與中文字的第二個位元組互相衝突, 以至於會有中文字顯示或比對不正確,甚至是產生錯誤結果的現象, 尤其是 | 及 \ 這兩個字元,所幸我們還有個 quotemeta 指令可以使用, 這個指令可以將指定的字串中每個字元的前面都再多加上一個 \ 這個字元,使得字串內的特殊字元在處理時被視為單純的字碼, 請參考下列的範例:

假設 $str 是一個要做搜尋比對的中文字串,而 $line 是逐行讀入的資料檔內容:

$restr = quotemeta $str;
if ($line !~ m/$restr/i) { ......
}

另外若不是以變數來處理的字串,通常我們會使用雙引號來標示及處理, 然而這也是會發生上述的障礙,但是當您直接對雙引號括住的字串使用 quotemeta 來處理時卻又會怪怪的,那怎麼辦呢?很間單! 將雙引號改為單引號就可以囉∼因為單引號不會對其內的字元作特殊處理, 換句話講在單引號之內的文字資料將會原原本本的呈現出來, 不會去解譯變數也不會處理 escape 字元 ,例如原來的敘述是:

print "測試成功的$msg訊息!\n";

應改為:

print '測試成功的訊息!';

請特別注意 \n 換行符號及 $msg 變數也需拿掉,因為單引號並不處理 escape 字元及變數,如果不將 \n 符號及 $msg 變數拿掉, 那麼顯示出來的字樣將會是

成功的$msg訊息!\n

,如果您仍希望顯示成原來包含變數及換行的效果, 那就必須將單引號與雙引號資料併用,同時以 . 符號來連結成完整的輸出敘述:

print '成功的'.$msg.'訊息!'."\n";

上述結論就是當印出 成功的 與 訊息! 字樣是使用單引號, 而換行的 \n 則是用雙引號。

以下是一個將檔案中所有的中文字移除的程式範例:

#!/usr/bin/perl -w
# ./bg5rm.pl filename
# and it's will generate a filename.bg5rm
$ifname=$ARGV[0];
open(IF,"$ifname");
open(OF,">${ifname}.bg5rm");
$big5 = "[\xA1-\xF9][\x40-\x7E\xA1-\xFE]";
while(<IF>) {
  s/$big5//g;
  print OF $_;
  print $_;
}
close(IF);
close(OF);

以下是一個將文章中的中英文 word split 進 list:

my $big5 = q{
    [\xA1-\xF9][\x40-\x7E\xA1-\xFE]
};
my $big5plus = q{
    [\x81-\xFE][\x40-\x7E\x80-\xFE]
};
my @chars = /$big5|$ascii+/gox;
my @charsplus = /$big5plus|$ascii+/gox;

MPX 的 解決 Perl 處理中文字的問題

CJKV Information Processing 這本書有些不錯的 perl 程式 範例,其中 *.pdf 是一些討論 perl 下處理 multibyte 的 papers。

Erik Peterson 寫了一些有用的 Perl 程式, 可處理中文轉換。

WWW: http://www.perl.org/


14.13. MySQL Localisation and International Usage

WWW: MySQL Localisation and International Usage

動態能從 my.cnf 調整的部份並沒有 big5.conf:

% ls /usr/local/share/mysql/charsets
Index        danish.conf   greek.conf      koi8_ukr.conf  usa7.conf
README       dec8.conf     hebrew.conf     latin1.conf    win1250.conf
cp1251.conf  dos.conf      hp8.conf        latin2.conf    win1251.conf
cp1257.conf  estonia.conf  hungarian.conf  latin5.conf    win1251ukr.conf
croat.conf   german1.conf  koi8_ru.conf    swe7.conf

靜態要在 compile 階段完成的部份:

% ls mysql-3.23.55/strings/ctype*.c
mysql-3.23.55/strings/ctype-big5.c    mysql-3.23.55/strings/ctype-sjis.c
mysql-3.23.55/strings/ctype-czech.c   mysql-3.23.55/strings/ctype-tis620.c
mysql-3.23.55/strings/ctype-euc_kr.c  mysql-3.23.55/strings/ctype-ujis.c
mysql-3.23.55/strings/ctype-gb2312.c  mysql-3.23.55/strings/ctype.c
mysql-3.23.55/strings/ctype-gbk.c

也就是說 multibyte support 必須要 compile 時就給他下好這個參數, 是否能直接設定 my.cnf 達到 --with-charset=big5 的效果還不確定。

檢驗方式,進入 mysql 後打:

mysql> show variables like 'character_sets';
mysql> show variables like 'character_set';

那 character set 影響那些呢?就我所知的有 ORDER BY 和 GROUP BY 的順序,那特殊中文字 insert 進資料的問題還是在嗎?

Note: 另一常見的問題是,MySQL 無法輸入中文資料庫名稱、中文表格名稱、 中文欄位名稱?其實是可以的,只要用 ` 將中文字包含在內就可以,像是 CREATE DATABASE `哈囉`;

WWW: http://www.mysql.com/


14.14. 在 LDAP 下使用中文

Contributed by duncanlo (duncan@twn.wox.org)

Last Update: 2003年 4月24日 周四 05時13分04秒 CST

如果是要將 .ldif 轉入,必須先將中文轉成 utf-8。

安裝 converter/iconv, 假設要轉碼的檔案是 big5.ldif,轉出來的檔案是 utf-8.ldif。

% iconv -f big5 -t utf-8 big5.ldif > utf-8.ldif

然後就可以用 ldapadd 來將 utf-8.ldif 轉入 ldap 了。

Figure 14-6. ldap snapshot

WWW: Java LDAP Browser/Editor


14.15. 用 perl 寫 CGI 時的中文顯示問題?

Contributed by fjj.bbs@bbs.csie.ncku.edu.tw (Frank Millers)

Last Update: Sun Nov 2 17:45:35 2003

use CGI;
my $q = new CGI;
$q->head(charset=big5);
$q->start_html(lang=big5);

Chapter 15. 中文多媒體軟體


15.1. mplayer

Last Update: 2003年 1月16日 周四 02時53分21秒 CST

支援了眾多電影播放格式,舉凡常見的 mpeg,dat 和微軟的 avi, 就連現在最新的 divx4 也直接支援。

multimedia/mplayer 的安裝:

# cd /usr/ports/multimedia/mplayer
# make WITH_LANG=zh install clean

目前讓 mplayer 能夠顯示中文字幕的方式有三種, 前兩種使用 mplayer 自訂的字型檔,目前已經少用。 一個是安裝由 mplayer 所提供的字型檔, 可以在 ftp://ftp.mplayerhq.hu/MPlayer/contrib/fonts/chinesefonts 找到,另一個就是使用 chinese/mplayer-fonts 來將 TrueType 轉換成 mplayer 所需要的字型檔。

直接使用 mplayer 所提供的字型檔,可以到上述的網址中找您要的語言, 以繁體楷書為例就是 big5-kai.tar.bz2, 下載後解開會出現 big5-kai 的目錄就以用了。 下面的例子使用宋體 16pt 來顯示中文字幕,還有宋體 24pt 可用,或是中楷 bkai00mp16 與 bkai00mp24。簡體字幕可以用 iconv 等軟體轉換 .srt, 將簡體轉換成繁體,或是使用 gbsn00lp16 等字型來觀賞。

# mplayer -font /usr/local/share/mplayer/fonts/big5-ming/bsmi00lp16/font.desc -sub 1.srt -unicode 1.avi

Note: 如果要全螢幕按 f 就可以囉。

最後一個就是在編譯 mplayer 的時候,指定 mplayer 使用 freetype, 讓他能直接使用 TrueType 字型,但是一但指定了使用 freetype, 就不能選擇使用 mplayer 的字型檔。 目前的 multimedia/mplayer 已經預設 WITH_FREETYPE 了,不需要安裝中文字幕字型。

# ln -s /usr/local/share/fonts/TrueType/bsmi00lp.ttf ~/.mplayer/subfont.ttf
# mplayer -subcp cp950 -sub 1.srt 1.avi

Figure 15-1. mplayer snapshot



WWW: http://www.mplayerhq.hu/


15.2. xmms - mp3 播放軟體

mp3 播放軟體,有 Winamp 的好看介面,可以看到中文的選歌單, 介面也是中文的,目前可以演奏 mpeg1、mpeg2、mpeg3、wav、 au 和 CD audio。也可以經由 xmms 的外掛來使用其他的格式, 例如:xmms-mikmod

安裝 chinese/xmms

安裝完如果發現選項中文有問題,檢察一下是否有設定 ~/.gtkrc, 如果沒有請參考 GNOME 程式的中文支援, 如果是 PlayList 中文有問題,檢察一下 ~/.xmms/configplaylist_fontmainwin_font, 通常筆者都是如下的設定:

playlist_font=-adobe-helvetica-bold-r-*-*-10-*,-*-medium-r-*-10-*
use_fontsets=TRUE
mainwin_use_xfont=TRUE
mainwin_font=-adobe-helvetica-medium-r-*-*-8-*,-*-medium-r-*-8-*

Note: 在 KDE 底下執行 XMMS 有時會出現無法開啟音效的錯誤, 進入 XMMS 的偏好設定,將輸出的模組改為 arts 即可, 因為在 KDE 下管理聲音的伺服器是 arts。

SKIN 的部分去 http://www.xmms.org/skins.html 找一下喜歡的 SKIN 吧, 下載下來後,將該檔案拷貝至 ~/.xmms/Skins 就可以了。

Figure 15-2. xmms snapshot

WWW: http://www.xmms.org/


Chapter 16. 字典軟體


16.1. dictd-database - dictd 的字典檔資料庫

一套中文與英文的 dictd 字典檔資料庫,所以必須搭配使用。 而 chinese/dictd 則是修正特殊中文字的問題, 如果想要正常使用漢英字典(Cedict),那麼就必須安裝此修正過的 port。

裡面目前包含四個字典檔,moecomp 和 netterm 都是英漢字典檔, 而 pydict 則是英漢、漢英字典檔,目前只有做英漢的部分, cedict 則也是英漢、漢英字典檔,不過目前只有做漢英的部分。

在安裝完後,必須先修改 /usr/local/etc/dictd.conf ,這個檔案是給 net/dictd-database 使用的,如果不打算用英英字典,那麼就全部換成以下的內容來符合 chinese/dictd-database 的要求。

database moecomp   { data "/usr/local/lib/dict/moecomp.dict.dz"
                     index "/usr/local/lib/dict/moecomp.index" }
database netterm   { data "/usr/local/lib/dict/netterm.dict.dz"
                     index "/usr/local/lib/dict/netterm.index" }
database pydict    { data "/usr/local/lib/dict/pydict.dict.dz"
                     index "/usr/local/lib/dict/pydict.index" }
database cedict    { data "/usr/local/lib/dict/cedict.dict.dz"
                     index "/usr/local/lib/dict/cedict.index" }

然後就可以啟動 /usr/local/etc/rc.d/dictd.sh start

接著在去 /usr/ports/textproc/dict 安裝 dict,這是一個可以用來存取 DICT 伺服器的用戶端,只能用命令列模式。

用法範例如下:

% dict -h localhost -D
Databases available:
  moecomp    Taiwan MOE computer dictionary
  netterm    Network Terminology
  pydict     pydict data
% dict -h localhost -d moecomp hello | less
1 definition found

From Taiwan MOE computer dictionary [moecomp]:

  hello
  呼叫
% dict -h localhost 成功
1 definition found

From Chinese to English dictionary [cedict]:

  成功
  [cheng2 gong1]
  success
  to succeed

/usr/ports/net/dictd-database 還有其他的字典檔資料庫,可以參考看看是否需要。

筆者通常都會安裝 /usr/ports/net/dictd-database ,然後將所有的資料庫都寫入 /usr/local/etc/dictd.conf,然後用 dict -h localhost hello 來對所有的資料庫查詢, 在查單字的時候蠻方便的。

Figure 16-1. dict snapshot

cedict: CEDICT: Chinese-English Dictionary

dict: http://www.dict.org/


16.2. pyDict - 英漢、漢英兩用字典

在眾多的 Unix-like 翻譯軟體中,鮮少能找到對中文翻譯的程式,而 pyDict 就是這麼一個好用的工具! pyDict 的字典檔是 xdict 轉出來的, 並經過作者的整理與改善.

pyDict 是用 python 加上 gtk 的界面工具集(widgets) 寫成的英漢、漢英兩用字典。 而且支援 XIM,是目前中文最好用的字典。 還有個智慧模式,使用起來是不是跟一般的電子字典類似呢?

啟動說明

pydict [options] [word]

options:
        -h              列出文字模式下的說明
        -i              console互動模式
        -e [word]       英漢查詢(可不加-e)
        -c [word]       漢英查詢

console 模式說明:

在終端視窗中會有word:的提示符號,使用者可以鍵入想查 詢的單字。如果想轉成其他模式可以鍵入下列字串:

-c      轉換成漢英模式
-e      轉換成英漢模式

如果要離開console互動模式,可以鍵入-q或是在word:後直 接按Enter鍵就可以了。

如果中文有問題的話,表示 gtk 的中文字型沒設定好, 用 cp /usr/X11R6/lib/X11/pyDict/gtkrc.zh_TW.big5.sample ~/.gtkrc 將 pyDict 的範例拷貝過來使用就可以了。

作者已經很久沒有維護, 目前 llch at redhat.com 有修改並移植到 pygtk2 之上.

Figure 16-2. pydict snapshot

WWW: http://sourceforge.net/projects/pydict/

WWW: http://www.linux.org.tw/~plateau/linux_notes/


16.3. stardict - 中文與英文的翻譯字典

一個中文與英文的翻譯字典,由 Motif 開發的,在這個軟體中包含了 星際譯王源程序、圖標和背景圖形文件,漢字字體、音標字體 ,詞庫、音標庫,Readme、開發計劃等文件。

功能特性描述:近五萬單詞,常用詞帶音標、具有模糊匹配功能、 具有屏幕取詞功能、自帶漢字字體,無需漢字環境、繁簡兩種字體。

預設為簡體,若要看到繁體介面,則修改 /usr/X11R6/share/stardict/hzfont/fonts.dir

--- fonts.dir.orig      Sat Nov  3 01:17:39 2001
+++ fonts.dir   Sat Nov  3 01:14:25 2001
@@ -1,3 +1,3 @@
 2
-hz16.pcf  hz16
+hz16ft.pcf  hz16
 yb10x20.pcf      yb10x20

Figure 16-3. stardict snapshot


16.4. stardict2

星際譯王 2.0.0,一個運行在GNOME環境下的國際化的詞典軟件, 有選中區取詞,通配符匹配,模糊查詢等強大功能。

安裝 chinese/stardict2

Figure 16-4. stardict2 snapshot

WWW: http://stardict.cosoft.org.cn/


16.5. oxford

oxford is a English to Chinese dictionary, written in Perl.

安裝 chinese/oxford

Figure 16-5. oxford snapshot

WWW: http://igloo.its.unimelb.edu.au/Blowfish/


16.6. edict-big5 - 日文漢字轉中文漢字後的漢英字典

EDICT 本來是日英字典,不過我透過 lang/perl5.8piconv 將 EUC-JP 轉成 Big5, 有許多字無法找到對應的 Big5 所以這個字典檔仍然有許多問題, 筆者也將格式轉成 dict 的格式,因為偏好原因。

選擇 piconv 的原因是目前他比 iconv 具備更多的轉碼對應, 這樣子才能讓能看到的 Big5 更多。

edict-big5 的安裝:

# cd /usr/ports/outta-ports/edict-big5
# make install clean

Figure 16-6. edict-big5 snapshot

WWW: http://www.csse.monash.edu.au/~jwb/edict.html


Chapter 17. 有用的中文軟體

以下介紹的都是在 ports/chinese 底下的套件。


17.1. FreeWnn

一個可輸入日文/中文/韓文的工具(這堨u包含中文) 這是個較適合 日本人來輸入中文的工具 :-) 和常用的輸法習慣有頗大的差距, 有興趣的人可試試。

WWW: freewnn project


17.2. acroread5-chtfont - Acrobat Reader 5.0 的 PDF 閱讀軟體

chinese/acroread5-chtfont 是 Acrobat Reader 5.0 的繁體字型檔案, 用來觀看不內嵌中文字的 PDF 檔用。 如果只安裝 print/acroread5 則只能觀看英文 PDF 和內嵌字型的中文 PDF。 由於 print/acroread5 需要 emulators/linux_base, 所以筆者通常改用 chinese/xpdf 或是 print/gv 來觀看。

Figure 17-1. acroread snapshot

WWW: http://www.adobe.com/prodindex/actobat/readstep.html


17.3. cle_base - 利用 CLE 所提供的中文 L10N [OBSOLETE]

利用 CLE(Chinese Linux Extension) 所提供給 GNU/Linux 的中文 L10N 來完成中文化,目前是以 RedHat 的發行版本為主。 這個 port 只有選取 CLE 安裝時的基本套件。 除了是一個 GNU/Linux 模擬器外,也可以在上面執行 L10N GNU/Linux 軟體,例如 Netscape 或是 Star Office

在安裝 GNU/Linux base 成功後,還必須將 GNU/Linux kernel 模式開啟, 這樣才能讓 GNU/Linux 的執行檔運作。 GNU/Linux 模式可以經由修改 rc.conf 來將 linux_enable 開啟,請參考 rc.conf(5)。

如果有使用 NIS,別忘了要修改 /compat/linux/etc 中的 yp.conf

WWW: http://cle.linux.org.tw


17.4. cless - 一個較好用的分頁閱讀程式

一個較好用的分頁閱讀程式,並且中文相容用和 morepg 類似,但功能更強大,且中文相容。

不過如果不需要介面中文化的話,內建的 less -r 已經很夠了。

WWW: cless project


17.5. Dia - 類似 Vision 的流程設計軟體 [OBSOLETE]

Dia 是一套建構在 GTK+ 上的流程設計軟體,並使用 GPL 版權散佈。

Dia 被設計成與商業版的視窗軟體 'Visio' 十分類似。 它可以被用來繪不同種類的流程圖。 在這個第一版中,也支援了 UML 靜態結構流程圖和網路流程圖。 它目前可以讀取和儲存流程圖到自定的檔案格式和匯出成 postscript。

WWW: dia project


17.6. Firebird - BBS 伺服器

Firebird BBS 是一個 BBS 伺服器,有著 news 能力和許多其他功能。 它包含了 mail/news/talk/irc 且只需要使用 telnet。

它在繁體中文網際網路環境中廣泛的被使用,它也有 GB 編碼的版本, 但是目前還沒辦法取得。

WWW: firebird project


17.7. fortunetw - 唐詩三百首與易經

在安裝完後,只要使用 /usr/games/fortune ${PREFIX}/share/games/fortune/tangshi 或是 /usr/games/fortune ${PREFIX}/share/games/fortune/yijing 就可以有隨機的唐詩三百首或是易經。

Figure 17-2. fortunetw snapshot


17.8. Gnumeric - GNOME 報表軟體

Gnumeric 是一個好用的報表軟體,只要您會用 Excel 便會使用本軟體,操作方式簡直跟 Excel 一模一樣。

本軟體為了跟各個有名的報表軟體相容,更提供了可以開啟 Excel、Lotus 1-2-3、Applix、Sylk、XBase 及 Oleo 等等的檔案。

WWW: gnumeric project


17.9. hanzim - 中文字學習軟體

設計用來幫助您記憶中文字,使用該字的多種意思。 會顯示該字相同的字根,剩下的部份,發音,漢語拼音發音。

Figure 17-3. hanzim snapshot

WWW: hanzim project


17.10. libtabe - xcin 的中文處理函式庫

在電腦上處理中文,跟原有的 C 函式庫一直很難順利的整合。以 Big5 碼來說,一個字佔了兩個 byte,不管是計算字串長度, 或者是要考慮中文字的字序,甚至要處理詞或句子的時候, 都需要做特別的調整,原有的 C 函式庫根本不敷使用。另一方面, 由於每個程式開發人員在處理中文的時候,都有自己的方法, 所以不同程式之間很難分享函式庫,更不用提重覆利用了。TaBE 計畫希望能夠提供一個更好的中文使用環境,因此, 就很需要一個能處理中文字、詞、句的統一介面與函式庫, 來做為所有應用程式的基礎。libtabe,就是希望成為這樣的一套函式庫, 提供統一的介面與足夠的功能,讓應用程式有強大的基礎可以發揮。

WWW: Libtabe is Used in XCIN

WWW: http://gusp.dyndns.org/doc/libtabe-db/libtabe.html[OBSOLETE]


17.11. lunar - 轉換陽曆和陰曆的對應日期

轉換陽曆和陰曆把陽曆的日期轉成對應的陰曆日期, 也可把陰曆日期轉成對應的陽曆日期,此程式也印出生肖和天甘地支 ,適用於西元 1900 年至 西元 2049 年。

陽曆 2001 1 24 是陰曆的 2001 1 1。

% lunar 2001 1 24
% lunar -i 2001 1 1
Lunar Version 2.1 (July 23, 1992)

Solar : 2001.1.24.0      Wednesday
Lunar : 2001.1.1.0       ShengXiao: Snake
GanZhi: Xin1-Si4.Geng1-Yin2.Ding1-Hai4.Geng1-Zi3
        (GanZhi Order)   8-6.7-3.4-12.7-1
        (JiaZi Cycle)    18.27.24.37

BaZi (8-characters) according to 'Four Column Calculation':
        Geng1-Chen2.Ji3-Chou3.Ding1-Hai4.Geng1-Zi3
        (GanZhi Order)   7-5.6-2.4-12.7-1
        (JiaZi Cycle)    17.26.24.37
% lunar -5 -i 2001 1 1
Lunar Version 2.1 (July 23, 1992)

陽歷: 2001年 1月24日 0時 星期三
陰歷: 2001年 1月 1日子時 生肖屬蛇
干支: 辛巳年 庚寅月 丁亥日 庚子時 
用四柱神算推算之時辰八字: 庚辰年 己丑月 丁亥日 庚子時

17.12. linux_locale - linux 模擬器所需的中文 locale 資訊 [OBSOLETE]

這個 port 主要是讓要使用 linux emulator 的人,也能有 locale data, 所以經常使用 linux-* 的人最好裝一下,以剛才的經驗而言, 安裝了 www/linux-mozilla 後,執行卻發生 locale 不支援的情況, 造成根本沒辦法讓 xcin2.5 切換輸入法,並在 console 有警告訊息, 在安裝後就可以切換了,不過中文還是沒辦法正確的輸入到 linux-mozilla 中。 但是在 linux_base-7.1 之後就可以不需要 linux_locale 了, 因為這是給 linux_base-6.2 用的,之後已經是內建的了。

一點小經驗,參考看看 :)


17.13. mkisofs - 建立光碟影像檔

在 FreeBSD 底下燒錄光碟有兩個步驟:

1. 將所需的資料 ( 檔案,音樂或全部 ) 包裝成一些特別格式的檔案。

2. 用 burncd 將這些檔案寫入光碟中。

mkisofs 就是 1. 的工具,也就是建立光碟影像檔。 而在 ports/chinese 底下的 mkisofs 可以建立 Chinese Big5 檔名,請使用 -J 的選項來使用它。

也可以參考這個網頁, mkisofs-NLS-CJK

# mkisofs -a -f -l -r -J -o ~/test.iso ~/test/
# vnconfig vn0 test.iso
# mount -t cd9660 /dev/vn0 /mnt/iso
# ls /mnt/iso
# umount /mnt/iso
# vnconfig -u vn0
# burncd -e -v -s 6 -f /dev/acd1c data test.iso fixate

以上的範例是把 ~/test/ 目錄下的所有檔案, 建立成一個 test.iso,可以先用 du -s -h ~/test/ 檢察是否會超過您的光碟容量, 然後用 vnconfig 來測試,在測試前, 記得要先安裝 big5fs, 並按照 big5fs 的要求做好準備工作, 在搭配可以看到中文的 ls, 這樣子就可以在 FreeBSD 底下燒錄中文檔案了。

目前 ports 中的 mkisofs 雖然支援 nls,但是只有支援 one byte 的, 所以並不能作中文的轉換。

作者不採納 multu-byte NLS 的原因如下:

Both solutions requiere the complete set of tables to be compiled into mkisofs. There was no concept of reading files instead. I believe that it is better to try to use libiconv instead.

以下是筆者的日誌,大部分的人應該都不會感興趣的。

這篇文章是在看完 chinese/mkisofs 的 patch 寫下的日誌, mkisofs 目前是 cdrecord project 的一部份,cdrecord 目前在 sysutils/cdrtools 底下, 而 mkisofs 則是在 sysutils/mkisofs ,該 port 最主要的部份就是修正 mkisofs 的 joliet 對中文的支援問題, patch 分成兩個部份,convert_to_unicode 和 joliet_strlenm。

在 convert_to_unicode 部分,他會將所有的字作轉換,轉換成 2bytes的Unicode編碼,以常見的英文來說:

    ABC -> 0A0B0C
    3bytes -> 6bytes

而中文的部份:

    0xA4E5(文) -> big5_to_unicode -> 0x6587
    2bytes                           2bytes

其實可以直接用 iconv 作掉整個轉換的部份。

而 joliet_strlen 的部分, 這邊是指定 joliet 所給予的 buffer size,預設全都是英文, 所以原本 3bytes 的 ABC 會變成 6bytes 的 0A0B0C, 但是中文的部份要修正成 2bytes 的中文出來還是 2bytes。

所以也針對現在 mkisofs 的版本作了一個 patch, 有興趣的人可以裝 outta-port/mkisofs 或是 outta-port/cdrtools:

WWW: cdrecord project


17.14. mule-freewnn

MULE 是 MULtilingual Enhancement to GNU Emacs 的簡寫。 簡單的說,就是在 GNU Emacs 上加些東西,讓它可以處理多國語言 (編碼系統)。它將多位元組(multi bytes)的編碼系統 (encoding system)重新在內部又編一次碼,因此,一篇文章中可同時 使用中文 (BIG5 跟 GB),日文,韓文,英文,泰文等等。

Mule-2.3 使用中文

如果您已安裝了字型,您可以用 mule 來輸入與顯示中文。 大部份的字型都是 16 或 24 點的,所以用:

# mule -fn 8x16 &
# mule -fn 12x24 &

Note: 按 M-x load-library RETURN chinese RETURN。 ``Ctrl-]'' 用來切換輸入法。


17.15. muni

Muni finds the Unicode value of the 7773 Chinese characters listed in Matthews' Chinese-English Dictionary.

WWW: muni project


17.16. p5-Date-Chinese

能經由輸入西元年得到農曆年的程式。

#!/usr/bin/perl

use Date::Chinese;
$year = yearofthe( 1999 );
print $year; # "Year of the hare"

17.17. qkmj - 中國的國粹:麻將

您是否沒有機會和別人打麻將?是否常為了打麻將輸錢而和朋友傷和氣? 麻將本是中國的國粹,但常久以來一直為人所垢病的一點, 就是許多人將它拿來做為賭錢的工具。 現在一個讓您了解自己麻將實力的機會來了。透過網路麻將, 您可以隨時和來自各地的好手較量, 根據自己的分數進而可知道自己的實力究竟如何。 QKMJ 之中文名稱為網路休閒麻將,這是一個 Clinet/Server 架構, 可以讓您在網路上和其它的使用者一起打麻將的程式。

如果是 5-CURRENT 的機器必須安裝 COMPAT4X, 且必須設定 TERM 為 vt100,所以筆者通常都用 env TERM=vt100 qkmj 來啟動,或是設定成 alias,alias qkmj 'env TERM=vt100 qkmj'

使用時請打 qkmj <server_ip> <server_port>, 不加後面參數代表使用原來的設定。例如:qkmj 就可連到目前 QKMJ 的主要 server。

如果在打入 qkmj 時發現如下的訊息:

Couldn't open /usr/libexec/ld.so.

請用如下的指令來修正 ln -s /usr/local/libexec/ld.so /usr/libexec/ld.so

WWW: qkmj faq

Figure 17-4. qkmj snapshot

WWW: sywu's homepage


Chapter 18. 發展中的中文軟體 Outta-port

Yuan-Chen Cheng Date: 3 Jul 1999 10:07:20 GMT

1. 什麼是 Outta-Port ?

Outta-Port 是 port 以外的 port.

也就是說,當我們在寫 port 時,我們認為該 port 還不是很穩定 ,還不想將之 commit 進 FreeBSD 總部的程式中,但是有希望一群 人可以一起還維護這一組 port 時,我們就將之 commit 進 outta-port.

2. 如何取得 Outta-Port ?

cvsup ;)

先假設您會用 cvsup 和 ports. 取得 outta-port.supfile 這個 supfile 將 outta-port 目錄放在 /usr/ports 下. 假設您安裝好了 cvsup,請下指令 cvsup -g outta-port.supfile

# cd /usr/ports
# fetch http://freebsd.sinica.edu.tw/conf/outta-port.supfile
# cvsup -g outta-port.supfile

或是直接編輯 outta-port.supfile,內容如下:

*default host=freebsd.sinica.edu.tw
*default base=/usr/ports
*default prefix=/usr/ports
*default release=cvs
*default delete use-rel-suffix

outta-port tag=.

3. 如何加入 Outta-Port maintainer ?

把做好的 Port 寄份 email 到 statue@freebsd.sinica.edu.tw, 最好是 shar 的格式。

4. 如何知道最新消息

寄份 email 到 majordomo@freebsd.sinica.edu.tw,內容為 subscribe freebsd-taiwan-cvslog

5. 現在 Outta-Port 中有甚麼?

有很多奇怪的東西,不妨自己裝了看看。


18.1. xfig

XFIG 3.2.2 - Facility for Interactive Generation of figures under X11 This port now accepts input from XIM server, such as XCIN.

在 /usr/X11R6/lib/X11/app-defaults/Fig 設定:

Fig.international: true
Fig*edit_panel*Text_text*international: true
Fig*edit_panel*inputMethod: xim 

export LANG=zh_TW.Big5

再來執行 xfig。注意,光 LC_CTYPE 設成 zh_TW.Big5 是不行的。

如果不能用,表示您的 xfig 編譯時沒有加入 i18n 功能。 或XMODIFIERS 環境變數沒有設好。

Note: Because XCIN needs Alt keys, Alt/Meta are disabled. Use Esc as compose key instead.


18.2. MT - movabletype blog

It is a decentralized, web-based personal publishing system designed to ease maintenance of regularly updated news or journal sites, like weblogs.

安裝 chinese/MT, 他會一並安裝 www/MT

WWW: http://www.movabletype.org/

WWW: blogging elixus - 正體中文blog資訊中心


Chapter 19. 其它軟體的中文相關問題

19.1. sendmail

因為 sendmail-8.8.x 預設會將所有 8-bit 的信件編碼後再送出,這或多或少會對收信人造成一些影響 (參見 procmail 的解決方法)。 現在大部份的主機都已能直接傳送 8-bit 的信件,所以您最好重新編譯 sendmail,將編碼功能關掉。

在下面地點(或映射站台)取回最新版本的 sendmail

ftp://ftp.sendmail.org/ucb/src/sendmail/

解開並更改 Makefile

# tar zxvf sendmail-8.8.8.tar.gz
# cd src/Makefiles
# chmod u+w Makefile.FreeBSD
# vi Makefile.FreeBSD

CFLAGS+= 後加上 -DMIME8TO7=0。編譯並安裝 sendmail

# cd ..
# ./makesendmail all install

用手動方式安將 man pages 安裝到適當目錄(不裝也沒關係)。

砍掉舊的 sendmail 行程:

# kill -9 `head -1 /var/run/sendmail.pid`

重新啟動 sendmail

# /usr/sbin/sendmail -bd -q1h

WWW: http://www.sendmail.org/


19.2. procmail

procmail 是一個電子郵件過濾器 (mail filter)。它可 將到的信件在存入您的信箱前先做處理,例如將信件分類等。不過這 裡要教您的是如何利用 procmail 來將被編碼的中文信 件解碼成純文字,以及在不同編碼的信件轉換為您常用的編碼。

在您的 home 目錄下建立 .procmailrc 檔案,內容如下:

# 在用 procmail 處理前先將信件儲存下來,以免發生意外
# 您可以設定那些信件不必備份,例如由 MAILER-DAEMON 來的退信
:0 c
* !^From.*MAILER-DAEMON
mail/procmail-backup

# 將以 quoted-printable 或 base64 編碼的信件解碼
:0
* ^Content-Type: *text/plain
{
    :0 fbw
    * ^Content-Transfer-Encoding: *quoted-printable
    | mimencode -u -q

        :0 Afhw
        | formail -I "Content-Transfer-Encoding: 8bit" \
                  -I "X-Mimed-Autoconverted: quoted-printable to 8bit by procmail"

    :0 fbw
    * ^Content-Transfer-Encoding: *base64
    | mimencode -u -b

        :0 Afhw
        | formail -I "Content-Transfer-Encoding: 8bit" \
                  -I "X-Mimed-Autoconverted: base64 to 8bit by procmail"
}

# 這裡判斷信件是否為 GB 編碼,若是則轉為 BIG5 編碼
# 如果您要由 BIG5 轉為 GB 碼,要將例子中所有的 big5
# 及 gb2312 互換,並將 hc -m b2g 改為 hc -m g2b

:0
* ^Content-Type:.*text/plain;.*charset=gb2312
{
    :0 fw
    | hc -m b2g -t /usr/local/lib/chinese/hc.tab

        :0 Afhw
        | formail -I "Content-Type: text/plain; charset=big5" \
                  -I "X-Charset-Autoconverted: gb2312 to big5 by procmail"
}

# 將信件存回信箱
:0:
${ORGMAIL}

這個例子中,配合了 mimencode,formail 將信件解碼,並用 hc 將 GB 編碼的信件轉為 BIG5 編碼。所以您還必須安裝這些工具。

最後再將更改您的 .forward 檔就可以了

"|IFS=' ' && exec /usr/bin/procmail -f- ~/.procmailrc ||exit 75 name"

注意:其中最後的 name 要改為您自己的簽入名稱(login name)。

WWW: http://www.procmail.org/


19.3. vim - VI 的進階編輯器

它包括了一些和 vi 很像但 celvis-1.3 所沒有的特色,像是行號, 回繞行,及大型檔最主要的是可以輸入中文。

安裝 editors/vim

我知道有人很討厭 vim,因為還要裝 X。 其實只要用 make -DWITHOUT_X11 install 就可以了只安裝文字版的 vim

安裝 ports/editors/vim 後, 根據個人喜好設定 .vimrc

set fileencoding=taiwan
set guifontset=8x16,kc15f,-*-16-*-big5-0

並且設定 zh_TW.Big5 的 locale,這樣子就可以一次刪除一個中文字。

以下是建議的設定

set cindent
set enc=taiwan
set fileencoding=taiwan
set hls                
set nocompatible
set sw=2        
syntax on
highlight Comment ctermfg=darkcyan
highlight Search term=reverse ctermbg=4 ctermfg=7

在啟動的時候建議使用 env TERM=xterm-color vim ,這樣漂亮的顏色才會出來 :)

如果覺得字色太暗,可以用 :set background=dark

Figure 19-1. vim snapshot

WWW: http://www.vim.org/


19.4. mailman - How to Enable Chinese in Mailman2.1.1

Last Update: 2003年 3月10日 周一 10時03分59秒 CST

Contributed by: "Y. Cheng" <ycheng@slat.org>

今天終於有空來裝 mailman 2.1.1 啦 ^_^ 要 mailman 2.1.1 可已有繁體中文可以選, 需要以下額外動作:

1. 安裝時加上參數 WITH_CHINESE=yes:

# cd /usr/ports/mail/mailman
# make WITH_CHINESE=yes install clean

2. 把 $(prefix)/Mailman/Defaults.py 裡面的 DEFAULT_SERVER_LANGUAGE = 'en' 改為 DEFAULT_SERVER_LANGUAGE = 'big5':

--- Mailman/Defaults.py.in.orig Mon Mar 10 23:49:48 2003
+++ Mailman/Defaults.py.in      Mon Mar 10 23:50:02 2003
@@ -670,7 +670,7 @@
 # The default language for this server.  Whenever we can't figure out the list
 # context or user context, we'll fall back to using this language.  See
 # LC_DESCRIPTIONS below for legal values.
-DEFAULT_SERVER_LANGUAGE = 'en'
+DEFAULT_SERVER_LANGUAGE = 'big5'

 # When allowing only members to post to a mailing list, how is the sender of
 # the message determined?  If this variable is set to 1, then first the

3. 把 $(prefix)/pythonlib/email/Charset.py 裡面的 'big5': 'big5_tw', 改為 'big5': 'big5',,否則 subscribe mail list 時就會出現 bug.

--- pythonlib/email/Charset.py.orig     Sun Oct 13 12:00:20 2002
+++ pythonlib/email/Charset.py  Tue Mar 11 10:19:07 2003
@@ -70,7 +70,7 @@
     'iso-2022-jp': 'japanese.iso-2022-jp',
     'shift_jis':   'japanese.shift_jis',
     'gb2132':      'eucgb2312_cn',
-    'big5':        'big5_tw',
+    'big5':        'big5',
     'utf-8':       'utf-8',
     # Hack: We don't want *any* conversion for stuff marked us-ascii, as all
     # sorts of garbage might be sent to us in the guise of 7-bit us-ascii.

初步測試這樣 ok, 會不會有進一步問題, 還需要多測試.

ycheng


19.5. pvpgn - Blizzard's Battle.net service

國內最有名的 Battle.net 是豬頭C 的 魔獸3 台灣伺服器網站, 上面有非常詳細的介紹如何使用工具來連上非官方的伺服器。

元智校內 Server: 140.138.145.35

StarCraft 1.10、StarCraft Expansion Set 1.10、 WarCraftIII 1.12、WarCraftIII The Frozen Throne 1.12、 Diablo II LoD 1.09 Open Battle.Net、 Diablo II LoD 1.09 Closed Battle.Net。

pvpgn 的安裝:

# cd /usr/ports/outta-port/pvpgn
# make install clean

Chapter 20. FreeBSD 的中文化

如果您還知道有那些 FreeBSD 中文化的計畫,請告訴我 Shen Chuan-Hsing


20.1. FreeBSD 中文文件計畫

FreeBSD 中文文件計畫(FDP)目前正全力進行於 FreeBSD Handbook 文 件的中文翻譯工作,它的網址是 http://freebsd.sinica.edu.tw/~ncvs/zh-translation/

目前在 CFDP 底下有三個文件,doc、zh-l10n-tut、zh-tut 和一個 outta-port。

cvsup 取得方式:

% fetch ftp://freebsd.sinica.edu.tw/pub/ycheng/CVSUP/outta-port.supfile
% fetch ftp://freebsd.sinica.edu.tw/pub/ycheng/CVSUP/zh-doc-all.supfile
% fetch ftp://freebsd.sinica.edu.tw/pub/ycheng/CVSUP/zh-l10n-tut.supfile
% fetch ftp://freebsd.sinica.edu.tw/pub/ycheng/CVSUP/zh-tut.supfile
% cvsup -g zh-tut.supfile
     

cvs 取得方式:分別為 doc/zh、zh-l10n-tut、zh-tut、outta-port

% cvs -d :pserver:anoncvs@freebsd.sinica.edu.tw:/home1/ncvs login
(Logging in to anoncvs@freebsd.sinica.edu.tw)
CVS password: anoncvs
% cvs -d :pserver:anoncvs@freebsd.sinica.edu.tw:/home1/ncvs checkout zh-tut

20.3. FreeBSD 的中文站台

下列地點可找到 FreeBSD 中文資訊。如果您還知道有其它未列出的, 請告訴我 Shen Chuan-Hsing

推薦網站

FreeBSD 資源

其他發行版本

中文書籍

組織網站

新聞網站

文件資源

經典文章

下載站台


20.4. FreeBSD 的中文討論區

如果您有問題,可以在這些討論區發問,用中文也通哦!不過請確定您 已經先看過了相關的文件或 HOWTO。否則重複問一些 FAQ 是很不 受歡迎的!

news://tw.bbs.comp.386bsd

Openfind BBS 網路論壇,tw.bbs.comp.386bsd 看板。

http://bbs.openfind.com.tw/cgi-bin/x_list?BOARD=tw.bbs.comp.386bsd

中研院所架設的台灣 FreeBSD 通信論壇。

http://freebsd.sinica.edu.tw/mailman/listinfo

中研院舊版本通信論壇,舊信倉庫。

http://freebsd.sinica.edu.tw/~majordom/

香港 bsd talk 通信論壇:

news://news.linux.org.hk/hklug.bsd.talk

http://www.shellhung.org/mailman/listinfo/


20.5. FreeBSD 的中文 IRC 聊天室

這是目前 BSD 使用者在網路上聚會聊天的地方,通常都會有一群人在此發呆 、哈拉、打屁。

在 FreeBSD 底下通常都是使用 ports/chinese 底下的 bitchx 或是 ports/irc 底下的 xchat 當作 IRC 用戶端,在 Windows 底下則是以 mIRC 為主。

bitchxxchat 的使用方式:

  1. 啟動 irc client

  2. 出現 prompt 後

  3. /server irc.taiwan.com

  4. /join #bsdchat

mIRC 的使用方式:

  1. File -> Options -> Connect -> Add

  2. IRC Server: irc.taiwan.com

  3. Connect to IRC Server

  4. /join #bsdchat

近來因為主機與網路的關係,IRC Server 先換到 irc.seed.net.tw。

Note: mIRC 小秘訣:如何用微軟新注音輸入法改字呢? 在要改的那個字上面按空白鍵,然後選擇所要的字,決定後再按空白鍵。

mIRC 中文化:您需要先安裝mIRC32 v.5.91在您的電腦內, 然後才可執行這個patch檔來進行中文化的工作。使用方法:先去 www.mirc.com捉取mIRC591t.exe這個檔回來安裝(記住,這一版patch 是給mIRC32 v5.91使用的!不要拿其他版來patch!)然後把 p010901.exe 拷貝到您mIRC安裝的目錄下,執行p010901.exe。 執行完畢後,就會自動產生一個中文化過的mIRC執行檔,CmIRC591.exe。 您可以直接在mIRC的目錄下執行這個檔。


20.6. Organisations Working in Open Source

Government

Research Institute

Association

Education

Training

  • UCOM - RedHat Certified training.

  • Finesse IT - Linux SA & embedded Linux training.

  • GIN - Linux use & manage training.

  • IIIEDU - Connected Linux training.

  • Shinewave - LPI Certified Training.

  • OSS School - ThizLinux & OSS training.

  • Great Master - LPI Certified & WebMaster training.

  • 1ccnet - OpenLinux & LPI Certified training.

  • PEI YA - Linux teaching CD.

Business

  • OSSTI - Software technology and service base on GCC compiler.

  • Citron Network - VoIP base on Gatekeeper.

  • Linpus - Embedded system & Embedded GUI base on Linux,Linpus Linux OS.

  • Eshida.com - Embedded system development tools base on Linux.

  • Wiscore - Embedded,Information Appliances base on Linux.

  • Erexi - HA,LDAP,Mail,Cluster solutions base on Turbolinux.

  • toppoint - small SI with OSS solutions.

  • brain-c - small SI with OSS solutions.

  • Synology - NAS base on FreeBSD.

  • SYSCOM - Database support with FreeBSD.

  • datsoft - ERP base on PostgreSQL.

FS/OSS User Group

OSS Portals / Websites


Chapter 21. 常見問題解答

21.1. 為何無法輸入中文?

這個問題問得太籠統了!您是在什麼情況下不能輸入中文的?

如果您是在 console 的 shell 下不能輸入中文,請參考 在 Shell 底下輸入中文 一小節的說明。

如果您是在編輯器中不能輸入,可能您的編輯器無法支援中文。 請參考 有用的中文軟體 一節安裝能支援中文的編輯器。 如果是 vi 無法輸入中文請參考 輸入中文會顯示 /XX/XX?

如果您是 telnet 到別入的機器後不能輸入中文,那麼問題很可能在 telnet 這支程式上。請參考 telnet 一小節的說明。


21.2. 如何在 Netscape 輸入中文? [OBSOLETE]

安裝 xcin25 並設定好 XIM 即可。請參考 xcin25 一節的說明。不過如果 netscape 是以 package 安裝的,可能沒辦法。


21.3. ChiTeX 與 CJK 有何不同? 可否同時安裝?

  • CJK 的中文字形讀取尋找系統架構在 LaTeX 的 NFSS 上,

  • ChiTeX 的中文字形讀取尋找系統是獨立而效率高的系統

  • CJK 可使用中文,日文,韓文;而 ChiTeX 只對中文正體字(Big5)

  • CJK 只能用在 LaTeX 上;而 ChiTeX 可用在 plain TeXLaTeX 上。

  • ChiTeX 指令簡單但很有用。

  • ChiTeX 是接近真正中文 LaTeX 的中文 LaTeX

  • 功能的不同...

ChiTeXCJK 應該是可以同時安裝的,但是 ChiTeXCJK 所用的 ttf2pk 如果同名字,可能有問題。 解決的辦法是在各自起始的指令稿(shell script)中定義 $PATH 變數,使其指向正確的 ttf2pk 位置。

(感謝陳弘毅教授解答。)


21.5. 加快 X Win 的方法?

用 "startx - -deferglyphs 16" 進入 X 視窗系統試試看,這裡 "-deferglyphs 16" 的參數會讓 X 延遲產生 16bit 字型的時間, 不在第一次載入字型的時候就全部一次產生,而在真正使用到字型 的時候才產生,可以讓載入中文字型的時候不會 hang 住,可以加 快中文字顯示的速度。


21.6. 為何 Netscape 的圖示是黑白的? [OBSOLETE]

bpp 設成 24 時, Netscape 的圖示就會變成黑白, 只要用 bpp 16 或是 bpp 32 就會變成彩色了。


21.7. 中文的 SSH client for windows?

PuTTY 現在有中文相容的版本出來了, 推薦給大家,很小的檔案,只有 216 KB,此版中文正常。 PuTTY 中文相容作者:mhsin , 中文相容功能作者網頁: http://www.mhsin.org/putty/,這裡提供一個下載點

在 0.52 版的 putty 只需要調整一下設定就可以輸入中文了。 Change Settings -> Window -> Appearance -> 的 Set the font used in the terminal window 點 Change 後 將字型選擇細明體或是標楷體的中文字型,並把字集選擇 CHINESE_BIG5,這樣子就可以輸入中文囉。

使用新版PuTTY時請記得把Window-->Appearance裡的cursor appearance改成 Underline,避免預設的塊狀游標在重繪時會把游標所在的中文字切開。

筆者通常還會把 Terminal 裡面的 Enable blinking text 來支援閃爍字,以及把 Keyboard 裡面的 The Backspace key 改成 Control-H 來使 BackSpace 有效用。

Putty WWW: http://www.chiark.greenend.org.uk/~sgtatham/putty/

要不然也可以到 http://www.ssh.com/products/ssh/download.cfm 抓取 SSHWinClient-3.0.0.exe, 此版中文也正常,功能也比 Putty 多很多,不過檔案大了點,約 6.37MB,這裡提供一個 下載點

SSHWinClient WWW: http://www.ssh.com/

Chinese Putty WWW: http://mhsin.org/putty/


21.8. 在 FTP 中輸入中文?

在終端機底下請試試用 ftp/ncftp3, 如果在 X 底下建議使用 ftp/IglooFTP 畫面和使用方式保證愛不釋手。


21.9. Oracle8i 沒辦法使用中文?

在環境變數中設定 nls_lang

export nls_lang="traditional chinese"

或是設定 NLS_LANG 為 TRADITIONAL CHINESE_TAIWAN.ZHT16BIG5, 這兩種方法都有人提出來,不過筆者沒有實際測試過。

WWW: http://www.orcale.com.tw/


21.10. 安裝 Oracle9i 出現亂碼?

by tommy@teatime.com.tw

Oracle 9i 內的 JAVA 字型設定有點問題, 安裝環境都設為英文就可以安裝了。

如果一定要看到中文,就把下面這個檔案的內容改一改再裝:

   Disk1/stage/Components/oracle.swd.jre/1.1.8.0.0/1/ \
    DataFiles/Expanded/linux/lib/font.properties.zh_TW_Big5

或是:

        Disk1/stage/Components/oracle.swd.jre/1.3.1.0.0/1/ \
    DataFiles/Expanded/jre/linux/libfont.properties.zh

裡面的 1.1.8.0.0 或是 1.3.1.0.0 要根據您所安裝的 jsdk 內附的版本,並且把 big5 那幾行改為:

-default-ming-medium-r-normal--*-%d-*-*-c-*-big5-0

就可以了。

或是直該修改 $JAVA_HOME/jre/lib/font.properties 也可以,感謝 jsona laio <freeonfair@yahoo.co.uk>。


21.11. wu-ftp 無法上傳中文檔名的檔案?

為什麼匿名者無法上傳中文檔名的檔案,但卻可上傳英文檔名的檔案?

可能是您在 ftpaccess 設定檔中設定了 patch-filter 了。 只要把以下的設定註解起來,應該就可以傳中文檔名的檔案了。

# path-filter...
path-filter  anonymous  /etc/pathmsg  ^[-A-Za-z0-9_\.]*$  ^\.  ^-
path-filter  guest      /etc/pathmsg  ^[-A-Za-z0-9_\.]*$  ^\.  ^-

21.12. kdm 登入畫面是亂碼?

/usr/local/share/config/kdmrc 檔案, 找到 font 相關設定,數字設定第三個欄位的 0 改成 big5 即可。ex:

FailFont=helvetica,12,5,big5,75,0
GreetFont=charter,24,5,big5,50,0
StdFont=helvetica,12,5,big5,50,0

順便看一下 [Locale] 區段,要正常顯示中文,要補上:

Country=tw
Language=zh_TW.Big5

另外,中文的環境設定要在 ~/.xsession 裡面設定,而不是在 ~/.cshrc


21.13. vi 輸入中文會顯示 /XX/XX?

這通常都是設定了 LC_CTYPE 為 zh_TW.Big5 或是沒設定 LC_CTYPE 才會發生的問題,在 ~/.cshrc 中加上下面的 alias 即可:

alias vi 'env LC_CTYPE=en_US.ISO8859-1 vi'

或是直接改用 vim6,會有更多的功能與支援。

請參考 ISO8859-1 一節。


21.14. write 無法送中文訊息?

這通常都是設定了 LC_CTYPE 為 zh_TW.Big5 或是沒設定 LC_CTYPE 才會發生的問題,在 ~/.cshrc 中加上下面的 alias 即可:

alias write 'env LC_CTYPE=en_US.ISO8859-1 write'

請參考 ISO8859-1 一節。


21.15. talk 無法送中文訊息?

這通常都是設定了 LC_CTYPE 為 zh_TW.Big5 或是沒設定 LC_CTYPE 才會發生的問題,在 ~/.cshrc 中加上下面的 alias 即可:

alias talk 'env LC_CTYPE=en_US.ISO8859-1 talk'

請參考 ISO8859-1 一節。


21.16. wall 無法送中文訊息?

這通常都是設定了 LC_CTYPE 為 zh_TW.Big5 或是沒設定 LC_CTYPE 才會發生的問題,在 ~/.cshrc 中加上下面的 alias 即可:

alias wall 'env LC_CTYPE=en_US.ISO8859-1 wall'

請參考 ISO8859-1 一節。


21.17. finger 無法看到中文project?

這通常都是設定了 LC_CTYPE 為 zh_TW.Big5 或是沒設定 LC_CTYPE 才會發生的問題,在 ~/.cshrc 中加上下面的 alias 即可:

alias finger 'env LC_CTYPE=en_US.ISO8859-1 finger'

請參考 ISO8859-1 一節。


21.18. mail 無法看到中文?

這通常都是設定了 LC_CTYPE 為 zh_TW.Big5 或是沒設定 LC_CTYPE 才會發生的問題,在 ~/.cshrc 中加上下面的 alias 即可:

alias mail 'env LC_CTYPE=en_US.ISO8859-1 mail''

請參考 ISO8859-1 一節。


21.20. 如何刪除以中文命名的檔案?

當遇到不知名的亂碼命名檔案時,可以用 rm -i * 來刪除檔案, 它會每一個檔案都詢問您是否要刪除。


21.21. X-win32 如何安裝中文字型?

通常筆者都會使用 kcfonts,因為跟預設的系統比較合。

首先在 chinese/kcfonts 安裝好後, 將 /usr/X11R6/lib/X11/fonts/local/ 底下的檔案, 全都搬移到 C:\Program Files\StarNet\X-Win32 5.1\Lib\Fonts\ 底下,然後用 Font -> Add... -> local\,接著 Make FONTS.DIR, 並 Edit Alias File...

kc12x24 -kc-fixed-medium-r-normal--24-170-100-100-c-120-iso8859-1
kc15f -kc-fixed-medium-r-normal--16-160-72-72-c-160-big5-0
kc24f -kc-fixed-medium-r-normal--24-240-100-100-c-240-big5-0
kc8x15 -kc-fixed-medium-r-normal--15-170-100-100-c-80-iso8859-1
taipei16 -kc-fixed-medium-r-normal--16-160-72-72-c-160-big5-0
taipei24 -kc-fixed-medium-r-normal--24-240-100-100-c-240-big5-0

或是用 ports/x11-fonts/getbdfgetbdf -font "-dynalab-mingliu-medium-r-normal--16-*-*-*-c-*-big5-0" > mingliu16.bdf 來產生 16pt 的字型, 然後依序產生所需要用的字型。

在 Windows 底下也可以抓取 ttf2bdf.exe,將 C:\Windows\Fonts\mingliu.ttc 轉成 bdf, 然後依照上面的方法也是可以使用的。


21.22. 網頁亂碼?

如果是網頁內容,請在網頁的最前面加上:

<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=big5">

在網頁中設定後,重讀應該就正常了,如果還是不正常就檢察 httpd.conf 看是否有下面這行: AddDefaultCharset ISO-8859-1, 這行設定會讓瀏覽器不會根據網頁中的語言設定而判斷編碼方法, 只要把這行註解掉就可以了。

如果是 URL 列中文變亂碼,這是正常的,您可以用 perl 來編碼:

$string =~ s/([^0-9A-Za-z])/sprintf("%%%02X",ord($1))/ge;

或是用 perl 來解碼:

$string =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/chr hex $1/ge;

21.23. vnc 抓 XFree86 的中文問題?

by nestlin (nestlin.bbs@nestlin.Dorm13.NCTU.edu.tw)

Q: 請教一下,在 w2k 中執行 vnc 去抓 bsd 的 xwin 3.3.6 版, 是可以抓進來,但沒有中文,但如果在 bsd 上頭使用 startx 跑 xwin 時中文確是正常的,請問要如何解決 vnc 中 中文的問題。

A: 如果是 GNOME2 的軟體,中文不會有問題, 但是如果是傳統 XLFD 吃字的話,可以參考以下的安裝過程:

安裝 net/vnc

接著修改 /usr/X11R6/bin/vncserver

--- vncserver.orig Fri Jan  4 15:45:23 2002
+++ vncserver   Fri Jan  4 16:07:47 2002
@@ -149,6 +149,7 @@
 
 # Add font path and color database stuff here, e.g.:
 #
+$cmd .= " -fp /usr/X11R6/lib/X11/fonts/misc/,/usr/X11R6/lib/X11/fonts/100dpi/,/usr/X11R6/lib/X11/fonts/local/";
 # $cmd .= " -fp /usr/lib/X11/fonts/misc/,/usr/lib/X11/fonts/75dpi/";
 # $cmd .= " -co /usr/lib/X11/rgb";
 #

接著就可以啟動囉。

# vncserver :1 (啟動)

You will require a password to access your desktops.

Password: passwd
Verify: passwd
xauth:  creating new authority file /root/.Xauthority

New 'X' desktop is statue2.elife.idv.tw:1

Creating default startup script /root/.vnc/xstartup
Starting applications specified in /root/.vnc/xstartup
Log file is /root/.vnc/statue2.elife.idv.tw:1.log
# vncpasswd (換密碼)
Password: passwd
Verify: passwd
# ps -aux |grep Xvnc (檢查狀態)
root    7103  0.9  0.7  5652 5288  p1  I     3:36下午   0:42.89 Xvnc :1 -desktop
# vncserver -kill :1 (終止)
     

vncviewer 則是以 statue2.elife.idv.tw:1 來連線。

如果不想修改 vncserver 或是想以其他的 window Manager 來啟動, 那麼就要修改 ~/.vnc/xstartup

xset +fp /usr/X11R6/lib/X11/fonts/misc/
xset +fp /usr/X11R6/lib/X11/fonts/100dpi/
xset +fp /usr/X11R6/lib/X11/fonts/local/
xcin2.5 &
icewm

由於 vnc 是由 XFree86-3 改的,所以現在還不知道該怎麼使用 TTF。

VNC 是一個很好用的 Remote Desktop Controller,但其 X version 是改自 XFree86 3.3.2,所以沒有支援 TrueType 字型。

TridiaVNC 是由 Tridia 公司發展,延續 vnc 的開發,為 vnc 加上許多功能, 如提供更多的壓縮方式,及加入對 xtt 的 TrueType 字型支援。(XFree86-4 內含 xtt module,故 TridiaVNC 可以直接使用 XFree86-4 的 TrueType 字型)

安裝 net/tridiavnc

若系統中已經有 xtt 字型目錄,請於 ~/.vnc/xstart 內加入:

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

若無,請安裝 ports 裡的 TrueType 字型。

VNC 裡面怎麼打中文?只要Ctrl+Space不要被 Windows 吃了就好了, 或是改變 VNC 內的 xin2.5 切換中文的熱鍵也可以。

Figure 21-1. vnc snapshot

RealVNC WWW: http://www.realvnc.com

tridiaVNC WWW: http://www.tridiavnc.com

tightVNC WWW: http://www.tightvnc.com


21.24. CCCII-FT

因為基於CCCII的繁體中文內碼一直未定出適當的標準, 故 changcs 參考了一些資料(CCCII手冊、EUC-TW內碼), 以下提出一個基於CCCII的繁體字專用中文內碼(暫稱為EUC-CCCII-FT)。

# cd /usr/ports/outta-port/cccii-ft
# make install clean

Add the following lines into your ~/.Xdefaults:

whterm*font:     12x24
whterm*kanjiMode: euc
whterm*cccii21Font: cccii21Font
whterm*cccii22Font: cccii22Font
whterm*cccii23Font: cccii23Font
whterm*cccii24Font: cccii24Font
whterm*cccii25Font: cccii25Font
whterm*cccii26Font: cccii26Font

# xset +fp /usr/X11R6/lib/X11/fonts/cccii/
# xlsfonts | grep cccii
# xrdb -load ~/.Xdefaults
# whterm &
# cat /usr/X11R6/share/cccii/test_file

Figure 21-2. cccii snapshot

WWW: http://santos.ee.ntu.edu.tw/~changcs/whterm/whterm.html


21.25. 如何更改 X 的預設中文字體?

在安裝完 X 後,選單,顯示都是文鼎中楷,這對用慣了細明體的人, 有著莫大的不便,但是把系統字型全都換成 Ming 體後,也就是文鼎宋體後, 英文字體的變化就會變少了,所以應該有簡單的方式可以取代。

後來看到 Edward G.J. Lee 的一篇文章,才知道原來 X 預設抓字型的時候,是以 fonts.dir 的內容來排序的,由於文鼎的 foundry name 都是 Arphic,所以就看下一個 family name, AR PL KaitiM Big5 比 AR PL Mingti2L Big5 還前面,所以這就是為什麼, 一般都會抓到楷體的原因。所以就會去改變字型的 family name, 來治療這個問題。

# cd /usr/X11R6/lib/X11/fonts/TrueType
# perl -pi -e 's/Kai/Nai/g' fonts.alias fonts.dir fonts.scale

但是這樣子的做法會讓 KaitiM 的字型在整合上會出現許多問題, 如果都不會使用到 KaitiM 的使用者才建議如此做。


21.26. Gdk-WARNING **: BIG5-0

會出現這樣子的訊息通常都是沒設定好 ~/.gtkrc, 請參考 GNOME 程式的中文支援


21.27. unzip 解開中文檔名變亂碼?

在 Windows 中用 Winzip 壓縮中文檔名的檔案, 抓到 FreeBSD 底下 unzip 會變成亂碼。

安裝 chinese/unzip

或是利用下面有個 leeym 大大的 patch:

--- unzpriv.h.orig      Thu Apr 10 02:13:13 2003
+++ unzpriv.h   Thu Apr 10 02:24:23 2003
@@ -2333,7 +2333,7 @@
 #    endif
 #    define _OEM_INTERN(str1) {register uch *p;\
        for (p=(uch *)(str1); *p; p++)\
-         *p = native((*p & 0x80) ? oem2iso[*p & 0x7f] : *p);}
+         *p = native(/*(*p & 0x80) ? oem2iso[*p & 0x7f] :*/ *p);}
 #  endif
 #endif

21.28. squid 瀏覽 ftp 與 gopher 中文亂碼?

by KTH.bbs&alway.twbbs.org

原本學校使用 Squid 2.1,透過它瀏覽 ftp 站台與 gopher 站台訊息不會有亂碼出現,後來多了一台 2.4STABLEX 以後,發現都會有亂碼的產生,稍微追蹤了一下程式, 原來問題出在 2.4x 以後會將 >=0x7f 與 <=0x1f 的字元編碼成 &#%3d 的格式,因此在不影響穩定度的情況下, 就乾脆把這一段程式給註解掉了,這樣就能解決中文亂碼問題了, 用瀏覽器瀏覽起來真的蠻舒服的 ^^

--- lib/html_quote.c.orig       Wed Jun  5 16:02:30 2002
+++ lib/html_quote.c    Wed Jun  5 16:03:07 2002
@@ -114,11 +114,13 @@
         * sure all 8-bit characters are encoded to protect from buggy
         * clients
         */
+#if 0
        if (!escape && (ch <= 0x1F || ch >= 0x7f) && ch != '\n' && ch != '\r' && ch != '\t') {
            static char dec_encoded[7];
            snprintf(dec_encoded, sizeof dec_encoded, "&#%3d;", (int) ch);
            escape = dec_encoded;
        }
+#endif  
        if (escape) {
            /* Ok, An escaped form was found above. Use it */
            strncpy(dst, escape, 6);

21.29. apache2 預設顯示中文網頁

apache2 的httpd.conf裡面有一行設定:

AddDefaultCharset ISO-8859-1

這一行設定導致瀏覽器不會根據網頁裡面的語言設定而判斷編碼方法, 只要把這行註解掉就可以正常了。

如果要預設為 Big5 編碼,也可以改為:

AddDefaultCharset Big5

不過如果有使用者的網頁並非 Big5 編碼, 這樣子的設定可能會造成困擾, 不如註解掉由使用者自己去寫以下的標頭更為合適:

<meta http-equiv="Content-Type" content="text/html; charset=big5">

21.30. Windows 網址列不能使用中文檔名?

Windows 網址列不能使用中文,應該是 IE 的 URL 轉碼設定造成的。 按造下面的步驟修改看看:

工具(T) -> 網際網路選項(O) -> 進階

裡面有個 永遠將 URL 傳送成 UTF-8 (需要重新啟動) 的選項,把勾取消後,按確定並將 IE 關掉重開。

不過仍然不建議網站的檔名使用中文,在 RFC 內文件規範, 非 7bit 的 url 應該就是要 url encoding 成為 7bit 再傳送。 所以既然如此,每個 web server 一定都支援 url encoding 後的解碼。

如果以 UTF-8 的方式傳輸 "中文",無法抓到網頁,會得到:

GET %E4%B8%AD%E6%96%87 HTTP/1.1

如果關閉 UTF-8 的方式傳輸 "中文",可以抓到網頁,會得到:

GET \xa4\xa4\xa4\xe5 HTTP/1.1

不過如果以 Mozilla 瀏覽器傳輸 "中文",可以抓到網頁,會得到:

GET %A4%A4%A4%E5 HTTP/1.1

也就是說當開啟 UTF-8 的方式傳輸時,會先將網址轉成 UTF-8 的格式, 在以 url encoding 後的結果傳輸,但是關閉的時候,雖然以原來的編碼傳輸, 但是卻沒有做 url encoding。 雖然關閉 UTF-8 的方式傳輸可以讀取到部分中文檔案, 可是仍然有許多檔名是無法讀取的, 因此還是不要以中文作為網頁儲存的檔案,圖檔也是。

WWW: RFC 1738


21.31. wget 中文檔名變亂碼

中文檔名在平常的情況下會被編碼, 但是在 --cut-dirs 時又是正常的, 那就大家用 --cut-dirs, 或是使用 outta-port/wget

wget -r -np -nH --cut-dirs=3 ftp://freebsd.sinica.edu.tw/pub/statue/test/
  測試.txt                                                               
wget -r -np -nH -nd ftp://freebsd.sinica.edu.tw/pub/statue/test/
  %B4%FA%B8%D5.txt                                              
wget "ftp://freebsd.sinica.edu.tw/pub/statue/test/*"
  %B4%FA%B8%D5.txt

wget 的安裝:

# cd /usr/ports/outta-port/wget
# make install clean

由於不知名的原因,可能是為了避開特殊檔名, wget 會自動將抓取檔名的部分用 encode_string 處理過, 所以該 patch 就把被 encode_string 處理成 "%3A" 這種東西, 用 decode_string 還原成 ":", 並套用在目錄與檔案名稱的部分,decode_string 是 wget 內建的函式。

WWW: http://sunsite.auc.dk/wget/


21.32. 如何造字?

造字的問題,目前筆者會的只有造點陣字而已。

首先,找到您要改的字型檔,在這邊假設是 kc15f.bdf,我只會改 BDF 格式的, 然後把點陣的格式嵌入該字型檔內。

以 '文' 為例,先得到他的 ENCODING:

# echo "文" | hexdump
0000000 e5a4 000a
0000003
# printf %d 0xa4e5
42213

以及他的 ucs-2:

# echo "文" | iconv -f big5 -t ucs-2 | hexdump
0000000 8765 0a00
0000004

在這邊以 (方方土) 為例,他的 big5 code 是 0x964f(38479),ucs-2 code 是 0x5803。

先找到 CHARS 13867,因為要加新字, 所以改成 CHARS 13868

然後到這個檔的最後,找最後一個 STARTCHAR 加一,在這邊是 STARTCHAR 13868 為最後一個,所以也加一, 然後將字塞最後,並在 ENDFONT 之前。

STARTCHAR 13869
ENCODING 38479
SWIDTH 31 0   
DWIDTH 16 0   
BBX 15 15 1 -3
BITMAP
1830  
1424  
FEFE  
2040   
3C78
2488
4488
5528
8A10
0180   
0110   
3FF8
0100
0104   
FFFE   
ENDCHAR

然後跟著以下的方式作來讓 X 認識您所造的字:

# cd /usr/X11R6/lib/X11/fonts/encodings/large/
# cp big5.eten-0.enc.gz big5.eten-0.enc.gz.bak
# gunzip big5.eten-0.enc.gz
# chmod 644 big5.eten-0.enc
# vim big5.eten-0.enc
0x964F  0x5803
# chmod 444 big5.eten-0.enc
# gzip big5.eten-0.enc
# cd /usr/X11R6/lib/X11/fonts/local
# fetch kc15f.bdf
# mkfontdir
# crxvt -fm -kc-fixed-medium-r-normal--16-160-72-72-c-160-big5-0
# perl -e 'print pack("CC", 0x96, 0x4F);'

21.33. 內建 ftpd 的中文問題

Contributed by: Wang.bbs@bbs.ba.mgt.ncu.edu.tw

Last Update: 2003年 4月 1日 周二 12時57分00秒 CST

Q: 4.7 Release 內建 ftpd, 例如「程」、「逢」第二個 character 是 '{' 的中文字就下載不下來?

A: 因為 FreeBSD 內建的 FTPD 會將 { 和 \ 的字去除, 如果您想要讓這些中文字可可以正常使用請修改 /usr/src/libexec/ftpd/ftpcmd.y 找到下列這一行:

GLOB_BRACE|GLOB_NOCHECK|GLOB_QUOTE|GLOB_TILDE;

將它改成:

GLOB_NOCHECK|GLOB_TILDE|GLOB_NOESCAPE;

再重新 compile ftpd

% man 3 glob
     GLOB_NOESCAPE    By default, a backslash (`\') character is used to
                      escape the following character in the pattern, avoiding
                      any special interpretation of the character.  If
                      GLOB_NOESCAPE is set, backslash escaping is disabled.

     GLOB_BRACE       Pre-process the pattern string to expand `{pat,pat,...}'
                      strings like csh(1).  The pattern `{}' is left unex-
                      panded for historical reasons (and csh(1) does the same
                      thing to ease typing of find(1) patterns).

也弄成了 outta-port,有興趣可以直接到 outta-port/ftpd 底下安裝。


21.34. pure-ftpd 的中文問題?

Contributed by: leeym.bbs@bbs.leeym.com (Yen-Ming Lee)

可能是 client 的問題 (例如 ncftp 就會吃掉 \), 也可能是 server 的問題. 如果確定 client 沒問題的話, server (pure-ftpd) 要改的部分為:

--- src/ftpd.c.orig     Tue Feb 10 23:29:48 2004 
+++ src/ftpd.c  Tue Feb 10 23:30:34 2004 
@@ -660,9 +660,11 @@ 
        return -1; 
    } 
    while (*namepnt != 0) { 
+#if 0 
        if (ISCTRLCODE(*namepnt) || *namepnt == '\\') { 
            return -1; 
        } 
+#endif 
        if (dot_ok == 0) { 
            if (*namepnt == '/') { 
                 namepnt++;

21.35. .chm 怎麼在 Unix 底下觀看?

Contributed by: mison@bbs.ee.ntu.edu.tw

Last Update: 2003年 4月16日 周三 16時35分53秒 CST

目前都是將 .chm 解壓縮成 .html 後再,再用瀏覽器去看。 現有的 .chm 方案有兩個,一個是 misc/chmlib 以及 chmtools,不過兩套都沒有解壓縮的工具, 或是不適合中文的處理,因此 mison 利用 chmtools 寫了一個 chm2html 的工具,如果有興趣的人可以試試看。

outta-port/chm2html 的安裝:

# cd /usr/ports/outta-port/chm2html
# make install clean

在這邊以一個 braille.chm 為例子, 用 chm2html 來解壓縮,並解壓縮到 braille 的目錄下:

chm2html < braille.chm braille/

在 braille 的目錄下會產生一個 braille.hhc 的目錄檔, 接著再用 hhc2html.pl 將索引檔轉出來:

hhc2html.pl braille/braille.hhc > braille/braille.html

也可以用 hhc2bookmark.pl 將目錄檔轉成 mozilla 的 bookmark 來用:

hhc2bookmark.pl --lo=on --root=`pwd`/brailee brailee/braille.hhc > bookmark.html

中文檔名的部分,只是把 chm 裡的 unicode 轉成 big5, 這樣只是讓解出來的中文檔名可以讓人看得懂,hyper link還是會有問題。

參數 --lo=on 是指定把大寫檔名改為小寫, 這是因為 chm2thml 是根據 chm 檔頭解出檔案, 而 hhc 目錄、chm 檔頭裡的檔名,兩者可能不一致。 所以在第一步 chm 解開後、 自行判斷要不要加 --lo=on

bookmark 只是一個暫時的解決方案,可以用 hhc2bookmark.pl 轉出來的檔案替換原來 ~/.mozilla 裡的 bookmark, 這樣可以模擬 MircoSoft IE 的 text/sitemap;其實有更好 的方法, mozilla 有提供 sidebar 和 IE sitemap 類似,或是在 mozilla 讀取到特殊的副檔名或是 MIME Type 時去自動呼叫 chm2html 並作成網頁來讀去。

hyper link 檔名不一致的問題可能千奇百怪,轉目錄的程式是用 perl 寫的, 若有需要,請自行修改 perl 程式裡的 regular expressions

在將 hhc2html.pl 產生的目錄加到 sidebar 中, 測試的結果,使用如下的方式可以加入 sitebar:

javascript:window.sidebar.addPanel('title','http://','');

但是把 http:// 換成 file:// 就沒辦法加進去,所以還是直接執行 chm.sh braille.chm 囉。

在特殊檔名或是MIME Type的處理得感謝 bv1al 提供的靈感, 使用 mozilla 也可以用類似方法開啟。

mozilla pull-down toolbar:
        Edit->Preferences->Navigator->HelperApplications->NewType:
                Description of type: MicroSoft HTML Help
                File extension:      chm
                MIME Type: chemical/x-chemdraw application/mshelp
                Application to use:  chm.sh

不過以上的方法在筆者測試下,並沒有作用,如果有人成功請告訴我一下。

MicroSoft 有個程式可以 HTML 轉 CHM,也可以轉回來,應該是這個 HTMLHELP.EXE ,在 MicroSoft 下處理 HTML 與 CHM 互轉時蠻好用的。

WWW: http://66.93.236.84/~jedwin/projects/chmlib/

WWW: http://www.speakeasy.org/~russotto/chm/


21.36. konsole 字距過大

Settings -> Font -> Custom -> Terminal 12

Settings -> Size -> 80x24 (VT100)

Figure 21-3. konsole snapshot


21.37. Cyrus-IMAP 將 8-bit 文字轉換為 X 的問題

Contributed by 小郭 (jimkou.bbs@bbs.sayya.org)

Last Update: Sat May 17 12:09:58 2003

mail/cyrus-imapd2-2.1.13 架設郵件伺服器,有些信件的主旨全部變成了 XXXXXX ? 這是 RFC 2047 的標準不相容 8Bit 主旨的郵件。 目前能用的辦法是將標題編碼,這是比較標準的做法, 或是修改 source code 兩個檔案 imap/lmtpengine.c 以及 imap/message.c 讓收信的 IMAPD 支援 8Bit 主旨。

--- imap/lmtpengine.c.orig Sat May 17 14:45:39 2003
+++ imap/lmtpengine.c   Sat May 17 14:48:07 2003
@@ -739,6 +739,7 @@
     state s = NAME_START;
     int r = 0;
     int reject8bit = config_getswitch("reject8bit", 0);
+    int ignore8bit = config_getswitch("ignore8bit", 0);
 
     if (namelen == 0) {
    namelen += NAMEINC;
@@ -854,7 +855,7 @@
               form. */
            r = IMAP_MESSAGE_CONTAINS8BIT;
            goto ph_error;
-           } else {
+           } else if (!ignore8bit) {
            /* We have been configured to munge all mail of this
               form. */
            c = 'X';
--- imap/message.c.orig    Fri Apr 18 06:49:49 2003
+++ imap/message.c  Sat May 17 14:46:27 2003
@@ -229,6 +229,7 @@
     int n;
     int sawcr = 0, sawnl;
     int reject8bit = config_getswitch("reject8bit", 0);
+    int ignore8bit = config_getswitch("ignore8bit", 0);
     int inheader = 1, blankline = 1;
 
     while (size) {
@@ -264,7 +265,7 @@
            /* We have been configured to reject all mail of this
               form. */
            if (!r) r = IMAP_MESSAGE_CONTAINS8BIT;
-           } else {
+           } else if (!ignore8bit) {
            /* We have been configured to munge all mail of this
               form. */
            *p = 'X';

最後再編輯 ${PREFIX}/etc/imapd.conf 並增加一行:

ignore8bit = yes

RFC 2047 MIME (Multipurpose Internet Mail Extensions) Part Three: Message Header Extensions for Non-ASCII Text

WWW: http://asg.web.cmu.edu/cyrus/


21.38. 英文字和中文字等寬?

Contributed by firefly

TrueType 字體分成兩種,一種是可變字距,也就是每個字符寬度不一樣, 比如 "x" 與 "i",這兩個字符就不等寬,它是在每個字符中紀錄該字符的寬度, 大多數的 TrueType 都是這種格式。

另一種就是固定字距。也就是每個字符寬度都一樣,這樣顯示或打印時, 會有對齊效果,比較美觀,在英語環境中,不會有任何問題,聰明的您, 知道問題所在了吧。

沒錯!CJK 的等寬字體,包含『半寬英數字符』與『全寬 CJK 字符』, 字型引擎會把全寬字寬度套用在半寬字上頭,造成半寬字看起來間距太大, 這就是問題所在。

這裡提供一個方法,讓字型引擎忽略 CJK 字體指定的寬度, 您可以將以下這段內容,複製到 ~/.fonts.conf 中:

<match target="font"> 
        <test target="pattern" name="lang" compare="contains"> 
                <string>zh-tw</string> 
                <string>zh-cn</string> 
                <string>ja</string> 
                <string>ko</string> 
        </test> 
        <test name="spacing" compare="eq"> 
                <const>mono</const> 
        </test> 
        <edit name="globaladvance" mode="assign"> 
                <bool>false</bool> 
        </edit> 
</match>

以上那段的意思是:當遇到 CJK 字型,又是等寬時, 忽略系統內定寬度,這樣,當系統使用 CJK 等寬字時, 便不會再有間距過大的問題。

因為 MingLiU 宣稱自己是 monospaced 字型,但實際上它有兩種寬度: 中文的全形以及英文的半形。

    <match target="font">
        <test name="family"><string>MingLiU</string></test>
        <edit name="globaladvance"><bool>false</bool></edit>
    </match>

還可以改 spacing,0 是 proportional 的 spacing,100 是 mono, 110 是 charcell。

    <match target="font">
        <test name="family"><string>MingLiU</string></test>
        <edit name="spacing"><int>0</int></edit>
    </match>

在 X11 Core Font 的部分則是必須修改 XLFD, 將 -m- 改成 -p-。


21.39. pw 開帳號碰到'@'問題?

Q: pw 在開帳號時,只要註解有 '@' 即有下面訊息:

# pw useradd -n test -c "一" -d /home/test -g nogroup -m -s /bin/tcsh -w yes
pw: invalid character `@' at position 1 in gecos field

A: 徵求解答中。


21.40. mount_smbfs 不能用中文 share 名稱?

Q: mount_smbfs 使用中文 share 名稱遇到如下的錯誤:

mount_smbfs: unable to open connection: syserr = No such file or directory

A: 如果沒有分享的打算, 現在大多用 smbutil 和 mount_smbfs 來看網芳.

# sbmutil view //killbee-xp
Share        Type       Comment
-------------------------------
遊戲人間     disk
# mount_smbfs -N //killbee-xp/遊戲人間 /mnt/遊戲人間
# df
Filesystem                 1K-blocks     Used   Avail Capacity  Mounted on
//ROOT@KILLBEE-XP/遊戲人間  27872740 22286264 5586476    80%    /mnt/遊戲人間

不過, 有些特殊的中文字無法 mount 上來, 但是大多數(?)的中文是可以的. 會產生問題的原因是 libsmb.so 的 nls_str_upper 函式將中文內的 [a-z] 轉成 [A-Z] 了. 以下是個 contrib/smbfs/lib/smb/nls.c 的 dirty hack.

char *
nls_str_upper(char *dst, const char *src)
{
    char *p = dst;
    int big5 = 0;

    while (*src) {
        if(big5)
            *dst++ = *src++;
        else
            *dst++ = toupper(*src++);
        if(!big5 && *(src-1) < 0)
            big5 = 1;
        else
            big5 = 0;
    }
    *dst = 0;
    return p;
}

接著按照以下的方式更新 libsmb.so:

# cd /usr/src/lib/libsmb
# make
# make libsmb.so.1
# make install

21.41. flash 中文顯示?

Q: Mozilla瀏覽flash網頁時中文字變成亂碼?

A: 徵求解答中。


21.42. KDE 下使用 GTK 的字型問題?

Q: 在 KDE 下運行 GTK 的軟體字型怪怪的?

A: 執行 gnome-settings-daemon &,並用 gnome-control-center 來設定字型。


21.43. 檔名大寫換小寫,含子目錄?

Contributed by edwar

big5 中文及特殊字元應該也都沒問題。

find ./t -depth \
| perl -ne 'chomp;m</[^/]*$>;$d=$`;$_=$f=$&;'\
's/([\x80-\xFF].)|(\w)/$1\l$2/g;system "echo",$d.$f,$d.$_ if $f ne $_'

21.44. opera 無法輸入中文?

因為 CTRL_SPACE 已經被設定為 opera 的熱鍵了,所以無法順利的切換到中文模式, 可以用 File → Preferences → Mouse and Keyboard → Keyboard Setup → Opera Standard → Edit → Application (defaults) → Space ctrl (Go to homepage) → Delete 將他去掉。

另一種奇怪的解法是設定 setenv LC_COLLATE POSIX。


Chapter 22. 文字編碼

22.1. 中文編碼


22.1.1. Big5 文字內碼表

#!/usr/bin/perl
#
# create code table (Big5) [\0xa1-0xf9][\0x40-\0x7e\0xa1-\0xfe]
#

# 繁體中文 (Big5) 文字內碼表的產生
open (OUT, "> big5tbl.txt"); select OUT;

# 文字內碼表的產生
for ($c1 = 0xA1; $c1 <= 0xF9; $c1++) { # $c1 是第一個位元 [\0xa1-\0xf9]

    # 開頭的表示
    print "\ncode  ";
    print "+0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F\n";

    $head = "";
    $line = "";
    $c = 1; # 1行文字數(16文字)

    for ($c2 = 0x40; $c2 <= 0xFF; $c2++) { # $c2 是第二個位元

        # 開頭第一個字
        if ("$head" eq "") {
            $head = sprintf ("%02X%02X ", $c1, $c2);
        }

        # 文字的表示
        $line .= " "; # 文字間的空白
        if (($c2 == 0x7F) || ($c2 == 0xA0) || ($c2 == 0xFF)) {
          $line .= '  ';
        } else {
          $line .= pack("CC", $c1, $c2);
        }

        if ($c == 16) { # 16文字表示一行
            print "$head$line\n";
            $head = "";
            $line = "";
            $c = 1;
            if ($c2 == 0x7F) { $c2 = 0x9F; } # 跳過 [\0x80-0x9f]
        } else {
            $c++;
        }
    }
}
close(OUT);

exit;

Chapter 23. 感謝

本份文件的完成,要感謝以下的熱心人士 :-)。 更要感謝致力為 FreeBSD 中文化的許多人們。因為他們的努力,今日 我們在 FreeBSD 上才有舒適的中文環境能使用。 可以從 CVSROOT-ports/access 得到所有 ports committer 的加入時間。

以下是 FreeBSD ports maintainers。

find /usr/ports -name Makefile -print|xargs grep MAINTAINER|grep \\.tw|sort|uniq|less
cut -d\| -f6 /usr/ports/INDEX | grep \.tw\$ | sort | uniq -c

以下是 GNU/Linux 相關的貢獻者。

另外感謝台灣 ftp[1-n].tw.freebsd.org 的 mirror 站維護者, 有了這些主機和頻寬讓我們能夠省許多到國外抓取檔案的時間, 使得 FreeBSD 能夠快速流通於台灣。 台灣也是全世界 mirror 站密度最高的。