24
|
1 ;;; tex-buf.el - External commands for AUC TeX.
|
|
2 ;;
|
|
3 ;; Maintainer: Per Abrahamsen <auc-tex@sunsite.auc.dk>
|
26
|
4 ;; Version: 9.7k
|
24
|
5
|
|
6 ;; Copyright (C) 1991 Kresten Krab Thorup
|
|
7 ;; Copyright (C) 1993, 1996 Per Abrahamsen
|
|
8 ;;
|
|
9 ;; This program is free software; you can redistribute it and/or modify
|
|
10 ;; it under the terms of the GNU General Public License as published by
|
|
11 ;; the Free Software Foundation; either version 1, or (at your option)
|
|
12 ;; any later version.
|
|
13 ;;
|
|
14 ;; This program is distributed in the hope that it will be useful,
|
|
15 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
16 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
17 ;; GNU General Public License for more details.
|
|
18 ;;
|
|
19 ;; You should have received a copy of the GNU General Public License
|
|
20 ;; along with this program; if not, write to the Free Software
|
|
21 ;; Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
|
22
|
|
23 ;;; Code:
|
|
24
|
|
25 (defvar no-doc
|
|
26 "This function is part of AUC TeX, but has not yet been loaded.
|
|
27 Full documentation will be available after autoloading the function."
|
|
28 "Documentation for autoload functions.")
|
|
29
|
|
30 ;;; Customization:
|
|
31
|
|
32 (defvar TeX-process-asynchronous (not (eq system-type 'ms-dos))
|
|
33 "*Use asynchronous processes.")
|
|
34
|
|
35 (defvar TeX-shell
|
|
36 (if (memq system-type '(ms-dos emx windows-nt))
|
|
37 shell-file-name
|
|
38 "/bin/sh")
|
|
39 "Name of shell used to parse TeX commands.")
|
|
40
|
|
41 (defvar TeX-shell-command-option
|
|
42 (cond ((memq system-type '(ms-dos emx windows-nt) )
|
|
43 (cond ((boundp 'shell-command-option)
|
|
44 shell-command-option)
|
|
45 ((boundp 'shell-command-switch)
|
|
46 shell-command-switch)
|
|
47 (t
|
|
48 "/c")))
|
|
49 (t ;Unix & EMX (Emacs 19 port to OS/2)
|
|
50 "-c"))
|
|
51 "Shell argument indicating that next argument is the command.")
|
|
52
|
|
53 ;;; Interactive Commands
|
|
54 ;;
|
|
55 ;; The general idea is, that there is one process and process buffer
|
|
56 ;; associated with each master file, and one process and process buffer
|
|
57 ;; for running TeX on a region. Thus, if you have N master files, you
|
|
58 ;; can run N + 1 processes simultaneously.
|
|
59 ;;
|
|
60 ;; Some user commands operates on ``the'' process. The following
|
|
61 ;; algorithm determine what ``the'' process is.
|
|
62 ;;
|
|
63 ;; IF last process started was on a region
|
|
64 ;; THEN ``the'' process is the region process
|
|
65 ;; ELSE ``the'' process is the master file (of the current buffer) process
|
|
66
|
|
67 (defun TeX-save-document (name)
|
|
68 "Save all files belonging to the current document.
|
|
69 Return non-nil if document need to be re-TeX'ed."
|
|
70 (interactive (list (TeX-master-file)))
|
|
71 (if (string-equal name "")
|
|
72 (setq name (TeX-master-file)))
|
|
73
|
|
74 (TeX-check-files (concat name ".dvi")
|
|
75 (cons name (TeX-style-list))
|
|
76 TeX-file-extensions))
|
|
77
|
|
78 (defun TeX-command-master ()
|
|
79 "Run command on the current document."
|
|
80 (interactive)
|
|
81 (TeX-command (TeX-command-query (TeX-master-file)) 'TeX-master-file))
|
|
82
|
|
83 (defvar TeX-command-region-begin nil)
|
|
84 (defvar TeX-command-region-end nil)
|
|
85 ;; Used for marking the last region.
|
|
86
|
|
87 (make-variable-buffer-local 'TeX-command-region-begin)
|
|
88 (make-variable-buffer-local 'TeX-command-region-end)
|
|
89
|
|
90 (defun TeX-command-region (&optional old)
|
|
91 "Run TeX on the current region.
|
|
92
|
|
93 Query the user for a command to run on the temporary file specified by
|
|
94 the variable TeX-region. If the chosen command is so marked in
|
|
95 TeX-command-list, and no argument (or nil) is given to the command,
|
|
96 the region file file be recreated with the current region. If mark is
|
|
97 not active, the new text in the previous used region will be used.
|
|
98
|
|
99 If the master file for the document has a header, it is written to the
|
|
100 temporary file before the region itself. The document's header is all
|
|
101 text before TeX-header-end.
|
|
102
|
|
103 If the master file for the document has a trailer, it is written to
|
|
104 the temporary file before the region itself. The document's trailer is
|
|
105 all text after TeX-trailer-start."
|
|
106 (interactive "P")
|
|
107 (if (and (TeX-mark-active) (not old))
|
|
108 (let ((begin (min (point) (mark)))
|
|
109 (end (max (point) (mark))))
|
|
110 (if TeX-command-region-begin
|
|
111 ()
|
|
112 (setq TeX-command-region-begin (make-marker)
|
|
113 TeX-command-region-end (make-marker)))
|
|
114 (set-marker TeX-command-region-begin begin)
|
|
115 (set-marker TeX-command-region-end end)))
|
|
116 (if (null TeX-command-region-begin)
|
|
117 (error "Mark not set"))
|
|
118 (let ((begin (marker-position TeX-command-region-begin))
|
|
119 (end (marker-position TeX-command-region-end)))
|
|
120 (TeX-region-create (TeX-region-file TeX-default-extension)
|
|
121 (buffer-substring begin end)
|
|
122 (file-name-nondirectory (buffer-file-name))
|
|
123 (count-lines (save-restriction (widen) (point-min))
|
|
124 begin)))
|
|
125 (TeX-command (TeX-command-query (TeX-region-file)) 'TeX-region-file))
|
|
126
|
|
127 (defun TeX-command-buffer ()
|
|
128 "Run TeX on the current buffer.
|
|
129
|
|
130 Query the user for a command to run on the temporary file specified by
|
|
131 the variable TeX-region. The region file file be recreated from the
|
|
132 visible part of the buffer."
|
|
133 (interactive)
|
|
134 (let ((TeX-command-region-begin (point-min-marker))
|
|
135 (TeX-command-region-end (point-max-marker)))
|
|
136 (TeX-command-region t)))
|
|
137
|
|
138 (defun TeX-recenter-output-buffer (line)
|
|
139 "Redisplay buffer of TeX job output so that most recent output can be seen.
|
|
140 The last line of the buffer is displayed on line LINE of the window, or
|
|
141 at bottom if LINE is nil."
|
|
142 (interactive "P")
|
|
143 (let ((buffer (TeX-active-buffer)))
|
|
144 (if buffer
|
|
145 (let ((old-buffer (current-buffer)))
|
|
146 (pop-to-buffer buffer t)
|
|
147 (bury-buffer buffer)
|
|
148 (goto-char (point-max))
|
|
149 (recenter (if line
|
|
150 (prefix-numeric-value line)
|
|
151 (/ (window-height) 2)))
|
|
152 (pop-to-buffer old-buffer))
|
|
153 (message "No process for this document."))))
|
|
154
|
|
155 (defun TeX-kill-job ()
|
|
156 "Kill the currently running TeX job."
|
|
157 (interactive)
|
|
158 (let ((process (TeX-active-process)))
|
|
159 (if process
|
|
160 (kill-process process)
|
|
161 ;; Should test for TeX background process here.
|
|
162 (error "No TeX process to kill"))))
|
|
163
|
|
164 (defun TeX-home-buffer ()
|
|
165 "Go to the buffer where you last issued a TeX command.
|
|
166 If there is no such buffer, or you already are in that buffer, find
|
|
167 the master file."
|
|
168 (interactive)
|
|
169 (if (or (null TeX-command-buffer)
|
|
170 (eq TeX-command-buffer (current-buffer)))
|
|
171 (find-file (TeX-master-file TeX-default-extension))
|
|
172 (switch-to-buffer TeX-command-buffer)))
|
|
173
|
|
174 (defun TeX-next-error (reparse)
|
|
175 "Find the next error in the TeX output buffer.
|
|
176 Prefix by C-u to start from the beginning of the errors."
|
|
177 (interactive "P")
|
|
178 (if (null (TeX-active-buffer))
|
|
179 (error "No TeX output buffer")
|
|
180 (funcall (TeX-process-get-variable (TeX-active-master) 'TeX-parse-function)
|
|
181 reparse)))
|
|
182
|
|
183 (defun TeX-toggle-debug-boxes ()
|
|
184 "Toggle if the debugger should display \"bad boxes\" too."
|
|
185 (interactive)
|
|
186 (cond (TeX-debug-bad-boxes
|
|
187 (setq TeX-debug-bad-boxes nil))
|
|
188 (t
|
|
189 (setq TeX-debug-bad-boxes t)))
|
|
190 (message (concat "TeX-debug-bad-boxes: " (cond (TeX-debug-bad-boxes "on")
|
|
191 (t "off")))))
|
|
192
|
|
193 ;;; Command Query
|
|
194
|
|
195 (defun TeX-command (name file)
|
|
196 "Run command NAME on the file you get by calling FILE.
|
|
197
|
|
198 FILE is a function return a file name. It has one optional argument,
|
|
199 the extension to use on the file.
|
|
200
|
|
201 Use the information in TeX-command-list to determine how to run the
|
|
202 command."
|
|
203 (setq TeX-current-process-region-p (eq file 'TeX-region-file))
|
|
204 (let ((command (TeX-command-expand (nth 1 (assoc name TeX-command-list))
|
|
205 file))
|
|
206 (hook (nth 2 (assoc name TeX-command-list)))
|
|
207 (confirm (nth 3 (assoc name TeX-command-list))))
|
|
208
|
|
209 ;; Verify the expanded command
|
|
210 (if confirm
|
|
211 (setq command
|
|
212 (read-from-minibuffer (concat name " command: ") command)))
|
|
213
|
|
214 ;; Now start the process
|
|
215 (TeX-process-set-variable name 'TeX-command-next TeX-command-Show)
|
|
216 (apply hook name command (apply file nil) nil)))
|
|
217
|
|
218 (defun TeX-command-expand (command file &optional list)
|
|
219 "Expand COMMAND for FILE as described in LIST.
|
|
220 LIST default to TeX-expand-list."
|
|
221 (if (null list)
|
|
222 (setq list TeX-expand-list))
|
|
223 (while list
|
|
224 (let ((case-fold-search nil) ; Do not ignore case.
|
|
225 (string (car (car list))) ;First element
|
|
226 (expansion (car (cdr (car list)))) ;Second element
|
|
227 (arguments (cdr (cdr (car list))))) ;Remaining elements
|
|
228 (while (string-match string command)
|
|
229 (let ((prefix (substring command 0 (match-beginning 0)))
|
|
230 (postfix (substring command (match-end 0))))
|
|
231 (setq command (concat prefix
|
|
232 (cond ((TeX-function-p expansion)
|
|
233 (apply expansion arguments))
|
|
234 ((boundp expansion)
|
|
235 (apply (eval expansion) arguments))
|
|
236 (t
|
|
237 (error "Nonexpansion %s" expansion)))
|
|
238 postfix)))))
|
|
239 (setq list (cdr list)))
|
|
240 command)
|
|
241
|
|
242 (defun TeX-check-files (derived originals extensions)
|
|
243 "Check that DERIVED is newer than any of the ORIGINALS.
|
|
244 Try each original with each member of EXTENSIONS, in all directories
|
|
245 in TeX-check-path."
|
|
246 (let ((found nil)
|
|
247 (regexp (concat "\\`\\("
|
|
248 (mapconcat (function (lambda (dir)
|
|
249 (regexp-quote (expand-file-name dir))))
|
|
250 TeX-check-path "\\|")
|
|
251 "\\).*\\("
|
|
252 (mapconcat 'regexp-quote originals "\\|")
|
|
253 "\\)\\.\\("
|
|
254 (mapconcat 'regexp-quote extensions "\\|")
|
|
255 "\\)\\'"))
|
|
256 (buffers (buffer-list)))
|
|
257 (while buffers
|
|
258 (let* ((buffer (car buffers))
|
|
259 (name (buffer-file-name buffer)))
|
|
260 (setq buffers (cdr buffers))
|
|
261 (if (and name (string-match regexp name))
|
|
262 (progn
|
|
263 (and (buffer-modified-p buffer)
|
|
264 (or (not TeX-save-query)
|
|
265 (y-or-n-p (concat "Save file "
|
|
266 (buffer-file-name buffer)
|
|
267 "? ")))
|
|
268 (save-excursion (set-buffer buffer) (save-buffer)))
|
|
269 (if (file-newer-than-file-p name derived)
|
|
270 (setq found t))))))
|
|
271 found))
|
|
272
|
|
273 (defvar TeX-save-query t
|
|
274 "*If non-nil, ask user for permission to save files before starting TeX.")
|
|
275
|
|
276 (defun TeX-command-query (name)
|
|
277 "Query the user for a what TeX command to use."
|
|
278 (let* ((default (cond ((if (string-equal name TeX-region)
|
|
279 (TeX-check-files (concat name ".dvi")
|
|
280 (list name)
|
|
281 TeX-file-extensions)
|
|
282 (TeX-save-document (TeX-master-file)))
|
|
283 TeX-command-default)
|
|
284 ((and (eq major-mode 'latex-mode)
|
|
285 (TeX-check-files (concat name ".bbl")
|
|
286 (mapcar 'car
|
|
287 (LaTeX-bibliography-list))
|
|
288 BibTeX-file-extensions))
|
|
289 ;; We should check for bst files here as well.
|
|
290 TeX-command-BibTeX)
|
|
291 ((TeX-process-get-variable name
|
|
292 'TeX-command-next
|
|
293 TeX-command-Show))
|
|
294 (TeX-command-Show)))
|
|
295 (completion-ignore-case t)
|
|
296 (answer (or TeX-command-force
|
|
297 (completing-read
|
|
298 (concat "Command: (default " default ") ")
|
|
299 TeX-command-list nil t))))
|
|
300 ;; If the answer "latex" it will not be expanded to "LaTeX"
|
|
301 (setq answer (car-safe (TeX-assoc answer TeX-command-list)))
|
|
302 (if (and answer
|
|
303 (not (string-equal answer "")))
|
|
304 answer
|
|
305 default)))
|
|
306
|
|
307 (defvar TeX-command-next nil
|
|
308 "The default command next time TeX-command is invoked.")
|
|
309
|
|
310 (make-variable-buffer-local 'TeX-command-next)
|
|
311
|
|
312 (defun TeX-printer-query (&optional command element)
|
|
313 "Query the user for a printer name.
|
|
314 COMMAND is the default command to use if the entry for the printer in
|
|
315 TeX-printer-list does not itself have it specified in the ELEMENT'th
|
|
316 entry."
|
|
317 (or command (setq command TeX-print-command))
|
|
318 (or element (setq element 1))
|
|
319 (let ((printer (if TeX-printer-list
|
|
320 (let ((completion-ignore-case t))
|
|
321 (completing-read (concat "Printer: (default "
|
|
322 TeX-printer-default ") ")
|
|
323 TeX-printer-list))
|
|
324 "")))
|
|
325
|
|
326 (setq printer (or (car-safe (TeX-assoc printer TeX-printer-list))
|
|
327 printer))
|
|
328 (if (or (null printer) (string-equal "" printer))
|
|
329 (setq printer TeX-printer-default)
|
|
330 (setq TeX-printer-default printer))
|
|
331
|
|
332 (let ((expansion (let ((entry (assoc printer TeX-printer-list)))
|
|
333 (if (and entry (nth element entry))
|
|
334 (nth element entry)
|
|
335 command))))
|
|
336 (if (string-match "%p" printer)
|
|
337 (error "Don't use %s in printer names" "%p"))
|
|
338 (while (string-match "%p" expansion)
|
|
339 (setq expansion (concat (substring expansion 0 (match-beginning 0))
|
|
340 printer
|
|
341 (substring expansion (match-end 0)))))
|
|
342 expansion)))
|
|
343
|
|
344 (defun TeX-style-check (styles)
|
|
345 "Check STYLES compared to the current style options."
|
|
346
|
|
347 (let ((files (TeX-style-list)))
|
|
348 (while (and styles
|
|
349 (not (TeX-member (car (car styles)) files 'string-match)))
|
|
350 (setq styles (cdr styles))))
|
|
351 (if styles
|
|
352 (nth 1 (car styles))
|
|
353 ""))
|
|
354
|
|
355 ;;; Command Hooks
|
|
356
|
|
357 (defvar TeX-after-start-process-function nil
|
|
358 "Hooks to run after starting an asynchronous process.
|
|
359 Used by Japanese TeX to set the coding system.")
|
|
360
|
|
361 (defvar TeX-show-compilation nil
|
|
362 "*If non-nil, show output of TeX compilation in other window.")
|
|
363
|
|
364 (defun TeX-run-command (name command file)
|
|
365 "Create a process for NAME using COMMAND to process FILE.
|
|
366 Return the new process."
|
|
367 (let ((default TeX-command-default)
|
|
368 (buffer (TeX-process-buffer-name file))
|
|
369 (dir (TeX-master-directory)))
|
|
370 (TeX-process-check file) ; Check that no process is running
|
|
371 (setq TeX-command-buffer (current-buffer))
|
|
372 (get-buffer-create buffer)
|
|
373 (set-buffer buffer)
|
|
374 (erase-buffer)
|
|
375 (if dir (cd dir))
|
|
376 (insert "Running `" name "' on `" file "' with ``" command "''\n")
|
|
377 (setq mode-name name)
|
|
378 (if TeX-show-compilation
|
|
379 (display-buffer buffer)
|
|
380 (message "Type `C-c C-l' to display results of compilation."))
|
|
381 (setq TeX-parse-function 'TeX-parse-command)
|
|
382 (setq TeX-command-default default)
|
|
383 (setq TeX-sentinel-function
|
|
384 (function (lambda (process name)
|
|
385 (message (concat name ": done.")))))
|
|
386 (if TeX-process-asynchronous
|
|
387 (let ((process (start-process name buffer TeX-shell
|
|
388 TeX-shell-command-option command)))
|
|
389 (if TeX-after-start-process-function
|
|
390 (funcall TeX-after-start-process-function process))
|
|
391 (TeX-command-mode-line process)
|
|
392 (set-process-filter process 'TeX-command-filter)
|
|
393 (set-process-sentinel process 'TeX-command-sentinel)
|
|
394 (set-marker (process-mark process) (point-max))
|
|
395 (setq compilation-in-progress (cons process compilation-in-progress))
|
|
396 process)
|
|
397 (setq mode-line-process ": run")
|
|
398 (set-buffer-modified-p (buffer-modified-p))
|
|
399 (sit-for 0) ; redisplay
|
|
400 (call-process TeX-shell nil buffer nil
|
|
401 TeX-shell-command-option command))))
|
|
402
|
|
403 (defun TeX-run-format (name command file)
|
|
404 "Create a process for NAME using COMMAND to format FILE with TeX."
|
|
405 (let ((buffer (TeX-process-buffer-name file))
|
|
406 (process (TeX-run-command name command file)))
|
|
407 ;; Hook to TeX debuger.
|
|
408 (save-excursion
|
|
409 (set-buffer buffer)
|
|
410 (TeX-parse-reset)
|
|
411 (setq TeX-parse-function 'TeX-parse-TeX)
|
|
412 (setq TeX-sentinel-function 'TeX-TeX-sentinel)
|
|
413 (if TeX-process-asynchronous
|
|
414 (progn
|
|
415 ;; Updating the mode line.
|
|
416 (setq TeX-current-page "[0]")
|
|
417 (TeX-format-mode-line process)
|
|
418 (set-process-filter process 'TeX-format-filter)))
|
|
419 process)))
|
|
420
|
|
421 (defun TeX-run-TeX (name command file)
|
|
422 "Create a process for NAME using COMMAND to format FILE with TeX."
|
|
423 (let ((process (TeX-run-format name command file)))
|
|
424 (if TeX-process-asynchronous
|
|
425 process
|
|
426 (TeX-synchronous-sentinel name file process))))
|
|
427
|
|
428 (defun TeX-run-LaTeX (name command file)
|
|
429 "Create a process for NAME using COMMAND to format FILE with TeX."
|
|
430 (let ((process (TeX-run-format name command file)))
|
|
431 (setq TeX-sentinel-function 'TeX-LaTeX-sentinel)
|
|
432 (if TeX-process-asynchronous
|
|
433 process
|
|
434 (TeX-synchronous-sentinel name file process))))
|
|
435
|
|
436 (defun TeX-run-BibTeX (name command file)
|
|
437 "Create a process for NAME using COMMAND to format FILE with BibTeX."
|
|
438 (let ((process (TeX-run-command name command file)))
|
|
439 (setq TeX-sentinel-function 'TeX-BibTeX-sentinel)
|
|
440 (if TeX-process-asynchronous
|
|
441 process
|
|
442 (TeX-synchronous-sentinel name file process))))
|
|
443
|
|
444 (defun TeX-run-compile (name command file)
|
|
445 "Ignore first and third argument, start compile with second argument."
|
|
446 (compile command))
|
|
447
|
|
448 (defun TeX-run-shell (name command file)
|
|
449 "Ignore first and third argument, start shell-command with second argument."
|
|
450 (shell-command command)
|
|
451 (if (eq system-type 'ms-dos)
|
|
452 (redraw-display)))
|
|
453
|
|
454 (defun TeX-run-discard (name command file)
|
|
455 "Start process with second argument, discarding its output."
|
|
456 (process-kill-without-query (start-process (concat name " discard")
|
|
457 nil TeX-shell
|
|
458 TeX-shell-command-option
|
|
459 command)))
|
|
460
|
|
461 (defun TeX-run-dviout (name command file)
|
|
462 "Call process wbith second argument, discarding its output. With support
|
|
463 for the dviout previewer, especially when used with PC-9801 series."
|
|
464 (if (and (boundp 'dos-machine-type) (eq dos-machine-type 'pc98)) ;if PC-9801
|
|
465 (send-string-to-terminal "\e[2J")) ; clear screen
|
|
466 (call-process TeX-shell (if (eq system-type 'ms-dos) "con") nil nil
|
|
467 TeX-shell-command-option command)
|
|
468 (if (eq system-type 'ms-dos)
|
|
469 (redraw-display)))
|
|
470
|
|
471 (defun TeX-run-background (name command file)
|
|
472 "Start process with second argument, show output when and if it arrives."
|
|
473 (let ((dir (TeX-master-directory)))
|
|
474 (set-buffer (get-buffer-create "*TeX background*"))
|
|
475 (if dir (cd dir))
|
|
476 (erase-buffer)
|
|
477 (let ((process (start-process (concat name " background")
|
|
478 nil TeX-shell
|
|
479 TeX-shell-command-option command)))
|
|
480 (if TeX-after-start-process-function
|
|
481 (funcall TeX-after-start-process-function process))
|
|
482 (set-process-filter process 'TeX-background-filter)
|
|
483 (process-kill-without-query process))))
|
|
484
|
|
485 (defun TeX-run-interactive (name command file)
|
|
486 "Run TeX interactively.
|
|
487 Run command in a buffer (in comint-shell-mode) so that it accepts user
|
|
488 interaction. If you return to the file buffer after the TeX run,
|
|
489 Error parsing on C-x ` should work with a bit of luck."
|
|
490 (require 'comint)
|
|
491 (let ((default TeX-command-default)
|
|
492 (buffer (TeX-process-buffer-name file))
|
|
493 (process nil)
|
|
494 (dir (TeX-master-directory)))
|
|
495 (TeX-process-check file) ; Check that no process is running
|
|
496 (setq TeX-command-buffer (current-buffer))
|
|
497 (with-output-to-temp-buffer buffer)
|
|
498 (set-buffer buffer)
|
|
499 (if dir (cd dir))
|
|
500 (insert "Running `" name "' on `" file "' with ``" command "''\n")
|
|
501 (comint-exec buffer name TeX-shell nil
|
|
502 (list TeX-shell-command-option command))
|
|
503 (comint-mode)
|
|
504 (setq mode-name name)
|
|
505 (setq TeX-command-default default)
|
|
506 (setq process (get-buffer-process buffer))
|
|
507 (if TeX-after-start-process-function
|
|
508 (funcall TeX-after-start-process-function process))
|
|
509 (TeX-command-mode-line process)
|
|
510 (set-process-sentinel process 'TeX-command-sentinel)
|
|
511 (set-marker (process-mark process) (point-max))
|
|
512 (setq compilation-in-progress (cons process compilation-in-progress))
|
|
513 (TeX-parse-reset)
|
|
514 (setq TeX-parse-function 'TeX-parse-TeX)
|
|
515 (setq TeX-sentinel-function 'TeX-LaTeX-sentinel)))
|
|
516
|
|
517 ;;; Command Sentinels
|
|
518
|
|
519 (defun TeX-synchronous-sentinel (name file result)
|
|
520 "Process TeX command output buffer after the process dies."
|
|
521 (let* ((buffer (TeX-process-buffer file)))
|
|
522 (save-excursion
|
|
523 (set-buffer buffer)
|
|
524
|
|
525 ;; Append post-mortem information to the buffer
|
|
526 (goto-char (point-max))
|
|
527 (insert "\n" mode-name (if (and result (zerop result))
|
|
528 " finished" " exited") " at "
|
|
529 (substring (current-time-string) 0 -5))
|
|
530 (setq mode-line-process ": exit")
|
|
531
|
|
532 ;; Do command specific actions.
|
|
533 (setq TeX-command-next TeX-command-Show)
|
|
534 (goto-char (point-min))
|
|
535 (apply TeX-sentinel-function nil name nil)
|
|
536
|
|
537 ;; Force mode line redisplay soon
|
|
538 (set-buffer-modified-p (buffer-modified-p)))))
|
|
539
|
|
540 (defun TeX-command-sentinel (process msg)
|
|
541 "Process TeX command output buffer after the process dies."
|
|
542 (let* ((buffer (process-buffer process))
|
|
543 (name (process-name process)))
|
|
544 (cond ((null (buffer-name buffer)) ; buffer killed
|
|
545 (set-process-buffer process nil)
|
|
546 (set-process-sentinel process nil))
|
|
547 ((memq (process-status process) '(signal exit))
|
|
548 (save-excursion
|
|
549 (set-buffer buffer)
|
|
550
|
|
551 ;; Append post-mortem information to the buffer
|
|
552 (goto-char (point-max))
|
|
553 (insert "\n" mode-name " " msg)
|
|
554 (forward-char -1)
|
|
555 (insert " at "
|
|
556 (substring (current-time-string) 0 -5))
|
|
557 (forward-char 1)
|
|
558
|
|
559 ;; Do command specific actions.
|
|
560 (TeX-command-mode-line process)
|
|
561 (setq TeX-command-next TeX-command-Show)
|
|
562 (goto-char (point-min))
|
|
563 (apply TeX-sentinel-function process name nil)
|
|
564
|
|
565
|
|
566 ;; If buffer and mode line will show that the process
|
|
567 ;; is dead, we can delete it now. Otherwise it
|
|
568 ;; will stay around until M-x list-processes.
|
|
569 (delete-process process)
|
|
570
|
|
571 ;; Force mode line redisplay soon
|
|
572 (set-buffer-modified-p (buffer-modified-p))))))
|
|
573 (setq compilation-in-progress (delq process compilation-in-progress)))
|
|
574
|
|
575
|
|
576 (defvar TeX-sentinel-function (function (lambda (process name)))
|
|
577 "Hook to cleanup TeX command buffer after temination of PROCESS.
|
|
578 NAME is the name of the process.")
|
|
579
|
|
580 (make-variable-buffer-local 'TeX-sentinel-function)
|
|
581
|
|
582 (defun TeX-TeX-sentinel (process name)
|
|
583 "Cleanup TeX output buffer after running TeX."
|
|
584 (if (TeX-TeX-sentinel-check process name)
|
|
585 ()
|
|
586 (message (concat name ": formatted " (TeX-current-pages)))
|
|
587 (setq TeX-command-next TeX-command-Show)))
|
|
588
|
|
589 (defun TeX-current-pages ()
|
|
590 ;; String indictating the number of pages formatted.
|
|
591 (cond ((null TeX-current-page)
|
|
592 "some pages.")
|
|
593 ((string-match "[^0-9]1[^0-9]" TeX-current-page)
|
|
594 (concat TeX-current-page " page."))
|
|
595 (t
|
|
596 (concat TeX-current-page " pages."))))
|
|
597
|
|
598 (defun TeX-TeX-sentinel-check (process name)
|
|
599 "Cleanup TeX output buffer after running TeX.
|
|
600 Return nil ifs no errors were found."
|
|
601 (save-excursion
|
|
602 (goto-char (point-max))
|
|
603 (if (re-search-backward "^Output written on.* (\\([0-9]+\\) page" nil t)
|
|
604 (setq TeX-current-page (concat "{" (TeX-match-buffer 1) "}"))))
|
|
605 (if process (TeX-format-mode-line process))
|
|
606 (if (re-search-forward "^! " nil t)
|
|
607 (progn
|
|
608 (message (concat name " errors in `" (buffer-name)
|
|
609 "'. Use C-c ` to display."))
|
|
610 (setq TeX-command-next TeX-command-default)
|
|
611 t)
|
|
612 (setq TeX-command-next TeX-command-Show)
|
|
613 nil))
|
|
614
|
|
615 (defun TeX-LaTeX-sentinel (process name)
|
|
616 "Cleanup TeX output buffer after running LaTeX."
|
|
617 (cond ((TeX-TeX-sentinel-check process name))
|
|
618 ((and (save-excursion
|
|
619 (re-search-forward "^LaTeX Warning: Citation" nil t))
|
|
620 (let ((current (current-buffer)))
|
|
621 (set-buffer TeX-command-buffer)
|
|
622 (prog1 (and (LaTeX-bibliography-list)
|
|
623 (TeX-check-files (TeX-master-file "bbl")
|
|
624 (TeX-style-list)
|
|
625 (append TeX-file-extensions
|
|
626 BibTeX-file-extensions)))
|
|
627 (set-buffer current))))
|
|
628 (message (concat "You should run BibTeX to get citations right, "
|
|
629 (TeX-current-pages)))
|
|
630 (setq TeX-command-next TeX-command-BibTeX))
|
|
631 ((re-search-forward "^LaTeX Warning: Label(s)" nil t)
|
|
632 (message (concat "You should run LaTeX again "
|
|
633 "to get references right, "
|
|
634 (TeX-current-pages)))
|
|
635 (setq TeX-command-next TeX-command-default))
|
|
636 ((re-search-forward "^LaTeX Warning: Reference" nil t)
|
|
637 (message (concat name ": there were unresolved references, "
|
|
638 (TeX-current-pages)))
|
|
639 (setq TeX-command-next TeX-command-Show))
|
|
640 ((re-search-forward "^LaTeX Warning: Citation" nil t)
|
|
641 (message (concat name ": there were unresolved citations, "
|
|
642 (TeX-current-pages)))
|
|
643 (setq TeX-command-next TeX-command-Show))
|
|
644 ((re-search-forward
|
|
645 "^\\(\\*\\* \\)?J?I?p?\\(La\\|Sli\\)TeX\\(2e\\)? \\(Version\\|ver\\.\\|<[0-9/]*>\\)" nil t)
|
|
646 (message (concat name ": successfully formatted "
|
|
647 (TeX-current-pages)))
|
|
648 (setq TeX-command-next TeX-command-Show))
|
|
649 (t
|
|
650 (message (concat name ": problems after "
|
|
651 (TeX-current-pages)))
|
|
652 (setq TeX-command-next TeX-command-default))))
|
|
653
|
|
654 (defun TeX-BibTeX-sentinel (process name)
|
|
655 "Cleanup TeX output buffer after running BibTeX."
|
|
656 (message "You should perhaps run LaTeX again to get citations right.")
|
|
657 (setq TeX-command-next TeX-command-default))
|
|
658
|
|
659 ;;; Process Control
|
|
660
|
|
661
|
|
662 ;; This variable is chared with `compile.el'.
|
|
663 (defvar compilation-in-progress nil
|
|
664 "List of compilation processes now running.")
|
|
665
|
|
666 (or (assq 'compilation-in-progress minor-mode-alist)
|
|
667 (setq minor-mode-alist (cons '(compilation-in-progress " Compiling")
|
|
668 minor-mode-alist)))
|
|
669
|
|
670 (defun TeX-process-get-variable (name symbol &optional default)
|
|
671 "Return the value in the process buffer for NAME of SYMBOL.
|
|
672
|
|
673 Return DEFAULT if the process buffer does not exist or SYMBOL is not
|
|
674 defined."
|
|
675 (let ((buffer (TeX-process-buffer name)))
|
|
676 (if buffer
|
|
677 (save-excursion
|
|
678 (set-buffer buffer)
|
|
679 (if (boundp symbol)
|
|
680 (eval symbol)
|
|
681 default))
|
|
682 default)))
|
|
683
|
|
684 (defun TeX-process-set-variable (name symbol value)
|
|
685 "Set the variable SYMBOL in the process buffer to VALUE.
|
|
686 Return nil iff no process buffer exist."
|
|
687 (let ((buffer (TeX-process-buffer name)))
|
|
688 (if buffer
|
|
689 (save-excursion
|
|
690 (set-buffer buffer)
|
|
691 (set symbol value)
|
|
692 t)
|
|
693 nil)))
|
|
694
|
|
695 (defun TeX-process-check (name)
|
|
696 "Check if a process for the TeX document NAME already exist.
|
|
697 If so, give the user the choice of aborting the process or the current
|
|
698 command."
|
|
699 (let ((process (TeX-process name)))
|
|
700 (cond ((null process))
|
|
701 ((not (eq (process-status process) 'run)))
|
|
702 ((yes-or-no-p (concat "Process `"
|
|
703 (process-name process)
|
|
704 "' for document `"
|
|
705 name
|
|
706 "' running, kill it? "))
|
|
707 (delete-process process))
|
|
708 (t
|
|
709 (error "Cannot have two processes for the same document")))))
|
|
710
|
|
711 (defun TeX-process-buffer-name (name)
|
|
712 "Return name of AUC TeX buffer associated with the document NAME."
|
|
713 (concat "*" (abbreviate-file-name (expand-file-name name)) " output*"))
|
|
714
|
|
715 (defun TeX-process-buffer (name)
|
|
716 "Return the AUC TeX buffer associated with the document NAME."
|
|
717 (get-buffer (TeX-process-buffer-name name)))
|
|
718
|
|
719 (defun TeX-process (name)
|
|
720 "Return AUC TeX process associated with the document NAME."
|
|
721 (and TeX-process-asynchronous
|
|
722 (get-buffer-process (TeX-process-buffer name))))
|
|
723
|
|
724 ;;; Process Filters
|
|
725
|
|
726 (defun TeX-command-mode-line (process)
|
|
727 "Format the mode line for a buffer containing output from PROCESS."
|
|
728 (setq mode-line-process (concat ": "
|
|
729 (symbol-name (process-status process))))
|
|
730 (set-buffer-modified-p (buffer-modified-p)))
|
|
731
|
|
732 (defun TeX-command-filter (process string)
|
|
733 "Filter to process normal output."
|
|
734 (save-excursion
|
|
735 (set-buffer (process-buffer process))
|
|
736 (save-excursion
|
|
737 (goto-char (process-mark process))
|
|
738 (insert-before-markers string)
|
|
739 (set-marker (process-mark process) (point)))))
|
|
740
|
|
741 (defvar TeX-current-page nil
|
|
742 "The page number currently being formatted, enclosed in brackets.")
|
|
743
|
|
744 (make-variable-buffer-local 'TeX-current-page)
|
|
745
|
|
746 (defun TeX-format-mode-line (process)
|
|
747 "Format the mode line for a buffer containing TeX output from PROCESS."
|
|
748 (setq mode-line-process (concat " " TeX-current-page ": "
|
|
749 (symbol-name (process-status process))))
|
|
750 (set-buffer-modified-p (buffer-modified-p)))
|
|
751
|
|
752 (defun TeX-format-filter (process string)
|
|
753 "Filter to process TeX output."
|
|
754 (save-excursion
|
|
755 (set-buffer (process-buffer process))
|
|
756 (save-excursion
|
|
757 (goto-char (process-mark process))
|
|
758 (insert-before-markers string)
|
|
759 (set-marker (process-mark process) (point)))
|
|
760 (save-excursion
|
|
761 (save-match-data
|
|
762 (if (re-search-backward "\\[[0-9]+\\(\\.[0-9\\.]+\\)?\\]" nil t)
|
|
763 (setq TeX-current-page (TeX-match-buffer 0)))))
|
|
764 (TeX-format-mode-line process)))
|
|
765
|
|
766 (defvar TeX-parse-function nil
|
|
767 "Function to call to parse content of TeX output buffer.")
|
|
768 (make-variable-buffer-local 'TeX-parse-function)
|
|
769
|
|
770 (defun TeX-background-filter (process string)
|
|
771 "Filter to process background output."
|
|
772 (let ((old-window (selected-window))
|
|
773 (pop-up-windows t))
|
|
774 (pop-to-buffer "*TeX background*")
|
|
775 (goto-char (point-max))
|
|
776 (insert string)
|
|
777 (select-window old-window)))
|
|
778
|
|
779
|
|
780 ;;; Active Process
|
|
781
|
|
782 (defvar TeX-current-process-region-p nil
|
|
783 "This variable is set to t iff the last TeX command is on a region.")
|
|
784
|
|
785 (defun TeX-active-process ()
|
|
786 "Return the active process for the current buffer."
|
|
787 (if TeX-current-process-region-p
|
|
788 (TeX-process (TeX-region-file))
|
|
789 (TeX-process (TeX-master-file))))
|
|
790
|
|
791 (defun TeX-active-buffer ()
|
|
792 "Return the buffer of the active process for this buffer."
|
|
793 (if TeX-current-process-region-p
|
|
794 (TeX-process-buffer (TeX-region-file))
|
|
795 (TeX-process-buffer (TeX-master-file))))
|
|
796
|
|
797 (defun TeX-active-master (&optional extension)
|
|
798 "The master file currently being compiled."
|
|
799 (if TeX-current-process-region-p
|
|
800 (TeX-region-file extension)
|
|
801 (TeX-master-file extension)))
|
|
802
|
|
803 (defvar TeX-command-buffer nil
|
|
804 "The buffer from where the last TeX command was issued.")
|
|
805
|
|
806 ;;; Region File
|
|
807
|
|
808 (defun TeX-region-create (file region original offset)
|
|
809 "Create a new file named FILE with the string REGION
|
|
810 The region is taken from ORIGINAL starting at line OFFSET.
|
|
811
|
|
812 The current buffer and master file is searched, in order to ensure
|
|
813 that the TeX header and trailer information is also included.
|
|
814
|
|
815 The OFFSET is used to provide the debugger with information about the
|
|
816 original file."
|
|
817 (let* (;; We shift buffer a lot, so we must keep track of the buffer
|
|
818 ;; local variables.
|
|
819 (header-end TeX-header-end)
|
|
820 (trailer-start TeX-trailer-start)
|
|
821
|
|
822 ;; We seach for header and trailer in the master file.
|
|
823 (master-name (TeX-master-file TeX-default-extension))
|
|
824 (master-buffer (find-file-noselect master-name))
|
|
825
|
|
826 ;; Attempt to disable font lock.
|
|
827 (font-lock-defaults-alist nil)
|
|
828 (font-lock-defaults nil)
|
|
829 (font-lock-maximum-size 0)
|
|
830 (font-lock-mode-hook nil)
|
|
831 (font-lock-auto-fontify nil)
|
|
832 (font-lock-mode-enable-list nil)
|
|
833 ;; And insert them into the FILE buffer.
|
|
834 (file-buffer (find-file-noselect file))
|
|
835 ;; But remember original content.
|
|
836 original-content
|
|
837
|
|
838 ;; We search for the header from the master file, if it is
|
|
839 ;; not present in the region.
|
|
840 (header (if (string-match header-end region)
|
|
841 ""
|
|
842 (save-excursion
|
|
843 (save-restriction
|
|
844 (set-buffer master-buffer)
|
|
845 (save-excursion
|
|
846 (save-restriction
|
|
847 (widen)
|
|
848 (goto-char (point-min))
|
|
849 ;; NOTE: We use the local value of
|
|
850 ;; TeX-header-end from the master file.
|
|
851 (if (not (re-search-forward TeX-header-end nil t))
|
|
852 ""
|
|
853 (re-search-forward "[\r\n]" nil t)
|
|
854 (buffer-substring (point-min) (point)))))))))
|
|
855
|
|
856 ;; We search for the trailer from the master file, if it is
|
|
857 ;; not present in the region.
|
|
858 (trailer-offset 0)
|
|
859 (trailer (if (string-match trailer-start region)
|
|
860 ""
|
|
861 (save-excursion
|
|
862 (save-restriction
|
|
863 (set-buffer master-buffer)
|
|
864 (save-excursion
|
|
865 (save-restriction
|
|
866 (widen)
|
|
867 (goto-char (point-max))
|
|
868 ;; NOTE: We use the local value of
|
|
869 ;; TeX-trailer-start from the master file.
|
|
870 (if (not (re-search-backward TeX-trailer-start nil t))
|
|
871 ""
|
|
872 ;;(beginning-of-line 1)
|
|
873 (re-search-backward "[\r\n]" nil t)
|
|
874 (setq trailer-offset
|
|
875 (count-lines (point-min) (point)))
|
|
876 (buffer-substring (point) (point-max))))))))))
|
|
877 (save-excursion
|
|
878 (set-buffer file-buffer)
|
|
879 (setq original-content (buffer-string))
|
|
880 (erase-buffer)
|
|
881 (insert "\\message{ !name(" master-name ")}"
|
|
882 header
|
|
883 "\n\\message{ !name(" original ") !offset(")
|
|
884 (insert (int-to-string (- offset
|
|
885 (count-lines (point-min) (point))))
|
|
886 ") }\n"
|
|
887 region
|
|
888 "\n\\message{ !name(" master-name ") !offset(")
|
|
889 (insert (int-to-string (- trailer-offset
|
|
890 (count-lines (point-min) (point))))
|
|
891 ") }\n"
|
|
892 trailer)
|
|
893 (if (string-equal (buffer-string) original-content)
|
|
894 (set-buffer-modified-p nil)
|
|
895 (save-buffer 0)))))
|
|
896
|
|
897 (defun TeX-region-file (&optional extension nondirectory)
|
|
898 "Return TeX-region file name with EXTENSION.
|
|
899 If optional second argument NONDIRECTORY is nil, do not include
|
|
900 the directory."
|
|
901 (concat (if nondirectory "" (TeX-master-directory))
|
|
902 (cond ((eq extension t)
|
|
903 (concat TeX-region "." TeX-default-extension))
|
|
904 (extension
|
|
905 (concat TeX-region "." extension))
|
|
906 (t
|
|
907 TeX-region))))
|
|
908
|
|
909 (defvar TeX-region "_region_"
|
|
910 "*Base name for temporary file for use with TeX-region.")
|
|
911
|
|
912 ;;; Parsing
|
|
913
|
|
914 ;;; - Global Parser Variables
|
|
915
|
|
916 (defvar TeX-error-point nil
|
|
917 "How far we have parsed until now.")
|
|
918
|
|
919 (make-variable-buffer-local 'TeX-error-point)
|
|
920
|
|
921 (defvar TeX-error-file nil
|
|
922 "Stack of files in which errors have occured")
|
|
923
|
|
924 (make-variable-buffer-local 'TeX-error-file)
|
|
925
|
|
926 (defvar TeX-error-offset nil
|
|
927 "Add this to any line numbers from TeX. Stack like TeX-error-file.")
|
|
928
|
|
929 (make-variable-buffer-local 'TeX-error-offset)
|
|
930
|
|
931 (defun TeX-parse-reset ()
|
|
932 "Reset all variables used for parsing TeX output."
|
|
933 (setq TeX-error-point (point-min))
|
|
934 (setq TeX-error-offset nil)
|
|
935 (setq TeX-error-file nil))
|
|
936
|
|
937 ;;; - Parsers Hooks
|
|
938
|
|
939 (defun TeX-parse-command (reparse)
|
|
940 "We can't parse anything but TeX."
|
|
941 (error "I cannot parse %s output, sorry"
|
|
942 (if (TeX-active-process)
|
|
943 (process-name (TeX-active-process))
|
|
944 "this")))
|
|
945
|
|
946 (defun TeX-parse-TeX (reparse)
|
|
947 "Find the next error produced by running TeX.
|
|
948 Prefix by C-u to start from the beginning of the errors.
|
|
949
|
|
950 If the file occurs in an included file, the file is loaded (if not
|
|
951 already in an Emacs buffer) and the cursor is placed at the error."
|
|
952
|
|
953 (let ((old-buffer (current-buffer)))
|
|
954 (pop-to-buffer (TeX-active-buffer))
|
|
955 (if reparse
|
|
956 (TeX-parse-reset))
|
|
957 (goto-char TeX-error-point)
|
|
958 (TeX-parse-error old-buffer)))
|
|
959
|
|
960 ;;; - Parsing (La)TeX
|
|
961
|
|
962 (defvar TeX-translate-location-hook nil
|
|
963 "List of functions to be called before showing an error or warning.
|
|
964
|
|
965 You might want to examine and modify the free variables `file',
|
|
966 `offset', `line', `string', `error', and `context' from this hook.")
|
|
967
|
|
968 (defun TeX-parse-error (old)
|
|
969 "Goto next error. Pop to OLD buffer if no more errors are found."
|
|
970 (while
|
|
971 (progn
|
|
972 (re-search-forward (concat "\\("
|
|
973 "^! \\|"
|
|
974 "(\\|"
|
|
975 ")\\|"
|
|
976 "\\'\\|"
|
|
977 "!offset([---0-9]*)\\|"
|
|
978 "!name([^)]*)\\|"
|
|
979 "^.*erfull \\\\.*[0-9]*--[0-9]*\\|"
|
|
980 "^LaTeX Warning: .*[0-9]+\\.$"
|
|
981 "\\)"))
|
|
982 (let ((string (TeX-match-buffer 1)))
|
|
983
|
|
984 (cond (;; TeX error
|
|
985 (string= string "! ")
|
|
986 (TeX-error)
|
|
987 nil)
|
|
988
|
|
989 ;; LaTeX warning
|
|
990 ((string-match (concat "\\("
|
|
991 "^.*erfull \\\\.*[0-9]*--[0-9]*\\|"
|
|
992 "^LaTeX Warning: .*[0-9]+\\.$"
|
|
993 "\\)")
|
|
994
|
|
995 string)
|
|
996 (TeX-warning string))
|
|
997
|
|
998 ;; New file -- Push on stack
|
|
999 ((string= string "(")
|
|
1000 (re-search-forward "\\([^()\n \t]*\\)")
|
|
1001 (setq TeX-error-file
|
|
1002 (cons (TeX-match-buffer 1) TeX-error-file))
|
|
1003 (setq TeX-error-offset (cons 0 TeX-error-offset))
|
|
1004 t)
|
|
1005
|
|
1006 ;; End of file -- Pop from stack
|
|
1007 ((string= string ")")
|
|
1008 (setq TeX-error-file (cdr TeX-error-file))
|
|
1009 (setq TeX-error-offset (cdr TeX-error-offset))
|
|
1010 t)
|
|
1011
|
|
1012 ;; Hook to change line numbers
|
|
1013 ((string-match "!offset(\\([---0-9]*\\))" string)
|
|
1014 (rplaca TeX-error-offset
|
|
1015 (string-to-int (substring string
|
|
1016 (match-beginning 1)
|
|
1017 (match-end 1))))
|
|
1018 t)
|
|
1019
|
|
1020 ;; Hook to change file name
|
|
1021 ((string-match "!name(\\([^)]*\\))" string)
|
|
1022 (rplaca TeX-error-file (substring string
|
|
1023 (match-beginning 1)
|
|
1024 (match-end 1)))
|
|
1025 t)
|
|
1026
|
|
1027 ;; No more errors.
|
|
1028 (t
|
|
1029 (message "No more errors.")
|
|
1030 (beep)
|
|
1031 (pop-to-buffer old)
|
|
1032 nil))))))
|
|
1033
|
|
1034 (defun TeX-error ()
|
|
1035 "Display an error."
|
|
1036
|
|
1037 (let* (;; We need the error message to show the user.
|
|
1038 (error (progn
|
|
1039 (re-search-forward "\\(.*\\)")
|
|
1040 (TeX-match-buffer 1)))
|
|
1041
|
|
1042 ;; And the context for the help window.
|
|
1043 (context-start (point))
|
|
1044
|
|
1045 ;; And the line number to position the cursor.
|
|
1046 (line (if (re-search-forward "l\\.\\([0-9]+\\)" nil t)
|
|
1047 (string-to-int (TeX-match-buffer 1))
|
|
1048 1))
|
|
1049 ;; And a string of the context to search for.
|
|
1050 (string (progn
|
|
1051 (beginning-of-line)
|
|
1052 (re-search-forward " \\(\\([^ \t]*$\\)\\|\\($\\)\\)")
|
|
1053 (TeX-match-buffer 1)))
|
|
1054
|
|
1055 ;; And we have now found to the end of the context.
|
|
1056 (context (buffer-substring context-start (progn
|
|
1057 (forward-line 1)
|
|
1058 (end-of-line)
|
|
1059 (point))))
|
|
1060 ;; We may use these in another buffer.
|
|
1061 (offset (car TeX-error-offset) )
|
|
1062 (file (car TeX-error-file)))
|
|
1063
|
|
1064 ;; Remember where we was.
|
|
1065 (setq TeX-error-point (point))
|
|
1066
|
|
1067 ;; Find the error.
|
|
1068 (if (null file)
|
|
1069 (error "Error occured after last TeX file closed"))
|
|
1070 (run-hooks 'TeX-translate-location-hook)
|
|
1071 (find-file-other-window file)
|
|
1072 (goto-line (+ offset line))
|
|
1073 (if (not (string= string " "))
|
|
1074 (search-forward string nil t))
|
|
1075
|
|
1076 ;; Explain the error.
|
|
1077 (if TeX-display-help
|
|
1078 (TeX-help-error error context)
|
|
1079 (message (concat "! " error)))))
|
|
1080
|
|
1081 (defun TeX-warning (string)
|
|
1082 "Display a warning for STRING.
|
|
1083 Return nil if we gave a report."
|
|
1084
|
|
1085 (let* ((error (concat "** " string))
|
|
1086
|
|
1087 ;; bad-box is nil if this is a "LaTeX Warning"
|
|
1088 (bad-box (string-match "^.*erfull \\\\.*[0-9]*--[0-9]*" string))
|
|
1089 ;; line-string: match 1 is beginning line, match 2 is end line
|
|
1090 (line-string (if bad-box " \\([0-9]*\\)--\\([0-9]*\\)"
|
|
1091 "on input line \\([0-9]*\\)\\."))
|
|
1092 ;; word-string: match 1 is the word
|
|
1093 (word-string (if bad-box "[][\\W() ---]\\(\\w+\\)[][\\W() ---]*$"
|
|
1094 "`\\(\\w+\\)'"))
|
|
1095
|
|
1096 ;; Get error-line (warning)
|
|
1097 (line (progn
|
|
1098 (re-search-backward line-string)
|
|
1099 (string-to-int (TeX-match-buffer 1))))
|
|
1100 (line-end (if bad-box (string-to-int (TeX-match-buffer 2))
|
|
1101 line))
|
|
1102
|
|
1103 ;; Find the context
|
|
1104 (context-start (progn (if bad-box (end-of-line)
|
|
1105 (beginning-of-line))
|
|
1106 (point)))
|
|
1107
|
|
1108 (context (progn
|
|
1109 (forward-line 1)
|
|
1110 (end-of-line)
|
|
1111 (while (equal (current-column) 79)
|
|
1112 (forward-line 1)
|
|
1113 (end-of-line))
|
|
1114 (buffer-substring context-start (point))))
|
|
1115
|
|
1116 ;; This is where we want to be.
|
|
1117 (error-point (point))
|
|
1118
|
|
1119 ;; Now find the error word.
|
|
1120 (string (progn
|
|
1121 (re-search-backward word-string
|
|
1122 context-start t)
|
|
1123 (TeX-match-buffer 1)))
|
|
1124
|
|
1125 ;; We might use these in another file.
|
|
1126 (offset (car TeX-error-offset))
|
|
1127 (file (car TeX-error-file)))
|
|
1128
|
|
1129 ;; This is where we start next time.
|
|
1130 (goto-char error-point)
|
|
1131 (setq TeX-error-point (point))
|
|
1132
|
|
1133 ;; Go back to TeX-buffer
|
|
1134 (if TeX-debug-bad-boxes
|
|
1135 (progn
|
|
1136 (run-hooks 'TeX-translate-location-hook)
|
|
1137 (find-file-other-window file)
|
|
1138 ;; Find line and string
|
|
1139 (goto-line (+ offset line))
|
|
1140 (beginning-of-line 0)
|
|
1141 (let ((start (point)))
|
|
1142 (goto-line (+ offset line-end))
|
|
1143 (end-of-line)
|
|
1144 (search-backward string start t)
|
|
1145 (search-forward string nil t))
|
|
1146 ;; Display help
|
|
1147 (if TeX-display-help
|
|
1148 (TeX-help-error error (if bad-box context (concat "\n" context)))
|
|
1149 (message (concat "! " error)))
|
|
1150 nil)
|
|
1151 t)))
|
|
1152
|
|
1153 ;;; - Help
|
|
1154
|
|
1155 (defun TeX-help-error (error output)
|
|
1156 "Print ERROR in context OUTPUT in another window."
|
|
1157
|
|
1158 (let ((old-buffer (current-buffer))
|
|
1159 (log-file (TeX-active-master "log"))
|
|
1160 (TeX-error-pointer 1))
|
|
1161
|
|
1162 ;; Find help text entry.
|
|
1163 (while (not (string-match (car (nth TeX-error-pointer
|
|
1164 TeX-error-description-list))
|
|
1165 error))
|
|
1166 (setq TeX-error-pointer (+ TeX-error-pointer 1)))
|
|
1167
|
|
1168 (pop-to-buffer (get-buffer-create "*TeX Help*"))
|
|
1169 (erase-buffer)
|
|
1170 (insert "ERROR: " error
|
|
1171 "\n\n--- TeX said ---"
|
|
1172 output
|
|
1173 "\n--- HELP ---\n"
|
|
1174 (save-excursion
|
|
1175 (if (and (string= (cdr (nth TeX-error-pointer
|
|
1176 TeX-error-description-list))
|
|
1177 "No help available")
|
|
1178 (let* ((log-buffer (find-file-noselect log-file)))
|
|
1179 (set-buffer log-buffer)
|
|
1180 (auto-save-mode nil)
|
|
1181 (setq buffer-read-only t)
|
|
1182 (goto-line (point-min))
|
|
1183 (search-forward error nil t 1)))
|
|
1184 (progn
|
|
1185 (re-search-forward "^l.")
|
|
1186 (re-search-forward "^ [^\n]+$")
|
|
1187 (forward-char 1)
|
|
1188 (let ((start (point)))
|
|
1189 (re-search-forward "^$")
|
|
1190 (concat "From the .log file...\n\n"
|
|
1191 (buffer-substring start (point)))))
|
|
1192 (cdr (nth TeX-error-pointer
|
|
1193 TeX-error-description-list)))))
|
|
1194 (goto-char (point-min))
|
|
1195 (pop-to-buffer old-buffer)))
|
|
1196
|
|
1197 ;;; Error Messages
|
|
1198
|
|
1199 (defvar TeX-error-description-list
|
|
1200 '(("Bad \\\\line or \\\\vector argument.*" .
|
|
1201 "The first argument of a \\line or \\vector command, which specifies the
|
|
1202 slope, is illegal\.")
|
|
1203
|
|
1204 ("Bad math environment delimiter.*" .
|
|
1205 "TeX has found either a math-mode-starting command such as \\[ or \\(
|
|
1206 when it is already in math mode, or else a math-mode-ending command
|
|
1207 such as \\) or \\] while in LR or paragraph mode. The problem is caused
|
|
1208 by either unmatched math mode delimiters or unbalanced braces\.")
|
|
1209
|
|
1210 ("Bad use of \\\\\\\\.*" .
|
|
1211 "A \\\\ command appears between paragraphs, where it makes no sense. This
|
|
1212 error message occurs when the \\\\ is used in a centering or flushing
|
|
1213 environment or else in the scope of a centering or flushing
|
|
1214 declaration.")
|
|
1215
|
|
1216 ("\\\\begin{[^ ]*} ended by \\\\end{[^ ]*}." .
|
|
1217 "LaTeX has found an \\end command that doesn't match the corresponding
|
|
1218 \\begin command. You probably misspelled the environment name in the
|
|
1219 \\end command, have an extra \\begin, or else forgot an \\end.")
|
|
1220
|
|
1221 ("Can be used only in preamble." .
|
|
1222 "LaTeX has encountered, after the \\begin{document}, one of the
|
|
1223 following commands that should appear only in the preamble:
|
|
1224 \\documentstyle, \\nofiles, \\includeonly, \\makeindex, or
|
|
1225 \\makeglossary. The error is also caused by an extra \\begin{document}
|
|
1226 command.")
|
|
1227
|
|
1228 ("Command name [^ ]* already used.*" .
|
|
1229 "You are using \\newcommand, \\newenvironment, \\newlength, \\newsavebox,
|
|
1230 or \\newtheorem to define a command or environment name that is
|
|
1231 already defined, or \\newcounter to define a counter that already
|
|
1232 exists. (Defining an environment named gnu automatically defines the
|
|
1233 command \\gnu.) You'll have to choose a new name or, in the case of
|
|
1234 \\newcommand or \\newenvironment, switch to the \\renew ... command.")
|
|
1235
|
|
1236 ("Counter too large." .
|
|
1237 "Some object that is numbered with letters, probably an item in a
|
|
1238 enumerated list, has received a number greater than 26. Either you're
|
|
1239 making a very long list or you've been resetting counter values.")
|
|
1240
|
|
1241 ("Environment [^ ]* undefined." .
|
|
1242 "LaTeX has encountered a \\begin command for a nonexistent environment.
|
|
1243 You probably misspelled the environment name. ")
|
|
1244
|
|
1245 ("Float(s) lost." .
|
|
1246 "You put a figure or table environment or a \\marginpar command inside a
|
|
1247 parbox---either one made with a minipage environment or \\parbox
|
|
1248 command, or one constructed by LaTeX in making a footnote, figure,
|
|
1249 etc. This is an outputting error, and the offending environment or
|
|
1250 command may be quite a way back from the point where LaTeX discovered
|
|
1251 the problem. One or more figures, tables, and/or marginal notes have
|
|
1252 been lost, but not necessarily the one that caused the error.")
|
|
1253
|
|
1254 ("Illegal character in array arg." .
|
|
1255 "There is an illegal character in the argument of an array or tabular
|
|
1256 environment, or in the second argument of a \\multicolumn command.")
|
|
1257
|
|
1258 ("Missing \\\\begin{document}." .
|
|
1259 "LaTeX produced printed output before encountering a \\begin{document}
|
|
1260 command. Either you forgot the \\begin{document} command or there is
|
|
1261 something wrong in the preamble. The problem may be a stray character
|
|
1262 or an error in a declaration---for example, omitting the braces around
|
|
1263 an argument or forgetting the \\ in a command name.")
|
|
1264
|
|
1265 ("Missing p-arg in array arg.*" .
|
|
1266 "There is a p that is not followed by an expression in braces in the
|
|
1267 argument of an array or tabular environment, or in the second argument
|
|
1268 of a \\multicolumn command.")
|
|
1269
|
|
1270 ("Missing @-exp in array arg." .
|
|
1271 "There is an @ character not followed by an @-expression in the
|
|
1272 argument of an array or tabular environment, or in the second argument
|
|
1273 of a \\multicolumn command.")
|
|
1274
|
|
1275 ("No such counter." .
|
|
1276 "You have specified a nonexistent counter in a \\setcounter or
|
|
1277 \\addtocounter command. This is probably caused by a simple typing
|
|
1278 error. However, if the error occurred while a file with the extension
|
|
1279 aux is being read, then you probably used a \\newcounter command
|
|
1280 outside the preamble.")
|
|
1281
|
|
1282 ("Not in outer par mode." .
|
|
1283 "You had a figure or table environment or a \\marginpar command in math
|
|
1284 mode or inside a parbox.")
|
|
1285
|
|
1286 ("\\\\pushtabs and \\\\poptabs don't match." .
|
|
1287 "LaTeX found a \\poptabs with no matching \\pushtabs, or has come to the
|
|
1288 \\end{tabbing} command with one or more unmatched \\pushtabs commands.")
|
|
1289
|
|
1290 ("Something's wrong--perhaps a missing \\\\item." .
|
|
1291 "The most probable cause is an omitted \\item command in a list-making
|
|
1292 environment. It is also caused by forgetting the argument of a
|
|
1293 thebibliography environment.")
|
|
1294
|
|
1295 ("Tab overflow." .
|
|
1296 "A \\= command has exceeded the maximum number of tab stops that LaTeX
|
|
1297 permits.")
|
|
1298
|
|
1299 ("There's no line here to end." .
|
|
1300 "A \\newline or \\\\ command appears between paragraphs, where it makes no
|
|
1301 sense. If you're trying to ``leave a blank line'', use a \\vspace
|
|
1302 command.")
|
|
1303
|
|
1304 ("This may be a LaTeX bug." .
|
|
1305 "LaTeX has become thoroughly confused. This is probably due to a
|
|
1306 previously detected error, but it is possible that you have found an
|
|
1307 error in LaTeX itself. If this is the first error message produced by
|
|
1308 the input file and you can't find anything wrong, save the file and
|
|
1309 contact the person listed in your Local Guide.")
|
|
1310
|
|
1311 ("Too deeply nested." .
|
|
1312 "There are too many list-making environments nested within one another.
|
|
1313 How many levels of nesting are permitted may depend upon what computer
|
|
1314 you are using, but at least four levels are provided, which should be
|
|
1315 enough.")
|
|
1316
|
|
1317 ("Too many unprocessed floats." .
|
|
1318 "While this error can result from having too many \\marginpar commands
|
|
1319 on a page, a more likely cause is forcing LaTeX to save more figures
|
|
1320 and tables than it has room for. When typesetting its continuous
|
|
1321 scroll, LaTeX saves figures and tables separately and inserts them as
|
|
1322 it cuts off pages. This error occurs when LaTeX finds too many figure
|
|
1323 and/or table environments before it is time to cut off a page, a
|
|
1324 problem that is solved by moving some of the environments farther
|
|
1325 towards the end of the input file. The error can also be caused by a
|
|
1326 ``logjam''---a figure or table that cannot be printed causing others
|
|
1327 to pile up behind it, since LaTeX will not print figures or tables out
|
|
1328 of order. The jam can be started by a figure or table that either is
|
|
1329 too large to fit on a page or won't fit where its optional placement
|
|
1330 argument says it must go. This is likely to happen if the argument
|
|
1331 does not contain a p option.")
|
|
1332
|
|
1333 ("Undefined tab position." .
|
|
1334 "A \\>, \\+, \\-, or \\< command is trying to go to a nonexistent tab
|
|
1335 position---one not defined by a \\= command.")
|
|
1336
|
|
1337 ("\\\\< in mid line." .
|
|
1338 "A \\< command appears in the middle of a line in a tabbing environment.
|
|
1339 This command should come only at the beginning of a line.")
|
|
1340
|
|
1341 ("Counter too large." .
|
|
1342 "Footnotes are being ``numbered'' with letters or footnote symbols and
|
|
1343 LaTeX has run out of letters or symbols. This is probably caused by
|
|
1344 too many \\thanks commands.")
|
|
1345
|
|
1346 ("Double subscript." .
|
|
1347 "There are two subscripts in a row in a mathematical
|
|
1348 formula---something like x_{2}_{3}, which makes no sense.")
|
|
1349
|
|
1350 ("Double superscript." .
|
|
1351 "There are two superscripts in a row in a mathematical
|
|
1352 formula---something like x^{2}^{3}, which makes no sense.")
|
|
1353
|
|
1354 ("Extra alignment tab has been changed to \\\\cr." .
|
|
1355 "There are too many separate items (column entries) in a single row of
|
|
1356 an array or tabular environment. In other words, there were too many &
|
|
1357 's before the end of the row. You probably forgot the \\\\ at the end of
|
|
1358 the preceding row.")
|
|
1359
|
|
1360 ("Extra \\}, or forgotten \\$." .
|
|
1361 "The braces or math mode delimiters don't match properly. You probably
|
|
1362 forgot a {, \\[, \\(, or $.")
|
|
1363
|
|
1364 ("Font [^ ]* not loaded: Not enough room left." .
|
|
1365 "The document uses more fonts than TeX has room for. If different parts
|
|
1366 of the document use different fonts, then you can get around the
|
|
1367 problem by processing it in parts.")
|
|
1368
|
|
1369 ("I can't find file `.*'." .
|
|
1370 "TeX can't find a file that it needs. If the name of the missing file
|
|
1371 has the extension tex, then it is looking for an input file that you
|
|
1372 specified---either your main file or another file inserted with an
|
|
1373 \\input or \\include command. If the missing file has the extension sty
|
|
1374 , then you have specified a nonexistent document style or style
|
|
1375 option.")
|
|
1376
|
|
1377 ("Illegal parameter number in definition of .*" .
|
|
1378 "This is probably caused by a \\newcommand, \\renewcommand,
|
|
1379 \\newenvironment, or \\renewenvironment command in which a # is used
|
|
1380 incorrectly. A # character, except as part of the command name \\#,
|
|
1381 can be used only to indicate an argument parameter, as in #2, which
|
|
1382 denotes the second argument. This error is also caused by nesting one
|
|
1383 of the above four commands inside another, or by putting a parameter
|
|
1384 like #2 in the last argument of a \\newenvironment or \\renewenvironment
|
|
1385 command.")
|
|
1386
|
|
1387 ("Illegal unit of measure ([^ ]* inserted)." .
|
|
1388 "If you just got a
|
|
1389
|
|
1390 ! Missing number, treated as zero.
|
|
1391
|
|
1392 error, then this is part of the same problem. If not, it means that
|
|
1393 LaTeX was expecting a length as an argument and found a number
|
|
1394 instead. The most common cause of this error is writing 0 instead of
|
|
1395 something like 0in for a length of zero, in which case typing return
|
|
1396 should result in correct output. However, the error can also be caused
|
|
1397 by omitting a command argument.")
|
|
1398
|
|
1399 ("Misplaced alignment tab character \\&." .
|
|
1400 "The special character &, which should be used only to separate items
|
|
1401 in an array or tabular environment, appeared in ordinary text. You
|
|
1402 probably meant to type \\&.")
|
|
1403
|
|
1404 ("Missing control sequence inserted." .
|
|
1405 "This is probably caused by a \\newcommand, \\renewcommand, \\newlength,
|
|
1406 or \\newsavebox command whose first argument is not a command name.")
|
|
1407
|
|
1408 ("Missing number, treated as zero." .
|
|
1409 "This is usually caused by a LaTeX command expecting but not finding
|
|
1410 either a number or a length as an argument. You may have omitted an
|
|
1411 argument, or a square bracket in the text may have been mistaken for
|
|
1412 the beginning of an optional argument. This error is also caused by
|
|
1413 putting \\protect in front of either a length command or a command such
|
|
1414 as \\value that produces a number.")
|
|
1415
|
|
1416 ("Missing [{}] inserted." .
|
|
1417 "TeX has become confused. The position indicated by the error locator
|
|
1418 is probably beyond the point where the incorrect input is.")
|
|
1419
|
|
1420 ("Missing \\$ inserted." .
|
|
1421 "TeX probably found a command that can be used only in math mode when
|
|
1422 it wasn't in math mode. Remember that unless stated otherwise, all
|
|
1423 the commands of Section can be used only in math mode. TeX is not in
|
|
1424 math mode when it begins processing the argument of a box-making
|
|
1425 command, even if that command is inside a math environment. This error
|
|
1426 also occurs if TeX encounters a blank line when it is in math mode.")
|
|
1427
|
|
1428 ("Not a letter." .
|
|
1429 "Something appears in the argument of a \\hyphenation command that
|
|
1430 doesn't belong there.")
|
|
1431
|
|
1432 ("Paragraph ended before [^ ]* was complete." .
|
|
1433 "A blank line occurred in a command argument that shouldn't contain
|
|
1434 one. You probably forgot the right brace at the end of an argument.")
|
|
1435
|
|
1436 ("\\\\[^ ]*font [^ ]* is undefined .*" .
|
|
1437 "These errors occur when an uncommon font is used in math mode---for
|
|
1438 example, if you use a \\sc command in a formula inside a footnote,
|
|
1439 calling for a footnote-sized small caps font. This problem is solved
|
|
1440 by using a \\load command.")
|
|
1441
|
|
1442 ("Font .* not found." .
|
|
1443 "You requested a family/series/shape/size combination that is totally
|
|
1444 unknown. There are two cases in which this error can occur:
|
|
1445 1) You used the \\size macro to select a size that is not available.
|
|
1446 2) If you did not do that, go to your local `wizard' and
|
|
1447 complain fiercely that the font selection tables are corrupted!")
|
|
1448
|
|
1449 ("TeX capacity exceeded, sorry .*" .
|
|
1450 "TeX has just run out of space and aborted its execution. Before you
|
|
1451 panic, remember that the least likely cause of this error is TeX not
|
|
1452 having the capacity to process your document. It was probably an
|
|
1453 error in your input file that caused TeX to run out of room. The
|
|
1454 following discussion explains how to decide whether you've really
|
|
1455 exceeded TeX's capacity and, if so, what to do. If the problem is an
|
|
1456 error in the input, you may have to use the divide and conquer method
|
|
1457 described previously to locate it. LaTeX seldom runs out of space on a
|
|
1458 short input file, so if running it on the last few pages before the
|
|
1459 error indicator's position still produces the error, then there's
|
|
1460 almost certainly something wrong in the input file.
|
|
1461
|
|
1462 The end of the error indicator tells what kind of space TeX ran out
|
|
1463 of. The more common ones are listed below, with an explanation of
|
|
1464 their probable causes.
|
|
1465
|
|
1466 buffer size
|
|
1467 ===========
|
|
1468 Can be caused by too long a piece of text as the argument
|
|
1469 of a sectioning, \\caption, \\addcontentsline, or \\addtocontents
|
|
1470 command. This error will probably occur when the \\end{document} is
|
|
1471 being processed, but it could happen when a \\tableofcontents,
|
|
1472 \\listoffigures, or \\listoftables command is executed. To solve this
|
|
1473 problem, use a shorter optional argument. Even if you're producing a
|
|
1474 table of contents or a list of figures or tables, such a long entry
|
|
1475 won't help the reader.
|
|
1476
|
|
1477 exception dictionary
|
|
1478 ====================
|
|
1479 You have used \\hyphenation commands to give TeX
|
|
1480 more hyphenation information than it has room for. Remove some of the
|
|
1481 less frequently used words from the \\hyphenation commands and insert
|
|
1482 \\- commands instead.
|
|
1483
|
|
1484 hash size
|
|
1485 =========
|
|
1486 Your input file defines too many command names and/or uses
|
|
1487 too many cross-ref- erencing labels.
|
|
1488
|
|
1489 input stack size
|
|
1490 ================
|
|
1491 This is probably caused by an error in a command
|
|
1492 definition. For example, the following command makes a circular
|
|
1493 definition, defining \\gnu in terms of itself:
|
|
1494
|
|
1495 \\newcommand{\\gnu}{a \\gnu} % This is wrong!
|
|
1496
|
|
1497 When TeX encounters this \\gnu command, it will keep chasing its tail
|
|
1498 trying to figure out what \\gnu should produce, and eventually run out
|
|
1499 of ``input stack''.
|
|
1500
|
|
1501 main memory size
|
|
1502 ================
|
|
1503 This is one kind of space that TeX can run out of when processing a
|
|
1504 short file. There are three ways you can run TeX out of main memory
|
|
1505 space: (1) defining a lot of very long, complicated commands, (2)
|
|
1506 making an index or glossary and having too many \\index or \\glossary
|
|
1507 commands on a single page, and (3) creating so complicated a page of
|
|
1508 output that TeX can't hold all the information needed to generate it.
|
|
1509 The solution to the first two problems is obvious: define fewer
|
|
1510 commands or use fewer \\index and \\glossary commands. The third problem
|
|
1511 is nastier. It can be caused by large tabbing, tabular, array, and
|
|
1512 picture environments. TeX's space may also be filled up with figures
|
|
1513 and tables waiting for a place to go. To find out if you've really
|
|
1514 exceeded TeX's capacity in this way, put a \\clearpage command in your
|
|
1515 input file right before the place where TeX ran out of room and try
|
|
1516 running it again. If it doesn't run out of room with the \\clearpage
|
|
1517 command there, then you did exceed TeX's capacity. If it still runs
|
|
1518 out of room, then there's probably an error in your file. If TeX is
|
|
1519 really out of room, you must give it some help. Remember that TeX
|
|
1520 processes a complete paragraph before deciding whether to cut the
|
|
1521 page. Inserting a \\newpage command in the middle of the paragraph,
|
|
1522 where TeX should break the page, may save the day by letting TeX write
|
|
1523 the current page before processing the rest of the paragraph. (A
|
|
1524 \\pagebreak command won't help.) If the problem is caused by
|
|
1525 accumulated figures and tables, you can try to prevent them from
|
|
1526 accumulating---either by moving them further towards the end of the
|
|
1527 document or by trying to get them to come out sooner. If you are
|
|
1528 still writing the document, simply add a \\clearpage command and forget
|
|
1529 about the problem until you're ready to produce the final version.
|
|
1530 Changes to the input file are likely to make the problem go away.
|
|
1531
|
|
1532 pool size
|
|
1533 =========
|
|
1534 You probably used too many cross-ref-erencing \\labels and/or defined
|
|
1535 too many new command names. More precisely, the labels and command
|
|
1536 names that you define have too many characters, so this problem can be
|
|
1537 solved by using shorter names. However, the error can also be caused
|
|
1538 by omitting the right brace that ends the argument of either a counter
|
|
1539 command such as \\setcounter, or a \\newenvironment or \\newtheorem
|
|
1540 command.
|
|
1541
|
|
1542 save size
|
|
1543 =========
|
|
1544 This occurs when commands, environments, and the scopes of
|
|
1545 declarations are nested too deeply---for example, by having the
|
|
1546 argument of a \\multiput command contain a picture environment that in
|
|
1547 turn has a \\footnotesize declaration whose scope contains a \\multiput
|
|
1548 command containing a ....")
|
|
1549
|
|
1550 ("Text line contains an invalid character." .
|
|
1551 "The input contains some strange character that it shouldn't. A mistake
|
|
1552 when creating the file probably caused your text editor to insert this
|
|
1553 character. Exactly what could have happened depends upon what text
|
|
1554 editor you used. If examining the input file doesn't reveal the
|
|
1555 offending character, consult the Local Guide for suggestions.")
|
|
1556
|
|
1557 ("Undefined control sequence." .
|
|
1558 "TeX encountered an unknown command name. You probably misspelled the
|
|
1559 name. If this message occurs when a LaTeX command is being processed,
|
|
1560 the command is probably in the wrong place---for example, the error
|
|
1561 can be produced by an \\item command that's not inside a list-making
|
|
1562 environment. The error can also be caused by a missing \\documentstyle
|
|
1563 command.")
|
|
1564
|
|
1565 ("Use of [^ ]* doesn't match its definition." .
|
|
1566 "It's probably one of the picture-drawing commands, and you have used
|
|
1567 the wrong syntax for specifying an argument. If it's \\@array that
|
|
1568 doesn't match its definition, then there is something wrong in an
|
|
1569 @-expression in the argument of an array or tabular
|
|
1570 environment---perhaps a fragile command that is not \\protect'ed.")
|
|
1571
|
|
1572 ("You can't use `macro parameter character \\#' in [^ ]* mode." .
|
|
1573 "The special character # has appeared in ordinary text. You probably
|
|
1574 meant to type \\#.")
|
|
1575
|
|
1576 ("Overfull \\\\hbox .*" .
|
|
1577 "Because it couldn't find a good place for a line break, TeX put more
|
|
1578 on this line than it should.")
|
|
1579
|
|
1580 ("Overfull \\\\vbox .*" .
|
|
1581 "Because it couldn't find a good place for a page break, TeX put more
|
|
1582 on the page than it should. ")
|
|
1583
|
|
1584 ("Underfull \\\\hbox .*" .
|
|
1585 "Check your output for extra vertical space. If you find some, it was
|
|
1586 probably caused by a problem with a \\\\ or \\newline command---for
|
|
1587 example, two \\\\ commands in succession. This warning can also be
|
|
1588 caused by using the sloppypar environment or \\sloppy declaration, or
|
|
1589 by inserting a \\linebreak command.")
|
|
1590
|
|
1591 ("Underfull \\\\vbox .*" .
|
|
1592 "TeX could not find a good place to break the page, so it produced a
|
|
1593 page without enough text on it. ")
|
|
1594
|
|
1595 ;; New list items should be placed here
|
|
1596 ;;
|
|
1597 ;; ("err-regexp" . "context")
|
|
1598 ;;
|
|
1599 ;; the err-regexp item should match anything
|
|
1600
|
|
1601 (".*" . "No help available")) ; end definition
|
|
1602 "A list of the form (\"err-regexp\" . \"context\") used by function
|
|
1603 \\{TeX-help-error} to display help-text on an error message or warning.
|
|
1604 err-regexp should be a regular expression matching the error message
|
|
1605 given from TeX/LaTeX, and context should be some lines describing that
|
|
1606 error")
|
|
1607
|
|
1608 (provide 'tex-buf)
|
|
1609
|
|
1610 ;;; tex-buf.el ends here
|