为了看起来更美观一些,我写了一个表格,如下:
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{titlesec}
\usepackage{booktabs}
\usepackage{tabularx}
\usepackage{makecell}
\usepackage{graphics}
\usepackage{graphicx}
\usepackage{caption}
\usepackage{subcaption}
\usepackage{multirow}
\usepackage{enumitem}
\begin{document}
\begin{table}[ht]
\centering
\setlength{\tabcolsep}{2pt}
\renewcommand{\arraystretch}{1.5}
\begin{tabular}{p{0.3\textwidth}>{\centering}p{0.12\textwidth}>{\centering}p{0.12\textwidth}>{\centering}p{0.12\textwidth}>{\centering}p{0.12\textwidth}>{\centering\arraybackslash}p{0.12\textwidth}}
\hline
& \multicolumn{2}{c}{\textbf{ONE}} & \multicolumn{2}{c}{\textbf{TWO}} & \textit{Total} \\
& $Obs$ & $Exp$ & $Obs$ & $Exp$ & \\
\hline
\textbf{First Line} & 4 & 22 & 1 & 2.31 & 17 \\
\textbf{Second Line} & 5 & 1.79 & 9 & 5 & 28 \\
\hline
\centering \textit{Total} & \multicolumn{2}{c}{22} & \multicolumn{2}{c}{23} & \\
\hline
\end{tabular}
\caption{Some caption}
\label{tab:onetab}
\end{table}
\end{document}
现在,此代码生成了一个非常干净且可读的表格,但不太灵活。问题是它不灵活,但它的列具有固定大小。我怎样才能使它动态化(即仅依赖于\textwidth
)并使其使用所有可用的水平空间?
一种可能的合适解决方案是使用 tabularx 环境,但我无法使用这种表格来做到这一点。
答案1
使用该包的一种可能性tabularray
:
\documentclass{article}
\usepackage{booktabs}
\usepackage{tabularray}
\begin{document}
\begin{table}[ht]
\begin{tblr}{
colspec={@{}X[4,l,font=\bfseries]X[c]X[c]X[c]X[c]X[c]},
row{1}={font=\bfseries},
row{2}={font=\itshape},
cell{1}{6}={font=\itshape},
cell{5}{1}={c,font=\itshape}
}
\hline
& \SetCell[c=2]{h} ONE & & \SetCell[c=2]{h} TWO & & Total \\
& Obs & Exp & Obs & Exp & \\
\hline
First Line & 4 & 22 & 1 & 2.31 & 17 \\
Second Line & 5 & 1.79 & 9 & 5 & 28 \\
\hline
Total & \SetCell[c=2]{h} 22 & & \SetCell[c=2]{h} 23 & & \\
\hline
\end{tblr}
\caption{Some caption}
\label{tab:onetab2}
\end{table}
\end{document}