# HG changeset patch # User yuuji # Date 751559700 0 # Node ID a7f397790cdc5e783bb907bee372bef046629741 # Parent 390df0e505da71fb9bd23851d63b3d23c3941400 Revise YaTeX-typeset faster. Optimize window selection of error-jump. diff -r 390df0e505da -r a7f397790cdc docs/yatexadd.doc --- a/docs/yatexadd.doc Mon Sep 20 08:56:09 1993 +0000 +++ b/docs/yatexadd.doc Mon Oct 25 14:35:00 1993 +0000 @@ -34,15 +34,84 @@ を定義するファイル名を yatexadd.el(またはバイトコンパイルした形式 のyatexadd.elc)にし、そのファイルを load-path 中に置いておけば、 野鳥が自動的にロードします。それ以外のファイル名にする場合は、 - yatex-mode-hook に、付加関数を定義する Emacs-Lisp ファイルをロード - するような仕掛けを書いておくのがよいでしょう。 + yatex-mode-hook に付加関数を定義する Emacs-Lisp ファイルをロードす + るような仕掛けを書いておくのがよいでしょう。 -【関数名】 +【関数定義】 - 作成する付加関数名は、補完入力した名前の先頭に YaTeX: を付け足し - たものにします。例えば(begin型補完の) tabular 環境に対して付加関数 - を作成したい場合は YaTeX:tabular という関数名で定義します。 + 付加関数には、各LaTeXコマンドのオプション引数を返す形式のもの、 + section型補完の引数を返すもの、の二種類があります。 + + 前者は、以下の例のように、begin型補完では\begin{環境名}の直後に + 付加する文字列、section型補完では LaTeX コマンド名と第一引数の間に + 位置する文字列、maketitle型補完では LaTeX コマンド名の直後に位置す + る文字列を返すような関数です。便宜上この形の付加関数を、追加型付加 + 関数と呼ぶことにします。 + + (例) \begin{table}[ht] (付加関数名 YaTeX:table) + ~~~~ + \put(100,200){} (付加関数名 YaTeX:put) + ~~~~~~~~~ + \sum_{i=0}^{n} (付加関数名 YaTeX:sum) + ~~~~~~~~~~ + + 追加型付加関数は『LaTeXコマンド名の前に YaTeX: をつけた名前』で定 + 義します。 + + 後者は、以下のようにsection型コマンドの引数となる文字列を返す + 関数です。この形の付加関数を引数型付加関数と呼ぶことにします。 + + (例) \newcommand{\foo}{bar} (付加関数名 YaTeX::newcommand) + ~~~~ ~~~ + + 引数型付加関数は『LaTeXコマンド名の前に YaTeX:: をつけた名前』で定 + 義します。また引数型付加関数が呼ばれる時には何番目の引数を入力して + いるのかが引数として渡されます。したがって、引数型付加関数は整数の + 引数を一つ取るものとして定義し、その引数の値により処理を決定するこ + とになります。 + + +【定義例】 + + 例えば、tabular環境のフォーマットとして、いつでも {|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: ") "}")) + + などとすれば良いでしょう。 + + 次に、引数型付加関数として \newcommand の引数を読み込む関数を定 + 義する場合を例示します。\newcommand の第一引数は新たに定義するコマ + ンド名なので、必ず先頭に \ が来ます。第二引数はたいていの場合ミニ + バッファでは編集しづらいような複雑な定義を書くので、何も補完しない + 方が良いでしょう。これを考慮して付加関数を定義すると以下のようなも + のになるでしょう。 + + (defun YaTeX::newcommand (n) ;nは引数の位置 + (cond + ((= n 1) ;第一引数ならコマンド名 + (concat "\\" (read-string "Command: "))) + ((= n 2) "") ;第二引数なら何も入れない + (t nil))) + + なお、引数型付加関数が nil を返した場合は、通常の引数入力関数が呼 + ばれます。 【呼ばれ方】 @@ -51,42 +120,8 @@ 入力時に付加関数の存在を調べてから呼び出します。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: ") "}")) - - などとすれば良いでしょう。 + 後(一つのスペースを挿入する直前)に呼び出されます。引数型付加関数は、 + section型コマンドの引数の入力時にその都度呼ばれます。 【参考】 diff -r 390df0e505da -r a7f397790cdc docs/yatexgen.doc --- a/docs/yatexgen.doc Mon Sep 20 08:56:09 1993 +0000 +++ b/docs/yatexgen.doc Mon Oct 25 14:35:00 1993 +0000 @@ -9,7 +9,7 @@ 【はじめに】 - まず、yatexadd.doc には目を通して下さい。これを読んで、なにか独 + まず、yatexadd.doc には目を通して下さい。それを読んで、なにか独 自の関数をすぐに作りたくなったあなたには、このドキュメントも、 yatexgen.el も必要有りません。しかし、Emacs-Lisp をよく知らないた め、どのように作ってよいのかピンと来ない方のために、野鳥自身に付加 diff -r 390df0e505da -r a7f397790cdc yatex.el Binary file yatex.el has changed diff -r 390df0e505da -r a7f397790cdc yatex.new --- a/yatex.new Mon Sep 20 08:56:09 1993 +0000 +++ b/yatex.new Mon Oct 25 14:35:00 1993 +0000 @@ -2,6 +2,11 @@ Yet Another tex-mode for Emacs yatex.el 各バージョンの変更点について。 +1.44: タイプセットプログラムの起動処理を高速化。 + エラージャンプのウィンドウ利用の最適化。 + 数式モード/修正モードのモードライン表示修正。 + 数式環境補完時には自動的に数式モードに入る。 + 1.43: 環境のネストに応じたインデント(変数YaTeX-environment-indentで指定)。 数式環境記号補完モード(yatexmth)添付。 modify-mode の値で開き括弧の動作を決定する。 diff -r 390df0e505da -r a7f397790cdc yatexadd.el --- a/yatexadd.el Mon Sep 20 08:56:09 1993 +0000 +++ b/yatexadd.el Mon Oct 25 14:35:00 1993 +0000 @@ -2,7 +2,7 @@ ;;; YaTeX add-in functions. ;;; yatexadd.el rev.5 ;;; (c)1991-1993 by HIROSE Yuuji.[yuuji@ae.keio.ac.jp] -;;; Last modified Sat Sep 18 04:13:41 1993 on 98fa +;;; Last modified Wed Oct 6 03:40:30 1993 on 98fa ;;; $Id$ (provide 'yatexadd) @@ -73,6 +73,13 @@ (YaTeX:read-coordinates "Initial position")) ) +(defun YaTeX:equation () + (if (fboundp 'YaTeX-toggle-math-mode) + (YaTeX-toggle-math-mode t)) ;force math-mode ON. +) +(fset 'YaTeX:eqnarray 'YaTeX:equation) +(fset 'YaTeX:displaymath 'YaTeX:equation) + ;;; ;;Sample functions for section-type command. ;;; @@ -224,6 +231,8 @@ (goto-char (point-min)) (message "Collecting labels...") (save-window-excursion + (YaTeX-showup-buffer + YaTeX-label-buffer (function (lambda (x) (window-width x)))) (with-output-to-temp-buffer YaTeX-label-buffer (while (re-search-forward "\\label{\\([^}]+\\)}" nil t) (setq e0 (match-end 0) m1 (match-beginning 1) e1 (match-end 1)) @@ -272,6 +281,8 @@ (defun YaTeX-label-other () (let ((lbuf "*YaTeX mode buffers*") (blist (buffer-list)) (lnum -1) buf rv (ff "**find-file**")) + (YaTeX-showup-buffer + lbuf (function (lambda (x) 1))) ;;Select next window surely. (with-output-to-temp-buffer lbuf (while blist (if (and (buffer-file-name (setq buf (car blist))) diff -r 390df0e505da -r a7f397790cdc yatexprc.el --- a/yatexprc.el Mon Sep 20 08:56:09 1993 +0000 +++ b/yatexprc.el Mon Oct 25 14:35:00 1993 +0000 @@ -1,8 +1,8 @@ ;;; -*- Emacs-Lisp -*- ;;; YaTeX process handler. -;;; yatexprc.el rev.1.43 +;;; yatexprc.el rev.1.44 ;;; (c)1993 by HIROSE Yuuji.[yuuji@ae.keio.ac.jp] -;;; Last modified Sat Sep 18 04:12:18 1993 on 98fa +;;; Last modified Mon Oct 25 17:48:39 1993 on figaro ;;; $Id$ (require 'yatex) @@ -28,31 +28,34 @@ (defun YaTeX-typeset (command buffer) "Execute jlatex (or other) to LaTeX typeset." (interactive) - (if (and YaTeX-typeset-process - (eq (process-status YaTeX-typeset-process) 'run)) - ;; if tex command is halting. - (YaTeX-kill-typeset-process YaTeX-typeset-process)) - (YaTeX-visit-main t) ;;execution directory - (with-output-to-temp-buffer buffer - (if (eq system-type 'ms-dos) ;if MS-DOS - (progn - (message (concat "Typesetting " (buffer-name) "...")) - (YaTeX-put-nonstopmode) - (call-process shell-file-name - nil buffer nil "/c" command) - (YaTeX-remove-nonstopmode)) - (setq YaTeX-typeset-process ;if UNIX + (let ((window (selected-window))) + (if (and YaTeX-typeset-process + (eq (process-status YaTeX-typeset-process) 'run)) + ;; if tex command is halting. + (YaTeX-kill-typeset-process YaTeX-typeset-process)) + (YaTeX-visit-main t);;execution directory + ;;Select under-most window if there are more than 2 windows and + ;;typeset buffer isn't seen. + (YaTeX-showup-buffer + buffer (function (lambda (x) (nth 3 (window-edges x))))) + (with-output-to-temp-buffer buffer + (if (eq system-type 'ms-dos) ;if MS-DOS + (progn + (message (concat "Typesetting " (buffer-name) "...")) + (YaTeX-put-nonstopmode) + (call-process shell-file-name + nil buffer nil "/c" command) + (YaTeX-remove-nonstopmode)) + (setq YaTeX-typeset-process ;if UNIX (start-process "LaTeX" buffer shell-file-name "-c" command)) - (set-process-sentinel YaTeX-typeset-process 'YaTeX-typeset-sentinel))) - (setq current-TeX-buffer (buffer-name)) - (let ((window (selected-window))) + (set-process-sentinel YaTeX-typeset-process 'YaTeX-typeset-sentinel))) + (setq current-TeX-buffer (buffer-name)) (select-window (get-buffer-window buffer)) - ;;(other-window 1) (use-local-map YaTeX-typesetting-mode-map) (set-syntax-table YaTeX-typeset-buffer-syntax) (setq mode-name "typeset") - (if YaTeX-typeset-process ; if process is running (maybe on UNIX) + (if YaTeX-typeset-process ; if process is running (maybe on UNIX) (cond ((boundp 'MULE) (set-current-process-coding-system YaTeX-latex-message-code YaTeX-coding-system)) @@ -61,13 +64,11 @@ (message "Type SPC to continue.") (goto-char (point-max)) (if (eq system-type 'ms-dos) (message "Done.") - (while (bobp) (message "Invoking process. wait...") (sleep-for 1)) - (insert (message " "))) + (insert (message " ")) + (set-marker (process-mark YaTeX-typeset-process) (1- (point)))) (if (bolp) (forward-line -1)) (recenter -1) - (select-window window) - ;;(other-window -1) - ) + (select-window window)) ) (defun YaTeX-typeset-sentinel (proc mes) @@ -325,6 +326,7 @@ nil ;; if warning or error found (if error-win (select-window error-win) + (select-window (get-lru-window)) (YaTeX-switch-to-buffer error-buffer) (setq error-win (selected-window))) (goto-line YaTeX-error-line) @@ -614,4 +616,28 @@ (pop-to-buffer buffer)) ) +(defun YaTeX-showup-buffer (buffer &optional func) + "Make BUFFER show up in certain window (but current window) +that gives the maximum value by the FUNC. FUNC should take an argument +of its window object" + (or (get-buffer-window buffer) + (< (length (YaTeX-window-list)) 3) + (let ((window (selected-window)) (list (YaTeX-window-list)) win w (x 0)) + (while list + (setq w (car list)) + (if (and (not (eq window w)) + (> (funcall func w) x)) + (setq win w x (funcall func w))) + (setq list (cdr list))) + (select-window win) + (switch-to-buffer buffer) + (select-window window))) +) + +(defun YaTeX-window-list () + (let*((curw (selected-window)) (win curw) (wlist (list curw))) + (while (not (eq curw (setq win (next-window win)))) + (setq wlist (cons win wlist))) + wlist) +) (provide 'yatexprc)