节点尺寸

节点尺寸

在下图中,我想对圆角矩形使用相同的宽度,对箭头使用相同的高度(看看最后一个)。

为此,我需要存储所用节点的尺寸。有没有简单的方法可以做到这一点?

在此处输入图片描述

\documentclass{article}

\usepackage{nicematrix,tikz}
\usetikzlibrary{shapes.misc, calc}

% Source: https://tex.stackexchange.com/a/585865/6880
\newcommand\test[2]{%
    #1 & {} = {} & #2 \\[8mm]
}

\newcommand\step[3]{
    \draw [->,shorten < = 1pt, shorten > = 1pt]
           let \p1 = ([xshift=-1mm]#2-1.south east) ,
               \p2 = ([yshift=1mm]#3-1.north) 
           in (\p1) -- (\x1,\y2) ;
    \draw [->,shorten < = 1pt, shorten > = 1pt]
           let \p1 = ([xshift=1mm]#2-3.south west) ,
               \p2 = ([yshift=1mm]#3-3.north) 
           in (\p1) -- (\x1,\y2) ;
    \node [draw, fill=white, rounded rectangle] at ([yshift=-5mm]#2-2){\tiny\kern1em$#1$\kern1em} ;
}

\begin{document}

$\begin{NiceArray}{r@{}c@{}l}
    \test{2x+3}{5x-4}
    \test{2x  }{5x-7}
    \test{-3x }{-7}
    \test{x   }{\dfrac73}
    \CodeAfter
    \begin{tikzpicture}
        \step{-3}{1}{2}
        \step{-5x}{2}{3}
        \step{\div (-3)}{3}{4}
    \end{tikzpicture}
 \end{NiceArray}$

 \end{document}

答案1

更新

我想到了一个不同的解决方案,它既能解决箭头长度的问题,又能为方程式提供正常的编码。

在此处输入图片描述

代码

\documentclass[12pt, a4paper]{article}
\usepackage{amsmath}
\usepackage{tikz}

\newcommand{\action}[1]{%
  &= \tikz[baseline=-.5ex]{%
    \path[use as bounding box] (0, -3ex) rectangle ++(1pt, 6ex);
    \draw[->] (-3.5ex, 3ex) -- ++(0, -6ex);
    \draw[->] (.5ex, 3ex) -- ++(0, -6ex);
    \path (-1.5ex, 0)
    node[draw, rectangle, rounded corners, fill=WG, thin,
    inner sep=1ex, minimum width=11ex, scale=.7] {$#1$};
  }
}
\definecolor{WG}{RGB}{217, 221, 221}

\begin{document}
\begin{align*}
  2x +3 &= 5x -4 \\
  \action{3} \\
  2x &= 5x -7 \\
  \action{-5x} \\
  -3x &= -7 \\
  \action{\div(-3)} \\
  x &= \frac{7}{3}
\end{align*}
\end{document}

第一个解决方案 我建议使用基于节点的解决方案(在 TikZ 中)。确实,对齐=会丢失。可以通过将方程进一步分解为几部分来恢复对齐,但我不知道您是否感兴趣。最终,您可以将其转换为 LaTeX 命令。

在此处输入图片描述

  • 每个宽节点的高度是固定的,以使分数适合它。
  • 由于箭头以等距离连接节点,因此它们具有相同的长度。
  • 有一个参数\d可以控制箭头之间的水平空间。

代码

\documentclass[11pt, margin=1cm]{standalone}
\usepackage{tikz}
\usetikzlibrary{calc, math} 
\usetikzlibrary{fit, positioning, arrows.meta}
\usetikzlibrary{backgrounds}

\begin{document}
\definecolor{WG}{RGB}{217, 221, 221}
\tikzset{
  w/.style={minimum width=22ex, minimum height=6ex},
  n/.style={draw, rectangle, rounded corners,
    fill=white, thick,
    inner sep=1ex, minimum width=10ex, scale=.7},
  m/.style={->, shorten <=-3pt, shorten >=-2.75pt}
}
\tikzmath{
  real \d, \il, \ol, \ie, \oe;
  \d = 35;
  \ol = 270 -\d;  \il = 90 +\d;
  \oe = 270 +\d;  \ie = 90 -\d;
}
\begin{tikzpicture}[node distance=1ex and 5ex,
  every node/.style={text=black}]
  \node[w] (Iw) {$2x +3 = 5x -4$};
  \node[below=of Iw, n] (In) {$-3$};
  \node[below=of In, w] (IIw) {$2x = 5x -7$};
  \node[below=of IIw, n] (IIn) {$-5x$};
  \node[below=of IIn, w] (IIIw) {$-3x = -7$};
  \node[below=of IIIw, n] (IIIn) {$\div(-3)$};
  \node[below=of IIIn, w] (IVw) {$x = \frac{7}{3}$};

  \begin{pgfonlayer}{background}
    \node[gray, fill=WG, fit=(Iw) (IVw), inner sep=0pt] {};
    \draw
    (Iw.\ol) edge[m] (IIw.\il)
    (Iw.\oe) edge[m] (IIw.\ie)
    (IIw.\ol) edge[m] (IIIw.\il)
    (IIw.\oe) edge[m] (IIIw.\ie)
    (IIIw.\ol) edge[m] (IVw.\il)
    (IIIw.\oe) edge[m] (IVw.\ie);
  \end{pgfonlayer}
\end{tikzpicture}

\end{document}

相关内容