![如何使用多行和多列来格式化比较表?](https://linux22.com/image/471334/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%E5%A4%9A%E8%A1%8C%E5%92%8C%E5%A4%9A%E5%88%97%E6%9D%A5%E6%A0%BC%E5%BC%8F%E5%8C%96%E6%AF%94%E8%BE%83%E8%A1%A8%EF%BC%9F.png)
对于我的新研究论文,我在使用 LaTeX 格式化比较表时遇到了困难。我使用了最近提供给我的帮助来准备使用多列的表格,但具体来说,我发现代码输出(封闭)之间有一些额外的空间。C2 和 C3 列之间有额外的空间,我不知道如何解决这个问题。另外,我想将系统 1 的三行合并为一行,其中包含三个案例 A、B 和 C,系统 2 的三行也类似。我知道多行是要使用的命令,但我请求您帮助我。将来,我将在希望获得的封闭代码帮助下格式化表格。
非常感谢您的帮助!!
祝好,桑达尔
\documentclass[11pt]{article}
\usepackage{float}
\usepackage{amssymb}
\usepackage{graphicx}
\usepackage{subfig}
\usepackage{array}
\usepackage{booktabs}
\usepackage{caption}%
\begin{document}
\begin{table}
\caption{Comparison Table}
\centering
\begin{tabular}{lcccccc}
\toprule
Name of the System & Case & \multicolumn{3}{c}{Lyapunov Exponents} & Maximum Value & Pascal Dimension \\
\cmidrule{3-5}% added
& & $C1$ & $C2$ & $C3$ & & \\
\midrule
System (1) & A & a1 & a2 & a3 & a1 & P1 \\[1mm] \hline
System (1) & B & b1 & b2 & b3 & b1 & P2 \\[1mm] \hline
System (1) & C & c1 & c2 & c3 & c1 & P3 \\[1mm] \hline
System (2) & A & d1 & d2 & d3 & d1 & Q1 \\[1mm] \hline
System (2) & B & e1 & e2 & e3 & e1 & Q2 \\[1mm] \hline
System (2) & C & f1 & f2 & f3 & f1 & Q3 \\[1mm] \hline
\bottomrule
\end{tabular}
\end{table}
\end{document}
答案1
以下解决方案使用w
列类型(由包提供array
)代替c
“Lyapunov 指数”下方三列的基本列类型。它还在最后两列的标题单元格中引入了换行符,以帮助确保表格材料适合文本块的宽度。
附录: 如果你想知道我是怎么想出来的
\setlength{\mylen}{(\widthof{Lyapunov exponents}-4\tabcolsep)/3}
开始。
长度宏
\mylen
存储标题“Lyapunov exponents”下方三列的可用宽度;目标是找到最小值,使得\mylen
三列间距相等。为简单起见,我们将字符串的宽度称为“Lyapunov exponents”z
;z
可以确定为\widthof{Lyapunov exponents}
,其中\widthof
是提供的宏计算包裹。按照惯例,如果表格列的可用宽度为
x
,则该列的总宽度为x+2\tabcolsep
,因为 LaTeX 会在列的两侧插入 的空白,数量为\tabcolsep
。因此,三个合并的底层列的总宽度为3\mylen+6\tabcolsep
,其中\mylen
是我们需要确定的长度。第二条信息是,合并后的 3 个列的总宽度为
z+2\tabcolsep
;2\tabcolsep
附录来自 LaTeX 在合并标题两侧插入的空白填充。如果我们将实体
3\mylen+6\tabcolsep
和等同起来z+2\tabcolsep
,我们将得到一个线性方程,其中包含一个已知变量(z
),一个常数(\tabcolsep
)和一个未知变量(\mylen
)。剩下要做的就是求解\mylen
。
\documentclass[11pt]{article}
\usepackage{amssymb,amsmath}
\usepackage{graphicx,subfig,float}
\usepackage{array} % for 'w' column type
\usepackage{booktabs,caption}
% new:
\captionsetup{skip=0.333\baselineskip} % default: 1\baselinskip
\usepackage{calc} % simplify calculations
\newlength\mylen % scratch length parameter
\newcommand\mytab[1]{%
\smash[b]{\begin{tabular}[t]{@{}c@{}}#1\end{tabular}}}
\begin{document}
\begin{table}
\setlength{\mylen}{% % calculate _usable_ width of middle-3 columns
(\widthof{Lyapunov exponents}-4\tabcolsep)/3}
\caption{Comparison Table}
\centering
\begin{tabular}{@{} l c *{3}{w{c}{\mylen}} c c @{}}
\toprule
Name of system & Case &
\multicolumn{3}{c}{Lyapunov exponents} &
\mytab{Maximum\\ value} &
\mytab{Pascal\\ dimension} \\
\cmidrule(lr){3-5}
& & C1 & C2 & C3 \\
\midrule
System 1 & A & a1 & a2 & a3 & a1 & P1 \\
& B & b1 & b2 & b3 & b1 & P2 \\
& C & c1 & c2 & c3 & c1 & P3 \\
\addlinespace % <-- new
System 2 & A & d1 & d2 & d3 & d1 & Q1 \\
& B & e1 & e2 & e3 & e1 & Q2 \\
& C & f1 & f2 & f3 & f1 & Q3 \\
\bottomrule
\end{tabular}
\end{table}
\end{document}
答案2
替代:
- 对于表格,我将使用表格类型,我可以规定表格宽度,例如
tabularx
或tabularray
- 使用
tblr
包tabularray
可以确定列宽之间的比率,因此为了代码简单我会使用它:
\documentclass[11pt]{article}
\usepackage{tabularray}
\UseTblrLibrary{booktabs}
\usepackage{caption}%
\begin{document}
\begin{table}[ht]
\caption{Comparison Table}
\centering
\begin{tblr}{colspec = {@{} X[l] *{4}{X[0.5,c]} *{2}{X[c]} @{}},
cell{1}{1,2,6,7} = {r=2}{},
row{2} = {mode=math}
}
\toprule
Name of the System
& Case
& \SetCell[c=3]{c} Lyapunov Exponents
& & & Maximum Value
& Pascal Dimension \\
\midrule
& & C1 & C2 & C3 & & \\
\midrule
System (1) & A & a1 & a2 & a3 & a1 & P1 \\
System (1) & B & b1 & b2 & b3 & b1 & P2 \\
System (1) & C & c1 & c2 & c3 & c1 & P3 \\
\addlinespace
System (2) & A & d1 & d2 & d3 & d1 & Q1 \\
System (2) & B & e1 & e2 & e3 & e1 & Q2 \\
System (2) & C & f1 & f2 & f3 & f1 & Q3 \\
\bottomrule
\end{tblr}
\end{table}
\end{document}