\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下一行的空格引起的。事实上,摘录前的空格是由“段落开始”后的换行符引起的。消除此问题的最简单方法是在行尾使用百分号。同样,您需要在“两个文档”后使用百分号,以\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}

相关内容