当 \include 文件丢失或拼写错误时,如何强制 LaTeX 出错?

当 \include 文件丢失或拼写错误时,如何强制 LaTeX 出错?

我唯一需要编译的文件Main.tex由以下行指定:

\include{transformtaion}

使用以下命令进行编译,没有任何错误:

pdflatex -synctex=1 -interaction=nonstopmode Main.tex

但是生成的 PDF 文件是空的。经过大量时间的考虑,我发现问题出在文件的拼写错误上,即转换甲基安替比离子代替转换离子
问题是如何强制编译过程给出一个编译时错误来指出拼写错误问题。

答案1

它的一项功能(可能不是那么好)\include就是在终端上告诉你文件不存在。你会得到这样的一行代码:

No file transformtaion.tex.

如果不留意的话很难发现。

重新定义内部结构\include是不可取的,因此您可以使用钩子include来明确检查文件是否存在,并相应地出现错误:

\documentclass{article}

\makeatletter
\def\mkfilename#1{%
  \if\relax\detokenize\expandafter{#1}\relax\else#1/\fi}
\AddToHook{include/before}%
  {\IfFileExists{\mkfilename\CurrentFilePath\CurrentFile}{}
     {\GenericError{}{Error: File \mkfilename\CurrentFilePath\CurrentFile.tex not found!}{\@gobble}{}}}
\makeatother

\begin{document}
\include{transformtaion}
\end{document}

然后你会看到一个错误:

! Error: File transformtaion.tex not found!.

Type  H <return>  for immediate help.
 ...

l.15 \include{transformtaion}

?

在旧版本中(2020-10-01 之前),没有内置对include钩子的支持,你可以使用filehookcurrfile

\documentclass{article}

\usepackage{filehook}
\usepackage{currfile}
\makeatletter
\AtBeginOfIncludes
  {\IfFileExists{\currfiledir\currfilebase.tex}{}
     {\GenericError{}{Error: File \currfiledir\currfilebase.tex not found!}{\@gobble}{}}}
\makeatother

\begin{document}
\include{transformtaion}
\end{document}

相关内容