yatex
annotate docs/yatexadd.doc @ 12:a7f397790cdc
Revise YaTeX-typeset faster.
Optimize window selection of error-jump.
author | yuuji |
---|---|
date | Mon, 25 Oct 1993 14:35:00 +0000 |
parents | c746646cecf5 |
children | b7b023a74293 |
rev | line source |
---|---|
yuuji@6 | 1 ------------------------------------------------------------------------ |
yuuji@6 | 2 野鳥用付加関数の作成方法 |
yuuji@6 | 3 ------------------------------------------------------------------------ |
yuuji@6 | 4 |
yuuji@6 | 5 |
yuuji@6 | 6 【付加関数とは】 |
yuuji@6 | 7 |
yuuji@8 | 8 begin 型補完で、「tabular 環境を入力している時に、"{|c|c|c|}" と |
yuuji@8 | 9 か、また、table 環境の入力時に"[tbp]" とかも一緒に入力すればいいの |
yuuji@8 | 10 に」などと思うことはありませんか。もちろんこれを自動入力する関数は |
yuuji@8 | 11 簡単にサポートできるでしょう。 |
yuuji@6 | 12 |
yuuji@6 | 13 しかし、tabular 環境に限らず、LaTeX の環境の引数には、各人お決ま |
yuuji@6 | 14 りのフォーマットがあるものです。たとえば凝った表を書く時の tabular |
yuuji@6 | 15 環境の引数は、かなり複雑なので、上のような自動入力関数よりも、 |
yuuji@6 | 16 |
yuuji@8 | 17 "{@{\vrule width 1pt\ }|||@{\ \vrule width 1pt}}" |
yuuji@6 | 18 |
yuuji@6 | 19 を挿入するだけの単純な関数のほうが、嬉しい人もいるでしょう。あるい |
yuuji@6 | 20 は、「そんなの要らない。他の tabular をコピーして来たほうが早い。」 |
yuuji@6 | 21 と思う人もいるでしょう。 |
yuuji@6 | 22 |
yuuji@6 | 23 YaTeX の付加関数は、あらかじめ○○環境用のお仕着せの特別関数を用 |
yuuji@6 | 24 意しておくのではなく、○○環境用の特別関数が欲しくなったら独自の関 |
yuuji@6 | 25 数を定義する、というコンセプトに基づくもので、付加関数の登録のため |
yuuji@6 | 26 の手続きをすることなく、関数を定義したその瞬間から使えるようになり |
yuuji@6 | 27 ます。「必要なのは、defun だけ」です。 |
yuuji@6 | 28 |
yuuji@6 | 29 |
yuuji@6 | 30 【準備】 |
yuuji@6 | 31 |
yuuji@6 | 32 さすがに、関数を書くだけでは使えません:-)。yatex-mode 起動時には、 |
yuuji@8 | 33 その関数を定義したファイルがロードされていなくてはなりません。関数 |
yuuji@8 | 34 を定義するファイル名を yatexadd.el(またはバイトコンパイルした形式 |
yuuji@8 | 35 のyatexadd.elc)にし、そのファイルを load-path 中に置いておけば、 |
yuuji@8 | 36 野鳥が自動的にロードします。それ以外のファイル名にする場合は、 |
yuuji@12 | 37 yatex-mode-hook に付加関数を定義する Emacs-Lisp ファイルをロードす |
yuuji@12 | 38 るような仕掛けを書いておくのがよいでしょう。 |
yuuji@6 | 39 |
yuuji@6 | 40 |
yuuji@12 | 41 【関数定義】 |
yuuji@6 | 42 |
yuuji@12 | 43 付加関数には、各LaTeXコマンドのオプション引数を返す形式のもの、 |
yuuji@12 | 44 section型補完の引数を返すもの、の二種類があります。 |
yuuji@12 | 45 |
yuuji@12 | 46 前者は、以下の例のように、begin型補完では\begin{環境名}の直後に |
yuuji@12 | 47 付加する文字列、section型補完では LaTeX コマンド名と第一引数の間に |
yuuji@12 | 48 位置する文字列、maketitle型補完では LaTeX コマンド名の直後に位置す |
yuuji@12 | 49 る文字列を返すような関数です。便宜上この形の付加関数を、追加型付加 |
yuuji@12 | 50 関数と呼ぶことにします。 |
yuuji@12 | 51 |
yuuji@12 | 52 (例) \begin{table}[ht] (付加関数名 YaTeX:table) |
yuuji@12 | 53 ~~~~ |
yuuji@12 | 54 \put(100,200){} (付加関数名 YaTeX:put) |
yuuji@12 | 55 ~~~~~~~~~ |
yuuji@12 | 56 \sum_{i=0}^{n} (付加関数名 YaTeX:sum) |
yuuji@12 | 57 ~~~~~~~~~~ |
yuuji@12 | 58 |
yuuji@12 | 59 追加型付加関数は『LaTeXコマンド名の前に YaTeX: をつけた名前』で定 |
yuuji@12 | 60 義します。 |
yuuji@12 | 61 |
yuuji@12 | 62 後者は、以下のようにsection型コマンドの引数となる文字列を返す |
yuuji@12 | 63 関数です。この形の付加関数を引数型付加関数と呼ぶことにします。 |
yuuji@12 | 64 |
yuuji@12 | 65 (例) \newcommand{\foo}{bar} (付加関数名 YaTeX::newcommand) |
yuuji@12 | 66 ~~~~ ~~~ |
yuuji@12 | 67 |
yuuji@12 | 68 引数型付加関数は『LaTeXコマンド名の前に YaTeX:: をつけた名前』で定 |
yuuji@12 | 69 義します。また引数型付加関数が呼ばれる時には何番目の引数を入力して |
yuuji@12 | 70 いるのかが引数として渡されます。したがって、引数型付加関数は整数の |
yuuji@12 | 71 引数を一つ取るものとして定義し、その引数の値により処理を決定するこ |
yuuji@12 | 72 とになります。 |
yuuji@12 | 73 |
yuuji@12 | 74 |
yuuji@12 | 75 【定義例】 |
yuuji@12 | 76 |
yuuji@12 | 77 例えば、tabular環境のフォーマットとして、いつでも {|c|c|c|} を入 |
yuuji@12 | 78 れるだけで良いのなら、 |
yuuji@12 | 79 |
yuuji@12 | 80 (defun YaTeX:tabular () |
yuuji@12 | 81 "{|c|c|c|}") |
yuuji@12 | 82 |
yuuji@12 | 83 とだけ書けばよく、前述の、複雑な定型 tabular フォーマットを挿入す |
yuuji@12 | 84 るための関数を定義する場合は次のようにします。 |
yuuji@12 | 85 |
yuuji@12 | 86 (defun YaTeX:tabular () |
yuuji@12 | 87 "{@{\\vrule width 1pt\\ }|||@{\\ \\vrule width 1pt}}") |
yuuji@12 | 88 |
yuuji@12 | 89 この時、Emacs-Lisp 中の文字列では、\ 自身は \\ と表記することなど |
yuuji@12 | 90 に注意して下さい。 |
yuuji@12 | 91 |
yuuji@12 | 92 また、{} の中を、補完時に直接キーボードから読み込ませたい時は、 |
yuuji@12 | 93 |
yuuji@12 | 94 (defun YaTeX:tabular () |
yuuji@12 | 95 (concat "{" (read-string "Rule: ") "}")) |
yuuji@12 | 96 |
yuuji@12 | 97 などとすれば良いでしょう。 |
yuuji@12 | 98 |
yuuji@12 | 99 次に、引数型付加関数として \newcommand の引数を読み込む関数を定 |
yuuji@12 | 100 義する場合を例示します。\newcommand の第一引数は新たに定義するコマ |
yuuji@12 | 101 ンド名なので、必ず先頭に \ が来ます。第二引数はたいていの場合ミニ |
yuuji@12 | 102 バッファでは編集しづらいような複雑な定義を書くので、何も補完しない |
yuuji@12 | 103 方が良いでしょう。これを考慮して付加関数を定義すると以下のようなも |
yuuji@12 | 104 のになるでしょう。 |
yuuji@12 | 105 |
yuuji@12 | 106 (defun YaTeX::newcommand (n) ;nは引数の位置 |
yuuji@12 | 107 (cond |
yuuji@12 | 108 ((= n 1) ;第一引数ならコマンド名 |
yuuji@12 | 109 (concat "\\" (read-string "Command: "))) |
yuuji@12 | 110 ((= n 2) "") ;第二引数なら何も入れない |
yuuji@12 | 111 (t nil))) |
yuuji@12 | 112 |
yuuji@12 | 113 なお、引数型付加関数が nil を返した場合は、通常の引数入力関数が呼 |
yuuji@12 | 114 ばれます。 |
yuuji@6 | 115 |
yuuji@6 | 116 |
yuuji@6 | 117 【呼ばれ方】 |
yuuji@6 | 118 |
yuuji@8 | 119 野鳥本体は、begin型補完とsection型補完、およびmaketitle型補完の |
yuuji@8 | 120 入力時に付加関数の存在を調べてから呼び出します。begin型補完の場合 |
yuuji@8 | 121 \begin{環境名} が自動入力された直後に呼び出されます。section型補完 |
yuuji@8 | 122 では第一引数の補完の直前、maketitle型補完の場合は、コマンド名の直 |
yuuji@12 | 123 後(一つのスペースを挿入する直前)に呼び出されます。引数型付加関数は、 |
yuuji@12 | 124 section型コマンドの引数の入力時にその都度呼ばれます。 |
yuuji@6 | 125 |
yuuji@6 | 126 |
yuuji@6 | 127 【参考】 |
yuuji@6 | 128 |
yuuji@6 | 129 付加関数の定義の例を yatexadd.el に用意しました。実際に独自の付 |
yuuji@6 | 130 加関数を定義する時の参考として下さい。 |
yuuji@6 | 131 |
yuuji@8 | 132 有用と思われる関数について、簡単に説明します。 |
yuuji@8 | 133 |
yuuji@8 | 134 ・関数 YaTeX:read-position |
yuuji@8 | 135 引数 [] の中に入れてもよい文字を羅列した文字列。 |
yuuji@8 | 136 説明 [htb] などのような location 指定を作成します。何も入力せず |
yuuji@8 | 137 リターンを押すと、[]自体も省略されます。[]の中に来るべき文 |
yuuji@8 | 138 字が htbp に限られているなら、(YaTeX:read-position "htbp") |
yuuji@8 | 139 と呼び出します。 |
yuuji@8 | 140 |
yuuji@8 | 141 ・関数 YaTeX:read-coordinates |
yuuji@8 | 142 引数 基本プロンプト, X座標プロンプト, Y座標プロンプト(全て省略可) |
yuuji@8 | 143 説明 「基本プロンプト X座標プロンプト:」というプロンプトを出し |
yuuji@8 | 144 て、X座標を読み込み、「基本プロンプト Y座標プロンプト:」を |
yuuji@8 | 145 出して、Y座標を読み込み、(X座標,Y座標) の様な形式を作成します。 |
yuuji@8 | 146 何も入力せずリターンを押しても、(,)が返されます。 |
yuuji@8 | 147 各プロンプトのデフォルトはそれぞれ、Dimension, X, Y です。 |
yuuji@8 | 148 |
yuuji@8 | 149 ・関数 YaTeX:check-comletion-type |
yuuji@8 | 150 引数 'begin または、'section または、'maketitle |
yuuji@8 | 151 説明 付加関数が呼ばれる時に、行われている補完の形式が、引数で与 |
yuuji@8 | 152 えたものであるかどうか調べ、そうでない場合にエラー終了する。 |
yuuji@8 | 153 なお、変数 YaTeX-current-completion-type に現在の補完の型 |
yuuji@8 | 154 を表わすシンボル(この関数の引数と同様)が格納されています。 |
yuuji@8 | 155 |
yuuji@6 | 156 |
yuuji@6 | 157 【最後に】 |
yuuji@6 | 158 |
yuuji@6 | 159 快適な関数を定義したなら、そしてそれを公開してもよいと思われたな |
yuuji@6 | 160 ら、筆者までお送り下さい。次の yatexadd.el に取り込んで行きたいと |
yuuji@6 | 161 思います。 |
yuuji@6 | 162 |
yuuji@6 | 163 |
yuuji@6 | 164 広瀬雄二 |
yuuji@8 | 165 yuuji@ae.keio.ac.jp |
yuuji@6 | 166 pcs39334(ASCII-NET) |