Wie kann man in Tikz dafür sorgen, dass der Text an einer Kante die gleiche Richtung hat wie die Kante selbst?

Wie kann man in Tikz dafür sorgen, dass der Text an einer Kante die gleiche Richtung hat wie die Kante selbst?

Ich habe ein einfaches Knoten-Kanten-Diagramm erstellt, in dem ich die Texte an jeder Kante entsprechend der Kantenrichtung ausrichten möchte.

\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}

Ich möchte zum Beispiel, dass der Text automatisch um Grad tbcgedreht wird -90, um sich an der Richtung der Kante auszurichten, die Knoten Bmit Knoten verbindet C. Ist das möglich?

Antwort1

Die Antwort auf die Frage, wie man den Text zum Laufen bringtentlangder Pfad soll den slopedSchlüssel verwenden. Dadurch wird der Knoten so gedreht, dass er mit der Tangente des Pfads an dem Punkt übereinstimmt, an dem der Knoten platziert werden würde (siehe Abschnitt 16.8 des PGF-Handbuchs).

Wie in den Kommentaren angemerkt, funktioniert dies jedoch nicht ganz wie gewünscht. Das liegt am autoSchlüssel. Dieser verschiebt den Knoten vom Pfad. Dies geschieht, indem einer der Knotenanker am Platzierungspunkt platziert wird, der Anker, der entsprechend der Tangente des Pfads ausgewählt wurde (ich habe mir den Code nicht angesehen, also rate ich, wie er ausgewählt wird). Das Problem entsteht dadurch, dass zuerst der Anker ausgewählt und dann der Knoten gedreht wird. Eigentlich sollte der Knoten gedreht und dann der Anker ausgewählt werden. Aber eigentlich ist dafür kein komplizierter Code erforderlich, da der Anker immer einer von northoder sein wird south(wenn allow upside downgesetzt ist, ist er immer south). Es reicht also aus, einfach zu setzen anchor=southstatt autovon .

Hier ist ein einfaches Beispiel, das die obige Analyse demonstriert. Die ersten drei Knoten sind nicht sloped, die zweiten drei sind . Das erste der Tripel hat keine (anderen) Optionen, das zweite ist autound das dritte ist anchor=south. Aus dem 2. und 5. ist klar ersichtlich, dass der Knoten tatsächlich um seinen Ankerpunkt gedreht wurde.

Knoten, die zum Pfad gedreht wurden

Hier ist Ihr Code mit dieser Änderung (plus ein paar kleineren stilistischen Änderungen: wird automatisch tikzgeladen pgfund \tikzstyleabgewertet).

\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}

(NB: das auto=falseist nicht notwendig, da es anchor=southden autoSchlüssel überschreibt)

Und hier ist das Ergebnis:

Bild des Fragestellers mit Text entlang der Pfeile

verwandte Informationen