我想使用nicematrix
和booktabs
包将文本写入多列。
但是,存在不需要的间距,在图中圈出了。
有什么方法可以摆脱它,以便三列垂直对齐?
欢迎使用其他方法实现此目的,但它们必须:
- 能够显示方程式的上下有足够的间距,因为 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
nicematrix
T
包提供了块对齐列的选项。如果行/列有两行或多行,则不会创建空间。您仍然需要通过指定环境中的\Block
列宽和列数来手动确定文本的空间\tabcolsep
minipage
\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
。
此外,方程的高度较大,默认情况下会贴在顶部和底部的线上。这通常可以通过添加支柱来解决,例如\xmathstrut
从mathtools
包中单独拉伸此特定单元。
由于表格的大小,代码使用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
}
表格如下: