我是 Latex 的新手,用它制作表格实在太难了。我使用 overleaf 作为提供商。我在调整多列单元格的单元格使其居中时遇到了问题。我在网上查过,有很多答案。然而,在我的情况下,由于某种原因,它们都没有起作用。有人能帮帮我吗?
\begin{table}[H]
\centering
\caption{Performance Metrics for Weather-Insensitive and Weather-Aware Models.\label{Table2}}
\begin{adjustwidth}{-\extralength}{0cm}
\newcolumntype{c}{>{\centering\arraybackslash}X}
\begin{tabularx}{\fulllength}{cccccccc}
\toprule
&& \multicolumn{2}{c}{\textbf{RMSE}} & \multicolumn{2}{c}{\textbf{AAE}} & \multicolumn{2}{c}{\textbf{MAPE}} & \\
\textbf{Location} & \textbf{Prediction Interval} & Weather-insensitive & Weather-aware & Weather-insensitive & Weather-aware &Weather-insensitive & Weather-aware \\
\hline
& t+5 & 4.98 & 4.99& 2.94& 2.94&4.11&4.22 \\
\multirow{1}{*}{A} & t+10 &6.7&5.85&3.49&3.33&5.51&4.71 \\
& t+15 &7.84&7.97&4.07&4.10&6.74&6.83\\
\hline
& t+5 &4.23& 4.21& 2.56 &2.57 &3.47 &3.47\\
\multirow{1}{*}{B} & t+10 &5.80& 5.53& 3.24& 3.14& 4.50
& 4.33 \\
& t+15& 6.27& 6.12& 3.45& 3.40& 4.96& 4.90\\
\hline
& t+5& 5.32& 5.27& 2.97& 3.00& 4.38& 4.32\\
\multirow{1}{*}{C} & t+10 &6.03 &6.07& 3.26& 3.24& 5.10& 5.07 \\
& t+15& 6.66& 6.64& 3.51& 3.49& 5.53& 5.52\\
\hline
& t+5 &5.00 &4.90& 2.65& 2.61& 3.28& 3.21\\
\multirow{1}{*}{D} &t+10& 6.75& 6.52& 3.25& 3.19& 4.15& 4.10 \\
& t+15 & 7.20 & 7.18& 3.65& 3.60& 4.77& 4.64\\
\bottomrule
\end{tabularx}
\end{adjustwidth}
\end{table}
答案1
首先,说明
\newcolumntype{c}{>{\centering\arraybackslash}X}
非常危险,因为c
列类型在 LaTeX 内核中定义并被广泛使用。我建议您使用C
而不是c
作为新列类型的名称。
接下来,这些\multirow
说明似乎没有做任何有用的事情。(为了有机会发挥作用,的第一个参数\multirow
应该大于 1。)因此,我将省略\multirow
包装器。
最后,表格的标题太拥挤了。我建议你大大简化它,也许可以按照下面这个例子的方法。
\documentclass{article}
\usepackage{tabularx,booktabs}
\usepackage{amsmath} % for \smash[b] macro
\newcolumntype{C}{>{\centering\arraybackslash\hspace{0pt}}X}
\newcommand\mytab[1]{\smash[b]{\begin{tabular}[t]{@{} C @{}} #1 \end{tabular}}}
\begin{document}
\begin{table}[ht]
\setlength\tabcolsep{4pt} % default value: 6pt
\caption{Performance metrics for weather-insensitive (W-I) and weather-aware (W-A) models.\strut} \label{Table2}
\begin{tabularx}{\textwidth}{@{} *{8}{C} @{}}
\toprule
\mytab{Location} & \mytab{Prediction Interval}
& \multicolumn{2}{c}{RMSE} & \multicolumn{2}{c}{AAE} & \multicolumn{2}{c@{}}{MAPE} \\
\cmidrule(lr){3-4} \cmidrule(lr){5-6} \cmidrule(l){7-8}
& & W-I & W-A & W-I & W-A & W-I & W-A \\[1.5ex]
\midrule
& $t+\phantom{0}5$ & 4.98 & 4.99 & 2.94 & 2.94 & 4.11 & 4.22 \\
A & $t+10$ & 6.70 & 5.85 & 3.49 & 3.33 & 5.51 & 4.71 \\
& $t+15$ & 7.84 & 7.97 & 4.07 & 4.10 & 6.74 & 6.83 \\
\addlinespace
& $t+\phantom{0}5$ & 4.23 & 4.21 & 2.56 & 2.57 & 3.47 & 3.47 \\
B & $t+10$ & 5.80 & 5.53 & 3.24 & 3.14 & 4.50 & 4.33 \\
& $t+15$ & 6.27 & 6.12 & 3.45 & 3.40 & 4.96 & 4.90 \\
\addlinespace
& $t+\phantom{0}5$ & 5.32 & 5.27 & 2.97 & 3.00 & 4.38 & 4.32 \\
C & $t+10$ & 6.03 & 6.07 & 3.26 & 3.24 & 5.10 & 5.07 \\
& $t+15$ & 6.66 & 6.64 & 3.51 & 3.49 & 5.53 & 5.52 \\
\addlinespace
& $t+\phantom{0}5$ & 5.00 & 4.90 & 2.65 & 2.61 & 3.28 & 3.21 \\
D & $t+10$ & 6.75 & 6.52 & 3.25 & 3.19 & 4.15 & 4.10 \\
& $t+15$ & 7.20 & 7.18 & 3.65 & 3.60 & 4.77 & 4.64 \\
\bottomrule
\end{tabularx}
\end{table}
\end{document}
答案2
我尝试遵循您的表格设计。在删除c
代码片段中的所有错误(其中包括危险的重新定义的默认列类型)并猜测文档序言可能是什么样子后,我构建了以下 MWE:
\documentclass{book}
%---------------- show page layout. don't use in a real document!
\usepackage{showframe}
\renewcommand\ShowFrameLinethickness{0.15pt}
\renewcommand*\ShowFrameColor{\color{red}}
%---------------------------------------------------------------%
\usepackage{tabularx}
\usepackage{booktabs, makecell}
\renewcommand\theadfont{\normalsize\bfseries}
\usepackage[strict]{changepage}
\begin{document}
\begin{table}[ht]
\begin{adjustwidth}{0cm}{-\dimexpr\marginparwidth+\marginparsep}
\caption{Performance Metrics for Weather-Insensitive and Weather-Aware Models.\label{Table2}}
\newcolumntype{C}{>{\centering\arraybackslash}X}
\begin{tabularx}{\linewidth}{@{} c c *{6}{C} @{}}
\toprule
& & \multicolumn{2}{c}{\textbf{RMSE}}
& \multicolumn{2}{c}{\textbf{AAE}}
& \multicolumn{2}{c}{\textbf{MAPE}}
\\
\cmidrule(rl){3-4} \cmidrule(rl){5-6} \cmidrule(rl){7-8}
\textbf{Location}
& \thead[t]{Prediction\\ Interval}
& Weather-insensitive
& Weather-aware
& Weather-insensitive
& Weather-aware
& Weather-insensitive
& Weather-aware \\
\midrule
& t+5 & 4.98 & 4.99 & 2.94 & 2.94 & 4.11 & 4.22 \\
A & t+10 & 6.7 & 5.85 & 3.49 & 3.33 & 5.51 & 4.71 \\
& t+15 & 7.84 & 7.97 & 4.07 & 4.10 & 6.74 & 6.83 \\
\midrule
& t+5 & 4.23 & 4.21 & 2.56 & 2.57 & 3.47 & 3.47 \\
B & t+10 & 5.80 & 5.53 & 3.24 & 3.14 & 4.50 & 4.33 \\
& t+15 & 6.27 &¸6.12 & 3.45 & 3.40 & 4.96 & 4.90 \\
\midrule
& t+5 & 5.32 & 5.27 & 2.97 & 3.00 & 4.38 & 4.32 \\
C & t+10 & 6.03 & 6.07 & 3.26 & 3.24 & 5.10 & 5.07 \\
& t+15 & 6.66 & 6.64 & 3.51 & 3.49 & 5.53 & 5.52 \\
\midrule
& t+5 & 5.00 & 4.90 & 2.65 & 2.61 & 3.28 & 3.21 \\
D & t+10 & 6.75 & 6.52 & 3.25 & 3.19 & 4.15 & 4.10 \\
& t+15 & 7.20 & 7.18 & 3.65 & 3.60 & 4.77 & 4.64 \\
\bottomrule
\end{tabularx}
\end{adjustwidth}
\end{table}
\end{document}
(红线表示页面布局)
答案3
如果你看一下你的表格,就会发现长短语造成了太多的空白。最简单的方法是使用更短的缩写词,并将其解释移到其他地方(移到标题或注释列表中)。表格本身可能需要再考虑一下。
其次,\label
应放在后面\caption{}
,而不是里面。
另一件事是你重新定义了c
列类型。你永远不应该这样做。它会导致不可预测的行为,并且很难调试。
所有 2 组列未按预期对齐的原因是您添加了额外的列分隔符&
。
经过几次快速修改后,表格可以适合标准页面,并且还有更多的改进空间。
编辑。标题看起来很糟糕,但我故意保留原样,因为它可能仍需要重新措辞。如果你想减少它的宽度,你可以把它包裹在里面minipage
,例如
\begin{minipage}{0.8\linewidth}
\caption{Performance Metrics for Weather-Insensitive and Weather-Aware Models.}
\end{minipage}
\documentclass{article}
\usepackage{tabularx}
\usepackage{booktabs}
\usepackage{ragged2e} % For \Centering and \RaggedRight
\usepackage{caption}
\captionsetup[table]{skip=3pt, position=top, format=hang}
\begin{document}
\begin{table}[tbh]
\centering
\caption{Performance Metrics for Weather-Insensitive and Weather-Aware Models.}
\label{Table2}
\newcolumntype{C}{>{\Centering}X}
\newcolumntype{P}[1]{>{\RaggedLeft}p{#1}}
\begin{tabularx}{\linewidth}{P{1.25cm} p{1cm} *6{C}}
\toprule
\multicolumn{1}{r}{\textbf{Location}}
& \multicolumn{1}{c}{\textbf{PI}}
& \multicolumn{2}{c}{\textbf{RMSE}}
& \multicolumn{2}{c}{\textbf{AAE}}
& \multicolumn{2}{c}{\textbf{MAPE}} \\
\cmidrule(lr){3-4} \cmidrule(lr){5-6} \cmidrule(lr){7-8}
&
& W-i % Weather-intensive
& W-a % Weather-aware
& W-i
& W-a
& W-i
& W-a \\
\midrule
& t+5 & 4.98 & 4.99 & 2.94 & 2.94 & 4.11 & 4.22 \\
A & t+10 & 6.7 & 5.85 & 3.49 & 3.33 & 5.51 & 4.71 \\
& t+15 & 7.84 & 7.97 & 4.07 & 4.10 & 6.74 & 6.83 \\
\cmidrule{2-8}
& t+5 & 4.23 & 4.21 & 2.56 & 2.57 & 3.47 & 3.47 \\
B & t+10 & 5.80 & 5.53 & 3.24 & 3.14 & 4.50 & 4.33 \\
& t+15 & 6.27 & 6.12 & 3.45 & 3.40 & 4.96 & 4.90 \\
\cmidrule{2-8}
& t+5 & 5.32 & 5.27 & 2.97 & 3.00 & 4.38 & 4.32 \\
C & t+10 & 6.03 & 6.07 & 3.26 & 3.24 & 5.10 & 5.07 \\
& t+15 & 6.66 & 6.64 & 3.51 & 3.49 & 5.53 & 5.52 \\
\cmidrule{2-8}
& t+5 & 5.00 & 4.90 & 2.65 & 2.61 & 3.28 & 3.21 \\
D & t+10 & 6.75 & 6.52 & 3.25 & 3.19 & 4.15 & 4.10 \\
& t+15 & 7.20 & 7.18 & 3.65 & 3.60 & 4.77 & 4.64 \\
\bottomrule
\multicolumn{8}{@{}l}{\rule{0pt}{2.75ex}\textbf{PI}: Prediction Interval,\qquad W-i: Wather-intensive,\qquad W-a: Weather-aware}
\end{tabularx}
\end{table}
\end{document}