使用 textwidth 设置表格列宽

使用 textwidth 设置表格列宽

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 个垂直条。\tabcolsep6pt5\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}

相关内容