我的文档中有几个表格,现在是时候完成它们了。这意味着我想要优化:
1)字体的大小(如果可能的话,\normalsize
与文档的其余部分一样,或者至少是尽可能最大的尺寸,以便表格可以在空间内容纳);和
2)柱子之间的距离(如果可能的话应该相等)
请注意,我必须遵循这些设置(论文指导):geometry{left=2cm,right=5cm,top=2cm,bottom=2cm}
另外,我希望表格标题不要太大。我不知道我的尺寸在这里是否正常。
对于解决方案,如果我能遵循它,我将不胜感激,这样我就可以将其应用于我的所有表格。这意味着我需要了解优化每个表格所采取的步骤。
这是 dcolumn 方面的 MWE。我尝试仅添加我认为对这项任务很重要的序言部分。
\documentclass[a4paper, 12pt, headsepline, smallheadings]{scrreprt}
\usepackage{setspace}
\usepackage[a4paper]{geometry}
\usepackage{booktabs}
\usepackage[labelfont=bf,labelsep=newline,singlelinecheck=false,
format=plain,indention=2cm]{caption}
\usepackage{dcolumn}
\newcolumntype{Y}{D..{-1}}
\KOMAoption{captions}{tableheading}
\onehalfspacing
\geometry{left=2cm,right=5cm,top=2cm,bottom=2cm}
\pagestyle{headings}
\begin{document}
\begin{table}[htbp]
\centering
\caption{Caption...}
\label{a1}
{\scriptsize
\begin{tabular}{lYYYYYYYYYYYY}
\toprule
& \multicolumn{2}{c}{X1} & \multicolumn{2}{c}{X2} &
\multicolumn{2}{c}{X1} & \multicolumn{2}{c}{X1} & \multicolumn{2}{c}{X2} &
\multicolumn{2}{c}{X2} \\
\cmidrule(rl){2-3} \cmidrule(rl){4-5}\cmidrule(rl){6-7} \cmidrule(rl){8-9} \cmidrule(rl){10-11}
\cmidrule(rl){12-13}
& \multicolumn{1}{c}{A} & \multicolumn{1}{c}{B} & \multicolumn{1}{c}{A} & \multicolumn{1}{c}{B} &
\multicolumn{1}{c}{A} & \multicolumn{1}{c}{G} & \multicolumn{1}{c}{B} & \multicolumn{1}{c}{A}
& \multicolumn{1}{c}{B} & \multicolumn{1}{c}{G} & \multicolumn{1}{c}{A} & \multicolumn{1}{c}{B}
\\
\midrule C1 & 0.37 & 0.37 & 0.45 & 0.45 & 0.45 & 0.44 & 0.50 & 0.45 & 0.45 & 0.45 & 0.47 & 0.26 \\
C2 & 0.37 & 0.31 & 0.43 & 0.29 & 0.29 & 0.29 & 0.48 & 0.50 & 0.72 & 0.75 & 0.45 & 0.38 \\
C3 & 0.37 & 0.29 & 0.29 & 0.12 & 0.15 & 0.37 & 0.41 & 0.46 & 0.45 & 0.45 & 0.45 & 0.43 \\
C4 & 0.37 & 0.20 & 0.25 & 0.45 & 0.45 & 0.18 & 0.45 & 0.45 & 0.38 & 0.44 & 0.45 & 0.38 \\
Clongnamehere5 & 0.37 & 0.32 & 0.45 & 0.12 & 0.45 & 0.50 & 0.45 & 0.45 & 0.57 & 0.59 & 0.45 & 0.51 \\
\bottomrule\end{tabular}
% cut here but goes on much further
}
\end{table}
\end{document}
我刚刚注意到,这siunitx
似乎起了作用,但仅限于 scriptsize. 这样是否更有利于达到目的?
MWE 具有siunitx
:
\documentclass[a4paper, 12pt, headsepline, smallheadings]{scrreprt}
\usepackage{setspace}
\usepackage[a4paper]{geometry}
\usepackage{booktabs}
\usepackage[labelfont=bf, labelsep=newline,singlelinecheck=false,
format=plain,indention=2cm]{caption}
\KOMAoption{captions}{tableheading}
\onehalfspacing
\geometry{left=2cm,right=5cm,top=2cm,bottom=2cm}
\pagestyle{headings}
\usepackage{siunitx}
\begin{document}
\begin{table}[htbp]
\centering
\caption{Caption...}
\label{ovb1}
{\scriptsize
\begin{tabular}{l
S[table-format=1.2]
S[table-format=1.2]
S[table-format=1.2]
S[table-format=1.2]
S[table-format=1.2]
S[table-format=1.2]
S[table-format=1.2]
S[table-format=1.2]
S[table-format=1.2]
S[table-format=1.2]
S[table-format=1.2]
S[table-format=1.2] }
\toprule
& \multicolumn{2}{c}{X1} & \multicolumn{2}{c}{X2} &
\multicolumn{2}{c}{X1} & \multicolumn{2}{c}{X1} & \multicolumn{2}{c}{X2} &
\multicolumn{2}{c}{X2} \\
\cmidrule(rl){2-3} \cmidrule(rl){4-5}\cmidrule(rl){6-7} \cmidrule(rl){8-9} \cmidrule(rl){10-11}
\cmidrule(rl){12-13}
& \multicolumn{1}{c}{A} & \multicolumn{1}{c}{B} & \multicolumn{1}{c}{A} & \multicolumn{1}{c}{B} &
\multicolumn{1}{c}{A} & \multicolumn{1}{c}{G} & \multicolumn{1}{c}{B} & \multicolumn{1}{c}{A}
& \multicolumn{1}{c}{B} & \multicolumn{1}{c}{G} & \multicolumn{1}{c}{A} & \multicolumn{1}{c}{B}
\\
\midrule C1 & 0.37 & 0.37 & 0.45 & 0.45 & 0.45 & 0.44 & 0.50 & 0.45 & 0.45 & 0.45 & 0.47 & 0.26 \\
C2 & 0.37 & 0.31 & 0.43 & 0.29 & 0.29 & 0.29 & 0.48 & 0.50 & 0.72 & 0.75 & 0.45 & 0.38 \\
C3 & 0.37 & 0.29 & 0.29 & 0.12 & 0.15 & 0.37 & 0.41 & 0.46 & 0.45 & 0.45 & 0.45 & 0.43 \\
C4 & 0.37 & 0.20 & 0.25 & 0.45 & 0.45 & 0.18 & 0.45 & 0.45 & 0.38 & 0.44 & 0.45 & 0.38 \\
Clongnamehere5 & 0.37 & 0.32 & 0.45 & 0.12 & 0.45 & 0.50 & 0.45 & 0.45 & 0.57 & 0.59 & 0.45 & 0.51 \\
% cut here but goes on much further
\bottomrule\end{tabular}
}
\end{table}
\end{document}
谢谢。
答案1
假设您想继续使用该dcolumn
软件包,那么您可以进行两项重要的优化,它们共同允许您使用 fontsize 指令而\small
不是,\scriptsize
并且仍然使表格适合可用的文本块:
\newcolumntype{Y}{D{.}{.}{1.2}}
通过而不是通用的;定义小数列布局\newcolumntype{Y}{D{.}{.}{-1}
和使用较小的值
\tabcolsep
,该参数控制列间空白的宽度(一半)。在下面的示例中,我使用了值3.5pt
。
\documentclass[a4paper, 12pt, headsepline,
smallheadings]{scrreprt}
\usepackage{setspace}
\usepackage[a4paper]{geometry}
\usepackage{booktabs}
\usepackage[labelfont=bf,labelsep=newline,
singlelinecheck=false,format=plain,indention=2cm]{caption}
\usepackage{dcolumn}
\newcolumntype{Y}{D..{1.2}}
\KOMAoption{captions}{tableheading}
\onehalfspacing
\geometry{left=2cm,right=5cm,vmargin=2cm}
\pagestyle{headings}
% two shortcut commands
\newcommand\mcii[1]{\multicolumn{2}{c}{#1}}
\newcommand\mci[1]{\multicolumn{1}{c}{#1}}
\begin{document}
\begin{table}[htbp]
%\centering
\caption{Caption...}
\label{a1}
{\small
\setlength{\tabcolsep}{3.5pt} % default value: 6pt
\begin{tabular}{@{} l *{12}{Y} @{}}
\toprule
& \mcii{X1} & \mcii{X2} & \mcii{X1} &
\mcii{X1} & \mcii{X2} & \mcii{X2} \\
\cmidrule(rl){2-3} \cmidrule(rl){4-5} \cmidrule(rl){6-7} \cmidrule(rl){8-9} \cmidrule(rl){10-11} \cmidrule(l){12-13}
& \mci{A} & \mci{B} & \mci{A} & \mci{B} &
\mci{A} & \mci{G} & \mci{B} & \mci{A} &
\mci{B} & \mci{G} & \mci{A} & \mci{B} \\
\midrule
C1 & 0.37 & 0.37 & 0.45 & 0.45 & 0.45 & 0.44 & 0.50 & 0.45 & 0.45 & 0.45 & 0.47 & 0.26 \\
C2 & 0.37 & 0.31 & 0.43 & 0.29 & 0.29 & 0.29 & 0.48 & 0.50 & 0.72 & 0.75 & 0.45 & 0.38 \\
C3 & 0.37 & 0.29 & 0.29 & 0.12 & 0.15 & 0.37 & 0.41 & 0.46 & 0.45 & 0.45 & 0.45 & 0.43 \\
C4 & 0.37 & 0.20 & 0.25 & 0.45 & 0.45 & 0.18 & 0.45 & 0.45 & 0.38 & 0.44 & 0.45 & 0.38 \\
Clongnamehere5 & 0.37 & 0.32 & 0.45 & 0.12 & 0.45 & 0.50 & 0.45 & 0.45 & 0.57 & 0.59 & 0.45 & 0.51 \\
\bottomrule
\end{tabular}
% cut here but goes on much further
}
\end{table}
\end{document}
如果你想使用siunitx
包而不是包来dcolumn
对齐小数点上的数字,你所要做的就是(i)加载包siunitx
并(ii)指定环境的格式tabular
为
\begin{tabular}{@{} l *{12}{S[table-format=1.2]} @{}}
而不是
\begin{tabular}{@{} l *{12}{Y} @{}}
附录:为了消除与设置值相关的猜测,\tabcolsep
以便创建一个与 一样宽的表\textwidth
,您可以按如下方式进行;所有假设是表会合适如果您选择\small
作为字体大小。
故意设置
\tabcolsep
为一个太小的值,例如1pt
。使用
tabular*
而不是tabular
环境设置环境布局
tabular*
如下:\begin{tabular*}{\textwidth}{@{} l @{\extracolsep{\fill}} *{12}{Y} @{}}
\end{tabular}
用。。。来代替\end{tabular*}
。
这个想法是让 LaTeX 计算插入列之间的额外“填充”量,以使环境tabular*
占据整个分配的宽度(\textwidth
在本例中);这就是该指令所要@{\extracolsep{\fill}}
实现的。因为只能取正值,所以将其设置为故意小的值\fill
很重要,比如说。\tabcolsep
1pt
顺便说一句,如果此方法对给定的表不起作用,则意味着\small
生成的字体太大;请使用 重试\footnotesize
。