我定义了一个列类型,它会自动包装其内容,并且需要一个宽度参数。因为我希望我的表格正好从左边距开始,到右边距结束,所以我使用了文本宽度的某种百分比。但是,当将百分比加起来达到 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
当使用 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}