我正在尝试在表格中包含方程式,我知道我需要使用 minipage 来实现这一点。但由于某种原因,当我包含 minipage/math 组合时,行通常的起始位置与行的起始位置之间会产生间隙。
我尝试使用 abovedisplayskip,但无济于事。还有 trimbox 和 raisebox,两者都成功地将方程式移高,但前两列的文本仍然偏移。
我在子方程中也遇到了同样的问题,但差距更大。
有谁知道为什么会发生这种情况以及/或如何解决它?
\documentclass{article}
\usepackage{xcolor, colortbl}
\usepackage{array,booktabs,tabularx,rotating,amsmath}
\begin{document}
\begin{sidewaystable}
\begin{tabularx}{\textwidth}{X>{$}>{\raggedright\arraybackslash}p{3cm}<{$}l}
\toprule
\textbf{Section} & \textbf{Variables} & \multicolumn{1}{c}{\textbf{Constraints}} \\
\midrule
Section 1 & (0 \le a \le 100)\newline
(0 \le b \le 100) & \begin{minipage}{13cm}
\begin{gather}
a+b \ge 42 \\
a \ge 11
\end{gather}
\end{minipage}\\
\rowcolor{gray!50}
Section 2 & (0 \le c \le 100) \newline
(0 \le d \le 100) &\begin{minipage}{13cm}
\begin{subequations}
\begin{gather}
\text{Given a bunch of stuff define:} \notag \\
\sum_{\mathclap{\substack{a bunch of really\\long stuff}}} (a*d)\\
c=d
\end{gather}
\end{subequations}
\end{minipage}\\
Usually & there & is no vertical space\\
\bottomrule
\end{tabularx}
\end{sidewaystable}
\end{document}
这就是我希望表格对齐的方式。(这是通过将 minipage 放在单独的行上,然后使用 raisebox 将其提升到位来实现的。但这感觉很不方便,必须有一种实际的方法来指定对齐方式。)
答案1
@barbarabeeton @JohnKormylo 感谢您帮助回答这个问题。
答案这帖子解释了 minipage/math 环境组合为何会导致间隙(etoolbox \kern 部分)。指定 minipage 位置 [t] 可更正前两列的对齐方式。\kern 调整中还添加了额外的 .4/normalbaselineskip,以删除等式上方的剩余空间。
\documentclass{article}
\usepackage{xcolor, colortbl}
\usepackage{array,booktabs,tabularx,rotating,amsmath}
\usepackage{adjustbox}
\usepackage{amsthm}
\usepackage{mathtools}
\usepackage{etoolbox}
\makeatletter
\pretocmd\start@gather{%
\if@minipage\kern-\topskip\kern-\abovedisplayskip\kern-.4\normalbaselineskip\fi
}{}{}
\makeatother
\begin{document}
\begin{sidewaystable}
\begin{tabularx}{\textwidth}{X>{$}>{\raggedright\arraybackslash}p{3cm}<{$}l}
\toprule
\textbf{Section} & \textbf{Variables} & \multicolumn{1}{c}{\textbf{Constraints}} \\
\midrule
Section 1 & (0 \le a \le 100)\newline
(0 \le b \le 100) & \begin{minipage}[t]{13cm}
\begin{gather}
a+b \ge 42 \\
a \ge 11
\end{gather}
\end{minipage}\\
\rowcolor{gray!50}
Section 2 & (0 \le c \le 100) \newline
(0 \le d \le 100) & \begin{minipage}[t]{13cm}
\begin{subequations} \label{broke}
\begin{gather}
\text{Given a bunch of stuff define:} \notag \\
\sum_{\mathclap{\substack{a bunch of really\\long stuff}}} (a*d)\\
c=d
\end{gather}
\end{subequations}
\end{minipage}\\
Usually & there \newline is \newline no & space\\
\bottomrule
\end{tabularx}
\end{sidewaystable}
\end{document}