TikZ:使用特定文本位置的节点绘制箭头

TikZ:使用特定文本位置的节点绘制箭头

我有两个enumerate环境,我想从一个enumerate环境的某些项目到另一个环境绘制一些箭头。所以我想我可以使用这个tikz包来实现这一点,定义一些nodes 并在它们之间画线。

当然,我可以用愚蠢的方式来做到这一点,就像我的例子一样,通过烦人的反复试验过程手动设置节点的位置。有没有另一种更智能的方法来定义一个节点,例如,在给定的文本位置,在本例中是在每个项目上,然后稍后引用和使用它们?另外,我如何获得连接的线?

\documentclass{report}

% used for easy formatting changes of enumerate-lists
\usepackage{enumitem}

% for enabling the TikZ magic
\usepackage{tikz}

\begin{document}
\begin{enumerate}
\item car1
\item car2
\item car3
\end{enumerate}

\begin{enumerate}[label=(\alph*)]
\item door
\item engine
\item window
\end{enumerate}

\begin{tikzpicture}[overlay]
% nodes
\node (A) at (-0.5, 2.3) {};
\node (B) at (-1.5, 2.3) {};
\node (C) at (-1.5, 3.8) {};
\node (D) at (-0.5, 3.8) {};
\node (1) at (3, 0) {};
% arrows
\draw[->] 
    (A) -- (B) -- (C) -- (D);
\end{tikzpicture}

\end{document}

输出如下所示(请注意,我实际上想要一条连接的线......):

在此处输入图片描述

答案1

tikzmark库是实现此目的的非常好的资产。请确保至少编译两次。

使用特定文本位置的节点绘制箭头

\documentclass{report}

% used for easy formatting changes of enumerate-lists
\usepackage{enumitem}

% for enabling the TikZ magic
\usepackage{tikz}
\usetikzlibrary{tikzmark}

\begin{document}
    \begin{enumerate}
    \item car1
    \item \tikzmark{A} car2
    \item car3
    \end{enumerate}
    
    \begin{enumerate}[label=(\alph*)]
        \item \tikzmark{B} door
        \item engine
        \item window
    \end{enumerate}
    
    \begin{tikzpicture}[overlay,remember picture]
        \draw[->] ([xshift=-8mm,yshift=1mm]pic cs:B) --++ (-1,0) |- ([xshift=-8mm,yshift=1mm]pic cs:A);
    \end{tikzpicture}

\end{document}

答案2

tkz-linknodes 是一个旧包,目前已过时。您需要编译两次。

\documentclass{report}
\usepackage{enumitem,tkz-linknodes}

\begin{document}
  \begin{NodesList}[margin=10cm]
\begin{enumerate}
\item car1\AddNode%
\item car2
\item car3
\end{enumerate}

\begin{enumerate}[label=(\alph*)]
\item door
\item engine \AddNode%
\item window
\end{enumerate}

{\tikzset{ArrowStyle/.append style = {->,red,  rounded corners}}
\LinkNodes{}}
\end{NodesList}
\end{document}

在此处输入图片描述

相关内容