连接方程式中元素的线

连接方程式中元素的线

我想画出连接方程中各个元素的线。以下是我目前所做的:

\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}

tikz/pgf 手册 p.646

输出

相关内容