TikZ-node 中的 TikZ 在给定文本宽度的情况下定位错误

TikZ-node 中的 TikZ 在给定文本宽度的情况下定位错误

此代码

\documentclass{minimal}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
    \node[text width = 3cm]{
        a a a a a a a a a a a a a a a a a a a a\\
        \tikz{\draw (0,0) node {A} -- (1,0) node {B};}\hspace*{10cm}\\
        a a a a a a a a a a a a a a a a a a a a
    };
\end{tikzpicture}
\end{document}

给出结果:

结果

它将 A 和 B 之间的线放在 B 的右侧,而不是 A 和 B 之间。在外部节点中指定文本宽度不知何故会让 TikZ 在放置内部线时感到困惑。我怎样才能让它正常运行,使线位于 A 和 B 之间,这是它应该在的位置?

答案1

显然内部 tikz 继承了该text width设置。如果你绘制节点,它是可见的:

在此处输入图片描述

该线从节点 A 的中心延伸到节点 B 的中心,但是节点太宽,以至于节点 B 的文本最终位于该线的左侧。

如果您重置该text width选项,则可以恢复预期的行为。

\documentclass{minimal}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
  \node[text width = 3cm]{
    a a a a a a a a a a a a a a a a a a a a\\
    \tikz[text width={}]{\draw (0,0) node {A} 
      -- (1,0) node {B};}
    \hspace*{10cm}
    \\
    a a a a a a a a a a a a a a a a a a a a
  };
\end{tikzpicture}
\end{document}

在此处输入图片描述

答案2

正如 Torbjørn 在评论中所说,嵌套 tikzpictures效果不太好。下面是使用\subnode来自tikzmark包(正是为这种事情而设计的)。

\documentclass{article}
%\url{https://tex.stackexchange.com/q/387792/86}
\usepackage{tikz}
\usetikzlibrary{tikzmark}
\begin{document}
\begin{tikzpicture}
    \node[text width = 3cm]{
        a a a a a a a a a a a a a a a a a a a a\\
        \tikz{\draw (0,0) node {A} -- (1,0) node {B};}\hspace*{10cm}\\
        a a a a a a a a a a a a a a a a a a a a
    };
\end{tikzpicture}


\begin{tikzpicture}[remember picture]
    \node[text width = 3cm]{
        a a a a a a a a a a a a a a a a a a a a\\
        \mbox{\subnode{a}{A}\hspace{1cm}\subnode{b}{B}} \\
        a a a a a a a a a a a a a a a a a a a a
    };
    \draw (a) -- (b);
\end{tikzpicture}
\end{document}

\mbox需要 ,因为否则 之后的线就会断开A;我不确定为什么会这样。)

防止嵌套的子节点

相关内容