如果在自定义辅助文件中写入警告,则忽略警告(但如果在 .aux 文件中写入则不会)

如果在自定义辅助文件中写入警告,则忽略警告(但如果在 .aux 文件中写入则不会)

对于我正在研究的课程,我想在.log文件中很早就显示一些警告。

在以下位置写入相应的\ClassWarning\ClassWarningNoLine命令:

  • .aux文件没有问题,但缺点是该文件至少被读取两次(在文档的开始和结束处),因此警告会重复,
  • 自定义的辅助文件是可以的,但是用 \input(或\InputIfFileExists)读取此文件不起作用:会显示任何内容,我的问题是:为什么?

下面是一个显示问题的 MWE:.log文件包含Warning from .aux file.(两次)但不包含Warning from .foo file.

\begin{filecontents*}{myclass.cls}
\NeedsTeXFormat{LaTeX2e}
\RequirePackage{etoolbox}%
\LoadClass{article}
%
\newwrite\foofile
\immediate\openout\foofile=\jobname.foo
%
\write\@auxout{%
  \protect\ClassWarningNoLine{myclass}{%
    Warning from .aux file%
  }%
}%
\write\foofile{%
  \protect\ClassWarningNoLine{myclass}{%
    Warning from .foo file%
  }%
}%
\InputIfFileExists{\jobname.foo}{}{}
\endinput
\end{filecontents*}
%
\documentclass{myclass}
\begin{document}
\ref{bar}
\end{document}

答案1

\immediate\write\foofile{%
  \string\ClassWarningNoLine{myclass}{%
    Warning from .foo file%
  }%
}%
\immediate\closeout\foofile
\InputIfFileExists{\jobname.foo}{}{}

答案2

对于写信给 foo 你想要

\immediate\write\foofile{%

或者写入被延迟(在这种情况下是永远延迟)。

啊,我本来想补充一下(但 Herbert 已经说过了),你也想关闭这个文件

对于写入辅助设备,有多种方法可以抑制第二次使用,例如

\begin{filecontents*}{myclass.cls}
\NeedsTeXFormat{LaTeX2e}
\RequirePackage{etoolbox}%
\LoadClass{article}
%
\newwrite\foofile
\immediate\openout\foofile=\jobname.foo
%
\write\@auxout{%
\string\ifx\string\AtEndDocument\string\@firstofone
\string\else
  \protect\ClassWarningNoLine{myclass}{%
    Warning from .aux file%
  }%
\string\fi
}%
\immediate\write\foofile{%
  \protect\ClassWarningNoLine{myclass}{%
    Warning from .foo file%
  }%
}%
\immediate\closeout\foofile
\InputIfFileExists{\jobname.foo}{}{}
\endinput
\end{filecontents*}
%
\documentclass{myclass}
\begin{document}
\ref{bar}
\end{document}

相关内容