使用 minipage/math 环境时删除表格中的垂直空间

使用 minipage/math 环境时删除表格中的垂直空间

我正在尝试在表格中包含方程式,我知道我需要使用 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}

相关内容