Фотографии Tikz не выравниваются по вертикали

Фотографии Tikz не выравниваются по вертикали

Как мне вертикально выровнять оси двух графиков, нарисованных в 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}, просто чтобы быть уверенным.

Связанный контент