我有一个包含两张 tikz 图片的文档,均使用合身库。只要我只有一张图片,一切就都正常:
\documentclass[a4paper]{article}
\usepackage[english]{babel}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\usetikzlibrary{fit}
\node(n){x};
\node [fit=(n),draw]{};
\end{tikzpicture}
\end{document}
一旦我添加第二张图片:
\documentclass[a4paper]{article}
\usepackage[english]{babel}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\usetikzlibrary{fit}
\node(n){x};
\node [fit=(n),draw]{};
\end{tikzpicture}
\begin{tikzpicture}
\usetikzlibrary{fit}
\node(n){x};
\node [fit=(n),draw]{};
\end{tikzpicture}
\end{document}
我收到以下错误
软件包 pgfkeys 错误:我不知道密钥“/tikz/fit”,我将忽略它。也许你拼错了。
为什么第二张图片中的 pgfkey 突然丢失了,我该怎么做才能解决这个问题?
答案1
您\usetikzlibrary{fit}
只需在\begin{tikzpicture}
\documentclass[a4paper]{article}
\usepackage[english]{babel}
\usepackage{tikz}
\usetikzlibrary{fit}
\begin{document}
\begin{tikzpicture}
\node(n){x};
\node [fit=(n),draw]{};
\end{tikzpicture}
\begin{tikzpicture}
\node(n){x};
\node [fit=(n),draw]{};
\end{tikzpicture}
\end{document}
答案2
除了现有的答案之外,原始代码不起作用的原因是由于以下两个因素的结合:
- TikZ 有一些代码可以确保它只加载一次给定的库。这意味着包等可以自由放置,而
\usetikzlibrary{something}
不必担心多次加载库。测试是全球的在适用范围。 - 加载库时
fit
,它会设置一大堆代码和键。这些是当地的在范围内。通常,这不是问题,因为通常在序言中加载 TikZ 库(这实际上与 fit 库无关,但其他人可能需要这个,所以这是一个好习惯)。
因此,当您第一次加载fit
库时,它会加载定义和键,但这些是第一个的本地定义tikzpicture
和键。当结束时,所有定义和键都将被遗忘。因此,当您尝试在第二个定义中再次加载它时,它会知道它已经加载了它,因为测试是全局的。但它忘记了它加载了什么。因此,定义和键未设置,因此库不可用。
答案3
\usetikzlibrary{fit}
属于前言,而不是tikzpicture
环境。无论如何,将其加载到环境中似乎可以正常工作,但加载两次会导致问题。只需将其放入前言中即可。