我如何编写一个线性方程组,使用圆圈和箭头来指示每行应添加的内容。
这是我目前所拥有的:
$S = \begin{cases}
x_1+2x_2 - 2x_3 = 1 \\
2x_1 - x_2 + x_3 = 3 \\
x_1 + 3x_2 + x_3 = 1
\end{cases}$
它看起来应该是这样的:
答案1
使用 TikZ 的一个选项:
新版本:
\documentclass{article}
\usepackage{amsmath}
\usepackage{systeme}
\usepackage{tikz}
\newcounter{tmp}
\newcommand\tikzmark[1]{%
\tikz[remember picture,baseline=-0.65ex]
\node[inner sep=0,outer sep=0] (#1){};%
}
\newcommand\mess[4][25pt]{%
\stepcounter{tmp}%
\begin{tikzpicture}[remember picture,overlay,>=latex,xshift=#1,cyan]
\node[circle,draw,cyan,inner sep=2pt] at ([xshift=#1]#2) (a\thetmp) {$#4$};
\draw[->] (a\thetmp.south) |- (#3);
\end{tikzpicture}%
}
\begin{document}
\[
S =
\systeme{x_1+2x_2 - 2x_3 = 1 \tikzmark{a},
2x_1 - x_2 + x_3 = 3 \tikzmark{b},
x_1 + 3x_2 + x_3 = 1 \tikzmark{c}}
\]
\mess{a}{b}{-2}
\mess[55pt]{a}{c}{-1}
\end{document}
解释:
首先,使用 为相关线条放置一些标记\tikzmark
,然后使用\mess
命令添加带有箭头的圆圈; 的三个强制参数\mess
是初始标记的字符串、最终标记的字符串和圆圈内要使用的文本。可选参数控制水平分隔的长度。
还请注意使用systeme
包,以便方程组得到很好的排版。
由于代码需要一些内部计算,因此需要两到三次运行才能使元素稳定下来。
第一个版本
\documentclass{article}
\usepackage{amsmath}
\usepackage{tikz}
\newcommand\mess[2][20pt]{%
\begin{tikzpicture}[overlay,>=latex,yshift=22pt,xshift=#1,cyan]
\node[circle,draw,cyan,inner sep=2pt] (a) {$#2$};
\draw[->,shorten >= 3pt] (a.south) |- ([yshift=-9pt,xshift=-#1]a.south);
\end{tikzpicture}%
}
\begin{document}
\[
S = \begin{cases}
\phantom{0}x_1+2x_2 - 2x_3 = 1 \\
2x_1 - \phantom{0}x_2 + \phantom{0}x_3 = 3 \mess{-2}\\
\phantom{0}x_1 + 3x_2 + \phantom{0}x_3 = 1 \mess[40pt]{-1}
\end{cases}
\]
\end{document}
的强制参数\mess
将写在圆形节点中;可选参数允许控制箭头水平部分的长度。