旧环境(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@ck
etex.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@ck
etex.sty
答案2
从filecontents
LaTeX 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 文件的外观也可能引起人们的兴趣,这样人们就可以找出正在使用的包版本等。