
He creado un gráfico simple de borde de nodo en el que me gustaría que los textos de cada borde estén alineados con la dirección del borde.
\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}
Por ejemplo, me gustaría que el texto tbc
gire -90
grados automáticamente para alinearse con la dirección del borde que conecta el nodo B
con el nodo C
. ¿Es eso posible?
Respuesta1
La respuesta a la pregunta de cómo hacer que el texto funcione.a lo largo deel camino es utilizar la sloped
clave. Esto gira el nodo para que coincida con la tangente de la ruta en el punto en el que se colocaría el nodo (consulte la Sección 16.8 del Manual de PGF).
Sin embargo, como se señala en los comentarios, esto no funciona como se desea. Esto se debe a la auto
clave. Esto desplaza el nodo fuera del camino. Lo hace colocando uno de los anclajes de nodo en el punto de colocación, el anclaje elegido apropiadamente para la tangente de la ruta (no he mirado el código, así que supongo cómo lo elige). El problema viene con el hecho de que primero se elige el ancla y luego se gira el nodo. Lo que debería suceder es que se gira el nodo y luego se elige el ancla. Pero en realidad, esto no necesita ningún código complicado ya que el ancla siempre será uno de north
o south
(si allow upside down
está configurado, siempre será south
). Así que simplemente configurar anchor=south
en lugar de auto
bastará.
Aquí hay un ejemplo simple que demuestra el análisis anterior. Los tres primeros nodos no lo son sloped
, los tres segundos sí lo son. El primero de los triples no tiene (otras) opciones, el segundo sí auto
y el tercero sí anchor=south
. De los puntos 2 y 5 queda claro que el nodo efectivamente ha sido girado alrededor de su punto de anclaje.
Aquí está su código con este cambio (más un par de cambios de estilo menores: tikz
se carga pgf
automáticamente y \tikzstyle
se deprecia).
\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, auto=false
no es necesario ya que anchor=south
anula la auto
clave)
Y aquí está el resultado: