我有以下带有两个节点的代码:
\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}
红线只是为了引导视线。