
Я совсем новичок в использовании LaTex и хотел бы получить помощь в создании этой таблицы с использованием booktabs
форматирования. Я использую R
и в идеале сгенерировал бы ее с помощью xtables
пакета. Однако я не смог разобраться с охватом столбцов.
Вот почему я попытался вручную вставить \multicolumn
команду.
Вот код:
\documentclass{article}
\usepackage{booktabs}
\usepackage{multirow}
\begin{document}
\begin{table}[ht]
\centering
\begin{tabular}{@{\extracolsep{4pt}}llccccccc}
\toprule
{} & {} & {Observations} & \multicolumn{3}{c}{Median} & \multicolumn{3}{c}{SD}\\
\cline{3-3}
\cline{4-6}
\cline{7-9}
Year & Group & N & V1 & V2 & V3 & V1 & V2 & V3 \\
\hline
\multirow{2}{*}{2012}
& Control & 2 & 0.052 & 0.294 & 0.115 & 0.304 & 0.619 & 0.611 \\
& Treat & 2 & 0.511 & 0.083 & 0.123 & 0.573 & 0.541 & 0.734 \\
\multirow{2}{*}{2016}
& Control & 3 & 0.320 & 0.344 & 0.382 & 0.382 & 0.494 & 0.477 \\
& Treat & 3 & 0.378 & 0.296 & 0.123 & 0.386 & 0.668 & 0.732 \\
\hline
\end{tabular}
\caption{Mean by Year and Group}
\end{table}
\end{document}
Однако, я думаю, что эта таблица не очень хорошо отформатирована, не по booktabs
стандартам, не так ли? Как вручную сделать таблицу с таким же дизайном, но лучше отформатированную?
Спасибо
решение1
Основная проблема с таблицей заключается в том, что вы используете не booktabs
правила, а вместо этого смесь стандартных табличных правил ( \hline
и \cline
) и booktabs
правил ( \toprule
).
Заменив эти правила версиями booktabs
( \midrule
, \cmidrule
и \bottomrule
), вы получите желаемое удобное форматирование.
Я удалил multirow
все это. Это ничего не добавляет к вашей таблице; совершенно ясно, что год нужно просто поместить в первую строку пар строк для этого года. В общем, я бы multirow
вообще не стал его использовать. Он имеет свои применения, но обычно для таких вещей, как формы с ячейками в рамке. Для стандартных исследовательских таблиц он почти никогда не подходит.
P.S. Надеюсь, данные выдуманы! Ваши N действительно маленькие... :)
\documentclass{article}
\usepackage{booktabs}
\begin{document}
\begin{table}[ht]
\centering
\begin{tabular}{@{\extracolsep{4pt}}llccccccc}
\toprule
{} & {} & {Observations} & \multicolumn{3}{c}{Median} & \multicolumn{3}{c}{SD}\\
\cmidrule{3-3}
\cmidrule{4-6}
\cmidrule{7-9}
Year & Group & N & V1 & V2 & V3 & V1 & V2 & V3 \\
\midrule
2012 & Control & 2 & 0.052 & 0.294 & 0.115 & 0.304 & 0.619 & 0.611 \\
& Treat & 2 & 0.511 & 0.083 & 0.123 & 0.573 & 0.541 & 0.734 \\
2016 & Control & 3 & 0.320 & 0.344 & 0.382 & 0.382 & 0.494 & 0.477 \\
& Treat & 3 & 0.378 & 0.296 & 0.123 & 0.386 & 0.668 & 0.732 \\
\bottomrule
\end{tabular}
\caption{Mean by Year and Group}
\end{table}
\end{document}
Некоторые комментарии по набору числовых данных
Использование c
типа столбца на самом деле не лучший план, когда вы набираете числовые данные. Обычно мы хотим, чтобы числовые данные были выровнены каким-то образом, так, чтобы если числа имеют разный размер, они выстраивались правильно.
Для десятичных данных нормально выравниваться по десятичной точке. Для недесятичных данных достаточно простого выравнивания по правому краю.
Для выравнивания по десятичной точке можно использовать пакет siunitx
или dcolumn
пакет. siunitx
имеет множество интересных возможностей для автоматического форматирования числовых данных, включая группировку цифр для больших чисел. Он также предоставляет способы правильного набора единиц СИ. Пакет dcolumn
разработан специально для выравнивания по десятичной точке. Вот пример, демонстрирующий различия.
\documentclass{article}
\usepackage{booktabs}
\usepackage{dcolumn}
\usepackage{siunitx}
% Shorthand for multicolumn
\newcommand\mc[1]{\multicolumn{1}{c}{#1}}
\begin{document}
\begin{tabular}{ccrD{.}{.}{2.3}S}
\toprule
Center & Center & \mc{right} & \mc{D-column} & \mc{S-column} \\
\midrule
1 & 32.6 & 1 & 32.6 & 32.6 \\
10 & 335.434 & 10 & 335.434 & 335.434 \\
100 & 0.99 & 100 & 0.99 & 0.99 \\
5 & 1 & 5 & 1 & 1 \\
\bottomrule
\end{tabular}
\end{document}
решение2
Сначала все ваши правила должны быть выполнены с помощью booktabs
, так как он добавляет некоторую отбивку к правилам вашей таблицы (строки таблицы в основном латексе часто слишком тесные).
Во-вторых, подписи к таблицам должны бытьвышетаблицы, поскольку таблицы могут растягиваться на страницы, и читателям не нужно переворачивать страницу, чтобы узнать, о чем таблица. Для этого подпись package
полезна, базовый латекс забывает поменять местами значения \abovecaptionskip
и , \belowdisplayskip
когда подпись находится над таблицей.
В-третьих, я бы заменил Observations
на аббревиатуру, так как считаю некрасивым иметь столбец с одинарными цифрами и таким широким заголовком.
В-четвертых, я бы установил меньшее межколоночное пространство для двух групп по 3 столбца в конце таблицы. Также, параметр (lr)
для `\cmidrules здесь полезен для улучшения общего вида таблицы.
\documentclass{article}
\usepackage{array, multirow, caption, booktabs}
\begin{document}
\begin{table}[ht]
\centering\setlength\extrarowheight{2pt}
\caption{Mean by Year and Group}
\begin{tabular}{@{\extracolsep{4pt}}llc*{2}{c@{\enspace}c@{\enspace}c}}
\toprule
{} & {} & {Obsv\textsuperscript{ns}} & \multicolumn{3}{c}{Median} & \multicolumn{3}{c}{SD}\\
\cmidrule(lr){3-3}
\cmidrule{4-6}
\cmidrule(lr){7-9}
Year & Group & N & V1 & V2 & V3 & V1 & V2 & V3 \\
\midrule
\multirow{2}{*}{2012}
& Control & 2 & 0.052 & 0.294 & 0.115 & 0.304 & 0.619 & 0.611 \\
& Treat & 2 & 0.511 & 0.083 & 0.123 & 0.573 & 0.541 & 0.734 \\
\addlinespace
\multirow{2}{*}{2016}
& Control & 3 & 0.320 & 0.344 & 0.382 & 0.382 & 0.494 & 0.477 \\
& Treat & 3 & 0.378 & 0.296 & 0.123 & 0.386 & 0.668 & 0.732 \\
\bottomrule
\end{tabular}
\end{table}
\end{document}
Примечание: Если вы не хотите сокращать `Observations, вам следует рассмотреть возможность реорганизации таблицы, поменяв местами строки и столбцы.