Saltar al contenido

TikZ: ¿Cómo dibujar una flecha en el medio de la línea?

Si te encuentras con alguna parte que te causa duda puedes dejarlo en la sección de comentarios y te ayudaremos lo más rápido posible.

Solución:

los decorations La biblioteca se puede utilizar para todo tipo de cosas como esta. Desafortunadamente, es un poco detallado.

usetikzlibrarydecorations.markings

beginscope[very thick,decoration=
    markings,
    mark=at position 0.5 with arrow>
    ] 
    draw[postaction=decorate] (-4,0)--(4,0);
    draw[postaction=decorate] (4,0)--(4,2);
    draw[postaction=decorate] (4,2)--(-4,2);
    draw[postaction=decorate] (-4,2)--(-4,0);
endscope

Editar: Una solución general para aplicar algunos estilos (como poner una flecha en el medio) a cada segmento de una ruta arbitraria.

Hay dos estilos:

  • la on each segment El estilo utiliza el show path construction decoración de decorations.pathreplacing biblioteca para aplicar algunos estilos (su argumento) en cada segmento de una ruta.

  • la mid arrow style usa el método de la respuesta de Caramdir (a través de decorations.markings biblioteca) a poner una flecha en medio de un camino (su argumento es el color de la flecha).

Primero, el preámbulo:

documentclassstandalone
usepackagetikz
usetikzlibrarydecorations.pathreplacing,decorations.markings

Los dos estilos:

tikzset
  % style to apply some styles to each segment of a path
  on each segment/.style=
    decorate,
    decoration=
      show path construction,
      moveto code=,
      lineto code=
        path [#1]
        (tikzinputsegmentfirst) -- (tikzinputsegmentlast);
      ,
      curveto code=
        path [#1] (tikzinputsegmentfirst)
        .. controls
        (tikzinputsegmentsupporta) and (tikzinputsegmentsupportb)
        ..
        (tikzinputsegmentlast);
      ,
      closepath code=
        path [#1]
        (tikzinputsegmentfirst) -- (tikzinputsegmentlast);
      ,
    ,
  ,
  % style to add an arrow in the middle of a path
  mid arrow/.style=postaction=decorate,decoration=
        markings,
        mark=at position .5 with arrow[#1]stealth
      ,

Luego el resultado y el documento:

ingrese la descripción de la imagen aquí

begindocument
begintikzpicture
  path [draw=blue,postaction=on each segment=mid arrow=red]
  (.2,0) -- (3,1) arc (0:180:1.4 and 1) -- cycle
  (4,1) circle(.8)
  (6,1) ellipse(.5 and 1)
  (0,3) to [bend left] (3,4)
  (4,3) rectangle (6,4)
  ;
endtikzpicture
enddocument

Actualización: 2020-02-22: Este código ha sido reemplazado y no debe usarse. También anida tikzpictures, algo que más tarde me di cuenta de que no era bueno. La respuesta de Caramdir es la mejor solución integral, pero si desea algo parecido a este, entonces la respuesta de Kpym usando pics tiene el mismo espíritu que este pero sin los inconvenientes.


Dado que la sintaxis precisa que especifica no es posible, aquí hay algo que logra el efecto deseado sin tener que especificar las coordenadas de los puntos medios.

documentclassarticle
thispagestyleempty
usepackagetikz
usetikzlibraryarrows
newcommandmidarrowtikz draw[-triangle 90] (0,0) -- +(.1,0);

begindocument
begintikzpicture
beginscope[very thick, every node/.style=sloped,allow upside down]
  draw (-4,0)-- node midarrow (4,0);
  draw (4,0)-- node midarrow (4,2);
  draw (4,2)-- node midarrow (-4,2);
  draw (-4,2)-- node midarrow (-4,0);
endscope
endtikzpicture
enddocument

(la arrows la biblioteca tikz es solo para obtener puntas de flecha más prominentes)

Esto produce:

texto alternativo

(No estoy seguro de qué es esa línea vertical en el lado derecho. No está en el original, por lo que debe ser un artefacto del proceso pdf->png)

Te mostramos las comentarios y valoraciones de los usuarios

Agradecemos que desees añadir valor a nuestra información aportando tu experiencia en las críticas.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *