使用 fit 从 PGF 层获取 Badbox

使用 fit 从 PGF 层获取 Badbox

为什么代码

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{backgrounds,fit}
\tikzstyle{internal} = [draw, fill, shape=circle]
\begin{document}
 \begin{tikzpicture}[scale=0.6,transform shape,node distance=1.4cm,semithick]
  \node[internal] (0)                    {};
  \node[internal] (1) [right       of=0] {};
  \node[internal] (2) [above right of=1] {};
  \node[internal] (3) [above       of=2] {};
  \node[internal] (4) [below right of=1] {};
  \node[internal] (5) [below       of=4] {};
  \node[internal] (6) [below right of=2] {};
  \node[internal] (7) [right       of=6] {};
  \path (0) edge node[near end]   (e1) {} (1)
        (2) edge node[near start] (e2) {} (3)
        (4) edge node[near start] (e3) {} (5)
        (6) edge node[near start] (e4) {} (7);
  \begin{pgfonlayer}{background}
   \node[draw=blue!60,thick,rounded corners,fit = (e1) (e2) (e4)] {};
  \end{pgfonlayer}
 \end{tikzpicture}
\end{document}

带输出

在此处输入图片描述

有一个坏的盒子(见日志文件在这里),而此代码

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{backgrounds,fit}
\tikzstyle{internal} = [draw, fill, shape=circle]
\begin{document}
 \begin{tikzpicture}[scale=0.6,transform shape,node distance=1.4cm,semithick]
  \node[internal] (0)                    {};
  \node[internal] (1) [right       of=0] {};
  \node[internal] (2) [above right of=1] {};
  \node[internal] (3) [above       of=2] {};
  \node[internal] (4) [below right of=1] {};
  \node[internal] (5) [below       of=4] {};
  \node[internal] (6) [below right of=2] {};
  \node[internal] (7) [right       of=6] {};
  \path (0) edge node[near end]   (e1) {} (1)
        (2) edge node[near start] (e2) {} (3)
        (4) edge node[near start] (e3) {} (5)
        (6) edge node[near start] (e4) {} (7);
  \begin{pgfonlayer}{background}
   \node[draw=blue!60,thick,rounded corners,fit = (e1) (e2) (e3)] {};
  \end{pgfonlayer}
 \end{tikzpicture}
\end{document}

(其中倒数第四行中的“e4”更改为“e3”)输出

在此处输入图片描述

没有坏盒子(参见日志文件在这里)?

答案1

问题出乎意料地简单:这是因为键通过设置键同时激活来fit调整已安装节点的大小。您的节点和相距太远,以至于节点中的文本(好吧,空文本)无法居中,而不会在两侧引入过多的拉伸。当您仅将节点安装在和周围时,拉伸不足以触发警告。text widthtext centerede1e4e1e3underfull

更简单的 MWE 演示:

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{fit}
\begin{document}
\begin{tikzpicture}[every node/.style={outer sep=0pt}]
\coordinate (A) at (0,0);
\coordinate (B) at (3.1cm,1);
\node [draw, fit=(A) (B)] {};
\end{tikzpicture}
\end{document}

这会产生一个underfull警告。如果我们将 的位置调整(B)(3.0cm,1),警告就会消失。更简单的是,如果我们有

\node [
    text centered,
    text width=3.1cm,
] {};

我们underfull也收到了警告(fit根本没有涉及)。更改text width3.0cm可消除警告。

因此,您可以采取以下措施来消除代码中的警告:设置every fit/.append style=text badly centered。该样式告诉 TikZ 也将文本居中,但要对过度拉伸更加放松。在 CVS 版本中,fit库默认使用此键,这就是 PolGab 无法重现错误的原因。

实际上,由于您根本没有使用文本,您也可以设置align=leftalign=right消除警告,但text badly centered无论如何使用都是一个好主意。

相关内容