EQN(1)

名称
eqn - troff 用の数式フォーマッタ

書式
eqn [ -rvCNR ] [ -dcc ] [ -Tname ] [ -Mdir ] [ -fF ] [ -sn ] [ -pn ] [ -mn ] [ files... ]

解説
本マニュアルでは、groff ドキュメントフォーマットシステムの一部である GNU バージョンの eqn について記述します。 eqn は、 troff への入力ファイルに埋め込まれている数式に関する記述をコン パイルし、 troff が解釈できる命令列に変換します。通常、 groff に -e オプ ションを指定することで、本プログラムは実行されます。文法は UNIX の eqn ととても似かよっています。GNU eqn の出力は UNIX の troff で処理するこ とができないので、GNU troff を用いる必要があります。コマンドラインにファ イル名が指定されなかった場合は、標準入力から読み込みます。ファイルネー ムとして - を指定した場合も標準入力から読み込みます。

eqn は /usr/share/tmac/eqnrc を検索し、もし存在すれば入力ファイルの処 理に先がけて読み込みを行います。 -R オプションを使うことにより、この動作 を禁止することができます。

GNU eqn は neqn の機能のすべてを提供するものではありません。低解像度の タイプライタのような機器を(単純な入力に対しては十分であるのですが)サポー トしません。

オプション

-C  直後にスペースや改行ではない文字が続く .EQ と .EN を解釈します。

-N  区切り文字から次の区切り文字までの間に改行がくることを禁止します。誤って 閉じる方の 区切り文字をつけ忘れた場合も、以降の処理が正しく行われる可能性が高くなりま す。

-v  バージョン番号を表示します。

-r  サイズを一つだけ縮小します。

-mn 最低のポイントサイズを n とします。 eqn は下付き、上付き文字を n より小さなサイズにしません。

-Tname
    name で指定された機器用の出力を行います。実際は、 name と いう値 1 のマクロが定義されるだけです。普通は eqnrc でこの定義されたマ クロによって出力機器にふさわしい設定がなされます。デフォルトの出力機器 は ps です。

-Mdir
    デフォルトのディレクトリ /usr/share/tmac よりも先に指定したディ レクトリ dir の eqnrc を探します。

-R  eqnrc ファイルを読み込みません。

-fF gfont F コマンドと等価です。

-sn gsize n コマンドと等価です。このオプションは使うべきではありま せん。 eqn は、通常、数式が登場した位置のポイントサイズに数式のサイズをあ わせます。

-pn 上付き、下付き文字が隣接するテキストより n ポイント小さくなるようにし ます。このオプションは使うべきではありません。通常 eqn は隣接するテキ ストの 70% のサイズになるように調節します。

使用例
ここでは、GNU eqnとUnix eqnの違いのみを解説します。

GNU eqnの新しい特徴のほとんどは、TeX に基づいています。 以下には、いくつかのTeX と GNU eqn の違いを記述してあります。 もし、あなたがTeX を知らないならば、無視した方が安全でしょう。

  自動スペーシング

eqn は、数式の中の部分それぞれに対して型を与えて、その型を用いて数式 の中の部分の間の間隔をそろえます。 利用できる型には以下のものがあります。

ordinary
    1や x のような通常の文字

operator
    Σ のような大きな演算記号

binary
    + のような、2項演算子

relation
    = のような関係記号

opening
    ( のような括弧開始記号

closing
    )のような括弧終了記号

punctuation
    , のような句読点記号

inner
    括弧内部に含まれた部分式

suppress
    オートマチックスペーシングによる位置補正を抑制する

式の中の項の型は、以下に示す二つの方法のどちらかで指定されます。

