
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 tbc
gedreht wird -90
, um sich an der Richtung der Kante auszurichten, die Knoten B
mit Knoten verbindet C
. Ist das möglich?
Antwort1
Die Antwort auf die Frage, wie man den Text zum Laufen bringtentlangder Pfad soll den sloped
Schlü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 auto
Schlü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 north
oder sein wird south
(wenn allow upside down
gesetzt ist, ist er immer south
). Es reicht also aus, einfach zu setzen anchor=south
statt auto
von .
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 auto
und das dritte ist anchor=south
. Aus dem 2. und 5. ist klar ersichtlich, dass der Knoten tatsächlich um seinen Ankerpunkt gedreht wurde.
Hier ist Ihr Code mit dieser Änderung (plus ein paar kleineren stilistischen Änderungen: wird automatisch tikz
geladen pgf
und \tikzstyle
abgewertet).
\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=false
ist nicht notwendig, da es anchor=south
den auto
Schlüssel überschreibt)
Und hier ist das Ergebnis: