我想知道是否有方法可以测试文件是否已经输入过,\input
以避免多次输入,这可能会导致LaTeX Error: Command ... already defined.
例子
\documentclass{article}
\input{a.tex}
\input{b.tex}
%#1-files
\newcommand\inputfiles[1]{
%if a certain file in #1 has been input before, then doing noting; else if the file exists then \input this file manually like \iffileexist \input{...}\else warning message and program breaks down\fi.
}
% I'd like the macro \inputfiles can work both in preambel and in main document, just like \input.
\begin{document}
\inputfiles{a.tex,b.tex,c.tex}
%Since a.tex and b.tex have been input in preamble, here only c.tex will be input if c.tex exists.
\end{document}
答案1
我实际上没有看到用例,因此不会费心扩展下面的代码来处理以逗号分隔的tex
文件列表。
\documentclass{article}
\usepackage{etoolbox}
\makeatletter
\newcommand\inputonce[1]{\ifcsdef{prior@input@check#1}{\typeout{#1 already loaded}}{\input{#1}\expandafter\newcommand\csname prior@input@check#1\endcsname{}}}
\makeatother
\begin{document}
\input{a}
\input{a}
\inputonce{a}
\inputonce{a}
\end{document}
上述代码a.tex
总共会加载三次:前两次从 开始\input{a}
。第三次从 第一次出现 开始\inputonce{a}
。第二次\inputonce{a}
调用时文件未加载,控制台上显示一条消息,表明文件a.tex
已加载。
注意:这是基于提供给的文件名\input
。因此,执行此操作\inputonce{a}
后将\inputonce{a.tex}
不会检测到碰撞。