En Tikz, ¿cómo hacer que el texto en un borde tenga la misma dirección que el borde?

En Tikz, ¿cómo hacer que el texto en un borde tenga la misma dirección que el borde?

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 tbcgire -90grados automáticamente para alinearse con la dirección del borde que conecta el nodo Bcon 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 slopedclave. 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 autoclave. 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 northo south(si allow upside downestá configurado, siempre será south). Así que simplemente configurar anchor=southen lugar de autobastará.

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í autoy 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.

nodos girados hacia el camino

Aquí está su código con este cambio (más un par de cambios de estilo menores: tikzse carga pgfautomáticamente y \tikzstylese 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=falseno es necesario ya que anchor=southanula la autoclave)

Y aquí está el resultado:

Imagen del interrogador con texto junto con flechas.

información relacionada