为什么第二张图像中的 TikZ 拟合失败?

为什么第二张图像中的 TikZ 拟合失败?

我有一个包含两张 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

除了现有的答案之外,原始代码不起作用的原因是由于以下两个因素的结合:

  1. TikZ 有一些代码可以确保它只加载一次给定的库。这意味着包等可以自由放置,而\usetikzlibrary{something}不必担心多次加载库。测试是全球的在适用范围。
  2. 加载库时fit,它会设置一大堆代码和键。这些是当地的在范围内。通常,这不是问题,因为通常在序言中加载 TikZ 库(这实际上与 fit 库无关,但其他人可能需要这个,所以这是一个好习惯)。

因此,当您第一次加载fit库时,它会加载定义和键,但这些是第一个的本地定义tikzpicture和键。当结束时,所有定义和键都将被遗忘。因此,当您尝试在第二个定义中再次加载它时,它会知道它已经加载了它,因为测试是全局的。但它忘记了它加载了什么。因此,定义和键未设置,因此库不可用。

答案3

\usetikzlibrary{fit}属于前言,而不是tikzpicture环境。无论如何,将其加载到环境中似乎可以正常工作,但加载两次会导致问题。只需将其放入前言中即可。

相关内容