como evitar que \input falhe se o arquivo estiver faltando?

como evitar que \input falhe se o arquivo estiver faltando?

Eu li aqui (segundo comentário à pergunta)

Quando devo usar \input vs. \include?

que \@input"não gera erro se o arquivo não existir".

Se eu tentar

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

Eu realmente não entendofatalerro, mas ainda recebo 3 erros de compilação e, mais importante, meu pdf contém a palavra "inputtoBeIncluded.tex".

Existe uma maneira simples deignorar completamenteo comando de entrada se o arquivo de entrada não existir?

Muito obrigado

Responder1

Você precisa adicionar \makeatletterpara habilitar o uso do símbolo @em uma macro.

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

\end{document}

EDITAR

Conforme observado por @Emil Jeřábek, isso tem o efeito colateral de alterar o código de gato de @ enquanto myfile.texestá sendo lido. É improvável que isto tenha quaisquer efeitos adversos, mas pode ser evitado da seguinte forma:

\documentclass{article}

\makeatletter
\let\conditionalinput\@input
\makeatother

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

Dito isto, provavelmente é melhor usar \InputIfFileExists{file}{}{}, conforme sugerido por @daleif.

Responder2

Em vez de usar \@inputo melhor método é provavelmente usar

\InputIfFileExists{file}{then}{else}

Isso será executado \inputse fileexistir e, em seguida, executará o código em then. Se o arquivo não existir, o código elseserá executado. Você poderia, por exemplo, adicionar um aviso na elseparte, apenas para informar que este arquivo específico não foi encontrado.

Se você quiser apenas uma entrada piscante se o arquivo existir, basta usar

\InputIfFileExists{file}{}{}

Para mais detalhes sobre esta macro veja- texdoc source2ea descrita na ltfiles.dtxparte, seção 19,Manipulação de arquivos

informação relacionada