我使用下面显示的代码生成了以下输出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
您可以使用tikz
的calc
库进行坐标计算。因此,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}