\begin{filecontents}{tabelle.tex} 不会覆盖现有文件

\begin{filecontents}{tabelle.tex} 不会覆盖现有文件

旧环境(2019 年 10 月之前)

 \usepackage{filecontents}
 \begin{filecontents}{tabelle.tex}
  ... some text ...
 \end{filecontents}`

将覆盖现有文件tabelle.tex

昨天我在 debian sid 中​​更新之后,它就不再起作用了。

我删除了它,\usepackage{filecontents}因为该功能现在应该在 LaTeX 内核内。

filecontents不会覆盖我的文件(日志中有相应的消息):

LaTeX Warning: File 'tabelle.tex' already exists on the system.
               Not generating it from this source.

尝试强制覆盖会 \begin{filecontents}[overwrite]{tabelle.tex}导致错误:

! LaTeX Error: Trying to overwrite 'kivitendo-print7y2OSd.tex'.

因此它看起来像是试图覆盖包含的文件。

这是一个错误还是我遗漏了一点?

2019 年 11 月 9 日编辑:

最小示例:

\documentclass{article}
\usepackage{etex}
\begin{filecontents}[overwrite]{addfile.tex}
    \centering{Hello World!}
\end{filecontents}
\begin{document}
    Just a test.
\end{document}

显然,这是\usepackage{etex}导致错误的原因。Web 应用程序 kivitendo 使用 latex 代码。在我的简短测试中,我发现删除包“etex”没有任何问题。
之后,对我来说它就可以正常工作了。

答案1

主要区别在于,\ch@cketex.sty 重新启用了旧定义

可以通过以下方式避免错误

\documentclass{article}
\makeatletter
\let\zzz\ch@ck
\usepackage{etex}
\let\ch@ck\zzz
\makeatother

\begin{filecontents}[overwrite]{addfile.tex}
    \centering{Hello World!}
\end{filecontents}
\begin{document}
    Just a test.
\end{document}

但更好的解决办法是干脆不使用etex.sty它,它不应该在 2015 年之后编写的任何文档中使用,并且 2015 年之前编写的任何文档都不能使用\begin{filecontents}[overwrite]

Ulrike 在 bug tracker 上打开了一个问题,我们或许可以调整包中etex.sty的定义,如上所述,但任何更改都可能影响与其他包的兼容性,假设原始定义,而与此类包的兼容性是这些天唯一的原因,所以我不确定。\ch@cketex.sty

答案2

filecontentsLaTeX 2ε 2019-10-01 补丁级别 1 开始,用于\ifeof检查相关文件是否存在,您可以通过在删除表示-read-handle的令牌后临时重新定义\ifeof交付来超越文件存在性检查:\iftrue\ifeof

\NeedsTeXFormat{LaTeX2e}[2019-10-01 Patch level 1]
\documentclass{article}

\begingroup
\global\let\savedifeof=\ifeof
\def\ifeof#1{\global\let\ifeof=\savedifeof\iftrue}%
\begin{filecontents}{tabelle.tex}
... some text ...
\end{filecontents}
\endgroup

\begin{document}
Bla
\end{document}

我展示这个只是为了在玩最新的新奇事物时获得乐趣。

我不推荐将其用于严肃的工作。

相反,我强烈建议追踪错误行为的原因。

为此,需要一个可编译的完整最小示例,通过它可以重现错误行为。
\listfiles并且 .log 文件的外观也可能引起人们的兴趣,这样人们就可以找出正在使用的包版本等。

相关内容