第 34 页电子书据说:
通过在文件开头设置
\errorcontextlines=0
,可以减少报告的信息量;TEX 将只显示上下文行的顶部和底部对以及最多\errorcontextlines
两行附加项。(如果因此省略了任何内容,您还会看到 '...
'。)即使大部分上下文都被抑制,您也很有可能发现错误来源;如果没有,您可以说 'I\errorcontextlines=100\oops
' 并重试。(这通常会给您一个未定义的控制序列错误和大量上下文。)
让我们尝试修改第 3 行,story.tex
如下所示:
\errorcontextlines=0 \centerline{\bf A SHORT \ERROR STORY}
TeX 因这个错误而停止(由于 的设置而省略了一对上下文行\errorcontextlines
):
! Undefined control sequence.
<argument> \bf A SHORT \ERROR
STORY
...
l.3 ...nes=0 \centerline{\bf A SHORT \ERROR STORY}
现在假设我想查看省略的上下文行。根据上面的摘录电子书我输入以下内容以回应?
:
I\errorcontextlines=100\oops
但不是这样的
! Undefined control sequence.
<argument> \bf A SHORT \ERROR
STORY
\centerline #1->\line {\hss #1
\hss }
l.3 ...nes=5 \centerline{\bf A SHORT \ERROR STORY}
我明白了:
! Undefined control sequence.
<insert> \errorcontextlines=100\oops
...
l.3 ...nes=0 \centerline{\bf A SHORT \ERROR STORY}
为什么我没有通过\errorcontextlines
交互改变获得省略的上下文?
答案1
你似乎发现了一个错误TeXbook:缺少一个空格。如果您输入 ,它就会起作用I\errorcontextlines=100 \oops
。也就是说,在 TeX 显示之后:
(./story.tex
! Undefined control sequence.
<argument> \bf A SHORT \ERROR
STORY
...
l.3 ...nes=0 \centerline{\bf A SHORT \ERROR STORY}
?
你可以输入I\errorcontextlines=100 \oops
来获取:
? I\errorcontextlines=100 \oops
! Undefined control sequence.
<insert> \errorcontextlines=100 \oops
<argument> \bf A SHORT \ERROR
STORY
\centerline #1->\line {\hss #1
\hss }
l.3 ...nes=0 \centerline{\bf A SHORT \ERROR STORY}
?
这个想法是,在插入的标记列表(您输入的内容)中,TeX 必须先读取\errorcontextlines=100
(并处理它,即执行分配),然后才遇到\oops
并再次显示未定义的控制序列错误。但是对于\errorcontextlines=100\oops
,它不会停止扫描数字,100
并尝试扩展\oops
以防它扩展为以数字序列开头的内容,因此错误是不同的,更重要的是,在处理/执行命令之前会遇到错误\errorcontextlines=
。(所以它没有效果。)