我如何控制报告哪些文件错误?

我如何控制报告哪些文件错误?

这是一个可以以两种方式生成错误的类。除非给出两个选项之一,否则它会产生错误,并且它还有一个始终会产生错误的命令。

\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{foo}[2014/05/06 foo]

\newif\iffoo@foo
\newif\iffoo@bar
\DeclareOption{foo}{\foo@footrue}
\DeclareOption{bar}{\foo@bartrue}
\ProcessOptions

\iffoo@foo
    \AtBeginDocument{foo}
\else
  \iffoo@bar
    \AtBeginDocument{bar}
  \else
    \PackageError{foo}{Always use foo or bar option}{Please}
  \fi
\fi

\newcommand*{\foobar}{
  \PackageError{foo}{The \protect\foobar\space command is obsolete}{}}
\endinput

文件

\documentclass{article}
\usepackage{foo}

\begin{document}

hello
\foobar

\end{document}

触发它们两个:

! Package foo Error: Always use foo or bar option.

See the foo package documentation for explanation.
Type  H <return>  for immediate help.
 ...                                              

l.16 ...foo}{Always use foo or bar option}{Please}

! Package foo Error: The \foobar command is obsolete.

See the foo package documentation for explanation.
Type  H <return>  for immediate help.
 ...                                              

l.7 \foobar

我希望第一个更像第二个。也就是说,我希望它指示\usepackage{foo}行而不是 sty 文件中的一行。毕竟,这是类的用户应该编辑的内容。

我该如何控制它?

答案1

你无法控制它,TeX 错误信息的最后一行是由底层 TeX 引擎发出的,显示了检测到错误时的位置。它不受宏层的控制

你唯一能做的就是改变检测到错误的位置,例如如果你使用

\AtBeginDocument{\PackageError{foo}{Always use foo or bar option}{Please}}

然后你得到

! Package foo Error: Always use foo or bar option.

See the foo package documentation for explanation.
Type  H <return>  for immediate help.
 ...                                              

l.4 \begin{document}

相关内容