# HG changeset patch # User yuuji # Date 736520417 0 # Node ID c746646cecf536a9ac782eef2ed645580950c946 # Parent 9a56acb6c287eeb5d8a6f440fafcad5a02977ba5 Restrict YaTeX:framebox in picture environment. diff -r 9a56acb6c287 -r c746646cecf5 docs/yatexadd.doc --- a/docs/yatexadd.doc Tue May 04 12:57:27 1993 +0000 +++ b/docs/yatexadd.doc Tue May 04 13:00:17 1993 +0000 @@ -1,25 +1,20 @@ ------------------------------------------------------------------------ 野鳥用付加関数の作成方法 ------------------------------------------------------------------------ -筆者註: ・付加関数の呼び出し方の仕様は、まだ模索段階です。 - ・yatexadd.el のサンプル関数仕様も、大きく変更する可能性があります。 - ・もし、本バージョンの yatexadd を手にされた場合は、今後の付加関数 - の仕様について、御意見をお聞かせください。 - ・とりあえず、begin型補完のみの対応です。 【付加関数とは】 - begin 型補完で、tabular 環境を入力している時に、「"c|c|c" とか、 - また、table 環境の入力時に"[tbp]" とかも一緒に入力すればいいのに」 - などと思うことはありませんか。もちろんこれを自動入力する関数は簡単 - にサポートできるでしょう。 + begin 型補完で、「tabular 環境を入力している時に、"{|c|c|c|}" と + か、また、table 環境の入力時に"[tbp]" とかも一緒に入力すればいいの + に」などと思うことはありませんか。もちろんこれを自動入力する関数は + 簡単にサポートできるでしょう。 しかし、tabular 環境に限らず、LaTeX の環境の引数には、各人お決ま りのフォーマットがあるものです。たとえば凝った表を書く時の tabular 環境の引数は、かなり複雑なので、上のような自動入力関数よりも、 - "{@{\vrule width 1pt\ }|||@{\vrule width 1pt}}" + "{@{\vrule width 1pt\ }|||@{\ \vrule width 1pt}}" を挿入するだけの単純な関数のほうが、嬉しい人もいるでしょう。あるい は、「そんなの要らない。他の tabular をコピーして来たほうが早い。」 @@ -35,7 +30,10 @@ 【準備】 さすがに、関数を書くだけでは使えません:-)。yatex-mode 起動時には、 - その関数を定義したファイルがロードされていなくてはなりません。 + その関数を定義したファイルがロードされていなくてはなりません。関数 + を定義するファイル名を yatexadd.el(またはバイトコンパイルした形式 + のyatexadd.elc)にし、そのファイルを load-path 中に置いておけば、 + 野鳥が自動的にロードします。それ以外のファイル名にする場合は、 yatex-mode-hook に、付加関数を定義する Emacs-Lisp ファイルをロード するような仕掛けを書いておくのがよいでしょう。 @@ -49,8 +47,46 @@ 【呼ばれ方】 - begin型補完の場合 \begin{環境名} が自動入力された直後に呼び出さ - れます。 + 野鳥本体は、begin型補完とsection型補完、およびmaketitle型補完の + 入力時に付加関数の存在を調べてから呼び出します。begin型補完の場合 + \begin{環境名} が自動入力された直後に呼び出されます。section型補完 + では第一引数の補完の直前、maketitle型補完の場合は、コマンド名の直 + 後(一つのスペースを挿入する直前)に呼び出されます。 + + +【関数定義】 + + begin型補完では、\begin{環境名}の直後に付加する文字列、section型 + 補完では、LaTeXコマンド名と第一引数の間に位置する文字列、maketitle + 型補完では、LaTeXコマンド名の直後に位置する文字列を返すような関数 + を定義して下さい。 + (例) + \begin{table}[ht] + ~~~~ + \put(100,200){} + ~~~~~~~~~ + \sum_{i=0}^{n} + ~~~~~~~~~~ + たんに、いつでも {|c|c|c|} を入れるだけで良いのなら、 + + (defun YaTeX:tabular () + "{|c|c|c|}") + + とだけ、書けばよく、前述の、複雑な定型 tabular フォーマットを挿入 + するための関数を定義する場合は、次のようにします。 + + (defun YaTeX:tabular () + "{@{\\vrule width 1pt\\ }|||@{\\ \\vrule width 1pt}}") + + この時、Emacs-Lisp 中の文字列では、\ 自身は、\\ と表記することなどに + 注意して下さい。 + + また、{} の中を、補完時に直接キーボードから読み込ませたい時は、 + + (defun YaTeX:tabular () + (concat "{" (read-string "Rule: ") "}")) + + などとすれば良いでしょう。 【参考】 @@ -58,6 +94,30 @@ 付加関数の定義の例を yatexadd.el に用意しました。実際に独自の付 加関数を定義する時の参考として下さい。 + 有用と思われる関数について、簡単に説明します。 + + ・関数 YaTeX:read-position + 引数 [] の中に入れてもよい文字を羅列した文字列。 + 説明 [htb] などのような location 指定を作成します。何も入力せず + リターンを押すと、[]自体も省略されます。[]の中に来るべき文 + 字が htbp に限られているなら、(YaTeX:read-position "htbp") + と呼び出します。 + + ・関数 YaTeX:read-coordinates + 引数 基本プロンプト, X座標プロンプト, Y座標プロンプト(全て省略可) + 説明 「基本プロンプト X座標プロンプト:」というプロンプトを出し + て、X座標を読み込み、「基本プロンプト Y座標プロンプト:」を + 出して、Y座標を読み込み、(X座標,Y座標) の様な形式を作成します。 + 何も入力せずリターンを押しても、(,)が返されます。 + 各プロンプトのデフォルトはそれぞれ、Dimension, X, Y です。 + + ・関数 YaTeX:check-comletion-type + 引数 'begin または、'section または、'maketitle + 説明 付加関数が呼ばれる時に、行われている補完の形式が、引数で与 + えたものであるかどうか調べ、そうでない場合にエラー終了する。 + なお、変数 YaTeX-current-completion-type に現在の補完の型 + を表わすシンボル(この関数の引数と同様)が格納されています。 + 【最後に】 @@ -65,10 +125,7 @@ ら、筆者までお送り下さい。次の yatexadd.el に取り込んで行きたいと 思います。 -【註】 - - yatexadd は βversionです。 広瀬雄二 - yuujI@ae.keio.ac.jp + yuuji@ae.keio.ac.jp pcs39334(ASCII-NET) diff -r 9a56acb6c287 -r c746646cecf5 yatexadd.el --- a/yatexadd.el Tue May 04 12:57:27 1993 +0000 +++ b/yatexadd.el Tue May 04 13:00:17 1993 +0000 @@ -1,8 +1,9 @@ ;;; -*- Emacs-Lisp -*- -;;; YaTeX add in functions. -;;; yatexadd.el rev.2 +;;; YaTeX add-in functions. +;;; yatexadd.el rev.3 ;;; (c)1991-1993 by HIROSE Yuuji.[yuuji@ae.keio.ac.jp] -;;; Last modified Fri Feb 5 09:36:06 1993 on gloria +;;; Last modified Tue May 4 21:50:37 1993 on figaro +;;; $Id$ (provide 'yatexadd) @@ -14,46 +15,131 @@ "*Your favorite default rule format." ) (defun YaTeX:tabular () - "YaTeX add in function for tabular environment." - (let (bars (rule "") (j 0) loc) + "YaTeX add-in function for tabular environment." + (let (bars (rule "") (j 0) (loc (YaTeX:read-position "tb"))) (setq bars (string-to-int (read-string "Number of `|': "))) (if (> bars 0) (while (< j bars) (setq rule (concat rule "|")) (setq j (1+ j))) (setq rule YaTeX:tabular-default-rule)) (setq rule (read-string "rule format: " rule)) - (insert (format "{%s}" rule)) - (message "")) + (message "") + (format "%s{%s}" loc rule)) ) -(defun YaTeX:table () - (let ((pos "")) - (message "Position []:") +(defun YaTeX:read-position (oneof) + (let ((pos "") loc) (while (not (string-match - (setq loc (read-key-sequence (format "Position [%s]: " pos))) + (setq loc (read-key-sequence + (format "Position (`%s') [%s]: " oneof pos))) "\r\^g\n")) (cond - ((string-match loc "htbp") + ((string-match loc oneof) (if (not (string-match loc pos)) (setq pos (concat pos loc)))) ((and (string-match loc "\C-h\C-?") (> (length pos) 0)) (setq pos (substring pos 0 (1- (length pos))))) (t (ding) - (message "Please input one of `htbp'.") + (message "Please input one of `%s'." oneof) (sit-for 3)))) - (if (string= pos "") nil - (insert "[" pos "]"))) + (message "") + (if (string= pos "") "" + (concat "[" pos "]"))) +) + +(defun YaTeX:table () + "YaTeX add-in function for table environment." + (YaTeX:read-position "htbp") ) (defun YaTeX:description () "Truly poor service:-)" (setq single-command "item[]") + "" ) (defun YaTeX:itemize () "It's also poor service." (setq single-command "item") + "" ) (fset 'YaTeX:enumerate 'YaTeX:itemize) + +;;; +;;Sample functions for section-type command. +;;; +(defun YaTeX:multiput () + (concat (YaTeX:read-coordinates "Pos") + (YaTeX:read-coordinates "Step") + "{" (read-string "How many times: ") "}") +) + +(defun YaTeX:put () + (YaTeX:read-coordinates "Pos") +) + +(defun YaTeX:makebox () + (concat (YaTeX:read-coordinates "Dimension") + (YaTeX:read-position "lrtb")) +) + +(defun YaTeX:framebox () + (if (YaTeX-quick-in-environment-p "picture") + (YaTeX:makebox)) +) + +(defun YaTeX:dashbox () + (concat "{" (read-string "Dash dimension: ") "}" + (YaTeX:read-coordinates "Dimension")) +) + +(defun YaTeX:read-coordinates (&optional mes varX varY) + (concat + "(" + (read-string (format "%s %s: " (or mes "Dimension") (or varX "X"))) + "," + (read-string (format "%s %s: " (or mes "Dimension") (or varY "Y"))) + ")") +) + +;;; +;;Sample functions for maketitle-type command. +;;; +(defun YaTeX:sum () + "Read range of summation." + (YaTeX:check-completion-type 'maketitle) + (concat (YaTeX:read-boundary "_") (YaTeX:read-boundary "^")) +) + +(fset 'YaTeX:int 'YaTeX:sum) + +(defun YaTeX:lim () + "Insert limit notation of \\lim." + (YaTeX:check-completion-type 'maketitle) + (let ((var (read-string "Variable: ")) limit) + (if (string= "" var) "" + (setq limit (read-string "Limit ($ means infinity): ")) + (if (string= "$" limit) (setq limit "\\infty")) + (concat "_{" var " \\rightarrow " limit "}"))) +) + +(defun YaTeX:gcd () + "Add-in function for \\gcd(m,n)." + (YaTeX:check-completion-type 'maketitle) + (YaTeX:read-coordinates "\\gcd" "(?,)" "(,?)") +) + +(defun YaTeX:read-boundary (ULchar) + "Read boundary usage by _ or ^. _ or ^ is indicated by argument ULchar." + (let ((bndry (read-string (concat ULchar "{...}: ")))) + (if (string= bndry "") "" + (concat ULchar "{" bndry "}"))) +) + +(defun YaTeX:check-completion-type (type) + "Check valid completion type." + (if (not (eq type YaTeX-current-completion-type)) + (error "This should be completed with %s-type completion." type)) +)