如何使用 TikZ 创建与多行文本中的特定行相对应的锚点?

如何使用 TikZ 创建与多行文本中的特定行相对应的锚点?

我的对象包含多行文本,我想从特定行绘制指向另一个对象的箭头。如何为特定行创建锚点?

例如,如何在不使用的情况下绘制下面的红线yshift

\documentclass[letter]{article}
\usepackage{tikz}
\usetikzlibrary{positioning,calc}
\begin{document}

\begin{tikzpicture}
  \node[align=left] (text)
  {Hello\\
  World!};
  \draw[->] (1cm,1cm) -- (text.mid east);
  \draw[->,red] (1cm,1cm) -- ([yshift=1.2em] text.mid east);
\end{tikzpicture}

\end{document}

你好世界示例

答案1

tikzmark \subnode可能是最简单的方法。至少,这是我能想到的最简单的方法。

\documentclass[border=10pt,12pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{tikzmark}
\begin{document}
\begin{tikzpicture}[remember picture]
  \node [align=left] (text)
  {\subnode{a}{Hello}\\
  World!};
  \draw[->] (1cm,1cm) -- (text.mid east);
  \draw[->,red] (1cm,1cm) -- (a -| text.east);
\end{tikzpicture}
\end{document}

红色不移

答案2

多部分节点怎么样?

(参见第 726 页pgfman.pdf

我通过强调选项添加了边框draw,如果您不想要框线,只需删除该线即可。

您可以向 传递两个参数style 2 args(顾名思义)。我使用它来指定分割框的数量(#1参数的rectangle split parts)和文本的宽度(#2参数的text width)。

\documentclass[margin=2mm,tikz]{standalone}
\usetikzlibrary{shapes.multipart}
\begin{document}
\tikzset{
    multinode/.style 2 args = {                                                     
        draw,
        rectangle split,
        rectangle split parts=#1,
        align=left,
        text width=#2,
    },
}
\begin{tikzpicture}[x=1cm,y=1cm]
    \coordinate (ref) at (1.5cm,1.5cm);
    \node[multinode={2}{4em}] (text)
        {
            \nodepart{one}
            Hello
            \nodepart{two}
            World!
        };
    \draw[->]     (ref) -- (text.one east);
    \draw[->,red] (ref) -- (text.two east);
\end{tikzpicture}
\end{document}

结果:

结果


编辑:

稍微不同的版本具有左对齐,而无需指定宽度,并且将具有空单元格的最小高度(只是稍微玩了一下)。

\documentclass[margin=2mm,tikz]{standalone}
\usetikzlibrary{shapes.multipart}
\begin{document}
\tikzset{
    multinode/.style = {                                                     
        draw,
        rectangle split,
        rectangle split parts=#1,
        rectangle split empty part height=2ex,
        rectangle split part align=left,
    },
}
\begin{tikzpicture}[x=1cm,y=1cm]
    \coordinate (ref) at (1.5cm,1.5cm);
    \node[multinode=4] (text)
        {
            \nodepart{one}
            Hello
            \nodepart{two}
            World!
            \nodepart{three}
            Again!
        };
    \draw[->]     (ref) -- (text.one east);
    \draw[->,red] (ref) -- (text.two east);
    \draw[->,blue] (ref) -- (text.three east);
\end{tikzpicture}
\end{document}

结果:结果 2

相关内容