video-react报错pause没有被定义_[水一篇] LaTeX 内核定义的报错信息汇总

可能不少用户觉得 LaTeX 的报错很迷。这一点在我水的上一篇帖子中讨论过一些原因。很迷的报错多数是底层的排版引擎,也就是 TeX 程序给出的,报错时通常接触到了非常底层的命令,而 TeX 又没有“函数调用栈”的说法,因此错误信息让人一头雾水。这类报错的错误信息是直接写进 TeX 源码的,如最常见的 ! Undefined control sequence.

另一方面,TeX 的 errmessage 命令提供了类似其它语言中抛出异常的机制。LaTeX 内核将此命令封装成 GenericError 命令,并进一步封装成供内核使用的 @latex@error 内部命令以及供宏包和文档类作者使用的 PackageErrorClassError 命令。这些命令的特殊性体现在错误信息上,比如内核定义的各种报错信息以 LaTeX error: 开头。

其它语言通常在抛出错误或异常之后直接中断编译/解释而退出,但TeX的nonstopmode/batchmode等模式会选择忽视错误一直编译下去(这也是不少LaTeX IDE默认给编译程序加上的命令行选项),于是一步错步步错,后面一连串错误就完全看不懂了。然则,一般而言第一条错误信息是最重要的

本文汇总了内核中由 @latex@error 定义的错误信息,顺序大致按照内核源码 latex.ltx 中出现的先后顺序。

1) Command foo undefined.

使用 renewcommand 宏重定义一个未定义的控制序列。

2) Environment bar undefined.

使用 renewenvironment 宏重定义一个未定义的环境,或用 begin 命令开启一个未定义的环境。

3) The control sequence 'foo' is undefined! There is nothing here to make robust.

使用 MakeRobust 宏处理一个未定义的控制序列。MakeRobust 是较新版本内核添加的一个宏,用于加强原有命令为“健壮命令”。健壮命令相关的内容可以单开一个帖子写了,此处按下不表。

4) Command foo already defined. Or name end... illegal, see p.192 of the manual.

使用 newcommand 宏定义一个已经定义过的命令,或者使用 newcommand 宏定义头三个字母为 end 的命令(后者主要考虑不与环境的定义冲突,因为在定义环境 foo时总会定义一对命令 fooendfoo)。如果用户没有亲自用 newcommand 宏定义过命令,则一般归因于宏包之间的冲突。

5) There's no line here to end.

在垂直模式下(可通俗地理解为段落之间)使用了 newline 等换行命令。换言之,需要先用一些文字或命令开启一个新的段落,而后才能换行。

6) No counter 'foo' defined.

以未定义的计数器作为某些命令的参数(如 setcounterstepcounter 等宏的参数, newtheorem 的可选参数等)。

7) Counter too large.<

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值