
Как мне вертикально выровнять оси двух графиков, нарисованных в tikz рядом? Вот мой код:
\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}
Как вы можете видеть на рисунке ниже, оси немного смещены:
Проблема, похоже, возникает из-за того, что g в 'Long' делает левый заголовок выше. Я пробовал задать одинаковые размеры изменения размера для обеих картинок и valign = t, но оба варианта не сработали.
решение1
Просто разместите baseline
на той же координате, здесь (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}
решение2
- Небольшое вертикальное выравнивание изображений вызвано разным вертикальным размером узлов заголовка: первый содержит букву g с выносным элементом, второй такой буквы не имеет. Если задать глубину текста, например, с помощью
text depth=0.5ex
, оба узла заголовка будут иметь одинаковую высоту, следовательно, оба изображения будут выровнены по вертикали. - Не по теме: использование
\resizebox
не очень хорошая идея. Оно также меняет размер шрифтов (и вы теряете над ними контроль).
\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}
(красные линии показывают границы текста)
решение3
Еще один более общий способ решения проблемы, когда разная высота текста в заголовках или подписях нарушает вертикальное выравнивание, — заставить Latex сделать вид, что в другом тексте также есть более высокая (нижняя) буква.
Если у вас два текста Long Call
и Short Call
, просто измените последний на Short Call\vphantom{g}
. Таким образом, Latex будет считать его также занимающим это вертикальное пространство (но не дополнительное горизонтальное пространство).
Обратите внимание, что это своего рода хак, и почти всегда есть лучшее решение, например, изменение начала координат в данном случае, но это полезный трюк, если вы хотите быстро исправить выравнивание. Вам просто нужно знать/угадать, какие буквы вызывают это, или использовать слегка избыточный Short Call\vphantom{Long Call}
, просто чтобы быть уверенным.