使用百分比作为列宽会导致表格在达到 100% 时溢出

使用百分比作为列宽会导致表格在达到 100% 时溢出

我定义了一个列类型,它会自动包装其内容,并且需要一个宽度参数。因为我希望我的表格正好从左边距开始,到右边距结束,所以我使用了文本宽度的某种百分比。但是,当将百分比加起来达到 100 时,表格会变得太宽。每次尝试都会出错。当有更多列时,我必须远远低于 100%,当使用较少的列时,“目标”值会有所不同。当然我可以使用 tabularx,但有些东西无法正确解决我的问题(说实话我真的不记得这是什么东西了,因为它已经是很久以前的事了)。

也许有一些解决方法,当我的列百分比以 1 结束时,表格就是我的纸张的精确宽度。

梅威瑟:

\documentclass{scrbook}
\usepackage{tikz}
\usepackage[showframe,includeheadfoot, left=3cm,right=2cm,top=2cm,bottom=2cm]{geometry}
\usepackage{array} % Tabellen
\usepackage{booktabs}
\newcolumntype{C}[1]{>{\centering\arraybackslash}p{#1}} % zentriert mit Breitenangabe
 \begin{document}

\begin{table}[]
\centering
\caption{My caption}
%\resizebox{\textwidth}{!}{%
\begin{tabular {C{.10\textwidth}C{.10\textwidth}C{.50\textwidth}C{.30\textwidth}}   % 100% without resizbox
\toprule
Test & Test  &Test & Test \\   \midrule
Test & Test  &Test & Test \\
Test & Test  &Test & Tes       \\ \bottomrule
\end{tabular}
%}
\end{table}

\begin{table}[]
\centering
\caption{My caption}
%\resizebox{\textwidth}{!}{%
\begin{tabular}{C{.04\textwidth}C{.04\textwidth}C{.50\textwidth}C{.30\textwidth}}   % 88% without resizebox
\toprule
Test & Test  &Test & Test \\   \midrule
Test & Test  &Test & Test \\
Test & Test  &Test & Tes       \\ \bottomrule
\end{tabular}
%}
\end{table}

\begin{table}[]
\centering
\caption{My caption}
\resizebox{\textwidth}{!}{%
\begin{tabular}{C{.10\textwidth}C{0.10\textwidth}C{.50\textwidth}C{.30\textwidth}}   % 100% with resizebox
\toprule%
Test & Test  &Test & Test \\  \midrule%
Test & Test  &Test & Test \\%
Test & Test  &Test & Tes       \\ \bottomrule%
\end{tabular}%
}
\end{table}

\end{document}

这张图片中的结果:

  • 1)100%无调整框
  • 2)88% 没有调整大小框
  • 3)100% 使用 resizebox

表格:1)100% 未使用调整大小框 2)88% 未使用调整大小框 3)100% 使用了调整大小框

当使用 resizebox 并且我的值为 100% 时,里面的字体会缩放。

答案1

\tabcolsep每列的两边都有一个间隙,因此对于 4 列,您需要另一个8\tabcolsep空间(除非您@{}在列之间放置)。

\documentclass{scrbook}
\usepackage{tikz}
\usepackage[showframe,includeheadfoot, left=3cm,right=2cm,top=2cm,bottom=2cm]{geometry}
\usepackage{array} % Tabellen
\usepackage{booktabs}
\newcolumntype{C}[1]{>{\centering\arraybackslash}p{#1}} % zentriert mit Breitenangabe

\newlength{\freewidth}

\begin{document}

\begin{table}[]
\centering
\caption{My caption}
\setlength{\freewidth}{\dimexpr\textwidth-8\tabcolsep}
\begin{tabular}{C{.10\freewidth}C{.10\freewidth}C{.50\freewidth}C{.30\freewidth}}   % 100% without resizbox
\toprule
Test & Test  &Test & Test \\   \midrule
Test & Test  &Test & Test \\
Test & Test  &Test & Tes       \\ \bottomrule
\end{tabular}
\end{table}

\end{document}

演示

答案2

首先,不要\resizebox在桌子上使用。

对于您的问题,只需删除\tabcolsep两边的空格:

\documentclass{scrbook}
\usepackage{tikz}
\usepackage[showframe,includeheadfoot, left=3cm,right=2cm,top=2cm,bottom=2cm]{geometry}
\usepackage{array} % Tabellen
\usepackage{booktabs}

\newcolumntype{C}[1]{%
  >{\centering\arraybackslash}p{\dimexpr#1-2\tabcolsep}%
} % zentriert mit Breitenangabe

\begin{document}

\begin{table}[htp]
\centering

\caption{My caption}

\begin{tabular}{
  C{.10\textwidth}
  C{.10\textwidth}
  C{.50\textwidth}
  C{.30\textwidth}
}
\toprule
Test & Test  & Test & Test \\
\midrule
Test & Test  & Test & Test \\
Test & Test  & Test & Tes\\
\bottomrule
\end{tabular}

\end{table}

\end{document}

在此处输入图片描述

相关内容