帮助 LaTeX 解决 Windows 在使用 filecontents.sty 时无法及时刷新文件缓存的问题

帮助 LaTeX 解决 Windows 在使用 filecontents.sty 时无法及时刷新文件缓存的问题

偶然,我在使用文件内容包:LaTeX 抱怨由文件内容环境不可写:

LaTeX Warning: Overwriting file `./data.tex'.
! I can't write on file `data.tex'.
<to be read again>
                   \relax
l.6 \begin{filecontents*}{data.tex}

只需按回车键即可。我怀疑 MS Windows 使用了一些文件访问控制机制,有时在另一个 LaTeX 编译尝试“锁定”并再次写入同一文件之前无法及时“解锁”文件(在具有 SSD 的相当快的系统上运行)。也许我的防病毒软件(Symantec)造成了这个问题,因为它忙于检查新创建的文件。

是否有任何技巧可以帮助 LaTeX 内部实现此机制?刷新文件缓存?延迟处理几毫秒?

细节:

诚然,我有一大批文档文件(超过 100 个),它们由单个 DOS 脚本在批处理作业中一个接一个地处理,该脚本随后对所有文件调用 LaTeX。一个进程连续多次调用 LaTeX。

典型的 LaTeX 文档文件如下所示:

\documentclass[varwidth=469pt]{standalone}
\begin{filecontents*}{data.tex}
  \begin{tabular}{|c|l|c|}
    Data & Parameter & Hex
  \end{tabular}
\end{filecontents*}

\begin{document}
  \input{data.tex}
\end{document}

典型的 DOS 脚本如下所示(但包含更多调用pdflatex):

D:
cd "/foo/bar/GeneratedImages"
pdflatex 27.tex
pdflatex 56.tex
pdflatex 161.tex
pdflatex 231.tex

目前,我对所有文档重复使用同一个文件,data.tex这就是出现此问题的原因。

如果没有这样的修复,我会尽量避免使用文件内容包(从而替换文本表经过表列)或者将其包含\jobname在数据文件的名称中(文件垃圾邮件)。

答案1

最简单的方法是使用以下命令使文件名唯一\jobname

\documentclass[varwidth=469pt]{standalone}
\begin{filecontents*}{\jobname-data.tex}
  \begin{tabular}{|c|l|c|}
    Data & Parameter & Hex
  \end{tabular}
\end{filecontents*}

\begin{document}
  \input{\jobname-data.tex}
\end{document}

根据您的示例,\jobname扩展为27,,,,。56161231

相关内容