我解决了我的问题,但我想知道它为什么会出现。
以下代码是我所拥有的代码的 MWE。它工作了很长时间,直到我更新了计算机上的许多软件。之后它就不再工作了,而且出现错误,我无法直接找到解决方案。
\documentclass{scrbook}
\usepackage{tikz}
\usetikzlibrary{external}
\tikzexternalize
\begin{document}
\tikzsetnextfilename{.tikz_external/fig1}%
\begin{tikzpicture}
\draw (0,0 ) -- (1,1);
\end{tikzpicture}
\end{document}
如果您注意到,我曾经将所有外部图形内容存储在文件夹中.tikz_external
。 过了很长时间,我才注意到这就是问题所在。 如果我删除文件夹名称中的点,一切都会恢复正常。
现在我想知道为什么这种行为会改变。此外,即使找到了问题,我也没有找到有关该行为的任何信息。难道没有任何地方描述过这一点吗?
编辑:我正在使用最新的 MikTex 发行版(2.9.6360)。
错误是
! I can't write on file `.tikz_external/fig1.md5'.
<to be read again>
\relax
l.10 \end{tikzpicture}
Please type another output file name
! Emergency stop.
<to be read again>
\relax
l.10 \end{tikzpicture}
*** (job aborted, file error in nonstop mode)
从这个错误中,我只知道 pdflatex 无法在文件上写入,但不知道为什么。正如我所说,在我更新发行版之前,一切都按预期运行。
答案1
您没有提供以下任何信息:
- 您收到了什么错误消息(如果有),或者它是否以其他方式无法工作;
- 您正在使用哪个 TeX 发行版。
因此,无法确定。
在当前的 TeX Live 安装中,代码失败的原因很简单,因为以点开头的路径属于 TeX 默认禁止作为输出流打开的路径之一。
这是确定的texmf.cnf
% Do we allow TeX \input or \openin (openin_any), or \openout % (openout_any) on filenames starting with `.' (e.g., .rhosts) or % outside the current tree (e.g., /etc/passwd)? % a (any) : any file can be opened. % r (restricted) : disallow opening dot files % p (paranoid) : as `r' and disallow going to parent directories, and % restrict absolute paths to be under $TEXMFOUTPUT. openin_any = a openout_any = p
p
的设置openout_any
告诉您 TeX 可以为输出流打开哪些文件,不能打开哪些文件;a
的设置openin_any
告诉您 TeX 可以为输入流打开哪些文件,不能打开哪些文件。
显然,p
禁止写入点文件。该问题与外部化无关。触发该错误的原因很简单,因为您无法写入此类文件,并解释了原因。
pdflatex: Not writing to .tikz_external/fig1.md5 (openout_any = p).
! I can't write on file `.tikz_external/fig1.md5'.
<to be read again>
\relax
l.41 \end{tikzpicture}
(Press Enter to retry, or Control-D to exit; default file extension is `.tex')
Please type another output file name: