请考虑这个MWE:
\documentclass[11pt, a4paper]{article}
\begin{document}
\begin{table}[h]
\begin{tabular}{|p{40mm}|p{100mm}|}
Company & Head Quarters\\
\hline
Foo Bar Company & New York, New York, United States of America\\
Bar Brothers & London, United Kingdom\\
\end{tabular}
\caption{Some companies}
\end{table}
\begin{table}[h]
\begin{tabular}{|p{40mm}|p{50mm}|p{50mm}|}
Fruit & Likeability & Street names\\
\hline
Pears & meh & Baker Street\\
Apples & meh & Harbour Street\\
\end{tabular}
\caption{Some random stuff}
\end{table}
\end{document}
发生了一些奇怪的事情:在表 2 中,中间和右侧列的大小设置为各 50 毫米。然而,它们却不如上表那么宽,后者是 100 毫米。这是为什么?我该怎么做才能确保表 2 与表 1 一样宽?
答案1
将我的评论变成答案:
默认情况下,每列的两侧各有一个空格\tabcolsep
(当两列并排时,会产生两个这样的空格)。您必须在代码中考虑这些空格,并从宽度中减去它们。
附注:您可以使用@{<stuff-between-columns}
两列说明符之间的空格来控制这些空格。因此,@{\hspace*{0.5\tabcolsep}
结果将为一半\tabcolsep
(请注意,@{}
语法会覆盖两个空格,因此,如果在两列之间使用上述空格,则总共只有0.5\tabcolsep
)。
还要注意,如果您使用垂直规则和包,array
垂直规则会占用一些空间(没有array
它们会导致与没有它们相同的水平空间)。因此,如果您使用,array
您必须\arrayrulewidth
在第一列中减去一个额外的值,结果为:{|p{40m}|p{dimexpr50mm-\tabcolsep-\arrayrulewidth\relax}|p{\dimexpr50mm-\tabcolsep\relax}|}
作为列规范。(或0.5\arrayrulewidth
两者兼而有之以获得均匀的结果)
\documentclass[11pt, a4paper]{article}
\begin{document}
\begin{tabular}{|p{40mm}|p{100mm}|}
Company & Head Quarters\\
\hline
Foo Bar Company & New York, New York, United States of America\\
Bar Brothers & London, United Kingdom\\
\end{tabular}
\begin{tabular}{|p{40mm}|*2{p{\dimexpr50mm-\tabcolsep\relax}|}}
Fruit & Likeability & Street names\\
\hline
Pears & meh & Baker Street\\
Apples & meh & Harbour Street\\
\end{tabular}
\end{document}
答案2
一个解决方案tabularx
,因此您不必使用和进行计算\tabcolsep
,\arrayrulewidth
并且表格不会溢出到边距:
\documentclass[11pt, a4paper]{article}
\usepackage[showframe]{geometry}
\usepackage{tabularx}
\begin{document}
\setlength{\extrarowheight}{2pt}
\begin{table}[h]
\begin{tabularx}{\linewidth}{|>{\hsize=0.57\hsize}X|>{\hsize=1.43\hsize\arraybackslash}X|}
Company & Head Quarters\\
\hline
Foo Bar Company & New York, New York, United States of America\\
Bar Brothers & London, United Kingdom\\
\end{tabularx}
\caption{Some companies}
\end{table}
\begin{table}[h]
\begin{tabularx}{\linewidth}{|>{\hsize=0.85\hsize}X|*{2}{>{\hsize=1.075\hsize\arraybackslash}X|}}
Fruit & Likeability & Street names\\
\hline
Pears & meh & Baker Street\\
Apples & meh & Harbour Street\\
\end{tabularx}
\caption{Some random stuff}
\end{table}
\end{document}