无法正确计算列宽

无法正确计算列宽

请考虑这个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} 

在此处输入图片描述

相关内容