我正在使用\extrarowheight
(与 结合使用booktabs
)来使论文中的表格更具可读性。但是,这也影响了环境的布局cases
,现在看起来很奇怪;在下面的示例中,X
现在 的位置太靠后了。
\documentclass{article}
\usepackage{amsmath}
\usepackage{tabularx}
\usepackage{booktabs}
\setlength{\extrarowheight}{4pt}
\setlength{\belowrulesep}{0pt}
\begin{document}
\[
a = \begin{cases}
X \\
Y
\end{cases}
\]
\begin{tabular}{llll}\toprule
$a^b$ & $a_b$ & $a$ & $b$ \\ \midrule
a & b & c & d \\
\bottomrule
\end{tabular}
\end{document}
有没有什么办法可以忽略环境\extrarowheight
中的cases
?
我想一定有某种\renewcommand
魔法可以做到这一点,但我不知道这是否是正确的方法,更不用说我应该从哪里开始......我也意识到我可以在之前重置\extrarowheight
,0
然后\cases
再重新设置,但我的 DRY 警报告诉我不要这样做;)
。
答案1
这是一个重新定义的答案tabular
。
\documentclass{article}
\usepackage{amsmath}
\usepackage{tabularx}
\usepackage{booktabs}
\newenvironment{airytabular}{\setlength{\extrarowheight}{4pt}\setlength{\belowrulesep}{0pt}%
\begin{tabular}}{\end{tabular}}
\begin{document}
\[
a = \begin{cases}
X \\
Y
\end{cases}
\]
\begin{airytabular}{llll}\toprule
$a^b$ & $a_b$ & $a$ & $b$ \\ \midrule
a & b & c & d \\
\bottomrule
\end{airytabular}
\end{document}
像这样设置一个新环境通常是最好的方法,因为其他包,甚至标准类文件可能会使用tabular
正常行为。但是如果你真的想要重新定义它,你可以,但你必须捕捉之前的行为,以避免回归到循环中。这里有一种方法可以做到这一点。
\let\ltxtab\tabular
\let\ltxendtab\endtabular
\renewenvironment{tabular}{\setlength{\extrarowheight}{4pt}\setlength{\belowrulesep}{0pt}%
\ltxtab}{\ltxendtab}
通过这种重新定义,您的tabular
环境将具有改变的空间,但是其他任何事物都不会受到影响,正如您所希望的那样。
这个问题已经出现前顺便一提。
答案2
您只能使用 在环境内定义\extrarowheight
。它\belowrulesep
提供了一个钩子。您必须在序言中添加以下几行:tabular
etoolbox
\AtBeginEnvironment
\AtBeginEnvironment{tabular}{%
\setlength{\extrarowheight}{4pt}
\setlength{\belowrulesep}{0pt}
}%
沒有任何事。
完整代码:
\documentclass{article}
\usepackage{amsmath}
\usepackage{tabularx}
\usepackage{booktabs}
\usepackage{etoolbox}
\AtBeginEnvironment{tabular}{%
\setlength{\extrarowheight}{4pt}
\setlength{\belowrulesep}{0pt}
}%
\begin{document}
\[
a = \begin{cases}
X \\
Y
\end{cases}
\]
\begin{tabular}{llll}\toprule
$a^b$ & $a_b$ & $a$ & $b$ \\ \midrule
a & b & c & d \\
\bottomrule
\end{tabular}
\end{document}