我在 Latex 中遇到了表格问题,无法使用。我在网上发现,我可以将表格放入多列环境中,将 4 列更改为 3 列,如果我从 4 列更改为 2 列,这似乎可以正常工作,但从 4 列更改为 3 列则不行。
我不确定问题出在哪里,但我想我必须以某种方式定义多列内表格的宽度。
我已经包含了代码以及生成的表格。希望正确完成后它看起来应该会很明显 :)
\documentclass[12pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage{tabularx}
\setlength{\arrayrulewidth}{1mm}
\setlength{\tabcolsep}{18pt}
\begin{document}
\begin{table}[]
\centering
\begin{tabular}{|c|c|c|c|}
\hline
\multicolumn{4}{|c|}{Site 3 freeboard statistics}\\
\hline
Data & Mean ($\mu$) & Median & Spread ($\sigma$) \\
\hline
ALS mid line & 1.018 & 0.947 & 0.539\\
ALS mid full width & 0.481 & 0.389 & 0.296 \\
ALS at CryoSat width & 0.664 & 0.561 & 0.500\\
Karen & 1.047 & 1.017 & 0.432 \\
CryoSat w/o. snow & 0.200 & 0.200 & 0.080\\
CryoSat w. snow & 0.401 & 0.401 & 0.101\\
\hline
\multicolumn{4}{|c|}{Averaged to CryoSat resolution}\\
\hline
\multicolumn{4}{|c|}{\begin{tabular}{c|c|c} & First point & Second point \\
\hline
ALS mid line & 0.826 & 1.211 \\
ALS mid full width & 0.545 & 0.413 \\
ALS at CryoSat width & & \\
KAREN & 0.877 & 1.220 \\
CryoSat w/o. snow & 0.12 & 0.28 \\
CryoSat w. snow & 0.502 & 0.300
\end{tabular}}\\
\hline
\end{tabular}
\caption{Snow statistics when fitting the in situ data only along latitude.}
\label{tab:site2_stat}
\end{table}
\end{document}
答案1
我将按照以下方式书写您的表格:
\documentclass[12pt,a4paper]{article}
\usepackage{booktabs, makecell}
\usepackage{siunitx}
\begin{document}
\begin{table}[htb]
\centering
\setlength\tabcolsep{0pt}
\begin{tabular*}{\linewidth}{@{\extracolsep{\fill}}
l *{5}{S[table-format=1.3]} }
\toprule
& \multicolumn{3}{c}{\makecell{Site 3\\ freeboard statistics}}
& \multicolumn{2}{c}{\makecell{Averaged to\\
resolution}} \\
\cmidrule(l){2-4}\cmidrule(l){5-6}
Data & {\makecell[t]{Mean\\ ($\mu$)}}
& {\makecell[t]{Median}}
& {\makecell[t]{Spread\\ ($\sigma$)}}
& {\makecell[t]{First\\ point}}
& {\makecell[t]{Second\\ point}} \\
\midrule
ALS mid line & 1.018 & 0.947 & 0.539 & 0.826 & 1.211 \\
ALS mid full width & 0.481 & 0.389 & 0.296 & 0.545 & 0.413 \\
ALS at CryoSat width & 0.664 & 0.561 & 0.500 & & \\
Karen & 1.047 & 1.017 & 0.432 & 0.877 & 1.220 \\
CryoSat w/o. snow & 0.200 & 0.200 & 0.080 & 0.12 & 0.28 \\
CryoSat w. snow & 0.401 & 0.401 & 0.101 & 0.502 & 0.300 \\
\bottomrule
\end{tabular*}
\caption{Snow statistics when fitting the in situ data only along latitude.}
\label{tab:site2_stat}
\end{table}
\end{document}
- 在表格设计中,下面的评论会考虑您的问题
- 对于数字,使用包
S
中定义的列类型siunitx
- 省略表格的垂直线
- 对于水平线,使用
booktabs
包中定义的规则 - 在我看来,建议的表格设计看起来更专业
答案2
这是 OP 要求的表格,带有围栏和粗条。如您所见,我定义了三种新的列类型,分别是线宽的 4/10、3/10 和 2/10。这里的“线索”是定义第二个表格宽度的线:
\multicolumn{4}{@{}c@{}}{\begin{tabular}{|N|M|M|}
在这里,我从多列单元格中删除了侧边距和垂直线。这样,嵌套表格的宽度将与“主”表格一样宽,并且很容易计算列宽。
如果你使用表格型与固定宽度的w
列结合大批,计算就简单多了。首先,设置一个固定宽度的列,然后X
为主表格设置三列,为嵌套表格设置两列。表格型为您完成所有复杂的数学运算。我定义了一个C
列,它只是一个居中的X
列。参见下面的示例 2
注意! @Zarko 的表格好多了,我建议你按照他的建议来制作你的表格。
示例 1 – 表格
\documentclass[12pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage{tabularx, array}
\setlength{\arrayrulewidth}{1mm}
\setlength{\tabcolsep}{18pt}
\setlength{\extrarowheight}{2pt}
\newcolumntype{N}{wc{\dimexpr((\linewidth/10)*4-(2\tabcolsep+2\arrayrulewidth))\relax}}
\newcolumntype{O}{wc{\dimexpr((\linewidth/10)*2-(2\tabcolsep+\arrayrulewidth))\relax}}
\newcolumntype{M}{wc{\dimexpr((\linewidth/10)*3-(2\tabcolsep+\arrayrulewidth))\relax}}
\begin{document}
\begin{table}[th!]
\centering
\begin{tabular}{|N|*{3}{O|}}
\hline
\multicolumn{4}{|c|}{Site 3 freeboard statistics}\\
\hline
Data & Mean ($\mu$) & Median & Spread ($\sigma$) \\
\hline
ALS mid line & 1.018 & 0.947 & 0.539\\
ALS mid full width & 0.481 & 0.389 & 0.296 \\
ALS at CryoSat width & 0.664 & 0.561 & 0.500\\
Karen & 1.047 & 1.017 & 0.432 \\
CryoSat w/o. snow & 0.200 & 0.200 & 0.080\\
CryoSat w. snow & 0.401 & 0.401 & 0.101\\
\hline
\multicolumn{4}{|c|}{Averaged to CryoSat resolution}\\
\hline
\multicolumn{4}{@{}c@{}}{\begin{tabular}{|N|M|M|}
& First point & Second point \\
\hline
ALS mid line & 0.826 & 1.211 \\
ALS mid full width & 0.545 & 0.413 \\
ALS at CryoSat width & & \\
KAREN & 0.877 & 1.220 \\
CryoSat w/o. snow & 0.12 & 0.28 \\
CryoSat w. snow & 0.502 & 0.300
\end{tabular}}\\
\hline
\end{tabular}
\caption{Snow statistics when fitting the in situ data only along latitude.}
\label{tab:site2_stat}
\end{table}
\end{document}
示例 2 – tabularx
\documentclass[12pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage{tabularx, array}
\setlength{\arrayrulewidth}{1mm}
\setlength{\tabcolsep}{18pt}
\setlength{\extrarowheight}{2pt}
\newcolumntype{C}{>{\centering\arraybackslash}X}
\begin{document}
\begin{table}[th!]
\centering
\begin{tabularx}{\linewidth}{|wc{4cm}|*{3}{C|}}
\hline
\multicolumn{4}{|c|}{Site 3 freeboard statistics}\\
\hline
Data & Mean ($\mu$) & Median & Spread ($\sigma$) \\
\hline
ALS mid line & 1.018 & 0.947 & 0.539\\
ALS mid full width & 0.481 & 0.389 & 0.296 \\
ALS at CryoSat width & 0.664 & 0.561 & 0.500\\
Karen & 1.047 & 1.017 & 0.432 \\
CryoSat w/o. snow & 0.200 & 0.200 & 0.080\\
CryoSat w. snow & 0.401 & 0.401 & 0.101\\
\hline
\multicolumn{4}{|c|}{Averaged to CryoSat resolution}\\
\hline
\multicolumn{4}{@{}c@{}}{{\begin{tabularx}{\linewidth}{|wc{4cm}|C|C|}
& First point & Second point \\
\hline
ALS mid line & 0.826 & 1.211 \\
ALS mid full width & 0.545 & 0.413 \\
ALS at CryoSat width & & \\
KAREN & 0.877 & 1.220 \\
CryoSat w/o. snow & 0.12 & 0.28 \\
CryoSat w. snow & 0.502 & 0.300
\end{tabularx}}}\\
\hline
\end{tabularx}
\caption{Snow statistics when fitting the in situ data only along latitude.}
\label{tab:site3_stat}
\end{table}
\end{document}