使用 Block 和 nicematrix 包进行多列

使用 Block 和 nicematrix 包进行多列

我想使用nicematrixbooktabs包将文本写入多列。

但是,存在不需要的间距,在图中圈出了。

有什么方法可以摆脱它,以便三列垂直对齐?

欢迎使用其他方法实现此目的,但它们必须:

  • 能够显示方程式的上下有足够的间距,因为 booktabs 包会自动执行
  • 有垂直线
\documentclass[12pt]{article}

\usepackage{graphicx}

\usepackage{float}
\usepackage{nicematrix}
\usepackage{booktabs}

\begin{document}

\begin{table}[H]
    \centering
    \begin{NiceTabular}{|p{3.9em}| p{14em} |p{10em} | p{10em}|}
        \toprule
        \textbf{Test} & \textbf{Test} & \textbf{Test} & \textbf{Test} \\
        \midrule
        H&H&H&$\left(\frac{1}{1+\frac{\alpha}{\beta}}\right)^{10}$\\
        \midrule
        Test
        &
        Test Test Test TestTestTest TestTest Test TestTest TestTest TestTestTest TestTestTestTestTest TestTestTest
        &
        \Block{1-2}{
            \begin{minipage}{22em}
                Test Test Test TestTestTest TestTest Test TestTest TestTest TestTestTest TestTestTestTestTest TestTestTest
        \end{minipage}}
    &
    \\
    \bottomrule
    \end{NiceTabular}
\end{table}

\end{document}

在此处输入图片描述

答案1

在此处输入图片描述

nicematrixT包提供了块对齐列的选项。如果行/列有两行或多行,则不会创建空间。您仍然需要通过指定环境中的\Block列宽和列数来手动确定文本的空间\tabcolsepminipage

\documentclass{article}

\usepackage{calc}
\newlength{\widthWidest}

\usepackage{nicematrix}
\usepackage{booktabs}

\NewDocumentCommand{\testText}{}{Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Etiam lobor- tis facilisis sem. Nullam nec mi et neque pharetra sollicitudin. Praesent imperdiet mi nec ante.}

\NiceMatrixOptions{rules/color=[gray]{0.75}, hvlines}

\begin{document}
    
    \setlength{\widthWidest}{\widthof{\textbf{Header 1}}}%
    \begin{NiceTabular}{p{\widthWidest} p{10em} p{10em} p{10em}}
        
        \toprule
        
        \RowStyle[bold]{} Header 1 & Header 2 & Header 3 & Header 4
        \\
        \midrule
        
        Test
        &
        \Block[T, l]{1-1}{
    
            \smash{\rlap{\rule{\dimexpr 30em + 4\tabcolsep \relax}{0.1pt}}}%
            \testText
            
        }
        &
        \Block[T]{1-2}{
            
            \begin{minipage}{\dimexpr 20em + 2\tabcolsep \relax}
                
                \raggedright
                
                \testText
                
            \end{minipage}
            
        }
        &
        \\
        
        \bottomrule
        
    \end{NiceTabular}
    
\end{document}

答案2

nicematrix这是一个相当简单的表格。在这种情况下,您不需要加载。\multicolumn足以将其整理出来。

关于规则,如果您想使用中定义的规则booktabs,仍然有垂直线,并避免小间隙,一种方法是删除规则周围的空格并通过增加的因子来拉伸表格arraystretch

此外,方程的高度较大,默认情况下会贴在顶部和底部的线上。这通常可以通过添加支柱来解决,例如\xmathstrutmathtools包中单独拉伸此特定单元。

由于表格的大小,代码使用sidewaystable垂直渲染其内容(参见旋转文档以获取更多信息)。

下表:

在此处输入图片描述

以及代码:

\documentclass[12pt]{article}
\usepackage{array}       % for \newcolumntype and \extrarowheight
\usepackage{mathtools}   % for \xmathstrut
\usepackage{rotating}    % for sidewaystable
\usepackage{booktabs}

\newcolumntype{P}[1]{p{#1}}   % >{\raggedright\arraybackslash}
\newcommand\header[1]{\textbf{#1}}

\usepackage[nopar]{kantlipsum}


\begin{document}
\begin{sidewaystable}
    %%% Stretch table
    \renewcommand\arraystretch{1.75}
    \setlength\extrarowheight{-1.5pt}
    %%% Remove spaces around rules
    \setlength\aboverulesep{0pt}
    \setlength\belowrulesep{0pt}
    %%%
    \centering
    \begin{tabular}{|
            P{3.9em}|
            P{14em}|
            *2{P{10em}|}
        }
        \toprule
        \header{Test}
        & \header{Test} & \header{Test} & \header{Test} \\
        \midrule
        H & H & H & $\xmathstrut{0.75}
                     {0.75} \left(
                                \frac{1}{1+\frac{\alpha}{\beta}}
                            \right)^{10}$ \\
        \midrule
        Test
        & \kant[2][2]
        & \multicolumn{2}{P{\dimexpr20em+2\tabcolsep}|}{\kant[1][1]} \\
        \bottomrule
    \end{tabular}
\end{sidewaystable}
\end{document}

答案3

我不太熟悉nicematrix,但是使用该tabularray包可以很容易地编写您的表格:

\documentclass[12pt]{article}
\usepackage{lipsum}

\usepackage{tabularray}
\UseTblrLibrary{amsmath, booktabs}

\begin{document}

\begin{table}[ht]
    \centering
    \begin{tblr}{colspec = {l X[1.2, j] *{2}{X[0.8, j]}},
                 row{1}  = {font=\bfseries},
                 rowsep  = 3pt,
                 hspan   = minimal
                 }
    \toprule
Test    &   Test    &   Test    &   Test    \\
    \midrule
H       &   H       &   H       &   $\left(\dfrac{1}{1+\frac{\alpha}{\beta}}\right)^{10}$\\
    \midrule
Test    & \lipsum[66]
                    &   \SetCell[c=2]{j}    \lipsum[11]
                                &           \\
    \bottomrule
    \end{tblr}
\end{table}

\end{document}

只需一次编译即可获得最终结果:

在此处输入图片描述

如果您喜欢表格中有垂直线,只需添加表格前言vlines选项:

    \begin{tblr}{colspec = {l X[1.2, j] *{2}{X[0.8, j]}},
                 row{1}  = {font=\bfseries},
                 rowsep  = 3pt,
                 hspan   = minimal,
                 vlines
                 }

表格如下:

在此处输入图片描述

相关内容