在 Tikz 中,如何使边缘上的文本具有与边缘相同的方向?

在 Tikz 中,如何使边缘上的文本具有与边缘相同的方向?

我创建了一个简单的节点边图,其中我希望每个边上的文本与边的方向对齐。

\documentclass[class=minimal,border=0pt]{standalone}
\usepackage{pgf}
\usepackage{tikz}
\usetikzlibrary{arrows,automata}
\usepackage[latin1]{inputenc}
\begin{document}

\begin{tikzpicture}[->,>=stealth',shorten >=1pt,auto,node distance=2.8cm,
                    semithick]
  \tikzstyle{every state}=[fill=red,draw=none,text=white]

  \node[state]         (D)                     {$D$};
  \node[state]         (C) [below right of=D]  {$C$};
  \node[state]         (B) [above right of=D]  {$B$};
  \node[state]         (A) [below right of=B]  {$A$};

  \path (D) edge              node {tdc} (C)            
        (B) edge              node {tbc} (C)
        (C) edge              node {tca} (A);
\end{tikzpicture}

\end{document}

例如,我希望文本自动tbc旋转度数以与连接节点到节点的-90边的方向对齐。这可能吗?BC

答案1

如何让文本走下去的问题的答案沿着路径是使用sloped键。这会旋转节点以匹配放置节点的路径的切线(请参阅 PGF 手册第 16.8 节)。

但是,正如评论中所述,这并不能完全按照预期工作。这是因为键auto。这会将节点移出路径。它通过将其中一个节点锚点放置在放置点来实现这一点,该锚点是针对路径的切线适当选择的(我没有看过代码,所以我猜测它是如何选择的)。问题在于首先选择锚点,然后旋转节点。应该发生的是旋转节点,然后选择锚点。但实际上,这不需要任何复杂的代码,因为锚点始终是north或之一south(如果allow upside down设置了,那么它将始终是south)。所以只需设置anchor=south而不是就auto可以了。

这是一个简单的例子,演示了上述分析。前三个节点不是sloped,后三个是。第一个三元组没有(其他)选项,第二个是,auto第三个是anchor=south。从第 2 个和第 5 个可以清楚地看出,该节点已有效地围绕其锚点旋转。

节点旋转至路径

这是进行此项更改后的代码(加上一些细微的风格变化:自动tikz加载pgf\tikzstyle弃用)。

\documentclass{standalone}
%\url{http://tex.stackexchange.com/q/67552/86}
\usepackage{tikz}
\usetikzlibrary{arrows,automata}
\usepackage[latin1]{inputenc}
\begin{document}
\begin{tikzpicture}[
  ->,
  >=stealth',
  shorten >=1pt,
  auto,
  node distance=2.8cm,
  semithick,
  every state/.style={fill=red,draw=none,text=white},
]
  \node[state]         (D)                     {$D$};
  \node[state]         (C) [below right of=D]  {$C$};
  \node[state]         (B) [above right of=D]  {$B$};
  \node[state]         (A) [below right of=B]  {$A$};

  \path[every node/.style={sloped,anchor=south,auto=false}]
        (D) edge              node {tdc} (C)            
        (B) edge              node {tbc} (C)
        (C) edge              node {tca} (A);
\end{tikzpicture}
\end{document}

(注意:这auto=false不是必需的,因为会anchor=south覆盖auto密钥)

结果如下:

提问者的图片和箭头上的文字

相关内容