![如何更改表格宽度以适应两列布局?](https://linux22.com/image/419278/%E5%A6%82%E4%BD%95%E6%9B%B4%E6%94%B9%E8%A1%A8%E6%A0%BC%E5%AE%BD%E5%BA%A6%E4%BB%A5%E9%80%82%E5%BA%94%E4%B8%A4%E5%88%97%E5%B8%83%E5%B1%80%EF%BC%9F.png)
我正在使用两列 ACM 格式撰写研究报告。我使用以下代码创建了一个表格。代码创建的问题是宽度太大,延伸到整个页面。我需要帮助缩小它的宽度。
\begin{table}[h!]
\begin{tabular}{lcccc}
\toprule
Benchmark & Number of Nodes & Residual Energy of Original & Residual Energy of Modified & Percentage of Residual Energy \% \\ [0.5ex]
\hline
1 & 10 & 1.171 J & 1.214 J & 4.3\% \\
\hline
2 & 30 & 1.145 J & 1.197 J & 5.2\% \\
\hline
3 & 50 & 1.116 J & 1.163 J & 4.7\% \\
\hline
4 & 70 & 1.152 J & 1.186 J & 3.4\% \\
\hline
5 & 100 & 1.193 J & 1.235 J & 4.15\% \\
\hline
Avg & & 1.1554 J & 1.1989 J & 4.35\% \\
\bottomrule
\end{tabular}
\end{table}
答案1
我假设您所说的“ACM 格式”指的是acmart
文档类。如果这个假设不正确,请告知。
我建议您将tabular
环境替换tabularx
为允许在标题单元格中自动换行的环境。我还建议您将有关单位(焦耳、%)的信息从表格主体中取出并放入标题中。
\documentclass[twocolumn]{acmart}
\usepackage{booktabs}
% new code:
\raggedbottom
\usepackage{tabularx,ragged2e,siunitx}
\newcolumntype{Y}[1]{>{\Centering\hspace{0pt}\hsize=#1\hsize}X}
\usepackage{lipsum} % for filler text
\begin{document}
\begin{table}[h!]
\begin{tabularx}{\columnwidth}{@{} Y{0.73} Y{0.85} Y{1.09} Y{1.09} Y{1.24} @{}}
% Note: 0.73+0.85+1.09+1.09+1.24 = 5 = # of X-type columns
\toprule
Benchmark & Number of Nodes &
Residual Energy of Original &
Residual Energy of Modified &
Percentage of Residual Energy \\
& & [\,J] & [\,J] & [\%] \\
\midrule
1 & 10 & 1.171 & 1.214 & 4.3 \\
2 & 30 & 1.145 & 1.197 & 5.2 \\
3 & 50 & 1.116 & 1.163 & 4.7 \\
4 & 70 & 1.152 & 1.186 & 3.4 \\
5 & 100 & 1.193 & 1.235 & 4.15 \\
\addlinespace
Avg& & 1.1554& 1.1989& 4.35 \\
\bottomrule
\end{tabularx}
\end{table}
\lipsum % filler text
\end{document}
答案2
以下是如何将表格放入双栏文章的一栏中。我还删除了命令\hline
并使用了siunitx
来改善表格中数字的对齐。为了避免表格中的重复,我将单位放在相应的列标题中,为了留出空间,我使用包\thead
中的命令添加了换行符makecell
。最后,我还tabular*
结合使用了 以\extracolsep
确保表格的宽度与文本列的宽度完全相同。
根据您使用的文档类别,输出可能会有所不同,但您仍然应该大致了解我如何确保您的表格适合一列。
\documentclass[twocolumn]{article}
\usepackage{lipsum}
\usepackage{booktabs}
\usepackage{siunitx}
\usepackage{makecell}
\renewcommand{\theadfont}{\normalsize}
\begin{document}
\begin{table}
\setlength{\tabcolsep}{0pt}
\begin{tabular*}{\linewidth}{@{\extracolsep{\fill}}lS[table-format=3] *{2}{S[table-format=1.4]} S[table-format=1.2]}
\toprule
& & \multicolumn{3}{c}{\thead{Residual Energy}}\\
\cmidrule{3-5}
{\thead[l]{Bench-\\mark}}
& {\thead{No. of\\ Nodes}}
& {\thead{Original\\ in \si{\joule}}}
& {\thead{Modified\\ in \si{\joule}}}
& {\thead{Percentage}}\\
\midrule
1 & 10 & 1.171 & 1.214 & 4.3 \\
2 & 30 & 1.145 & 1.197 & 5.2 \\
3 & 50 & 1.116 & 1.163 & 4.7 \\
4 & 70 & 1.152 & 1.186 & 3.4 \\
5 & 100 & 1.193 & 1.235 & 4.15 \\
Avg & & 1.1554 & 1.1989 & 4.35 \\
\bottomrule
\end{tabular*}
\end{table}
\lipsum
\end{document}
答案3
您可以使用tabularx
环境来代替tabular
。在这种情况下,您不仅可以将表格的宽度设置为textwidth
(也可以通过 实现),还可以通过使用强制列宽相等的列类型来tabular*
避免列溢出到边距中。X
使用您发布的示例,您可能会得到类似这样的结果
使用完整最小代码,
\documentclass{article}
\usepackage{booktabs}
\usepackage{tabularx}
%
\begin{document}
\begin{table}[h!]
\begin{tabularx}{\textwidth}{XXXXX}
\toprule
Benchmark & Number of Nodes & Residual Energy of Original & Residual Energy of Modified & Percentage of Residual Energy \% \\ [0.5ex]
\hline
1 & 10 & 1.171 J & 1.214 J & 4.3\% \\
\hline
2 & 30 & 1.145 J & 1.197 J & 5.2\% \\
\hline
3 & 50 & 1.116 J & 1.163 J & 4.7\% \\
\hline
4 & 70 & 1.152 J & 1.186 J & 3.4\% \\
\hline
5 & 100 & 1.193 J & 1.235 J & 4.15\% \\
\hline
Avg & & 1.1554 J & 1.1989 J & 4.35\% \\
\bottomrule
\end{tabularx}
\end{table}
\end{document}