
Я прочитал здесь (второй комментарий к вопросу)
Когда следует использовать \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.Обработка файлов