如何以交互方式使用 \errorcontextlines?

如何以交互方式使用 \errorcontextlines?

第 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=。(所以它没有效果。)

相关内容