假设我在 tikz 中有两个节点,我想通过 tikz fit 突出显示它们。如果我想添加边距,我可以使用inner sep = xpt
,但是,所有 4 个站点都增加了相同的值。是否可以为每一侧指定一个单独的值,例如inner sep = x1pt x2pt x3pt x4pt
?
\documentclass[]{standalone}
\usepackage{tikz}
\usetikzlibrary{fit}
\begin{document}
\begin{tikzpicture}[every label/.style={text=gray},node distance=2cm]
\node[,draw] (n1) {hello};
\node[right of=n1,draw] (n2) {hello2};
\node[draw,fit=(n1) (n2),inner sep=10pt] (t31) {};
\end{tikzpicture}
\end{document}
答案1
它附带一个密钥fit margins
,我认为它可以满足您的需求。您可以在以下情况下使用它:
\node[draw,fit margins={left=3pt,right=12pt,bottom=3pt,top=8pt},fit=(n1) (n2)] (t31) {};
获得
\documentclass[tikz,border=3mm]{standalone}
\usetikzlibrary{fit,positioning}
\tikzset{fit margins/.style={/tikz/afit/.cd,#1,
/tikz/.cd,
inner xsep=\pgfkeysvalueof{/tikz/afit/left}+\pgfkeysvalueof{/tikz/afit/right},
inner ysep=\pgfkeysvalueof{/tikz/afit/top}+\pgfkeysvalueof{/tikz/afit/bottom},
xshift=-\pgfkeysvalueof{/tikz/afit/left}+\pgfkeysvalueof{/tikz/afit/right},
yshift=-\pgfkeysvalueof{/tikz/afit/bottom}+\pgfkeysvalueof{/tikz/afit/top}},
afit/.cd,left/.initial=2pt,right/.initial=2pt,bottom/.initial=2pt,top/.initial=2pt}
\begin{document}
\begin{tikzpicture}[]
\node[draw] (n1) {hello};
\node[right=of n1,draw] (n2) {hello2};
\node[draw,fit margins={left=3pt,right=12pt,bottom=3pt,top=8pt},fit=(n1) (n2)] (t31) {};
\end{tikzpicture}
\end{document}
我还使用该positioning
库来更轻松地定位。
答案2
您可以添加一些点来适应。例如,要获得
使用代码:
\documentclass[]{standalone}
\usepackage{tikz}
\usetikzlibrary{fit}
\begin{document}
\begin{tikzpicture}[every label/.style={text=gray},node distance=2cm]
\node[draw] (n1) {hello};
\node[right of=n1,draw] (n2) {hello2};
\coordinate[above left of=n1] (n1left);
\node[draw,fit=(n1) (n1left) (n2)] (t31) {};
\end{tikzpicture}
\end{document}
答案3
用户194703的回答很好,而且有效,我投了赞成票,并使用了其中的信息来写这个答案。话虽如此,我发现对我有用的是使用 user194703 在其宏中使用的设置,但直接使用它们,这些设置是yshift
、xshift
和,inner xsep
例如inner ysep
:
\tikzstyle{block} = [draw, inner sep=0.2cm, node distance=0.6cm, fill=yellow!10]
\begin{figure}
\centering
\begin{tikzpicture}[auto]
\node [block] (sender) {sender};
\node [block] (receiver) [right=of sender] {receiver};
\node (agent) [
fit=(sender) (receiver),
yshift=-0.2cm, inner ysep=0.4cm,inner xsep=0.2cm,
draw,
label={[label distance=-1.0cm]190:agent}, rounded corners] {};
\end{tikzpicture}
\caption{Sender receiver}
\end{figure}
结果:
(基本上,我发现宏的问题是我必须指定所有四个边距。在我看来,宏与我inner xsep
自己使用等不兼容,因为宏会覆盖它们)。