假设我有
\usepackage{tikz}
\begin{tikzpicture}
\node (A) at (0,0){A};
\node (B) at (0,-4){B};
\draw[->] (A)--node[auto]{$v\mapsto w$}(B);
\end{tikzpicture}
如何获得$v\mapsto w$
垂直($v$
和$w$
应该仍然正常定向但箭头应该指向下方并且$v$
位于其上方而位于其$w$
下方)?
如何完美地做到这一点?我想我可以把tikzpicture
它放在里面node[auto]{...}
,然后在里面进行我想要的所有旋转/堆叠。
答案1
简单旋转
以下简单示例使用具有多条线的节点 ( align=center
) 并\mapsto
使用进行旋转\rotatebox
:
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\node (A) at (0,0){A};
\node (B) at (0,-2){B};
\draw[->] (A)--node[auto, align=center]{%
$v$\\
\rotatebox[origin=c]{-90}{$\mapsto$}\\
$w$%
}(B);
\end{tikzpicture}
\end{document}
此解决方案存在两个问题:
- 垂直间距相当大。
- 符号
\mapsto
向右移动了一点,因为边界框的高度值\mapsto
太小。
精致的旋转
贡萨洛·梅迪纳在他的评论是让箭头周围的水平间距在垂直方向上也保持相同。这是通过两次旋转来实现的。
首先旋转符号v
和,w
以纠正符号之间的相对方向。然后第二次旋转将整个表达式旋转到最终方向。
由于箭头,最终方向的垂直中心轴在水平情况下是水平数学轴。因此,单个符号第一次旋转的原点位于数学轴上,水平方向位于中间。origin=c
不能使用,因为垂直位置不是数学轴,而是符号的中间。
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\node (A) at (0,0){A};
\node (B) at (0,-2){B};
\draw[->]
(A)--node[auto]{%
\rotatebox[origin=c]{-90}{$
\sbox0{$\vcenter{}$}% get the height of the math axis
\rotatebox[x=.5\width, y=\ht0]{90}{$v$}
\mapsto
\rotatebox[x=.5\width, y=\ht0]{90}{$w$}
$}%
}(B);
\end{tikzpicture}
\end{document}