在表格中为 \dfrac 创建额外空间,同时垂直居中多行和其他单元格

在表格中为 \dfrac 创建额外空间,同时垂直居中多行和其他单元格
\documentclass{article}
\usepackage[a4paper, portrait, margin=0.5in]{geometry}
\usepackage[table]{xcolor}
\usepackage[most]{tcolorbox}
\usepackage{amsmath}
\usepackage{multirow}

\begin{document}
\large

\renewcommand{\arraystretch}{1.5}
\newcolumntype{P}[1]{>{\raggedright\arraybackslash}p{#1}}
\newcolumntype{M}[1]{>{\raggedright\arraybackslash}m{#1}}
\begin{center}
    \begin{tabular}{ | M{1.5cm} | M{9.5cm} | M{1cm} | M{4.5cm} |}
    \hline
    \centering \multirow{6}{*}{1} &
    $f(3) = 100$
    \par \medskip
    $a=\dfrac{50}{21}-\dfrac{13}{42}b$ & \hfill \textbf{A} & B
    \tabularnewline
    \cline{2-4}
    & $3x^2-x-4=(3x-4)(x+1)$ & \hfill \textbf{C} & D
    \tabularnewline
    \cline{2-4}
    & \vspace{0.15cm} $f(-1) = 0$ or $f(\dfrac{4}{3}) = 0$
    \par \medskip
    $b=-\dfrac{2}{3}a$ & \hfill \textbf{E} & F
    \tabularnewline
    \cline{2-4}
    & $a=3, \; b=-2$ & \hfill \textbf{G} & H
    \tabularnewline
    \hline
\end{tabular}
\end{center}

\end{document}

此代码提供以下输出: 在此处输入图片描述

AB 行和 EF 行底部的 \dfrac 被 \cline 切断。有没有办法为分数创建额外的空间,同时保持行中其他单元格的垂直居中?(带有 \dfrac 的单元格也应垂直居中)

多行列(标记为“1”)的垂直居中是可以通过的,但我是一个完美主义者。有人能帮忙确保多行列的垂直居中吗?

提前致谢!

答案1

像这样?

在此处输入图片描述

%\documentclass{article}
%\usepackage[a4paper, portrait, margin=0.5in]{geometry}
\documentclass[margin=3mm]{standalone}
\usepackage{xcolor}
\usepackage{tabularray}
\UseTblrLibrary{amsmath}

\begin{document}
    \begin{tblr}{hlines, vlines,
                 colspec={Q[c,m, wd=15mm] Q[l,m, wd=95mm, mode=dmath] 
                          Q[r,m, wd=10mm, font=\bfseries] Q[l, m, wd=45mm]},
                 rowsep=7pt,
                 }
\SetCell[r=4]{c}    1
    &   \begin{aligned}
            f(3) & = 100  \\
            a    & =\dfrac{50}{21} - \dfrac{13}{42}b
        \end{aligned}   &   A   &   B       \\
    &   3x^2-x-4=(3x-4)(x+1)
                        &   C   &   D       \\
    &   \begin{aligned}
            f(-1) & = 0 \text{ or } f\biggl(\dfrac{4}{3}\biggr) = 0  \\
                b & = -\dfrac{2}{3}a
        \end{aligned}   &   E   &   F       \\
    &   a=3,  b=-2      &   G   &   H       \\
    \end{tblr}
\end{document}

附录:
要使单元格中的所有方程式左对齐(如您在下面的评论中所要求的那样),并保留简单的表格代码和单元格内容周围所需的垂直空间,最简单的方法是使用环境array。例如:

\begin{array}{@{}l}
            f(3)  = 100 \\
            a     =\dfrac{50}{21} - \dfrac{13}{42}b
\end{array}

对于较短的写作来说,定义新的环境可能会很方便。

\newenvironment{la}%
    {
    \begin{array}{@{} l}
    }
    {
    \end{array}
    }

包含两种数组编写方式的 MWE 为:

%\documentclass{article}
%\usepackage[a4paper, portrait, margin=0.5in]{geometry}
\documentclass[margin=3mm]{standalone}
\usepackage{xcolor}
\usepackage{tabularray}
\UseTblrLibrary{amsmath}
\newenvironment{la}%
    {
    \begin{array}{@{} l}
    }
    {
    \end{array}
    }

\begin{document}
    \begin{tblr}{hlines, vlines,
                 colspec={Q[c,m, wd=15mm] Q[l,m, wd=95mm, mode=dmath]
                          Q[r,m, wd=10mm, font=\bfseries] Q[l, m, wd=45mm]},
                 row{1} = {font=\bfseries, mode=text},
                 row{2-Z} ={rowsep=7pt},
                 }
no. & equations         & right & left      \\
\SetCell[r=4]{c}    1
    &   \begin{array}{@{} l}
            f(3) = 100  \\
            a    = \dfrac{50}{21} - \dfrac{13}{42}b
        \end{array}     &   A   &   B       \\
    &   3x^2-x-4=(3x-4)(x+1)
                        &   C   &   D       \\
    &   \begin{la}
            f(-1) = 0 \quad\text{or}\quad f\biggl(\dfrac{4}{3}\biggr) = 0 \\
                b = -\dfrac{2}{3}a\hfill
        \end{la}        &   E   &   F       \\
    &   a=3,  b=-2      &   G   &   H       \\
    \end{tblr}
\end{document}

在此处输入图片描述

答案2

该软件包nicematrix可以帮助解决几个问题,并且代码更简单。

该环境NiceTabularX允许将表格保留在文本区域内。\begin{NiceTabularX}{<total width>}{ X ....

\Block{<nro of rows - nro of columns>}{<content>}将使内容在分配的空间中居中(例如,本例中为 3x1 单元格)并允许\\在内部使用。

hvlines将绘制所有线条。

A

\documentclass{article}
\usepackage[a4paper, portrait, margin=0.5in, showframe]{geometry}% added showframe <<<<<<<<<<<<<
\usepackage[table]{xcolor}
\usepackage[most]{tcolorbox}
\usepackage{amsmath}
\usepackage{multirow}

\usepackage{nicematrix} % added <<<<<<<<<<<

\begin{document}
\large

\renewcommand{\arraystretch}{1.5}

\newcolumntype{C}[1]{>{\centering\arraybackslash}m{#1}} % centered column
\newcolumntype{B}[1]{>{\bfseries\centering\arraybackslash}m{#1}} % bold column

\newcolumntype{M}[1]{>{\raggedright\arraybackslash}m{#1}}

\noindent\begin{NiceTabularX}{\linewidth}{X C{9.5cm} B{1cm} C{4.5cm} }[hvlines] 
\Block{8-1}{1}  &\Block{3-1}{$\begin{aligned}
                                f(3)    & = 100 \\ 
                                    a   &=\dfrac{50}{21}-\dfrac{13}{42}b
                            \end{aligned}$ }                                                        &\Block{3-1}{A} &\Block{3-1}{B} \\                      
                &                                                                                   &               &       \\              
                &                                                                                   &               &       \\                  
                & $3x^2-x-4=(3x-4)(x+1)$                                                            &C              & D     \\
                &\Block{3-1}{$\begin{aligned}
                        f(-1)   & = 0 \text{ or } f\biggl(\dfrac{4}{3}\biggr) = 0\\
                            b   & = -\dfrac{2}{3}a
                \end{aligned}$}                                                                     &\Block{3-1}{E} & \Block{3-1}{F} \\                 
                &                                                                                   &               &       \\
                &                                                                                   &               &       \\                                          
                & $a=3, \; b=-2$                                                                    &G              & H     \\
\end{NiceTabularX}
        
\end{document}

答案3

这是使用 的另一种方法nicematrix。您必须编译两次。

  • \NiceMatrixOptions{cell-space-limits = 2pt}将增加间距来适应您的大分数。
  • 列类型wcwlwr允许您设置列宽。
  • 水平和垂直线的选项[hvlines](但要尊重块)。
  • 1要将置于第一列的中心,请\Block{4-1}{1}在单元格 1-1 中使用。{4-1}表示 4 行 1 列的块。
  • \Block[l]{}{line1\\line2}允许多行单元格。这称为“单行”块。为了增加垂直间距,我使用了\\[1ex]

在此处输入图片描述

\documentclass{article}
\usepackage[a4paper, margin=0.5in]{geometry}

\usepackage{nicematrix}

\begin{document}
\large
\renewcommand{\arraystretch}{1.5}

\begin{center}
\NiceMatrixOptions{cell-space-limits = 2pt}
\begin{NiceTabular}{wc{1.5cm}wl{9.5cm}wr{1cm}wl{4.5cm}}[hvlines]
\Block{4-1}{1} & \Block[l]{}{$f(3)=100$\\[1ex]$a=\dfrac{50}{21}-\dfrac{13}{42}b$} & \textbf{A} & B \\
 & $3x^2-x-4=(3x-4)(x+1)$ & \textbf{C} & D \\
 & \Block[l]{}{$f(-1) = 0$ or $f(\dfrac{4}{3}) = 0$\\[1ex]$b=-\dfrac{2}{3}a$} & \textbf{E} & F \\
 & $a=3, \; b=-2$ & \textbf{G} & H
\end{NiceTabular}
\end{center}

\end{document}

相关内容