如何测试文件是否曾被 \input 输入过

如何测试文件是否曾被 \input 输入过

我想知道是否有方法可以测试文件是否已经输入过,\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}不会检测到碰撞。

相关内容