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回転させたいのですが、それは可能ですか?-90BC

答え1

テキストをどうやって移動させるかという質問に対する答え平行パスはslopedキーを使用することです。これにより、ノードが配置されるポイントでのパスの接線と一致するようにノードが回転します (PGF マニュアルのセクション 16.8 を参照)。

しかし、コメントに書かれているように、これは期待通りには動作しません。これは、autoキーのためです。これにより、ノードがパスから外れます。これは、配置ポイントにノード アンカーの 1 つを配置することによって行われます。アンカーは、パスの接線に対して適切に選択されます (コードを見ていないので、どのように選択されるかは推測です)。問題は、最初にアンカーが選択され、次にノードが回転されるという事実にあります。起こるべきことは、ノードが回転されてからアンカーが選択されることです。しかし、実際には、アンカーは常に または のいずれかであるためnorth(southallow upside down設定されている場合は常に)、これには複雑なコードは必要ありません。したがって、 の代わりにsouthを設定するだけで十分です。anchor=southauto

上記の分析を示す簡単な例を次に示します。最初の 3 つのノードは ではなくsloped、次の 3 つは です。3 つのうち最初のノードには (他の) オプションがなく、2 番目は でauto、3 番目は です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=southauto

そして結果は次のとおりです。

質問者の写真と矢印に沿ったテキスト

関連情報