Tikz 适合所有 4 个方向的内部分离值

Tikz 适合所有 4 个方向的内部分离值

假设我在 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 在其宏中使用的设置,但直接使用它们,这些设置是yshiftxshift和,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自己使用等不兼容,因为宏会覆盖它们)。

相关内容