当我使用\shortstack
在表格单元格中创建新行时,行分隔与 的值定义的不同\arraystretch
。以下 MWE 显示了该问题:
\documentclass[a4paper]{article}
\usepackage{siunitx}
\usepackage{booktabs}
\begin{document}
\renewcommand{\arraystretch}{3}
\begin{tabular}{cc} \toprule
Metal & \shortstack{Temperature \\ m.p.(\si{\celsius}) \\ b.p(\si{\celsius}) } \\ \midrule
Mg & \shortstack[c]{650 \\ 1090} \\
Al & \shortstack[c]{660 \\ 2467} \\
\bottomrule
\end{tabular}
\par\bigskip
\renewcommand{\arraystretch}{1}
\begin{tabular}{cc} \toprule
Metal & \shortstack{Temperature \\ m.p.(\si{\celsius}) \\ b.p(\si{\celsius}) } \\ \midrule
Mg & \shortstack[c]{650 \\ 1090} \\
Al & \shortstack[c]{660 \\ 2467} \\
\bottomrule
\end{tabular}
\end{document}
我如何才能使 的行分隔\shortstack
与 定义的表相同\arraystretch
?或者我如何控制 的行分隔\shortstack
?
答案1
该stackengine
包中有一个\Shortstack
宏,其中有一个可设置的间隙设置。由于\shortstack
间隙为 3pt,因此我在这里将其设置为 9pt \Shortstack
。
\documentclass[a4paper]{article}
\usepackage{siunitx}
\usepackage{booktabs}
\usepackage[usestackEOL]{stackengine}
\begin{document}
\setstackgap{S}{9pt}
\renewcommand{\arraystretch}{3}
\begin{tabular}{cc} \toprule
Metal & \Shortstack{Temperature \\ m.p.(\si{\celsius}) \\ b.p(\si{\celsius}) } \\ \midrule
Mg & \Shortstack[c]{650 \\ 1090} \\
Al & \Shortstack[c]{660 \\ 2467} \\
\bottomrule
\end{tabular}
\par\bigskip
\renewcommand{\arraystretch}{1}
\begin{tabular}{cc} \toprule
Metal & \shortstack{Temperature \\ m.p.(\si{\celsius}) \\ b.p(\si{\celsius}) } \\ \midrule
Mg & \shortstack[c]{650 \\ 1090} \\
Al & \shortstack[c]{660 \\ 2467} \\
\bottomrule
\end{tabular}
\end{document}
如果这不是您想要的间距,那么还有一个\addstackgap
宏可以在参数上方和下方添加堆叠间隙(在本例中为\Shortstack
)。
\documentclass[a4paper]{article}
\usepackage{siunitx}
\usepackage{booktabs}
\usepackage[usestackEOL]{stackengine}
\begin{document}
\setstackgap{S}{9pt}
\renewcommand{\arraystretch}{3}
\begin{tabular}{cc} \toprule
Metal & \addstackgap{\Shortstack{Temperature \\ m.p.(\si{\celsius}) \\ b.p(\si{\celsius}) }} \\ \midrule
Mg & \addstackgap{\Shortstack[c]{650 \\ 1090}} \\
Al & \Shortstack[c]{660 \\ 2467} \\
\bottomrule
\end{tabular}
\par\bigskip
\renewcommand{\arraystretch}{1}
\begin{tabular}{cc} \toprule
Metal & \shortstack{Temperature \\ m.p.(\si{\celsius}) \\ b.p(\si{\celsius}) } \\ \midrule
Mg & \shortstack[c]{650 \\ 1090} \\
Al & \shortstack[c]{660 \\ 2467} \\
\bottomrule
\end{tabular}
\end{document}
答案2
不要重新定义内核/核心宏,因为您不知道它们在其他地方使用(在内核或其他软件包中)。
重新定义为更相关的内容以满足您的需求似乎相当简单\shortstack
,并且未在任何基类中使用(article
,book
或者report
):
\documentclass{article}
\usepackage{siunitx,booktabs}% http://ctan.org/pkg/{siunitx,booktabs}
\renewcommand{\shortstack}[2][c]{%
\begin{tabular}[b]{@{}#1@{}}% [c]enter; [t]op; [b]ottom
#2
\end{tabular}%
}
\begin{document}
\renewcommand{\arraystretch}{1.5}
\begin{tabular}{cc}
\toprule
Metal & \shortstack{Temperature \\ m.p.(\si{\celsius}) \\ b.p(\si{\celsius}) } \\
\midrule
Mg & \shortstack[c]{650 \\ 1090} \\
Al & \shortstack[c]{660 \\ 2467} \\
\bottomrule
\end{tabular}
\par\bigskip
\renewcommand{\arraystretch}{1}
\begin{tabular}{cc}
\toprule
Metal & \shortstack{Temperature \\ m.p.(\si{\celsius}) \\ b.p(\si{\celsius}) } \\
\midrule
Mg & \shortstack[c]{650 \\ 1090} \\
Al & \shortstack[c]{660 \\ 2467} \\
\bottomrule
\end{tabular}
\end{document}
答案3
这是我其他答案中不同的方法。如果你想要更改的实际定义\shortstack
,可以按照以下方法进行。我有两个新的宏,\shortstackgap{}
和\restoreshortstack
。第一个宏采用数字参数,该参数(作为点值)用于重新定义\shortstack
间隙。第二个宏重新定义\shortstack
为其默认定义,具有 3pt 堆叠间隙。
\documentclass[a4paper]{article}
\usepackage{siunitx}
\usepackage{booktabs}
\makeatletter
\newcommand\shortstackgap[1]{%
\gdef\@shortstack[##1]{%
\leavevmode
\vbox\bgroup
\baselineskip-\p@\lineskip #1\p@
\let\mb@l\hss\let\mb@r\hss
\expandafter\let\csname mb@##1\endcsname\relax
\let\\\@stackcr
\@ishortstack}
\gdef\@ishortstack##1{\ialign{\mb@l {####}\unskip\mb@r\cr ##1\crcr}\egroup}
}
\newcommand\restoreshortstack{%
\gdef\@shortstack[##1]{%
\leavevmode
\vbox\bgroup
\baselineskip-\p@\lineskip 3\p@
\let\mb@l\hss\let\mb@r\hss
\expandafter\let\csname mb@##1\endcsname\relax
\let\\\@stackcr
\@ishortstack}
\gdef\@ishortstack##1{\ialign{\mb@l {####}\unskip\mb@r\cr ##1\crcr}\egroup}
}
\makeatother
\begin{document}
\renewcommand{\arraystretch}{3}
\shortstackgap{9}
\begin{tabular}{cc} \toprule
Metal & \shortstack{Temperature \\ m.p.(\si{\celsius}) \\ b.p(\si{\celsius}) } \\ \midrule
Mg & \shortstack[c]{650 \\ 1090} \\
Al & \shortstack[c]{660 \\ 2467} \\
\bottomrule
\end{tabular}
\par\bigskip
\restoreshortstack
\renewcommand{\arraystretch}{1}
\begin{tabular}{cc} \toprule
Metal & \shortstack{Temperature \\ m.p.(\si{\celsius}) \\ b.p(\si{\celsius}) } \\ \midrule
Mg & \shortstack[c]{650 \\ 1090} \\
Al & \shortstack[c]{660 \\ 2467} \\
\bottomrule
\end{tabular}
\end{document}