\end{filecontents} и \input{} на одной строке

\end{filecontents} и \input{} на одной строке

Этот код генерирует вывод, который показывает содержимоеexcerpt1.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}

Этот код не генерирует вывод, показывающий содержимоеexcerpt1.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}

Интересно, в чем причина этой ситуации. Я столкнулся с этой аномалией в очень важном документе. Есть ли список таких оговорок, которые необходимо учитывать, прежде чем возникнут непоправимые ошибки?

решение1

Как отмечено в комментариях, текст до \end{filecontents}конца строки игнорируется. Таким образом, пробел перед отрывком не вызван наличием \inputна следующей строке. Фактически пробел перед отрывком вызван разрывом строки после 'Paragraph is started.' Самый простой способ избавиться от этого — использовать знаки процентов в конце строки. Аналогично, вам нужны проценты после 'two documents.' и \input{excerpt1.tex}для предотвращения пробела после отрывка.

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

Один из них можно автоматизировать с помощью \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}

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