¿Cómo evitar que \input falle si falta el archivo?

¿Cómo evitar que \input falle si falta el archivo?

Leí aquí (segundo comentario a la pregunta)

¿Cuándo debo usar \input frente a \include?

que \@input"no arroja un error si el archivo no existe".

si lo intento

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

De hecho no entiendofatalerror, pero aún así recibo 3 errores de compilación y, lo que es más importante, mi pdf contiene la palabra "inputtoBeIncluded.tex".

¿Existe una forma sencilla deignorar completamente¿El comando de entrada si el archivo de entrada no existe?

Muchas gracias

Respuesta1

Debe agregar \makeatletterpara habilitar el uso del símbolo @en una macro.

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

\end{document}

EDITAR

Como señaló @Emil Jeřábek, esto tiene el efecto secundario de cambiar el código cat de @ mientras myfile.texse lee. Es poco probable que esto tenga efectos adversos, pero podría evitarse de la siguiente manera:

\documentclass{article}

\makeatletter
\let\conditionalinput\@input
\makeatother

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

Dicho esto, probablemente sea mejor usar \InputIfFileExists{file}{}{}, como lo sugiere @daleif.

Respuesta2

En lugar de utilizar \@inputel mejor método probablemente sea utilizar

\InputIfFileExists{file}{then}{else}

Esto se ejecutará \inputsi fileexiste y luego ejecutará el código en formato then. Si el archivo no existe, elsese ejecuta el código. Por ejemplo, podría agregar una advertencia en la elseparte, solo para informarle que no se encontró este archivo en particular.

Si solo desea una entrada parpadeante si el archivo existe, simplemente use

\InputIfFileExists{file}{}{}

Para más detalles sobre esta macro vea texdoc source2eque se describe en la ltfiles.dtxparte, sección 19,Manejo de archivos

información relacionada