在 tikz 中根据节点的大小定位节点?

在 tikz 中根据节点的大小定位节点?

我使用下面显示的代码生成了以下输出tikz。我想要的是右侧的箭头相对于最右侧符号具有固定长度,而不是相对于节点中心。我该如何实现这一点?我是新手tikz,无法弄清楚如何使用xshift+(x,y)坐标等机制来实现这一点。

基本上我希望能够指定右侧节点(箭头尖端)的位置,例如

n0.east+(1em,0)

在此处输入图片描述

\documentclass{article}
\RequirePackage{tikz}
\begin{document}

\pgfdeclarelayer{nodelayer}
\pgfdeclarelayer{edgelayer}
\pgfsetlayers{edgelayer,nodelayer,main}
\tikzstyle{arrow}=[draw=black,arrows=-latex]

\newcommand{\foo}[1]{%
  \begin{tikzpicture}[baseline=(n1.base),thick]
    \begin{pgfonlayer}{nodelayer}
      \node (n0) at (0, 0) {$#1$};           
      \node (n1) at +(2em, 0) {};                  
    \end{pgfonlayer}
    \begin{pgfonlayer}{edgelayer}
      \draw [style=arrow] (n0) to (n1);
    \end{pgfonlayer}
  \end{tikzpicture}
}

\foo{x}

\foo{xy}

\end{document}

答案1

您可以使用tikzcalc库进行坐标计算。因此,usetikzlibrary{calc}可以按如下方式执行所需的坐标计算:

($(n0.east)+(1em,0)$)

或者,您可以应用移位,这样做的好处是它不需要库calc,如下所示

([xshift=1em]n0.east)

这两种方法都可以得出以下结果:

在此处输入图片描述

代码:

\documentclass{article}
\RequirePackage{tikz}

\begin{document}

\pgfdeclarelayer{nodelayer}
\pgfdeclarelayer{edgelayer}
\pgfsetlayers{edgelayer,nodelayer,main}
\tikzstyle{arrow}=[draw=black,arrows=-latex]

\newcommand{\foo}[1]{%
  \begin{tikzpicture}[baseline=(n1.base),thick]
    \begin{pgfonlayer}{nodelayer}
      \node (n0) at (0, 0) {$#1$};           
      \node (n1) at ([xshift=1em]n0.east) {};                  
    \end{pgfonlayer}
    \begin{pgfonlayer}{edgelayer}
      \draw [style=arrow] (n0) to (n1);
    \end{pgfonlayer}
  \end{tikzpicture}
}

\foo{x}

\foo{xy}

\end{document}

相关内容