我想画出连接方程中各个元素的线。以下是我目前所做的:
\documentclass{article}
\usepackage{amsmath}
\usepackage{tikz}
\usetikzlibrary{tikzmark}
\newcommand\connect[1]{
\draw[->] ([shift={(2pt,-2pt)}]pic cs:start#1)
to ([shift={(2pt,8pt)}]pic cs:end#1);
}
\begin{document}
\begin{gather*}
\{a, \tikzmark{startB1}b, c, \tikzmark{startD1}d\} \\ \\
\{\tikzmark{endB1}b, \tikzmark{endD1}d\}
\end{gather*}
\begin{tikzpicture}[remember picture,overlay,line width=0.5pt]
\connect{B1}
\connect{D1}
\end{tikzpicture}
\begin{gather*}
\{a, \tikzmark{startB2}bbbb, c, \tikzmark{startD2}dddd\} \\ \\
\{\tikzmark{endB2}bbbb, \tikzmark{endD2}dddd\}
\end{gather*}
\begin{tikzpicture}[remember picture,overlay,line width=0.5pt]
\connect{B2}
\connect{D2}
\end{tikzpicture}
\end{document}
我通过反复试验找到各种数字(例如 2pt、8pt 等),并对其进行了硬编码。
有没有办法自动执行此操作而无需输入硬编码数字?我希望线条位于顶部元素底部和底部元素顶部的中心。例如,bbbb
被视为一个元素。
我还想知道是否有一种完全不同且更简单的方法来做到这一点。
澄清:
在上图中,第二组方程式渲染不正确。箭头的两端应该位于bbbb
和 的中心dddd
。
答案1
我玩了一下 tikz,结果如下(我只展示第二个例子,因为这似乎是有问题的):
\documentclass[a4paper]{article}
\usepackage{amsmath}
\usepackage{tikz}
\begin{document}
\begin{gather*}
\{a,
\tikz[baseline,remember picture]{\node[anchor=base,inner xsep=0pt] (b1) {$bbbb$};},
c,
\tikz[baseline,remember picture]{\node[anchor=base,inner xsep=0pt] (d1) {$dddd$};}\} \\ \\
\{\tikz[baseline,remember picture]{\node[anchor=base,inner xsep=0pt] (b2) {$bbbb$};},
\tikz[baseline,remember picture]{\node[anchor=base,inner xsep=0pt] (d2) {$dddd$};}\}
\end{gather*}
\tikz[remember picture,overlay]{\draw[->] (b1.south) to (b2.north);}
\tikz[remember picture,overlay]{\draw[->] (d1.south) to (d2.north);}
\end{document}
另一种方法是将最后两行改为类似
\tikz[remember picture,overlay]{\draw[->,shorten <=1.2ex,shorten >=1.2ex] (b1.center) to (b2.center);}
\tikz[remember picture,overlay]{\draw[->,shorten <=1.2ex,shorten >=1.2ex] (d1.center) to (d2.center);}
结果如下所示:
我想这是一个品味问题。
答案2
pstricks
使用,更具体地说使用pst-node
和,操作非常简单auto-pst-pdf
:将所有内容放在一个postscript
环境中,将要连接的元素定义为节点,然后连接这些节点:
\documentclass{article}
\usepackage{amsmath}
\usepackage{pst-node}
\usepackage{auto-pst-pdf}
\begin{document}
\begin{postscript}
\psset{nodesep=2pt, linewidth=0.5pt, arrows=->, arrowinset=0.15}
\begin{gather*}
\{a, \rnode{B1}b, c, \rnode{D1}d\} \\[3ex]
\{\rnode{B2}b, \rnode{D2}d\}
\ncline{B1}{B2}\ncline{D1}{D2}
\end{gather*}
%
\begin{gather*}
\{a, \rnode{B1}{bbbb}, c, \rnode{D1}{dddd} \} \\ \\
\{\rnode{B2}{bbbb}, \rnode{D2}{dddd}\}
\ncline{B1}{B2}\ncline{D1}{D2}
\end{gather*}
\end{postscript}
\end{document}
答案3
这可能是一个开始:
\documentclass[tikz]{standalone}
\usetikzlibrary{matrix}
\begin{document}
\begin{tikzpicture}
\matrix (magic0) at (0,1) [matrix of nodes]{
\{ & aaaaaaa, & bbbb, & c, & dd & \}\\
};
\matrix (magic1) at (0,0) [matrix of nodes]{
\{ & a, & b, & cc, & ddd & \} \\
};
\draw[thick,->] (magic0-1-3) -- (magic1-1-4);
\draw[thick,->] (magic0-1-2) -- (magic1-1-3);
\end{tikzpicture}
\end{document}