textwidth
我想设置相对于纸张布局的列大小。但是我得到了意想不到的结果:
以下是 MWE:
\documentclass{article}
\usepackage{lipsum}
\begin{document}
\lipsum[1]
\noindent
\begin{tabular}{|p{0.3\textwidth}|p{0.3\textwidth}|p{0.3\textwidth}|p{0.1\textwidth}|}
\hline a & b & c & d
\\ \hline 1 & 2 & 3 & 4
\\ \hline
\end{tabular}
\lipsum[2]
\end{document}
这里有什么问题?
答案1
尝试:
\documentclass{article}
\usepackage{calc}
\begin{document}
\noindent\rule{\textwidth}{4pt}\\
\begin{tabular}{|p{0.3\textwidth-2\tabcolsep}
|p{0.3\textwidth-2\tabcolsep}
|p{0.3\textwidth-2\tabcolsep}
|p{0.1\textwidth-2\tabcolsep}|}
\hline a & b & c & d
\\ \hline 1 & 2 & 3 & 4
\\ \hline
\end{tabular}
\end{document}
宽度p{<width>
由单元格内容的宽度决定,因此列的宽度实际上是<width> + 2\tabcolsep
。为了使表格适合文本的宽度,您应该从宽度 i 中减去 2\tabcolsep p{...}
。这将启用包calc
。
编辑:在匆忙中我忘记了单元格的边框线也有一定的宽度。正如 Heiko Oberdiek 在他的评论中指出的那样,有两种情况: - 不使用包array
,则不予考虑(如上面的 MWE 所示 - 使用array
:
\documentclass{article}
\usepackage{array}
\usepackage{calc}
\begin{document}
对于给定的例子,应考虑如下:
\begin{tabular}{|p{0.3\textwidth-2\tabcolsep - 1.25\arrayrulewidth}
|p{0.3\textwidth-2\tabcolsep - 1.25\arrayrulewidth}
|p{0.3\textwidth-2\tabcolsep - 1.25\arrayrulewidth}
|p{0.1\textwidth-2\tabcolsep - 1.25\arrayrulewidth}|}
p{0.3\textwidth-2\tabcolsep - 0.5\arrayrulewidth}
假设第五条垂直线均匀分布在列之间。在这种情况下,我们得到:
并且不考虑表格垂直线的宽度:
我(再次)修正了上述代码。
答案2
这全部的环境的宽度tabular
为\textwidth
加号-- 因为在每列的左侧和右侧插入了(默认值: )8\tabcolsep
量的空格)-- 加号-- 因为有 5 个垂直条。\tabcolsep
6pt
5\arrayrulewidth
2\tabcolsep+1.25\arrayrulewidth
您可以从四个预先指定的列宽中减去一个,或者您可以使用tabularx
环境并让 LaTeX 为您完成宽度计算。
请注意,如果你从所有四列中减去相等的数额,则可用的第四列的空间量将小于前三列空间量的 1/3。相比之下,tabularx
基于 - 的方法将为您提供比例为 3:3:3:1 的可用空间量——当然,这也是您原始示例中的比例。哪种方法“更好”取决于您的用例。
\documentclass{article}
\usepackage{lipsum,tabularx}
\newlength\mylena % for width of first three columns
\setlength\mylena{0.3\textwidth}
\addtolength\mylena{-2\tabcolsep}
\addtolength\mylena{-1.25\arrayrulewidth}
\newlength\mylenb % for width of fourth column
\setlength\mylenb{0.1\textwidth}
\addtolength\mylenb{-2\tabcolsep}
\addtolength\mylenb{-1.25\arrayrulewidth}
\begin{document}
\lipsum[2]
\noindent
\begin{tabular}{|p{\mylena}|p{\mylena}|p{\mylena}|p{\mylenb}|}
\hline a & b & c & d
\\ \hline 1 & 2 & 3 & 4
\\ \hline
\end{tabular}
\noindent
%% Why "1.2" and "0.4"? Because 3*1.2 + 0.4 = 4.
\begin{tabularx}{\textwidth}{|*{3}{>{\hsize=1.2\hsize}X|} >{\hsize=0.4\hsize}X|}
\hline a & b & c & d
\\ \hline 1 & 2 & 3 & 4
\\ \hline
\end{tabularx}
\lipsum[2]
\end{document}