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}

正如您在下图中看到的,轴略微未对齐: 在此处输入图片描述 问题似乎出在“Long”中的 g 使左标题更高。我尝试为两张图片定义相同的调整尺寸,并且 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 CallShort Call,只需将后者更改为Short Call\vphantom{g}。这样 Latex 会将其视为也占用了这个垂直空间(但没有额外的水平空间)。

请注意,这有点像 hack,而且几乎总是有更好的解决方案,例如在这种情况下更改原点,但如果您想快速修复对齐,这是一个有用的技巧。您只需要知道/猜测是哪些字母导致了它,或者使用稍微过头的Short Call\vphantom{Long Call},只是为了确保万无一失。

相关内容