使用多列时,全页宽度的表格会溢出到边距

使用多列时,全页宽度的表格会溢出到边距

我希望创建一个始终横跨整个页面宽度的表格。列需要分别占页面宽度的 20% 和 80%。它们需要独立于\arrayrulewidth\tabcolsep,即它们的宽度需要动态计算。第一行应该是使用命令创建的标题行\multicolumn。除了看起来不错之外,这还为我提供了“硬编码”的全页宽度,因为如果没有它,表格会缩小以适应其内容。

此代码是更大模板的一部分,该模板包含一个自定义命令,该命令通过可选参数用键值对填充表。我将自定义命令剥离到以下 MWE。长度\twocoltablewidth是几个小时摆弄\linewidth\textwidth其他计算的结果。

\documentclass{book}

\usepackage[table]{xcolor}
\usepackage{parskip}
\usepackage[a4paper,showframe]{geometry}


\begin{document}

Textwidth: \the\textwidth

Linewidth: \the\linewidth

Helper lines:

\rule{\textwidth}{0.4pt}

\rule{\linewidth}{0.4pt}

\begin{table}[htb]
  \newlength{\twocoltablewidth}
  \setlength{\twocoltablewidth}{\dimexpr\linewidth-2\tabcolsep-2\arrayrulewidth\relax}
  \begin{tabular}{|p{0.20\dimexpr\twocoltablewidth-\tabcolsep\relax}|p{0.80\twocoltablewidth}|} 
    \hline
    \multicolumn{2}{|p{\twocoltablewidth}|}{\cellcolor{yellow}{Title}\hfill{ID}}      \\
    \hline
    \cellcolor{gray}\textit{\hfill \textit{Linewidth}}        & \the\linewidth        \\
    \cellcolor{gray}\textit{\hfill \textit{Textwidth}}        & \the\textwidth        \\
    \cellcolor{gray}\textit{\hfill \textit{Twocoltablewidth}} & \the\twocoltablewidth \\
    \hline
  \end{tabular}
\end{table}

\end{document}

该表如下所示(showframe用于视觉辅助)。

问题

当我现在添加@{}垂直中心线来抑制边距时,表格不再溢出,但看起来不太吸引人,因为第一列现在溢出到第二列。

解决方法

\begin{tabular}{|p{0.20\dimexpr\twocoltablewidth-\tabcolsep\relax}@{}|@{}p{0.80\twocoltablewidth}|} 

解决方法

我尝试过省略\twocoltablewidth、减去\tabcolsep和的数量\arrayrulewidth,以及在其他环境中包装整个表格以强制其在页面范围内。我还没有找到适合我的解决方案。我做错了什么?tabularx不幸的是,我没有选择切换到其他软件包;我唯一的选择是longtable

答案1

当使用 2 列时,表格环境的总宽度为1\linewidth 加上4\tabcolsep,其中\tabcolsep是在列前后插入的空间(默认值:6pt),加上 ,3\arrayrulewidth 因为有 3 个垂直条。

表格的标题作为单列,具有 \linewidth-2\tabcolsep-2\arrayrulewidth您已设置的可用宽度。

请参阅代码后的两个示例。

A

\documentclass{book}

\usepackage[table]{xcolor}
\usepackage{parskip}
\usepackage[a4paper,showframe]{geometry}

\newlength{\twocoltablewidth}

\begin{document}
    
Textwidth: \the\textwidth

Linewidth: \the\linewidth

Helper lines:

\rule{\textwidth}{0.4pt}

\rule{\linewidth}{0.4pt}

\begin{table}[htb]
    \setlength{\twocoltablewidth}{\dimexpr\linewidth-2\tabcolsep-2\arrayrulewidth\relax}
    \begin{tabular}{|p{0.20\dimexpr\twocoltablewidth-\tabcolsep\relax}|p{0.80\twocoltablewidth}|} 
        \hline
        \multicolumn{2}{|p{\twocoltablewidth}|}{\cellcolor{yellow}{Title}\hfill{ID}}      \\
        \hline
        \cellcolor{gray}\textit{\hfill \textit{Linewidth}}        & \the\linewidth        \\
        \cellcolor{gray}\textit{\hfill \textit{Textwidth}}        & \the\textwidth        \\
        \cellcolor{gray}\textit{\hfill \textit{Twocoltablewidth}} & \the\twocoltablewidth \\
        \hline
    \end{tabular}
\end{table}
\bigskip    

\begin{table}[htb]  
    \setlength{\twocoltablewidth}{\dimexpr\linewidth-2\tabcolsep-2\arrayrulewidth\relax}
    \begin{tabular}{|p{\dimexpr0.3\linewidth-2\tabcolsep-1.5\arrayrulewidth\relax}|p{\dimexpr0.70\linewidth-2\tabcolsep-1.5\arrayrulewidth\relax}|} 
        \hline
        \multicolumn{2}{|p{\twocoltablewidth}|}{\cellcolor{blue!20}{Title}\hfill{ID}}     \\
        \hline
        \cellcolor{gray}\hfill \textit{Linewidth}           & \the\linewidth        \\
        \cellcolor{gray}\hfill \textit{Textwidth}           & \the\textwidth        \\
        \cellcolor{gray}\hfill \textit{Twocoltablewidth}    & \the\twocoltablewidth \\
        \cellcolor{gray}\hfill \textit{tabcolsep}           & \the\tabcolsep \\
        \cellcolor{gray}\hfill \textit{arrayrulewidth}      & \the\arrayrulewidth \\
        \hline
    \end{tabular}
\end{table}

\bigskip

\begin{table}[htb]  
\setlength{\arrayrulewidth}{3pt}
\setlength{\tabcolsep}{12pt}
    
\setlength{\twocoltablewidth}{\dimexpr\linewidth-2\tabcolsep-2\arrayrulewidth\relax}
    \begin{tabular}{|p{\dimexpr0.25\linewidth-2\tabcolsep-1.5\arrayrulewidth\relax}|p{\dimexpr0.75\linewidth-2\tabcolsep-1.5\arrayrulewidth\relax}|} 
        \hline
        \multicolumn{2}{|p{\twocoltablewidth}|}{\cellcolor{green!10}{Title}\hfill{ID}}     \\
        \hline
        \cellcolor{gray}\hfill \textit{Linewidth}        & \the\linewidth        \\
        \cellcolor{gray}\hfill \textit{Textwidth}        & \the\textwidth        \\
        \cellcolor{gray}\hfill \textit{Twocoltablewidth} & \the\twocoltablewidth \\
        \cellcolor{gray}\hfill \textit{tabcolsep}        & \the\tabcolsep \\
        \cellcolor{gray}\hfill \textit{arrayrulewidth}   & \the\arrayrulewidth \\
        \hline
    \end{tabular}
\end{table}
    
\end{document}

相关内容