在表格中使用 textwidth 确保表格宽度与 textwidth 相同

在表格中使用 textwidth 确保表格宽度与 textwidth 相同

我很困惑为什么\begin{tabular}{|p{0.6\textwidth} | p{0.4\textwidth}|} 会生成一个宽度大于页面宽度的表格textwidth,因为0.6+0.4应该是1.0,所以我期望表格的宽度与相同textwidth。根据https://en.wikibooks.org/wiki/LaTeX/Page_Layout这是 Latex 页面布局

Mathematica 图形

但是当我运行以下 MWE 并告诉geometry绘制框架时:

Mathematica 图形

我看到我的表格超出了文本宽度,尽管我的 2 列加到100%textwidth

\documentclass[11pt]{book}
\usepackage[letterpaper,showframe]{geometry}

\begin{document}
\noindent
\begin{tabular}{|p{0.6\textwidth} | p{0.4\textwidth}|}\hline
A&B\\\hline
\end{tabular}

\end{document} 

这是 pdf

Mathematica 图形

问题是:正确的编码方法是什么,以便列宽添加到100%并且textwidth表格不会溢出textwidth

我试图使我的表格始终与相同textwidth,并且不像我所做的那样使用英寸或厘米为单位的硬编码宽度值,而是使用分数textwidth,这样如果我更改文档的样式或更改页面大小,表格在所有情况下始终保持不变textwidth

答案1

您的计算没有考虑列宽|或列间间隔。您可以明确考虑这些因素。

\documentclass[11pt]{book}
\usepackage[letterpaper,showframe]{geometry}
\usepackage{array,calc}
\newcolumntype{Y}[1]{>{\hsize=#1\hsize}X}
\begin{document}
\noindent
\begin{tabular}{|p{.6\textwidth-2\tabcolsep-.6pt} | p{0.4\textwidth-2\tabcolsep-.6pt}|}\hline
  A&B\\\hline
\end{tabular}
\end{document}

适合宽度

但是,让包为您完成tabularx这项工作要简单得多。例如:

\documentclass[11pt]{book}
\usepackage[letterpaper,showframe]{geometry}
\usepackage{array,tabularx}
\newcolumntype{Y}[1]{>{\hsize=#1\hsize}X}
\begin{document}
\noindent
\begin{tabularx}{\textwidth}{|X | p{0.4\textwidth}|}\hline
  A&B\\\hline
\end{tabularx}

\noindent
\begin{tabularx}{\textwidth}{|Y{1.2} | Y{.8}|}\hline
  A&B\\\hline
\end{tabularx}
\end{document}

tabularx 的可能性

在第一种情况下,一列具有指定的宽度,并且X扩展以填充剩余空间 - 比略小.6\textwidth,如上所述。

在第二种情况下,tabularx要求使用两X列,但不是使它们大小相等(就像我们使用时那样)|X|X|,而是要求弄清楚如何使其中一列等于.4可用宽度的,另一列等于.6该宽度的。至关重要的是,这里的总数加起来等于列数X。这里有 2X列,1.2+.8就是 2。

列规范的代码Y来自tabularx手册。如果您使用它,请参阅文档以了解使用X不同宽度的列时的一些注意事项。如果您使用一个或多个普通X列(|X|p{.45\textwidth}|XcXXr),则这些注意事项不适用。(但当然,如果您使用该包,您仍然应该阅读手册。)

相关内容