type t e
    式の中の項で e を含むものを、型 t であると指定します。 t は、上述の型の中から指定します。 たとえば、 times は

        type "binary" \(mu

    と定義されます。 マクロ展開を防ぐためにクォーティングする以外は、型の名前はクォー トする必要はありません。

chartype t text
    クォートされていない文字のグループは、個々の文字に分割され、 それぞれの文字の型が検索されます。 この変更で、各文字について、それぞれ格納されている文字の型が変更されます。 この指定方法では、 text にある文字は、型 t を持つようになります。例えば

        chartype "punctuation" .,;:

    という指定は、 .,;: という文字が、それぞれに句読点記号型を持つことを指定 します。 以後、式の中にこれらの文字が出現した場合は、句読点記号として処理 されます。 型 t は、 letter や digit という指定も可能です。この場合 chartype は、文字のフォントの型を変更します。 詳細は、フォントサブセクションを見て下さい。

  新しいプリミティブ

e1 smallover e2
    これは over と似ています; smallover は e1 および e2 のサイズを小さくします; また e1 および e2 と分数の線との間の垂直幅も小さくなります。 over プリミティブは TeX のディスプレイスタイルの \over プリミティブに対応します; smallover は非ディスプレイスタイルの \over に対応します。

vcenter e
    e を数式軸(math axis)にあわせて垂直方向にセンタリングします。 数式軸は垂直位置であり、 これにあわせて + や - といった文字はセンタリングされます; また分数の線の垂直位置にもなります。 例えば、 sum はこのように定義されています。

        { type "operator" vcenter size +5 \(*S }

e1 accent e2
    e2 を e1 上のアクセントとします。 e2 は小文字のレターに対して適正な高さにあると仮定します; e2 は、 e1 が小文字のレターよりも文字の高さが高かったり低かったりする場合には、 必要に応じて下方に移動されます。 例えば hat はこのように定義されています。

        accent { "^" }

    dotdot, dot, tilde, vec, dyad も accent プリミティブを用いて定義されています。

e1 uaccent e2
    e2 を e1 下のアクセントとします。 e2 は下に突き出ていない小文字に対して適正な高さにあると仮定します; e2 は、 e1 が下に突き出している場合、下方に移動されます。 utilde は uaccent を使用して定義されており、 ベースライン下の tilde アクセントとなります。

split "text"
    単なる

        text

    と同じ効果ですが、 text はクオートされているためマクロ展開の対象となりません; text は個々の文字に分割され、それぞれの文字の間に空白が調整されます。

nosplit text

        "text"

    と同じですが、 text はクオートされていないためマクロ展開の対象となります; text は個々の文字に分割されず、それぞれの文字の間の空白も調整されません。

e opprime
    prime の変形であり、 e のオペレータとして作用します。 A opprime sub 1 のような場合、 opprinme は prime とは異なる結果となります: opprime では 1 は prime 文字の真下に挿入され、 A の下付き文字となります (数式版組の形式のように)。 一方、 prime では 1 は prime 文字の下付き文字となります。 opprime が前に付くという事は、 bar と under が前に付くのと同じ事ですが、 後者は accent, uaccent 以外の他の全ての文字よりも高くなります。 クオートされていないテキスト中では、 最初の文字ではない ' は opprime として扱われます。

special text e
    troff(1) マクロ text を使用して、 e から新しいオブジェクトを生成します。 マクロが呼び出されると、 文字列 0s は e の出力を保持します。 また数字レジスタ 0w, 0h, 0d, 0skern, 0skew はそれぞれ e の幅、高さ、深さ、下付き文字のカーニング、スキューを保持します (オブジェクトの subscript kern とは、オブジェクト中の下付き文字がどの程度挿入されるかを表します; オブジェクトの skew とは、オブジェクト上のアクセントが オブジェクトの中央から右側に向けてどの程度離れて配置されるかを表します)。 マクロは 0s を修正することにより、 現在位置における望ましい結果を出力し、 このオブジェクトの幅の分だけ現在の水平位置を増加させます。 数字レジスタは、結果に対応するように修正されている必要があります。

    例えば、数式を `打ち消す' 構造を、斜め線を数式上に描く事によって 実現する場合を考えて見ましょう。

        .EQ
        define cancel 'special Ca'
        .EN
        .de Ca
        .ds 0s \Z'\\*(0s'\v'\\n(0du'\D'l \\n(0wu -\\n(0hu-\\n(0du'\v'\\n(0hu'
        ..

    以上の結果から、式 e を cancel { e } によって打ち消すことができます。

    次はより複雑な構造により、式の周りに箱を描きます:

        .EQ
        define box 'special Bx'
        .EN
        .de Bx
        .ds 0s \Z'\h'1n'\\*(0s'\
        \Z'\v'\\n(0du+1n'\D'l \\n(0wu+2n 0'\D'l 0 -\\n(0hu-\\n(0du-2n'\
        \D'l -\\n(0wu-2n 0'\D'l 0 \\n(0hu+\\n(0du+2n''\h'\\n(0wu+2n'
        .nr 0w +2n
        .nr 0d +1n
        .nr 0h +1n
        ..

  カスタマイズ
数式の外見は多くのパラメータにより制御します。 これらのパラメータは set コマンドで設定します。

set p n
    パラメータ p を値 n に設定します; n は整数です。 例えば、

        set x_height 45

    は、 eqn に対して x の高さは 0.45 ems であると指示します。

    パラメータを以下に示します。 特に記述が無い場合は、値は em の100分の1を意味します。 以下の記述は定義的ではなく説明的になるように意図しています。

    minimum_size
        eqn はこれよりも小さいポイントサイズのセッティングを行いません。 値はポイントで指定します。

    fat_offset
        fat プリミティブは数式をボールドにするために、 数式のコピーを 2 回重ね打ちします。 重ね打ちする時にずらす水平幅がこの値です。

    over_hang
        分数の線の長さは、 分子もしくは分母の広い方の幅にこの値を2倍した長さを加えた長さとなります; 言い替えると、分子と分母は少なくともこの値だけオーバーハングします。

    accent_width
        bar か under が単一文字に対して適用された場合、 線の長さはこの値となります。 通常、 bar および under は適用対象のオブジェクトの幅に等しい長さの線を生成します; しかし単一文字の場合、 これでは大抵の場合線が長すぎるように見えてしまいます。

    delimiter_factor
        left および right プリミティブにより生成される伸長性のあるデリミタは高さと深さを持ちます。 デリミタが括っている部分式が軸に対して最大限伸長する長さの 2000分の1を単位とするこのパラメータで表した値は、 デリミタの高さと深さの最低値を与えます。

    delimiter_shortfall
        left および right プリミティブにより生成される伸長性のあるデリミタは高さと深さを持ちます。 デリミタが括っている部分式が軸に対して最大限伸長する長さの 2000分の1を単位とするこのパラメータで表した値は、 デリミタの高さと深さの差の最低値となります。

    null_delimiter_space
        分数の前後にこれだけの水平空白が挿入されます。

    script_space
        下付き文字、上付き文字の幅がこれだけ増やされます。

    thin_space
        句読点記号の後にこれだけの空白が自動的に挿入されます。

    medium_space
        2項演算子の前後にこれだけの空白が自動的に挿入されます。

    thick_space
        関係演算子の前後にこれだけの空白が自動的に挿入されます。

    x_height
        x のように上に突き出た部分の無いレターの高さ。

    axis_height
        + や - といった 文字のセンタ位置がベースラインに対してどれくらい高いかを表します。 使用しているフォントに対して適切な値を使用する事が重要です。

    default_rule_thickness
        \(ru 文字の太さ、 \D エスケープシーケンスにより生成される水平線の太さを指定します。

    num1
        over コマンドは分子を最低この値だけ上に移動します。

    num2
        smallover コマンドは分子を最低この値だけ上に移動します。

    denom1
        over コマンドは分母を最低この値だけ下に移動します。

    denom2
        smallover コマンドは分母を最低この値だけ下に移動します。

    sup1
        通常上付き文字は最低この値だけ上に移動します。

    sup2
        上付き文字中もしくは上限中の上付き文字、もしくは smallover における分子は、 最低この値だけ上に移動します。 この値は通常 sup1 より小さいです。

    sup3
        分母中もしくは平方根中の上付き文字、もしくは下付き文字もしくは下限は、 最低この値だけ上に移動します。 通常 sup2 より小さいです。

    sub1
        通常下付き文字は最低この値だけ下に移動します。

    sub2
        下付き文字と上付き文字の両方がある場合、 下付き文字は最低この値だけ下に移動します。

    sup_drop
        上付き文字のベースラインは、上付き文字がセットされるオブジェクトの上部 に対して、この値よりも下になることはありません。

    sub_drop
        下付き文字のベースラインは、下付き文字がセットされるオブジェクトの下部 に対して、少なくともこの値よりも下になります。

    big_op_spacing1
        上限のベースラインは、上限がセットされるオブジェクトの上部 に対して少なくともこの値よりも上になります。

    big_op_spacing2
        下限のベースラインは、下限がセットされるオブジェクトの下部 に対して少なくともこの値よりも下になります。

    big_op_spacing3
        上限の下部は、上限がセットされるオブジェクトの上部 に対して少なくともこの値よりも上になります。

    big_op_spacing4
        下限の上部は、下限がセットされるオブジェクトの下部 に対して少なくともこの値よりも下になります。

    big_op_spacing5
        これで指定される空白が上限上および下限下に付加されます。

    baseline_sep
        列ベクトルまたは行列の各行のベースラインがどれだけ離れているかを指定します。 大抵の場合、この値は num1 と denom1 の和に等しいです。

    shift_down
        列ベクトルまたは行列の 一番上のベースラインおよび一番下のベースラインの中間点が、 軸からどれだけ下がっているかを指定します。 大抵の場合、この値は axis_height に等しいです。

    column_sep
        行列の列間に加えられる空白の長さを指定します。

    matrix_side_sep
        行列の両端に加えられる空白の長さを指定します。

    draw_lines
        この値が非0の場合、線を引く場合に \D エスケープシーケンスを使用し、 \l エスケープシーケンスと \(ru 文字は使用しなくなります。

    body_height
        この値を式の高さが越えた分だけ、 当該式を含む行の前の空白に加えられます ( \xを使用します)。 デフォルト値は 85 です。

    body_depth
        この値を式の深さが越えた分だけ、 当該式を含む行の後の空白に加えられます ( \xを使用します)。 デフォルト値は 35 です。

    nroff
        この値が非 0 の場合には、 ndefine は define のように振舞い、 tdefine は無視されます。 この値が 0 の場合は tdefine は define のように振舞い、 ndefine は無視されます。 デフォルト値は 0 です (典型的には eqnrc ファイルによって、 ascii と latin1 デバイスの場合、この値は 1 に変更されます)。

    これらのパラメータの役割に関するより正確な記述は The TeXbook の Appendix H に記載されています。

  マクロ
マクロは引数を取ることができます。 マクロが引数付きで呼ばれた場合、 マクロボディでは、 $n ただし n は 1 から 9 は、 n番目の 引数に置き換えられます; 引数が n より少ない場合、無と置き換えられます。 左括弧を含む語で、左括弧より前の語の部分が define コマンドで定義されている語は、 引数付きのマクロ呼び出しとして認識されます; 左括弧に続く複数の文字は、対応する右括弧の範囲まで、 コンマで区切られた引数として扱われます; ネストした括弧内のコンマでは引数は区切られません。

sdefine name X anything X
    define コマンドに似ていますが、 引数付きで呼ばれた場合 name は認識されません。

include "file"
    file の内容を組み込みます。 file 中の行で、 .EQ もしくは .EN で始まる行は無視されます。

ifdef name X anything X
    name が define で定義されている場合 (または name が出力デバイスであるために自動的に定義されている場合)、 anything を処理します; そうでない場合は anything を無視します。 X は anything に含まれない文字であれば何でも構いません。

  フォント
eqn は通常少なくとも 2 つのフォントを式のセットに使用します: すなわち、レターにはイタリックを、 その他にはローマンを使用します。 既存の gfont コマンドは、 イタリックフォントとして使用されるフォントを変更します。 デフォルト値は I です。 ローマンフォントとして使用されるフォントは 新しい grfont コマンドで変更します。

grfont f
    ローマンフォントを f に設定します。

italic プリミティブは gfont によってセットされた現在のイタリックフォントを使用します; roman プリミティブは grfont によってセットされた現在のローマンフォントを使用します。 また gbfont コマンドという新しいコマンドもあり、 bold プリミティブで使用されるフォントを変更します。 式中でフォントを変更するのに roman, italic, bold プリミティブしか使用しない場合、 全ての式中のフォントを変更するのには gfont, grfont, gbfont コマンドを使用するだけで済みます。

どの文字をレター(イタリックでセットされるもの)として扱うのかを、 既に示した chartype コマンドで指定できます。 letter タイプは文字をイタリックタイプでセットされるようにします。 digit タイプは文字をローマンタイプでセットされるようにします、

関連ファイル
/usr/share/tmac/eqnrc 初期化ファイル

バグ
文中に出現する式は、行の先頭での文字サイズに設定されます。

関連項目
groff(1), troff(1), groff_font(5), The TeXbook