rev |
line source |
yuuji@395
|
1 ;;; yatexmth.el --- YaTeX math-mode-specific functions -*- coding: sjis -*-
|
yuuji@287
|
2 ;;;
|
yuuji@607
|
3 ;;; (c)1993-2022 by HIROSE Yuuji [yuuji@yatex.org]
|
yuuji@607
|
4 ;;; Last modified Sun Dec 25 13:56:02 2022 on firestorm
|
yuuji@366
|
5 ;;; $Id$
|
yuuji@11
|
6
|
yuuji@287
|
7 ;;; Commentary:
|
yuuji@13
|
8 ;;; [Customization guide]
|
yuuji@13
|
9 ;;;
|
yuuji@13
|
10 ;;; By default, you can use two completion groups in YaTeX math
|
yuuji@52
|
11 ;;; mode, `;' for mathematical signs and `:' for greek letters. But
|
yuuji@13
|
12 ;;; you can add other completion groups by defining the alist of
|
yuuji@13
|
13 ;;; `prefix key' vs `completion list' into the variable
|
yuuji@13
|
14 ;;; YaTeX-math-key-list-private. If you wish to accomplish the
|
yuuji@23
|
15 ;;; completion as follows(prefix key is `,'):
|
yuuji@13
|
16 ;;;
|
yuuji@13
|
17 ;;; KEY COMPLETION
|
yuuji@13
|
18 ;;; s \sin
|
yuuji@13
|
19 ;;; S \arcsin
|
yuuji@13
|
20 ;;; c \cos
|
yuuji@13
|
21 ;;; C \arccos
|
yuuji@13
|
22 ;;; :
|
yuuji@13
|
23 ;;; T \arctan
|
yuuji@13
|
24 ;;; l \log
|
yuuji@13
|
25 ;;; hs \sinh
|
yuuji@13
|
26 ;;;
|
yuuji@23
|
27 ;;; Typing `s' after `,' makes `\sin', `hs' after `,' makes `\sinh'
|
yuuji@13
|
28 ;;; and so on. First, you have to define list of key-completion
|
yuuji@13
|
29 ;;; pairs. Variable name(YaTeX-math-funcs-list) is arbitrary.
|
yuuji@13
|
30 ;;;
|
yuuji@13
|
31 ;;; (setq YaTeX-math-funcs-list
|
yuuji@13
|
32 ;;; '(("s" "sin")
|
yuuji@13
|
33 ;;; ("S" "arcsin")
|
yuuji@13
|
34 ;;; :
|
yuuji@13
|
35 ;;; ("hs" "sinh")))
|
yuuji@13
|
36 ;;;
|
yuuji@13
|
37 ;;; Next, define the list of prefix-key vs completion list(defined
|
yuuji@13
|
38 ;;; above) into the variable YaTeX-math-key-list-private.
|
yuuji@13
|
39 ;;;
|
yuuji@13
|
40 ;;; (setq YaTeX-math-key-list-private
|
yuuji@23
|
41 ;;; '(("," . YaTeX-math-funcs-list)
|
yuuji@13
|
42 ;;; ("'" . Other-List-if-any)))
|
yuuji@13
|
43 ;;;
|
yuuji@13
|
44 ;;; Put these expressions into your ~/.emacs, and you can use this
|
yuuji@51
|
45 ;;; completion in the math-mode.
|
yuuji@13
|
46 ;;;
|
yuuji@13
|
47 ;;; And you can add your favorite completion sequences to the
|
yuuji@23
|
48 ;;; default completion list invoked with `;', by defining those lists
|
yuuji@13
|
49 ;;; into variable YaTeX-math-sign-alist-private.
|
yuuji@13
|
50
|
yuuji@13
|
51 ;;; 【イメージ補完の追加方法】
|
yuuji@13
|
52 ;;;
|
yuuji@52
|
53 ;;; 標準のイメージ補完では、「;」で始まる数式記号補完と、「:」で始
|
yuuji@13
|
54 ;;; まるギリシャ文字補完が使用可能ですが、これ以外の文字で始まる補完
|
yuuji@23
|
55 ;;; シリーズも定義することができます。例えば、「,」で始まる次のよう
|
yuuji@13
|
56 ;;; な補完シリーズを定義する場合を考えてみます。
|
yuuji@13
|
57 ;;;
|
yuuji@13
|
58 ;;; 補完キー 補完結果
|
yuuji@13
|
59 ;;; s \sin
|
yuuji@13
|
60 ;;; S \arcsin
|
yuuji@13
|
61 ;;; c \cos
|
yuuji@13
|
62 ;;; C \arccos
|
yuuji@13
|
63 ;;; :
|
yuuji@13
|
64 ;;; T \arctan
|
yuuji@13
|
65 ;;; l \log
|
yuuji@13
|
66 ;;; hs \sinh
|
yuuji@13
|
67 ;;;
|
yuuji@23
|
68 ;;; 「,」のあとに s を押すと \sin が、hs を押すと \sinh が入力されま
|
yuuji@13
|
69 ;;; す。このような補完リストの登録は以下のようにします(変数名は任意)。
|
yuuji@13
|
70 ;;;
|
yuuji@13
|
71 ;;; (setq YaTeX-math-funcs-list
|
yuuji@13
|
72 ;;; '(("s" "sin")
|
yuuji@13
|
73 ;;; ("S" "arcsin")
|
yuuji@13
|
74 ;;; :
|
yuuji@13
|
75 ;;; ("hs" "sinh")))
|
yuuji@13
|
76 ;;;
|
yuuji@23
|
77 ;;; さらに、「,」を押した時にイメージ補完が始まるよう次の変数に、起動キー
|
yuuji@13
|
78 ;;; と上で定義した補完用変数の登録を行ないます。
|
yuuji@13
|
79 ;;;
|
yuuji@13
|
80 ;;; (setq YaTeX-math-key-list-private
|
yuuji@23
|
81 ;;; '(("," . YaTeX-math-funcs-list)
|
yuuji@13
|
82 ;;; ("'" . ほかに定義したいシリーズがあれば…)))
|
yuuji@13
|
83 ;;;
|
yuuji@51
|
84 ;;; これらを ~/.emacs に書いておけば、math-mode で自分専用のイメージ
|
yuuji@51
|
85 ;;; 補完が利用できます。
|
yuuji@13
|
86
|
yuuji@287
|
87 ;;; Code:
|
yuuji@13
|
88 (defvar YaTeX-jisold
|
yuuji@13
|
89 (and (boundp 'dos-machine-type)
|
yuuji@13
|
90 (eq dos-machine-type 'pc98)))
|
yuuji@13
|
91
|
yuuji@13
|
92 (defmacro YaTeX-setq-math-sym (sym old new)
|
yuuji@13
|
93 (list 'setq sym (list 'if 'YaTeX-jisold old new)))
|
yuuji@13
|
94
|
yuuji@13
|
95 (YaTeX-setq-math-sym YaTeX-image-in "E" "∈")
|
yuuji@13
|
96 (YaTeX-setq-math-sym YaTeX-image-ni "ヨ" "∋")
|
yuuji@13
|
97 (YaTeX-setq-math-sym YaTeX-image-subset " _\n(\n ~" "⊂")
|
yuuji@13
|
98 (YaTeX-setq-math-sym YaTeX-image-subseteq " _\n(_\n ~" "⊆")
|
yuuji@13
|
99 (YaTeX-setq-math-sym YaTeX-image-supset "_\n )\n~" "⊃")
|
yuuji@13
|
100 (YaTeX-setq-math-sym YaTeX-image-supseteq "_\n_)\n~" "⊇")
|
yuuji@13
|
101 (YaTeX-setq-math-sym YaTeX-image-nabla "___\n\\\\/" "∇")
|
yuuji@13
|
102 (YaTeX-setq-math-sym YaTeX-image-partial " -+\n+-+\n+-+" "∂")
|
yuuji@13
|
103 (YaTeX-setq-math-sym YaTeX-image-dagger "+\n|" "†")
|
yuuji@13
|
104 (YaTeX-setq-math-sym YaTeX-image-ddagger "+\n+\n|" "‡")
|
yuuji@13
|
105 (YaTeX-setq-math-sym YaTeX-image-equiv "=\n ̄" "≡")
|
yuuji@13
|
106 (YaTeX-setq-math-sym YaTeX-image-int " /\\\n \\\n\\/" "∫")
|
yuuji@13
|
107 (YaTeX-setq-math-sym YaTeX-image-bot "|\n ̄" "⊥")
|
yuuji@13
|
108 (YaTeX-setq-math-sym YaTeX-image-neg "イ" "¬")
|
yuuji@13
|
109 (YaTeX-setq-math-sym YaTeX-image-flat "b" "♭")
|
yuuji@23
|
110 (YaTeX-setq-math-sym YaTeX-image-sqrt "" "√")
|
yuuji@80
|
111 (defvar YaTeX-image-nearrow '("__\n /|\n/" " _\n /|\n/" ))
|
yuuji@80
|
112 (defvar YaTeX-image-nwarrow '(" __\n|\\\n \\" " _\n|\\n \"))
|
yuuji@80
|
113 (defvar YaTeX-image-searrow '("\\\n \\|\n--`" "\\n \|\n  ̄"))
|
yuuji@80
|
114 (defvar YaTeX-image-swarrow '(" /\n|/\n'~~" " /\n|/\n  ̄"))
|
yuuji@80
|
115
|
yuuji@13
|
116
|
yuuji@52
|
117 (defvar
|
yuuji@13
|
118 YaTeX-math-sign-alist-default
|
yuuji@11
|
119 '(
|
yuuji@11
|
120 ;frequently used
|
yuuji@11
|
121 ("||" "|" ("||" "‖"))
|
yuuji@11
|
122 ("sum" "sum" ("\\-+\n >\n/-+" "Σ"))
|
yuuji@11
|
123 ("sigma" "sum" ("\\-+\n >\n/-+" "Σ"))
|
yuuji@13
|
124 ("integral" "int" (" /\\\n \\\n\\/" YaTeX-image-int))
|
yuuji@11
|
125 ("ointegral" "oint" " /\\\n(\\)\n\\/")
|
yuuji@23
|
126 ("sqrt" "sqrt" (" __\n,/" YaTeX-image-sqrt))
|
yuuji@23
|
127 ("root" "sqrt" (" __\n,/" YaTeX-image-sqrt))
|
yuuji@11
|
128 ("A" "forall" "|_|\nV")
|
yuuji@11
|
129 ("E" "exists" "-+\n-+\n-+")
|
yuuji@13
|
130 ("!" "neg" ("--+\n |" YaTeX-image-neg))
|
yuuji@11
|
131 ("oo" "infty" ("oo" "∞"))
|
yuuji@11
|
132 ("\\" "backslash" ("\\" "\"))
|
yuuji@68
|
133 ("..." "cdots" ("..." "…"))
|
yuuji@11
|
134
|
yuuji@11
|
135 ;;binary operators
|
yuuji@11
|
136 ("+-" "pm" ("+\n-" "±"))
|
yuuji@11
|
137 ("-+" "mp" "-\n+")
|
yuuji@11
|
138 ("x" "times" ("x" "×"))
|
yuuji@11
|
139 ("/" "div" (",\n-\n'" "÷"))
|
yuuji@23
|
140 ("f" "frac" "xxx\n---\nyyy" "÷")
|
yuuji@11
|
141 ("*" "ast" "*")
|
yuuji@11
|
142 ("#" "star" ("_/\\_\n\\ /\n//\\\\" "★"))
|
yuuji@11
|
143 ("o" "circ" "o")
|
yuuji@11
|
144 ("o*" "bullet" " _\n(*)\n ~")
|
yuuji@11
|
145 ("." "cdot" ".")
|
yuuji@11
|
146 ("cap" "cap" "/-\\\n| |")
|
yuuji@11
|
147 ("cup" "cup" "| |\n\\-/")
|
yuuji@11
|
148 ("u+" "uplus" "|+|\n\\-/")
|
yuuji@11
|
149 ("|~|" "sqcap" "|~|")
|
yuuji@11
|
150 ("|_|" "sqcup" "|_|")
|
yuuji@11
|
151 ("v" "vee" "v")
|
yuuji@11
|
152 ("^" "wedge" "^")
|
yuuji@11
|
153 ("\\\\" "setminus" "\\")
|
yuuji@11
|
154 (")(" "wr" " )\n(")
|
yuuji@11
|
155 ("<>" "diamond" "<>")
|
yuuji@128
|
156 ("/\\-" "bigtriangleup" ("/\\\n~~" "△"))
|
yuuji@11
|
157 ("-\\/" "bigtriangledown" ("__\n\\/" "▽"))
|
yuuji@11
|
158 ("<|" "triangleleft" "<|")
|
yuuji@11
|
159 ("|>" "triangleright" "|>")
|
yuuji@11
|
160 ("<||" "lhd" "/|\n\\|")
|
yuuji@11
|
161 ("||>" "rhd" "|\\\n|/")
|
yuuji@11
|
162 ("<|-" "unlhd" "<|\n~~")
|
yuuji@11
|
163 ("|>-" "unrhd" "|>\n~~")
|
yuuji@11
|
164 ("o+" "oplus" " _\n(+)\n ~")
|
yuuji@11
|
165 ("o-" "ominus" " _\n(-)\n ~")
|
yuuji@11
|
166 ("ox" "otimes" " _\n(x)\n ~")
|
yuuji@11
|
167 ("o/" "oslash" " _\n(/)\n ~")
|
yuuji@11
|
168 ("o." "odot" "(.)")
|
yuuji@11
|
169 ("O" "bigcirc" "O")
|
yuuji@13
|
170 ("t" "dagger" ("+\n|" YaTeX-image-dagger))
|
yuuji@13
|
171 ("tt" "ddagger" ("+\n+\n|" YaTeX-image-ddagger))
|
yuuji@11
|
172 ("II" "amalg" "II")
|
yuuji@11
|
173 ; :
|
yuuji@11
|
174 ;;relational operators
|
yuuji@134
|
175 ("<" "leq" ("<\n-" "<\n-"))
|
yuuji@134
|
176 ("=<" "leqq" ("<\n=" "≦"))
|
yuuji@134
|
177 (">" "geq" (">\n-" ">\n-"))
|
yuuji@134
|
178 (">=" "geqq" (">\n=" "≧"))
|
yuuji@143
|
179 ("=:" "fallingdotseq" (".\n==\n ." "≒"))
|
yuuji@13
|
180 ("-=" "equiv" ("=\n-" YaTeX-image-equiv))
|
yuuji@13
|
181 ("=-" "equiv" ("=\n-" YaTeX-image-equiv))
|
yuuji@13
|
182 ("---" "equiv" ("=\n-" YaTeX-image-equiv))
|
yuuji@13
|
183 ("(" "subset" (" _\n(\n ~" YaTeX-image-subset))
|
yuuji@13
|
184 ("(-" "subseteq" (" _\n(_\n ~" YaTeX-image-subseteq))
|
yuuji@13
|
185 (")" "supset" ("_\n )\n~" YaTeX-image-supset))
|
yuuji@13
|
186 (")-" "supseteq" ("_\n_)\n~" YaTeX-image-supseteq))
|
yuuji@11
|
187 ("[" "sqsubset" "[")
|
yuuji@11
|
188 ("[-" "sqsubseteq" "[\n~")
|
yuuji@11
|
189 ("]" "sqsupset" "]")
|
yuuji@11
|
190 ("]-" "sqsupseteq" "]\n~")
|
yuuji@13
|
191 ("{" "in" ("(-" YaTeX-image-in))
|
yuuji@13
|
192 ("}" "ni" ("-)" YaTeX-image-ni))
|
yuuji@11
|
193 ("|-" "vdash" "|-")
|
yuuji@11
|
194 ("-|" "dashv" "-|")
|
yuuji@11
|
195 ("~" "sim" "~(tild)")
|
yuuji@11
|
196 ("~-" "simeq" "~\n-")
|
yuuji@11
|
197 ("asymp" "asymp" "v\n^")
|
yuuji@11
|
198 ("~~" "approx" "~\n~")
|
yuuji@11
|
199 ("~=" "cong" "~\n=")
|
yuuji@11
|
200 ("=/" "neq" ("=/=" "≠"))
|
yuuji@11
|
201 (".=" "doteq" ".\n=")
|
yuuji@11
|
202 ("o<" "propto" "o<")
|
yuuji@11
|
203 ("|=" "models" "|=")
|
yuuji@11
|
204 ("_|_" "perp" "_|_")
|
yuuji@11
|
205 ("|" "mid" "|")
|
yuuji@11
|
206 ("||" "parallel" "||")
|
yuuji@11
|
207 ("bowtie" "bowtie" "|><|(wide)")
|
yuuji@11
|
208 ("|><|" "join" "|><|")
|
yuuji@11
|
209 ("\\_/" "smile" "\\_/")
|
yuuji@11
|
210 ("/~\\" "frown" "/~~\\")
|
yuuji@11
|
211 ("-<" "prec" ("-<" "く"))
|
yuuji@11
|
212 ("-<=" "preceq" ("-<\n-" "く\n="))
|
yuuji@11
|
213 ("<<" "ll" ("<<" "《"))
|
yuuji@134
|
214 ("<<" "lll" "<<<")
|
yuuji@80
|
215 (">>" "gg" (">>" "》"))
|
yuuji@134
|
216 (">>>" "ggg" ">>>")
|
yuuji@11
|
217 ; :
|
yuuji@11
|
218 ;;arrows
|
yuuji@11
|
219 ("<-" "leftarrow" ("<-" "←"))
|
yuuji@13
|
220 ("\C-b" "leftarrow" ("<-" "←"))
|
yuuji@13
|
221 ("<--" "longleftarrow" ("<--" "←--"))
|
yuuji@11
|
222 ("<=" "Leftarrow" "<=")
|
yuuji@11
|
223 ("<==" "Longleftarrow" "<==")
|
yuuji@11
|
224 ("->" "rightarrow" ("->" "→"))
|
yuuji@13
|
225 ("\C-f" "rightarrow" ("->" "→"))
|
yuuji@11
|
226 ("-->" "longrightarrow" ("-->" "--→"))
|
yuuji@64
|
227 ("=>" "Rightarrow" "=>")
|
yuuji@11
|
228 ("==>" "Longrightarrow" "==>")
|
yuuji@11
|
229 ("<->" "leftrightarrow" ("<->" "←→"))
|
yuuji@11
|
230 ("<-->" "longleftrightarrow" ("<---->" "←--→"))
|
yuuji@47
|
231 ("<=>" "Leftrightarrow" "<=>")
|
yuuji@11
|
232 ("<==>" "Longleftrightarrow" "<==>")
|
yuuji@11
|
233 ("^|" "uparrow" ("^\n|" "↑"))
|
yuuji@13
|
234 ("\C-p" "uparrow" ("^\n|" "↑"))
|
yuuji@11
|
235 ("^||" "Uparrow" "/\\\n||")
|
yuuji@11
|
236 ("\C-n" "downarrow" ("|\nv" "↓"))
|
yuuji@13
|
237 ("v|" "downarrow" ("|\nv" "↓"))
|
yuuji@13
|
238 ("v||" "Downarrow" "||\n\\/")
|
yuuji@80
|
239 ("\C-p\C-f" "nearrow" YaTeX-image-nearrow)
|
yuuji@80
|
240 ("\C-f\C-p" "nearrow" YaTeX-image-nearrow)
|
yuuji@80
|
241 ("ne" "nearrow" YaTeX-image-nearrow)
|
yuuji@80
|
242 ("\C-p\C-b" "nwarrow" YaTeX-image-nwarrow)
|
yuuji@80
|
243 ("\C-b\C-p" "nwarrow" YaTeX-image-nwarrow)
|
yuuji@80
|
244 ("nw" "nwarrow" YaTeX-image-nwarrow)
|
yuuji@80
|
245 ("\C-n\C-f" "searrow" YaTeX-image-searrow)
|
yuuji@80
|
246 ("\C-f\C-n" "searrow" YaTeX-image-searrow)
|
yuuji@80
|
247 ("se" "searrow" YaTeX-image-searrow)
|
yuuji@80
|
248 ("\C-n\C-b" "swarrow" YaTeX-image-swarrow)
|
yuuji@80
|
249 ("\C-b\C-n" "swarrow" YaTeX-image-swarrow)
|
yuuji@80
|
250 ("sw" "swarrow" YaTeX-image-swarrow)
|
yuuji@11
|
251 ("|->" "mapsto" ("|->" "|→"))
|
yuuji@11
|
252 ("<-)" "hookleftarrow" (" ,\n<--+" " ヽ\n<--/"))
|
yuuji@69
|
253 ("(->" "hookrightarrow" ("`\n+-->" "/\n\-->"))
|
yuuji@11
|
254 ("/-" "leftharpoonup" "/\n~~~")
|
yuuji@11
|
255 ("\\-" "leftharpoondown" "__\n\\")
|
yuuji@11
|
256 ("-/" "rightharpoondown" "__\n/")
|
yuuji@11
|
257 ("-\\" "rightharpoonup" "~~\n\\")
|
yuuji@53
|
258 ;;left and right
|
yuuji@53
|
259 ("left" "left" "(leftmark)")
|
yuuji@53
|
260 ("right" "right" "(rightmark)")
|
yuuji@68
|
261 ;;accent marks
|
yuuji@68
|
262 ("tilde" "tilde" "~\n?")
|
yuuji@68
|
263 ("T" "tilde" "~\n?")
|
yuuji@68
|
264 ("wtilde" "widetilde" "~\n?")
|
yuuji@68
|
265 ("hat" "hat" "^\n?")
|
yuuji@68
|
266 ("what" "widehat" "/\\\n??")
|
yuuji@68
|
267 ("w^" "widehat" "/\\\n?")
|
yuuji@68
|
268 ("check" "check" "v\n?")
|
yuuji@68
|
269 ("bar" "bar" "_\n?")
|
yuuji@68
|
270 ("overline" "overline" "_\n?")
|
yuuji@68
|
271 ("wbar" "overline" "--\n??")
|
yuuji@68
|
272 ("dot" "dot" ".\n?")
|
yuuji@68
|
273 ("ddot" "ddot" "..\n??")
|
yuuji@68
|
274 ("vec" "vec" ("->\n??" "→\n??"))
|
yuuji@68
|
275 ("~>" "overrightarrow" ("-->\nAB" "→\nAB"))
|
yuuji@68
|
276 ("VEC" "overrightarrow" ("-->\nAB" "→\nAB"))
|
yuuji@68
|
277 ;;rage-aware stuffs
|
yuuji@68
|
278 ("prod" "prod" ("-+--+-\n | |" "Π"))
|
yuuji@68
|
279 ("CUP" "bigcup" "|~~|\n| |\n| |")
|
yuuji@68
|
280 ("union" "bigcup" "|~~|\n| |\n| |")
|
yuuji@68
|
281 ("CAP" "bigcap" "| |\n| |\n|__|")
|
yuuji@68
|
282 ("isc" "bigcap" "| |\n| |\n|__|")
|
yuuji@68
|
283 ("O+" "bigoplus" "/~~~\\\n| + |\n\\___/")
|
yuuji@68
|
284 ("Ox" "bigotimes" "/~~~\\\n| X |\n\\___/")
|
yuuji@68
|
285 ;;other marks
|
yuuji@80
|
286 ("angle" "angle" ("/\n~" "∠"))
|
yuuji@80
|
287 ("/_" "angle" ("/\n~" "∠"))
|
yuuji@11
|
288 ("Z" "aleph" "|\\|")
|
yuuji@11
|
289 ("|\\|" "aleph" "|\\|")
|
yuuji@11
|
290 ("h-" "hbar" "_\nh")
|
yuuji@68
|
291 ; ("i" "imath" "i") ;These chars are appeared only
|
yuuji@68
|
292 ; ("j" "jmath" "j") ;as section-type arguments
|
yuuji@11
|
293 ("l" "ell" "l")
|
yuuji@11
|
294 ("wp" "wp" "???")
|
yuuji@11
|
295 ("R" "Re" ")R")
|
yuuji@11
|
296 ("Im" "Im" "???")
|
yuuji@11
|
297 ("mho" "mho" "~|_|~")
|
yuuji@11
|
298 ("'" "prime" "'")
|
yuuji@11
|
299 ("0" "emptyset" "0")
|
yuuji@13
|
300 ("nabla" "nabla" ("___\n\\\\/" YaTeX-image-nabla))
|
yuuji@11
|
301 ("\\/" "surd" "-\\/")
|
yuuji@11
|
302 ("surd" "surd" "-\\/")
|
yuuji@11
|
303 ("top" "top" "T")
|
yuuji@13
|
304 ("bot" "bot" ("_|_" YaTeX-image-bot))
|
yuuji@13
|
305 ("b" "flat" ("b" YaTeX-image-flat))
|
yuuji@11
|
306 ("LT" "natural" "|\nLT\n |")
|
yuuji@13
|
307 ("6" "partial" (" -+\n+-+\n+-+" YaTeX-image-partial))
|
yuuji@13
|
308 ("partial" "partial" (" -+\n+-+\n+-+" YaTeX-image-partial))
|
yuuji@13
|
309 ("round" "partial" (" -+\n+-+\n+-+" YaTeX-image-partial))
|
yuuji@59
|
310 ("[]" "Box" "[]")
|
yuuji@80
|
311 ("no" "notag" "\\notag")
|
yuuji@80
|
312 (":" "colon" ":")
|
yuuji@305
|
313 (".'." "therefore" (".'." "∴"))
|
yuuji@305
|
314 ("'.'" "because" ("'.'" "∵"))
|
yuuji@11
|
315 ("Diamond" "Diamond" "/\\\n\\/")
|
yuuji@11
|
316 ("3" "triangle" "/\\\n~~")
|
yuuji@11
|
317 ("C" "clubsuit" " o\no+o\n |")
|
yuuji@11
|
318 ("D" "diamondsuit" "/\\\n\\/")
|
yuuji@11
|
319 ("H" "heartsuit" "<^^>\n \\/")
|
yuuji@11
|
320 ("S" "spadesuit" " /\\\n<++>\n /\\")
|
yuuji@229
|
321 ("mi" "mathit" "\\mathit{}")
|
yuuji@229
|
322 ("mr" "mathrm" "\\mathrm{}")
|
yuuji@229
|
323 ("mb" "mathbf" "\\mathbf{}")
|
yuuji@456
|
324 ("mB" "mathbb" "\\mathbb{}")
|
yuuji@229
|
325 ("mt" "mathtt" "\\mathtt{}")
|
yuuji@229
|
326 ("ms" "mathsf" "\\mathsf{}")
|
yuuji@229
|
327 ("mc" "mathcal" "\\mathcal{}")
|
yuuji@229
|
328 ("mn" "mathnormal" "\\mathnormal{}")
|
yuuji@606
|
329 ("di" "displaystyle" "\displaystyle")
|
yuuji@606
|
330 ("ds" "displaystyle" "\displaystyle")
|
yuuji@52
|
331 )
|
yuuji@52
|
332 "Default LaTeX-math-command alist.")
|
yuuji@11
|
333
|
yuuji@13
|
334 (defvar YaTeX-math-sign-alist-private nil
|
yuuji@11
|
335 "*User definable key vs LaTeX-math-command alist.")
|
yuuji@11
|
336
|
yuuji@11
|
337 (defvar YaTeX-math-quit-with-strict-match nil
|
yuuji@11
|
338 "*T for quitting completion as soon as strict-match is found.")
|
yuuji@52
|
339 (defvar YaTeX-math-sign-alist
|
yuuji@13
|
340 (append YaTeX-math-sign-alist-private YaTeX-math-sign-alist-default))
|
yuuji@11
|
341
|
yuuji@13
|
342 ;;(defun YaTeX-math-alist2array (alist array)
|
yuuji@13
|
343 ;; (set array
|
yuuji@13
|
344 ;; (let ((array (make-vector (length alist) "")) (list alist) (i 0))
|
yuuji@13
|
345 ;; (while list
|
yuuji@13
|
346 ;; (aset array i (car (car list)))
|
yuuji@13
|
347 ;; (setq i (1+ i) list (cdr list)))
|
yuuji@13
|
348 ;; array))
|
yuuji@13
|
349 ;;)
|
yuuji@11
|
350
|
yuuji@52
|
351 (defvar YaTeX-greek-key-alist-default
|
yuuji@460
|
352 (append
|
yuuji@461
|
353 '(("a" "alpha" ("a" "α"))
|
yuuji@460
|
354 ("b" "beta" ("|>\n|>\n|" "β"))
|
yuuji@460
|
355 ("g" "gamma" ("~r" "γ"))
|
yuuji@460
|
356 ("G" "Gamma" ("|~" "Γ"))
|
yuuji@460
|
357 ("d" "delta" ("<~\n<>" "δ"))
|
yuuji@460
|
358 ("D" "Delta" ("/\\\n~~" "Δ"))
|
yuuji@460
|
359 ("e" "epsilon" "<\n<~")
|
yuuji@461
|
360 ("e-" "varepsilon" ("(\n(~" "_ε"))
|
yuuji@460
|
361 ("z" "zeta" ("(~\n >" "ζ"))
|
yuuji@460
|
362 ("et" "eta" ("n\n/" "η"))
|
yuuji@460
|
363 ("th" "theta" ("8" "θ"))
|
yuuji@460
|
364 ("Th" "Theta" ("(8)" "Θ"))
|
yuuji@461
|
365 ("th-" "vartheta" ("-8" "_θ"))
|
yuuji@460
|
366 ("i" "iota" ("i\n\\_/" "ι"))
|
yuuji@460
|
367 ("k" "kappa" ("k" "κ"))
|
yuuji@460
|
368 ("l" "lambda" ("\\n/\\" "λ"))
|
yuuji@460
|
369 ("L" "Lambda" ("/\\" "Λ"))
|
yuuji@460
|
370 ("m" "mu" (" u_\n/" "μ"))
|
yuuji@460
|
371 ("n" "nu" ("|/" "ν"))
|
yuuji@460
|
372 ("x" "xi" ("E\n >" "ξ"))
|
yuuji@460
|
373 ("X" "Xi" ("---\n -\n---" "Ξ"))
|
yuuji@460
|
374 ("p" "pi" ("__\n)(" "π"))
|
yuuji@460
|
375 ("P" "Pi" ("__\n||" "Π"))
|
yuuji@461
|
376 ("p-" "varpi" ("__\n/(" "_π"))
|
yuuji@460
|
377 ("r" "rho" ("/O" "ρ"))
|
yuuji@460
|
378 ("r-" "varrho" ("/O\n~~" "ρ\n~~"))
|
yuuji@460
|
379 ("s" "sigma" ("o~" "σ"))
|
yuuji@460
|
380 ("S" "Sigma" ("\\-+\n >\n/-+" "Σ"))
|
yuuji@461
|
381 ("s-" "varsigma" "/~~ \n /")
|
yuuji@460
|
382 ("t" "tau" ("__\n(" "τ"))
|
yuuji@460
|
383 ("u" "upsilon" ("~v" "υ"))
|
yuuji@460
|
384 ("y" "upsilon" ("~v" "υ"))
|
yuuji@460
|
385 ("U" "Upsilon" ("~Y~" "Υ"))
|
yuuji@460
|
386 ("Y" "Upsilon" ("~Y~" "Υ"))
|
yuuji@460
|
387 ("ph" "phi" (" /\n(/)\n/" "φ"))
|
yuuji@460
|
388 ("Ph" "Phi" (" _\n(|)\n ~" "Φ"))
|
yuuji@460
|
389 ("ph-" "varphi" "\\O\n|")
|
yuuji@460
|
390 ("c" "chi" ("x" "χ"))
|
yuuji@460
|
391 ("ps" "psi" ("\\|/\\n |" "ψ"))
|
yuuji@460
|
392 ("Ps" "Psi" (" ~\n\\|/\\n |" "Ψ"))
|
yuuji@460
|
393 ("o" "omega" ("w" "ω"))
|
yuuji@460
|
394 ("w" "omega" ("w" "ω"))
|
yuuji@460
|
395 ("O" "Omega" ("(~)\n~ ~" "Ω"))
|
yuuji@460
|
396 ("W" "Omega" ("(~)\n~ ~" "Ω"))
|
yuuji@461
|
397 ("f" "foo"))
|
yuuji@460
|
398 (if YaTeX-use-AMS-LaTeX
|
yuuji@460
|
399 '(
|
yuuji@460
|
400 ("G-" "varGamma" ("/~" "_Γ"))
|
yuuji@460
|
401 ("D-" "varDelta" ("/|\n~~" "_Δ"))
|
yuuji@460
|
402 ("Th-" "varTheta" ("/8/" "_Θ"))
|
yuuji@460
|
403 ("L-" "varLambda" ("/|" "_Λ"))
|
yuuji@460
|
404 ("X-" "varXi" (" --\n -\n-- " "_Ξ"))
|
yuuji@460
|
405 ("S-" "varSigma" (" \\-+\n >\n/-+" "_Σ"))
|
yuuji@460
|
406 ("U-" "varUpsilon" ("~~Y~" "_Υ"))
|
yuuji@460
|
407 ("Ph-" "varPhi" (" _\n(|)\n~" "_Φ"))
|
yuuji@460
|
408 ("Ps-" "varPsi" (" ~\n\\//\\n /" "Ψ"))
|
yuuji@460
|
409 ("O-" "varOmega" ("/~/\n~ ~" "_Ω")))))
|
yuuji@52
|
410 "Default LaTeX-math-command alist.")
|
yuuji@13
|
411
|
yuuji@13
|
412 (defvar YaTeX-greek-key-alist-private nil
|
yuuji@13
|
413 "*User definable key vs LaTeX-math-command alist.")
|
yuuji@13
|
414
|
yuuji@52
|
415 (defvar YaTeX-greek-key-alist
|
yuuji@13
|
416 (append YaTeX-greek-key-alist-private YaTeX-greek-key-alist-default))
|
yuuji@13
|
417
|
yuuji@13
|
418 ;;(mapcar (function (lambda (x) (YaTeX-math-alist2array x)))
|
yuuji@13
|
419 ;; YaTeX-math-key-list)
|
yuuji@13
|
420
|
yuuji@52
|
421 (defvar YaTeX-math-indicator "KEY\tLaTeX sequence\t\tsign")
|
yuuji@11
|
422
|
yuuji@11
|
423 (defvar YaTeX-math-need-image t
|
yuuji@11
|
424 "*T for displaying pseudo image momentarily.")
|
yuuji@11
|
425 (defvar YaTeX-math-max-key 8)
|
yuuji@11
|
426 (defvar YaTeX-math-max-seq
|
yuuji@11
|
427 (* 8 (1+ (/ (length "\\longleftrightarrow") 8))))
|
yuuji@11
|
428 (defvar YaTeX-math-max-sign 5)
|
yuuji@11
|
429 (defvar YaTeX-math-sign-width
|
yuuji@11
|
430 (+ YaTeX-math-max-key YaTeX-math-max-seq YaTeX-math-max-sign))
|
yuuji@11
|
431 (defvar YaTeX-math-display-width
|
yuuji@11
|
432 (* 8 (1+ (/ YaTeX-math-sign-width 8))))
|
yuuji@11
|
433 (defvar YaTeX-math-menu-map nil
|
yuuji@80
|
434 "Keymap used in YaTeX mathematical sign menu mode.")
|
yuuji@80
|
435
|
yuuji@11
|
436 (if YaTeX-math-menu-map nil
|
yuuji@11
|
437 (setq YaTeX-math-menu-map (make-sparse-keymap))
|
yuuji@11
|
438 (define-key YaTeX-math-menu-map "n" 'next-line)
|
yuuji@11
|
439 (define-key YaTeX-math-menu-map "p" 'previous-line)
|
yuuji@11
|
440 (define-key YaTeX-math-menu-map "f" 'YaTeX-math-forward)
|
yuuji@11
|
441 (define-key YaTeX-math-menu-map "b" 'YaTeX-math-backward)
|
yuuji@11
|
442 (define-key YaTeX-math-menu-map "v" 'scroll-up)
|
yuuji@11
|
443 (define-key YaTeX-math-menu-map " " 'scroll-up)
|
yuuji@11
|
444 (define-key YaTeX-math-menu-map "c" 'scroll-up)
|
yuuji@11
|
445 (define-key YaTeX-math-menu-map "V" 'scroll-down)
|
yuuji@11
|
446 (define-key YaTeX-math-menu-map "r" 'scroll-down)
|
yuuji@11
|
447 (define-key YaTeX-math-menu-map "\^h" 'scroll-down)
|
yuuji@11
|
448 (define-key YaTeX-math-menu-map "<" 'beginning-of-buffer)
|
yuuji@11
|
449 (define-key YaTeX-math-menu-map ">" 'end-of-buffer)
|
yuuji@11
|
450 (define-key YaTeX-math-menu-map "\^m" 'exit-recursive-edit)
|
yuuji@11
|
451 (define-key YaTeX-math-menu-map "q" 'abort-recursive-edit))
|
yuuji@11
|
452
|
yuuji@13
|
453 (defvar YaTeX-math-exit-key "\e"
|
yuuji@80
|
454 "*Key sequence after prefix key of YaTeX-math-mode to exit from math-mode.")
|
yuuji@13
|
455
|
yuuji@11
|
456 (defmacro YaTeX-math-japanese-sign (list)
|
yuuji@11
|
457 (list 'nth 1 list))
|
yuuji@11
|
458
|
yuuji@72
|
459 (defvar YaTeX-math-cmd-regexp (concat (regexp-quote YaTeX-ec) "[A-z|]"))
|
yuuji@177
|
460
|
yuuji@177
|
461 ;;; alltt goes into YaTeX-verbatim-environments 2011/3/16
|
yuuji@177
|
462 ;;(defvar YaTeX-math-verbatim-environments
|
yuuji@177
|
463 ;; '("alltt")
|
yuuji@177
|
464 ;; "*List of environments in which LaTeX math mode is disabled.
|
yuuji@177
|
465 ;;This value is appended with YaTeX-verbatim-environments.")
|
yuuji@11
|
466
|
yuuji@13
|
467 ;;;
|
yuuji@13
|
468 ;;YaTeX math-mode functions
|
yuuji@13
|
469 ;;;
|
yuuji@417
|
470 ;;;###autoload
|
yuuji@13
|
471 (defun YaTeX-toggle-math-mode (&optional arg)
|
yuuji@13
|
472 (interactive "P")
|
yuuji@13
|
473 (or (memq 'YaTeX-math-mode mode-line-format) nil
|
yuuji@13
|
474 (setq mode-line-format
|
yuuji@13
|
475 (append (list "" 'YaTeX-math-mode) mode-line-format)))
|
yuuji@23
|
476 (if YaTeX-auto-math-mode nil ;Only effective on manual mode.
|
yuuji@23
|
477 (if (or arg (null YaTeX-math-mode))
|
yuuji@23
|
478 (let (keys)
|
yuuji@23
|
479 (setq YaTeX-math-mode "math:")
|
yuuji@23
|
480 (message "Turn on math mode. Prefix keys are %s"
|
yuuji@23
|
481 (mapconcat 'car YaTeX-math-key-list " "))
|
yuuji@23
|
482 (sit-for 3)
|
yuuji@23
|
483 (message
|
yuuji@23
|
484 (concat "To exit from math-mode, type `ESC' after prefix, "
|
yuuji@23
|
485 "or type `"
|
yuuji@23
|
486 (key-description
|
yuuji@23
|
487 (car
|
yuuji@23
|
488 (where-is-internal
|
yuuji@23
|
489 'YaTeX-switch-mode-menu YaTeX-mode-map)))
|
yuuji@23
|
490 " $'")))
|
yuuji@23
|
491 (setq YaTeX-math-mode nil)
|
yuuji@23
|
492 (message "Exit from math mode."))
|
yuuji@80
|
493 (set-buffer-modified-p (buffer-modified-p))))
|
yuuji@13
|
494
|
yuuji@11
|
495 (defun YaTeX-math-forward (arg)
|
yuuji@11
|
496 (interactive "p")
|
yuuji@11
|
497 (re-search-forward YaTeX-math-cmd-regexp nil t arg))
|
yuuji@11
|
498
|
yuuji@11
|
499 (defun YaTeX-math-backward (arg)
|
yuuji@11
|
500 (interactive "p")
|
yuuji@11
|
501 (re-search-backward YaTeX-math-cmd-regexp nil t arg))
|
yuuji@11
|
502
|
yuuji@13
|
503 (defun YaTeX-math-gets (sign)
|
yuuji@13
|
504 (cond
|
yuuji@13
|
505 ((null sign) nil)
|
yuuji@13
|
506 ((listp sign)
|
yuuji@13
|
507 (setq sign
|
yuuji@13
|
508 (cond
|
yuuji@13
|
509 (YaTeX-japan (YaTeX-math-japanese-sign sign))
|
yuuji@13
|
510 (t (car sign))))
|
yuuji@13
|
511 (YaTeX-math-gets sign))
|
yuuji@13
|
512 ((symbolp sign)
|
yuuji@13
|
513 (YaTeX-math-gets (symbol-value sign)))
|
yuuji@80
|
514 (t sign)))
|
yuuji@13
|
515
|
yuuji@11
|
516 (defun YaTeX-math-get-sign (list)
|
yuuji@80
|
517 (YaTeX-math-gets (car (cdr-safe (cdr-safe list)))))
|
yuuji@80
|
518
|
yuuji@77
|
519 (defvar YaTeX-math-section-type-regexp
|
yuuji@77
|
520 "eqn\\\\\\sw+\\b"
|
yuuji@77
|
521 "*Regexp of section-type math-mode macro")
|
yuuji@77
|
522
|
yuuji@23
|
523 (defun YaTeX-in-math-mode-p ()
|
yuuji@80
|
524 "If current position is supposed to be in LaTeX-math-mode, return t.
|
yuuji@80
|
525 This function refers a local variable `source-window' in YaTeX-make-section."
|
yuuji@80
|
526 (save-excursion
|
yuuji@80
|
527 (and (boundp 'source-window) source-window
|
yuuji@80
|
528 (set-buffer (window-buffer source-window)))
|
yuuji@80
|
529 (or (YaTeX-quick-in-environment-p
|
yuuji@80
|
530 (append
|
yuuji@80
|
531 '("math" "eqnarray" "equation" "eqnarray*" "displaymath") ;LaTeX
|
yuuji@80
|
532 (if YaTeX-use-AMS-LaTeX
|
yuuji@80
|
533 ;; And math modes of AMS-LaTeX
|
yuuji@80
|
534 ;;'("align" "align*" "split" "multline" "multline*" "gather"
|
yuuji@80
|
535 ;; "gather*" "aligned*" "gathered" "gathered*" "alignat"
|
yuuji@80
|
536 ;; "equation*" "cases" "flalign" "flalign*"
|
yuuji@80
|
537 ;; "alignat*" "xalignat" "xalignat*" "xxalignat" "xxalignat*"
|
yuuji@80
|
538 YaTeX-math-begin-list
|
yuuji@449
|
539 )
|
yuuji@450
|
540 YaTeX-math-other-env-list))
|
yuuji@130
|
541 (let*((p (point)) (nest 0) me0 r firstp dollar
|
yuuji@80
|
542 (delim (concat YaTeX-sectioning-regexp "\\|^$\\|^\C-l"))
|
yuuji@80
|
543 (boundary
|
yuuji@80
|
544 (save-excursion
|
yuuji@80
|
545 (if (looking-at delim)
|
yuuji@80
|
546 (goto-char (max (point-min) (1- (point)))))
|
yuuji@80
|
547 (re-search-backward delim nil 1)
|
yuuji@80
|
548 (point))))
|
yuuji@80
|
549 (save-excursion
|
yuuji@80
|
550 (cond
|
yuuji@80
|
551 ((catch 'open
|
yuuji@80
|
552 (save-excursion
|
yuuji@80
|
553 (while (and (>= nest 0)
|
yuuji@80
|
554 (re-search-backward
|
yuuji@80
|
555 (concat YaTeX-ec-regexp ;\
|
yuuji@80
|
556 "\\([()]\\|[][]\\)") boundary t))
|
yuuji@80
|
557 (setq me0 (match-end 0))
|
yuuji@80
|
558 (if (or (YaTeX-on-comment-p)
|
yuuji@80
|
559 (YaTeX-literal-p)) nil
|
yuuji@80
|
560 (if (or (= (char-after (1- me0)) ?\))
|
yuuji@80
|
561 (= (char-after (1- me0)) ?\]))
|
yuuji@80
|
562 (setq nest (1+ nest))
|
yuuji@80
|
563 (if (= (preceding-char) ?\\ ) nil ;;\\[5pt]
|
yuuji@80
|
564 (setq nest (1- nest))))))
|
yuuji@130
|
565 (if (< nest 0)
|
yuuji@130
|
566 (throw 'open (cons (YaTeX-match-string 0) (point)))))))
|
yuuji@80
|
567 ((and (setq r (YaTeX-on-section-command-p
|
yuuji@80
|
568 YaTeX-math-section-type-regexp))
|
yuuji@80
|
569 (numberp r)
|
yuuji@80
|
570 (> r 0))
|
yuuji@80
|
571 t)
|
yuuji@80
|
572 (t (catch 'dollar
|
yuuji@80
|
573 (while ;(search-backward "$" boundary t);little bit fast.
|
yuuji@80
|
574 (YaTeX-re-search-active-backward ;;;;;; Too slow???
|
yuuji@80
|
575 "\\$" (concat "[^\\\\]" YaTeX-comment-prefix) boundary t)
|
yuuji@130
|
576 (setq dollar "$")
|
yuuji@80
|
577 (cond
|
yuuji@80
|
578 ((equal (char-after (1- (point))) ?$) ; $$ equation $$
|
yuuji@130
|
579 (setq dollar "$$")
|
yuuji@80
|
580 (backward-char 1)
|
yuuji@80
|
581 (setq nest (1+ nest)))
|
yuuji@177
|
582 ((YaTeX-literal-p)
|
yuuji@80
|
583 nil)
|
yuuji@80
|
584 ((and (equal (char-after (1- (point))) ?\\ )
|
yuuji@80
|
585 (not (equal (char-after (- (point) 3)) ?\\ )))
|
yuuji@80
|
586 nil) ;\$
|
yuuji@130
|
587 (t (setq nest (1+ nest))))
|
yuuji@130
|
588 (if (and (= nest 1) (null firstp))
|
yuuji@130
|
589 (setq firstp (cons dollar (point)))))
|
yuuji@130
|
590 (if (= (% nest 2) 1)
|
yuuji@130
|
591 (throw 'dollar firstp))))))))))
|
yuuji@130
|
592
|
yuuji@130
|
593 (defun YaTeX-mark-mathenv ()
|
yuuji@130
|
594 "Mark current mathematic environment."
|
yuuji@130
|
595 (interactive)
|
yuuji@130
|
596 (let ((mmp (YaTeX-in-math-mode-p)) type bpt)
|
yuuji@130
|
597 (if (or (null mmp) (not (stringp (setq type (car mmp)))))
|
yuuji@130
|
598 nil ;if nil or not string, do nothing
|
yuuji@130
|
599 (setq bpt (cdr mmp))
|
yuuji@130
|
600 (goto-char bpt)
|
yuuji@130
|
601 (cond
|
yuuji@130
|
602 ((string-match "\\$" type)
|
yuuji@130
|
603 (set-mark-command nil)
|
yuuji@130
|
604 (skip-chars-forward "$")
|
yuuji@130
|
605 (YaTeX-search-active-forward
|
yuuji@130
|
606 type YaTeX-comment-prefix nil) ;if it cause error, obey it
|
yuuji@130
|
607 (goto-char (match-end 0)))
|
yuuji@130
|
608 ;;
|
yuuji@130
|
609 ((string-match "^\\\\[\\[(]" type)
|
yuuji@130
|
610 (set-mark-command nil)
|
yuuji@130
|
611 (YaTeX-goto-corresponding-leftright)
|
yuuji@130
|
612 (skip-chars-forward "])\\\\"))
|
yuuji@130
|
613 ;;
|
yuuji@130
|
614 ((string-match "^[a-z]" type) ; \begin\end type math
|
yuuji@130
|
615 (set-mark-command nil)
|
yuuji@130
|
616 (YaTeX-goto-corresponding-environment)
|
yuuji@130
|
617 (goto-char (match-end 0)))))))
|
yuuji@23
|
618
|
yuuji@11
|
619 (defun YaTeX-math-display-list (list cols)
|
yuuji@11
|
620 (goto-char (point-max))
|
yuuji@11
|
621 (if (= cols 0) (if (not (eolp)) (newline 1))
|
yuuji@11
|
622 (forward-line -1)
|
yuuji@11
|
623 (while (looking-at "[ \t\n]") (forward-line -1)))
|
yuuji@11
|
624 (end-of-line)
|
yuuji@11
|
625 (let ((indent (* YaTeX-math-display-width cols)) sign str to)
|
yuuji@11
|
626 (indent-to indent)
|
yuuji@11
|
627 (insert (car list))
|
yuuji@11
|
628 (indent-to (setq indent (+ indent YaTeX-math-max-key)))
|
yuuji@11
|
629 (insert "\\" (car (cdr list)))
|
yuuji@11
|
630 (setq indent (+ indent YaTeX-math-max-seq))
|
yuuji@11
|
631 (setq sign (YaTeX-math-get-sign list))
|
yuuji@13
|
632 (while (and sign (not (string= "" sign)))
|
yuuji@11
|
633 (setq to (string-match "\n" sign)
|
yuuji@11
|
634 str (if to (substring sign 0 to) sign))
|
yuuji@11
|
635 (end-of-line)
|
yuuji@11
|
636 (indent-to indent)
|
yuuji@11
|
637 (insert str)
|
yuuji@11
|
638 (cond ((eobp) (newline 1))
|
yuuji@11
|
639 ((> cols 0) (forward-line 1)))
|
yuuji@11
|
640 (setq sign (if to (substring sign (1+ to)) "")))))
|
yuuji@11
|
641
|
yuuji@11
|
642 (defvar YaTeX-math-menu-buffer "*math-mode-signs*")
|
yuuji@11
|
643
|
yuuji@11
|
644 (defun YaTeX-math-show-menu (match-str)
|
yuuji@11
|
645 (save-window-excursion
|
yuuji@59
|
646 (YaTeX-showup-buffer YaTeX-math-menu-buffer nil t)
|
yuuji@70
|
647 (let ((maxcols (max 1 (/ (YaTeX-screen-width) YaTeX-math-sign-width)))
|
yuuji@11
|
648 (case-fold-search nil)
|
yuuji@13
|
649 (cols 0) (list alist) command)
|
yuuji@11
|
650 (erase-buffer)
|
yuuji@13
|
651 (insert
|
yuuji@13
|
652 "Candidates of sign. [n:next p:prev f:forw b:back q:quit RET:select]\n")
|
yuuji@11
|
653 (insert YaTeX-math-indicator "\t")
|
yuuji@11
|
654 (insert YaTeX-math-indicator)
|
yuuji@11
|
655 (newline 1)
|
yuuji@70
|
656 (insert-char ?- (1- (YaTeX-screen-width)))
|
yuuji@11
|
657 (newline 1)
|
yuuji@11
|
658 (while list
|
yuuji@11
|
659 (if (string-match match-str (car (car list)))
|
yuuji@11
|
660 (progn (YaTeX-math-display-list (car list) cols)
|
yuuji@11
|
661 (setq cols (% (1+ cols) maxcols))))
|
yuuji@11
|
662 (setq list (cdr list)))
|
yuuji@178
|
663 (goto-char (point-min)) (forward-line 3)
|
yuuji@11
|
664 (use-local-map YaTeX-math-menu-map)
|
yuuji@60
|
665 (setq buffer-read-only t)
|
yuuji@11
|
666 (unwind-protect
|
yuuji@11
|
667 (recursive-edit)
|
yuuji@11
|
668 (skip-chars-backward "^ \t\n")
|
yuuji@11
|
669 (setq command
|
yuuji@11
|
670 (if (re-search-forward YaTeX-math-cmd-regexp nil t)
|
yuuji@11
|
671 (buffer-substring
|
yuuji@11
|
672 (match-beginning 0)
|
yuuji@11
|
673 (prog2 (skip-chars-forward "^ \t\n") (point)))
|
yuuji@11
|
674 nil))
|
yuuji@11
|
675 (kill-buffer YaTeX-math-menu-buffer))
|
yuuji@80
|
676 command)))
|
yuuji@11
|
677
|
yuuji@11
|
678 (defun YaTeX-math-show-image (image &optional exit-char)
|
yuuji@11
|
679 "Momentarily display IMAGE at the beginning of the next line;
|
yuuji@11
|
680 erase it on the next keystroke. The window is recentered if necessary
|
yuuji@11
|
681 to make the whole string visible. If the window isn't large enough,
|
yuuji@11
|
682 at least you get to read the beginning."
|
yuuji@13
|
683 (if (and image (not (string= image "")))
|
yuuji@13
|
684 (let ((buffer-read-only nil)
|
yuuji@13
|
685 (modified (buffer-modified-p))
|
yuuji@13
|
686 (name buffer-file-name)
|
yuuji@13
|
687 insert-start
|
yuuji@13
|
688 insert-end)
|
yuuji@13
|
689 (unwind-protect
|
yuuji@13
|
690 (progn
|
yuuji@13
|
691 (save-excursion
|
yuuji@13
|
692 ;; defeat file locking... don't try this at home, kids!
|
yuuji@13
|
693 (setq buffer-file-name nil)
|
yuuji@13
|
694 (forward-line 1)
|
yuuji@13
|
695 (setq insert-start (point))
|
yuuji@13
|
696 (if (eobp) (newline))
|
yuuji@13
|
697 (insert image)
|
yuuji@13
|
698 (setq insert-end (point)))
|
yuuji@13
|
699 ; make sure the whole string is visible
|
yuuji@13
|
700 (if (not (pos-visible-in-window-p insert-end))
|
yuuji@13
|
701 (recenter (max 0
|
yuuji@13
|
702 (- (window-height)
|
yuuji@13
|
703 (count-lines insert-start insert-end)
|
yuuji@13
|
704 2))))
|
yuuji@13
|
705 (let ((char (read-char)))
|
yuuji@13
|
706 (or (eq char exit-char)
|
yuuji@292
|
707 (if (boundp 'unread-command-events)
|
yuuji@292
|
708 (setq unread-command-events (list char))
|
yuuji@292
|
709 (setq unread-command-char char)))))
|
yuuji@13
|
710 (if insert-end
|
yuuji@13
|
711 (save-excursion
|
yuuji@13
|
712 (delete-region insert-start insert-end)))
|
yuuji@13
|
713 (setq buffer-file-name name)
|
yuuji@13
|
714 (set-buffer-modified-p modified)))))
|
yuuji@11
|
715
|
yuuji@52
|
716 (defun YaTeX-math-insert-sequence (&optional force initial)
|
yuuji@23
|
717 "Insert math-mode sequence with image completion."
|
yuuji@23
|
718 (interactive "P")
|
yuuji@52
|
719 (let*((key (or initial "")) regkey str last-char list i
|
yuuji@13
|
720 (case-fold-search nil) match sign
|
yuuji@290
|
721 (this-key (char-to-string (YaTeX-last-key)))
|
yuuji@60
|
722 (alistsym (cdr (assoc this-key YaTeX-math-key-list)))
|
yuuji@60
|
723 (alistname (symbol-name alistsym))
|
yuuji@60
|
724 (alist (symbol-value alistsym))
|
yuuji@13
|
725 (n (length alist)) (beg (point)) result)
|
yuuji@52
|
726 (if initial (insert YaTeX-ec (car (cdr (assoc initial alist)))))
|
yuuji@60
|
727 (if (string-match "^YaTeX-" alistname)
|
yuuji@60
|
728 (setq alistname (substring alistname (length "YaTeX-"))))
|
yuuji@60
|
729 (setq alistname (substring alistname 0 (string-match "-" alistname)))
|
yuuji@11
|
730 (setq result
|
yuuji@11
|
731 (catch 'complete
|
yuuji@23
|
732 (if (and (not force)
|
yuuji@51
|
733 (if YaTeX-auto-math-mode
|
yuuji@51
|
734 (not (YaTeX-in-math-mode-p))
|
yuuji@51
|
735 (not YaTeX-math-mode)))
|
yuuji@23
|
736 (throw 'complete 'escape));this tag should be exit, but...
|
yuuji@11
|
737 (while t
|
yuuji@60
|
738 (message "%ssequence%s: %s"
|
yuuji@60
|
739 (if YaTeX-simple-messages "" (concat alistname " "))
|
yuuji@56
|
740 (if YaTeX-simple-messages "" "(TAB for menu)") key)
|
yuuji@11
|
741 (setq last-char (read-char)
|
yuuji@11
|
742 key (concat key (char-to-string last-char))
|
yuuji@13
|
743 i 0)
|
yuuji@11
|
744 (cond
|
yuuji@13
|
745 ((string= key this-key) ;;invoke key itself
|
yuuji@11
|
746 (throw 'complete 'escape))
|
yuuji@13
|
747 ((string= key YaTeX-math-exit-key) ;;exit from math-mode
|
yuuji@13
|
748 (throw 'complete 'exit))
|
yuuji@23
|
749 ((string-match "\r" key) ;;RET = kakutei
|
yuuji@23
|
750 (throw 'complete 'select))
|
yuuji@23
|
751 ((string-match "[\C-g\C-c]" key) ;;C-g = abort
|
yuuji@23
|
752 (throw 'complete 'abort))
|
yuuji@23
|
753 ((string-match "[\t\n]" key) ;;TAB, LFD = menu
|
yuuji@23
|
754 (throw 'complete 'menu))
|
yuuji@23
|
755 ((string-match "[\C-h\C-?]" key) ;;BS, DEL = BS
|
yuuji@23
|
756 (if (< (length key) 2) (throw 'complete 'abort))
|
yuuji@13
|
757 (setq key (substring key 0 -2))))
|
yuuji@13
|
758
|
yuuji@13
|
759 (setq regkey (concat "^" (regexp-quote key)))
|
yuuji@56
|
760 (message "Sequence%s: %s"
|
yuuji@56
|
761 (if YaTeX-simple-messages "" "(TAB for menu)") key)
|
yuuji@11
|
762 (if
|
yuuji@11
|
763 (catch 'found
|
yuuji@11
|
764 ;;(1)input string strictly matches with alist
|
yuuji@23
|
765 (setq match (assoc key alist))
|
yuuji@23
|
766 ;;remember previous match
|
yuuji@23
|
767
|
yuuji@11
|
768 ;;(2)search partial match into alist
|
yuuji@13
|
769 (setq list alist)
|
yuuji@11
|
770 (while (< i n)
|
yuuji@11
|
771 (if (string-match
|
yuuji@13
|
772 regkey
|
yuuji@13
|
773 ;;(aref array i)
|
yuuji@13
|
774 ;;(car (nth i alist))
|
yuuji@23
|
775 (car (car list)))
|
yuuji@11
|
776 (progn
|
yuuji@11
|
777 (or match
|
yuuji@13
|
778 ;;(setq match (nth i alist))
|
yuuji@13
|
779 (setq match (car list)))
|
yuuji@11
|
780 (throw 'found t)))
|
yuuji@13
|
781 (setq i (1+ i) list (cdr list)))) ;catch 'found
|
yuuji@11
|
782 nil ;;if any match, continue reading
|
yuuji@11
|
783 ;;else reading of sequence has been done.
|
yuuji@11
|
784 (message "complete.")
|
yuuji@23
|
785 (throw 'complete t))
|
yuuji@23
|
786
|
yuuji@11
|
787 (if match
|
yuuji@11
|
788 (progn (delete-region beg (point))
|
yuuji@80
|
789 (setq YaTeX-single-command (car (cdr match)))
|
yuuji@80
|
790 (insert YaTeX-ec YaTeX-single-command)
|
yuuji@13
|
791 (if (and YaTeX-math-need-image
|
yuuji@13
|
792 (setq sign (YaTeX-math-get-sign match)))
|
yuuji@13
|
793 (YaTeX-math-show-image (concat sign "\n")))
|
yuuji@11
|
794 )
|
yuuji@11
|
795 nil)
|
yuuji@11
|
796 )))
|
yuuji@68
|
797 (delete-region beg (point))
|
yuuji@11
|
798 (cond
|
yuuji@68
|
799 ((memq result '(t select))
|
yuuji@68
|
800 (if (eq result t)
|
yuuji@292
|
801 (if (boundp 'unread-command-events)
|
yuuji@292
|
802 (setq unread-command-events (list last-char))
|
yuuji@292
|
803 (setq unread-command-char last-char))
|
yuuji@68
|
804 (message "Done."))
|
yuuji@80
|
805 (if (assoc YaTeX-single-command section-table)
|
yuuji@80
|
806 (YaTeX-make-section nil nil nil YaTeX-single-command)
|
yuuji@68
|
807 (setq YaTeX-current-completion-type 'maketitle)
|
yuuji@80
|
808 (YaTeX-make-singlecmd YaTeX-single-command)))
|
yuuji@11
|
809 ((eq result 'abort)
|
yuuji@11
|
810 (message "Abort."))
|
yuuji@11
|
811 ((eq result 'escape)
|
yuuji@80
|
812 (call-interactively (lookup-key global-map this-key)))
|
yuuji@13
|
813 ((eq result 'exit)
|
yuuji@13
|
814 (YaTeX-toggle-math-mode))
|
yuuji@11
|
815 ((eq result 'menu)
|
yuuji@11
|
816 (setq key (concat "^" (regexp-quote (substring key 0 -1))))
|
yuuji@68
|
817 (insert (YaTeX-math-show-menu key))))))
|
yuuji@52
|
818
|
yuuji@52
|
819 ;; ----- Change image completion types -----
|
yuuji@52
|
820 (defun YaTeX-math-member-p (item)
|
yuuji@52
|
821 "Check if ITEM is a member of image completion.
|
yuuji@52
|
822 If so return the cons of its invocation key and image-string."
|
yuuji@52
|
823 (let ((lists YaTeX-math-key-list) list)
|
yuuji@52
|
824 (catch 'found
|
yuuji@52
|
825 (while lists
|
yuuji@52
|
826 (setq list (symbol-value (cdr (car lists))))
|
yuuji@52
|
827 (while list
|
yuuji@52
|
828 (if (string= item (nth 1 (car list)))
|
yuuji@52
|
829 (throw 'found (cons (car (car lists)) (nth 0 (car list)))))
|
yuuji@52
|
830 (setq list (cdr list)))
|
yuuji@52
|
831 (setq lists (cdr lists))))))
|
yuuji@52
|
832
|
yuuji@193
|
833 ;;; ----- for AMS LaTeX (by matsu<at>math.s.chiba-u.ac.jp) -----
|
yuuji@69
|
834 (defvar YaTeX-ams-paren-modifier
|
yuuji@69
|
835 '(("Biggl" . "Biggr") ("biggl" . "biggr")
|
yuuji@69
|
836 ("Bigl" . "Bigr") ("bigl" . "bigr")
|
yuuji@69
|
837 ("left" . "right") ("" . ""))
|
yuuji@69
|
838 "Alist of modifier of parentheses.")
|
yuuji@69
|
839
|
yuuji@69
|
840 (defvar YaTeX-left-paren "(\\|\\[\\|\\\\{")
|
yuuji@69
|
841 (defvar YaTeX-right-paren ")\\|\\]\\|\\\\}")
|
yuuji@69
|
842 (defvar YaTeX-paren
|
yuuji@69
|
843 (concat YaTeX-left-paren "\\|" YaTeX-right-paren))
|
yuuji@69
|
844
|
yuuji@69
|
845 (defun YaTeX-on-parenthesis-p ()
|
yuuji@69
|
846 "If cursor is on an (AMS-LaTeX) parenthesis, return the parenthesis."
|
yuuji@69
|
847 (interactive)
|
yuuji@69
|
848 (let* ((list YaTeX-ams-paren-modifier)
|
yuuji@69
|
849 (longest 0) ;; the longest length of parenthesis command strings
|
yuuji@69
|
850 (flag t) ;; flag for whether on braces not following \
|
yuuji@69
|
851 (point (point))
|
yuuji@69
|
852 (move 0)
|
yuuji@69
|
853 (paren))
|
yuuji@69
|
854 (while list
|
yuuji@69
|
855 (setq longest
|
yuuji@69
|
856 (max longest (length (car (car list))) (length (cdr (car list)))))
|
yuuji@69
|
857 (setq list (cdr list)))
|
yuuji@69
|
858 (save-excursion
|
yuuji@69
|
859 ;; search {} and, if it does not follow `\', set flag nil.
|
yuuji@69
|
860 ;; if it is right after `\', set flag t and move to the position of \.
|
yuuji@69
|
861 ;; mmmmm.
|
yuuji@69
|
862 (if (looking-at "{\\|}")
|
yuuji@69
|
863 (if (not (equal (char-after (1- (point))) 92))
|
yuuji@69
|
864 (setq flag nil)
|
yuuji@69
|
865 (forward-char -1)))
|
yuuji@69
|
866 ;; if flag is nil, do nothing.
|
yuuji@69
|
867 (if (and flag (re-search-forward YaTeX-paren
|
yuuji@69
|
868 (+ (point) 3 longest) t))
|
yuuji@69
|
869 (progn
|
yuuji@69
|
870 (setq move (- (point) point))
|
yuuji@80
|
871 (setq paren (YaTeX-match-string 0))
|
yuuji@69
|
872 (setq list YaTeX-ams-paren-modifier)
|
yuuji@69
|
873 ;; criterion for whether on [] () \{\} or not.
|
yuuji@69
|
874 (if (string-match YaTeX-left-paren paren)
|
yuuji@69
|
875 (while (and list flag)
|
yuuji@69
|
876 (let* ((mod (car (car list)))
|
yuuji@69
|
877 (mod-length 0) ;; length of modifier
|
yuuji@69
|
878 paren-regexp ;; regexp of paren.
|
yuuji@69
|
879 mod-regexp) ;; regexp of modifier.
|
yuuji@69
|
880 (if (> (length mod) 0)
|
yuuji@69
|
881 (setq mod-regexp (concat "\\\\" mod)
|
yuuji@69
|
882 mod-length (1+ (length mod))))
|
yuuji@69
|
883 (cond ((string= paren "\\{")
|
yuuji@69
|
884 (setq paren-regexp (concat "\\" paren)))
|
yuuji@69
|
885 ((string= paren "[")
|
yuuji@69
|
886 (setq paren-regexp "\\["))
|
yuuji@69
|
887 (t (setq paren-regexp paren)))
|
yuuji@69
|
888 (save-excursion
|
yuuji@69
|
889 (if (and (>= (- (point) (point-min))
|
yuuji@69
|
890 (+ mod-length (length paren)))
|
yuuji@69
|
891 (not (forward-char
|
yuuji@69
|
892 (- 0 mod-length (length paren))))
|
yuuji@69
|
893 (looking-at (concat "\\(" mod-regexp "\\)\\("
|
yuuji@69
|
894 paren-regexp "\\)")))
|
yuuji@69
|
895 (setq flag nil)))
|
yuuji@69
|
896 (setq list (cdr list))))
|
yuuji@69
|
897 (while (and list flag)
|
yuuji@69
|
898 (let* ((mod (cdr (car list)))
|
yuuji@69
|
899 (mod-length 0)
|
yuuji@69
|
900 paren-regexp
|
yuuji@69
|
901 mod-regexp)
|
yuuji@69
|
902 (if (> (length mod) 0)
|
yuuji@69
|
903 (setq mod-regexp (concat "\\\\" mod)
|
yuuji@69
|
904 mod-length (1+ (length mod))))
|
yuuji@69
|
905 (cond ((string= paren "\\}")
|
yuuji@69
|
906 (setq paren-regexp (concat "\\" paren)))
|
yuuji@69
|
907 ((string= paren "]")
|
yuuji@69
|
908 (setq paren-regexp "\\]"))
|
yuuji@69
|
909 (t (setq paren-regexp paren)))
|
yuuji@69
|
910 (save-excursion
|
yuuji@69
|
911 (if (and (>= (- (point) (point-min))
|
yuuji@69
|
912 (+ mod-length (length paren)))
|
yuuji@69
|
913 (not (forward-char
|
yuuji@69
|
914 (- 0 mod-length (length paren))))
|
yuuji@69
|
915 (looking-at (concat "\\(" mod-regexp "\\)\\("
|
yuuji@69
|
916 paren-regexp "\\)")))
|
yuuji@69
|
917 (setq flag nil)))
|
yuuji@69
|
918 (setq list (cdr list)))))
|
yuuji@80
|
919 (if (<= move (length (YaTeX-match-string 0)))
|
yuuji@80
|
920 (YaTeX-match-string 0)))))))
|
yuuji@69
|
921
|
yuuji@77
|
922 (defun YaTeX-goto-open-paren (&optional jumpto-co)
|
yuuji@77
|
923 "Jump to the exact position of open parenthesis.
|
yuuji@77
|
924 If optional argument JUMPTO-CO is non-nil, goto corresponding parentheses."
|
yuuji@69
|
925 (interactive)
|
yuuji@69
|
926 (let ((paren)
|
yuuji@69
|
927 (backslash-syntax (char-to-string (char-syntax ?\\))))
|
yuuji@69
|
928 (if (setq paren (YaTeX-on-parenthesis-p))
|
yuuji@69
|
929 (if (string-match "(\\|{\\|\\[" paren (1- (length paren)))
|
yuuji@69
|
930 (progn
|
yuuji@69
|
931 (re-search-forward "(\\|{\\|\\[" (+ (point) (length paren)) t)
|
yuuji@77
|
932 (backward-char)
|
yuuji@77
|
933 (if jumpto-co
|
yuuji@77
|
934 (unwind-protect
|
yuuji@77
|
935 (progn
|
yuuji@77
|
936 (modify-syntax-entry ?\\ " ")
|
yuuji@77
|
937 (forward-list)
|
yuuji@77
|
938 (backward-char))
|
yuuji@77
|
939 (modify-syntax-entry ?\\ backslash-syntax)))
|
yuuji@77
|
940 (point))
|
yuuji@69
|
941 (re-search-forward ")\\|}\\|\\]" (+ (point) (length paren)) t)
|
yuuji@69
|
942 (unwind-protect
|
yuuji@69
|
943 (progn
|
yuuji@69
|
944 (modify-syntax-entry ?\\ " ")
|
yuuji@77
|
945 (backward-list)
|
yuuji@77
|
946 (point))
|
yuuji@69
|
947 (modify-syntax-entry ?\\ backslash-syntax))))))
|
yuuji@69
|
948
|
yuuji@77
|
949 ;;;###autoload
|
yuuji@77
|
950 (defun YaTeX-goto-corresponding-paren ()
|
yuuji@77
|
951 "Go to corresponding mathematical parentheses."
|
yuuji@77
|
952 (if (YaTeX-on-parenthesis-p)
|
yuuji@77
|
953 (YaTeX-goto-open-paren t)
|
yuuji@77
|
954 nil))
|
yuuji@77
|
955
|
yuuji@69
|
956 (defun YaTeX-change-parentheses ()
|
yuuji@69
|
957 "Change the size of parentheses, braces, and brackets of AMS-LaTeX."
|
yuuji@69
|
958 (interactive)
|
yuuji@69
|
959 (if (not (and YaTeX-use-AMS-LaTeX (YaTeX-on-parenthesis-p)))
|
yuuji@69
|
960 nil
|
yuuji@80
|
961 (let* ((mod (YaTeX-match-string 1)) ;; modifier
|
yuuji@80
|
962 (paren (if mod (YaTeX-match-string 2) (YaTeX-match-string 0))) ;; paren
|
yuuji@69
|
963 (mod-length (if (or (string= mod "\\left") (string= mod "\\right"))
|
yuuji@69
|
964 5 ;; 5 in case left or right
|
yuuji@69
|
965 (length mod))) ;; length of modifier
|
yuuji@69
|
966 (paren-length (length paren)) ;; length of paren
|
yuuji@69
|
967 (length (+ mod-length paren-length)) ;; length of whole string
|
yuuji@69
|
968 (big-p t) ;; flag whether new modifier is "[Bb]ig+" or not.
|
yuuji@69
|
969 size ;; left, big, Big etc.
|
yuuji@77
|
970 type ;; parentheses type
|
yuuji@69
|
971 lr ;; "l" or "r".
|
yuuji@69
|
972 char newsize newsize-length
|
yuuji@69
|
973 (backslash-syntax (char-to-string (char-syntax ?\\)))
|
yuuji@69
|
974 (case-fold-search))
|
yuuji@69
|
975 ;; decide lr and size from mod and paren.
|
yuuji@69
|
976 (cond ((string-match "\\(\\\\[Bb]ig+\\)[lr]" mod)
|
yuuji@69
|
977 (setq size (substring mod 1 (match-end 1))
|
yuuji@69
|
978 lr (substring mod (match-end 1) (match-end 0))))
|
yuuji@69
|
979 ((string-match "\\\\left" mod)
|
yuuji@69
|
980 (setq size "left-right" lr "l"))
|
yuuji@69
|
981 ((string-match "\\\\right" mod)
|
yuuji@69
|
982 (setq size "left-right" lr "r"))
|
yuuji@69
|
983 ((string-match "(\\|\\[\\|\\\\{" paren)
|
yuuji@69
|
984 (setq size "null" lr "l"))
|
yuuji@69
|
985 ((string-match ")\\|\\]\\|\\\\}" paren)
|
yuuji@69
|
986 (setq size "null" lr "r"))
|
yuuji@69
|
987 (t
|
yuuji@69
|
988 (setq size nil lr nil)))
|
yuuji@69
|
989 (while (not newsize)
|
yuuji@527
|
990 (message (concat "Change from %s: "
|
yuuji@69
|
991 "l(big) L(Big) h(bigg) H(Bigg) "
|
yuuji@527
|
992 "r(left-right) n(NONE) ( { [") size)
|
yuuji@69
|
993 (setq char (read-char)
|
yuuji@69
|
994 newsize (cond ((char-equal char ?l) "\\big")
|
yuuji@69
|
995 ((char-equal char ?L) "\\Big")
|
yuuji@69
|
996 ((char-equal char ?h) "\\bigg")
|
yuuji@69
|
997 ((char-equal char ?H) "\\Bigg")
|
yuuji@69
|
998 ((char-equal char ?r)
|
yuuji@69
|
999 (setq big-p nil) "\\left")
|
yuuji@77
|
1000 ((memq char '(?\( ?\)))
|
yuuji@77
|
1001 (setq big-p nil type '("(" . ")")) "")
|
yuuji@77
|
1002 ((memq char '(?\{ ?\}))
|
yuuji@77
|
1003 (setq big-p nil type '("\\{" . "\\}")) "")
|
yuuji@77
|
1004 ((memq char '(?\[ ?\]))
|
yuuji@77
|
1005 (setq big-p nil type '("[" . "]")) "")
|
yuuji@69
|
1006 ((char-equal char ?n)
|
yuuji@69
|
1007 (setq big-p nil) "")
|
yuuji@69
|
1008 (t nil))
|
yuuji@69
|
1009 newsize-length (length newsize)))
|
yuuji@69
|
1010 (YaTeX-goto-open-paren)
|
yuuji@69
|
1011 (forward-char)
|
yuuji@77
|
1012 (cond
|
yuuji@77
|
1013 (type
|
yuuji@77
|
1014 (delete-region (point) (- (point) paren-length))
|
yuuji@77
|
1015 (save-excursion (insert (car type))))
|
yuuji@77
|
1016 (t
|
yuuji@77
|
1017 (delete-region (- (point) length) (- (point) paren-length))
|
yuuji@77
|
1018 (backward-char paren-length)))
|
yuuji@558
|
1019 (insert newsize)
|
yuuji@69
|
1020 (if big-p (insert ?l))
|
yuuji@69
|
1021 (unwind-protect
|
yuuji@69
|
1022 (progn
|
yuuji@69
|
1023 (modify-syntax-entry ?\\ " ")
|
yuuji@69
|
1024 (forward-list)
|
yuuji@69
|
1025 (if (string= size "left-right") (setq length (1+ length)))
|
yuuji@69
|
1026 (if (eq char ?r) (setq newsize "\\right"))
|
yuuji@77
|
1027 (cond
|
yuuji@77
|
1028 (type
|
yuuji@77
|
1029 (delete-region (point) (- (point) paren-length))
|
yuuji@77
|
1030 (insert (cdr type)))
|
yuuji@77
|
1031 (t
|
yuuji@77
|
1032 (delete-region (- (point) length) (- (point) paren-length))
|
yuuji@77
|
1033 (backward-char paren-length)
|
yuuji@558
|
1034 (insert newsize)
|
yuuji@77
|
1035 (if big-p (insert ?r))
|
yuuji@77
|
1036 (forward-char paren-length)))
|
yuuji@69
|
1037 (if (string= lr "l") (backward-list)))
|
yuuji@69
|
1038 (modify-syntax-entry ?\\ backslash-syntax))
|
yuuji@69
|
1039 t)))
|
yuuji@69
|
1040
|
yuuji@69
|
1041 (defun YaTeX-insert-amsparens-region (beg end char)
|
yuuji@69
|
1042 (interactive "r\ncWhich one ? l(big) L(Big) h(bigg) H(Bigg): ")
|
yuuji@69
|
1043 (let* ((case-fold-search)
|
yuuji@69
|
1044 (st (cond ((char-equal char ?l) "big")
|
yuuji@69
|
1045 ((char-equal char ?L) "Big")
|
yuuji@69
|
1046 ((char-equal char ?h) "bigg")
|
yuuji@69
|
1047 ((char-equal char ?H) "Bigg"))))
|
yuuji@69
|
1048 (if st
|
yuuji@69
|
1049 (YaTeX-insert-braces-region
|
yuuji@69
|
1050 beg end (concat "\\" st "l(") (concat "\\" st "r)"))
|
yuuji@69
|
1051 (YaTeX-insert-braces-region beg end "(" ")"))))
|
yuuji@69
|
1052
|
yuuji@69
|
1053 (defun YaTeX-insert-amsbraces-region (beg end char)
|
yuuji@69
|
1054 (interactive "r\ncWhich one ? l(big) L(Big) h(bigg) H(Bigg): ")
|
yuuji@69
|
1055 (let* ((case-fold-search)
|
yuuji@69
|
1056 (st (cond ((char-equal char ?l) "big")
|
yuuji@69
|
1057 ((char-equal char ?L) "Big")
|
yuuji@69
|
1058 ((char-equal char ?h) "bigg")
|
yuuji@69
|
1059 ((char-equal char ?H) "Bigg"))))
|
yuuji@69
|
1060 (if st
|
yuuji@69
|
1061 (YaTeX-insert-braces-region
|
yuuji@69
|
1062 beg end (concat "\\" st "l\\{") (concat "\\" st "r\\}"))
|
yuuji@69
|
1063 (YaTeX-insert-braces-region beg end "\\{" "\\}"))))
|
yuuji@69
|
1064
|
yuuji@69
|
1065 (defun YaTeX-insert-amsbrackets-region (beg end char)
|
yuuji@69
|
1066 (interactive "r\ncWhich one ? l(big) L(Big) h(bigg) H(Bigg): ")
|
yuuji@69
|
1067 (let* ((case-fold-search)
|
yuuji@69
|
1068 (st (cond ((char-equal char ?l) "big")
|
yuuji@69
|
1069 ((char-equal char ?L) "Big")
|
yuuji@69
|
1070 ((char-equal char ?h) "bigg")
|
yuuji@69
|
1071 ((char-equal char ?H) "Bigg"))))
|
yuuji@69
|
1072 (if st
|
yuuji@69
|
1073 (YaTeX-insert-braces-region
|
yuuji@69
|
1074 beg end (concat "\\" st "l[") (concat "\\" st "r]"))
|
yuuji@69
|
1075 (YaTeX-insert-braces-region beg end "[" "]"))))
|
yuuji@69
|
1076
|
yuuji@69
|
1077
|
yuuji@11
|
1078 ;;
|
yuuji@11
|
1079 (provide 'yatexmth)
|
yuuji@13
|
1080
|
yuuji@13
|
1081 ; Local variables:
|
yuuji@13
|
1082 ; fill-prefix: ";;; "
|
yuuji@13
|
1083 ; paragraph-start: "^$\\|\\|;;;$"
|
yuuji@13
|
1084 ; paragraph-separate: "^$\\|\\|;;;$"
|
yuuji@13
|
1085 ; End:
|