Tikz fit 库:仅拟合一个维度并累积调用

Tikz fit 库:仅拟合一个维度并累积调用

fit库对于调整节点的大小以适应其中的其他节点非常有用。它还与shift使节点跨越到其他节点的宽度/高度但紧挨着它们一起使用非常有用。

我觉得这是一个很常见的情况,值得使用专用钥匙。

从定义密钥的代码来看fit,所有四个锚点northsouthwest总是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 fitfit

否则,正常行为fit不受影响。

在主库中实现这些功能还是不错的,请参阅相关功能要求

相关内容