如果文件丢失,如何防止 \input 失败?

如果文件丢失,如何防止 \input 失败?

我在这里读到(该问题的第二条评论)

何时应使用 \input 和 \include?

\@input如果文件不存在则不会抛出错误”。

如果我尝试

\documentclass{article}
\begin{document}
\@input{toBeIncluded.tex}
\end{document}

我确实没有致命的错误,但我仍然收到 3 个编译错误,更重要的是,我的 pdf 包含单词“inputtoBeIncluded.tex”。

有没有简单的方法完全忽略如果输入文件不存在,则执行输入命令吗?

多谢

答案1

您需要添加以启用宏中\makeatletter该符号的使用。@

\documentclass{article}
\begin{document}
abc
\makeatletter
\@input{myfile.tex}
\makeatother   

\end{document}

编辑

正如 @Emil Jeřábek 所指出的,这会产生副作用,即在myfile.tex读取时更改 @ 的 catcode。这不太可能产生任何不利影响,但可以按如下方式避免:

\documentclass{article}

\makeatletter
\let\conditionalinput\@input
\makeatother

\begin{document}
abc
\conditionalinput{fred.tex}
\end{document}

话虽如此,但最好还是使用\InputIfFileExists{file}{}{},正如@daleif 所建议的那样。

答案2

\@input更好的方法可能是使用

\InputIfFileExists{file}{then}{else}

\input如果文件存在,它将运行file,然后执行 中的代码then。如果文件不存在,则else执行 中的代码。例如,您可以在 部分中添加警告else,只是为了通知您未找到此特定文件。

如果您只是想要文件存在时闪烁输入,只需使用

\InputIfFileExists{file}{}{}

有关此宏的更多详细信息,请参见第 19 节texdoc source2e中的描述ltfiles.dtx文件处理

相关内容