我想filecontents
在我的文档中使用该环境。我收到警告
LaTeX Warning: File `test.txt' already exists on the system.
Not generating it from this source.
pdfLaTeX
如果我多次运行以下操作
\documentclass{article}
\begin{filecontents}{\jobname.txt}
Hello World
\end{filecontents}
\begin{document}
\input{\jobname.txt}
\end{document}
警告很明显,第一遍创建了文件,所以后续的遍历会导致警告。我以为我可以用 来消除警告IfFileExists
。问题是
\documentclass{article}
\IfFileExists{\jobname.txt}{}{
\begin{filecontents}{\jobname.txt}
Hello World
\end{filecontents}
}
\begin{document}
\input{\jobname.txt}
\end{document}
出现错误
! LaTeX Error: Missing \begin{document}.
在第一遍和后续的几遍中。我做错了什么?
答案1
您可以使用此技巧来避免将filecontents
环境放在括号内,这是导致错误的原因:
\begingroup\newif\ifmy
\IfFileExists{\jobname.txt}{}{\mytrue}
\ifmy
\begin{filecontents}{\jobname.txt}
Hello World
\end{filecontents}
\fi\endgroup
答案2
这可能并不完全是你想要的,因为你的问题更多的是关于“如何做”而不是“完成它”。然而,在感兴趣的问题中,这里有一种覆盖现有文件的方法,而不必担心 LaTeX 发出的覆盖警告:
\documentclass{article}
\usepackage{filecontents}% http://ctan.org/pkg/filecontents
\usepackage{silence}% http://ctan.org/pkg/silence
\WarningFilter{latex}{Overwriting file}% Remove LaTeX warnings starting with "Overwriting file"
\begin{filecontents*}{\jobname.txt}
Hello World
\end{filecontents*}
\begin{document}
\input{\jobname.txt}
\end{document}
这filecontents
包裹提供filecontents*
覆盖文件(如果文件已存在)的功能。silence
包裹通过以下方式吞噬 LaTeX 中以“覆盖文件”开头的警告
\WarningFilter{latex}{Overwriting file}
尽管使用了,但写作filecontents
仍然是与 LaTeX 相关的警告。