在下图中,我想对圆角矩形使用相同的宽度,对箭头使用相同的高度(看看最后一个)。
为此,我需要存储所用节点的尺寸。有没有简单的方法可以做到这一点?
\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}