当我尝试制作表格时,发现表格最左边的单元格中出现了意外的间隙。
这是我的代码。
\documentclass{article}
\usepackage[a4paper,margin=1in]{geometry}
\usepackage{tabularx}
\renewcommand{\tabularxcolumn}[1]{>{\small}m{#1}}
\newcolumntype{Y}{>{\centering\arraybackslash}X}
\begin{document}
\begin{table}
\centering
\renewcommand{\arraystretch}{1.5}
\begin{tabularx}{1\textwidth}{|>{\centering\arraybackslash}m{1cm} *{13}{|Y}|}%{|X|x|x|x|x|x|x|x|x|x|x|x|x| }
\hline
\multicolumn{13}{|c|}{Team sheet} \\
\hline
\hspace{0pt} Wavelength & \#1 & \#2 & \#3 & \#4 & \#5 & \#6 & \#7 & \#8 & \#9 & \#10 & \#11 & \#12 \\ \hline
400 & 0.0025 & 0.0043 & 0.0020 & 0.0008 & 0.0050 & 0.0036 & 0.0063 & 0.0010 & 0.0014 & 0.0040 & 0.0057 & 0.0014
\end{tabularx}
\end{table}
\end{document}
这就是结果。
如何消除单元格“波长”中的垂直间隙?
请帮我。
答案1
除了您发现的主要问题之外,还有两个(次要)问题也需要解决。
当然,主要问题是带连字符的单词“Wave-length”上方的虚假空白行。出现此问题的原因是 (a)
\hspace{0pt}
单词“Wavelength”之间有空格,并且 (b) 列刚好足够窄,可以容纳“Wave-”,但不能容纳“Wave-”(请注意字符串开头的空格)。由于开头的“ ”无法容纳,因此 LaTeX 必须创建三行才能容纳整个字符串“Wavelength”。最好的“修复”是首先不要在
\hspace{0pt}
和之间留空格,也就是说,将单元格的内容写为Wavelength
\hspace{0pt}Wavelength
备注:如果第一列稍微宽一点(比如说,1.1cm 而不是 1.0cm),您根本不会注意到这个问题,因为“Wave-”(带有前导空格)恰好可以容纳。(不过,您可能不得不思考为什么“Wave-”似乎没有在“length”上方正确居中。)
如果您仔细查看您发布的屏幕截图,您会注意到 12 个数据列中的数字并非完全居中——尽管
\centering
确实如此。发生了什么?居中不完美是因为列数不够。全部的列宽由可用宽度加上\tabcolsep
两边的空白组成。LaTeX 不会让单元格内容侵占左侧空白;如果单元格内容无法连字符,则必须突出到右侧空白中。如何解决这个问题? 的默认值
\tabcolsep
是6pt
。将参数的值减小到 ,例如3pt
,即可实现正确的居中。最后,在您的示例代码中,第二个参数
tabularx
指定了 13 列类型Y
,尽管只需要 12 列。虽然这不会影响排版输出,但它确实会生成大量有关“\hbox 过满”的警告消息。通常,消除警告消息的来源是一个好主意——在本例中,通过指定\begin{tabularx}{\textwidth}{|>{\centering}m{1cm} *{12}{|Y}|}
作为环境的标题
tabularx
。
以下屏幕截图提供了前后对比。请注意,虚假行消失了,并且标有“之后”的表格中第 2 至第 13 列的内容正确居中。顺便说一句,屏幕截图中的第三个表格显示了如果您 (a) 删除所有垂直线和 (b) 使用包的规则绘制宏而不是 ,表格的外观会是怎样的booktabs
。\hline
我希望您会同意,最终的表格“开放”外观在美学上令人愉悦。
\documentclass{article}
\usepackage[a4paper,margin=1in]{geometry}
\usepackage{tabularx,caption,booktabs}
\renewcommand{\tabularxcolumn}[1]{>{\small}m{#1}}
\newcolumntype{Y}{>{\centering\arraybackslash}X}
\begin{document}
\begin{table}[h!] % "[h!]" used just for this example
\caption{Before}
\centering
\renewcommand{\arraystretch}{1.5}
\begin{tabularx}{\textwidth}{|>{\centering\arraybackslash}m{1cm} *{13}{|Y}|}
\hline
\multicolumn{13}{|c|}{Team sheet} \\
\hline
\hspace{0pt} Wavelength & \#1 & \#2 & \#3 & \#4 & \#5 & \#6 & \#7 & \#8 & \#9 & \#10 & \#11 & \#12 \\ \hline
400 & 0.0025 & 0.0043 & 0.0020 & 0.0008 & 0.0050 & 0.0036 & 0.0063 & 0.0010 & 0.0014 & 0.0040 & 0.0057 & 0.0014 \\
\hline
\end{tabularx}
\end{table}
\begin{table}[h!]
\caption{After}
%%\centering % not needed, since width of "tabularx" equals width of text block
\setlength\tabcolsep{2pt} % default value: 6pt
\renewcommand{\arraystretch}{1.5}
\begin{tabularx}{\textwidth}{|>{\centering\arraybackslash}m{1cm} *{12}{|Y}|}
\hline
\multicolumn{13}{|c|}{Team sheet} \\
\hline
\hspace{0pt}Wavelength & \#1 & \#2 & \#3 & \#4 & \#5 & \#6 & \#7 & \#8 & \#9 & \#10 & \#11 & \#12 \\ \hline
400 & 0.0025 & 0.0043 & 0.0020 & 0.0008 & 0.0050 & 0.0036 & 0.0063 & 0.0010 & 0.0014 & 0.0040 & 0.0057 & 0.0014 \\
\hline
\end{tabularx}
\end{table}
\begin{table}[h!]
\caption{With booktabs-based rules}
\setlength\tabcolsep{3pt} % default value: 6pt
%%\renewcommand{\arraystretch}{1.5}
\begin{tabularx}{\textwidth}{@{} >{\centering\arraybackslash}m{1cm} *{12}{Y} @{}}
\toprule
\hspace{0pt}Wavelength & \multicolumn{12}{c@{}}{Team sheet} \\
\cmidrule(l){2-13}
& \#1 & \#2 & \#3 & \#4 & \#5 & \#6 & \#7 & \#8 & \#9 & \#10 & \#11 & \#12 \\ \midrule
400 & 0.0025 & 0.0043 & 0.0020 & 0.0008 & 0.0050 & 0.0036 & 0.0063 & 0.0010 & 0.0014 & 0.0040 & 0.0057 & 0.0014 \\
\bottomrule
\end{tabularx}
\end{table}
\end{document}