对齐并排放置的两个节点的基线

对齐并排放置的两个节点的基线

我有以下带有两个节点的代码:

\documentclass[crop,tikz]{standalone}
\begin{document}

\usetikzlibrary{positioning,calc}
\tikzstyle{block} = [draw, rectangle, minimum height=1cm, minimum width=1cm, outer sep=0pt]

\begin{tikzpicture}
\node [block,align=center](A) { \shortstack{double \\ type} };
\node [block,align=center,right=1.5cm of A](B) { \shortstack{single \\ type} };

\end{tikzpicture}
\end{document}

因为节点 A 的内容没有位于基线以下的“长”字符,所以两条线之间的距离比第二个节点 B 中的距离更近。在那里,“g”字符位于基线以下,因此似乎使用了额外的空间并且两个块没有对齐。

我可以通过在节点 A 中包含 \vphantom{g} 来解决这个问题。但是,这会使两个块中的行距都很大。

相反,我希望行距小一点,只是好像没有低于基线的字符

是否有可能以某种方式“忽略”这些字符?

答案1

你应该只列出这些单词/短语的首字母\smash[b]

在此处输入图片描述

\documentclass{article}

\usepackage{tikz,amsmath}

\begin{document}

\usetikzlibrary{positioning,calc}
\tikzstyle{block} = [draw, rectangle, minimum height=1cm, minimum width=1cm, outer sep=0pt]

\begin{tikzpicture}
  \node [block,align=center](A) {\shortstack{double \\ type}};
  \node [block,align=center,right=1.5cm of A](B) {\shortstack{\smash[b]{single} \\ type}};
\end{tikzpicture}

\end{document}

amsmath提供了的扩展版本\smash

答案2

另一种方法是使用\NextLine宏而不是\\。这样就无需因为更改了文本而返回并进行更改:

在此处输入图片描述

参考

代码:

\documentclass[crop,tikz, border=2pt]{standalone}
\begin{document}

%% https://tex.stackexchange.com/a/51406/4301
\newcommand*{\IgnodeDescenders}{-\dimexpr\dp\strutbox+\baselineskip}
\newcommand*{\NextLine}{\strut\\[\IgnodeDescenders]}

\usetikzlibrary{positioning,calc}
\tikzstyle{block} = [draw, rectangle, minimum height=1cm, minimum width=1cm, outer sep=0pt]

\begin{tikzpicture}
\node [block,align=center](A) {\shortstack{double\NextLine type}};
\node [block,align=center,right=1.5cm of A](B) {\shortstack{single\NextLine type}};

\end{tikzpicture}
\end{document}

答案3

pgfmanual 第 65 页对此进行了详细讨论。结果是您可以添加合适的text depth

\documentclass[crop,tikz]{standalone}
\begin{document}

\usetikzlibrary{positioning,calc}
\tikzset{block/.style={draw, rectangle, minimum height=1cm, minimum width=1cm,
outer sep=0pt,text height=3ex,text depth=.25ex}}

\begin{tikzpicture}
\node [block,align=center](A) { double \\ type };
\node [block,align=center,right=1.5cm of A](B) {single \\ type };
\draw[red] (A.west) -- (B.east);
\end{tikzpicture}
\end{document}

在此处输入图片描述

红线只是为了引导视线。

相关内容