11
|
1 ;;; -*- Emacs-Lisp -*-
|
23
|
2 ;;; YaTeX math-mode-specific functions.
|
13
|
3 ;;; yatexmth.el rev.2
|
14
|
4 ;;; (c )1993-1994 by HIROSE Yuuji [yuuji@ae.keio.ac.jp]
|
23
|
5 ;;; Last modified Fri Jul 8 00:48:24 1994 on figaro
|
11
|
6 ;;; $Id$
|
|
7
|
13
|
8 ;;; [Customization guide]
|
|
9 ;;;
|
|
10 ;;; By default, you can use two completion groups in YaTeX math
|
23
|
11 ;;; mode, `;' for mathematical signs and `/' for greek letters. But
|
13
|
12 ;;; you can add other completion groups by defining the alist of
|
|
13 ;;; `prefix key' vs `completion list' into the variable
|
|
14 ;;; YaTeX-math-key-list-private. If you wish to accomplish the
|
23
|
15 ;;; completion as follows(prefix key is `,'):
|
13
|
16 ;;;
|
|
17 ;;; KEY COMPLETION
|
|
18 ;;; s \sin
|
|
19 ;;; S \arcsin
|
|
20 ;;; c \cos
|
|
21 ;;; C \arccos
|
|
22 ;;; :
|
|
23 ;;; T \arctan
|
|
24 ;;; l \log
|
|
25 ;;; hs \sinh
|
|
26 ;;;
|
23
|
27 ;;; Typing `s' after `,' makes `\sin', `hs' after `,' makes `\sinh'
|
13
|
28 ;;; and so on. First, you have to define list of key-completion
|
|
29 ;;; pairs. Variable name(YaTeX-math-funcs-list) is arbitrary.
|
|
30 ;;;
|
|
31 ;;; (setq YaTeX-math-funcs-list
|
|
32 ;;; '(("s" "sin")
|
|
33 ;;; ("S" "arcsin")
|
|
34 ;;; :
|
|
35 ;;; ("hs" "sinh")))
|
|
36 ;;;
|
|
37 ;;; Next, define the list of prefix-key vs completion list(defined
|
|
38 ;;; above) into the variable YaTeX-math-key-list-private.
|
|
39 ;;;
|
|
40 ;;; (setq YaTeX-math-key-list-private
|
23
|
41 ;;; '(("," . YaTeX-math-funcs-list)
|
13
|
42 ;;; ("'" . Other-List-if-any)))
|
|
43 ;;;
|
|
44 ;;; Put these expressions into your ~/.emacs, and you can use this
|
|
45 ;;; completion in the YaTeX-math-mode.
|
|
46 ;;;
|
|
47 ;;; And you can add your favorite completion sequences to the
|
23
|
48 ;;; default completion list invoked with `;', by defining those lists
|
13
|
49 ;;; into variable YaTeX-math-sign-alist-private.
|
|
50
|
|
51 ;;; 【イメージ補完の追加方法】
|
|
52 ;;;
|
23
|
53 ;;; 標準のイメージ補完では、「;」で始まる数式記号補完と、「/」で始
|
13
|
54 ;;; まるギリシャ文字補完が使用可能ですが、これ以外の文字で始まる補完
|
23
|
55 ;;; シリーズも定義することができます。例えば、「,」で始まる次のよう
|
13
|
56 ;;; な補完シリーズを定義する場合を考えてみます。
|
|
57 ;;;
|
|
58 ;;; 補完キー 補完結果
|
|
59 ;;; s \sin
|
|
60 ;;; S \arcsin
|
|
61 ;;; c \cos
|
|
62 ;;; C \arccos
|
|
63 ;;; :
|
|
64 ;;; T \arctan
|
|
65 ;;; l \log
|
|
66 ;;; hs \sinh
|
|
67 ;;;
|
23
|
68 ;;; 「,」のあとに s を押すと \sin が、hs を押すと \sinh が入力されま
|
13
|
69 ;;; す。このような補完リストの登録は以下のようにします(変数名は任意)。
|
|
70 ;;;
|
|
71 ;;; (setq YaTeX-math-funcs-list
|
|
72 ;;; '(("s" "sin")
|
|
73 ;;; ("S" "arcsin")
|
|
74 ;;; :
|
|
75 ;;; ("hs" "sinh")))
|
|
76 ;;;
|
23
|
77 ;;; さらに、「,」を押した時にイメージ補完が始まるよう次の変数に、起動キー
|
13
|
78 ;;; と上で定義した補完用変数の登録を行ないます。
|
|
79 ;;;
|
|
80 ;;; (setq YaTeX-math-key-list-private
|
23
|
81 ;;; '(("," . YaTeX-math-funcs-list)
|
13
|
82 ;;; ("'" . ほかに定義したいシリーズがあれば…)))
|
|
83 ;;;
|
|
84 ;;; これらを ~/.emacs に書いておけば、野鳥の math-mode で自分専用の
|
|
85 ;;; イメージ補完が利用できます。
|
|
86
|
|
87 (defvar YaTeX-jisold
|
|
88 (and (boundp 'dos-machine-type)
|
|
89 (eq dos-machine-type 'pc98)))
|
|
90
|
|
91 (defmacro YaTeX-setq-math-sym (sym old new)
|
|
92 (list 'setq sym (list 'if 'YaTeX-jisold old new)))
|
|
93
|
|
94 (YaTeX-setq-math-sym YaTeX-image-in "E" "∈")
|
|
95 (YaTeX-setq-math-sym YaTeX-image-ni "ヨ" "∋")
|
|
96 (YaTeX-setq-math-sym YaTeX-image-subset " _\n(\n ~" "⊂")
|
|
97 (YaTeX-setq-math-sym YaTeX-image-subseteq " _\n(_\n ~" "⊆")
|
|
98 (YaTeX-setq-math-sym YaTeX-image-supset "_\n )\n~" "⊃")
|
|
99 (YaTeX-setq-math-sym YaTeX-image-supseteq "_\n_)\n~" "⊇")
|
|
100 (YaTeX-setq-math-sym YaTeX-image-nabla "___\n\\\\/" "∇")
|
|
101 (YaTeX-setq-math-sym YaTeX-image-partial " -+\n+-+\n+-+" "∂")
|
|
102 (YaTeX-setq-math-sym YaTeX-image-dagger "+\n|" "†")
|
|
103 (YaTeX-setq-math-sym YaTeX-image-ddagger "+\n+\n|" "‡")
|
|
104 (YaTeX-setq-math-sym YaTeX-image-equiv "=\n ̄" "≡")
|
|
105 (YaTeX-setq-math-sym YaTeX-image-int " /\\\n \\\n\\/" "∫")
|
|
106 (YaTeX-setq-math-sym YaTeX-image-bot "|\n ̄" "⊥")
|
|
107 (YaTeX-setq-math-sym YaTeX-image-neg "イ" "¬")
|
|
108 (YaTeX-setq-math-sym YaTeX-image-flat "b" "♭")
|
23
|
109 (YaTeX-setq-math-sym YaTeX-image-sqrt "" "√")
|
13
|
110
|
11
|
111 (setq
|
13
|
112 YaTeX-math-sign-alist-default
|
11
|
113 '(
|
|
114 ;frequently used
|
|
115 ("||" "|" ("||" "‖"))
|
|
116 ("sum" "sum" ("\\-+\n >\n/-+" "Σ"))
|
|
117 ("sigma" "sum" ("\\-+\n >\n/-+" "Σ"))
|
13
|
118 ("integral" "int" (" /\\\n \\\n\\/" YaTeX-image-int))
|
11
|
119 ("ointegral" "oint" " /\\\n(\\)\n\\/")
|
23
|
120 ("sqrt" "sqrt" (" __\n,/" YaTeX-image-sqrt))
|
|
121 ("root" "sqrt" (" __\n,/" YaTeX-image-sqrt))
|
11
|
122 ("A" "forall" "|_|\nV")
|
|
123 ("E" "exists" "-+\n-+\n-+")
|
13
|
124 ("!" "neg" ("--+\n |" YaTeX-image-neg))
|
11
|
125 ("oo" "infty" ("oo" "∞"))
|
|
126 ("\\" "backslash" ("\\" "\"))
|
|
127
|
|
128 ;;binary operators
|
|
129 ("+-" "pm" ("+\n-" "±"))
|
|
130 ("-+" "mp" "-\n+")
|
|
131 ("x" "times" ("x" "×"))
|
|
132 ("/" "div" (",\n-\n'" "÷"))
|
23
|
133 ("f" "frac" "xxx\n---\nyyy" "÷")
|
11
|
134 ("*" "ast" "*")
|
|
135 ("#" "star" ("_/\\_\n\\ /\n//\\\\" "★"))
|
|
136 ("o" "circ" "o")
|
|
137 ("o*" "bullet" " _\n(*)\n ~")
|
|
138 ("." "cdot" ".")
|
|
139 ("cap" "cap" "/-\\\n| |")
|
|
140 ("cup" "cup" "| |\n\\-/")
|
|
141 ("u+" "uplus" "|+|\n\\-/")
|
|
142 ("|~|" "sqcap" "|~|")
|
|
143 ("|_|" "sqcup" "|_|")
|
|
144 ("v" "vee" "v")
|
|
145 ("^" "wedge" "^")
|
|
146 ("\\\\" "setminus" "\\")
|
|
147 (")(" "wr" " )\n(")
|
|
148 ("<>" "diamond" "<>")
|
|
149 ("/\-" "bigtriangleup" ("/\\\n~~" "△"))
|
|
150 ("-\\/" "bigtriangledown" ("__\n\\/" "▽"))
|
|
151 ("<|" "triangleleft" "<|")
|
|
152 ("|>" "triangleright" "|>")
|
|
153 ("<||" "lhd" "/|\n\\|")
|
|
154 ("||>" "rhd" "|\\\n|/")
|
|
155 ("<|-" "unlhd" "<|\n~~")
|
|
156 ("|>-" "unrhd" "|>\n~~")
|
|
157 ("o+" "oplus" " _\n(+)\n ~")
|
|
158 ("o-" "ominus" " _\n(-)\n ~")
|
|
159 ("ox" "otimes" " _\n(x)\n ~")
|
|
160 ("o/" "oslash" " _\n(/)\n ~")
|
|
161 ("o." "odot" "(.)")
|
|
162 ("O" "bigcirc" "O")
|
13
|
163 ("t" "dagger" ("+\n|" YaTeX-image-dagger))
|
|
164 ("tt" "ddagger" ("+\n+\n|" YaTeX-image-ddagger))
|
11
|
165 ("II" "amalg" "II")
|
|
166 ; :
|
|
167 ;;relational operators
|
|
168 ("<" "leq" ("<\n-" "≦"))
|
|
169 (">" "geq" (">\n-" "≧"))
|
13
|
170 ("-=" "equiv" ("=\n-" YaTeX-image-equiv))
|
|
171 ("=-" "equiv" ("=\n-" YaTeX-image-equiv))
|
|
172 ("---" "equiv" ("=\n-" YaTeX-image-equiv))
|
|
173 ("(" "subset" (" _\n(\n ~" YaTeX-image-subset))
|
|
174 ("(-" "subseteq" (" _\n(_\n ~" YaTeX-image-subseteq))
|
|
175 (")" "supset" ("_\n )\n~" YaTeX-image-supset))
|
|
176 (")-" "supseteq" ("_\n_)\n~" YaTeX-image-supseteq))
|
11
|
177 ("[" "sqsubset" "[")
|
|
178 ("[-" "sqsubseteq" "[\n~")
|
|
179 ("]" "sqsupset" "]")
|
|
180 ("]-" "sqsupseteq" "]\n~")
|
13
|
181 ("{" "in" ("(-" YaTeX-image-in))
|
|
182 ("}" "ni" ("-)" YaTeX-image-ni))
|
11
|
183 ("|-" "vdash" "|-")
|
|
184 ("-|" "dashv" "-|")
|
|
185 ("~" "sim" "~(tild)")
|
|
186 ("~-" "simeq" "~\n-")
|
|
187 ("asymp" "asymp" "v\n^")
|
|
188 ("~~" "approx" "~\n~")
|
|
189 ("~=" "cong" "~\n=")
|
|
190 ("=/" "neq" ("=/=" "≠"))
|
|
191 (".=" "doteq" ".\n=")
|
|
192 ("o<" "propto" "o<")
|
|
193 ("|=" "models" "|=")
|
|
194 ("_|_" "perp" "_|_")
|
|
195 ("|" "mid" "|")
|
|
196 ("||" "parallel" "||")
|
|
197 ("bowtie" "bowtie" "|><|(wide)")
|
|
198 ("|><|" "join" "|><|")
|
|
199 ("\\_/" "smile" "\\_/")
|
|
200 ("/~\\" "frown" "/~~\\")
|
|
201 ("-<" "prec" ("-<" "く"))
|
|
202 ("-<=" "preceq" ("-<\n-" "く\n="))
|
|
203 ("<<" "ll" ("<<" "《"))
|
|
204 ; :
|
|
205 ;;arrows
|
|
206 ("<-" "leftarrow" ("<-" "←"))
|
13
|
207 ("\C-b" "leftarrow" ("<-" "←"))
|
|
208 ("<--" "longleftarrow" ("<--" "←--"))
|
11
|
209 ("<=" "Leftarrow" "<=")
|
|
210 ("<==" "Longleftarrow" "<==")
|
|
211 ("->" "rightarrow" ("->" "→"))
|
13
|
212 ("\C-f" "rightarrow" ("->" "→"))
|
11
|
213 ("-->" "longrightarrow" ("-->" "--→"))
|
|
214 ("==>" "Longrightarrow" "==>")
|
|
215 ("<->" "leftrightarrow" ("<->" "←→"))
|
|
216 ("<-->" "longleftrightarrow" ("<---->" "←--→"))
|
|
217 ("<=>" "leftrightarrow" "<=>")
|
|
218 ("<==>" "Longleftrightarrow" "<==>")
|
|
219 ("^|" "uparrow" ("^\n|" "↑"))
|
13
|
220 ("\C-p" "uparrow" ("^\n|" "↑"))
|
11
|
221 ("^||" "Uparrow" "/\\\n||")
|
|
222 ("\C-n" "downarrow" ("|\nv" "↓"))
|
13
|
223 ("v|" "downarrow" ("|\nv" "↓"))
|
|
224 ("v||" "Downarrow" "||\n\\/")
|
11
|
225 ("|->" "mapsto" ("|->" "|→"))
|
|
226 ("<-)" "hookleftarrow" (" ,\n<--+" " ヽ\n<--/"))
|
|
227 ("/-" "leftharpoonup" "/\n~~~")
|
|
228 ("\\-" "leftharpoondown" "__\n\\")
|
|
229 ("-/" "rightharpoondown" "__\n/")
|
|
230 ("-\\" "rightharpoonup" "~~\n\\")
|
|
231 ;other marks
|
|
232 ("Z" "aleph" "|\\|")
|
|
233 ("|\\|" "aleph" "|\\|")
|
|
234 ("h-" "hbar" "_\nh")
|
|
235 ("i" "imath" "i")
|
|
236 ("j" "jmath" "j")
|
|
237 ("l" "ell" "l")
|
|
238 ("wp" "wp" "???")
|
|
239 ("R" "Re" ")R")
|
|
240 ("Im" "Im" "???")
|
|
241 ("mho" "mho" "~|_|~")
|
|
242 ("'" "prime" "'")
|
|
243 ("0" "emptyset" "0")
|
13
|
244 ("nabla" "nabla" ("___\n\\\\/" YaTeX-image-nabla))
|
11
|
245 ("\\/" "surd" "-\\/")
|
|
246 ("surd" "surd" "-\\/")
|
|
247 ("top" "top" "T")
|
13
|
248 ("bot" "bot" ("_|_" YaTeX-image-bot))
|
|
249 ("b" "flat" ("b" YaTeX-image-flat))
|
11
|
250 ("LT" "natural" "|\nLT\n |")
|
13
|
251 ("6" "partial" (" -+\n+-+\n+-+" YaTeX-image-partial))
|
|
252 ("partial" "partial" (" -+\n+-+\n+-+" YaTeX-image-partial))
|
|
253 ("round" "partial" (" -+\n+-+\n+-+" YaTeX-image-partial))
|
11
|
254 ("[]" "box" "[]")
|
|
255 ("Diamond" "Diamond" "/\\\n\\/")
|
|
256 ("3" "triangle" "/\\\n~~")
|
|
257 ("C" "clubsuit" " o\no+o\n |")
|
|
258 ("D" "diamondsuit" "/\\\n\\/")
|
|
259 ("H" "heartsuit" "<^^>\n \\/")
|
|
260 ("S" "spadesuit" " /\\\n<++>\n /\\")
|
|
261
|
|
262 ))
|
|
263
|
13
|
264 (defvar YaTeX-math-sign-alist-private nil
|
11
|
265 "*User definable key vs LaTeX-math-command alist.")
|
|
266
|
|
267 (defvar YaTeX-math-quit-with-strict-match nil
|
|
268 "*T for quitting completion as soon as strict-match is found.")
|
13
|
269 (setq YaTeX-math-sign-alist
|
|
270 (append YaTeX-math-sign-alist-private YaTeX-math-sign-alist-default))
|
|
271
|
|
272 ;;(defun YaTeX-math-alist2array (alist array)
|
|
273 ;; (set array
|
|
274 ;; (let ((array (make-vector (length alist) "")) (list alist) (i 0))
|
|
275 ;; (while list
|
|
276 ;; (aset array i (car (car list)))
|
|
277 ;; (setq i (1+ i) list (cdr list)))
|
|
278 ;; array))
|
|
279 ;;)
|
11
|
280
|
13
|
281 (setq YaTeX-greek-key-alist-default
|
|
282 '(
|
|
283 ("a" "alpha" ("a" "α"))
|
|
284 ("b" "beta" ("|>\n|>\n|" "β"))
|
|
285 ("g" "gamma" ("~r" "γ"))
|
|
286 ("G" "Gamma" ("|~" "Γ"))
|
|
287 ("d" "delta" ("<~\n<>" "δ"))
|
|
288 ("D" "Delta" ("/\\\n~~" "Δ"))
|
|
289 ("e" "epsilon" "<\n<~")
|
|
290 ("e-" "varepsilon" ("(\n(~" "ε"))
|
|
291 ("z" "zeta" ("(~\n >" "ζ"))
|
|
292 ("et" "eta" ("n\n/" "η"))
|
|
293 ("th" "theta" ("8" "θ"))
|
|
294 ("Th" "Theta" ("(8)" "Θ"))
|
|
295 ("th-" "vartheta" ("-8" "-θ"))
|
|
296 ("i" "iota" ("i\n\\_/" "ι"))
|
|
297 ("k" "kappa" ("k" "κ"))
|
|
298 ("l" "lambda" ("\\n/\\" "λ"))
|
|
299 ("L" "Lambda" ("/\\" "Λ"))
|
|
300 ("m" "mu" (" u_\n/" "μ"))
|
|
301 ("n" "nu" ("|/" "ν"))
|
|
302 ("x" "xi" ("E\n >" "ξ"))
|
|
303 ("X" "Xi" ("---\n -\n---" "Ξ"))
|
|
304 ("p" "pi" ("__\n)(" "π"))
|
|
305 ("P" "Pi" ("__\n||" "Π"))
|
|
306 ("p-" "varpi" ("_\nw" "__\nω"))
|
|
307 ("r" "rho" ("/O" "ρ"))
|
|
308 ("r-" "varrho" ("/O\n~~" "ρ\n~~"))
|
|
309 ("s" "sigma" ("o~" "σ"))
|
|
310 ("S" "Sigma" ("\\-+\n >\n/-+" "Σ"))
|
|
311 ("s-" "varsigma" "(~~ \n>")
|
|
312 ("t" "tau" ("__\n(" "τ"))
|
|
313 ("u" "upsilon" ("~v" "υ"))
|
|
314 ("y" "upsilon" ("~v" "υ"))
|
|
315 ("U" "Upsilon" ("~Y~" "Υ"))
|
|
316 ("Y" "Upsilon" ("~Y~" "Υ"))
|
|
317 ("ph" "phi" (" /\n(/)\n/" "φ"))
|
|
318 ("Ph" "Phi" (" _\n(|)\n ~" "Φ"))
|
|
319 ("ph-" "varphi" "\\O\n|")
|
|
320 ("c" "chi" ("x" "χ"))
|
|
321 ("ps" "psi" ("\\|/\\n |" "ψ"))
|
|
322 ("Ps" "Psi" (" ~\n\\|/\\n |" "Ψ"))
|
|
323 ("o" "omega" ("w" "ω"))
|
|
324 ("w" "omega" ("w" "ω"))
|
|
325 ("O" "Omega" ("(~)\n~ ~" "Ω"))
|
|
326 ("W" "Omega" ("(~)\n~ ~" "Ω"))
|
|
327 ("f" "foo")
|
|
328 )
|
|
329 )
|
11
|
330
|
13
|
331 (defvar YaTeX-greek-key-alist-private nil
|
|
332 "*User definable key vs LaTeX-math-command alist.")
|
|
333
|
|
334 (setq YaTeX-greek-key-alist
|
|
335 (append YaTeX-greek-key-alist-private YaTeX-greek-key-alist-default))
|
|
336
|
|
337 ;;(mapcar (function (lambda (x) (YaTeX-math-alist2array x)))
|
|
338 ;; YaTeX-math-key-list)
|
|
339
|
11
|
340 (setq YaTeX-math-indicator
|
|
341 "KEY\tLaTeX sequence\t\tsign")
|
|
342
|
|
343 (defvar YaTeX-math-need-image t
|
|
344 "*T for displaying pseudo image momentarily.")
|
|
345 (defvar YaTeX-math-max-key 8)
|
|
346 (defvar YaTeX-math-max-seq
|
|
347 (* 8 (1+ (/ (length "\\longleftrightarrow") 8))))
|
|
348 (defvar YaTeX-math-max-sign 5)
|
|
349 (defvar YaTeX-math-sign-width
|
|
350 (+ YaTeX-math-max-key YaTeX-math-max-seq YaTeX-math-max-sign))
|
|
351 (defvar YaTeX-math-display-width
|
|
352 (* 8 (1+ (/ YaTeX-math-sign-width 8))))
|
|
353 (defvar YaTeX-math-menu-map nil
|
|
354 "Keymap used in YaTeX mathematical sign menu mode."
|
|
355 )
|
|
356 (if YaTeX-math-menu-map nil
|
|
357 (setq YaTeX-math-menu-map (make-sparse-keymap))
|
|
358 (define-key YaTeX-math-menu-map "n" 'next-line)
|
|
359 (define-key YaTeX-math-menu-map "p" 'previous-line)
|
|
360 (define-key YaTeX-math-menu-map "f" 'YaTeX-math-forward)
|
|
361 (define-key YaTeX-math-menu-map "b" 'YaTeX-math-backward)
|
|
362 (define-key YaTeX-math-menu-map "v" 'scroll-up)
|
|
363 (define-key YaTeX-math-menu-map " " 'scroll-up)
|
|
364 (define-key YaTeX-math-menu-map "c" 'scroll-up)
|
|
365 (define-key YaTeX-math-menu-map "V" 'scroll-down)
|
|
366 (define-key YaTeX-math-menu-map "r" 'scroll-down)
|
|
367 (define-key YaTeX-math-menu-map "\^h" 'scroll-down)
|
|
368 (define-key YaTeX-math-menu-map "<" 'beginning-of-buffer)
|
|
369 (define-key YaTeX-math-menu-map ">" 'end-of-buffer)
|
|
370 (define-key YaTeX-math-menu-map "\^m" 'exit-recursive-edit)
|
|
371 (define-key YaTeX-math-menu-map "q" 'abort-recursive-edit))
|
|
372
|
13
|
373 (defvar YaTeX-math-exit-key "\e"
|
|
374 "*Key sequence after prefix key of YaTeX-math-mode to exit from math-mode."
|
|
375 )
|
|
376
|
11
|
377 (defmacro YaTeX-math-japanese-sign (list)
|
|
378 (list 'nth 1 list))
|
|
379
|
|
380 (defvar YaTeX-math-cmd-regexp (concat (regexp-quote YaTeX-ec) "[A-z]"))
|
|
381
|
13
|
382 ;;;
|
|
383 ;;YaTeX math-mode functions
|
|
384 ;;;
|
23
|
385 ;;;###autoload from yatex.el
|
13
|
386 (defun YaTeX-toggle-math-mode (&optional arg)
|
|
387 (interactive "P")
|
|
388 (or (memq 'YaTeX-math-mode mode-line-format) nil
|
|
389 (setq mode-line-format
|
|
390 (append (list "" 'YaTeX-math-mode) mode-line-format)))
|
23
|
391 (if YaTeX-auto-math-mode nil ;Only effective on manual mode.
|
|
392 (if (or arg (null YaTeX-math-mode))
|
|
393 (let (keys)
|
|
394 (setq YaTeX-math-mode "math:")
|
|
395 (message "Turn on math mode. Prefix keys are %s"
|
|
396 (mapconcat 'car YaTeX-math-key-list " "))
|
|
397 (sit-for 3)
|
|
398 (message
|
|
399 (concat "To exit from math-mode, type `ESC' after prefix, "
|
|
400 "or type `"
|
|
401 (key-description
|
|
402 (car
|
|
403 (where-is-internal
|
|
404 'YaTeX-switch-mode-menu YaTeX-mode-map)))
|
|
405 " $'")))
|
|
406 (setq YaTeX-math-mode nil)
|
|
407 (message "Exit from math mode."))
|
|
408 (set-buffer-modified-p (buffer-modified-p)))
|
13
|
409 )
|
|
410
|
11
|
411 (defun YaTeX-math-forward (arg)
|
|
412 (interactive "p")
|
|
413 (re-search-forward YaTeX-math-cmd-regexp nil t arg))
|
|
414
|
|
415 (defun YaTeX-math-backward (arg)
|
|
416 (interactive "p")
|
|
417 (re-search-backward YaTeX-math-cmd-regexp nil t arg))
|
|
418
|
13
|
419 (defun YaTeX-math-gets (sign)
|
|
420 (cond
|
|
421 ((null sign) nil)
|
|
422 ((listp sign)
|
|
423 (setq sign
|
|
424 (cond
|
|
425 (YaTeX-japan (YaTeX-math-japanese-sign sign))
|
|
426 (t (car sign))))
|
|
427 (YaTeX-math-gets sign))
|
|
428 ((symbolp sign)
|
|
429 (YaTeX-math-gets (symbol-value sign)))
|
|
430 (t sign))
|
|
431 )
|
|
432
|
11
|
433 (defun YaTeX-math-get-sign (list)
|
13
|
434 (YaTeX-math-gets (car (cdr-safe (cdr-safe list))))
|
11
|
435 )
|
|
436
|
23
|
437 (defun YaTeX-in-math-mode-p ()
|
|
438 "If current position is supposed to be in LaTeX-math-mode, return t."
|
|
439 (or (YaTeX-quick-in-environment-p
|
|
440 '("math" "eqnarray" "equation" "eqnarray*" "displaymath"))
|
|
441 (let ((p (point)) (nest 0) me0
|
|
442 (boundary
|
|
443 (save-excursion
|
|
444 (if (looking-at YaTeX-paragraph-delimiter)
|
|
445 (goto-char (max (point-min) (1- (point)))))
|
|
446 (re-search-backward YaTeX-paragraph-delimiter nil 1)
|
|
447 (point))))
|
|
448 (save-excursion
|
|
449 (cond
|
|
450 ((catch 'open
|
|
451 (save-excursion
|
|
452 (while (and (>= nest 0)
|
|
453 (re-search-backward
|
|
454 (concat YaTeX-ec-regexp ;\
|
|
455 "\\([()]\\|[][]\\)") boundary t))
|
|
456 (setq me0 (match-end 0))
|
|
457 (if (or (YaTeX-on-comment-p)
|
|
458 (YaTeX-quick-in-environment-p "verbatim")) nil
|
|
459 (if (or (= (char-after (1- me0)) ?\))
|
|
460 (= (char-after (1- me0)) ?\]))
|
|
461 (setq nest (1+ nest))
|
|
462 (setq nest (1- nest)))))
|
|
463 (if (< nest 0) (throw 'open t))))
|
|
464 t)
|
|
465 (t (catch 'dollar
|
|
466 (while (search-backward "$" boundary t)
|
|
467 (cond
|
|
468 ((equal (char-after (1- (point))) ?$) ; $$ equation $$
|
|
469 (backward-char 1)
|
|
470 (setq nest (1+ nest)))
|
|
471 ((and (equal (char-after (1- (point))) ?\\ )
|
|
472 (not (equal (char-after (- (point) 3)) ?\\ )))
|
|
473 nil) ;\$
|
|
474 (t (setq nest (1+ nest)))))
|
|
475 (if (= (% nest 2) 1) (throw 'dollar t))))))))
|
|
476 )
|
|
477
|
11
|
478 (defun YaTeX-math-display-list (list cols)
|
|
479 (goto-char (point-max))
|
|
480 (if (= cols 0) (if (not (eolp)) (newline 1))
|
|
481 (forward-line -1)
|
|
482 (while (looking-at "[ \t\n]") (forward-line -1)))
|
|
483 (end-of-line)
|
|
484 (let ((indent (* YaTeX-math-display-width cols)) sign str to)
|
|
485 (indent-to indent)
|
|
486 (insert (car list))
|
|
487 (indent-to (setq indent (+ indent YaTeX-math-max-key)))
|
|
488 (insert "\\" (car (cdr list)))
|
|
489 (setq indent (+ indent YaTeX-math-max-seq))
|
|
490 (setq sign (YaTeX-math-get-sign list))
|
13
|
491 (while (and sign (not (string= "" sign)))
|
11
|
492 (setq to (string-match "\n" sign)
|
|
493 str (if to (substring sign 0 to) sign))
|
|
494 (end-of-line)
|
|
495 (indent-to indent)
|
|
496 (insert str)
|
|
497 (cond ((eobp) (newline 1))
|
|
498 ((> cols 0) (forward-line 1)))
|
|
499 (setq sign (if to (substring sign (1+ to)) "")))))
|
|
500
|
|
501 (defvar YaTeX-math-menu-buffer "*math-mode-signs*")
|
|
502
|
|
503 (defun YaTeX-math-show-menu (match-str)
|
|
504 (save-window-excursion
|
|
505 (pop-to-buffer YaTeX-math-menu-buffer)
|
|
506 (let ((maxcols (max 1 (/ (screen-width) YaTeX-math-sign-width)))
|
|
507 (case-fold-search nil)
|
13
|
508 (cols 0) (list alist) command)
|
11
|
509 (erase-buffer)
|
13
|
510 (insert
|
|
511 "Candidates of sign. [n:next p:prev f:forw b:back q:quit RET:select]\n")
|
11
|
512 (insert YaTeX-math-indicator "\t")
|
|
513 (insert YaTeX-math-indicator)
|
|
514 (newline 1)
|
|
515 (insert-char ?- (1- (screen-width)))
|
|
516 (newline 1)
|
|
517 (while list
|
|
518 (if (string-match match-str (car (car list)))
|
|
519 (progn (YaTeX-math-display-list (car list) cols)
|
|
520 (setq cols (% (1+ cols) maxcols))))
|
|
521 (setq list (cdr list)))
|
13
|
522 (goto-line 4)
|
11
|
523 (use-local-map YaTeX-math-menu-map)
|
|
524 (unwind-protect
|
|
525 (recursive-edit)
|
|
526 (skip-chars-backward "^ \t\n")
|
|
527 (setq command
|
|
528 (if (re-search-forward YaTeX-math-cmd-regexp nil t)
|
|
529 (buffer-substring
|
|
530 (match-beginning 0)
|
|
531 (prog2 (skip-chars-forward "^ \t\n") (point)))
|
|
532 nil))
|
|
533 (kill-buffer YaTeX-math-menu-buffer))
|
|
534 command))
|
|
535 )
|
|
536
|
|
537 ;
|
|
538 (defun YaTeX-math-show-image (image &optional exit-char)
|
|
539 "Momentarily display IMAGE at the beginning of the next line;
|
|
540 erase it on the next keystroke. The window is recentered if necessary
|
|
541 to make the whole string visible. If the window isn't large enough,
|
|
542 at least you get to read the beginning."
|
13
|
543 (if (and image (not (string= image "")))
|
|
544 (let ((buffer-read-only nil)
|
|
545 (modified (buffer-modified-p))
|
|
546 (name buffer-file-name)
|
|
547 insert-start
|
|
548 insert-end)
|
|
549 (unwind-protect
|
|
550 (progn
|
|
551 (save-excursion
|
|
552 ;; defeat file locking... don't try this at home, kids!
|
|
553 (setq buffer-file-name nil)
|
|
554 (forward-line 1)
|
|
555 (setq insert-start (point))
|
|
556 (if (eobp) (newline))
|
|
557 (insert image)
|
|
558 (setq insert-end (point)))
|
|
559 ; make sure the whole string is visible
|
|
560 (if (not (pos-visible-in-window-p insert-end))
|
|
561 (recenter (max 0
|
|
562 (- (window-height)
|
|
563 (count-lines insert-start insert-end)
|
|
564 2))))
|
|
565 (let ((char (read-char)))
|
|
566 (or (eq char exit-char)
|
|
567 (setq unread-command-char char))))
|
|
568 (if insert-end
|
|
569 (save-excursion
|
|
570 (delete-region insert-start insert-end)))
|
|
571 (setq buffer-file-name name)
|
|
572 (set-buffer-modified-p modified)))))
|
11
|
573
|
23
|
574 (defun YaTeX-math-insert-sequence (&optional force)
|
|
575 "Insert math-mode sequence with image completion."
|
|
576 (interactive "P")
|
13
|
577 (let*((key "") regkey str last-char list i
|
|
578 (case-fold-search nil) match sign
|
|
579 (this-key (char-to-string last-command-char))
|
|
580 (alist (symbol-value (cdr (assoc this-key YaTeX-math-key-list))))
|
|
581 (n (length alist)) (beg (point)) result)
|
11
|
582 (setq result
|
|
583 (catch 'complete
|
23
|
584 (if (and (not force)
|
|
585 (or (and (not YaTeX-auto-math-mode) (not YaTeX-math-mode))
|
|
586 (not (YaTeX-in-math-mode-p))))
|
|
587 (throw 'complete 'escape));this tag should be exit, but...
|
11
|
588 (while t
|
23
|
589 (message "Sequence(TAB for menu): %s" key)
|
11
|
590 (setq last-char (read-char)
|
|
591 key (concat key (char-to-string last-char))
|
13
|
592 i 0)
|
11
|
593 (cond
|
13
|
594 ((string= key this-key) ;;invoke key itself
|
11
|
595 (throw 'complete 'escape))
|
13
|
596 ((string= key YaTeX-math-exit-key) ;;exit from math-mode
|
|
597 (throw 'complete 'exit))
|
23
|
598 ((string-match "\r" key) ;;RET = kakutei
|
|
599 (throw 'complete 'select))
|
|
600 ((string-match "[\C-g\C-c]" key) ;;C-g = abort
|
|
601 (throw 'complete 'abort))
|
|
602 ((string-match "[\t\n]" key) ;;TAB, LFD = menu
|
|
603 (throw 'complete 'menu))
|
|
604 ((string-match "[\C-h\C-?]" key) ;;BS, DEL = BS
|
|
605 (if (< (length key) 2) (throw 'complete 'abort))
|
13
|
606 (setq key (substring key 0 -2))))
|
|
607
|
|
608 (setq regkey (concat "^" (regexp-quote key)))
|
23
|
609 (message "Sequence(TAB for menu): %s" key)
|
11
|
610 (if
|
|
611 (catch 'found
|
|
612 ;;(1)input string strictly matches with alist
|
23
|
613 (setq match (assoc key alist))
|
|
614 ;;remember previous match
|
|
615
|
11
|
616 ;;(2)search partial match into alist
|
13
|
617 (setq list alist)
|
11
|
618 (while (< i n)
|
|
619 (if (string-match
|
13
|
620 regkey
|
|
621 ;;(aref array i)
|
|
622 ;;(car (nth i alist))
|
23
|
623 (car (car list)))
|
11
|
624 (progn
|
|
625 (or match
|
13
|
626 ;;(setq match (nth i alist))
|
|
627 (setq match (car list)))
|
11
|
628 (throw 'found t)))
|
13
|
629 (setq i (1+ i) list (cdr list)))) ;catch 'found
|
11
|
630 nil ;;if any match, continue reading
|
|
631 ;;else reading of sequence has been done.
|
|
632 (message "complete.")
|
23
|
633 (throw 'complete t))
|
|
634
|
11
|
635 (if match
|
|
636 (progn (delete-region beg (point))
|
23
|
637 (setq single-command (car (cdr match)))
|
|
638 (insert YaTeX-ec single-command)
|
13
|
639 (if (and YaTeX-math-need-image
|
|
640 (setq sign (YaTeX-math-get-sign match)))
|
|
641 (YaTeX-math-show-image (concat sign "\n")))
|
11
|
642 )
|
|
643 nil)
|
|
644 )))
|
|
645 (cond
|
|
646 ((eq result t)
|
|
647 (setq YaTeX-current-completion-type 'maketitle)
|
23
|
648
|
13
|
649 ;;;(sit-for 1)
|
11
|
650 (setq unread-command-char last-char)
|
|
651 (insert (YaTeX-addin single-command)))
|
|
652 ((eq result 'abort)
|
|
653 (delete-region beg (point))
|
|
654 (message "Abort."))
|
|
655 ((eq result 'escape)
|
|
656 (delete-region beg (point))
|
13
|
657 (insert this-key))
|
23
|
658 ((eq result 'select)
|
|
659 (message "Done."))
|
13
|
660 ((eq result 'exit)
|
|
661 (delete-region beg (point))
|
|
662 (YaTeX-toggle-math-mode))
|
11
|
663 ((eq result 'menu)
|
|
664 (delete-region beg (point))
|
|
665 (setq key (concat "^" (regexp-quote (substring key 0 -1))))
|
|
666 (insert (YaTeX-math-show-menu key)))))
|
|
667 )
|
|
668 ;;
|
|
669 (provide 'yatexmth)
|
13
|
670
|
|
671 ; Local variables:
|
|
672 ; fill-prefix: ";;; "
|
|
673 ; paragraph-start: "^$\\|\\|;;;$"
|
|
674 ; paragraph-separate: "^$\\|\\|;;;$"
|
|
675 ; End:
|