Las imágenes de Tikz no se alinean verticalmente

Las imágenes de Tikz no se alinean verticalmente

¿Cómo puedo alinear verticalmente los ejes de dos gráficos dibujados en tikz uno al lado del otro? Aquí está mi código:

\documentclass{article}
\usepackage{tikz}

\begin{document}
    \begin{center}
        \resizebox{0.45\linewidth}{8cm}{
            \begin{tikzpicture}
            \tikzstyle{every node}=[font=\tiny];
            
            %Axes
            \draw[-latex] (0, 0) -- (3, 0) ;
            \draw[-latex] (0, -1.5) -- (0, 2);
            \node[above] at (0, 2) {\( \$ \)};
            \node[right] at (3, 0) {\( S_T \)}; 

            %Title
            \node[above, font = \small\bfseries] at (current bounding box.north) {Long Call};
            \end{tikzpicture}
        }
        \quad
        \resizebox{0.45\linewidth}{8cm}{
            \begin{tikzpicture}
            \tikzstyle{every node}=[font=\tiny];
            
            %Axes
            \draw[-latex] (0, 0) -- (3, 0) ;
            \draw[-latex] (0, -1.5) -- (0, 2);
            \node[above] at (0, 2) {\( \$ \)};
            \node[right] at (3, 0) {\( S_T \)}; 

            %Title
            \node[above, font = \small\bfseries] at (current bounding box.north) {Short Call};
        \end{tikzpicture}
        }
    \end{center}
\end{document}

Como puedes ver en la imagen de abajo, los ejes están ligeramente desalineados: ingrese la descripción de la imagen aquí El problema parece provenir del hecho de que la g en 'Long' hace que el título izquierdo sea más alto. Intenté definir las mismas dimensiones de cambio de tamaño para ambas imágenes y valign = t, pero ninguna de ellas funcionó.

Respuesta1

Simplemente coloque el baselineen la misma coordenada, aquí (0,0):

\begin{tikzpicture}[baseline={(0,0)}]

captura de pantalla

\documentclass{article}
\usepackage{tikz}

\begin{document}
    \begin{center}
        \resizebox{0.45\linewidth}{8cm}{
            \begin{tikzpicture}[baseline={(0,0)}]
            \tikzstyle{every node}=[font=\tiny];
            
            %Axes
            \draw[-latex] (0, 0) -- (3, 0) ;
            \draw[-latex] (0, -1.5) -- (0, 2);
            \node[above] at (0, 2) {\( \$ \)};
            \node[right] at (3, 0) {\( S_T \)}; 

            %Title
            \node[above, font = \small\bfseries] at (current bounding box.north) {Long Call};
            \end{tikzpicture}
        }
        \quad
        \resizebox{0.45\linewidth}{8cm}{
            \begin{tikzpicture}[baseline={(0,0)}]
            \tikzstyle{every node}=[font=\tiny];
            
            %Axes
            \draw[-latex] (0, 0) -- (3, 0) ;
            \draw[-latex] (0, -1.5) -- (0, 2);
            \node[above] at (0, 2) {\( \$ \)};
            \node[right] at (3, 0) {\( S_T \)}; 

            %Title
            \node[above, font = \small\bfseries] at (current bounding box.north) {Short Call};
        
        \end{tikzpicture}
        }
    \end{center}
\end{document}

Respuesta2

  • La pequeña falta de alineación vertical de las imágenes se debe a diferentes tamaños verticales de los nodos de título: el primero contiene la letra g con descendente, el segundo no tiene dicha letra. Si especifica la profundidad del texto, por ejemplo con text depth=0.5ex, ambos nodos de título tendrán la misma altura y, en consecuencia, ambas imágenes se alinearán verticalmente.
  • Fuera de tema: el uso de \resizeboxno es una buena idea. También cambia el tamaño de las fuentes (por lo que perdiste el control sobre ellas).
\documentclass{article}
\usepackage{tikz}
%---------------- show page layout. don't use in a real document!
\usepackage{showframe}
\renewcommand\ShowFrameLinethickness{0.15pt}
\renewcommand*\ShowFrameColor{\color{red}}
%---------------------------------------------------------------%

\begin{document}
    \begin{center}
\tikzset{
every node/.style = {text depth=0.5ex, font=\small} % <---
        }
    \begin{tikzpicture}
%Axes
\draw[-latex] (0, 0-0) -- (0.4\linewidth, 0) node[right] {\( S_T \)}; 
\draw[-latex] (0,-1.5) -- (0, 3) node[above] {\( \$ \)};
%Title
\node[above, font = \bfseries] at (current bounding box.north) {Long Call};
    \end{tikzpicture}
\hfill
    \begin{tikzpicture}
%Axes
\draw[-latex] (0, 0-0) -- (0.4\linewidth, 0) node[right] {\( S_T \)};
\draw[-latex] (0,-1.5) -- (0, 3) node[above] {\( \$ \)};
%Title
\node[above, font = \bfseries] at (current bounding box.north) {Short Call};
\end{tikzpicture}
    \end{center}
\end{document}

ingrese la descripción de la imagen aquí

(las líneas rojas muestran los bordes del texto)

Respuesta3

Una solución ligeramente más genérica para cuando diferentes alturas de texto en títulos o leyendas arruinan la alineación vertical es hacer que Latex pretenda que también hay una letra más alta (más baja) en el otro texto.

Si sus dos textos son Long Cally Short Call, simplemente cambie este último a Short Call\vphantom{g}. De esta manera, Latex lo tratará como si también ocupara este espacio vertical (pero no espacio horizontal adicional).

Tenga en cuenta que esto es un truco y casi siempre hay una solución mejor, como cambiar el origen en este caso, pero es un truco útil si desea corregir rápidamente la alineación. Sólo necesitas saber/adivina qué letras lo están causando, o usar un poco exagerado Short Call\vphantom{Long Call}, solo para estar seguro.

información relacionada