本マニュアルでは、groff ドキュメントフォーマットシステムの一部である GNU バージョンの pic について記述します。 pic は、 troff か TeX の入力ファイルに埋め込まれたピクチャの記述を troff か TeX が解釈できるコマンドに変換します。 ピクチャは .PS で始まる行から開始され、 .PE で始まる行で終了します。 .PS と .PE に狭まれた領域以外は、変更せずに素通しします。
.PS と .PE マクロの適切な定義はユーザに任されています。使用している マクロパッケージが適当な定義を提供しない場合 (たとえば、古いバージョンの -ms マクロの場合)、 -mpic マクロから取り出すことができます。 -mpic マクロではピクチャ は中央寄せになります。
他のバージョンの pic でサポートされている以下のオプションは無視されます。
\centerline{\box\graph}
実際、vbox は高さが 0 ですから (これは \vtop で定義されています)、この表現ではピクチャの上の空間が ピクチャの下の空間よりも若干大きくなります。
\centerline{\raise 1em\box\graph}
はこの問題を避けます。
vbox が正の高さおよび 0 の深さを持つようにするには (例えば LaTeX の graphics.sty が使うように)、次のマクロを文書中に定義します:
\def\gpicbox#1{%
\vbox{\unvbox\csname #1\endcsname\kern 0pt}}
そうすれば、\box\graph の代りに単に \gpicbox{graph} と書けます。
TeX ドライバで tpic スペシャルバージョン 2 をサポートするものを使用する必要が有ります。
\ で始まる行は透過的に通されます; 単一の % が行末に追加され、望まれない空白が出るのを防ぎます。 この機能を使用して、安全にフォントを変更したり \baselineskip の値を変更できます。 この方法以外で実行すると、望ましくない結果となるでしょう; 各自のリスクで実行して下さい。 ピリオドで始まる行は特別には扱われません。
.PS copy thru % circle at ($1,$2) % until "END" 1 2 3 4 5 6 END box .PE
.PS circle at (1,2) circle at (3,4) circle at (5,6) box .PE
reset
.PS x = 3 y = 3 [ x := 5 y = 5 ] print x " " y .PE
という形式に対しては
も許されます。 この場合、 anything には { と } がバランスして登場する必要が有ります。 文字列に X が含まれる場合、 { と } のバランスが悪い場合に対応します。
x ^ y
(指数)
sin(x)
cos(x)
atan2(y, x)
log(x)
(base 10)
exp(x)
(base 10, ie
10^x)
sqrt(x)
int(x)
rand()
(0 から 1 までの乱数を返す)
rand(x)
(1 から
x
までの乱数を返す;
勧められません)
srand(x)
(乱数の種を設定する)
max(e1, e2)
min(e1, e2)
!e
e1 && e2
e1 || e2
e1 == e2
e1 != e2
e1 >= e2
e1 > e2
e1 <= e2
e1 < e2
"str1" == "str2"
"str1" != "str2"
曖昧さを避けるために、 文字列の比較式はあるコンテキストにおいては括弧で括られる必要が有ります
は 2 インチの長さの線を現在の方向へ描きます。 文字 `i' (または `I') は無視されます。 他の計量単位を使用したい場合は、 scale 変数を適切な値に設定してください。
ピクチャの最大の幅と高さは変数 maxpswid, maxpsht により指定されます。 初期値は 8.5 および 11 です。
数を表すのに科学技術的表記が可能です。 例えば
テキストの属性は組み合わせることが可能です。 例えば
ブロックが検査される深さには制限は有りません。 例えば
円弧はコンパスポイントを持ち、円弧が部分となるような円から決定されます。
円と円弧は点線や破線で書くことが出来ます。 TeX モードではスプラインを点線や破線で書くことが出来ます。
ボックスの角を丸くできます。 rad 属性は、角を構成する 1/4 円の半径を指定します。 rad, diam 属性が与えられない場合、 boxrad が半径として使用されます。 初期値では boxrad は値 0 です。 角の丸いボックスは点線や破線で書くことが出来ます。
.PS 行は 2 番目の引数としてピクチャの最大の高さを指定できます。 幅として 0 が指定された場合には、 ピクチャのスケーリングファクタの計算においては幅は無視されます。 GNU pic は常に水平方向と垂直方向ともに同じ縮尺で スケーリングしていることに注意して下さい。 これは 高さが指定された場合に水平方向と垂直方向を同じ縮尺でスケーリングしない DWB 2.0 pic と異なります。
テキストオブジェクトはそれぞれに関連づけられた見えないボックスを持っています。 テキストオブジェクトのコンパスポイントはこのボックスによって決定されます。 オブジェクトに関連づけられた暗示的な動きもこのボックスによって決定されます。 このボックスの寸法は width, height 属性から定まります; もし width 属性が与えられていない場合は幅は textwid となります; もし height 属性が与えられていない場合は高さは textht となります。 初期値では textwid, textht は値 0 です。
クォートされたテキストが使用される場合、
という形式の式を (ほとんどの場所で) 使用可能です; これは引数を format に従い整形したものを出力します。 format は printf(3) に記述されている文字列であり、 与えられる数及び引数に適切なものである必要が有ります。
オブジェクトを描画する時に使用する線の太さは linethick 変数で制御可能です。 これは線の太さをポイントで指定します。 負の値はデフォルトの太さを使用することを意味します: TeX 出力モードでは、8 ミリインチを使用することを意味します; TeX 出力モードで -c オプション使用時には、線の太さには .ps 行で指定されるものを使用することを意味します; troff 出力モードでは、ポイントサイズに比例する太さを使用することを意味します。 値 0 ではデバイスがサポートするもっとも細い線で描画します。 初期値は -1 です。 また、 thick[ness] 属性が有ります。 例えば
circle thickness 1.5
は 1.5 ポイントの太さの円を描画します。 線の太さは scale 変数の値の影響も .PS 行における高さの影響も受けません。
ボックス (角の丸いボックスを含みます)、 円、楕円は塗りつぶすことが可能であり、 属性 fill[ed] で指定します。 これは値が 0 から 1 の式をオプションで引数として取ります; 0 は白で塗りつぶし、1 は黒で塗りつぶし、その間の値では 適切な灰色で塗りつぶします。 1 より大きい値も使用可能です: この場合、現在のテキスト及び線に使用している灰色で塗りつぶします。 通常これは黒ですが、出力デバイスが変更する機構を持っているかも知れません。 引数を取らない場合、 fillval 変数の値が使用されます。 初期値では 0.5 です。 invisible 属性はオブジェクトの塗りつぶしには影響しません。 塗りつぶされたオブジェクトに関連づけられたテキストは、 塗りつぶし後に追加されます。 このため、塗りつぶしによってテキストが隠されることは有りません。
3 個の追加修正子を使用して、色付きオブジェクトを指定可能です: outline[d] は外周の色を設定し、 shaded は色で塗りつぶし、 colo[u]r[ed] は両方を設定します。 これら 3 種のキーワードは、色を指定するサフィックスを期待します。 例えば次のようになります。
circle shaded green outline black
現在のところ、TeX モードでは色サポートは使用できません。 groff で既定義の色の名前はデバイスマクロファイルにあり、例えば ps.tmac にあります。 追加の色は、 .defcolor リクエストで定義可能です (詳細は troff(1) マニュアルページを参照してください)。
TeX モードで vbox 名を変えるには、擬似変数 figname (これは実際には特別に構文解析されるコマンドです) をピクチャ中で設定します。 例:
.PS
figname = foobar;
...
.PE
このピクチャは、ボックス \foobar 中で使用可能となります。
pic は、ピクチャの開始時に、 グリフと塗りつぶしの色がデフォルト値に設定されていることを仮定しています。
変数 arrowhead が非 0 でありかつ TeX モードが有効もしくは -x オプションが与えられている場合には、 矢印の頭を実線の三角形で描画します。 初期値では arrowhead は 1 です。
pic の troff 出力はデバイス独立です。 それゆえ -T オプションは冗長です。 全ての数値はインチとして扱われます; 数値は troff マシン単位としては解釈されません。
オブジェクトは aligned 属性を取りえます。 これは後処理が grops で実行される場合のみ機能します。 オブジェクトに関連づけられたテキストで aligned 属性を持つものは全て オブジェクトの中央において回転されます。 それゆえ、オブジェクトの始点から終点への方向にあわせられます。 この属性は始点と終点が同じオブジェクトに関しては効果が有りません。
nth と言う表現が許されている場所では `expr'th という表現も許されます。 'th は単一のトークンであることに注意して下さい: ' と th の間には空白を入れてはなりません。 使用例は以下です。
for i = 1 to 4 do { line from `i'th box.nw to `i+1'th box.se }
ページ情報をなにも加えずに、このファイルを groff に喰わせることが必要です。 どの .PS と .PE のリクエストが実際に呼ばれたのかを確認してください。 例えば、mm マクロパッケージはページ番号を追加しますが、 これは非常に迷惑です。 当面、標準の groff を、どのマクロパッケージも働かないようにして呼び出します。 または、独自のリクエストを定義します。 例えば、なにもしないようにするには次のようにします:
.de PS .. .de PE ..
groff 自身は、他のグラフィックスファイル書式への直接変換はできません。 しかし、 groff オプション -Tps の使用により、ピクチャを最初に PostScript® 書式へ変換すれば、 多くの可能性があります。 この ps ファイルは、BoundingBox 情報が無いので、 それ自身は非常に使用し易いというものではないので、 他の変換プログラム、通常は ps2other や pstoother といった名前のものに喰わせます。 さらに、PostScript インタプリタ ghostscript (gs) は、 次のオプションで呼び出し可能な組み込みのグラフィックス変換デバイスを持ちます:
使用可能なデバイス一覧を得るには、次のように呼び出します:
Encapsulated PostScript ファイル書式 EPS がより重要になっており、 また変換が過去のようには簡単ではないので、正しい仕事を行う ps2eps という名前の変換ツールの存在を知っていると良いでしょう。 これは、 gs にパッケージされているツール ps2epsi よりも良いものです。
ビットマップグラフィックス書式用には、 pstopnm を使用します。結果の (中間出力の) PNM ファイルは、 netpbm パッケージを使用することにより、 実質的に任意のグラフィックス書式に変換可能です。
Tpic: Pic for TeX
Brian W. Kernighan,
PIC --- A Graphics Language for Typesetting (User Manual).
AT&T Bell Laboratories, Computing Science Technical Report No. 116
<http://cm.bell-labs.com/cm/cs/cstr/116.ps.gz>
(revised May, 1991).
ps2eps
は CTAN ミラーで入手可能であり、例えば次のところから入手可能です:
<ftp://ftp.dante.de/tex-archive/support/ps2eps/>
W. Richard Stevens - Turning PIC Into HTML
<http://www.kohala.com/start/troff/pic2html.html>
W. Richard Stevens - Examples of picMacros
<http://www.kohala.com/start/troff/pic.examples.ps>
fillval の解釈は 10th edition Unix と互換性がありません。 10th edition Unix は 0 を黒、1 を白と解釈します。
PostScript® は、Adobe Systems Incorporation の登録商標です。