我有两个方程式(一个在另一个之上),我想通过在第一个方程式和第二个方程式之间画箭头将第一个方程式的元素与第二个方程式的元素关联起来。
我想到两种方法来解决这个问题:
- 将每个元素放在单独的节点中,然后在相应的节点之间画箭头。
- 每个方程都有一个节点(完整的方程放在标签中),并找到一种方法来获取标签中每个元素的坐标。
我尝试了第一种方法,但水平间距很奇怪:节点距离显然不是文本间距(见下图)。
第二种方法对我来说似乎更好(主要原因:我们将方程式保持为单个节点,这在我看来更有意义),但我不知道是否有可能获取标签子部分的坐标(并且有些东西告诉我节点应该被视为单个不可分裂的元素,因此解决方案并不容易)。
到目前为止,使用第一种方法,我已经:
\documentclass{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\node (A) {\(A_1\)};
\node[anchor=west] at(A.east) (B) {\(= B_1 + \)};
\node[anchor=west] at(B.east) (C) {\(C_1\)};
\node[below of=A] (A') {\(A_2\)};
\node[anchor=west] at(A'.east) (B') {\(=B_2 + \)};
\node[anchor=west] at(B'.east) (C') {\(C_2\)};
\path (A) edge[<->] (A');
\path (B) edge[<->] (B');
\path (C) edge[<->] (C');
\end{tikzpicture}
\end{document}
给出以下结果(例如,注意“+”两边的间距):
更多细节:
- 方程的垂直对齐不是问题(即,如果箭头不是“垂直的”,那也没关系)。
- 方程式中每个元素的基线的垂直对齐不是问题(我知道 Tikz 手册中有一个关于此问题的相关部分,所以这里没问题)。
- 这些方程应该保留在 tikz 图片中。它们是一种交换图的一部分,例如这里。基于此示例,查看该问题的另一种方法是能够从和的下方绘制一个
F
箭头x
。 - 最好使用没有魔法常量的解决方案:这里的示例只是一个 MWE。
答案1
该tikzmark
库允许您创建方程节点的元素而不改变间距。
\documentclass{article}
\usepackage{amsmath}
\usepackage{tikz}
\usetikzlibrary{tikzmark}
\begin{document}
\begin{align*}
\tikzmarknode{A1}{A_1}&=\tikzmarknode{B1}{B_1}+\tikzmarknode{C1}{C_1}\\[2em]
\tikzmarknode{A2}{A_2}&=\tikzmarknode{B2}{B_2}+\tikzmarknode{C2}{C_2}
\begin{tikzpicture}[overlay,remember picture]
\foreach \X in {A,B,C}
{\draw[<->,shorten >=1pt,shorten <=1pt] (\X1) -- (\X2);}
\end{tikzpicture}
\end{align*}
\end{document
如果您想标记节点的各个部分,仍然tikzmark
是您的朋友,您可能想要使用\subnode
它们。
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{tikzmark,positioning}
\begin{document}
\begin{tikzpicture}[remember picture]
\node (upper) {$\subnode{A1}{A_1}=\subnode{B1}{B_1}+\subnode{C1}{C_1}$};
\node[below=2em of upper]
(lower){$\subnode{A2}{A_2}=\subnode{B2}{B_2}+\subnode{C2}{C_2}$};
\foreach \X in {A,B,C}
{\draw[<->,shorten >=1pt,shorten <=1pt,overlay] (\X1) -- (\X2);}
\end{tikzpicture}
\end{document}
顺便说一句,可以说它更适合用于positioning
相对定位。