我很困惑为什么\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 页面布局
但是当我运行以下 MWE 并告诉geometry
绘制框架时:
我看到我的表格超出了文本宽度,尽管我的 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
问题是:正确的编码方法是什么,以便列宽添加到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}
在第一种情况下,一列具有指定的宽度,并且X
扩展以填充剩余空间 - 比略小.6\textwidth
,如上所述。
在第二种情况下,tabularx
要求使用两X
列,但不是使它们大小相等(就像我们使用时那样)|X|X|
,而是要求弄清楚如何使其中一列等于.4
可用宽度的,另一列等于.6
该宽度的。至关重要的是,这里的总数加起来等于列数X
。这里有 2X
列,1.2+.8
就是 2。
列规范的代码Y
来自tabularx
手册。如果您使用它,请参阅文档以了解使用X
不同宽度的列时的一些注意事项。如果您使用一个或多个普通X
列(|X|p{.45\textwidth}|
或XcXXr
),则这些注意事项不适用。(但当然,如果您使用该包,您仍然应该阅读手册。)