¿Cuál es la diferencia entre xshift/yshift y las coordenadas relativas al dibujar una flecha entre nodos?

¿Cuál es la diferencia entre xshift/yshift y las coordenadas relativas al dibujar una flecha entre nodos?

Anoche elaboré esta pieza LaTeX, usando coordenadas relativas para unir nodos con flechas:

\documentclass[a4paper,10pt]{article}

\usepackage{tikz}
\usetikzlibrary{positioning} %for [above], [below] and shit.
\usetikzlibrary{arrows}
\usetikzlibrary{shapes}

\begin{document}
    \begin{figure}[generic_scheme]
        \tikzstyle{block}=[draw,shape=rectangle, minimum width=2.5cm,
            minimum height=1cm]
        \tikzstyle{f_arrow}=[->, thick]
        \tikzstyle{d_arrow}=[<->, thick]
        \begin{tikzpicture}[auto]
            \node[block] (nuc) [] {Intel NUC};
            \node[block] (power) [above=of nuc, yshift=0.5cm]
                {Power\\Circuit};
            \node[block] (smps) [left=of nuc, yshift=1.25cm] {SMPS};

            \draw[f_arrow] (power.south) -- (nuc.north);
            \draw[f_arrow] (power.west)++(0, -0.25) --
                (smps.east)++(0, 0.25);
            \draw[d_arrow] (nuc.west)++(0, 0.25) --
                (smps.east)++(0, -0.25);
        \end{tikzpicture}
    \end{figure}
\end{document}

El resultado fue algo desconcertante: Líneas que usan coordenadas relativas entre nodos.

Hoy probé esta forma alternativa usando yshiften lugar de coordenadas relativas:

\documentclass[a4paper,10pt]{article}

\usepackage{tikz}
\usetikzlibrary{positioning} %for [above], [below] and shit.
\usetikzlibrary{arrows}
\usetikzlibrary{shapes}

\begin{document}
    \begin{figure}[generic_scheme]
        \tikzstyle{block}=[draw,shape=rectangle, minimum width=2.5cm,
            minimum height=1cm]
        \tikzstyle{f_arrow}=[->, thick]
        \tikzstyle{d_arrow}=[<->, thick]
        \begin{tikzpicture}[auto]
            \node[block] (nuc) [] {Intel NUC};
            \node[block] (power) [above=of nuc, yshift=0.5cm]
                {Power\\Circuit};
            \node[block] (smps) [left=of nuc, yshift=1.25cm] {SMPS};

            \draw[f_arrow] (power.south) -- (nuc.north);
            \draw[f_arrow] ([yshift=-0.25cm]power.west) --
                ([yshift=0.25cm]smps.east);
            \draw[d_arrow] ([yshift=0.25cm]nuc.west) --
                ([yshift=-0.25cm]smps.east);
        \end{tikzpicture}
    \end{figure}
\end{document}

Lo que funcionó como se suponía: Líneas que utilizan desplazamiento y entre nodos.

Entonces, mi pregunta sería, ¿cuál es la diferencia entre estas piezas aparentemente "idénticas" LaTeX? ¿Me estoy perdiendo algo trivial al intentar entender cómo relative coordinatefunciona yshift? ¿O es simplemente un error en mi Ubuntu 14.04instalación de pdfTeX 3.1415926-2.5-1.40.14?

Respuesta1

El problema aquí es que usar

\draw[d_arrow] (nuc.west)++(0, 0.25) --
                (smps.east)++(0, -0.25);

eresnosumando/restando 0,25 de las coordenadas sin afectar el camino. Estás moviendo el lápiz, como muestra el siguiente ejemplo sencillo (mira dónde termina la línea en ambos casos y dónde resulta la punta de la flecha):

\documentclass{article}
\usepackage{tikz}

\begin{document}
\begin{tikzpicture}
\draw (0,0) grid (6,3);
\draw (0,0)++(0.5,0.5) -- (2,2)++(0.5,0.5);
\draw[->] (3,0)++(0.5,0.5) -- (5,2)++(0.5,0.5);
\end{tikzpicture}
\end{document}

ingrese la descripción de la imagen aquí

La secuencia

\draw[->] (3,0)++(0.5,0.5) -- (5,2)++(0.5,0.5);

puede ser visto como:

  • Mueva el lápiz a (3,0).
  • Muévelo (pero sin dibujar) adicionalmente 0,5 en las coordenadas xey.
  • Empiece a dibujar hasta (5,2).
  • Mueva el lápiz adicionalmente 0,5 en ambas coordenadas nuevamente (pero ahora no hay dibujo).
  • Coloque las puntas de las flechas.

Si desea agregar los valores, use turnos o la calcbiblioteca (quizás una exageración aquí):

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}

\begin{document}
\begin{tikzpicture}
\draw (0,0) grid (6,3);
\draw[->] ([shift={(0.5,0.5)}]0,0) -- ([shift={(0.5,0.5)}]2,2);
\draw[->] ( $ (3,0) +(0.5,0.5) $ ) -- ( $ (5,2) + (0.5,0.5) $ );
\end{tikzpicture}
\end{document}

ingrese la descripción de la imagen aquí

información relacionada