
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:
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 baseline
na mesma coordenada, aqui (0,0)
:
\begin{tikzpicture}[baseline={(0,0)}]
\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
\resizebox
nã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}
(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 Call
e 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.