10-4. X Window System について '99/10〜 (1) Xウィンドウの概要 * X Window System の概要 Linux の台頭によって X Window System が巷で話題に登るようになった。 XFree98 がど うの XFree86 がどうのと雑誌でもよく載っているのがそれである。以下X Window System をただのXとか X Window、Xウィンドウとか呼ぶことにする。 Xウィンドウというのは 実はかなり昔からある。MIT が開発を進めていて、1987年にX11 として発表している。 それ以来Xはずっとフリ−ソフトとして、MIT のXコンソ−シアムという組織から配布さ れているのである。90年に X11R4 が、91年には X11R5 がリリ−スされている。メジ ャ−・リリ−スとしては最後の X11R6 が94年5月に出ている。 XFree86 はリリ−スさ れたソ−スの中に、DOS/V パソコン用のとして含まれている。 普通 X11R5 などと書くが、 正しくは X Window System Version 11, Release 5 である。 Xは一応 X11R5 でほぼ完成したといってよい。丸い時計の oclock。国際化への対応によ って日本語のような2バイト・コ−ドも扱えるようになったし、スケ−ラブルフォントも 一応出るようになった。X11R6 はどこがどうなっているのか。あまり関係ない気がするが。 とりあえずキ−ワ−ドを並べておこう。マルチスレッド対応。 XGL, XIL, XCU4 といった 拡張Xサポ−ト。Double Buffer Extension。3次元グラフィックス用の API である PEX サポ−ト。国際化の強化である。また Fresco というXツ−ルキットが目玉とも言われて いる。これはC++で記述されている。OMG CORBA 機能も持っているらしい。スタンフォ −ド大学の "InterViews" を元にして開発されたということだ。で、何がうれしいのか。 これまでのXツ−ルキットはC言語で書かかれ、形態的にはオブジェクト指向を取り入れ ていた。X Toolkit Intrinsics(Xt), Athena Widget Set(Xaw) この上の Motif などのプ ログラミングである。ただでさえXのプログラミングはややこしいのに、C言語で強引に オブジェクト風にしているので、ますます困難なものにしていたといえる。 Fresco がX をさらきに設計したものであるなら、やや期待してもいいかも知れない。しかしもう十分 遅い。時代は Java に移りつつある。Xの難しさは表示、入力だけのことにクライアント サ−バの仕組みを使っていること。見てくれを制御するリソ−スの設定が幾通りもあるこ と。それにキ−ボ−ド制御のキ−マッピングに、端末制御の関係も十分ややこしい。 ユ−ザにとってもウィンドウ・マネ−ジャのように選択肢が幾つもあるのも実は問題であ る。標準でも uwm, mwm, twm とある。それが SGI のマシンでは mwm を拡張した 4Dwmと いう具合で、さらに端末画面は kterm でなく winterm と来る。選択肢はいらない。十分 チュ−ニングしたロバストな操作ができればそれでいいのである。最後、Xのいいとこも 述べておこう。EWSで作成したXのアプリケ−ションをパソコンで動かすことができる こと。パソコンでXサ−バを稼働させれば、 例えば Windows の一つの画面がX端末にな るのである。パソコン用のXサ−バソフトは ASTEC-X など幾つかの市販品がある。 使っ てみた感じは全然EWSなんかと遜色ない。Windows とXの混在環境ができることもいい。 ※XFree98 はNECの PC-98 シリ−ズ用に XFree86 を国内の人が改造したものである。 * クライアントサ−バ方式 Xの一番分かりにくい所がこれである。Xでは普通のクライアンとサ−バの役割が逆転し ているのだ。Xのアプリケ−ションを表示する役目をするのがXサ−バ。最近ではあまり 見ないようになったが、Xサ−バの機能だけもったコンピュ−タでX端末というのがあっ た。Xのアプリケ−ションは Xlib や Motif などで、 画面描画にマウス&キ−ボ−ド入 力を記述したプログラムである。プログラム自体の実行は、プログラムを起動したマシン でなされる。 下の例では Apollo から INDY のディスプレイに xeyes を表示させている。 ps コマンドで両者のデ−モンを見ると、Apollo で xeyes が走っているのが分かる。 非 常に妙な感覚である。INDY のマウスを動かすと "目" が動くわけである。 マウスとキ− ボ−ドの制御は INDY のXサ−バの管轄になっている。 apollo$ xeyes -display indy1:0.0 << indy1 に xeyes を表示する。 indy1% xhost << アクセスを許可するホストを指定する。 access control disabled, clients can connect from any host INET:localhost ↑ INET:indy1 今は indy1 にどこからでもアクセスできる。 indy1% xhost +apollo << indy1 に apolloからアクセスを許可してみる。 apollo being added to access control list % xhost - で他のマシンから全くアクセスできないようにする。 % xhost + でどのマシン からでもアクセスできるようにする。特定のマシンだけ許可するのは % xhost +apollo と いうようにマシン名を指定する。逆は -apollo である。マシンのデフォルトは、多分どこ からもアクセスできない。一度確認しておくとよい。 * 国際化とは 日本語などの2バイトコ−ドが扱えるようにすることや、プログラミング的には Xlib や ウィジットなどのXの関数が locale 対応することである。X11R5 で国際化対応はされて いたが、X11R6 でより完成したということだろう。ここで locale の基本的なことを確認 しておこう。下記は日付を表示するプログラムである。setlocale( LC_TIME,"" ) は環境 変数からロケ−ルをとることを意味する。% setenv LANG ja_JP.EUC にすると日付は日本 語表示されることになる。setlocale( LC_ALL,"C" ) とセットすると、英語のロケ−ルと なる。プログラム中に setlocale を入れないとどうなるか。環境変数も無視し、 ただの 英語ロケ−ルになる。LC_ALL と LC_TIME の関係は、LC_ALL の中に LC_TIME は含まれる。 日付や時刻だけ制御するのであれば LC_TIME 指定でいいということである。 文字につい ては LC_CTYPE がある。 #include IRIX 5.3 で確認。コンパイルは % CC test.C。 ロケ #include −ルのXの関数は XSupportsLocale() で True/False #include で判断する。 ヘッダ−は #include 。 void main( void ) { setlocale( LC_TIME,"" ); // setlocale( LC_ALL,"C" ); time_t t;time( &t ); // 現在の暦時間を得る。 tm* tm = ::localtime( &t ); // 現地時間になおす。 char line[1024]; // ロケ−ル固有のフォ−マットで時刻を表示する。 strftime( line,sizeof(line),"%c",tm ); printf( "%s\n",line ) ; } % setenv LANG ja_JP.EUC << マシンによって ja_JP.EUC 部分の指定は異なる。 % a.out 1999年10月28日(木曜日) 10時36分04秒 JST % setenv LANG C % a.out Thu Oct 28 10:34:52 1999 * パソコンでXウィンドウを使う `23/06 1996年初め、(株)アステックの ASTEC-X を購入したことがある。 まだ出始めたばか りだった。Windows パソコンで動作するXサ−バ。EWSのX端末になる。Windows の画 面の中の1つのウィンドウがX端末になる。価格はさっき確認したところ 78,000 円。評 価版がサイトにある。(株)マクニカの Excced というのも同じ価格である。X-Win32 PC Xサ−バというのは 54,000 円である。 X-Win32 は2002年7月の NetWorld+Interop TOKYO でお試しの CD-ROM を配っていた。国内外の大学で結構使われているとのこと。こ れら最近のXサ−バの特徴は、SSH 接続による暗号化通信ができる。インタ−ネット接続 の高速化により暗号化機能と相まって、 外出先から内部ネットの Linux ホストなどのX アプリケ−ションを使うことができる。IPv6 対応というのも出てきている。以下ASTEC-X での使い方の種類を示す。多分、他のソフトも同じことだと思う。 1) telnet で他のUNIXホストにロッグインして、 環境変数 DISPLAY でパソコンのホ スト、ディスプレイ番号を指定する。 このホストには使おうとしているXのアプリケ −ションがある。 2) XDMCP( X Display Manager Connection Protocol ) を使う。 このやり方だとASTEC-X を起動するとUNIXのロッグイン画面が出て来る。 パソコンのXサ−バとUNIX で稼働している xdm デ−モンとやりとりする。XDMCP は 177 番ポ−トを使用する。 % cat /etc/services | grep 177 << IRIX 5.3 で。Solaris 2.6 には無かった。 xdmcp 177/udp # X Display Mgr. Control Prot. 3) xon コマンドを使うやり方。rsh コマンドをパソコンから発して、 指定したXのコマ ンドをUNIXホスト側で起動する。これは、あまり用いられることはないと思う。 パソコン UNIX Linux UNIX ----------- ----------- ----------- ----------- |Xサ−バ | 表示 | UNIX 版 | |Xサ−バ | 表示 | UNIX 版 | |(ASTEC-X)| <----- | Xアプリ| |(XFree86)| <----- | Xアプリ| ----------- ----------- ----------- ----------- | | | | -------------------------------- -------------------------------- << 商用のXサ−バを使う >> << これならタダで使える >> Linux Linux UNIX UNIX ----------- ----------- ----------- ----------- |Xサ−バ | Linux 版 |Xサ−バ | 表示 | UNIX 版 | |NFSサ−バ| |(XFree86)| Xアプリ |(XFree86)| <----- | Xアプリ| <----> | デ−タ | ----------- ----------- X ----------- NFS ----------- | | | | ------------- --------------------------------------------------- << X端末なし直接に使う >> << こんなアクセスの仕方も >> [ 更にこんなやり方も ] 最近の動き、2001年か2002年ぐらいか、いつからか知らないが、コンピュ−タを エミュレ−ションするソフトが出てきた。Windows パソコンの中で、Linux のOSを動か すとか、またその逆のことであるとか。ASTEC-X や XFree86 なんかは、 パソコンの中で 動かすXサ−バだけのソフトである。こちらはOSそのものを同時に動かす、エミュレ− ションするのである。 いろいろ手法はあるようだが、めぼしいので VMware、Virtual PC、 Wine、UML( User Mode Linux )、Cygwin といったのがある。 VMware Workstation 4 日本語版 5.1 万円。 > ネットワ−ルド(株)、http://www.networld.co.jp/。1台のパソコンで複数のOSを同 時に起動できる。仮想マシン構築ソフト。スナップショット、共有フォルダ機能あり。 Cygwin Windows でのUNIX環境構築のフリ−ソフト。 > UNIXのコマンドや GNU gcc など。XFree86 も動く。 Xのアプリケ−ションをコン パイルする。Cygwin 対応PC Xサ−バ、X on Windows 2、8,800 円、2003/03/27発売。 (株)ホロン、http://www.holonsoft.co.jp/。 * "よい子のC++" に書いたのを参考に `2h/11/E 追記 // ( m1.C ) プッシュボタン・ウィジットを作成する /*------------------------------------------------------------------------------ DOMAIN/OS SR10.4 で X-Window 11.4 には、Motif1.1 と UEDK1.1.3 と C++2.1 の組合 わせが有効。Motif1.0は関数のプロトタイプ宣言がされていなくてC++では使えない。 $ CC m1.C -A inlib,/lib/xmlib1.1 -o m1 Apollo 特有のやり方 % CC -o m1 m1.C -L/usr/X11/lib -lXm -lXt -O -v 通常の UNIX でのやり方 ------------------------------------------------------------------------------*/ #include #include // exit use #include #include void printCB() { cout << "hello katou kun\n" ; } void exitCB() { exit(0) ; } void main( int argc,char **argv ) // XtInitialize, XtMainLoop は Motif1.0 の { // ときのル−チンです。Motif1.1 でも使える。 Arg args[2] ; Widget top,bb,pb0,pb1 ; // "M1" は.Xdefaults リソ−スでの識別子です。 top = XtInitialize( argv[0],"M1",NULL,0,(Cardinal*)&argc,argv ) ; bb = XmCreateBulletinBoard( top,"bb",NULL,0) ; XtManageChild(bb) ; pb0 = XmCreatePushButton( bb,"pb0",NULL,0 ) ; XtManageChild(pb0) ; XtSetArg( args[0],XmNx,200 ) ; XtSetArg( args[1],XmNy,50 ) ; pb1 = XmCreatePushButton( bb,"bye",args,2 ) ; XtManageChild(pb1) ; XtAddCallback( pb0,XmNactivateCallback,(XtCallbackProc)printCB,NULL ) ; XtAddCallback( pb1,XmNactivateCallback,(XtCallbackProc)exitCB,NULL ) ; XtRealizeWidget( top ) ; XtMainLoop() ; } (2) Xのフォントの基礎 * 概要 EWSには一杯 X Window 用のフォントが入っている。もうめったに使わないようなのも ある。なんだったら削除したいところだが、そうもういかない。Xのアプリケ−ションが どのフォントを実際使うのか調べあげるのは大変である。しかし一杯あるのはアルファベ ットであって、日本語のフォントは今でも少ない。 かつて k14 という漢字フォントしか なかった、これは日本の学生が1人で作ったものだった。Xのフォントは伝統的に 75dpi, 100dpi, misc というのがある。これらはフォントを集めたディレクトリの名前で、 Xで はディレクトリ単位でフォントの使用可否を制御する。 misc には日本語フォントの k14, kanji16 など、それにカ−ソルのイメ−ジなども入っている。よくXのフォントを指定す るのに fixed, kanji6, r14 とかするが、これらは別名であって本当は XLFD( X Logical Font Description ) という長たらしい論理的フォント名がある。 % kterm -fk kanji16 -fn 8x16 -fr r16 & ( k14,a14,r14 とか ) 漢字全角 英数字半角 JISロ−マンカナ半角 INDY のXフォント・ディレクトリ/usr/lib/X11/fonts/misc をのぞいてみる。xxx.pcf.Z というファイルがたくさんある。これが個々のフォントである。fonts.dir というファイ ルもある。 これは misc ディレクトリの中で % mkfontdir とやってできたファイルであ る。別にファイルの内容は、分かれば自分で書いてもいい。fonts.dir の先頭にはフォン トの数が書かれ、続いてフォントの実際のファイル名と論理的フォント名の対応が書かれ る。フォントを指定するには --mincho-meium-r-... と書くわけである。これではたまら んということで、 フォントの別名を定義できるようにしたのが fonts.alias ファイルで ある。これは自分で記述する。例えば % xfd -fn k14 とだけで済む。 別名は幾つでも付 けることができるので、k14 の他に kanji14 というのもあるかも知れない。 % cat fonts.dir 75dpi の 14 Point の全角漢字フォント 108 ↓ ↓ ↓ ↓ Km14.pcf.Z --mincho-medium-r-normal--14-130-75-75-c-140-jisx0208.1983-0 % cat fonts.alias k14 --mincho-medium-r-normal--14-130-75-75-c-140-jisx0208.1983-0 r14 --mincho-medium-r-normal--14-130-75-75-c-70-jisx0201.1976-0 半角ロ−マ字、仮名 現在どのフォントが使えるのかは xlsfonts でリストできる。 本当に使えるかは xfd で 確認した方がいいかも。リストされても実際には使えない場合も、ままある。 他 xset q, xset fp+, xset fp rehash といったコマンドを扱う。後で詳しく説明する。xlsfonts コ マンドは何かと使う。% xlsfonts -fn '*-14-*' とやれば、ともかく 14 Point のフォン トをリストしてくれる。* は0個以上の文字、? は1個の文字とマッチングする。論理的 フォント名の各部を少し説明しておく。 medium-r は文字の太さは中間で r(roman) 体を 意味する。r の他 i(italic), o(oblique) がある。c-140 の c(charcell) 部は文字の間 隔で、c は固定ピッチである。 p(proportinal) は可変ピッチで詰まった文字表示にいい。 それに m(monospaced) があり、固定ピッチとなっている。 -------------------------------------------------------------------------------- X11R5 でのフォントの特徴は、フォントサ−バとスケ−ラブルフォントをサポ−トしたこ と。それにフォントセットの概念を導入し、マルチバイト、ワイド文字をサポ−トしたこ とである。Xlib の XmbDrawText() はマルチバイト、XwcDrawText() はワイド文字を表示 する関数である。フォントセットはこれらに関連した概念で、日本語を表示するためには 漢字やひらがなの全角とアルファベットなど半角の文字コ−ドを1セットにすることであ る。マルチバイト形式では全角、半角混合の文字列を隙間なく表示できるわけである。ワ イド形式は半角も全角の幅で表示する。X11R6 になって、回転それに傾いた文字表示もで きるようになった。さらに Kg14.pcf.Z などフォントの圧縮フォ−マットもOKとなった。 -------------------------------------------------------------------------------- [ グリフとメトリック ] あまり説明が載ってない用語。グリフは glyph で絵文字を意味する。 コンピュ−タでは 実際の文字のビットマップ・イメ−ジのことである。特にスケ−ラブルフォントでは重要 になる話である。メトリックは metric で辞書を引いてもメ−トルだとか、音韻とかだけ しか出で来ない。文字の各部の細かな寸法のことである。i と j では j の方が下に出て いる。たとえばその寸法がいわゆるメトリックである。文字の幅、文字と文字の間隔、文 字列を囲む四角のサイズなどいろいろある。hinting というのも出て来る。多分だが、こ れはアウトラインフォントをラスタライズする際のパラメ−タみたいなものでないか。4 〜5年前の「日経バイト」に TrueType フォントなんかの詳しい記事があったように思う。 * Xフォントサ−バ X11R5 からXフォントサ−バという機能が追加された。XのクライアントはXのフォント をXサ−バとXフォントサ−バからもらうことができるようになった。Xフォントサ−バ は自マシンで稼働している必要はなく、他のマシンで稼働しているものでもよい。 X11R5 ではXフォントサ−バは fs という名前で 7000/tcp を暫定的に使っていた。X11R6 では xfs, 7100/tcp になっている。Xフォントサ−バによるフォントを使うには、% xset +fp tcp/server:7100 というようにするだけである。こうすると % xset q で出てくるフォン トパスの前に、パスが追加される。つまり例えば、Xサ−バ経由の 100dpi とXフォント サ−バ経由の 100dpi のフォントが使える状態になる。Xフォントサ−バの 100dpi が初 めに検索され、実際に表示されることになる。 % /usr/bin/X11/xfs & << Xフォントサ−バのデ−モン xfs。 % xset +fp tcp/indy1:7100 << indy1 のところは xfs が稼働しているマシン。 % xset fp rehash % fslsfonts -server indy1:7100 -fn "*-14-*" << xlsfonts と同じ機能。 % fstobdf -server indy1:7100 -fn "fixed" > temp.bdf << BDF 形式にできる。 % setenv FONTSERVER indy1:7100 << fsinfo -server indy1:7100 が fsinfoでいい。 % fsinfo << INDY ではこれらは /usr/bin/X11 にある。 /usr/lib/X11/fs/config << xfs はこの制御ファイルを見ている。 ---------------------------------- |# font server configuration file |clone-self = on 75dpi,misc,Type1 |use-syslog = off ↓ |catalogue = /usr/lib/X11/fonts/100dpi/, ..,/usr/lib/X11/fonts/Speedo/ |error-file = /var/X11/fs/fs-errors |# in decipoints |default-point-size = 120 |default-resolutions = 75,75,100,100 * フォントの登録例 INDY の misc にある日本語フォントを2つ寄せてきて、フォントパスに追加してみる。 % cd /usr/nix; mkdir hont; cd hont % cp /usr/lib/X11/fonts/misc/Km14.pcf.Z . % cp /usr/lib/X11/fonts/misc/Kg14.pcf.Z . % mkfontdir << fonts.dir ファイルを作成する。 % ls Kg14.pcf.Z Km14.pcf.Z fonts.dir % cat fonts.dir 2 Kg14.pcf.Z --gothic-medium-r-normal--14-130-75-75-c-140-jisx0208.1983-0 Km14.pcf.Z --mincho-medium-r-normal--14-130-75-75-c-140-jisx0208.1983-0 % xset +fp /usr/nix/hont/ << フォントパスを追加する。 % xset q << フォントパスがどうなったか見る。 | Font Path: /usr/nix/hont/,/usr/lib/X11/fonts/100dpi/, ..,/usr/lib/X11/fonts/misc/ $ xlsfonts -display indy1:0.0 << Apollo から INDY の xlsfonts を実行した。 | --gothic-medium-r-normal--14-130-75-75-c-140-jisx0208.1983-0 << hont の方。 --gothic-medium-r-normal--14-130-75-75-c-140-jisx0208.1983-0 << misc の方。 | hont の方のフォントをアクセスしているはず。 $ xfd -fn "--gothic-medium-r-normal--14-130-75-75-c-140-jisx0208.1983-0" * フォント管理用コマンド $ xset +fp /usr/lib/X11/fonts/misc/ << フォントパスを登録する。 $ xset -fp /usr/lib/X11/fonts/misc/ << フォントパスを削除する。 $ xset fp default << フォントパスをデフォルトに戻す。 $ xset fp rehash << フォントパスを登録、削除した場合にやる。 $ xset q << 登録されているフォントパスが出る。他にも Keyboard Control、bell、Pointer Control、 Screen Saver、Colors の情報も出す。 * フォントのフォ−マット BDF( Bitmap Distribution Format ) > Xコンソ−シアムから配布される X Window System は BDF フォントが入っている。メ −カはこれからそれぞれ実装する。xfed は BDF フォントのエディタである。修正だけ できるのか、文字を追加できるのか不明。Apollo の edfont コマンドは追加もできた。 PCF( Portable Compiled Format ) > X11R6 での形式。効率よく表示できるように BDF を変換したフォント。バイナリ形式。 % bdftopcf -o myfont.pcf myfont.bdf SNF( Server Natural Format ) > X11R4 までのフォントファイルの形式。bdftosnf というコマンドがある。Apollo には stmkfont というのもあり BDF-to-SNF の変換などいろいろできる。 フォント情報を表 示するコマンドもある。$ showsnf -g /usr/apollo/japan/X11/fonts/kf16.snf 他にも幾つかある。 Type1 の xxx.pfa、Speedo の xxx.spd、TrueType の xxx.ttf とそ の複数形として xxx.ttc などである。ttc は TrueType Collection という。これらは皆 スケ−ラブルフォントで fonts.dir と fonts.scale ファイルがディレクトリに入ってい る。BDF,PCF,SNF では fonts.dir を作成するのに mkfontdir という一般的なコマンドが ある。TrueType の fonts.dir ファイル作成は、Linux 用には mkttfdir というフリ−ソ フトがある。EWSでは TrueType 自体、実装依存になっているので、 単に TTF ファイ ルと mkttfdir で作った fonts.dir をコピ−してきても使えないと思った方がいよい。 * INDY のXのフォント % cd /usr/lib/X11/fonts;ls -F 100dpi/ Speedo/ ps2xlfd_map << ps2 .. この2つ何?。 75dpi/ Type1/ ps2xlfd_map.japanese CID/ misc/ $ xset q -display indy1:0.0 | Font Path: /usr/lib/X11/fonts/100dpi/,/usr/lib/X11/fonts/75dpi/,/usr/lib/X11/fonts/misc/, /usr/lib/X11/fonts/Type1/,/usr/lib/X11/fonts/Speedo/,/usr/lib/X11/fonts/CID/ (3) Xのスケ−ラブルフォント * 先ずは表示してみる X11R5 からスケ−ラブルフォントを表示できるとあるから、 手元の INDY の X11R6 で何 がしか表示できるはずである。スケ−ラブルフォントは TrueType だけでなく、いろいろ な形式のものがある。そこは後で説明するとして、とりあえず何か画面に出し、大きくな ったりするか見てみよう。 スケ−ラブルフォントはフォント形式の XLFD の PIXEL_SIZE, POINT_SIZE, AVERAGE_WIDTH が 0 のものをいう。 実際には解像度 X,Y も 0 の場合がほ とんどで、% xlsfonts '*-0-0-0-0-*' でリストできる。INDY にも入っているフォントで、 Speedo と Type1 がアウトラインフォントということらしい。 % xset q でフォントパス を確認し、/usr/lib/X11/fonts/Speedo/ ディレクトリの fonts.dir を見て、とりあえず font0648.spd というフォントを表示してみる。 POINT_SIZE AVERAGE_WIDTH ↓ ↓ % xfd -fn "-bitstream-charter-medium-r-normal--0-0-0-0-p-0-iso8859-1" ↑ ↑↑ PIXEL_SIZE RESOLUTION_X,Y PIXEL_SIZE : 文字の高さ。PIXEL 単位。 AVERAGE_WIDTH : 平均的な文字幅。1/10 PIXEL 単位 RESOLUTION_X,Y: フォントを作成したディスプレイの解像度。基本的には関係ない。 先ず上記で表示が出きたら、次は PIXEL_SIZE, POINT_SIZE どちらかに適当な値をいれて みよう。PIXEL_SIZE だと 50 ぐらいまでにした方がいい。 xfd の画面がとんでもなく大 きくなってしまう。 PIXEL_SIZE, POINT_SIZE 両者の値が連動することにも注意されたい。 xfd 画面の上部に論理的フォント名が出るが、指定したのと少し違っているのも気になる。 -normal--50-500-72-72-p-0- とか言うように出る。まあ、そういうもんです。 もし xfd がエラ−で実行できない場合、xfs のフォントサ−バを使ってみる。 本来なら xlsfonts でリストされるフォントはXのアプリケ−ションで使えるはずなのだが。どうもスケ−ラ ブルフォントは X11R5 ではフォントサ−バ経由でないと表示できなかったらしい。 そう した名残というか、実装がマシンによって違うのだ。 % xfs &; xset +fp tcp/indy1:7100 とする。fp+ でなく +fp とすること。これでフォン トサ−バ経由の Speedo を先に見るようになる。xfd だけでは面白くない。何か文字を表 示するプログラムを用意しよう。 もし xfd などXアプリケ−ションでスケ−ラブルフォ ントの表示が遅い場合、グリフを全部展開しないオプションがあるようである。Linux で は % startx -- -deferglyphs 16 とかやるそうだ。 アウトラインのフォントの文字全部 をビットマップのイメ−ジに変換する手間は、考えただけでも大きい。 #include IRIX 5.3 の Type1 にある Tymes-Elfin.pfa #include を表示するようにしたプログラムである。日 本語を表示するには XCreateFontSet で、基 main( int argc,char **argv ) 本的には漢字、ロ−マ字、英語の3個のフォ { ントをセットする。そしてマルチバイト表示 Display *dpy ; Window win,root ; するなら XmbDrawText 関数を使う。 GC gc ; XFontStruct *fs ; int screen,black,white ; % cc test.c -lX11 -lXt; a.out dpy = XOpenDisplay( "unix:0" ); root = XDefaultRootWindow( dpy ) ; screen = XDefaultScreen( dpy ) ; black = XBlackPixel( dpy,screen ) ; white = XWhitePixel( dpy,screen ) ; /* x,y,width,height */ win = XCreateSimpleWindow( dpy,root,100,100,500,200,0,black,white ); XMapWindow( dpy,win ); /* 文字の色、背景の色 */ fs = XLoadQueryFont( dpy, "-sgi-tymes-medium-r-normal-elfin-100-0-0-0-p-0--ascii" ); ↑ ↑ ↑ gc = XCreateGC( dpy,win,0,NULL ); これらの値を変えてみること。 XSetFont( dpy,gc,fs->fid ); XDrawString( dpy,win,gc,100,100,"katou",5 ); /* 表示の文字列と長さ */ XFlush(dpy); /* x,y */ /* Xサ−バに送り込む */ sleep(3); /* 3秒間待って終わる */ XFreeGC(dpy,gc); XDestroyWindow(dpy,win); XCloseDisplay(dpy); } ん?、X11R6 から文字を任意の角度で表示できるようになったはず。どうやってプログラ ムで指定するのだ。XDrawString でも XmbDrawText でも角度を指定する項目はない。goo で何か適当なサンプルはないものかと探したが無かった。かろうじて(株)創夢のサ−ビ ス、http://www.soum.co.jp/service/xdp/TD1/vol1-contents.html に X11R6 のドキュメ ントがあった。どうも X11R6 の国際化によるX出力メソッド、XOM(X Output Method) と X出力コンテキスト、XOC(X Output Context) で制御するらしい。文字の高さと幅はXLFD で指定し、角度は XSetOCValues() 関数の XNOrientation 引数で設定し、XDrawString等 で表示するということか。XNOrientation は、出力コンテクストの設定値ともいうらしい。 それに出力メソッドというのもある。分からん。もうXでのプログラミングは限界である。 ん−。任意の角度ではどうも表示できない。角度に関連するXの変数は Xlib.h で定義さ れている XOrientation しかない。これは XOMOrientation_XXX という列挙型なのだ。つ まり0とか1とかいう数字しか指定できないことになる。X11R6 のリリ−スノ−トを改め て見ると水平と垂直での文字表示と書いてあった。ダメだこりゃ!。 om = XOpenOM( dpy,NULL,NULL,NULL ); oc = XCreateOC( om,XNBaseFontName,"fixed",NULL ); XOrientation aa = XOMOrientation_TTB_LTR; << ここしか角度指定のとこはない。 XVaNestedList st = XVaCreateNestedList( NULL,XNOrientation,&aa,NULL ); XSetOCValues( oc,st ); XmbDrawString( dpy,win,oc,gc,0,0,"katou",5 ); << 大阪の大学の先生よりメ−ル >> 傾いた文字がこうすれば表示できるよとメ−ルを頂きました。小生確認してませんが、と もかく紹介しておきたいと思います。次のようにすると、90度傾いた文字を表示できる そうです。但し2文字書くと重なってしまうとのこと。本当は文字列全体を傾けたいんだ よね。1文字しかダメというのが本当なら、1文字ずつ座標計算して配置するはめになる。 [0 50 ~50 0] の意味、[a b c d] として a=(x,y)*cosθ,b=(x,y)*sinθ,c=-(x,y)*sinθ, d=(x,y)*cosθ による。マイナス記号 '-' の代わりに '~' を使うようです。[a b] は x 方向のベクトルの一次変換後の投影先、[c d] は y方向のベクトルの一次変換後の投影先 なので、回転のみならず様々な形に加工が可能です。試して下さいとありました。 char fontname[100]; Font font; sprintf( fontname, "-adobe-courier-medium-r-normal--[0 50 ~50 0]-*-*-*-m-*-iso8859-1"); font = XLoadFont( dpy,fontname ); XSetFont( dpy,gc,font ); XDrawString( dpy,win,gc,100,100,"A",1 ); `2h/08/E 追記。その先生からのメ−ルで。 それに蛇足ですが、つまらない自作ソフトを http://www.uopmu.ees.osakafu-u.ac.jp/~yabu/soft/original で配っています。 暇があ れば、お試し下さい。上の出所は http://hp.vector.co.jp/authors/VA007663/topaz/。 * フォントの種類 1) スケ−ラブルフォント a) アウトラインフォント -- TrueType, TYPE1, Speedo など。 b) ベクタ−フォント -- 線だけで表わされている。 2) ビットマップスケ−リング -- ビットマップフォントを強制的に伸縮させる。 3) ビットマップフォント -- Xの普通のフォントなど。 現在スケ−ラブルフォントというとアウトラインフォントを言う場合が多い。Windows や Macintoch 用の TrueType のことである。実際は上記のように TrueType, TYPE1, Speedo などの形式もあるが、日本語のフォントがないことには始まらない。別にアウトラインフ ォントのように重いフォントでなく、ベクタ−フォントもあってもいいと思うのだが、X では聞いたことがない。 ビットマップスケ−リングは X11R5 からサポ−トされた機能で ビットマップフォントを強引に伸縮させるものである。試した人の話では遅いし、字が汚 くて使用には耐えないようである。 対応するフォントは *-0-0-75-75-c-0-* などという のである。一応ビットマップフォントなもんで作成時の解像度があるわけだ。 Sun の Solaris 2.6 には、商用の TrueType フォントが入った。リコ−の HGゴシック 体B、HG明朝体L、平成明朝体W3Hである。 Ryumin-Right, GothicBBB-Medium に別 名定義されている。他 Type0, Type1, CID フォントも入っている。TrueType フォントは Xと Display Postscript で使える。xfs 関係なしに % xfd -fn "-ricoh-hg ...1983-0" で表示した。 インスト−ルされている日本語フォントは、F3, JIS X0212 TYPE1, BDF フ ォント、それに XGL ストロ−クフォントとなっている。F3 と XGL って何。TrueType は /usr/openwin/lib/X11/locale/ja/X11/fonts/TT にあった。fonts.dir を以下に示す。こ れ以外 fonts.scale、fonts.alias ファイルもあった。 fonts.dir ---------------------------- こんな、名前にブランクってあり? |5 ↓ |HG-MinchoL.ttf -ricoh-hg mincho l-medium-r-normal--0-0-0-0-m-0-jisx201.1976-0 |HG-MinchoL.ttf -ricoh-hg mincho l-medium-r-normal--0-0-0-0-m-0-jisx208.1983-0 |HG-GothicB.ttf -ricoh-hg gothic b-medium-r-normal--0-0-0-0-m-0-jisx201.1976-0 |HG-GothicB.ttf -ricoh-hg gothic b-medium-r-normal--0-0-0-0-m-0-jisx208.1983-0 |HeiseiMin-W3H.ttf -rioch-heiseimin-w3-r-normal--0-0-0-0-m-0-jisx0212.1990-0 ちょっと変わったスケ−ラブルフォントも紹介しておこう。 SGI のマシンにある OpenGL の前身である GL で使える日本語グラフィックス・ライブラリ JGL。ギフトパッケ−ジに 含まれていて、フリ−で使っていいのかも。japanese_sys.sw.gifts に入っている。サン プル・プログラムには、奥行きのあるスケ−ラブルフォントが回転するのがある。ただし GL の画面の中でスケ−ラブルフォントを表示できるのであって、 ただのXのアプリケ− ションでは表示できない。惜しい。 % ls /usr/people/4Dgifts/japanese_sys/jgl Makefile hen.c nsg.c showfont.c README mkasciibdf.c redmarble.rgb showpoly.c glkanji.c mkkanjibdf.c sample.c tomozou.xbm * いろいろな試み X Window でスケ−ラブルフォント、特に我々にとって日本語のを表示させるのは、 なか なか難しい話だった。市販EWSでも IRIX 5.3 ではダメだし、 IRIX 6.4 ならひょっと して。まあ Solaris 2.6 はOKだけどという按配である。フリ−ソフトの Linux などの 世界では、97年頃からいろいろな試みがなされた。 ちょうど Linux に火がつく少し前 ぐらいからである。"「JUS主催・鰻食って酒飲もうツア−」日記、'98/05/24" という のにそこら辺りのいきさつが書かれている。Windows パソコン用の TrueType フォントを Xで、何とか使えないかと模索した様子がよく伺える。大きくは TrueType のフォントを ビットイメ−ジに展開するためのラスタライズをどのようにやるかということであった。 当時ラスタライズのために VFLib と FreeType というフリ−ソフトが、 UNIXで開発 されていた。VFLib では限定的に、Ghostscript などで TrueType を使えるようにしたり、 VFlib をXサ−バに組み込むプロジェクト X-V Project が起こったりした。 XFree86 と いう Linux 用のXサ−バを修正したわけである。結局 VFlib より FreeType の方がきれ いに出るということで、VFlib も FreeType を組み入れた格好になっている。そして現在 FreeType が XFree86 に入って、 TurboLinux などでは最初から TrueType フォントを表 示できるようになっているのである。ちょっと気になるのは、http://www.freetype.org/ のどしょっぱなの画面で、FreeType のラスタライズは Apple の特許に抵触するとクレ− ムがついているとあった。今さら Apple は何を言うのか、気が知れん!。 a. 純粋な VFlib を使う。 > あまり字がきれいでないらしい。Ghostscript で対応できる。 b. FreeType を使った VFlib を使う。 > FreeType の方がきれいに出る。 c. FreeType を使った X-TT をXサ−バに組み込んで使う。 > XFree86 でしか今のところ使えないみたい。 d. FreeType を使った X-TT をXフォントサ−バ xfs 経由で使う。 > XFree86 でなくてもUNIXなら何でもいい。 DOS/V の Linux マシンでは、Windows のOSと共有できることから Windows に入ってい る TrueType を使いたいという話がある。概ね TrueType はそのマシンでのみ使用が想定 されている。Windows と Linux での共有パソコンでは、 同一マシンにフォントがあると いうことから Linux 環境下でも、TrueType フォントを使っても問題はないという見解に なっている。 ただし Windows 用の TrueType フォントを他のEWSにもってきて使うと いうのはライセンス違反になるようである。フリ−のスケ−ラブルフォントもある。 "渡 辺明朝(書体倶楽部形式)" や "和田研フォント" である。cb2tt とかいうフリ−ソトで 元のフォントから変換した?。他にも Sony と Zeit というのもあるみたいである。 (4) FreeType と VFlib ( INDY IRIX 5.3 ) * FreeType % ftp ring.nacsis.ac.jp ftp> cd /pub/graphics/freetype drwxr-xr-x 5 ftpstaff other 512 Jun 16 00:27 Binary_Packages drwxr-xr-x 3 ftpstaff other 512 Oct 5 11:10 devel -rw-r--r-- 1 ftpstaff other 871699 Nov 23 1998 freetype-1.2.tar.gz -rw-r--r-- 1 ftpstaff other 1426994 Sep 30 04:15 freetype-1.3.tar.gz -rw-r--r-- 1 ftpstaff other 1663081 Sep 30 04:36 ft13.zip -rw-r--r-- 1 ftpstaff other 49054 Jan 28 1998 ft2_os21.zip -rw-r--r-- 1 ftpstaff other 83256 Dec 14 1998 ft2v10w3.zip -rw-r--r-- 1 ftpstaff other 79260 Dec 14 1998 ft2v10w4.zip -rw-r--r-- 1 ftpstaff other 75418 Feb 20 1997 ttfdump-0.5.5.tar.gz % zcat freetype-1.2.tar.gz | tar xvf - % cd freetype-1.2 % /bin/sh << Bourne Shell を使うこと。Makefile で for コマンドを使 % CC=cc << っている。Cコンパイラは GNU のはだめだった。 % export CC % ./configure --enable-static --disable-shared --disable-nls % make << GNU make を使うこと。 % make install /usr/local/lib/libttf.la, libttf.a /usr/local/bin/ftview, fttimer, ftlint, ftdump, << これらはfreetype-1.2/test ftzoom, ftstring, ftstrpnm, fterror にできたテストプログラム。 [ 表示テスト ] テストするには別途 TrueType フォントをとってこなければいけない。以下のところから 拡張子が .gz のをとってきてみた。このア−カイブにはフリ−のフォントである"渡辺明 朝(書体倶楽部形式)" と "和田研フォント" が入っている。何やら変な拡張子のファイル もあるが、テストに必要なファイルは展開した中の xxx.ttf ファイルだけである。 テス トプログラムは直接 TTF ファイルにアクセスするので、 X-TT だとか xfs だとかは関係 ない。ここんとこ、結構重要だと思いませんか?。 http://www.linux.or.jp/~ishikawa/linux/dists/FreeType/ % ls -al drwxr-xr-x 1024 10月 15日 16時54分 freetype-1.2 '98/10/15 にゲット -rw-r--r-- 871699 10月 15日 13時52分 freetype-1.2.tar.gz drwxr-xr-x 512 10月 15日 16時54分 xtt-fonts-0.19990222 -rw-r--r-- 2811203 10月 15日 16時53分 xtt-fonts_0.19990222-3.tar.gz % ls -F 00README.FIRST.ja README.watanabe-vec.ja wadalab-gothic.ttf README.wadalab.eng debian/ watanabe-mincho.ttf README.wadalab.ja fonts.alias README.watanabe-dnp.ja fonts.dir % ftview 12 watanabe-mincho.ttf << これで画面が出て文字が表示されているはず。 12 は文字のサイズ。いろいろ変えてみよう。 % ftlint 12 wada.ttf << wadalab-gothic.ttf をコピ−して wada.ttf wada.ttf: OK. にしてみた。フォントをチェックしている。 % ftstring 12 wada.ttf katou_desu << 指定した文字列を表示する。Unicode ないと ダメ。UNIXは EUC だから表示できない。 * Xアプリケ−ションへの利用 Ghostscript で日本語を表示してみると結構時間がかかる。これがスケ−ラブルフォント で VFlib を使って表示するとなれば、もっと時間がかかるのでないか。FreeType のXク ライアントプログラムの ftview だとすぐ表示した。試していて、自作のXアプリケ−シ ョンに FreeType を組み込むのは、そう難しい話ではないように見えた。へたに xset コ マンドやら fonts.dir ファイルやら、 あるいはXのリ−スファイルなどをいじるよりシ ンプルにできる。X Window の難しさは、 大方フォントの扱いとリソ−スファイルの扱い に起因している。ロケ−ルもやっかいさを増している。たかだか文字を表示するだけの話 だ。サ−バもクライアントもへちまもない。しかし既存のXクライアントでは、 X-TT の Xサ−バまたはXフォントサ−バが使えればそれにこしたことはない。Xクライアントに は何も手を加える必要はないのだから。 * 参考 http://X-TT.dsl.gr.jp/index-ja.html > The X-TrueType Server Project。ここから幾つかのリンクをたどれる。 http://www.freetype.org/ > FreeType ライブラリ。TrueType レンダリングエンジン。 「UNIX MAGAZINE」'99/01 P.47〜 "UNIX知恵袋 X-TT" > XFree86 V 3.3.2 に対応するパッケ−ジでしか基本的には X-TT は使えない。 「Software Design」 1999/07, "特集 Linux で暑中お見舞い申し上げます" > 第1章 Linux のデスクトップパワ−、第2章 X-TT と VFlib で TrueType フォントを 使う。何書いてあるかさっぱり分からん。 * VFlib VFlib は Ghostscript に組み込んで使われる話が有名である。 vfontcap は VFlib 用の フォント制御ファイルで、記述はめんどくさそうである。VFlib のバ−ジョンには2と3 の系列がある。何がどうなのかまでは知らない。VFlib のラスタイズ部分を FreeType に 変えたものとか?。README と読むと、VFlib 2.23.0 と 3.4.0 を /pub/TypeHack ディレ クトリのパッケ−ジにも入れたとある。フォントの表示テストには vtest, ktest という のがある。暇な人は試してみられたい。 % ftp gull.se.hiroshima-u.ac.jp ftp> cd pub/VFlib drwxr-xr-x 2 50 ftp 512 Nov 16 1998 VFlib-1 drwxr-xr-x 3 50 ftp 512 Dec 1 1998 VFlib-2 lrwxrwxrwx 1 root wheel 11 Aug 18 07:22 VFlib-3 -> ../TypeHack ftp> ls VFlib-2 -rw-r--r-- 1 50 ftp 57285 Jan 28 1994 VFlib-2.00.tar.gz -rw-r--r-- 1 50 ftp 227158 May 27 1994 VFlib-2.16.2.tar.gz -rw-r--r-- 1 50 ftp 301477 Sep 3 1995 VFlib-2.20.1.tar.gz -rw-r--r-- 1 50 ftp 319524 Dec 31 1995 VFlib-2.21.tar.gz drwxr-xr-x 2 50 ftp 512 Nov 16 1998 VFlib-2.22-PATCHES | -rw-r--r-- 1 50 ftp 524788 May 16 1996 VFlib-2.22.tar.gz -rw-r--r-- 2 50 ftp 501257 Sep 14 1998 VFlib2-2.24.0.tar.gz -rw-r--r-- 2 50 ftp 497585 Dec 24 1998 VFlib2-2.24.1.tar.gz -rw-r--r-- 1 50 ftp 19057 Nov 15 1995 dvi2nwp.lsz-1.44-1.45.tar.gz -rw-r--r-- 1 50 ftp 91369 Jun 20 1995 dvi2nwp.lsz-1.44.tar.gz -rw-r--r-- 1 50 ftp 45542 Jul 23 1996 dvi2nwp.lsz-1.45-NWP543-PATCH (5) MagicPoint によるプレゼン `22/06 * MagicPoint の概要 ざっと INDY IRIX 5.3 にインスト−ルして、サンプルを実行してみた。 なかなかきれい に表示してくれるではないか。文字が横からすっと出て来るというのもできるし、書式も 比較的、簡単みたいである。日本語のスケ−ラブルフォントで、大きな漢字やひらがなも ちゃんと表示する。しかし、このマシンでは表示に少し時間がかかるかなという感じがし た。かかるといっても、数秒のことだが。MagicPoint、機能としては結構いろいろできる みたいである。今回は、とりあえずインスト−ルして、どんなものか見るだけに留めてお く。sample ディレクトリを覗くと、sample-jp.mgp、tutorial-jp.mgp など日本語でのサ ンプルがある。漢字コ−ドが問題である。これらのファイルは、JISコ−ドで記述され たプレ−ン・テキストである。 EWSでEUCコ−ドで書いても、MagicPoint では表示 されない。WIDE Projectのドキュメントは確かJISコ−ドだったと思い、COPYRIGHT.jp を見たら、Copyright (C) 1997 and 1998 WIDE プロジェクトと書いてあった。 MagicPoint で使う日本語のスケ−ラブルフォントについて少し書いておこう。 ドキュメ ントを読むと、日本語の表示に FreeType か VFlib を使う。デフォルトでは VFlib を使 うようになっている。FreeType というのは、TrueType フォントのフリ−作成版というこ と。MagicPoint の配布サイトには、FreeType の日本語フォントがある。 FreeType のラ イブラリは、http://www.freetype.org/ にあるということ。 それで一体どうすればいい のか。それに、このマシンには以前 freetype-1.2 をインスト−ルした際に、libttf.aが /usr/local/lib/ に入っている。% configure --enable-freetype-charset16 とやれば自 動的に、この libttf.a を見るよう Makefile が作成されるが、 できた mgp コマンドは どうもこの libttf.a を見ないというか、大きな日本語文字は出て来なかった。日本語ス ケ−ラブルフォントをどこから取るか、いろいろあるようだが結局以下のインスト−ルの ようにして、とりあえず表示できた。 参考:「UNIX MAGAZINE」2001/06, P.124〜129, "連載UNIX便利帖 17, MagicPoint で プレゼンテ−ション"、mgp-mode.el は Emacs の中で使える、mgp ファイル作成便利ツ− ルである。mgpnet は HTTP:9999 を作り、WWWブラウザで表示ができる。 * インスト−ル % ftp ftp.mew.org 220 mew.iijlab.net FTP server (NetBSD-ftpd 20010329) ready. Name (ftp.mew.org:katou): anonymous | ftp> cd /pub/MagicPoint ftp> ls -rw-r--r-- 1 user-k ftp-adm 659770 Mar 10 2000 magicpoint-1.07a.tar.gz -rw-r--r-- 1 user-k adm 815048 May 24 2001 magicpoint-1.08a.tar.gz -rw-r--r-- 1 user-k adm 816234 Sep 27 2001 magicpoint-1.09a.tar.gz -rw-r--r-- 1 user-k adm 5281782 Jun 11 2001 ttf.tar.gz % pwd /nix/katou/magicpoint % zcat magicpoint-1.09a.tar.gz | tar xvf - % zcat ttf.tar.gz | tar xvf - % ls -F magicpoint-1.09a/ ttf/ magicpoint-1.09a.tar.gz ttf.tar.gz % ls -F ttf README goth.ttf standard.ttf typewriter.ttf README.jp kochi-mincho.ttf thick.ttf % cd magicpoint-1.09a; ls -F COPYRIGHT USAGE.jp globals.c missing/ COPYRIGHT.jp background.c grammar.y mng.c FAQ config.guess image/ parse.c Imakefile.in config.sub install-sh plist.c README configure keywords.pl postscript.c README.fonts configure.in mgp.c print.c README.fonts.jp contrib/ mgp.h sample/ README.lang ctlwords.awk mgp.man scanner.l RELNOTES ctlwords.c mgp.spec tfont.c SYNTAX draw.c mgp2ps.man unimap.c TODO.jp embed.c mgpembed.man x11.c USAGE font.c mgpembed.pl.in x11dummy.c % ./configure --enable-freetype-charset16 << 日本語の FreeType を使うよ。 % xmkmf -a << これで Makefile ができる。 Makefile libiberty.a を追加する。ないとIRIXで ---------------------------------- は vfork()がないと言ってエラ−になる。 | | ↓ |SYS_LIBRARIES= -L$(srcdir)/image -lmgpimage -lttf .. /usr/local/lib/libiberty.a |EXTRA_DEPLIBS= /usr/local/lib/libttf.a << freetype-1.2.tar.gzをインスト−ル | | した際に、libttf.a が入っているが。 % make << この次に、% make install をやるが、 MagicPointの mgp コマンドはできて % mgp -h いるので,サンプルを実行する分には、 Usage: mgp [opts] mgpfile もうこれで表示することはできる。 -b : Specify background color -d: Demo mode - go through the presentation -g : Set window geometry | * 環境設定とサンプルの実行 % cd /nix/katou/magicpoint/magicpoint-1.09a/sample; ls Imakefile embed-jp.mgp mgp2.jpg sendmail6.mgp Imakefile.in embed.mgp mgp3.jpg tutorial-jp.mgp Makefile gradation-jp.mgp mgp3.xbm tutorial.mgp README gradation.mgp mgprc-sample v6-jp.mgp << IPv6 の説明。 README.jp mgp-old1.jpg multilingual.mgp v6.mgp cloud.jpg mgp-old2.jpg sample-fr.mgp v6header.eps dad.eps mgp-old3.jpg sample-jp.mgp v6header.jpg dad.jpg mgp.mng sample.mgp default.mgp mgp1.jpg sendmail6-jp.mgp tutorial-jp.mgp ------------------------ |%include "default.mgp" << %include "default.mgp" を、xxx.mgp ファイルの |%default 1 bgrad 最初に書くのが決まりみたい。 | | default.mgp ------------------------------------------------------------ |%% This default.mgp is "TrueType fonts" oriented. |%% First, you should create "~/.mgprc" whose contents are: |%% tfdir "/path/to/truetype/fonts" | | /nix/katou/.mgprc 以下ユ−ザ katouで、サンプルを実行する場合で ----------------------------------- ある。~/.mgprcファイルをあらかじめ作っておき、 |tfdir "/nix/katou/magicpoint/ttf" FreeTypeフォントを置いてある場所を示す。これ で日本語も任意サイズで表示してくれる。.mgprc katou % ../mgp tutorial-jp.mgp の設定をしないと、一定の小さな文字で表示する。 * MagicPointプレゼンテーション用のフォント設定について README.fonts.jp から抜粋。 手元に残っていて有益なの March 15, 2001 で `2h/08/E に追記した。 MagicPoint では様々な方法でフォント情報を取得します。X11 サーバからの X フォント の取得をはじめとし、VFlib や FreeType を直接呼び出しによるベクターフォントの利用 もできるようになっています。ここでは MagicPoint で発表する際に気になる大きな文字 を美しく表示する方法について説明します。 1) 標準的な方法 - FreeType ライブラリを利用したスケーラブルフォントの利用 FreeType ライブラリは、FreeType プロジェクト http://www.freetype.org/ が配布しているフリーの TrueType フォント・レンダラーです。 MagicPoint はFreeType ライブラリを組み込むことで、直接 TrueType フォントを利用できるようになります。お 使いシステムに FreeType ライブラリ(libttf.a)がインストールされている場合、MagicP -ointの構築時(configureスクリプト実行時)に自動的に組み込まれるようになっています。 もし、FreeType ライブラリを含まない MagicPoint を作成したい場合は、 ./configure --disable-freetype のように、configureスクリプトの引数に--disable-freetype をつけて実行してください。 TrueType フォント(フリー/商用)の取得方法は、 『TrueType フォントの取得方法』を参 照してください。 - 標準的なX11サーバを利用したスケーラブル・フォントの利用 英文字フォントに関しては、X11サーバは標準で、Adobe Type1形式のスケーラブル・フォ ントを利用できます。Adobe Type1 形式のフォントを使うには、X11 フォントパスが通っ ている場所に(通常は/usr/X11R6/lib/X11/font/Type1) にフォントが置かれていなければ なりません。 お使いのシステムに Type1フォントが含まれていない、もしくは、必要なフォントが欠け ている場合は、ご自分でインストールしてください。X11 標準配付についているもの以外 にも、いくつかのAdobe Type1形式のフォントをから取得することができます。 http://www.gimp.org/fonts.html ftp://ftp.gimp.org/pub/gimp/fonts/ フォントをインストールしたディレクトリ中に、fonts.dir を作成することを忘れないよ うにしてください。fonts.dir は mkfontdir コマンドで作成します。 mkfontdir コマン ドについては man を参照してください。 また、忘れずに Type1フォントが置かれたディレクトリへのフォント・パスを設定するよ うにしてください。システムによってフォント・パスの設定方法が異なることがあるので、 お使いの X サーバのマニュアルを参照してください。 フォントをインストールした直後もしくはフォント・パス通した直後は、コマンドを利用 して X サーバのフォント情報を更新してください。 xset fp rehash 正しくフォントがインストールされているかは、xfontsel および xlsfontsで確認できま す。Type1 フォントは XLFD としては "-adobe-" で始まる名前がついていますので、 そ のフォントがあることを確認してください。 - スケーラブル日本語フォントの利用 - VFlibを利用した場合 VFlib は各種のスケーラブルフォントを扱うことができるフォント・エンジンライブラリ です。ftp://gull.se.hiroshima-u.ac.jp/pub/VFlib/ MagicPoint は VFlib ライブラリを組み込むことで、様々な形式のスケーラブル・フォン トを利用できるようになります。お使いシステムに VFlib ライブラリ(libVFlib.a) がイ ンストールされている場合、MagicPoint の作成時 (configureスクリプト実行時) に自動 的に組み込まれるようになっています。 もし、VFlib ライブラリを含まない MagicPoint を作成したい場合は、 ./configure --disable-vflib のように、configure スクリプトの引数に --disable-vflib をつけて実行してください。 日本語のスケーラブル・フォントを利用しても英文字を美しく出力できますが、日本語の フォントは数千文字のフォントを含んでいる関係上とても大きいので、英語しか利用しな いユーザにとってはちょっと無駄かもしれません。 - FreeTypeの利用 現在のMagicPointではFreeType(http://www.freetype.org/)を利用して TrueType の日本 語を表示することができます。FreeTypeがインストールされている環境で、 ./configure --enable-freetype-charset16 のようにオプションを指定してconfigureを実行してください。この設定により 'tmfont' という directive が使用できるようになります。'tmfont' directiveで、日本語の True -Type フォントを指定してください。tmfont directive の SYNTAX については、 SYNTAX ファイルを参照してください。 (*注)VFlibがインストールされている環境で、FreeTypeを利用して日本語フォントを表示 したい場合は、configure スクリプトの実行時に ./configure --disable-vflib --enable-freetype-charset16 のようにオプションで --disable-vflib を指定して、 VFlib をリンクしないようにして 下さい。 2) 合わせ技 FreeType に対応した X11 サーバによるスケーラブル・フォントの利用 - 英文字フォントのみの利用 フリーの TreeType フォント・レンダラーである FreeType ライブラリが公開されてから、 FreeType を X11 サーバ自体もしくは X11 フォント・サーバ(xfs)に組み込もうする動き が活発化しており、いくつかのプロジェクトが実装を試みています。たとえば、これらの サイトで公開されています。 http://www.freetype.org/projects.htm http://www.gimp.org/fonts.html "Using TrueType fonts with Gimp and X"セクションを参照のこと。 これらの FreeType が組み込まれた X11 サーバを利用すると、様々な TrueTypeフォント を X11 のフォントとして利用できるようになります。 これらのフォントの XLFD を指定 することで、MagicPoint から利用できるようになります。 - 英文字/日本語フォントの利用 日本語 TrueType に関しても、FreeType を組み込んだX11サーバおよび X11フォント・サ ーバで利用しようという動きがあります。たとえば、これらのサイトで公開されています。 http://cclub.cc.tut.ac.jp/~go/unix/xtt.html http://hawk.ise.chuo-u.ac.jp/student/person/tshiozak/x-tt/ これらのフォントの XLFD を指定することで、MagicPointから利用できるようになります。 - VFlib に対応した X11 サーバによるスケーラブル・フォントの利用 VFlib を組み込んだ X11 サーバおよび X11 フォント・サーバを利用して英語や日本語を 表示できます。たとえば、これらのサイトで公開されています。 http://karin.ip.titech.ac.jp/~takagi/X-VFlib/index.html これらのフォントの XLFD を指定することで、MagicPointから利用できるようになります。 - VFlib/FreeType 複合ライブラリによるスケーラブル・フォントの利用 VFlib と FreeType を合わせたライブラリが存在します。VFlib API を利用してFreeType の機能を利用するものや、FreeType を拡張して VFlib 機能を利用できるようにするもの があります。どちらの場合でも、(たぶん) MagicPoint でもそのまま利用できるでしょう。 また、当然ですが、これらのフォント・レンダラを X11 サーバおよび X11 フォント・サ ーバに組み込んでいる場合は、MagicPoint でも XLFD を指定することで X のフォントと して利用できます。