我有这张表:
我正在尝试复制类似下表的内容:
我希望复制的主要内容是(i)如何将文本非常整齐地附加到表格的顶部和底部(ii)表格的宽度与页面上的文本完全相同(iii)列的宽度(列之间的空间)似乎已自动加宽以填满页面宽度。
我的表格代码如下:
\documentclass[a4paper,11pt]{article}
\begin{document}
\begin{table}[h]
\begin{center} {\footnotesize
\begin{tabular}{lccc}
\hline
& \multicolumn{3}{c}{AFC Window 1} \\
& \multicolumn{1}{c}{gmt} & \multicolumn{1}{c}{jfk} & \multicolumn{1}{c}{fbi}\\
\hline
& $0.025^*$ & -0.002 & $1.155^*$ \\[-2ex]
\raisebox{2ex}{Constant} & (1.22) & (2.22) & (0.56)\\[0ex]
& $0.025^*$ & -0.002 & $1.155^*$ \\[-2ex]
\raisebox{2ex}{Constant} & (1.22) & (2.22) & (0.56)\\[0ex]
& $0.025^*$ & -0.002 & $1.155^*$ \\[-2ex]
\raisebox{2ex}{Log(assets)$^a$} & (1.22) & (2.22) & (0.56)\\[0ex]
\hline
\end{tabular} }
\end{center}
\caption{\footnotesize Number of turns and distance between top and bottom.}
\label{turns}
\end{table}
\end{document}
我真的不知道该怎么办。
答案1
如何将文本非常整齐地附加到表格的顶部和底部?
可能是通过将表的内容放置在minipage
宽度的环境中\textwidth
。
表格的宽度与页面上的文本宽度完全相同
可能使用tabular*
环境,并将其第一个参数设置为\textwidth
。
列宽(列之间的空间)似乎已自动加宽以填满页面宽度。
该论证的第二个论点tabular*
大概是这样设置的:
@{}l@{\extracolsep{\fill}}...@{}
% the @{} items suppress whitespace before first and after the last column
% the @{\extracolsep{\fill}} item inserts "\fill" between columns
将这两个元素放在一起,你可以发出命令
\begin{tabular*}{\textwidth}{@{}l@{\extracolsep{\fill}}...@{}`
启动tabular*
环境。请注意,.
此处使用的列类型需要通过加载dcolumn
包并发出命令来定义
\newcolumntype{.}{D{.}{.}{-1}}
在序言中。-1
指示dcolumn
尝试自己提出最佳布局。要微调布局,通常最好通过定义名为的新列类型来明确指定小数位数(即小数点右边的位数)d
:
\newcolumntype{d}[1]{D{.}{.}{#1}}
该参数表示小数点后需要保留空间的位数。
最后,为了模拟表格标题的外观(在表格编号和标题文本之间有一个换行符),您可以加载包caption
并发出命令
\captionsetup{labelsep=newline,singlelinecheck=false}
在您的文档的序言中。
附录:将所有这些放在一起会产生以下 MWE,它会生成您感兴趣的表。首先,请注意以下几点:
没有必要
\centering
为此表指定类似的内容,因为表占据了文本块的整个宽度。“十进制”列中的材料(即由基于 - 的说明符生成的材料)在 TeX 的数学模式中自动排版。这与排版凸起星号的宏
dcolumn
相关。\ast
我已将 4 指定为三列
d
(“小数对齐”)的参数,因为星号占用了一个额外的空格。(因此,如果您有三位数和二星号,您可以分配5
给要留出的数字的数量dcolumn
,等等)我还使用了包提供的
\toprule
、\midrule
和命令来代替命令;这些命令提供了更好的垂直间距。\bottomrule
booktabs
\hline
\...rule
\hline
那么,这就是 MWE。
\documentclass[a4paper,11pt]{article}
\usepackage{booktabs,dcolumn,caption}
\captionsetup{labelsep=newline,
singlelinecheck=false,
skip=0.333\baselineskip}
\newcolumntype{d}[1]{D{.}{.}{#1}} % "decimal" column type
\renewcommand{\ast}{{}^{\textstyle *}} % for raised "asterisks"
\begin{document}
\begin{table}[h]
\setlength\tabcolsep{0pt} % let LaTeX figure out amount of inter-column whitespace
\caption{Number of turns and distance between top and bottom.}
\label{turns}
\begin{tabular*}{\textwidth}{@{\extracolsep{\fill}} l *{3}{d{2.4}} }
\toprule
& \multicolumn{3}{c}{AFC Window 1} \\
& \multicolumn{1}{c}{gmt} & \multicolumn{1}{c}{jfk} & \multicolumn{1}{c}{fbi}\\
\midrule
Constant & 0.025\ast & -0.002 & 1.155\ast \\
& (1.22) & (2.22) & (0.56)\\
Constant & 0.025\ast & -0.002 & 1.155\ast \\
& (1.22) & (2.22) & (0.56)\\
Log(assets)\textsuperscript{a}
& 0.025\ast & -0.002 & 1.155\ast \\
& (1.22) & (2.22) & (0.56)\\
\bottomrule
\end{tabular*}
\end{table}
\end{document}
答案2
除了@egreg建议使用booktabs
和之外siunitx
,您还可以使用tabu
来替代tabular
。我还会使用\centering
而不是\begin{center},因为后者在其周围添加了垂直空白,这可能是不想要的。
该tabu
环境要求您使用一X
列(会自动缩放以适应指定的宽度。由于S
列类型只能是类型c
,因此您可以使用David的\extracolsep
来增加列前的空间S
。
编辑:对于表格下方的文本,您可以将其作为另一个multicolumn
横跨整个表格的文本。在这种情况下,您不必使用来\bottomrule
作为最后一行,而是必须使用 来\midrule
减少\bottomrule
其后的间距。要使其看起来像底线,您需要添加宽度\midrule[\heavyrulewidth]
。也不是多列的定义,我在其中添加了@{}
前后,这样文本的两侧就没有任何边距。
正如@Mico 所建议的,可以使用 caption 包来实现字幕样式
修改 2:之前输入括号内数字的版本略有缺陷。这个问题提供正确的方法。源代码和预览已更新。请注意,您可能需要较新版本的软件包siunitx
才能使其工作。
编辑 3:我意识到,在定义列类型时,也可以使用语法来设置S
要定义的列。这样就可以摆脱根据内容进行调整的问题。我为第一列的大小添加了一个 2 倍的系数,因为它更接近原始表格。不过需要注意的是,使用此方法,现在最右边的列右侧有填充。X
X[c]{S[<siunitx option]}}
Y
@{\extracolsep[]}
X
\documentclass[a4paper,11pt]{article}
\usepackage{tabu}
\usepackage{booktabs}
\usepackage{siunitx}
\usepackage{caption}
\captionsetup{labelsep=newline,singlelinecheck=false}
\begin{document}
\begin{table}[h]
\centering
\footnotesize
\caption{\footnotesize Number of turns and distance between top and bottom.}
\label{turns}
\newcolumntype Y{X[c]{S[per-mode=symbol,
table-align-text-pre=false,
table-align-text-post=false,
input-symbols=,
input-open-uncertainty=,
input-close-uncertainty=,
detect-all
]}}
\tabucolumn Y
\begin{tabu} to \textwidth {@{}X[2,l]*3Y@{}}
\toprule
& \multicolumn{3}{c}{AFC Window 1} \\
& {gmt} & {jfk} & {fbi} \\
\midrule
Constant & 0.025* & -0.002 & 1.155* \\
& (1.22) & (2.22) & (0.56)\\
Constant & 0.025* & -0.002 & 1.155* \\
& (1.22) & (2.22) & (0.56)\\
Log(assets)\textsuperscript{a} & 0.025* & -0.002 & 1.155* \\
& (1.22) & (2.22) & (0.56)\\
\midrule[\heavyrulewidth]
\multicolumn{4}{@{}p{\textwidth}@{}}{Dependent variables are the country-specific effects reported in Table 4 and obtained from the regressions reported in Table~3. Standard errors are in parentheses and are White adjested for the heteroscedasticity. *Significant at the 5\% level.}
\end{tabu}
\end{table}
\end{document}