yatex

view yatexgen.el @ 60:9e08ed569d80

yahtml: change keystroke of calling browser to [prefix] t p yahtml: don't count <a>tag contents as column in <pre> yahtml: support [prefix] c against src="", align="". and many many more
author yuuji
date Fri, 24 Jan 1997 09:04:06 +0000
parents 5d94deabb9f9
children 44e3a5e1e883
line source
1 ;;; -*- Emacs-Lisp -*-
2 ;;; YaTeX add-in function generator.
3 ;;; yatexgen.el rev.5
4 ;;; (c )1991-1995 by HIROSE Yuuji.[yuuji@ae.keio.ac.jp]
5 ;;; Last modified Thu Feb 15 01:44:24 1996 on nsr
6 ;;; $Id$
8 (require 'yatex)
9 (provide 'yatexgen)
11 (defmacro YaTeX-setq (var japanese english)
12 (list 'setq var
13 (if YaTeX-japan japanese english))
14 )
16 (put 'YaTeX-setq 'lisp-indent-hook 1)
18 (YaTeX-setq YaTeX-generate-initial-message
19 " 自動生成モードへようこそ!!
21 初めてやる人はこのバッファの例にしたがって指示通りにやって練習してね。
22 本番の時もこのバッファに出るメッセージを *よく読んで* 操作しないとう
23 まく関数が作れないよ!!
25 ではリターンキーを押して下さい。"
26 " Welcome to auto-generation mode!!
28 If this is your first trial, exercise this according to example and
29 following my messages. Then, at making actual function, operate
30 reading my messages *carefully*, or you'll fail to generate appropriate
31 function.
33 Hit return key!"
34 )
36 (YaTeX-setq YaTeX-generate-start-message
37 "さぁはじめるよ.\n1.登録したい補完をやってみて.
38 たとえば section 型補完の \\documentstyle だったら \\documentstyle{}
39 だけをいれてみてね. ちゃんと『〜型補完』を使わないとダメよ!。
40 で、おわったらりたーん!!"
41 "Let's begin completion for which you want to make add-in function.
42 If you want to make add-in function for \\documentstyle input only
43 `\\documentstyle{}' *with* completion of yatex-mode.
44 If you finish this, please press RET."
45 )
47 (YaTeX-setq YaTeX-generate-abort-message
48 "やめた、やめた〜いめんどくせ〜"
49 "Aborted."
50 )
52 (YaTeX-setq YaTeX-generate-same-message
53 "それじゃ、なにも変わってねぇだろーが! やめた。"
54 "I found no difference between them. So I'm quitting."
55 )
57 (YaTeX-setq YaTeX-generate-invalid-message
58 "それは、ちと無理というものじゃ."
59 "It's impossible."
60 )
62 (YaTeX-setq YaTeX-generate-idontknow-message
63 "う〜ん、難しくてよくわからないなぁ。ばかでごめんねェ〜"
64 "Sorry I can't tell your adding method."
65 )
67 (YaTeX-setq YaTeX-generate-confirm-message
68 "ということは、付け足したい部分はこれでいいのね"
69 "Is it additional string of add-in function?"
70 )
72 (YaTeX-setq YaTeX-generate-output-message
73 "2.じゃ、それにくっつけたいものを *カーソルの位置に* 足してみて.
74 さっきの \\documentstyle{} の例だと \\documentstyle[12pt]{} とかにするの。
75 しつこいようだけど、今の位置からカーソル動かしちゃダメよ!!
76 で、またおわったらりたーん!!"
77 "2.Then input additional string *at CURSOR POSITION*
78 According to last example \\documentstyle{},
79 modify it \\documentstyle[12pt]{}. RET to finish."
80 )
82 (YaTeX-setq YaTeX-generate-put-arg-message
83 "3.このうち、キーボードから読み込んで欲しい文字列を順に入れて。
84 さっきの \\documentstyle[12pt]{} だったら、付加する文字は[12pt]だけど
85 手で入れたいのは 12pt の部分だけですね。
86 で、全部入れ終ったら、りたーんだけうってね!!"
87 "3.In this string, extract string which you want to input from key
88 board with quiry afterwards. For example, though additional string is
89 \\documentstyle[12pt]{}, but you want enter only `12pt' by hand.
90 RET to finish!"
91 )
93 (YaTeX-setq YaTeX-generate-read-prompt-message
94 "4.では、あとでこれらの文字列を読み込む時に、どういうプロンプトを
95 出したいですか? 順に入れて下さい。面倒なら単にリターンを打ってね。
96 さっきの 12pt の部分だったら、『サイズは』とかがおすすめ。"
97 "4.When you use this add-in function afterwards, what message
98 do you like to be prompted with to enter these values. In last
99 example `12pt', typical prompt string may be `Size?: '."
100 )
102 (YaTeX-setq YaTeX-generate-done-message
103 "よし! これが、君の作りたかった関数だ。~/.emacs にでも入れてせいぜい
104 楽してくれ。このバッファ(*ご案内*)を yatex-mode にしておくから
105 できた関数が本当にお望みの動作をするか確かめてみるといいかもね。
106 ところで、この関数こんなに簡単だろう? そろそろ自分で書いたらどう?
107 "
108 "OK! This is the definition of function you want to make! Add
109 this description to your ~/.emacs or so. Use this buffer(*Guide*)
110 for testing of this function please.
111 But you can see this function quite easy, can't you? You had better
112 write your most favorite add-in function yourself!
113 "
114 )
116 (YaTeX-setq YaTeX-generate-nomatch-message
117 "こらこら、そんな文字列どこにもねーぞ!!"
118 "No such string in additional string."
119 )
120 (YaTeX-setq YaTeX-generate-buffer
121 "*付加関数生成バッファ*"
122 "*Generate-add-in-function*"
123 )
125 (YaTeX-setq YaTeX-generate-message-buffer
126 "*ご案内*"
127 "*Guide*"
128 )
130 (YaTeX-setq YaTeX-generate-bug-message
131 "ごめ〜ん!! ちょっと、このアドイン関数つくるの失敗しちゃったみたい!!
132 作者まで連絡してくださ〜〜〜い!"
133 "Sorry I failed to make add-in function for you...
134 Send bug report to me."
135 )
137 (YaTeX-setq YaTeX-generate-narrow-message
138 "画面がせますぎるような気がします。"
139 "Too narrow screen height."
140 )
142 (defvar YaTeX-generate-message-height
143 10 "Window height of YaTeX-generate-message-buffer")
145 ;; Do you need learning for generated function?
146 ;; If you need, please tell me (yuuji@ae.keio.ac.jp)
147 ;;(defvar YaTeX-generate-variables-for-learning nil)
148 ;;(defvar YaTeX-generate-current-completion-table nil)
150 ;;;
151 ;Generate mode.
152 ;;;
153 (defun YaTeX-generate ()
154 "Genarate YaTeX add-in function with enquiry."
155 (interactive)
156 (if (< (screen-height) (+ YaTeX-generate-message-height 10))
157 (error YaTeX-generate-narrow-message))
158 (put 'YaTeX-generate 'disabled t)
159 (save-window-excursion
160 (unwind-protect
161 (let (input output (i 0) (beg 0) end add-in map map1 si str slist
162 (from (make-marker)) (to (make-marker)))
163 (delete-other-windows)
164 (switch-to-buffer YaTeX-generate-message-buffer)
165 (yatex-mode)
166 (erase-buffer)
167 (insert YaTeX-generate-initial-message)
168 (read-string
169 (if YaTeX-japan "リターンキーを押して下さい." "Press RETURN."))
170 (erase-buffer)
171 (insert YaTeX-generate-start-message)
172 (pop-to-buffer (get-buffer-create YaTeX-generate-buffer))
173 (enlarge-window (- (window-height) YaTeX-generate-message-height 1))
174 (erase-buffer)
175 (yatex-mode)
176 (use-local-map (setq map (copy-keymap YaTeX-mode-map)))
177 (define-key (current-local-map) "\n" 'exit-recursive-edit)
178 (define-key (current-local-map) "\r" 'exit-recursive-edit)
179 (define-key (current-local-map) "\C-g" 'abort-recursive-edit)
180 (setq map1 (copy-keymap map))
181 (YaTeX-suppress-sparse-keymap map)
182 ;;First get input form.
183 (recursive-edit)
184 (setq input (buffer-string)
185 end (1- (length input)))
186 (if (string= "" input) (error YaTeX-generate-abort-message))
187 (YaTeX-generate-move-to-add-in-position)
188 (set-marker from (1- (point))) ;;Can't write before `from'
189 (set-marker to (1+ (point))) ;;Can't write after `to'
190 ;;Second get output form.
191 (setq beg (1- (point)));;Cheat begin point!
192 (YaTeX-generate-display-message YaTeX-generate-output-message)
193 (use-local-map map1)
194 (fset 'si (symbol-function 'self-insert-command))
195 (defun self-insert-command (arg)
196 (interactive "p")
197 (if (or (not (equal (buffer-name) YaTeX-generate-buffer))
198 (and (> (point) (marker-position from))
199 (< (point) (marker-position to))))
200 (insert (this-command-keys)) (ding)))
201 (unwind-protect
202 (recursive-edit)
203 (fset 'self-insert-command (symbol-function 'si)))
204 (setq output (buffer-string))
205 (cond ((string= "" output) (error YaTeX-generate-abort-message))
206 ((string= input output) (error YaTeX-generate-same-message))
207 ((< (length output) (length input))
208 (error YaTeX-generate-invalid-message)))
209 ;;(while (and (< beg end) (= (aref input beg) (aref output i)))
210 ;; (setq beg (1+ beg) i (1+ i))) ;;for universal use.
211 (setq i (1- (length output)))
212 (while (and (>= end beg) (= (aref output i) (aref input end)))
213 (setq end (1- end) i (1- i)))
214 (setq add-in (substring output beg
215 (if (= i (1- (length output))) nil (1+ i))))
216 (erase-buffer)
217 (insert add-in)
218 (if (not (y-or-n-p YaTeX-generate-confirm-message))
219 (error YaTeX-generate-idontknow-message))
220 ;;Extract arguments.
221 (YaTeX-generate-display-message YaTeX-generate-put-arg-message)
222 (setq i 1)
223 (while (not (string=
224 "" (setq str (read-string (format "Arg %d: " i)))))
225 (if (not (string-match (regexp-quote str) add-in))
226 (progn
227 (ding)
228 (YaTeX-generate-display-message
229 YaTeX-generate-nomatch-message -1))
230 (setq slist (append slist (list (list str))) i (1+ i)))
231 );input all of arguments.
232 ;;Compare with output string.
233 (set-buffer YaTeX-generate-buffer) ;;for safety
234 (emacs-lisp-mode)
235 (if (> i 1)
236 (YaTeX-generate-parse-add-in slist add-in)
237 (erase-buffer)
238 (insert "(defun " (YaTeX-generate-function-name) " ()\n")
239 (insert "\"" (YaTeX-generate-lisp-quote add-in) "\")\n")
240 (indent-region (point-min) (point-max) nil)
241 (message (if YaTeX-japan
242 "このくらいの関数手で書け!!"
243 "You don't need me to make such easy function.")))
244 );let
245 (put 'YaTeX-generate 'disabled nil)
246 (put 'YaTeX-addin 'disabled nil)
247 ))
248 (YaTeX-generate-display-message YaTeX-generate-done-message)
249 (switch-to-buffer YaTeX-generate-buffer)
250 (condition-case error
251 (eval-current-buffer)
252 (error (insert YaTeX-generate-bug-message)))
253 (pop-to-buffer YaTeX-generate-message-buffer)
254 )
256 (defun YaTeX-generate-parse-add-in (args add-in)
257 "Parse add-in string and extract argument for it.
258 Variable add-in is referred in parent function."
259 (let ((i 1) j (case-fold-search nil) ;i holds argument number
260 (prompt (make-vector (length args) ""))
261 (used (make-vector (length add-in) nil))
262 func-name (string ""))
263 ;;Phase 1. extract argument from add-in string.
264 (mapcar
265 '(lambda (arg)
266 (let ((index 0) (match 0) beg end (carg (car arg)))
267 (YaTeX-generate-display-message
268 YaTeX-generate-read-prompt-message)
269 (aset prompt (1- i)
270 (read-string
271 (format
272 (if YaTeX-japan "%d番目(%s)を読む時?: "
273 "When reading argument #%d(%s)?: ") i (car arg))))
274 (while (string-match (regexp-quote carg) (substring add-in index))
275 (setq beg (+ index (match-beginning 0))
276 end (+ index (match-end 0)))
277 (if (aref used beg) nil
278 (setq match (1+ match))
279 (cond
280 ((= match 1)
281 ;;(setq arg (append arg (list (list beg end))))
282 (YaTeX-generate-register-match))
283 ((YaTeX-generate-ask-match-position)
284 (YaTeX-generate-register-match))))
285 (setq index end))
286 (setq i (1+ i))))
287 args)
288 ;;Phase 2. Generate function!!
289 (setq i 0)
290 (setq func-name (YaTeX-generate-function-name))
291 (while (< i (length add-in))
292 (setq beg i j (aref used i))
293 (while (and (< i (length add-in)) (equal j (aref used i)))
294 (setq i (1+ i)))
295 (if j ;If it is argument.
296 (setq string (concat string (format " arg%d" j)))
297 (setq string
298 (concat string " \""
299 (YaTeX-generate-quote-quote (substring add-in beg i))
300 "\""))
301 ))
302 (erase-buffer)
303 (setq i 1)
304 (insert
305 "(defun " func-name " ()\n"
306 " (let (")
307 (mapcar
308 '(lambda (arg)
309 (insert (format "(arg%d (read-string \"%s: \"))\n"
310 i (aref prompt (1- i))))
311 (setq i (1+ i)))
312 args)
313 (delete-region (point) (progn (forward-line -1) (end-of-line) (point)))
314 (insert ")\n(concat " (YaTeX-generate-lisp-quote string)
315 ")))\n")
316 (indent-region (point-min) (point) nil)
317 used)
318 )
320 (defun YaTeX-generate-ask-match-position ()
321 "Ask user whether match-position is in his expectation,
322 Referencing variables in parent function YaTeX-generate-parse-add-in."
323 (pop-to-buffer YaTeX-generate-message-buffer)
324 (goto-char (point-max))
325 (insert "\n\n"
326 (format (if YaTeX-japan "%d 番目の引数 %s って"
327 "Is argument #%d's value `%s' also corresponding to")
328 i carg) "\n" add-in "\n")
329 (indent-to-column beg)
330 (let ((c beg))
331 (while (< c end) (insert "^") (setq c (1+ c))))
332 (insert "\n" (if YaTeX-japan "ここにも対応してるの?"
333 "this underlined part too?"))
334 (other-window -1)
335 (y-or-n-p (if YaTeX-japan "下線部はあってますか" "Is underline right"))
336 )
338 (defun YaTeX-generate-register-match ()
339 (nconc arg (list (list beg end)))
340 (let ((x beg))
341 (while (< x end) (aset used x i)(setq x (1+ x))))
342 )
344 (defun YaTeX-generate-display-message (mes &optional bottom)
345 "Display message to generation buffer."
346 (pop-to-buffer YaTeX-generate-message-buffer)
347 (goto-char (point-max))
348 (insert "\n\n")
349 (if bottom (recenter (1- bottom)) (recenter 0))
350 (insert mes)
351 (other-window -1)
352 )
354 (defun YaTeX-generate-move-to-add-in-position ()
355 "Move cursor where add-in function should insert string."
356 (cond
357 ((eq YaTeX-current-completion-type 'begin)
358 (goto-char (point-min))
359 (skip-chars-forward "^{")
360 (setq env-name
361 (buffer-substring (1+ (point))
362 (progn (skip-chars-forward "^}") (point))))
363 (forward-char 1))
364 ((eq YaTeX-current-completion-type 'section)
365 (goto-char (point-min))
366 (skip-chars-forward "^{"))
367 ((eq YaTeX-current-completion-type 'maketitle)
368 (goto-char (point-max))
369 (if (= (preceding-char) ? )
370 (forward-char -1)))
371 )
372 )
374 (defun YaTeX-generate-function-name ()
375 (concat
376 "YaTeX:"
377 (cond
378 ((eq YaTeX-current-completion-type 'begin) env-name)
379 ((eq YaTeX-current-completion-type 'section) section-name)
380 ((eq YaTeX-current-completion-type 'maketitle) single-command)))
381 )
383 (defun YaTeX-generate-lisp-quote (str)
384 (let ((len (length str))(i 0) (quote ""))
385 (while (< i len)
386 (if (= (aref str i) ?\\)
387 (setq quote (concat quote "\\")))
388 (if (= (aref str i) 127)
389 (setq quote (concat quote "\""))
390 (setq quote (concat quote (substring str i (1+ i)))))
391 (setq i (1+ i)))
392 quote)
393 )
395 (defun YaTeX-generate-quote-quote (str)
396 (let ((len (length str))(i 0) (quote ""))
397 (while (< i len)
398 (if (= (aref str i) ?\")
399 (setq quote (concat quote (char-to-string 127))))
400 (setq quote (concat quote (substring str i (1+ i))))
401 (setq i (1+ i)))
402 quote)
403 )
405 (defun YaTeX-suppress-sparse-keymap (map)
406 (let ((i ? ))
407 (while (< i 127)
408 (define-key map (char-to-string i) 'undefined)
409 (setq i (1+ i))))
410 )
412 ;;;
413 ;; Auto-generate Function for Lispers.
414 ;;;
415 (defun YaTeX-generate-read-completion-type (nth)
416 (message
417 "Read type(%d): (S)tring (C)omplete (F)ile ([)option (P)osition co(O)rd. (q)uit" nth)
418 (let ((c (read-char)))
419 (cond
420 ((= c ?s) 'string)
421 ((= c ?c) 'completion)
422 ((= c ?f) 'file)
423 ((= c ?\[) 'option)
424 ((= c ?p) 'oneof)
425 ((= c ?o) 'coord)
426 ;;((= c ?m) 'macro)
427 (t 'quit)))
428 )
429 (defun YaTeX-generate-read-completion-table ()
430 (let ((i 1) cand (cands "(") (cb (current-buffer))
431 (buf (get-buffer-create " *Candidates*")))
432 (save-window-excursion
433 (save-excursion
434 (YaTeX-showup-buffer buf nil)
435 (set-buffer buf)
436 (erase-buffer)
437 (while (string<
438 ""
439 (setq cand (read-string (format "Item[%d](RET to exit): " i))))
440 (setq cands (concat cands (format "(\"%s\")\n" cand))
441 i (1+ i))
442 (insert cand "\n"))
443 (kill-buffer buf)))
444 ;;(set-buffer cb)
445 (setq YaTeX-generate-current-completion-table (concat cands ")")))
446 )
447 (defun YaTeX-generate-corresponding-paren (left)
448 (cond
449 ((equal left "{") "}")
450 ((equal left "[") "]")
451 ((equal left "(") ")")
452 ((equal left "<") ">")
453 ((equal left "\\begin{") "}")
454 (t left))
455 )
456 (defun YaTeX-generate-create-read-string (&optional nth)
457 (concat
458 "(read-string \""
459 (read-string (if nth (format "Prompt for argument#%d: " nth) "Prompt: "))
460 ": \"\n"
461 "\"" (read-string "Default: ") "\""
462 ")\n")
463 )
464 (defun YaTeX-generate-create-completing-read (&optional nth)
465 (prog1
466 (concat
467 "(completing-read \""
468 (read-string
469 (if nth (format "Prompt for argument#%d: " nth) "Prompt: "))
470 ": \"\n"
471 (format "'%s\n" (YaTeX-generate-read-completion-table))
472 "nil "
473 (format "%s)" (y-or-n-p "Require match? ")))
474 (if nil ;;;(y-or-n-p "Do you need learning for this completion?")
475 (setq YaTeX-generate-variables-for-learning
476 (cons
477 (cons (format "YaTeX-%s-%d" command (or nth 0))
478 YaTeX-generate-current-completion-table)
479 YaTeX-generate-variables-for-learning))))
480 )
481 (defun YaTeX-generate-create-read-file-name (&optional nth)
482 (concat
483 "(read-file-name \""
484 (read-string (if nth (format "Prompt for argument#%d: " nth) "Prompt: "))
485 ": \" "" \"\" t \"\")\n")
486 )
487 (defun YaTeX-generate-create-read-oneof (&optional nth readpos)
488 (concat
489 (if readpos
490 "(YaTeX:read-position \""
491 "(YaTeX:read-oneof \"")
492 (read-string "Acceptable characters: " "lcr") "\")\n")
493 )
494 (defun YaTeX-generate-option-type (command)
495 (let ((func (format "YaTeX:%s" command)) leftp
496 (buf (get-buffer-create YaTeX-generate-buffer)) type (n 1))
497 (set-buffer buf)
498 (erase-buffer)
499 (insert "(defun " func " ()\n (concat\n")
500 (catch 'done
501 (while t
502 (setq type (YaTeX-generate-read-completion-type n))
503 (insert
504 (cond
505 ;;Read string
506 ((eq type 'string)
507 (concat "\"" (setq leftp (read-string "Left parenthesis: " "("))
508 "\"\n"
509 (YaTeX-generate-create-read-string)
510 "\"" (YaTeX-generate-corresponding-paren leftp) "\"")
511 )
512 ;;Completing-read
513 ((eq type 'completion)
514 (concat "\"" (setq leftp (read-string "Left parenthesis: " "{"))
515 "\"\n"
516 (YaTeX-generate-create-completing-read)
517 "\"" (YaTeX-generate-corresponding-paren leftp) "\"")
518 )
519 ((eq type 'file)
520 (concat "\"" (setq leftp (read-string "Left parenthesis: " "("))
521 "\"\n"
522 (YaTeX-generate-create-read-file-name)
523 "\"" (YaTeX-generate-corresponding-paren leftp) "\"")
524 )
525 ((eq type 'oneof)
526 (YaTeX-generate-create-read-oneof nil t)
527 )
528 ((eq type 'option)
529 (concat "(let ((op (read-string \""
530 (read-string "Prompt: ")
531 ": \")))\n"
532 "(if (string< \"\" op)\n"
533 " (concat \"[\" op \"]\")\n"
534 " \"\"))\n")
535 )
536 ((eq type 'coord)
537 (concat "(YaTeX:read-coordinates \""
538 (read-string "Prompt for coordinates: ")
539 ": \")\n")
540 )
541 ((eq type 'macro)
542 (error "not yet supported")
543 )
544 (t (throw 'done t))))
545 (setq n (1+ n))))
546 (insert "))\n") ;close defun
547 (goto-char (point-min))
548 (while (not (eobp)) (lisp-indent-line) (forward-line 1))
549 (eval-current-buffer)
550 buf)
551 )
552 (defun YaTeX-generate-argument-type (command argc)
553 "Create an argument-type add-in function."
554 (interactive)
555 (let ((func (format "YaTeX::%s" command)) (argp 1)
556 (cb (current-buffer))
557 (buf (get-buffer-create YaTeX-generate-buffer)))
558 (set-buffer buf)
559 (erase-buffer)
560 (insert "(defun " func " (&optional argp)\n(cond\n")
561 (while (<= argp argc)
562 (insert (format "((equal argp %d)\n" argp))
563 (setq type (YaTeX-generate-read-completion-type argp))
564 (insert
565 (cond
566 ((eq type 'string)
567 (concat (YaTeX-generate-create-read-string argp)))
568 ((eq type 'completion)
569 (concat (YaTeX-generate-create-completing-read argp)))
570 ((eq type 'oneof)
571 (YaTeX-generate-create-read-oneof))
572 ((eq type 'file)
573 (concat (YaTeX-generate-create-read-file-name argp)))
574 (t ""))
575 ")\n")
576 (setq argp (1+ argp)))
577 (insert "))\n")
578 (goto-char (point-min))
579 (while (not (eobp)) (lisp-indent-line) (forward-line 1))
580 (eval-current-buffer)
581 (set-buffer cb)
582 (YaTeX-update-table
583 (if (> argc 1) (list command argc) (list command))
584 'section-table 'user-section-table 'tmp-section-table)
585 buf)
586 )
587 (defun YaTeX-generate-simple (&optional command)
588 "Simple but requiring some elisp knowledge add-in generator."
589 (interactive)
590 (setq YaTeX-generate-variables-for-learning nil)
591 (or command
592 (setq command
593 (completing-read
594 (format "Making add-in function for (default %s): " section-name)
595 (append
596 section-table user-section-table tmp-section-table
597 env-table user-env-table tmp-env-table
598 singlecmd-table user-singlecmd-table tmp-singlecmd-table)
599 nil nil)
600 command (if (string= "" command) section-name command)))
601 (message
602 (cond
603 (YaTeX-japan "(o)追加型? (a)引数型? (yatexadd.docを参照のこと) :")
604 (t "(O)ption? (A)rgument?")))
605 (YaTeX-showup-buffer
606 (if (= (read-char) ?o)
607 (YaTeX-generate-option-type command)
608 (YaTeX-generate-argument-type
609 command
610 (string-to-int (read-string "How many arguments?: ")))) nil)
611 )