как предотвратить сбой \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, это имеет побочный эффект изменения catcode @ во время myfile.texчтения. Это вряд ли будет иметь какие-либо неблагоприятные последствия, но этого можно избежать следующим образом:

\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}{}{}

Более подробную информацию об этом макросе см. в texdoc source2eего описании в ltfiles.dtxразделе 19.Обработка файлов

Связанный контент