$ latex
This is pdfTeX, Version 3.14159265-2.6-1.40.18 (TeX Live 2017) (preloaded format=latex)
restricted \write18 enabled.
**\s666666
entering extended mode
LaTeX2e <2017-04-15>
Babel <3.10> and hyphenation patterns for 84 language(s) loaded.
! Undefined control sequence.
<*> \s
666666
? 2
<*> \s66
6666
?
在上面的例子中,输入 a 会2
做什么?为什么它会从未定义的控制序列中选择两个字符?
答案1
TeX 错误上下文行总是成对出现。在错误消息中:
! Undefined control sequence.
<*> \s
666666
?
第一行(以 结尾的行\s
)显示了 TeX 发现未定义的控制序列时看到的内容:\s
,所以那是控制序列,而不是\s666666
(因为数字通常不会成为控制序列名称:只有字母)。
现在关于2
你输入的:假设你输入了?
,TeX 会告诉你该怎么做:
phelype@phelype ~> tex
This is TeX, Version 3.14159265 (TeX Live 2020) (preloaded format=tex)
**\s666666
! Undefined control sequence.
<*> \s
666666
? ?
Type <return> to proceed, S to scroll future error messages,
R to run without stopping, Q to run quietly,
I to insert something,
1 or ... or 9 to ignore the next 1 to 9 tokens of input,
H for help, X to quit.
?
1
当您在 中输入数字时9
,TeX 将忽略接下来1
的9
标记。因此,当您输入 时2
,TeX 会忽略您输入的两个6
。事实上,如果我2
像您一样在上面的提示中输入 :
? 2
<*> \s66
6666
?
TeX 会按照承诺执行,忽略接下来的两个标记(请记住,TeX 已经处理的内容在第一行(\s66
),其余的在下面的行),然后再次等待输入。如果我点击<return>
这里,TeX 将继续处理其余的输入(6666
),并提示你*
,此时你可以输入\bye
,TeX 将完成其工作,生成的.dvi
文件将只包含以下6666
内容:
注意:我tex
在示例中使用它来避免 LaTeX 的Missing \begin{document}
错误,但原理是一样的。