对于我正在研究的课程,我想在.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}