自定义辅助文件的名称:安全的做法?

自定义辅助文件的名称:安全的做法?

我维护一个包(morewrites) 需要临时辅助文件才能运行(立即写入和读取)。此辅助文件当前名为\jobname.mw,并且用户要求我允许自定义,因为此扩展与其他工具冲突。

我的第一个想法是提供一个形式的界面\morewritessetup{file=...},其中...用用户想要使用的名称替换。

但是,我担心用户会\morewritessetup{file=\jobname}犯错误。当我的代码写入文件时\jobname,它会破坏源文件\jobname.tex,用户会非常不高兴。这实际上是一个更大的问题:最好确保我没有破坏用户的任何现有文件。不幸的是,我无法在写入文件之前简单地检查文件是否是新的,因为只有在第一次对文件运行 TeX 时才会出现这种情况。

什么是安全的方法?

答案1

当 TeX 被要求开始写入文件时,它本身不会做任何检查。这可能会带来不良后果。

例如,使用会导致覆盖已有的同名书目数据库。在一个我不愿提及的操作系统上,这样做\begin{filecontents}{references.bib}会导致 的破坏,因为系统不允许在文件名中使用多个句点,并且当 TeX 尝试在 上写入时,操作系统会丢弃第二个扩展名。\usepackage{filecontents}\include{file.tex}file.texfile.tex.aux

第一个问题可以通过以下方法解决避免 \usepackage{filecontents}除非确信它不会覆盖必要的文件。第二个问题可以通过修复来解决,\include这样当参数包含.tex扩展名时它就会停止(在这种情况下,无论如何都不应该使用扩展名)。

每次写出辅助文件时都会出现问题。在我的gmp包中,使用的文件名\jobname+mp<number>应该足够安全;因为imakeidx我依赖.idx.ind.ilg扩展名。

解决您问题的一个可能方法是查看将被覆盖的文件的前几行(如果该文件已经存在)。如果它们与某种模式匹配,您几乎可以肯定该文件是您的包在上次运行时创建的。

相关内容