\end{filecontents} e \input{} na mesma linha

\end{filecontents} e \input{} na mesma linha

Este código gera uma saída que mostra o conteúdo deexcerpt1.tex

\documentclass{article}
\usepackage{filecontents}

\begin{document}
Pragraph is starting.
\begin{filecontents}{excerpt1.tex}
Part that must be in two documents.
\end{filecontents}
\input{excerpt1.tex}
Paragraph ends.
\end{document}

Este código não gera saída que mostre o conteúdo deexcerpt1.tex

\documentclass{article}
\usepackage{filecontents}

\begin{document}
Pragraph is starting.
\begin{filecontents}{excerpt1.tex}
Part that must be in two documents.
\end{filecontents}\input{excerpt1.tex}
Paragraph ends.
\end{document}

Eu me pergunto a razão por trás dessa situação. Encontrei esta anomalia num documento muito importante. Existe uma lista dessas advertências que devem ser levadas em consideração antes que ocorram erros irrecuperáveis?

Responder1

Conforme observado nos comentários, o texto até \end{filecontents}o final da linha é ignorado. Assim, o espaço antes do trecho não é causado por estar \inputna próxima linha. Na verdade, o espaço antes do trecho é causado pela quebra de linha após 'O parágrafo está começando'. A maneira mais simples de se livrar disso é usar sinais de porcentagem no final da linha. Da mesma forma, você precisa de porcentagens após 'dois documentos'. e \input{excerpt1.tex}para evitar um espaço após o trecho.

\documentclass{article}
\usepackage{filecontents}
\begin{document}
Paragraph is starting.%
\begin{filecontents}{excerpt1.tex}
Part that must be in two documents.% 
\end{filecontents}
\input{excerpt1.tex}%
Paragraph ends.
\end{document}

Um deles pode ser automatizado usando \ignorespaces.

\documentclass{article}
\usepackage{filecontents}
\newcommand\myinput[1]{\input{#1}\ignorespaces} 
Paragraph is starting.%  
\begin{filecontents}{excerpt1.tex}
Part that must be in two documents.% 
\end{filecontents}
\myinput{excerpt1.tex}
Paragraph ends.
\end{document}

informação relacionada