如何垂直对齐在 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 Call
和Short Call
,只需将后者更改为Short Call\vphantom{g}
。这样 Latex 会将其视为也占用了这个垂直空间(但没有额外的水平空间)。
请注意,这有点像 hack,而且几乎总是有更好的解决方案,例如在这种情况下更改原点,但如果您想快速修复对齐,这是一个有用的技巧。您只需要知道/猜测是哪些字母导致了它,或者使用稍微过头的Short Call\vphantom{Long Call}
,只是为了确保万无一失。