pdflatex:如何在非交互模式下打印 \PackageError 或 \ClassError 文本的帮助?

pdflatex:如何在非交互模式下打印 \PackageError 或 \ClassError 文本的帮助?

我以非交互式模式(或)pdflatex运行miktex (通常从 make 等调用它)。如果发生错误,我会得到:latexmk-interaction=errorstopmode-interaction=nonstopmode

Class XXX Error: <Error Text>

See the XXX class documentation for explanation.
Type  H <return>  for immediate help

并根据模式pdflatex继续或停止而不打印附加帮助。有没有办法同时打印附加帮助?

Google 帮不上什么忙。我找到的唯一提示是使用交互模式(我不想这么做)。

我发现这些消息是由\GenericErrorlatex2e 内核触发的宏2e通过\ClassError\PackageError。不幸的是,帮助\GenericError仅限于:

将错误消息打印到日志文件,然后打印“更多信息”行。如果用户按“h”,则会显示帮助文本。

查看latex2e来源似乎帮助文本被转发到\errhelp 来源。搜索 miktex 的来源让我找到了pdftex.web,其中表示

@ If \.{\\errmessage} occurs often in |scroll_mode|, without user-defined
\.{\\errhelp}, we don't want to give a long help message each time. So we
give a verbose explanation only once.

这表明我应该至少看到一次长消息。但这似乎没有发生。我做错了什么吗?有办法打开它吗?我用自己的方法\PackageError来确保帮助实际上没有被打印出来。

答案1

您无需执行任何操作。在批处理模式下,始终会记录帮助文本。

这是 texlive 但 miktex 应该相同。

测试文档:

\documentclass{article}

\begin{document}

\PackageError{zzzz}{Main text}{help text}

\end{document}

以批处理模式运行,终端显示:

$ pdflatex --interaction=batchmode cc869
This is pdfTeX, Version 3.14159265-2.6-1.40.21 (TeX Live 2020) (preloaded format=pdflatex)
 restricted \write18 enabled.
entering extended mode

即没有交互,也没有输出,但日志显示

! Package zzzz Error: Main text.

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

l.5 \PackageError{zzzz}{Main text}{help text}

help text

也就是说,帮助文本?会在交互模式下出现提示的地方显示。

答案2

您可以重新定义\PackageError在终端输出的第一部分中也显示第三个参数(详细错误)。第三个参数可以\GenericError更改为空格字符,以防止在日志文件中打印两次详细错误(但其中会有一行额外的空格)。

请注意,当您在正常模式下编译时这可能会造成混淆,因为系统会提示您按下H但不会显示任何额外的帮助。

梅威瑟:

\documentclass{article}

\makeatletter
\def\PackageError#1#2#3{\GenericError{(#1)\@spaces \@spaces \@spaces \@spaces }{Package #1 Error: #2}{See the #1 package documentation for explanation. Detailed error: #3}{ }}
\makeatother
\begin{document}
abc
\PackageError{mypackage}{custom error}{more detailed description}
\end{document}

结果:

$ pdflatex -interaction=nonstopmode myfile.tex 
This is pdfTeX, Version 3.14159265-2.6-1.40.18 (TeX Live 2017/Debian) (preloaded format=pdflatex)
 restricted \write18 enabled.
entering extended mode
(./myfile.tex
LaTeX2e <2017-04-15>
Babel <3.18> and hyphenation patterns for 84 language(s) loaded.
(/usr/share/texlive/texmf-dist/tex/latex/base/article.cls
Document Class: article 2014/09/29 v1.4h Standard LaTeX document class
(/usr/share/texlive/texmf-dist/tex/latex/base/size10.clo)) (./myfile.aux)

! Package mypackage Error: custom error.

See the mypackage package documentation for explanation. Detailed error: more d
etailed description
Type  H <return>  for immediate help.
 ...                                              

l.8 ...e}{custom error}{more detailed description}

[1{/var/lib/texmf/fonts/map/pdftex/updmap/pdftex.map}] (./myfile.aux) )
(see the transcript file for additional information)</usr/share/texlive/texmf-d
ist/fonts/type1/public/amsfonts/cm/cmr10.pfb>
Output written on myfile.pdf (1 page, 10201 bytes).
Transcript written on myfile.log.

相关内容