pgf 外部化:文件夹名称开头的点存在问题

pgf 外部化:文件夹名称开头的点存在问题

我解决了我的问题,但我想知道它为什么会出现。

以下代码是我所拥有的代码的 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

您没有提供以下任何信息:

  1. 您收到了什么错误消息(如果有),或者它是否以其他方式无法工作;
  2. 您正在使用哪个 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: 

相关内容