Как вручную создавать таблицы с помощью booktabs

Как вручную создавать таблицы с помощью booktabs

Я совсем новичок в использовании 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, вам следует рассмотреть возможность реорганизации таблицы, поменяв местами строки и столбцы.

Связанный контент