As imagens do Tikz não estão alinhadas verticalmente

As imagens do Tikz não estão alinhadas verticalmente

Como posso alinhar verticalmente os eixos de dois gráficos desenhados no tikz lado a lado? Aqui está o meu 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 você pode ver na imagem abaixo, os eixos estão ligeiramente desalinhados: insira a descrição da imagem aqui O problema parece vir do fato de que o g em 'Long' torna o título esquerdo mais alto. Tentei definir as mesmas dimensões de redimensionamento para ambas as imagens e valign = t, mas ambas não funcionaram.

Responder1

Simplesmente posicione baselinena mesma coordenada, aqui (0,0):

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

captura de tela

\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}

Responder2

  • Um pequeno erro de alinhamento vertical das imagens é causado por tamanhos verticais diferentes dos nós de título: o primeiro contém a letra g com descendente, o segundo não possui essa letra. Se você prescrever a profundidade do texto, por exemplo com text depth=0.5ex, ambos os nós de título terão a mesma altura, conseqüentemente ambas as imagens ficarão alinhadas verticalmente.
  • Fora do tópico: o uso de \resizeboxnão é uma boa ideia. Ele também altera o tamanho das fontes (então você perde o controle sobre elas).
\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}

insira a descrição da imagem aqui

(as linhas vermelhas mostram as bordas do texto)

Responder3

Uma solução um pouco mais genérica para quando diferentes alturas de texto em títulos ou legendas prejudicam o alinhamento vertical é fazer o Latex fingir que também há uma letra mais alta (mais baixa) no outro texto.

Se seus dois textos forem Long Calle Short Call, basta alterar o último para Short Call\vphantom{g}. Dessa forma, o Latex irá tratá-lo como se também ocupasse esse espaço vertical (mas sem espaço horizontal adicional).

Observe que isso é um pouco complicado e quase sempre há uma solução melhor, como alterar a origem neste caso, mas é um truque útil se você quiser corrigir rapidamente o alinhamento. Você só precisa saber/adivinhar quais letras estão causando isso, ou usar um pouco de exagero Short Call\vphantom{Long Call}, só para ter certeza.

informação relacionada