yatex

annotate docs/yatexadd.doc @ 25:ab9c4c4f9f7a

version 1.50
author yuuji
date Fri, 08 Jul 1994 19:38:30 +0000
parents cb9afa9c1213
children eb0512bfcb7f
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@25 34 を定義するファイル名を yatexhks.el(またはバイトコンパイルした形式
yuuji@25 35 の yatexhks.elc)にし、そのファイルを load-path 中に置いておけば、
yuuji@8 36 野鳥が自動的にロードします。それ以外のファイル名にする場合は、
yuuji@16 37 yatex-mode-load-hook に付加関数を定義する Emacs-Lisp ファイルをロー
yuuji@16 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@16 69 義します。また引数型付加関数が呼ばれる時にはsection型コマンドの何
yuuji@16 70 番目の引数を入力しているのかが関数への引数として渡されます。したがっ
yuuji@16 71 て、引数型付加関数は整数の引数を一つ取るものとして定義し、その引数
yuuji@16 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@16 109 (read-string "Command: " "\\")) ;\を初期入力とする
yuuji@16 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@14 164 広瀬雄二
yuuji@14 165 yuuji@ae.keio.ac.jp
yuuji@14 166 pcs39334@asciinet.or.jp