yatex

view yatexadd.el @ 183:1c41dc8a28eb

doc fix
author yuuji@gentei.org
date Thu, 13 Oct 2011 10:16:58 +0900
parents 7dc3c2332da5
children ad4e0a008972
line source
1 ;;; -*- Emacs-Lisp -*-
2 ;;; YaTeX add-in functions.
3 ;;; yatexadd.el rev.19
4 ;;; (c)1991-2011 by HIROSE Yuuji.[yuuji@yatex.org]
5 ;;; Last modified Mon Mar 7 12:12:11 2011 on firestorm
6 ;;; $Id$
8 ;;;
9 ;;Sample functions for LaTeX environment.
10 ;;;
11 (defvar YaTeX:tabular-default-rule
12 "@{\\vrule width 1pt\\ }c|c|c@{\\ \\vrule width 1pt}"
13 "*Your favorite default rule format.")
15 (defvar YaTeX:tabular-thick-vrule "\\vrule width %s"
16 "*Vertical thick line format (without @{}). %s'll be replaced by its width.")
18 (defvar YaTeX:tabular-thick-hrule "\\noalign{\\hrule height %s}"
19 "*Horizontal thick line format. %s will be replaced by its width.")
21 (defun YaTeX:tabular ()
22 "YaTeX add-in function for tabular environment.
23 Notice that this function refers the let-variable `env' in
24 YaTeX-make-begin-end."
25 (let ((width "") bars (rule "") (and "") (j 1) loc ans (hline "\\hline"))
26 (if (string= YaTeX-env-name "tabular*")
27 (setq width (concat "{" (read-string "Width: ") "}")))
28 (setq loc (YaTeX:read-position "tb")
29 bars (string-to-int
30 (read-string "Number of columns(0 for default format): " "3")))
31 (if (<= bars 0)
32 (setq ;if 0, simple format
33 rule YaTeX:tabular-default-rule
34 and "& &")
35 (while (< j bars) ;repeat bars-1 times
36 (setq rule (concat rule "c|")
37 and (concat and "& ")
38 j (1+ j)))
39 (setq rule (concat rule "c"))
40 (message "(N)ormal-frame or (T)hick frame? [nt]")
41 (setq ans (read-char))
42 (cond
43 ((or (equal ans ?t) (equal ans ?T))
44 (setq ans (read-string "Rule width: " "1pt")
45 rule (concat
46 "@{" (format YaTeX:tabular-thick-vrule ans) "}"
47 rule
48 "@{\\ " (format YaTeX:tabular-thick-vrule ans) "}")
49 hline (format YaTeX:tabular-thick-hrule ans)))
50 (t (setq rule (concat "|" rule "|")
51 hline "\\hline"))))
53 (setq rule (read-string "rule format: " rule))
54 (setq YaTeX-single-command "hline")
56 (format "%s%s{%s}" width loc rule)))
58 (fset 'YaTeX:tabular* 'YaTeX:tabular)
59 (fset 'YaTeX:supertabular 'YaTeX:tabular)
60 (defun YaTeX:alignat ()
61 (concat "{" (read-string "Number of columns: ") "}"))
62 (defun YaTeX:array ()
63 (concat (YaTeX:read-position "tb")
64 "{" (read-string "Column format: ") "}"))
65 (defun YaTeX:subequations ()
66 (message (if YaTeX-japan "分かりやすいコメントに変えるとref補完が楽よ"
67 "Changing comment string reduces effort at `ref' completion"))
68 (concat " " YaTeX-comment-prefix
69 (YaTeX::ref-default-label "%H:%M")
70 (if YaTeX-japan "の式群" "equations")))
72 (defun YaTeX:read-oneof (oneof &optional quick allow-dup)
73 (let ((pos "") loc (guide ""))
74 (and (boundp 'name) name (setq guide (format "%s " name)))
75 (catch 'quick
76 (while (not (string-match
77 (setq loc (read-key-sequence
78 (format "%s position (`%s') [%s]: "
79 guide oneof pos));name is in YaTeX-addin
80 loc (if (fboundp 'events-to-keys)
81 (events-to-keys loc) loc))
82 "\r\^g\n"))
83 (cond
84 ((string-match loc oneof)
85 (if (or allow-dup (not (string-match loc pos)))
86 (setq pos (concat pos loc)))
87 (if quick (throw 'quick t)))
88 ((and (string-match loc "\C-h\C-?") (> (length pos) 0))
89 (setq pos (substring pos 0 (1- (length pos)))))
90 (t
91 (ding)
92 (message "Please input one of `%s'." oneof)
93 (sit-for 3)))))
94 (message "")
95 pos))
97 (defun YaTeX:read-position (oneof)
98 "Read a LaTeX (optional) position format such as `[htbp]'."
99 (let ((pos (YaTeX:read-oneof oneof)))
100 (if (string= pos "") "" (concat "[" pos "]"))))
102 (defun YaTeX:table ()
103 "YaTeX add-in function for table environment."
104 (cond
105 ((eq major-mode 'yatex-mode)
106 (setq YaTeX-env-name "tabular"
107 YaTeX-section-name "caption")
108 (YaTeX:read-position "htbp"))
109 ((eq major-mode 'texinfo-mode)
110 (concat " "
111 (completing-read
112 "Highlights with: "
113 '(("@samp")("@kbd")("@code")("@asis")("@file")("@var"))
114 nil nil "@")))))
116 (fset 'YaTeX:figure 'YaTeX:table)
117 (fset 'YaTeX:figure* 'YaTeX:table)
120 (defun YaTeX:description ()
121 "Truly poor service:-)"
122 (setq YaTeX-single-command "item[]")
123 "")
125 (defun YaTeX:itemize ()
126 "It's also poor service."
127 (setq YaTeX-single-command "item")
128 "")
130 (fset 'YaTeX:enumerate 'YaTeX:itemize)
132 (defun YaTeX:picture ()
133 "Ask the size of coordinates of picture environment."
134 (concat (YaTeX:read-coordinates "Picture size")
135 (YaTeX:read-coordinates "Initial position")))
137 (defun YaTeX:equation ()
138 (YaTeX-jmode-off)
139 (if (fboundp 'YaTeX-toggle-math-mode)
140 (YaTeX-toggle-math-mode t))) ;force math-mode ON.
142 (mapcar '(lambda (f) (fset f 'YaTeX:equation))
143 '(YaTeX:eqnarray YaTeX:eqnarray* YaTeX:align YaTeX:align*
144 YaTeX:split YaTeX:multline YaTeX:multline* YaTeX:gather YaTeX:gather*
145 YaTeX:aligned* YaTeX:gathered YaTeX:gathered*
146 YaTeX:alignat YaTeX:alignat* YaTeX:xalignat YaTeX:xalignat*
147 YaTeX:xxalignat YaTeX:xxalignat*))
149 (defun YaTeX:alignat ()
150 (YaTeX:equation)
151 (concat "{" (read-string "Number of cols: ") "}"))
155 (defun YaTeX:list ()
156 "%\n{} %default label\n{} %formatting parameter")
158 (defun YaTeX:minipage ()
159 (concat (YaTeX:read-position "cbt")
160 "{" (read-string "Width: ") "}"))
162 (defun YaTeX:thebibliography ()
163 (setq YaTeX-section-name "bibitem")
164 (concat "{" (read-string "Longest label: ") "}"))
166 (defun YaTeX:multicols ()
167 (concat "{" (read-string "Number of columns: ") "}"))
169 ;;;
170 ;;Sample functions for section-type command.
171 ;;;
172 (defun YaTeX:multiput ()
173 (concat (YaTeX:read-coordinates "Pos")
174 (YaTeX:read-coordinates "Step")
175 "{" (read-string "How many times: ") "}"))
177 (defun YaTeX:put ()
178 (YaTeX:read-coordinates "Pos"))
180 (defun YaTeX:makebox ()
181 (cond
182 ((YaTeX-in-environment-p "picture")
183 (concat (YaTeX:read-coordinates "Dimension")
184 (YaTeX:read-position "lsrtb")))
185 (t
186 (let ((width (read-string "Width: ")))
187 (if (string< "" width)
188 (progn
189 (or (equal (aref width 0) ?\[)
190 (setq width (concat "[" width "]")))
191 (concat width (YaTeX:read-position
192 (if YaTeX-use-LaTeX2e "lrs" "lr")))))))))
194 ;; (defun YaTeX:framebox ()
195 ;; (if (YaTeX-quick-in-environment-p "picture")
196 ;; (YaTeX:makebox)))
197 (fset 'YaTeX:framebox 'YaTeX:makebox)
199 (defun YaTeX:parbox ()
200 (YaTeX:read-position "tbc"))
201 (defun YaTeX::parbox (argp)
202 (cond
203 ((= argp 1) (read-string "Width: "))
204 ((= argp 2) (read-string "Text: "))))
206 (defun YaTeX::dashbox ()
207 (concat "{" (read-string "Dash dimension: ") "}"
208 (YaTeX:read-coordinates "Dimension")))
210 (defun YaTeX::savebox (argp)
211 (cond
212 ((= argp 1) (read-string "Saved into name: " "\\"))
213 ((= argp 2) (read-string "Text: "))))
215 (defvar YaTeX-minibuffer-quick-map nil)
216 (if YaTeX-minibuffer-quick-map nil
217 (setq YaTeX-minibuffer-quick-map
218 (copy-keymap minibuffer-local-completion-map))
219 (let ((ch (1+ ? )))
220 (while (< ch 127)
221 (define-key YaTeX-minibuffer-quick-map (char-to-string ch)
222 'YaTeX-minibuffer-quick-complete)
223 (setq ch (1+ ch)))))
225 (defvar YaTeX:left-right-delimiters
226 '(("(" . ")") (")" . "(") ("[" . "]") ("]" . "[")
227 ("\\{" . "\\}") ("\\}" . "\\{") ("|") ("\\|")
228 ("\\lfloor" . "\\rfloor") ("\\lceil" . "\\rceil")
229 ("\\langle" . "\\rangle") ("/") (".")
230 ("\\rfloor" . "\\rfloor") ("\\rceil" . "\\lceil")
231 ("\\rangle" . "\\langle") ("\\backslash")
232 ("\\uparrow") ("\\downarrow") ("\\updownarrow") ("\\Updownarrow"))
233 "TeX math delimiter, which can be completed after \\right or \\left.")
235 (defvar YaTeX:left-right-default nil "Default string of YaTeX:right.")
237 (defun YaTeX:left ()
238 (let ((minibuffer-completion-table YaTeX:left-right-delimiters)
239 delimiter (leftp (string= YaTeX-single-command "left")))
240 (setq delimiter
241 (read-from-minibuffer
242 (format "Delimiter%s: "
243 (if YaTeX:left-right-default
244 (format "(default=`%s')" YaTeX:left-right-default)
245 "(SPC for menu)"))
246 nil YaTeX-minibuffer-quick-map))
247 (if (string= "" delimiter) (setq delimiter YaTeX:left-right-default))
248 (setq YaTeX-single-command (if leftp "right" "left")
249 YaTeX:left-right-default
250 (or (cdr (assoc delimiter YaTeX:left-right-delimiters)) delimiter))
251 delimiter))
253 (fset 'YaTeX:right 'YaTeX:left)
255 (defun YaTeX:langle ()
256 (setq YaTeX-single-command "rangle")
257 nil)
259 (defun YaTeX:read-coordinates (&optional mes varX varY)
260 (concat
261 "("
262 (read-string (format "%s %s: " (or mes "Dimension") (or varX "X")))
263 ","
264 (read-string (format "%s %s: " (or mes "Dimension") (or varY "Y")))
265 ")"))
267 (defun YaTeX:itembox ()
268 (concat "{" (read-string "Item heading string: ") "}"))
270 ;;;
271 ;;Sample functions for maketitle-type command.
272 ;;;
273 (defun YaTeX:sum ()
274 "Read range of summation."
275 (YaTeX:check-completion-type 'maketitle)
276 (concat (YaTeX:read-boundary "_") (YaTeX:read-boundary "^")))
278 (fset 'YaTeX:int 'YaTeX:sum)
280 (defun YaTeX:lim ()
281 "Insert limit notation of \\lim."
282 (YaTeX:check-completion-type 'maketitle)
283 (let ((var (read-string "Variable: ")) limit)
284 (if (string= "" var) ""
285 (setq limit (read-string "Limit ($ means infinity): "))
286 (if (string= "$" limit) (setq limit "\\infty"))
287 (concat "_{" var " \\rightarrow " limit "}"))))
289 (defun YaTeX:gcd ()
290 "Add-in function for \\gcd(m,n)."
291 (YaTeX:check-completion-type 'maketitle)
292 (YaTeX:read-coordinates "\\gcd" "(?,)" "(,?)"))
294 (defun YaTeX:read-boundary (ULchar)
295 "Read boundary usage by _ or ^. _ or ^ is indicated by argument ULchar."
296 (let ((bndry (read-string (concat ULchar "{???} ($ for infinity): "))))
297 (if (string= bndry "") ""
298 (if (string= bndry "$") (setq bndry "\\infty"))
299 (concat ULchar "{" bndry "}"))))
301 (defun YaTeX:verb ()
302 "Enclose \\verb's contents with the same characters."
303 (let ((quote-char (read-string "Quoting char: " "|"))
304 (contents (read-string "Quoted contents: ")))
305 (concat quote-char contents quote-char)))
307 (fset 'YaTeX:verb* 'YaTeX:verb)
309 (defun YaTeX:footnotemark ()
310 (setq YaTeX-section-name "footnotetext")
311 nil)
313 (defun YaTeX:cite ()
314 (let ((comment (read-string "Comment for citation: ")))
315 (if (string= comment "") ""
316 (concat "[" comment "]"))))
318 (defun YaTeX:bibitem ()
319 (let ((label (read-string "Citation label for bibitem: ")))
320 (if (string= label "") ""
321 (concat "[" label "]"))))
323 (defun YaTeX:item ()
324 (cond
325 ((eq major-mode 'yatex-mode)
326 (YaTeX-indent-line)
327 (setq YaTeX-section-name "label"))
328 ((eq major-mode 'texinfo-mode)
329 (setq YaTeX-section-name "dots"))) ;??
330 " ")
331 (fset 'YaTeX:item\[\] 'YaTeX:item)
332 (fset 'YaTeX:subitem 'YaTeX:item)
333 (fset 'YaTeX:subsubitem 'YaTeX:item)
335 (defun YaTeX:linebreak ()
336 (let (obl)
337 (message "Break strength 0,1,2,3,4 (default: 4): ")
338 (setq obl (char-to-string (read-char)))
339 (if (string-match "[0-4]" obl)
340 (concat "[" obl "]")
341 "")))
342 (fset 'YaTeX:pagebreak 'YaTeX:linebreak)
344 ;;;
345 ;;Subroutine
346 ;;;
348 (defun YaTeX:check-completion-type (type)
349 "Check valid completion type."
350 (if (not (eq type YaTeX-current-completion-type))
351 (error "This should be completed with %s-type completion." type)))
354 ;;;
355 ;;; [[Add-in functions for reading section arguments]]
356 ;;;
357 ;; All of add-in functions for reading sections arguments should
358 ;; take an argument ARGP that specify the argument position.
359 ;; If argument position is out of range, nil should be returned,
360 ;; else nil should NOT be returned.
362 ;;
363 ; Label selection
364 ;;
365 (defvar YaTeX-label-menu-other
366 (if YaTeX-japan "':他のバッファのラベル\n" "':LABEL IN OTHER BUFFER.\n"))
367 (defvar YaTeX-label-menu-repeat
368 (if YaTeX-japan ".:直前の\\refと同じ\n" "/:REPEAT LAST \ref{}\n"))
369 (defvar YaTeX-label-menu-any
370 (if YaTeX-japan "*:任意の文字列\n" "*:ANY STRING.\n"))
371 (defvar YaTeX-label-buffer "*Label completions*")
372 (defvar YaTeX-label-guide-msg "Select label and hit RETURN.")
373 (defvar YaTeX-label-select-map nil
374 "Key map used in label selection buffer.")
375 (defun YaTeX::label-setup-key-map ()
376 (if YaTeX-label-select-map nil
377 (message "Setting up label selection mode map...")
378 ;(setq YaTeX-label-select-map (copy-keymap global-map))
379 (setq YaTeX-label-select-map (make-keymap))
380 (suppress-keymap YaTeX-label-select-map)
381 (substitute-all-key-definition
382 'previous-line 'YaTeX::label-previous YaTeX-label-select-map)
383 (substitute-all-key-definition
384 'next-line 'YaTeX::label-next YaTeX-label-select-map)
385 (define-key YaTeX-label-select-map "\C-n" 'YaTeX::label-next)
386 (define-key YaTeX-label-select-map "\C-p" 'YaTeX::label-previous)
387 (define-key YaTeX-label-select-map "<" 'beginning-of-buffer)
388 (define-key YaTeX-label-select-map ">" 'end-of-buffer)
389 (define-key YaTeX-label-select-map "\C-m" 'exit-recursive-edit)
390 (define-key YaTeX-label-select-map "\C-j" 'exit-recursive-edit)
391 (define-key YaTeX-label-select-map " " 'exit-recursive-edit)
392 (define-key YaTeX-label-select-map "\C-g" 'abort-recursive-edit)
393 (define-key YaTeX-label-select-map "/" 'isearch-forward)
394 (define-key YaTeX-label-select-map "?" 'isearch-backward)
395 (define-key YaTeX-label-select-map "'" 'YaTeX::label-search-tag)
396 (define-key YaTeX-label-select-map "." 'YaTeX::label-search-tag)
397 (define-key YaTeX-label-select-map "*" 'YaTeX::label-search-tag)
398 (message "Setting up label selection mode map...Done")
399 (let ((key ?A))
400 (while (<= key ?Z)
401 (define-key YaTeX-label-select-map (char-to-string key)
402 'YaTeX::label-search-tag)
403 (define-key YaTeX-label-select-map (char-to-string (+ key (- ?a ?A)))
404 'YaTeX::label-search-tag)
405 (setq key (1+ key))))))
407 (defun YaTeX::label-next ()
408 (interactive) (forward-line 1) (message YaTeX-label-guide-msg))
409 (defun YaTeX::label-previous ()
410 (interactive) (forward-line -1) (message YaTeX-label-guide-msg))
411 (defun YaTeX::label-search-tag ()
412 (interactive)
413 (let ((case-fold-search t)
414 (tag (regexp-quote (char-to-string last-command-char))))
415 (cond
416 ((save-excursion
417 (forward-char 1)
418 (re-search-forward (concat "^" tag) nil t))
419 (goto-char (match-beginning 0)))
420 ((save-excursion
421 (goto-char (point-min))
422 (re-search-forward (concat "^" tag) nil t))
423 (goto-char (match-beginning 0))))
424 (message YaTeX-label-guide-msg)))
426 ; (defun YaTeX::ref (argp &optional labelcmd refcmd)
427 ; (cond
428 ; ((= argp 1)
429 ; (let ((lnum 0) e0 label label-list (buf (current-buffer))
430 ; (labelcmd (or labelcmd "label")) (refcmd (or refcmd "ref"))
431 ; (p (point)) initl line cf)
432 ; (message "Collecting labels...")
433 ; (save-window-excursion
434 ; (YaTeX-showup-buffer
435 ; YaTeX-label-buffer (function (lambda (x) (window-width x))))
436 ; (if (fboundp 'select-frame) (setq cf (selected-frame)))
437 ; (if (eq (window-buffer (minibuffer-window)) buf)
438 ; (progn
439 ; (other-window 1)
440 ; (setq buf (current-buffer))
441 ; (set-buffer buf)
442 ; ;(message "cb=%s" buf)(sit-for 3)
443 ; ))
444 ; (save-excursion
445 ; (set-buffer (get-buffer-create YaTeX-label-buffer))
446 ; (setq buffer-read-only nil)
447 ; (erase-buffer))
448 ; (save-excursion
449 ; (goto-char (point-min))
450 ; (let ((standard-output (get-buffer YaTeX-label-buffer)))
451 ; (princ (format "=== LABELS in [%s] ===\n" (buffer-name buf)))
452 ; (while (YaTeX-re-search-active-forward
453 ; (concat "\\\\" labelcmd "\\b")
454 ; (regexp-quote YaTeX-comment-prefix) nil t)
455 ; (goto-char (match-beginning 0))
456 ; (skip-chars-forward "^{")
457 ; (setq label
458 ; (buffer-substring
459 ; (1+ (point))
460 ; (prog2 (forward-list 1) (setq e0 (1- (point)))))
461 ; label-list (cons label label-list))
462 ; (or initl
463 ; (if (< p (point)) (setq initl lnum)))
464 ; (beginning-of-line)
465 ; (skip-chars-forward " \t\n" nil)
466 ; (princ (format "%c:{%s}\t<<%s>>\n" (+ (% lnum 26) ?A) label
467 ; (buffer-substring (point) (point-end-of-line))))
468 ; (setq lnum (1+ lnum))
469 ; (message "Collecting \\%s{}... %d" labelcmd lnum)
470 ; (goto-char e0))
471 ; (princ YaTeX-label-menu-other)
472 ; (princ YaTeX-label-menu-repeat)
473 ; (princ YaTeX-label-menu-any)
474 ; );standard-output
475 ; (goto-char p)
476 ; (or initl (setq initl lnum))
477 ; (message "Collecting %s...Done" labelcmd)
478 ; (if (fboundp 'select-frame) (select-frame cf))
479 ; (YaTeX-showup-buffer YaTeX-label-buffer nil t)
480 ; (YaTeX::label-setup-key-map)
481 ; (setq truncate-lines t)
482 ; (setq buffer-read-only t)
483 ; (use-local-map YaTeX-label-select-map)
484 ; (message YaTeX-label-guide-msg)
485 ; (goto-line (1+ initl)) ;goto recently defined label line
486 ; (switch-to-buffer (current-buffer))
487 ; (unwind-protect
488 ; (progn
489 ; (recursive-edit)
490 ; (set-buffer (get-buffer YaTeX-label-buffer)) ;assertion
491 ; (beginning-of-line)
492 ; (setq line (1- (count-lines (point-min)(point))))
493 ; (cond
494 ; ((= line -1) (setq label ""))
495 ; ((= line lnum) (setq label (YaTeX-label-other)))
496 ; ((= line (1+ lnum))
497 ; (save-excursion
498 ; (switch-to-buffer buf)
499 ; (goto-char p)
500 ; (if (re-search-backward
501 ; (concat "\\\\" refcmd "{\\([^}]+\\)}") nil t)
502 ; (setq label (YaTeX-match-string 1))
503 ; (setq label ""))))
504 ; ((>= line (+ lnum 2))
505 ; (setq label (read-string (format "\\%s{???}: " refcmd))))
506 ; (t (setq label (nth (- lnum line 1) label-list)))))
507 ; (bury-buffer YaTeX-label-buffer)))
508 ; label)))))
510 (defvar YaTeX-ref-default-label-string "%H%M%S_%d%b%y"
511 "*Default \\ref time string format.
512 This format is like strftime(3) but allowed conversion char are as follows;
513 %y -> Last 2 digit of year, %b -> Month name, %m -> Monthe number(1-12),
514 %d -> Day, %H -> Hour, %M -> Minute, %S -> Second,
515 %qx -> alphabetical-decimal conversion of yymmdd.
516 %qX -> alphabetical-decimal conversion of HHMMSS.
517 Beware defualt label-string should be always unique. So this format string
518 should have both time part (%H+%M+%S or %qX) and date
519 part (%y+(%b|%m)+%d or %qx).")
521 (defun YaTeX::ref-alphabex (n)
522 (let ((alphabex ""))
523 (while (> n 0)
524 (setq alphabex (concat (char-to-string (+ ?a (% n 26))) alphabex)
525 n (/ n 26)))
526 alphabex))
528 (defun YaTeX::ref-default-label (&optional format)
529 "Default auto-genarated label string."
530 ;; We do not use (format-time-string) for emacs-19
531 (let*((ts (substring (current-time-string) 4))
532 (y (substring ts -2))
533 (b (substring ts 0 3))
534 (d (format "%d" (string-to-int (substring ts 4 6))))
535 (H (substring ts 7 9))
536 (M (substring ts 10 12))
537 (S (substring ts 13 15))
538 (HMS (+ (* 10000 (string-to-int H))
539 (* 100 (string-to-int M))
540 (string-to-int S)))
541 (talphabex (YaTeX::ref-alphabex HMS))
542 (mnames "JanFebMarAprMayJunJulAugSepOctNovDec")
543 (m (format "%02d" (/ (string-match b mnames) 3)))
544 (ymd (+ (* 10000 (string-to-int y))
545 (* 100 (string-to-int m))
546 (string-to-int d)))
547 (dalphabex (YaTeX::ref-alphabex ymd)))
548 (YaTeX-replace-formats
549 (or format YaTeX-ref-default-label-string)
550 (list (cons "y" y)
551 (cons "b" b)
552 (cons "m" m)
553 (cons "d" d)
554 (cons "H" H)
555 (cons "M" M)
556 (cons "S" S)
557 (cons "qX" talphabex)
558 (cons "qx" dalphabex)))))
560 (defvar YaTeX-ref-generate-label-function 'YaTeX::ref-generate-label
561 "*Function to generate default label for unnamed \\label{}s.
562 The function pointed to this value should take two arguments.
563 First argument is LaTeX macro's name, second is macro's argument.")
565 (defun YaTeX::ref-generate-label (command arg)
566 "Generate a label string which is unique in current buffer."
567 (let ((default (condition-case nil
568 (YaTeX::ref-default-label)
569 (error (substring (current-time-string) 4)))))
570 (read-string "Give a label for this line: "
571 (if YaTeX-emacs-19 (cons default 1) default))))
573 (defun YaTeX::ref-getset-label (buffer point &optional noset)
574 "Get label string in the BUFFER near the POINT.
575 Make \\label{xx} if no label.
576 If optional third argument NOSET is non-nil, do not generate new label."
577 ;;Here, we rewrite the LaTeX source. Therefore we should be careful
578 ;;to decide the location suitable for \label. Do straightforward!
579 (let (boundary inspoint cc newlabel (labelholder "label") mathp exp1 env
580 (r-escape (regexp-quote YaTeX-comment-prefix))
581 command arg alreadysought foundpoint)
582 (set-buffer buffer)
583 (save-excursion
584 (goto-char point)
585 (setq cc (current-column))
586 (if (= (char-after (point)) ?\\) (forward-char 1))
587 (cond
588 ((looking-at YaTeX-sectioning-regexp)
589 (setq command (YaTeX-match-string 0))
590 (skip-chars-forward "^{")
591 (setq arg (buffer-substring
592 (1+ (point))
593 (progn (forward-list 1) (1- (point)))))
594 (skip-chars-forward " \t\n")
595 ;(setq boundary "[^\\]")
596 (setq inspoint (point))
597 (setq boundary
598 (save-excursion
599 (if (YaTeX-re-search-active-forward
600 (concat YaTeX-ec-regexp
601 "\\(" YaTeX-sectioning-regexp "\\|"
602 "begin\\|item\\)")
603 r-escape nil 1)
604 (match-beginning 0)
605 (1- (point))))))
606 ((looking-at "item\\s ")
607 (setq command "item"
608 cc (+ cc 6))
609 ;(setq boundary (concat YaTeX-ec-regexp "\\(item\\|begin\\|end\\)\\b"))
610 (setq boundary
611 (save-excursion
612 (if (YaTeX-re-search-active-forward
613 (concat YaTeX-ec-regexp "\\(item\\|begin\\|end\\)\\b")
614 r-escape nil 1)
615 (match-beginning 0)
616 (1- (point))))
617 inspoint boundary))
618 ((looking-at "bibitem")
619 (setq labelholder "bibitem" ; label holder is bibitem itself
620 command "bibitem")
621 (setq boundary
622 (save-excursion
623 (if (YaTeX-re-search-active-forward
624 (concat YaTeX-ec-regexp "\\(bibitem\\|end\\)\\b")
625 r-escape nil 1)
626 (match-beginning 0)
627 (1- (point))))
628 inspoint boundary))
629 ((string-match YaTeX::ref-nestable-counter-regexp
630 (setq env (or (YaTeX-inner-environment t) "document")))
631 (let ((curtop (get 'YaTeX-inner-environment 'point))
632 (end (point-max)) label)
633 (skip-chars-forward " \t\n")
634 (setq inspoint (point) ;initial candidate
635 cc (current-column)
636 command env
637 alreadysought t)
638 (if (condition-case nil
639 (progn
640 (goto-char curtop)
641 (YaTeX-goto-corresponding-environment))
642 (error nil))
643 (setq end (point)))
644 (goto-char inspoint)
645 (while (YaTeX-re-search-active-forward
646 (concat YaTeX-ec-regexp "label{\\([^}]+\\)}" )
647 r-escape end t)
648 (setq label (YaTeX-match-string 1))
649 (if (and (equal env (YaTeX-inner-environment t))
650 (= curtop (get 'YaTeX-inner-environment 'point)))
651 ;;I found the label
652 (setq alreadysought label
653 foundpoint (match-end 0))))
654 ))
655 ((string-match YaTeX::ref-mathenv-regexp env) ;env is set in above case
656 (setq command env
657 mathp t
658 exp1 (string-match YaTeX::ref-mathenv-exp1-regexp env))
659 ;;(setq boundary (concat YaTeX-ec-regexp "\\(\\\\\\|end{" env "}\\)"))
660 (setq boundary
661 (save-excursion
662 (if (YaTeX-re-search-active-forward
663 (concat
664 YaTeX-ec-regexp "\\("
665 (if exp1 "" "\\\\\\|")
666 "end{" env "}\\)")
667 r-escape nil 1)
668 (match-beginning 0)
669 (1- (point))))
670 inspoint boundary))
671 ((looking-at "footnote\\s *{")
672 (setq command "footnote")
673 (skip-chars-forward "^{") ;move onto `{'
674 (setq boundary
675 (save-excursion
676 (condition-case err
677 (forward-list 1)
678 (error (error "\\\\footnote at point %s's brace not closed"
679 (point))))
680 (1- (point)))
681 inspoint boundary))
682 ((looking-at "caption\\|\\(begin\\)")
683 (setq command (YaTeX-match-string 0))
684 (skip-chars-forward "^{")
685 ;;;;;;(if (match-beginning 1) (forward-list 1))
686 ;; caption can be treated as mathenv, is it right??
687 (setq arg (buffer-substring
688 (1+ (point))
689 (progn (forward-list 1) (1- (point)))))
690 ;;(setq boundary (concat YaTeX-ec-regexp "\\(begin\\|end\\)\\b"))
691 (setq inspoint (point))
692 (setq boundary
693 (save-excursion
694 (if (YaTeX-re-search-active-forward
695 (concat YaTeX-ec-regexp "\\(begin\\|end\\)\\b")
696 r-escape nil 1)
697 (match-beginning 0)
698 (1- (point))))))
699 (t ))
700 (if (save-excursion (skip-chars-forward " \t") (looking-at "%"))
701 (forward-line 1))
702 (cond
703 ((stringp alreadysought)
704 (put 'YaTeX::ref-getset-label 'foundpoint foundpoint) ;ugly...
705 alreadysought)
706 ((and (null alreadysought)
707 (> boundary (point))
708 (save-excursion
709 (YaTeX-re-search-active-forward
710 ;;(concat "\\(" labelholder "\\)\\|\\(" boundary "\\)")
711 labelholder
712 (regexp-quote YaTeX-comment-prefix)
713 boundary 1))
714 (match-beginning 0))
715 ;; if \label{hoge} found, return it
716 (put 'YaTeX::ref-getset-label 'foundpoint (1- (match-beginning 0)))
717 (buffer-substring
718 (progn
719 (goto-char (match-end 0))
720 (skip-chars-forward "^{") (1+ (point)))
721 (progn
722 (forward-sexp 1) (1- (point)))))
723 ;;else make a label
724 ;(goto-char (match-beginning 0))
725 (noset nil) ;do not set label if noset
726 (t
727 (goto-char inspoint)
728 (skip-chars-backward " \t\n")
729 (save-excursion
730 (setq newlabel
731 (funcall YaTeX-ref-generate-label-function command arg)))
732 (delete-region (point) (progn (skip-chars-backward " \t") (point)))
733 (if mathp nil
734 (insert "\n")
735 (YaTeX-reindent cc))
736 (insert (format "\\label{%s}" newlabel))
737 newlabel)))))
739 (defvar YaTeX::ref-labeling-regexp-alist-default
740 '(("\\\\begin{\\(java\\|program\\)}{\\([^}]+\\)}" . 2)
741 ("\\\\label{\\([^}]+\\)}" . 1))
742 "Alist of labeling regexp vs. its group number points to label string.
743 This alist is used in \\ref's argument's completion.")
744 (defvar YaTeX::ref-labeling-regexp-alist-private nil
745 "*Private extension to YaTeX::ref-labeling-regexp-alist.
746 See the documetation of YaTeX::ref-labeling-regexp-alist.")
747 (defvar YaTeX::ref-labeling-regexp-alist
748 (append YaTeX::ref-labeling-regexp-alist-default
749 YaTeX::ref-labeling-regexp-alist-private))
750 (defvar YaTeX::ref-labeling-regexp
751 (mapconcat 'car YaTeX::ref-labeling-regexp-alist "\\|"))
752 (defvar YaTeX::ref-mathenv-regexp
753 ;; See also YaTeX-ams-math-begin-alist in yatex.el
754 ;; Define only envs which has counter.(without *)
755 "equation\\|eqnarray\\|align\\(at\\)?\\|flalign\\|gather\\|xx?alignat\\|multline")
756 (defvar YaTeX::ref-mathenv-exp1-regexp
757 "\\(equation\\|multline\\)\\b"
758 "*Regexp of math-envname which has only one math-expression.")
759 (defvar YaTeX::ref-enumerateenv-regexp
760 "enumerate")
761 (defvar YaTeX::ref-nestable-counter-regexp
762 "subequations")
764 (defvar YaTeX::ref-labeling-section-level 2
765 "*ref補完で収集するセクショニングコマンドの下限レベル
766 YaTeX-sectioning-levelの数値で指定.")
768 (defun YaTeX::ref (argp &optional labelcmd refcmd predf)
769 (setplist 'YaTeX::ref-labeling-regexp nil) ;erase memory cache
770 (require 'yatexsec)
771 (cond
772 ((= argp 1)
773 (let*((lnum 0) m0 e0 x cmd label match-point point-list boundary
774 (buf (current-buffer))
775 (llv YaTeX::ref-labeling-section-level)
776 (mathenvs YaTeX::ref-mathenv-regexp) envname endrx
777 (enums YaTeX::ref-enumerateenv-regexp)
778 (counter
779 (or labelcmd
780 (concat
781 YaTeX-ec-regexp "\\(\\("
782 (mapconcat
783 'concat
784 (delq nil
785 (mapcar
786 (function
787 (lambda (s)
788 (if (>= llv (cdr s))
789 (car s))))
790 YaTeX-sectioning-level))
791 "\\|")
792 "\\|caption\\(\\[[^]]+\\]\\)?\\|footnote\\){"
793 "\\|\\(begin{\\(" mathenvs "\\|" enums "\\)}\\)"
794 (if YaTeX-use-AMS-LaTeX
795 (concat
796 "\\|\\(begin{"
797 YaTeX::ref-nestable-counter-regexp "}\\)"))
798 "\\)")))
799 (regexp (concat "\\(" counter
800 "\\)\\|\\(" YaTeX::ref-labeling-regexp "\\)"))
801 (itemsep (concat YaTeX-ec-regexp
802 "\\(\\(bib\\)?item\\|begin\\|end\\)"))
803 (refcmd (or refcmd "\\(page\\)?ref"))
804 (p (point)) initl line cf
805 (percent (regexp-quote YaTeX-comment-prefix))
806 (output
807 (function
808 (lambda (label p)
809 (while (setq x (string-match "[\n\t]" label))
810 (aset label x ? ))
811 (while (setq x (string-match " +" label))
812 (setq label (concat
813 (substring label 0 (1+ (match-beginning 0)))
814 (substring label (match-end 0)))))
815 (princ (format "%c: <<%s>>\n" (+ (% lnum 26) ?A) label))
816 (setq point-list (cons p point-list))
817 (message "Collecting labels... %d" lnum)
818 (setq lnum (1+ lnum)))))
819 (me (if (boundp 'me) me 'YaTeX::ref))
820 )
821 (message "Collecting labels...")
822 (save-window-excursion
823 (YaTeX-showup-buffer
824 YaTeX-label-buffer (function (lambda (x) (window-width x))))
825 (if (fboundp 'select-frame) (setq cf (selected-frame)))
826 (if (eq (window-buffer (minibuffer-window)) buf)
827 (progn
828 (other-window 1)
829 (setq buf (current-buffer))
830 (set-buffer buf)))
831 (save-excursion
832 (set-buffer (get-buffer-create YaTeX-label-buffer))
833 (condition-case ()
834 (if (and YaTeX-use-font-lock (fboundp 'font-lock-mode))
835 (font-lock-mode 1))
836 (error nil))
837 (setq buffer-read-only nil)
838 (erase-buffer))
839 (save-excursion
840 (set-buffer buf)
841 (goto-char (point-min))
842 (let ((standard-output (get-buffer YaTeX-label-buffer)) existlabel)
843 (princ (format "=== LABELS in [%s] ===\n" (buffer-name buf)))
844 (while (YaTeX-re-search-active-forward
845 regexp ;;counter
846 percent nil t)
847 ;(goto-char (match-beginning 0))
848 (setq e0 (match-end 0))
849 (cond
850 ;;
851 ;;2005/10/21 Skip it if predicate function returns nil
852 ((and predf
853 (let ((md (match-data)))
854 (prog1
855 (condition-case nil
856 (not (funcall predf))
857 (error nil))
858 (store-match-data md)))))
859 ((YaTeX-literal-p) nil)
860 ((YaTeX-match-string 1)
861 ;;if standard counter commands found
862 (setq cmd (YaTeX-match-string 2)
863 m0 (match-beginning 0))
864 (setq match-point (match-beginning 0))
865 (or initl
866 (if (< p (point)) (setq initl lnum)))
867 (cond
868 ;; In any case, variables e0 should be set
869 ((and YaTeX-use-AMS-LaTeX
870 (string-match YaTeX::ref-nestable-counter-regexp cmd))
871 (let (label)
872 (skip-chars-forward "}")
873 (setq label (buffer-substring
874 (point) (min (+ 80 (point)) (point-max))))
875 ;; to skip (maybe)auto-generated comment
876 (skip-chars-forward " \t")
877 (if (looking-at YaTeX-comment-prefix)
878 (forward-line 1))
879 (setq e0 (point))
880 (skip-chars-forward " \t\n")
881 (if (looking-at "\\\\label{\\([^}]+\\)}")
882 (setq label (format "(labe:%s)" (YaTeX-match-string 1))
883 e0 (match-end 1)))
884 (funcall output (format "--subequation--%s" label) e0)))
885 ((string-match mathenvs cmd) ;;if matches mathematical env
886 ;(skip-chars-forward "} \t\n")
887 ;(forward-line 1) ;2004/1/25
888 (skip-chars-forward "}")
889 (setq x (point)
890 envname (substring
891 cmd (match-beginning 0) (match-end 0)))
892 (save-restriction
893 (narrow-to-region
894 m0
895 (save-excursion
896 (YaTeX-re-search-active-forward
897 (setq endrx (format "%send{%s}" YaTeX-ec-regexp
898 (regexp-quote envname)))
899 percent nil t)))
900 (catch 'scan
901 (while (YaTeX-re-search-active-forward
902 (concat
903 "\\\\end{\\(" (regexp-quote envname) "\\)";;(1)
904 (if YaTeX-use-AMS-LaTeX
905 "\\|\\\\\\(notag\\)") ;;2
906 (if (string-match
907 YaTeX::ref-mathenv-exp1-regexp cmd)
908 "" "\\|\\\\\\\\$")
909 )
910 percent nil t)
911 (let*((quit (match-beginning 1))
912 (notag (match-beginning 2))
913 (label ".......................") l2
914 (e (point)) (m0 (match-beginning 0))
915 (ln (YaTeX-string-width label)))
916 (cond
917 (notag
918 (YaTeX-re-search-active-forward
919 "\\\\\\\\" percent nil 1)
920 (setq x (point)))
921 (t
922 (if (YaTeX-re-search-active-backward
923 YaTeX::ref-labeling-regexp
924 percent x t)
925 ;; if \label{x} in math-expression, display it
926 ;; because formula source is hard to recognize
927 (progn
928 (goto-char (match-end 0))
929 (setq l2 (format "\"label:%s\""
930 (buffer-substring
931 (1- (point))
932 (progn (forward-sexp -1)
933 (1+ (point))))))
934 (setq label
935 (if (< (YaTeX-string-width l2) ln)
936 (concat
937 l2
938 (substring
939 label
940 0 (- ln (YaTeX-string-width l2))))
941 l2))
942 (goto-char e)))
943 (funcall output
944 (concat
945 label " "
946 (buffer-substring x m0))
947 x)
948 (cond
949 ((YaTeX-quick-in-environment-p
950 YaTeX-math-gathering-list)
951 ;; if here is inner split/cases/gathered env.,
952 ;; counter for here is only one.
953 ;; Go out this environment and,
954 (YaTeX-end-of-environment)
955 ;; search next expression unit boundary.
956 (YaTeX-re-search-active-forward
957 (concat endrx "\\|\\\\begin{")
958 percent nil 1)
959 (end-of-line)))
960 (if quit (throw 'scan t)))))
961 (setq x (point)))))
962 (setq e0 (point)))
963 ((string-match enums cmd)
964 ;(skip-chars-forward "} \t\n")
965 (save-restriction
966 (narrow-to-region
967 (point)
968 (save-excursion
969 (YaTeX-goto-corresponding-environment) (point)))
970 (forward-line 1)
971 (while (YaTeX-re-search-active-forward
972 (concat YaTeX-ec-regexp "item\\s ")
973 percent nil t)
974 (setq x (match-beginning 0))
975 (funcall
976 output
977 (concat
978 existlabel
979 (buffer-substring
980 (match-beginning 0)
981 (if (re-search-forward itemsep nil t)
982 (progn (goto-char (match-beginning 0))
983 (skip-chars-backward " \t")
984 (1- (point)))
985 (point-end-of-line))))
986 x))
987 (setq e0 (point-max))))
988 ((string-match "bibitem" cmd) ;maybe generated by myself
989 (setq label "")
990 (skip-chars-forward " \t")
991 (if (looking-at "{") ;sure to be true!!
992 (forward-list 1))
993 (let ((list '(30 10 65))
994 (delim ";") q lim len l str)
995 (save-excursion
996 (setq lim (if (re-search-forward itemsep nil 1)
997 (match-beginning 0) (point))))
998 (while list
999 (skip-chars-forward " \t\n\\")
1000 (setq q (looking-at "[\"'{]")
1001 len (car list)
1002 str
1003 (buffer-substring
1004 (point)
1005 (progn
1006 (if q (forward-sexp 1)
1007 (search-forward delim lim 1)
1008 (forward-char -1))
1009 (point))))
1010 (if (> (setq l (YaTeX-string-width str)) len)
1011 (setq str (concat
1012 (YaTeX-truncate-string-width
1013 str (- len (if q 5 4)))
1014 "... "
1015 (if q (substring str -1)))))
1016 (if (< (setq l (YaTeX-string-width str)) len)
1017 (setq str (concat str (make-string (- len l) ? ))))
1018 (if (looking-at delim) (goto-char (match-end 0)))
1019 (setq label (concat label " " str)
1020 list (cdr list)))
1021 (funcall output label match-point)))
1022 ;;else, simple section-type counter
1023 ((= (char-after (1- (point))) ?{)
1024 (setq label (buffer-substring
1025 (match-beginning 0)
1026 (progn (forward-char -1)
1027 (forward-list 1)
1028 (point))))
1029 (funcall output label match-point)
1030 ;; Skip preceding label if exists
1031 (if (YaTeX::ref-getset-label (current-buffer) match-point t)
1032 (goto-char (get 'YaTeX::ref-getset-label 'foundpoint)))
1033 (if (save-excursion
1034 (skip-chars-forward "\t \n")
1035 (looking-at YaTeX::ref-labeling-regexp))
1036 (setq e0 (match-end 0))))
1037 (t
1038 (skip-chars-forward " \t")
1039 (setq label (buffer-substring
1040 (match-beginning 0)
1041 (if (re-search-forward
1042 itemsep
1043 nil t)
1044 (progn
1045 (goto-char (match-beginning 0))
1046 (skip-chars-backward " \t")
1047 (1- (point)))
1048 (point-end-of-line))))
1049 (funcall output label match-point)
1050 (if (save-excursion
1051 (skip-chars-forward "\t \n")
1052 (looking-at YaTeX::ref-labeling-regexp))
1053 (setq e0 (match-end 0)))))
1054 ) ;;put label buffer
1055 ;;
1056 ;; if user defined label found
1057 (t
1058 ;; memorize line number and label into property
1059 (goto-char (match-beginning 0))
1060 (let ((list YaTeX::ref-labeling-regexp-alist)
1061 (cache (symbol-plist 'YaTeX::ref-labeling-regexp)))
1062 (while list
1063 (if (looking-at (car (car list)))
1064 (progn
1065 (setq label (YaTeX-match-string 0))
1066 (put 'YaTeX::ref-labeling-regexp lnum
1067 (YaTeX-match-string (cdr (car list))))
1068 (funcall output label 0) ;;0 is dummy, never used
1069 (setq list nil)))
1070 (setq list (cdr list))))
1071 ))
1072 (goto-char e0))
1073 (princ YaTeX-label-menu-other)
1074 (princ YaTeX-label-menu-repeat)
1075 (princ YaTeX-label-menu-any)
1076 );standard-output
1077 (goto-char p)
1078 (or initl (setq initl lnum))
1079 (message "Collecting labels...Done")
1080 (if (fboundp 'select-frame) (select-frame cf))
1081 (YaTeX-showup-buffer YaTeX-label-buffer nil t)
1082 (YaTeX::label-setup-key-map)
1083 (setq truncate-lines t)
1084 (setq buffer-read-only t)
1085 (use-local-map YaTeX-label-select-map)
1086 (message YaTeX-label-guide-msg)
1087 (goto-line (1+ initl)) ;goto recently defined label line
1088 (switch-to-buffer (current-buffer))
1089 (unwind-protect
1090 (progn
1091 (recursive-edit)
1093 (set-buffer (get-buffer YaTeX-label-buffer)) ;assertion
1094 (beginning-of-line)
1095 (setq line (1- (count-lines (point-min)(point))))
1096 (cond
1097 ((= line -1) (setq label ""))
1098 ((= line lnum) (setq label (YaTeX-label-other)))
1099 ((= line (1+ lnum))
1100 (save-excursion
1101 (switch-to-buffer buf)
1102 (goto-char p)
1103 (if (re-search-backward
1104 (concat "\\\\" refcmd "{") nil t)
1105 (setq label (YaTeX-buffer-substring
1106 (progn (goto-char (1- (match-end 0)))
1107 (1+ (point)))
1108 (progn (forward-list 1)
1109 (1- (point)))))
1110 (setq label ""))))
1111 ((>= line (+ lnum 2))
1112 (setq label (read-string (format "\\%s{???}: " refcmd))))
1113 (t ;(setq label (nth (- lnum line 1) label-list))
1114 (setq label
1115 (or (get 'YaTeX::ref-labeling-regexp line)
1116 (YaTeX::ref-getset-label
1117 buf (nth (- lnum line 1) point-list))))
1118 )))
1119 (bury-buffer YaTeX-label-buffer)))
1120 label)))))
1122 (defun YaTeX::label-rename-refs (old new &optional def ref)
1123 "Rename reference tag from OLD to NEW.
1124 Optional arguments DEF and REF specify defining command and
1125 referring command respectively.
1126 ---------------------------------------------------------
1127 CONTROL KEYS - キーの説明
1128 y Replace 置換する
1129 n Do not replace 置換しない
1130 ! Replace All w/o query 残る全部を確認なしで置換
1131 r Enter Recursive-edit 再帰編集モードへ
1132 q Quit from replacing ここまでで置換をやめる
1134 Don't forget to exit from recursive edit by typing \\[exit-recursive-edit]
1135 再帰編集に入ったら \\[exit-recursive-edit] で抜け忘れなきよう。"
1136 (save-window-excursion
1137 (catch 'exit
1138 (let*((bufs (YaTeX-yatex-buffer-list)) buf b e
1139 (oldptn (regexp-quote old))
1140 (sw (selected-window))
1141 (ptn (concat
1142 "\\(" YaTeX-refcommand-ref-regexp "\\)"
1143 "\\s *{" oldptn "}"))
1144 (repface (and (fboundp 'make-overlay)
1145 (fboundp 'internal-find-face)
1146 (if (internal-find-face 'isearch) 'isearch 'region)))
1147 ov
1148 (qmsg "Replace to `%s'? [yn!rq?]")
1149 continue ch)
1150 (while bufs
1151 (set-buffer (setq buf (car bufs)))
1152 (save-excursion
1153 (goto-char (point-min))
1154 (while (re-search-forward ptn nil t)
1155 (goto-char (match-end 1))
1156 (skip-chars-forward " \t\n{")
1157 (unwind-protect
1158 (if (and
1159 (looking-at oldptn)
1160 (setq b (match-beginning 0)
1161 e (match-end 0))
1162 (or continue
1163 (catch 'query
1164 (if repface
1165 (if ov (move-overlay ov b e)
1166 (overlay-put
1167 (setq ov (make-overlay b e))
1168 'face repface)))
1169 (switch-to-buffer buf)
1170 (while t
1171 (message qmsg new)
1172 (setq ch (read-char))
1173 (cond
1174 ((= ch ?q) (throw 'exit t))
1175 ((= ch ?r)
1176 (message
1177 "Don't forget to exit recursive-edit by `%s'"
1178 (key-description
1179 (where-is-internal
1180 'exit-recursive-edit '(keymap) t)))
1181 (sleep-for 2)
1182 (recursive-edit))
1183 ((= ch ?y) (throw 'query t))
1184 ((= ch ?!) (throw 'query (setq continue t)))
1185 ((= ch ??)
1186 (describe-function
1187 'YaTeX::label-rename-refs)
1188 (select-window (get-buffer-window "*Help*"))
1189 (search-forward "----")
1190 (forward-line 1)
1191 (set-window-start (selected-window) (point))
1192 (sit-for 0)
1193 (select-window sw))
1194 ((= ch ?n) (throw 'query nil)))))))
1195 (replace-match new))
1196 (and ov (delete-overlay ov)))))
1197 (setq bufs (cdr bufs)))))))
1199 (defun YaTeX::label (argp &optional labname refname)
1200 "Read label name and return it with copying \\ref{LABEL-NAME} to kill-ring."
1201 (cond
1202 ((= argp 1)
1203 (let*((chmode (boundp (intern-soft "old")))
1204 (dlab (if chmode old ;if called via YaTeX-change-section (tricky...)
1205 (YaTeX::ref-default-label)))
1206 (label (read-string
1207 (format "New %s name: " (or labname "label"))
1208 (cons dlab 1))))
1209 (if (string< "" label)
1210 (let ((refstr (format "\\%s{%s}" (or refname "ref") label))
1211 (key (key-description (where-is-internal 'yank nil t)))
1212 (msg
1213 (if YaTeX-japan
1214 "をkill-ringに入れました。yank(%s)で取り出せます。"
1215 " is stored into kill-ring. Paste it by yank(%s).")))
1216 (kill-new refstr)
1217 (and chmode
1218 (not (equal old label))
1219 (YaTeX::label-rename-refs old label))
1220 (message (concat "`%s'" msg) refstr key)))
1221 label))))
1224 (fset 'YaTeX::pageref 'YaTeX::ref)
1225 (defun YaTeX::tabref (argp) ; For the style file of IPSJ journal
1226 (YaTeX::ref
1227 argp nil nil
1228 (function
1229 (lambda ()
1230 (YaTeX-quick-in-environment-p "table")))))
1231 (defun YaTeX::figref (argp) ; For the style file of IPSJ journal
1232 (YaTeX::ref
1233 argp nil nil
1234 (function
1235 (lambda ()
1236 (YaTeX-quick-in-environment-p "figure")))))
1238 (defun YaTeX::cite-collect-bibs-external (bibptn &rest files)
1239 "Collect bibentry from FILES(variable length argument) ;
1240 and print them to standard output."
1241 ;;Thanks; http://icarus.ilcs.hokudai.ac.jp/comp/biblio.html
1242 (let*((tb (get-buffer-create " *bibtmp*"))
1243 (bibitemsep "^\\s *@[A-Za-z]")
1244 (target (if (string< "" bibptn) bibptn bibitemsep))
1245 (checkrx (concat "\\(" bibptn "\\)\\|" bibitemsep))
1246 beg
1247 (searchnext
1248 (if (string< "" bibptn)
1249 (function
1250 (lambda()
1251 (setq beg (point))
1252 (and
1253 (prog1
1254 (re-search-forward target nil t)
1255 (end-of-line))
1256 (re-search-backward bibitemsep beg t))))
1257 (function
1258 (lambda()
1259 (re-search-forward target nil t)))))
1261 (save-excursion
1262 (set-buffer tb)
1263 (princ (format "%sbegin{thebibliography}\n" YaTeX-ec))
1264 (while files
1265 (erase-buffer)
1266 (cond
1267 ((file-exists-p (car files))
1268 (insert-file-contents (car files)))
1269 ((file-exists-p (concat (car files) ".bib"))
1270 (insert-file-contents (concat (car files) ".bib"))))
1271 (save-excursion
1272 (goto-char (point-min))
1273 (while (funcall searchnext)
1274 (skip-chars-forward "^{,")
1275 (setq beg (point))
1276 (if (= (char-after (point)) ?{)
1277 (princ (format "%sbibitem{%s}%s\n"
1278 YaTeX-ec
1279 (buffer-substring
1280 (1+ (point))
1281 (progn (skip-chars-forward "^,\n")
1282 (point)))
1283 (mapconcat
1284 (function
1285 (lambda (kwd)
1286 (goto-char beg)
1287 (if (re-search-forward
1288 (concat kwd "\\s *=") nil t)
1289 (buffer-substring
1290 (progn
1291 (goto-char (match-end 0))
1292 (skip-chars-forward " \t\n")
1293 (point))
1294 (progn
1295 (if (looking-at "[{\"]")
1296 (forward-sexp 1)
1297 (forward-char 1)
1298 (skip-chars-forward "^,}"))
1299 (point))))))
1300 '("author" "year" "title" )
1301 ";"))))
1302 (and (re-search-forward bibitemsep nil t)
1303 (forward-line -1))))
1304 (setq files (cdr files)))
1305 (princ (format "%sbegin{thebibliography}\n" YaTeX-ec)))))
1307 (defvar YaTeX::cite-bibitem-macro-regexp "bibitem\\|harvarditem"
1308 "*Regexp of macro name of bibitem definition")
1310 (defun YaTeX::cite-collect-bibs-internal (bibptn)
1311 "Collect bibentry in the current buffer and print them to standard output."
1312 (let ((ptn (concat YaTeX-ec-regexp
1313 "\\(" YaTeX::cite-bibitem-macro-regexp "\\)\\b"))
1314 (lim (concat YaTeX-ec-regexp
1315 "\\(" YaTeX::cite-bibitem-macro-regexp "\\b\\)"
1316 "\\|\\(end{\\)"))
1317 (pcnt (regexp-quote YaTeX-comment-prefix)))
1318 ;; Using bibptn not yet implemented.
1319 ;; Do you need it?? 2005/11/22
1320 (save-excursion
1321 (while (YaTeX-re-search-active-forward ptn pcnt nil t)
1322 (skip-chars-forward "^{\n")
1323 (or (eolp)
1324 (princ (format "%sbibitem%s %s\n"
1325 YaTeX-ec
1326 (buffer-substring
1327 (point)
1328 (progn (forward-sexp 1) (point)))
1329 (buffer-substring
1330 (progn (skip-chars-forward "\n \t") (point))
1331 (save-excursion
1332 (if (YaTeX-re-search-active-forward
1333 lim pcnt nil t)
1334 (progn
1335 (goto-char (match-beginning 0))
1336 (skip-chars-backward "\n \t")
1337 (point))
1338 (point-end-of-line)))))))))))
1340 (defun YaTeX::cite (argp &rest dummy)
1341 (cond
1342 ((eq argp 1)
1343 (let* ((cb (current-buffer))
1344 (f (file-name-nondirectory buffer-file-name))
1345 (d default-directory)
1346 (hilit-auto-highlight nil)
1347 (pcnt (regexp-quote YaTeX-comment-prefix))
1348 (bibrx (concat YaTeX-ec-regexp "bibliography{\\([^}]+\\)}"))
1349 (bibptn (read-string "Pattern: "))
1350 (bbuf (get-buffer-create " *bibitems*"))
1351 (standard-output bbuf)
1352 (me 'YaTeX::cite) ;shuld set this for using YaTeX::ref
1353 bibs files)
1354 (set-buffer bbuf)(erase-buffer)(set-buffer cb)
1355 (save-excursion
1356 (goto-char (point-min))
1357 ;;(1)search external bibdata
1358 (while (YaTeX-re-search-active-forward bibrx pcnt nil t)
1359 (apply 'YaTeX::cite-collect-bibs-external
1360 bibptn
1361 (YaTeX-split-string
1362 (YaTeX-match-string 1) ",")))
1363 ;;(2)search direct \bibitem usage
1364 (YaTeX::cite-collect-bibs-internal bibptn)
1365 (if (progn
1366 (YaTeX-visit-main t)
1367 (not (eq (current-buffer) cb)))
1368 (save-excursion
1369 (goto-char (point-min))
1370 ;;(1)search external bibdata
1371 (while (YaTeX-re-search-active-forward bibrx pcnt nil t)
1372 (apply 'YaTeX::cite-collect-bibs-external
1373 bibptn
1374 (YaTeX-split-string
1375 (YaTeX-match-string 1) ",")))
1376 ;;(2)search internal
1377 (YaTeX::cite-collect-bibs-internal bibptn)))
1378 ;;Now bbuf holds the list of bibitem
1379 (set-buffer bbuf)
1380 ;;;(switch-to-buffer bbuf)
1381 (if (fboundp 'font-lock-fontify-buffer) (font-lock-fontify-buffer))
1382 (YaTeX::ref
1383 argp
1384 (concat "\\\\\\("
1385 YaTeX::cite-bibitem-macro-regexp
1386 "\\)\\(\\[.*\\]\\)?")
1387 "cite"))))
1389 (t nil)))
1391 (defun YaTeX::bibitem (argp)
1392 "Add-in function to insert argument of \\bibitem."
1393 (YaTeX::label argp "label" "cite"))
1395 ;;; for AMS-LaTeX
1396 (and YaTeX-use-AMS-LaTeX (fset 'YaTeX::eqref 'YaTeX::ref))
1397 ;;; for Harvard citation style
1398 (fset 'YaTeX::citeasnoun 'YaTeX::cite)
1399 (fset 'YaTeX::possessivecite 'YaTeX::cite)
1400 (fset 'YaTeX::citeyear 'YaTeX::cite)
1401 (fset 'YaTeX::citename 'YaTeX::cite)
1402 (fset 'YaTeX::citep 'YaTeX::cite)
1403 (fset 'YaTeX::citet 'YaTeX::cite)
1405 (defun YaTeX-select-other-yatex-buffer ()
1406 "Select buffer from all yatex-mode's buffers interactivelly."
1407 (interactive)
1408 (let ((lbuf "*YaTeX mode buffers*") (blist (YaTeX-yatex-buffer-list))
1409 (lnum -1) buf rv
1410 (ff "**find-file**"))
1411 (YaTeX-showup-buffer
1412 lbuf (function (lambda (x) 1))) ;;Select next window surely.
1413 (save-excursion
1414 (set-buffer (get-buffer lbuf))
1415 (setq buffer-read-only nil)
1416 (erase-buffer))
1417 (let ((standard-output (get-buffer lbuf)))
1418 (while blist
1419 (princ
1420 (format "%c:{%s}\n" (+ (% (setq lnum (1+ lnum)) 26) ?A)
1421 (buffer-name (car blist))))
1422 (setq blist (cdr blist)))
1423 (princ (format "':{%s}" ff)))
1424 (YaTeX-showup-buffer lbuf nil t)
1425 (YaTeX::label-setup-key-map)
1426 (setq buffer-read-only t)
1427 (use-local-map YaTeX-label-select-map)
1428 (message YaTeX-label-guide-msg)
1429 (unwind-protect
1430 (progn
1431 (recursive-edit)
1432 (set-buffer lbuf)
1433 (beginning-of-line)
1434 (setq rv
1435 (if (re-search-forward "{\\([^\\}]+\\)}" (point-end-of-line) t)
1436 (buffer-substring (match-beginning 1) (match-end 1)) nil)))
1437 (kill-buffer lbuf))
1438 (if (string= rv ff)
1439 (progn
1440 (call-interactively 'find-file)
1441 (current-buffer))
1442 rv)))
1444 (defun YaTeX-label-other ()
1445 (let ((rv (YaTeX-select-other-yatex-buffer)))
1446 (cond
1447 ((null rv) "")
1448 (t
1449 (set-buffer rv)
1450 (funcall me argp labelcmd refcmd)))))
1452 ;;
1453 ; completion for the arguments of \newcommand
1454 ;;
1455 (defun YaTeX::newcommand (&optional argp)
1456 (cond
1457 ((= argp 1)
1458 (let ((command (read-string "Define newcommand: " "\\")))
1459 (put 'YaTeX::newcommand 'command (substring command 1))
1460 command))
1461 ((= argp 2)
1462 (let ((argc
1463 (string-to-int (read-string "Number of arguments(Default 0): ")))
1464 (def (read-string "Definition: "))
1465 (command (get 'YaTeX::newcommand 'command)))
1466 ;;!!! It's illegal to insert string in the add-in function !!!
1467 (if (> argc 0) (insert (format "[%d]" argc)))
1468 (if (and (stringp command)
1469 (string< "" command)
1470 (y-or-n-p "Update dictionary?"))
1471 (cond
1472 ((= argc 0)
1473 (YaTeX-update-table
1474 (list command)
1475 'singlecmd-table 'user-singlecmd-table 'tmp-singlecmd-table))
1476 ((= argc 1)
1477 (YaTeX-update-table
1478 (list command)
1479 'section-table 'user-section-table 'tmp-section-table))
1480 (t (YaTeX-update-table
1481 (list command argc)
1482 'section-table 'user-section-table 'tmp-section-table))))
1483 (message "")
1484 def ;return command name
1485 ))
1486 (t "")))
1488 (defun YaTeX::newcounter (&optional argp)
1489 (cond
1490 ((= argp 1)
1491 (read-string "New counter name: "))
1492 (t "")))
1494 ;;
1495 ; completion for the arguments of \pagestyle
1496 ;;
1497 (defun YaTeX::pagestyle (&optional argp)
1498 "Read the pagestyle with completion."
1499 (completing-read
1500 "Page style: "
1501 '(("plain") ("empty") ("headings") ("myheadings") ("normal") nil)))
1503 (fset 'YaTeX::thispagestyle 'YaTeX::pagestyle)
1505 ;;
1506 ; completion for the arguments of \pagenumbering
1507 ;;
1508 (defun YaTeX::pagenumbering (&optional argp)
1509 "Read the numbering style."
1510 (completing-read
1511 "Page numbering style: "
1512 '(("arabic") ("Alpha") ("alpha") ("Roman") ("roman"))))
1514 ;;
1515 ; Length
1516 ;;
1517 (defvar YaTeX:style-parameters-default
1518 '(("\\arraycolsep")
1519 ("\\arrayrulewidth")
1520 ("\\baselineskip")
1521 ("\\columnsep")
1522 ("\\columnseprule")
1523 ("\\doublerulesep")
1524 ("\\evensidemargin")
1525 ("\\footheight")
1526 ("\\footskip")
1527 ("\\headheight")
1528 ("\\headsep")
1529 ("\\itemindent")
1530 ("\\itemsep")
1531 ("\\labelsep")
1532 ("\\labelwidth")
1533 ("\\leftmargin")
1534 ("\\linewidth")
1535 ("\\listparindent")
1536 ("\\marginparsep")
1537 ("\\marginparwidth")
1538 ("\\mathindent")
1539 ("\\oddsidemargin")
1540 ("\\parindent")
1541 ("\\parsep")
1542 ("\\parskip")
1543 ("\\partopsep")
1544 ("\\rightmargin")
1545 ("\\tabcolsep")
1546 ("\\textheight")
1547 ("\\textwidth")
1548 ("\\topmargin")
1549 ("\\topsep")
1550 ("\\topskip")
1552 "Alist of LaTeX style parameters.")
1553 (defvar YaTeX:style-parameters-private nil
1554 "*User definable alist of style parameters.")
1555 (defvar YaTeX:style-parameters-local nil
1556 "*User definable alist of local style parameters.")
1558 (defvar YaTeX:length-history nil "Holds history of length.")
1559 (put 'YaTeX:length-history 'no-default t)
1560 (defun YaTeX::setlength (&optional argp)
1561 "YaTeX add-in function for arguments of \\setlength."
1562 (cond
1563 ((equal 1 argp)
1564 ;;(completing-read "Length variable: " YaTeX:style-parameters nil nil "\\")
1565 (YaTeX-cplread-with-learning
1566 "Length variable: "
1567 'YaTeX:style-parameters-default
1568 'YaTeX:style-parameters-private
1569 'YaTeX:style-parameters-local
1570 nil nil "\\")
1572 ((equal 2 argp)
1573 (read-string-with-history "Length: " nil 'YaTeX:length-history))))
1575 (fset 'YaTeX::addtolength 'YaTeX::setlength)
1577 (defun YaTeX::settowidth (&optional argp)
1578 "YaTeX add-in function for arguments of \\settowidth."
1579 (cond
1580 ((equal 1 argp)
1581 (YaTeX-cplread-with-learning
1582 "Length variable: "
1583 'YaTeX:style-parameters-default
1584 'YaTeX:style-parameters-private
1585 'YaTeX:style-parameters-local
1586 nil nil "\\"))
1587 ((equal 2 argp)
1588 (read-string "Text: "))))
1590 (defun YaTeX::newlength (&optional argp)
1591 "YaTeX add-in function for arguments of \\newlength"
1592 (cond
1593 ((equal argp 1)
1594 (let ((length (read-string "Length variable: " "\\")))
1595 (if (string< "" length)
1596 (YaTeX-update-table
1597 (list length)
1598 'YaTeX:style-parameters-default
1599 'YaTeX:style-parameters-private
1600 'YaTeX:style-parameters-local))
1601 length))))
1603 ;; \multicolumn's arguments
1604 (defun YaTeX::multicolumn (&optional argp)
1605 "YaTeX add-in function for arguments of \\multicolumn."
1606 (cond
1607 ((equal 1 argp)
1608 (read-string "Number of columns: "))
1609 ((equal 2 argp)
1610 (YaTeX:read-oneof "|lrc" nil t))
1611 ((equal 3 argp)
1612 (read-string "Item: "))))
1614 (defvar YaTeX:documentstyles-default
1615 '(("article") ("jarticle") ("j-article")
1616 ("book") ("jbook") ("j-book")
1617 ("report") ("jreport") ("j-report")
1618 ("letter") ("ascjletter"))
1619 "List of LaTeX documentstyles.")
1620 (defvar YaTeX:documentstyles-private nil
1621 "*User defined list of LaTeX documentstyles.")
1622 (defvar YaTeX:documentstyles-local nil
1623 "*User defined list of local LaTeX documentstyles.")
1624 (defvar YaTeX:documentstyle-options-default
1625 '(("a4j") ("a5j") ("b4j") ("b5j")
1626 ("twocolumn") ("jtwocolumn") ("epsf") ("epsfig") ("epsbox") ("nfig"))
1627 "List of LaTeX documentstyle options.")
1628 (defvar YaTeX:documentstyle-options-private nil
1629 "*User defined list of LaTeX documentstyle options.")
1630 (defvar YaTeX:documentstyle-options-local nil
1631 "List of LaTeX local documentstyle options.")
1633 (defun YaTeX:documentstyle ()
1634 (let*((delim ",")
1635 (dt (append YaTeX:documentstyle-options-local
1636 YaTeX:documentstyle-options-private
1637 YaTeX:documentstyle-options-default))
1638 (minibuffer-completion-table dt)
1639 (opt (read-from-minibuffer
1640 "Style options ([opt1,opt2,...]): "
1641 nil YaTeX-minibuffer-completion-map nil))
1642 (substr opt) o)
1643 (if (string< "" opt)
1644 (progn
1645 (while substr
1646 (setq o (substring substr 0 (string-match delim substr)))
1647 (or (assoc o dt)
1648 (YaTeX-update-table
1649 (list o)
1650 'YaTeX:documentstyle-options-default
1651 'YaTeX:documentstyle-options-private
1652 'YaTeX:documentstyle-options-local))
1653 (setq substr
1654 (if (string-match delim substr)
1655 (substring substr (1+ (string-match delim substr))))))
1656 (concat "[" opt "]"))
1657 "")))
1659 (defun YaTeX::documentstyle (&optional argp)
1660 "YaTeX add-in function for arguments of \\documentstyle."
1661 (cond
1662 ((equal argp 1)
1663 (setq YaTeX-env-name "document")
1664 (let ((sname
1665 (YaTeX-cplread-with-learning
1666 (format "Documentstyle (default %s): "
1667 YaTeX-default-document-style)
1668 'YaTeX:documentstyles-default
1669 'YaTeX:documentstyles-private
1670 'YaTeX:documentstyles-local)))
1671 (if (string= "" sname) (setq sname YaTeX-default-document-style))
1672 (setq YaTeX-default-document-style sname)))))
1674 (defun YaTeX::include (argp &optional prompt)
1675 "Read file name setting default directory to that of main file."
1676 (cond
1677 ((= argp 1)
1678 (save-excursion
1679 (YaTeX-visit-main t)
1680 (let*((insert-default-directory)
1681 (file (read-file-name (or prompt "Input file: ") "")))
1682 (setq file (substring file 0 (string-match "\\.tex$" file))))))))
1684 (fset 'YaTeX::input 'YaTeX::include)
1687 ;;; -------------------- LaTeX2e stuff --------------------
1688 (defvar YaTeX:documentclass-options-default
1689 '(("a4paper") ("a5paper") ("b4paper") ("b5paper") ("10pt") ("11pt") ("12pt")
1690 ("latterpaper") ("legalpaper") ("executivepaper") ("landscape")
1691 ("oneside") ("twoside") ("draft") ("final") ("leqno") ("fleqn") ("openbib")
1692 ("tombow") ("titlepage") ("notitlepage") ("dvips")
1693 ("mingoth") ;for jsarticle
1694 ("clock") ;for slides class only
1696 "Default options list for documentclass")
1697 (defvar YaTeX:documentclass-options-private nil
1698 "*User defined options list for documentclass")
1699 (defvar YaTeX:documentclass-options-local nil
1700 "*User defined options list for local documentclass")
1702 (defun YaTeX:documentclass ()
1703 (let*((delim ",")
1704 (dt (append YaTeX:documentclass-options-local
1705 YaTeX:documentclass-options-private
1706 YaTeX:documentclass-options-default))
1707 (minibuffer-completion-table dt)
1708 (opt (read-from-minibuffer
1709 "Documentclass options ([opt1,opt2,...]): "
1710 nil YaTeX-minibuffer-completion-map nil))
1711 (substr opt) o)
1712 (if (string< "" opt)
1713 (progn
1714 (while substr
1716 (setq o (substring substr 0 (string-match delim substr)))
1717 (or (assoc o dt)
1718 (YaTeX-update-table
1719 (list o)
1720 'YaTeX:documentclass-options-default
1721 'YaTeX:documentclass-options-private
1722 'YaTeX:documentclass-options-local))
1723 (setq substr
1724 (if (string-match delim substr)
1725 (substring substr (1+ (string-match delim substr))))))
1726 (concat "[" opt "]"))
1727 "")))
1729 (defvar YaTeX:documentclasses-default
1730 '(("article") ("jarticle") ("report") ("jreport") ("book") ("jbook")
1731 ("jsarticle") ("jsbook")
1732 ("j-article") ("j-report") ("j-book")
1733 ("letter") ("slides") ("ltxdoc") ("ltxguide") ("ltnews") ("proc"))
1734 "Default documentclass alist")
1735 (defvar YaTeX:documentclasses-private nil
1736 "*User defined documentclass alist")
1737 (defvar YaTeX:documentclasses-local nil
1738 "*User defined local documentclass alist")
1739 (defvar YaTeX-default-documentclass (if YaTeX-japan "jarticle" "article")
1740 "*Default documentclass")
1742 (defun YaTeX::documentclass (&optional argp)
1743 (cond
1744 ((equal argp 1)
1745 (setq YaTeX-env-name "document")
1746 (let ((sname
1747 (YaTeX-cplread-with-learning
1748 (format "Documentclass (default %s): " YaTeX-default-documentclass)
1749 'YaTeX:documentclasses-default
1750 'YaTeX:documentclasses-private
1751 'YaTeX:documentclasses-local)))
1752 (if (string= "" sname) (setq sname YaTeX-default-documentclass))
1753 (setq YaTeX-default-documentclass sname)))))
1755 (defvar YaTeX:latex2e-named-color-alist
1756 '(("GreenYellow") ("Yellow") ("Goldenrod") ("Dandelion") ("Apricot")
1757 ("Peach") ("Melon") ("YellowOrange") ("Orange") ("BurntOrange")
1758 ("Bittersweet") ("RedOrange") ("Mahogany") ("Maroon") ("BrickRed")
1759 ("Red") ("OrangeRed") ("RubineRed") ("WildStrawberry") ("Salmon")
1760 ("CarnationPink") ("Magenta") ("VioletRed") ("Rhodamine") ("Mulberry")
1761 ("RedViolet") ("Fuchsia") ("Lavender") ("Thistle") ("Orchid")("DarkOrchid")
1762 ("Purple") ("Plum") ("Violet") ("RoyalPurple") ("BlueViolet")
1763 ("Periwinkle") ("CadetBlue") ("CornflowerBlue") ("MidnightBlue")
1764 ("NavyBlue") ("RoyalBlue") ("Blue") ("Cerulean") ("Cyan") ("ProcessBlue")
1765 ("SkyBlue") ("Turquoise") ("TealBlue") ("Aquamarine") ("BlueGreen")
1766 ("Emerald") ("JungleGreen") ("SeaGreen") ("Green") ("ForestGreen")
1767 ("PineGreen") ("LimeGreen") ("YellowGreen") ("SpringGreen") ("OliveGreen")
1768 ("RawSienna") ("Sepia") ("Brown") ("Tan") ("Gray") ("Black") ("White"))
1769 "Colors defined in $TEXMF/tex/plain/dvips/colordvi.tex")
1771 (defvar YaTeX:latex2e-basic-color-alist
1772 '(("black") ("white") ("red") ("blue") ("yellow") ("green") ("cyan")
1773 ("magenta"))
1774 "Basic colors")
1776 (defun YaTeX:textcolor ()
1777 "Add-in for \\color's option"
1778 (if (y-or-n-p "Use `named' color? ")
1779 "[named]"))
1781 (defun YaTeX::color-completing-read (prompt)
1782 (let ((completion-ignore-case t)
1783 (namedp (save-excursion
1784 (skip-chars-backward "^\n\\[\\\\")
1785 (looking-at "named"))))
1786 (completing-read
1787 prompt
1788 (if namedp
1789 YaTeX:latex2e-named-color-alist
1790 YaTeX:latex2e-basic-color-alist)
1791 nil t)))
1793 (defun YaTeX::textcolor (argp)
1794 "Add-in for \\color's argument"
1795 (cond
1796 ((= argp 1) (YaTeX::color-completing-read "Color: "))
1797 ((= argp 2) (read-string "Colored string: "))))
1799 (fset 'YaTeX:color 'YaTeX:textcolor)
1800 (fset 'YaTeX::color 'YaTeX::textcolor)
1801 (fset 'YaTeX:colorbox 'YaTeX:textcolor)
1802 (fset 'YaTeX::colorbox 'YaTeX::textcolor)
1803 (fset 'YaTeX:fcolorbox 'YaTeX:textcolor)
1804 (fset 'YaTeX:pagecolor 'YaTeX:textcolor)
1805 (fset 'YaTeX::pagecolor 'YaTeX::textcolor)
1807 (defun YaTeX::fcolorbox (argp)
1808 (cond
1809 ((= argp 1) (YaTeX::color-completing-read "Frame color: "))
1810 ((= argp 2) (YaTeX::color-completing-read "Inner color: "))
1811 ((= argp 3) (read-string "Colored string: "))))
1813 (defun YaTeX:scalebox ()
1814 "Add-in for \\scalebox"
1815 (let ((vmag (read-string
1816 (if YaTeX-japan "倍率(負で反転): "
1817 "Magnification(Negative for flipped): ")))
1818 (hmag (read-string (if YaTeX-japan "縦倍率(省略可): "
1819 "Vertical magnification(Optional): "))))
1820 (if (and hmag (string< "" hmag))
1821 (format "{%s}[%s]" vmag hmag)
1822 (format "{%s}" vmag))))
1824 (defun YaTeX:rotatebox ()
1825 "Optional argument add-in for \\rotatebox"
1826 (message "Rotate origin? (N)one (O)rigin (X)-Y: ")
1827 (let ((c (read-char)) r (defx "x=mm") x (defy "y=mm") y something)
1828 (cond
1829 ((memq c '(?O ?o))
1830 (if (string< "" (setq r (YaTeX:read-oneof "htbpB")))
1831 (concat "[origin=" r "]")))
1832 ((memq c '(?X ?x ?Y ?y))
1833 (setq r (read-string "" (if YaTeX-emacs-19 (cons defx 3) defx))
1834 x (if (string< "x=" r) r)
1835 r (read-string "" (if YaTeX-emacs-19 (cons defy 3) defy))
1836 y (if (string< "y=" r) r)
1837 something (or x y))
1838 (format "%s%s%s%s%s"
1839 (if something "[" "")
1840 (if x x "")
1841 (if (and x y) "," "")
1842 (if y y "")
1843 (if something "]" ""))))))
1845 (defun YaTeX::rotatebox (argp)
1846 "Argument add-in for \\rotatebox"
1847 (cond
1848 ((= argp 1)
1849 (read-string (if YaTeX-japan "回転角(度; 左回り): "
1850 "Angle in degree(unclockwise): ")))
1851 ((= argp 2)
1852 (read-string (if YaTeX-japan "テキスト: " "Text: ")))))
1854 (defun YaTeX:includegraphics ()
1855 "Add-in for \\includegraphics's option"
1856 (let (width height (scale "") angle str)
1857 (setq width (read-string "Width: ")
1858 height (read-string "Height: "))
1859 (or (string< width "") (string< "" height)
1860 (setq scale (read-string "Scale: ")))
1861 (setq angle (read-string "Angle(0-359): "))
1862 (setq str
1863 (mapconcat
1864 'concat
1865 (delq nil
1866 (mapcar '(lambda (s)
1867 (and (stringp (symbol-value s))
1868 (string< "" (symbol-value s))
1869 (format "%s=%s" s (symbol-value s))))
1870 '(width height scale angle)))
1871 ","))
1872 (if (string= "" str) ""
1873 (concat "[" str "]"))))
1875 (defun YaTeX::includegraphics (argp)
1876 "Add-in for \\includegraphics"
1877 (YaTeX::include argp "Image File: "))
1879 (defun YaTeX::verbfile (argp)
1880 "Add-in for \\verbfile"
1881 (YaTeX::include argp "Virbatim File: "))
1883 (defun YaTeX:caption ()
1884 (setq YaTeX-section-name "label")
1885 nil)
1888 (defvar YaTeX::usepackage-alist-default
1889 '(("version") ("plext") ("url") ("fancybox") ("pifont") ("longtable")
1890 ("ascmac") ("bm") ("graphics") ("graphicx") ("alltt") ("misc") ("eclbkbox")
1891 ("amsmath") ("amssymb") ("xymtex") ("chemist")
1892 ("a4j") ("array") ("epsf") ("color") ("epsfig") ("floatfig")
1893 ("landscape") ("path") ("supertabular") ("twocolumn")
1894 ("latexsym") ("times") ("makeidx"))
1895 "Default completion table for arguments of \\usepackage")
1897 (defvar YaTeX::usepackage-alist-private nil
1898 "*Private completion list of the argument for usepackage")
1900 (defvar YaTeX::usepackage-alist-local nil
1901 "Directory local completion list of the argument for usepackage")
1903 (defun YaTeX::usepackage (&optional argp)
1904 (cond
1905 ((equal argp 1)
1906 (setq YaTeX-env-name "document")
1907 (let ((minibuffer-local-completion-map YaTeX-minibuffer-completion-map)
1908 (delim ","))
1909 (YaTeX-cplread-with-learning
1910 (if YaTeX-japan "Use package(カンマで区切ってOK): "
1911 "Use package(delimitable by comma): ")
1912 'YaTeX::usepackage-alist-default
1913 'YaTeX::usepackage-alist-private
1914 'YaTeX::usepackage-alist-local)))))
1916 (defun YaTeX::mask (argp)
1917 (cond
1918 ((equal argp 1)
1919 (read-string "String: "))
1920 ((equal argp 2)
1921 (let (c)
1922 (while (not (memq c '(?A ?B ?C ?D ?E ?F ?G ?H ?I ?J ?K)))
1923 (message "Mask type(A..K): ")
1924 (setq c (upcase (read-char))))
1925 (format "%c" c)))))
1927 (defun YaTeX::maskbox (argp)
1928 (cond
1929 ((equal argp 1)
1930 (read-string "Width: "))
1931 ((equal argp 2)
1932 (read-string "Height: "))
1933 ((equal argp 3)
1934 (let (c)
1935 (while (not (memq c '(?A ?B ?C ?D ?E ?F ?G ?H ?I ?J ?K)))
1936 (message "Mask type(A..K): ")
1937 (setq c (upcase (read-char))))
1938 (format "%c" c)))
1939 ((equal argp 4)
1940 (YaTeX:read-oneof "lcr" 'quick))
1941 ((equal argp 5)
1942 (read-string "String: "))))
1944 (defun YaTeX::textcircled (argp)
1945 (cond
1946 ((equal argp 1)
1947 (let ((char (read-string "Circled char: "))
1948 (left "") (right "") c)
1949 (setq c (read-char
1950 "Enclose also with (s)mall (t)iny s(C)riptsize (N)one:"))
1951 (cond
1952 ((memq c '(?s ?S)) (setq left "{\\small " right "}"))
1953 ((memq c '(?t ?T)) (setq left "{\\tiny " right "}"))
1954 ((memq c '(?c ?C)) (setq left "{\\scriptsize " right "}")))
1955 (format "%s%s%s" left char right)))))
1957 ;;; -------------------- math-mode stuff --------------------
1958 (defun YaTeX::tilde (&optional pos)
1959 "For accent macros in mathmode"
1960 (cond
1961 ((equal pos 1)
1962 (message "Put accent on variable: ")
1963 (let ((v (char-to-string (read-char))) (case-fold-search nil))
1964 (message "")
1965 (cond
1966 ((string-match "i\\|j" v)
1967 (concat "\\" v "math"))
1968 ((string-match "[\r\n\t ]" v)
1969 "")
1970 (t v))))
1971 (nil "")))
1973 (fset 'YaTeX::hat 'YaTeX::tilde)
1974 (fset 'YaTeX::check 'YaTeX::tilde)
1975 (fset 'YaTeX::bar 'YaTeX::tilde)
1976 (fset 'YaTeX::dot 'YaTeX::tilde)
1977 (fset 'YaTeX::ddot 'YaTeX::tilde)
1978 (fset 'YaTeX::vec 'YaTeX::tilde)
1980 (defun YaTeX::widetilde (&optional pos)
1981 "For multichar accent macros in mathmode"
1982 (cond
1983 ((equal pos 1)
1984 (let ((m "Put over chars[%s ]: ") v v2)
1985 (message m " ")
1986 (setq v (char-to-string (read-char)))
1987 (message "")
1988 (if (string-match "[\r\n\t ]" v)
1989 ""
1990 (message m v)
1991 (setq v2 (char-to-string (read-char)))
1992 (message "")
1993 (if (string-match "[\r\n\t ]" v2)
1995 (concat v v2)))))
1996 (nil "")))
1998 (fset 'YaTeX::widehat 'YaTeX::widetilde)
1999 (fset 'YaTeX::overline 'YaTeX::widetilde)
2000 (fset 'YaTeX::overrightarrow 'YaTeX::widetilde)
2003 ; for \frac{}{} region
2004 (defun YaTeX::frac-region (beg end)
2005 (if (catch 'done
2006 (while (re-search-forward "\\s *\\(\\\\over\\|/\\)\\s *" end t)
2007 (goto-char (match-beginning 0))
2008 (if (y-or-n-p
2009 (format "Replace this `%s' with `}{'" (YaTeX-match-string 0)))
2010 (throw 'done t))
2011 (goto-char (match-end 0))))
2012 (let (p (b0 (match-beginning 0)) e0)
2013 (replace-match "}{")
2014 (setq e0 (point))
2015 (save-restriction
2016 (narrow-to-region beg end)
2017 (goto-char e0)
2018 (skip-chars-forward " \t")
2019 (setq p (point))
2020 (YaTeX-goto-corresponding-paren)
2021 (forward-char 1)
2022 (skip-chars-forward " \t\r\n")
2023 (if (= end (1+ (point)))
2024 (progn
2025 (goto-char p)
2026 (if (looking-at "\\\\") (forward-char 1))
2027 (YaTeX-kill-paren nil)))
2028 (goto-char beg)
2029 (skip-chars-forward " \t")
2030 (setq p (point))
2031 (YaTeX-goto-corresponding-paren)
2032 (forward-char 1)
2033 (skip-chars-forward " \t\r\n")
2034 (if (>= (point) b0)
2035 (progn
2036 (goto-char p)
2037 (if (looking-at "\\\\") (forward-char 1))
2038 (YaTeX-kill-paren nil))))))
2039 (message ""))
2041 (defun YaTeX::DeclareMathOperator (argp)
2042 (cond
2043 ((equal argp 1)
2044 (read-string "Operator: " "\\"))))
2046 ;;;
2047 ;; Add-in functions for large-type command.
2048 ;;;
2049 (defun YaTeX:em ()
2050 (cond
2051 ((eq YaTeX-current-completion-type 'large) "\\/")
2052 (t nil)))
2053 (fset 'YaTeX:it 'YaTeX:em)
2055 ;;; -------------------- End of yatexadd --------------------
2056 (provide 'yatexadd)
2057 ; Local variables:
2058 ; fill-prefix: ";;; "
2059 ; paragraph-start: "^$\\| \\|;;;$"
2060 ; paragraph-separate: "^$\\| \\|;;;$"
2061 ; coding: sjis
2062 ; End: