![TikZ:使用特定文本位置的节点绘制箭头](https://linux22.com/image/444558/TikZ%EF%BC%9A%E4%BD%BF%E7%94%A8%E7%89%B9%E5%AE%9A%E6%96%87%E6%9C%AC%E4%BD%8D%E7%BD%AE%E7%9A%84%E8%8A%82%E7%82%B9%E7%BB%98%E5%88%B6%E7%AE%AD%E5%A4%B4.png)
我有两个enumerate
环境,我想从一个enumerate
环境的某些项目到另一个环境绘制一些箭头。所以我想我可以使用这个tikz
包来实现这一点,定义一些node
s 并在它们之间画线。
当然,我可以用愚蠢的方式来做到这一点,就像我的例子一样,通过烦人的反复试验过程手动设置节点的位置。有没有另一种更智能的方法来定义一个节点,例如,在给定的文本位置,在本例中是在每个项目上,然后稍后引用和使用它们?另外,我如何获得连接的线?
\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}