节点内的节点

节点内的节点

我想在节点内创建一个节点。我的MWE如下。

 \documentclass{article}
 \usepackage{tikz,amsmath,siunitx}
 \usetikzlibrary{tikzmark}
 \begin{document}
   \[\text{a}_{\text{C}} = 0.35\tikzmark{a}7\,\si{\nano\meter}, \tikzmark{b}\text{a}_{\text{Ge}} = \SI{0.5658}{\nano\meter}, \text{ and} \tikzmark{c}\text{ a}_{\text{Si}} = \SI{0.5431}{\nano\meter}.
    \begin{tikzpicture}[overlay,remember picture]
    \draw[<->] ([shift={(0.08,-0.05)}]pic cs:b) -- +(0,-0.3)  node[below,shift={(2,-0.02)},outer sep=0] (d) {$\substack{\text{closer to each other} \\ \text{than a\textsubscript{C} is to} \\ \text{a\textsubscript{Ge} and a\textsubscript{Si}}}$} -|  ([shift={(0.2,-0.05)}]pic cs:c);
    \draw[->] (d) to[bend left] (pic cs:a);
    \end{tikzpicture}\]
 \end{document} 

目前结果如下 代码输出 我想将子堆栈中的 a_C 连接到内联文本中的 a_C 值。有没有办法将 a_C 定义为父节点 (d) 内的节点,然后将节点 (d) 连接到节点 (a)。

感谢您的帮助!

答案1

tikzmark\subnode{}{}在图片中的节点内使用。与使用 创建的标记不同\tikzmark{},这些标记可以直接通过名称引用 - 也就是说,您无需指定pic坐标系即可引用它们。

因此,你可以简单地说

\documentclass{article}
\usepackage{amsmath,tikz,siunitx}
\usetikzlibrary{tikzmark}
\begin{document}
\[
  \text{a}_{\text{C}} = 0.35\tikzmark{a}7\,\si{\nano\meter}, \tikzmark{b}\text{a}_{\text{Ge}} = \SI{0.5658}{\nano\meter}, \text{ and} \tikzmark{c}\text{ a}_{\text{Si}} = \SI{0.5431}{\nano\meter}.
  \begin{tikzpicture}[overlay,remember picture]
    \draw[<->] ([shift={(0.08,-0.05)}]pic cs:b) -- +(0,-0.3)  node[below,shift={(2,-0.02)},outer sep=0] (d) {$\substack{\text{closer to each other} \\ \text{than \subnode{ind}{a\textsubscript{C}} is to} \\ \text{a\textsubscript{Ge} and a\textsubscript{Si}}}$} -|  ([shift={(0.2,-0.05)}]pic cs:c);
    \draw[->] (ind) to[bend left] (pic cs:a);
  \end{tikzpicture}
\]
\end{document}

将子节点连接到节点

我确实怀疑你的代码是不是滥用了数学模式,因为你的大部分内容都被包含在内\text{}。例如,这使得保持间距一致变得更加困难。

为什么不做一些更简单的事情呢?

\documentclass{article}
\usepackage{tikz,siunitx}
\usetikzlibrary{tikzmark}
\begin{document}
\begin{center}
  a\textsubscript{C}$ = 0.35\tikzmark{a}7\,$\si{\nano\meter}, \tikzmark{b}a\textsubscript{Ge}$ = $\SI{0.5658}{\nano\meter}, and\tikzmark{c} a\textsubscript{Si}$ = $\SI{0.5431}{\nano\meter}.
  \begin{tikzpicture}[overlay,remember picture]
    \draw[<->] ([shift={(0.08,-0.05)}]pic cs:b) -- +(0,-0.3) -| ([shift={(0.2,-0.05)}]pic cs:c) node [pos=.25, below, anchor=north, align=center] (d) {closer to each other\\than \subnode{ind}{a\textsubscript{C}} is to\\a\textsubscript{Ge} and a\textsubscript{Si}};
    \draw[->] (ind) to [bend left=45] (pic cs:a);
  \end{tikzpicture}
\end{center}
\end{document}

可能更简单

我不知道这是否真的正确,但至少这样更容易阅读代码,而且间距对我来说似乎更好——例如,如果您想在行之间画箭头,额外的行间距很有用,这会在逗号后添加一个缺失的空格。

答案2

TikZ 图片的嵌套是邪恶的......但通过手动调整弯线坐标并重新排列节点中的文本,您可以获得(无需嵌套节点):

在此处输入图片描述

\documentclass{article}
\usepackage{tikz,amsmath,siunitx}
\usetikzlibrary{tikzmark}
    \begin{document}
\[
\tikzmark{a}\mathrm{a}_{\mathrm{C}}  = \SI{0.357}{\nano\meter}, \tikzmark{b}\mathrm{a}_{\mathrm{Ge}} = \SI{0.5658}{\nano\meter}, 
    \text{ and } 
\tikzmark{c}\mathrm{a}_{\mathrm{Si}} = \SI{0.5431}{\nano\meter}.
    \begin{tikzpicture}[overlay,remember picture]
\draw[<->]  ([shift={(0.08,-0.05)}]pic cs:b) -- +(0,-0.3) -| 
            ([shift={(0.08,-0.05)}]pic cs:c)
    node[pos=0.25, below,font=\footnotesize,align=center] (d) 
        {closer to each other than\\ 
         a\textsubscript{C} is to a\textsubscript{Ge} and a\textsubscript{Si}};
    \draw[->] ([shift={(2.5ex,-1.2ex)}]d.west) to[out=180, in=300] ([shift={(0.08,-0.05)}]pic cs:a);
    \end{tikzpicture}\]
 \end{document}

相关内容