1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575
|
% -*- coding: utf-8 -*-
% This is part of the book TeX for the Impatient.
% Copyright (C) 2003 Paul W. Abrahams, Kathryn A. Hargreaves, Karl Berry.
% See file fdl.tex for copying conditions.
\input macros
%\chapter{Making sense \linebreak of error messages}
\chapter{理解错误信息}
\chapterdef{errors}
%\codefuzz = 4pc % for this chapter only (in scope of \chapter)
%\bix^^{error messages}
%Interpreting \TeX's error messages can sometimes
%be like going to your physician
%with a complaint that you're feeling fatigued and being handed,
%in response,
%a breakdown of your blood chemistry. The explanation of your distress
%is probably there, but it's not easy to figure out what it is.
%A few simple rules will go a long way in helping you to understand \TeX's
%error messages and get the most benefit from them.
\codefuzz = 4pc % for this chapter only (in scope of \chapter)
\bix^^{错误信息}
解释 \TeX\ 的错误信息有时候就像,
你跟医生抱怨你感觉疲乏无力,医生却递给你一份血生化细目表。
对你的痛苦的解释也许就在那里,但却不容易弄清楚它是什么。
掌握一些简单规则对你理解 \TeX\ 错误信息并从中受益将大有帮助。
%Your first goal should be
%to understand what you did that caused \TeX\ to complain.
%Your second goal (if you're working interactively)
%should be to catch as many errors as you can in a single run.
你的第一个目标应当是理解什么东西导致 \TeX\ 报错。
第二个目标(如果是交互式使用 \TeX )应当是在一次运行中捕获尽可能多的错误。%
\footnote{译注:本章的各个节标题为译者所加。}
\section{第一个例子}
%Let's look at an example. Suppose that your input
%contains the line:
%\csdisplay
%We skip \quid a little bit.
%|
%You meant to type `|\quad|', but you typed `|\quid|' instead.
%Here's what you'll get from \TeX\ in response:
%\csdisplay
%!! Undefined control sequence.
%l.291 We skip \quid
% a little bit.
%?
%|
%This message will appear both at your terminal and in your log file.
%^^{log file//error messages}
%The first line, which always starts with an exclamation point (|!!|),
%tells you what the problem is. The last two lines before the `|?|' prompt
%(which in this case are also
%the next two lines) tell you how far \TeX\ has gotten
%when it found the error.
%It found the error on line $291$ of the current input file,
%and the break between the two message lines indicates
%\TeX's precise position within line $291$, namely, just after |\quid|.
%The current input file is the one just after the most recent unclosed
%left parenthesis in the terminal output of your run (see \xref{infiles}).
我们来看一个例子。假设你的输入中包含下面这行:
\csdisplay
We skip \quid a little bit.
|
你本想输入 `|\quad|',却输入成 `|\quid|'。
此时 \TeX\ 将给出下面的信息:
\csdisplay
!! Undefined control sequence.
l.291 We skip \quid
a little bit.
?
|
此信息将同时出现在终端上和日志文件中。
^^{日志文件//错误信息}
第一行始终以感叹号(|!!|)开头,告诉你出现了什么问题。
在 `|?|' 提示符之前的最后两行(在此例子中同样也是接下来的两行)%
告诉你 \TeX\ 在何处发现此错误。
它在当前输入文件的第 $291$ 行发现了错误,
两个信息行之间的断行表示 \TeX\ 在第 $291$ 行的精确位置,即在 |\quid| 后面。
当前输入文件是指,在运行时的终端输出上,
最接近的非闭合左圆括号后显示的文件(见\xref{infiles})。
%This particular error, an undefined control
%sequence, is one of the most common ones you can get.
%If you respond to the prompt with another~`|?|',
%\TeX\ will display the following message:
%{\hfuzz = 2in
%\csdisplay
%Type <return> to proceed, S to scroll future error messages,
%R to run without stopping, Q to run quietly,
%I to insert something, E to edit your file,
%1 or ... or 9 to ignore the next 1 to 9 tokens of input,
%H for help, X to quit.
%|
%}%
这种错误,即控制序列未定义,是你最常出现的错误之一。
如果你在提示符后键入另一个 `|?|',\TeX\ 将显示下列信息:
{\hfuzz = 2in
\csdisplay
Type <return> to proceed, S to scroll future error messages,
R to run without stopping, Q to run quietly,
I to insert something, E to edit your file,
1 or ... or 9 to ignore the next 1 to 9 tokens of input,
H for help, X to quit.
|
}%
%Here's what these alternatives mean:
%\ulist
%\li If you type \asciichar{return},
%\TeX\ will continue processing your document.
%In this case it will just ignore the |\quid|.
%\li If you type `|S|' (or `|s|'---uppercase and lowercase are equivalent
%here), \TeX\ will process your document without stopping \emph{except}
%if it encounters a missing file. Error messages will still appear at your
%terminal and in the log file.
%\li If you type `|R|' or `|r|',
%you'll get the same effect as `|S|' except that
%\TeX\ won't even stop for missing files.
%\li If you type `|Q|' or `|q|',
%\TeX\ will continue processing your document but
%will neither stop for errors nor display them at your terminal. The
%errors will still show up in the log file.
%\li If you type `|X|' or `|x|',
%\TeX\ will clean up as best it can, discard the page
%it's working on, and quit. You can still print or view the
%pages that \TeX\ has already processed.
%\li If you type `|E|' or `|e|', \TeX\ will clean up and terminate
%as it would for `|X|' or `|x|' and then enter your text editor,
%positioning you at the erroneous line.
%(Not all systems support this option.)
%\li If you type `|H|' or `|h|',
%you'll get a further explanation of the error displayed
%at your terminal and
%possibly some advice about what to do about it. This explanation will also
%appear in your log file. For the undefined control sequence above,
%you'll get:
%{\hfuzz = 2in
%\csdisplay
%The control sequence at the end of the top line
%of your error message was never \def'ed. If you have
%misspelled it (e.g., `\hobx'), type `I' and the correct
%spelling (e.g., `I\hbox'). Otherwise just continue,
%and I'll forget about whatever was undefined.
%|
%}
%\li If you type `|?|', you'll get this same message again.
%\endulist
这些选择各自的含义如下:
\ulist
\li 如果你键入 \asciichar{return},
\TeX\ 将继续处理你的文档。在此例子中它就忽略了 |\quid|。
\li 如果你键入 `|S|'(或者 `|s|'——这时候大小写是等价的),
\TeX\ 将继续处理你的文档且不再暂停,\emph{除非}找不到某文件。
但错误信息还是会出现在终端上和日志文件中。
\li 如果你键入 `|R|' 或 `|r|',
你将得到与 `|S|' 相同的结果,但此时 \TeX\ 即使找不到文件也不会暂停。
\li 如果你键入 `|Q|' 或 `|q|',
\TeX\ 将继续处理你的文档,且遇到错误后将不会再暂停,也不会在终端上显示。
错误信息还是会记录到日志文件中。
\li 如果你键入 `|X|' 或 `|x|',
\TeX\ 将尽力清理干净,丢弃正在构造的页面,并退出。
你仍然可以打印或查看 \TeX\ 已经生成的页面。
\li 如果你键入 `|E|' 或 `|e|',
\TeX\ 将如同 `|X|' 或 `|x|' 那样清理并中止,然后打开文本编辑器,跳转到错误所在的行。%
(并非所有系统都支持此选项。)
\li 如果你键入 `|H|' 或 `|h|',
你将在终端上看到对此错误的进一步解释,可能还有对此错误的一些建议。
这些信息同样会记录到你的日志文件中。
对于上述例子的未定义控制序列,你将得到下列信息:
{\hfuzz = 2in
\csdisplay
The control sequence at the end of the top line
of your error message was never \def'ed. If you have
misspelled it (e.g., `\hobx'), type `I' and the correct
spelling (e.g., `I\hbox'). Otherwise just continue,
and I'll forget about whatever was undefined.
|
}
\li 如果你键入 `|?|',你将得到和上面相同的信息。
\endulist
%\noindent
%The other two alternatives, typing `|I|' or a small integer, provide ways of
%getting \TeX\ back on the track so that your error won't cause further errors
%later in your document:
%\ulist
%\li If you type `|I|' or `|i|'
%followed by some text, then \TeX\ will insert
%that text as though it had occurred just after the point of the error,
%at the innermost level where \TeX\ is working.
%In the case of the example above, that means at \TeX's
%position in your original input, namely, just after `|\quid|'.
%Later you'll see an example that shows
%the difference between inserting something at the innermost level and
%inserting it into your original input. In the example above of the undefined
%control sequence, if you type:
%\csdisplay
%I\quad
%|
%\TeX\ will carry out the |\quad| command and produce a quad space
%where you intended to have one.
%\li If you type a positive integer less than $100$ (not less than $10$ as the
%message misleadingly suggests),
%\TeX\ will delete that number of tokens from the innermost
%level where it is working.
%(If you type an integer greater than or equal to $100$, \TeX\ will
%delete $10$ tokens!)
%\endulist
\noindent
另外两个选择,即键入 `|I|' 或一个小整数,
提供一种让 \TeX\ 回到正常轨道上的方法,
使得该错误不会在文档后面导致更多的错误:
\ulist
\li 如果你键入 `|I|' 或 `|i|' 并加上一些文本,
\TeX\ 将把文本插入错误位置之后,放在 \TeX\ 处理的最内层级。
在上面这个例子中,这表示在 \TeX\ 的原始输入的位置,即在 `|\quid|' 之后。
稍后我们将给出一个例子,说明把某些东西插入到最内层级与插入到原始输入的区别。
在上面这个控制序列未定义的例子中,如果你键入:
\csdisplay
I\quad
|
\TeX\ 将执行 |\quad| 命令并在你需要的地方生成一个全方间隔。
\li 如果你键入一个小于 $100$(错误信息让人误解为小于 $10$)的正整数,
\TeX\ 将从它处理的最内层级删除该数目的记号。%
(如果你键入大于或等于 $100$ 的整数,\TeX\ 将只删除 $10$ 个记号!)
\endulist
\section{第二个例子}
%Here's an example of another common error:
%\csdisplay
%Skip across \hskip 3cn by 3 centimeters.
%|
%The error message for this is:
%\csdisplay
%!! Illegal unit of measure (pt inserted).
%<to be read again>
% c
%<to be read again>
% n
%l.340 Skip across \hskip 3cn
% by 3 centimeters.
%|
%^^|<to be read again>|
%In this case \TeX\ has observed that `|3|' is followed by something that
%isn't a proper unit of measure, and so it's assumed the unit of measure to be
%points. \TeX\ will read the tokens of `|cn|' again and insert them into
%your input, which is not what you want. In this case you can get a better
%result by first typing `|2|' to bypass the `|cn|'.
%You'll get the message:
%\csdisplay
%<recently read> n
%
%l.340 Skip across \hskip 3cn
% by 3 centimeters.
%|
这里是另一种常见错误的例子:
\csdisplay
Skip across \hskip 3cn by 3 centimeters.
|
这个例子的错误信息为:
\csdisplay
!! Illegal unit of measure (pt inserted).
<to be read again>
c
<to be read again>
n
l.340 Skip across \hskip 3cn
by 3 centimeters.
|
^^|<to be read again>|
这里 \TeX\ 注意到 `|3|' 后面不是一个正确的度量单位,因此它假设该度量单位为点。
\TeX\ 将重新读取 `|cn|' 的记号并将它们插入你的输入中,而这并不是你想要的。
在这种情形下若想得到更好的结果,你可以先键入 `|2|' 以跳过 `|cn|'。
这样你将得到如下信息:
\csdisplay
<recently read> n
l.340 Skip across \hskip 3cn
by 3 centimeters.
|
%Now you can type
%`|I\hskip 3cm|' to get the skip you wanted (in addition to the |3pt| skip
%that you've already gotten).\footnote
%{By typing `|I\unskip\hskip 3cm|' you can get rid of the |3pt| skip.}
现在你可以键入 `|I\hskip 3cm|' 以得到你所要的间距(加上你已经得到的 |3pt| 间距)。%
\footnote{若改为键入 `|I\unskip\hskip 3cm|',你就可以去掉这个 |3pt| 的间距。}
\section{第三个例子}
%If you type something that's only valid in math mode, \TeX\ will switch over
%to math mode for you whether or not that's what you really wanted.
%For example:
%\csdisplay
%So \spadesuit s are trumps.
%|
%Here's \TeX's error message:
%\csdisplay
%!! Missing $ inserted.
%<inserted text>
% $
%<to be read again>
% \spadesuit
%l.330 So \spadesuit
% s are trumps.
%|
%Since the |\spadesuit| symbol is only allowed in math mode,
%\TeX\ has inserted a `|$|' in front of it.
%After \TeX\ inserts a token, it's positioned in \emph{front} of
%that token, in this case the `|$|', ready to read it.
%Typing `|2|' will cause \TeX\ to skip both the `|$|'
%and the `|\spadesuit|' tokens, leaving it ready to process the `|s|'
%in `|s are trumps.|'.
%(If you just let \TeX\ continue, it will typeset `|s are trumps|'
%in math mode.)
如果你输入某些仅可用于数学模式的内容,\TeX\ 将帮你切换到数学模式,
不管这是否你真正想要的。例如:
\csdisplay
So \spadesuit s are trumps.
|
下面是 \TeX\ 的错误信息:
\csdisplay
!! Missing $ inserted.
<inserted text>
$
<to be read again>
\spadesuit
l.330 So \spadesuit
s are trumps.
|
由于 |\spadesuit| 符号仅可在数学模式中使用,
\TeX\ 已经在它前面插入一个 `|$|'。
在插入某个记号之后,\TeX\ 位于该记号的\emph{前面},
在此情形中就是位于 `|$|' 前面,并准备读取输入。
键入 `|2|' 将让 \TeX\ 跳过 `|$|' 和 `|\spadesuit|' 记号,
让它准备处理 `|s are trumps.|' 中的 `|s|'。%
(若你只是让 \TeX\ 继续,它将在数学模式中排版 `|s are trumps|'。)
\section{第四个例子}
%Here's an example where \TeX's error diagnostic is downright wrong:
%\csdisplay
%\hbox{One \vskip 1in two.}
%|
%The error message is:
%\csdisplay
%!! Missing } inserted.
%<inserted text>
% }
%<to be read again>
% \vskip
%l.29 \hbox{One \vskip
% 1in two.}
%|
%^^|<inserted text>|
%The problem is that you can't use |\vskip| when \TeX\ is in
%restricted horizontal mode, i.e, constructing an hbox.
%But instead of rejecting the |\vskip|, \TeX\ has inserted a right brace
%in front of it in an attempt to close out the hbox.
%If you accept \TeX's correction, \TeX\ will complain again
%when it gets to the correct right brace later on. It will also complain
%about anything before that right brace that isn't allowed in vertical mode.
%These additional complaints will be particularly confusing
%because the errors they indicate are bogus, a
%result of the propagated effects of the inappropriate
%insertion of the right brace.
%Your best bet is to type `|5|', skipping past all the tokens
%in `|}\vskip 1in|'.
在下面这个例子中,\TeX\ 对错误的诊断是完全不正确的:
\csdisplay
\hbox{One \vskip 1in two.}
|
它给出的错误信息如下:
\csdisplay
!! Missing } inserted.
<inserted text>
}
<to be read again>
\vskip
l.29 \hbox{One \vskip
1in two.}
|
^^|<inserted text>|
问题在于,当 \TeX\ 位于受限水平模式中,即正在构建水平盒子时,不能使用 |\vskip|。
但 \TeX\ 不是丢掉 |\vskip|,而是在它前面插入一个右花括号,以结束该水平盒子。
如果你接受 \TeX\ 的修改,\TeX\ 遇到稍后的正确右花括号时将再次报错。
它还将对该右花括号之前的任何不能出现在竖直模式的东西报错。
这些额外的错误将是特别让人迷惑的,因为这些错误所说的都是假的,
它们是不恰当插入右花括号后产生的结果。
你的最佳做法是键入 `|5|' 以跳过在 `|}\vskip 1in|' 中的所有记号。
\section{第五个例子}
%Here's a similar example in which the error message is longer
%than any we've seen so far:
%\csdisplay
%\leftline{Skip \smallskip a little further.} But no more.
%|
%The mistake here is that |\smallskip| only works in a vertical mode.
%The error message is something like:
%\csdisplay
%!! Missing } inserted.
%<inserted text>
% }
%<to be read again>
% \vskip
%\smallskip ->\vskip
% \smallskipamount
%<argument> Skip \smallskip
% a little further.
%\leftline #1->\line {#1
% \hss }
%l.93 ...Skip \smallskip a little further.}
% But no more.
%|
%The error messages here give you a tour through the macros that are used in
%\plainTeX's implementation of |\leftline|---macros
%that you probably don't care about.
%The first line tells you that \TeX\ intends to cure the problem by
%inserting a right brace.
%\TeX\ hasn't actually read the
%right brace yet, so you can delete it if you choose to.
%Each component of the message after the first line
%(the one with the `!') occupies a pair of lines.
%Here's what the successive pairs of lines mean:
这里还有个相似的例子,它的错误信息比你之前看到的都要长:
\csdisplay
\leftline{Skip \smallskip a little further.} But no more.
|
错误在于 |\smallskip| 只能在竖直模式中使用。给出的错误信息如下:
\csdisplay
!! Missing } inserted.
<inserted text>
}
<to be read again>
\vskip
\smallskip ->\vskip
\smallskipamount
<argument> Skip \smallskip
a little further.
\leftline #1->\line {#1
\hss }
l.93 ...Skip \smallskip a little further.}
But no more.
|
这些错误信息带你巡视了在 \plainTeX\ 中用于实现 |\leftline| 的各个宏——%
这些宏也许是你并不在乎的。
第一行告诉你 \TeX\ 试图通过插入右花括号解决此问题。
\TeX\ 还未读到右花括号,因此若你想的话你可以删除它。
第一行(带 `!' 的那行)之后的信息每部分都由两行组成。
下面是各部分的两行信息的含义:
%\olist
%\li The first pair indicates that \TeX\ has inserted, but not yet read,
%a right brace.
%\li The next pair indicates that after reading the right brace, \TeX\ will
%again read a `|\vskip|' command (gotten from the macro definition
%of |\smallskip|).
%\li The third pair indicates that \TeX\ was expanding the |\smallskip|
%macro when it found the error. The pair also displays the definition of
%|\smallskip| and indicates how far \TeX\ has gotten in expanding and
%executing that definition. Specifically, it's just attempted
%unsuccessfully to execute the |\vskip| command. In general, a
%diagnostic line that starts with a control sequence followed by `|->|'
%indicates that \TeX\ has been expanding and executing a macro by that
%name.
%\li The fourth pair indicates that \TeX\ was processing a macro argument
%when it found the |\smallskip| and also indicates \TeX's position in that
%argument, i.e., it's just processed the |\smallskip| (unsuccessfully).
%By looking ahead to the next pair of lines
%we can see that the argument was passed to
%|\leftline|.
%\li The fifth pair indicates that \TeX\ was expanding
%the |\leftline|
%macro when it found the error.
%(In this example the error occurred while \TeX\ was
%in the middle of interpreting several
%macro definitions at different levels of expansion.)
%Its position after |#1| indicates that the last thing it saw was the
%first (and in this case the only) argument to |\leftline|.
%\li The last pair indicates where \TeX\ is positioned in your input file.
%Note that this position is well beyond the position where it's
%inserting the right brace and reading `|\vskip|' again.
%That's because \TeX\ has already read the entire argument to |\leftline|
%from your input file, even though it's only processed part of that argument.
%The dots at the beginning of the pair indicate a preceding part of the
%input line that isn't shown. This preceding part, in fact, includes
%the |\leftline| control sequence that made the |\vskip| illegal.
%\endolist
\olist
\li 第一对双行表示 \TeX\ 已经插入,但尚未读到的右花括号。
\li 第二对双行表示在读取右花括号后,
\TeX\ 将重新读取 `|\vskip|' 命令(它来自 |\smallskip| 宏的定义中)。
\li 第三对双行表示 \TeX\ 是在展开 |\smallskip| 时发现的错误。
此部分也显示 |\smallskip| 的定义,并表示在展开和执行该定义时已经读到哪里。
具体地说,它是在执行|\vskip| 命令时失败的。
一般地,以控制序列加 `|->|' 开始的信息行表示 \TeX\ 已展开执行的宏的名称。
\li 第四对双行表示 \TeX\ 在处理宏参量时发现了 |\smallskip|,
同时也表示 \TeX\ 在该参量中的位置,即它正在处理 |\smallskip|(失败了)。
通过往前查找接下来两行,你可以看到此参量是传递给 |\leftline| 的。
\li 第五对双行表示 \TeX\ 是在展开 |\leftline| 宏是发现的错误。%
(在这个例子中,错误发生在 \TeX\ 解释多个不同层级的宏定义的中间。)%
在 |#1| 后面的位置表示它最后读取到的是 |\leftline| 的第一个(在这里也是唯一的)参量。
\li 最后对双行表示 \TeX\ 在你的输入文件的位置。
注意此位置远远超出它插入右花括号并重新读取 `|\vskip|' 的位置。
这是因为 \TeX\ 已经从输入文件读取了 |\leftline| 的完整参量,
即使它仅仅处理该参量的一部分。
这两行信息开头的圆点表示输入行前面一部分内容没显示出来。
前面那部分内容实际上就包括让 |\vskip| 变得不合法的 |\leftline| 控制序列。
\endolist
%\noindent
%In a long message like this, you'll generally find only the first line and the
%last pair of lines to be useful; but it sometimes helps to know what the other
%lines are about. Any text that you insert or delete will be
%inserted or deleted at the
%innermost level. In this example the insertion or deletion would occur
%just before the
%inserted right brace.
%Note in particular that in this case \TeX\ puts any text you might insert
%\emph{not} into your input text but into a macro definition
%several levels down. (The original macro definition is of course not modified.)
\noindent
在类似这样的长篇信息中,你通常发现只有第一行和最后两行是有用的;
但知道其他行是怎么回事有时候也有益处。
任何你插入或删除的文本将在最内层级中插入或删除。
在这里例子中,插入或删除将出现在 \TeX\ 插入的右花括号前。
特别要注意,在此情形中 \TeX\ 将\emph{不会}把你可能插入的文本放在你的输入文本中,
而是放在多层宏定义的最里面。%
(原始的宏定义当然并不会被改动。)
%You can use the ^|\errorcontextlines| command \ctsref{\errorcontextlines}
%to limit the
%number of pairs of error context lines that \TeX\ produces.
%If you're not interested in all the information that \TeX\ is giving you,
%you can set |\error!-contextlines| to $0$. That will give you just the first
%and last pairs of lines.
你可以用 ^|\errorcontextlines|\ctsref{\errorcontextlines}命令限制
\TeX\ 生成的错误信息双行的数目。
如果你并非对 \TeX\ 给你的所有信息都感兴趣,
你可以设定 |\error!-contextlines| 为 $0$。
这样错误信息将只有最前面两行和最后面两行。
%Finally,
%we'll mention two other indicators that can appear at the start of a pair
%of error message lines:
%\ulist
%\li ^|<output>| indicates that \TeX\ was in the middle of its output routine
%when this error occurred.
%\li ^|<write>| indicates that \TeX\ was in the middle of executing a
%|\write| command when this error occurred.
%\TeX\ will detect such an error when it is actually doing the |\write|
%(during a |\shipout|), rather than when it first encounters the |\write|.
%\endulist
最后,我们提及可能出现在错误信息行对开头的另外两个指示词:
\ulist
\li ^|<output>| 表示 \TeX\ 在它的输出例行程序中间遇到此错误。
\li ^|<write>| 表示 \TeX\ 在执行 |\write| 命令时遇到此错误。
\TeX\ 将在实际执行 |\write| 时才检测这样的错误(在 |\shipout| 时),
而不是在刚遇到 |\write| 命令时。
\endulist
%\eix^^{error messages}
%\endchapter
%\byebye
\eix^^{错误信息}
\ifoldeplain\else\ifcompletebook\else
\vskip4em{\sectionfonts\leftline{本章索引}}
\readindexfile{i}
\fi\fi
\endchapter
\byebye
|