19:26:29)追加された行はこの色です。削除された行はこの色です。特徴の一つにマクロが作成できることが挙げられます。マクロを活用することによって、ミスの少ない仕上がりや作業効率の向上などの効果が期待できます。実用的な面を持つだけではなく、知的な趣味としても愉しむことができます。マクロは実用的な面を持つだけではなく,知的な趣味としても愉しむことができます。踏み込んだ解説を目的としています。以下は手を付けていません。[#s5fc1cf9]マクロの作成技術を身につけるにあたって必要な基本知識を列挙しておきましょう。これらの事柄を調べてゆくと自ずとマクロ作成技術が身に付くことでしょう。入門レベルの解説書では触れられていないことが多いです。『TeXブック』には当然解説されていますが、入手は困難なようです。入門レベルの解説書では触れられていないことが多いです。『TeXブック』には当然解説されていますが,日本語版の入手は困難です。[#i84d9f01](注意)この節の内容には,初学者にとっての理解のしやすさを優先するため,不正確な記述が含まれています。従って,リファレンスマニュアルとしての使用に堪えるものとはなっていません。読み込むファイルはテキストファイルであり,文字コードの羅列です。そこから様々な命令を読み取って動作します。平方根を組み立てる命令であることを読み取って,根号の中に2を収めたものを出力します。いう一塊のものとして認識されます。とって意味のある,それ以上分解できない一塊のものが''トークン''です。いう4つのトークンとして把握される(文字列をトークンに変換している)ことになります。ような名前によって区別されるトークンである''コントロールシークエンストークン''があります。コントロールシークエンストークンのことを単に''コントロールシークエンス''ともいいます。このような解説文でコントロールシークエンスを記述する場合,例えば『TeXbook』などでは四角囲みの中にトークン名を収めて表しています。ここでは括弧で括って[sqrt]のように表してもいいかもしれません(ソースファイル中の“\sqrt”という文字列に対応するコントロールシークエンストークンの名前は“sqrt”であると考えます)。文字コードの羅列をトークンに変換してゆくプロセスは概ね次の規則に従います。あれば続く文字列から名前を読み取ってコントロールシークエンスに変換する。サブセクションで解説してみます。なければ,その1文字を単独の文字トークンとして読み取るここで「英文字」とは何かという問題がありますが,これについては次項「[[カテゴリーコード>TeX入門/マクロの作成#mef7a198]]」を参照してください。使える日本語を含むコントロールシークエンストークンは考えません.コントロールシークエンスには二種類存在します.ひとつは上記の1のiに相当する,“\”のあとに英文字が続くものでこれをコントロールワードといいます.例えば,“\alpha”によって生成される[alpha]はコントロールワードです.もうひとつは上記の1のiiに相当する,“\”のあとに英文字以外の1文字が続くもので,これをコントロールシンボルといいます.例えば,\!によって生成される[!]はコントロールシンボルです.(注意)上の規則で“\”という文字を使いましたが,より正確には,カテゴリーコードが0である文字といったほうがよいでしょう。カテゴリーコードについては後の解説を参照してください。[#ta414729]さて,ここでコントロールワード[small]に続いて英文字の文字トークン“a”を置くことを考えて見ましょう。本文中で小さな文字を使って“a”という活字を印字したいという場面です。ソースファイルにはどう記述すべきでしょうか?“\smalla”でしょうか?これでは駄目ですね。よって続く限りの英文字が取られて[smalla]というコントロールワードになってしまい,意図とは違ってしまいます。英文字以外のものを“\small”の後におけばよいのですから“\small:a”などとしてみます。今度は[small],“:”,“a”となってしまい間に余計な文字トークンが入ってしまいます。このように,コントロールワードに続けて英文字トークンを置きたい場合にはなにか区切りになるものが必要ですが,その区切り自体が余計なトークンになってしまうなら,困る場合も出てきます。そこで,区切り文字として空白文字を使った場合には例外的に,コントロールワードの名前の終わりを表す区切りとして認識したあとで,その空白文字を読み飛ばします。a”と入力することで解決されるわけです。空白文字の読み飛ばしについては,他にも考慮すべき例外ルールがあります。[#mef7a198]前節で触れた,「英文字」とは何か,という問題に答えるのがこの節です。処理するソースファイルはテキストファイルで,われわれの目には文字列のように見えていますが,その実体は文字コードの羅列です。一文字に8ビットのコードを割り当てるシステムでは文字コードは0から255までの数です。“a”という文字の文字コードは97となっています。TeXではこれらの文字を「英文字」や「空白文字」などに分類して,その分類を動的に変えられるようになっています。そのための仕組みが''カテゴリコード''です。“e”として読み込まれます。仕組みを利用して,“@”という文字を「英文字」と見なすように設定しておけば,同じ“\hoge@hoge”という文字列から,[hoge@hoge]というたった一つのコントロールシークエンスが読み取られることになるわけです。コンピュータプログラムなので,「英文字」とか「空白文字」という概念を理解しているわけではなくて,単に11番目のカテゴリーだとか5番目のカテゴリーだとか把握しているのです。「“a”は英文字だ」という代わりに「文字コード97の文字は11番目のカテゴリーの文字だ」という具合です。ある文字コードの文字がどの分類に属するかを記憶しているわけです。よる文字の分類を一覧表にしてみましょう。テキストファイルから文字コードの羅列を読み込んでトークンに変換していくとき,カテゴリーコードが0か否か,および11か否かということは特別な意味を持ちます。カテゴリーコードが0の文字はコントロールシークエンスの始まりを表し,その後にカテゴリーコード11の文字が続く限りそれがコントロールシークエンスの名前になるからです。その他のカテゴリーの文字は単独の文字トークンとなるわけですが,このとき,その文字トークンには対応するカテゴリーコード付与されます。いうプリミティブ命令を使います。\catcode97=12のようにします。個の文字トークンが続いたものとして読み取られることになります。(今日はとりあえずここまで。続きはいつになるか分かりません。[#f8b87eec]少し上のところで“\hoge@hoge”という文字列の例を紹介しました。いう単一のトークンとして読み取らせることができるという例でした。指定すればよいことになります。この作業はたびたび必要になるので後述するようなマクロ定義による省略形が用意されています。いう命令で“@”のカテゴリーコードを12(その他の文字)に戻します。内部命令をユーザーの不用意な再定義から保護する仕組みとして、この“@”の振る舞いを利用しています。ユーザーがほぼすべての命令をマクロとして自由に定義し直すことができてしまいます。この自由度の高さゆえに、内部で使われている需要な命令の定義をユーザーが意図せず変更してしまうことが起こり得ます。ように英文字化した“@”を含むものとして定義しておいて、ユーザーの文書を処理する際は“@”のカテゴリーコードを「その他の文字」になるように戻しておくことで、不用意に内部命令にアクセスしたり定義し直したりすることを防いでいるというわけです。“@”を「その他の文字」に戻すようにします。次の表に示す種類ごとに256個のレジスタ(変数)があります。