summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/doc/plain/impatient-cn/errors.tex
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/doc/plain/impatient-cn/errors.tex')
-rw-r--r--Master/texmf-dist/doc/plain/impatient-cn/errors.tex575
1 files changed, 575 insertions, 0 deletions
diff --git a/Master/texmf-dist/doc/plain/impatient-cn/errors.tex b/Master/texmf-dist/doc/plain/impatient-cn/errors.tex
new file mode 100644
index 00000000000..1d2369b60b9
--- /dev/null
+++ b/Master/texmf-dist/doc/plain/impatient-cn/errors.tex
@@ -0,0 +1,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