该fit
库对于调整节点的大小以适应其中的其他节点非常有用。它还与shift
使节点跨越到其他节点的宽度/高度但紧挨着它们一起使用非常有用。
我觉得这是一个很常见的情况,值得使用专用钥匙。
从定义密钥的代码来看fit
,所有四个锚点north
、south
和west
总是east
被考虑用于拟合。这对于一般拟合确实有意义,但在某些情况下,仅在一个维度上进行拟合会很有用。这可以通过定义类似密钥的东西来轻松实现,在计算中fit width
只考虑east
和锚点。west
问题是:是否有可能在不重复定义fit
的情况下以最少的麻烦来模拟这一点?
fit
此外:如果连续使用两次,第二次将覆盖第一次;提供一个also fit
键来设置当前大小的最大值和适合给定节点的大小会很棒。
这个问题是相关的,但答案避免使用 fit 库。
答案1
我有一个可行的解决方法also fit
,在此分享以供参考。
\documentclass[tikz]{standalone}
\usetikzlibrary{fit}
\pgfmathsetseed{200}
\begin{document}
\makeatletter
\begin{tikzpicture}[
nodes to fit/.initial={},
fit/.append style={nodes to fit=#1},
also fit/.style={
nodes to fit/.append={#1},
},
fit now/.code={
\xdef\@fitting@nodes{\pgfkeysvalueof{/tikz/nodes to fit}}
\ifx\@fitting@nodes\@empty
%%% do nothing
\else
\tikzset{fit={\@fitting@nodes}}
\fi
}
]
\foreach \i in {1,...,5}{
\node[draw] (n\i) at (2*rand,3*rand) {\i};
}
\node[draw=green, thick, fit={(n4) (n3)}] {};
\node[draw=red, thick, fit={(n1)}, also fit={(n4)}, also fit={(n2) (n3)}, fit now] {};
\node[draw=blue,also fit=(n1),also fit=(n2), fit now] {};
\end{tikzpicture}
\makeatother
\end{document}
这个想法很简单:使用辅助键nodes to fit
累积要适合的坐标/节点列表,键fit
也会设置它,also fit
将添加到它。要使添加有效,您需要在和键fit now
之后添加一个键。also fit
fit
否则,正常行为fit
不受影响。
在主库中实现这些功能还是不错的,请参阅相关功能要求。