Как создать таблицу с помощью пакета booktabs?

Как создать таблицу с помощью пакета booktabs?

Я хотел бы создать следующие таблицы с помощью пакета booktabs, но не совсем уверен, как это сделать.

введите описание изображения здесь

и

введите описание изображения здесь

Любая помощь будет высоко оценена!

решение1

таблицы calstable и tabularx

Вот обе ваши таблицы, набранные как calstables,то есть. с использованием пакетакал. Я также набрал первую таблицу с помощьютабличныйx,hhline,множествоимногорядный. Я использовалтабличныйx, поскольку этот пакет может рассчитать ширину столбца, принимая во внимание все необходимые переменные.

калстабильный

calstableне поддерживает двойные линии (двойные границы), поэтому я сымитировал такие линии с помощью узких строк и столбцов.

Так как я набрал обе таблицы в одном документе, я переместил команды настройки таблицы и определения ярлыков выключения из преамбулы таблицы в преамбулу документа. Я подправил все правила (строки), убедившись, что ни одно правило не режет двойные двойные правила. Поэтому вы увидите ярлык \lb, \rbиспользуемый в нескольких местах, для отключения удаления и включения правил для отдельных ячеек. То, как двойные вертикальные линии будут соединяться с двойными горизонтальными линиями, зависит от местных типографских традиций, поэтому я не гарантирую, что мой выбор будет правильным в вашей юрисдикции.

Я заполнил часть содержимого ячеек, чтобы задать правильную высоту строк в таблице, и, как следствие, увеличил высоту строк в первой таблице додва \baselineskips, по сравнению с предыдущим примером. Кроме того, я вертикально центрировал содержимое ячеек во всех ячейках, используя документированный хук, см. команду \def\cals@AtBeginCell{\vfil}:

введите описание изображения здесь

\documentclass{article}
\usepackage{cals}

% Set up the carlstable
\makeatletter
%% All rules of same weight
\def\cals@framers@width{0.3pt}   % Outside frame rules, reduce if the rule is too heavy
\def\cals@framecs@width{0.3pt}
\def\cals@bodyrs@width{0.3pt}
\def\cals@cs@width{0.3pt}             % Inside rules, reduce if the rule is too heavy
\def\cals@rs@width{0.3pt}
\def\cals@AtBeginCell{\vfil}            % All cell contents vertically centred

% Shorthands for spanning cells, table rules and the spece between columns and rows (padding)
\let\nc=\nullcell
\let\sc=\spancontent

\def\rb{\ifx\cals@borderR\relax     % Right Border (rules) switch (off-on)
    \def\cals@borderR{0.0pt}
\else \let\cals@borderR\relax\fi}

\def\lb{\ifx\cals@borderL\relax     % Left Border switch (off-on)
    \def\cals@borderL{0.0pt}
\else \let\cals@borderL\relax\fi}

\def\bb{\ifx\cals@borderB\relax     % Bottom Border switch (off-on)
    \def\cals@borderB{0.0pt}
\else \let\cals@borderB\relax\fi}

\def\tp{\ifdim\cals@paddingT=0.0pt\relax    % Top padding switch (off-on)
\cals@setpadding{Ag}
\else \setlength{\cals@paddingT}{0pt}\fi}

\def\bp{\ifdim\cals@paddingB=0.0pt\relax    % Bottom padding switch (off-on)
\cals@setpadding{Ag}
\else \setlength{\cals@paddingB}{0pt}\fi}
\makeatother

\begin{document}

\begin{calstable}[c]
% Defining 11 columns, 2 are for double vertical rules (col2 and col7)
\colwidths{{\dimexpr(\columnwidth/21*3)}
                   {2pt}
                   {\dimexpr(\columnwidth/21*2)}
                   {\dimexpr(\columnwidth/21*1)}
                   {\dimexpr(\columnwidth/21*2)}
                   {\dimexpr(\columnwidth/21*4)}
                   {2pt}
                   {\dimexpr(\columnwidth/21*2)}
                   {\dimexpr(\columnwidth/21*1)}
                   {\dimexpr(\columnwidth/21*2)}
                   {\dimexpr(\columnwidth/21*4)}
            }

\makeatletter
% R1H1  % This first row is just to ‘fake’ double horizontal lines
\thead{%
\brow
    \rb\tp\cell{}
    \bb\cell{}\bb
    \cell{}
    \cell{}
    \cell{}
    \cell{}
    \bb\cell{}\bb
    \cell{}
    \cell{}
    \cell{}\rb
    \cell{}\tp
    \ht\cals@current@row=2pt
\erow
%
%R2H2 % Header
\brow
    \alignC\cell{C}
    \bb\cell{}\bb
    \nc{ltb}
    \nc{tb}
    \nc{tb}
    \nc{rtb}\sc{}
    \bb\cell{}\bb
    \nc{ltb}
    \nc{tb}
    \nc{tb}
    \nc{rtb}\sc{}
\erow
}
\tfoot{\lastrule\strut}
%R3B1
\brow
    \cell{C}
    \bb\cell{}\bb
    \nc{ltb}
    \nc{rtb}\sc{}
    \cell{}
    \cell{}
    \bb\cell{}\bb
    \nc{ltb}
    \nc{rtb}\sc{}
    \cell{}
    \cell{}
\erow
%R4B2
\brow
    \nc{lrt}
    \bb\cell{}\bb
    \cell{}
    \cell{}
    \cell{}
    \cell{}
    \bb\cell{}\bb
    \cell{}
    \cell{}
    \cell{}
    \cell{}
    \ht\cals@current@row=2\normalbaselineskip
\erow
%R5B3
\brow
    \nc{lrb}\alignC\sc{C}
    \bb\cell{}\bb
    \cell{C}
    \cell{}
    \cell{}
    \cell{}
    \bb\cell{}\bb
    \cell{}
    \cell{}
    \cell{}
    \cell{}
\erow
%R6B4
\brow
    \nc{lrt}
    \bb\cell{}\bb
    \cell{}
    \cell{}
    \cell{}
    \cell{}
    \bb\cell{}\bb
    \cell{}
    \cell{}
    \cell{}
    \cell{}
    \ht\cals@current@row=2\normalbaselineskip
\erow
%R7B5
\brow
    \nc{lrb}\alignC\sc{C}
    \bb\cell{}\bb
    \cell{C}
    \cell{}
    \cell{}
    \cell{}
    \bb\cell{}\bb
    \cell{}
    \cell{}
    \cell{}
    \cell{}
\erow
%R8B6
\brow
    \nc{lrt}
    \bb\cell{}\bb
    \cell{}
    \cell{}
    \cell{}
    \cell{}
    \bb\cell{}\bb
    \cell{}
    \cell{}
    \cell{}
    \cell{}
    \ht\cals@current@row=2\normalbaselineskip
\erow
%R9B7
\brow
    \nc{lrb}\alignC\sc{C}
    \bb\cell{}\bb
    \cell{C}
    \cell{}
    \cell{}
    \cell{}
    \bb\cell{}\bb
    \cell{}
    \cell{}
    \cell{}
    \cell{}
\erow
%R10B9  % This last row is just to ‘fake’ double horizontal lines
\brow
    \rb\bp\cell{}
    \cell{}
    \cell{}
    \cell{}
    \cell{}
    \cell{}
    \cell{}
    \cell{}
    \cell{}
    \cell{}\rb
    \cell{}\bp
    \ht\cals@current@row=2pt
\erow
\makeatletter
\end{calstable}\par

\vspace{1cm}

\begin{calstable}[l]
% Defining 5 columns, 1 are for double vertical rules (col2)
\colwidths{{\dimexpr(\columnwidth/15*3)}
                   {2pt}
                   {\dimexpr(\columnwidth/15*2)}
                   {\dimexpr(\columnwidth/15*1)}
                   {\dimexpr(\columnwidth/15*3)}
            }

\makeatletter
% R1H1  % This first row is just to ‘fake’ double horizontal lines
\thead{%
\brow
    \rb\tp\cell{}
    \bb\cell{}\bb
    \cell{}
    \cell{}
    \cell{}\rb\tp
    \ht\cals@current@row=2pt
\erow
%
%R2H2 % Header
\brow
    \alignC\cell{C}
    \bb\cell{}\bb
    \cell{}
    \cell{}
    \cell{}
\erow
}
\tfoot{\lastrule\strut}
%R4B2
\brow
    \bb\cell{C}
    \cell{}
    \cell{}
    \cell{}
    \cell{}
\erow
%R5B3
\brow
    \cell{C}
    \cell{}
    \cell{}
    \cell{}
    \cell{}
\erow
%R6B4
\brow
    \cell{C}
    \cell{}
    \cell{}
    \cell{}
    \cell{}
\erow
%R7B5
\brow
    \cell{C}
    \cell{}
    \cell{}
    \cell{}
    \cell{}
\erow
%R8B6
\brow
    \bb\cell{C}\bb
    \cell{}
    \bb\cell{}
    \cell{}
    \cell{}\bb
\erow
%R10B9  % This last row is just to ‘fake’ double horizontal lines
\brow
    \bb\rb\bp\cell{}
    \cell{}
    \cell{}
    \cell{}\rb
    \cell{}\bb
    \ht\cals@current@row=2pt
\erow
\makeatletter
\end{calstable}\par
\end{document}

tabularx и друзья

Вот ваша первая таблица, набранная с помощьютабличныйxи друзья. Как вы увидите, настройка и определение столбцов и ширины столбцов довольно сложны. Чтобы иметь правильные правила соединения, я использовалhhlineупаковка.

введите описание изображения здесь

\documentclass{article}
\usepackage{array, tabularx, multirow, hhline}

% Two shorthands to secured equal rowheigth 
\newcommand*{\hz}{\vphantom{\parbox[c]{1cm}{\rule{1cm}{1.5\normalbaselineskip}}}}
\newcommand*{\vz}{\vphantom{\parbox[c]{1cm}{\rule{1cm}{2.5\normalbaselineskip}}}}

% Define four new X column types based on width. tabularx takes care of the maths involved
\newcolumntype{A}{>{\centering\arraybackslash\hsize=0.4\hsize\linewidth=\hsize}X}
\newcolumntype{B}{>{\centering\arraybackslash\hsize=0.3\hsize\linewidth=\hsize}X}
\newcolumntype{C}{>{\centering\arraybackslash\hsize=0.2\hsize\linewidth=\hsize}X}
\newcolumntype{D}{>{\centering\arraybackslash\hsize=0.1\hsize\linewidth=\hsize}X}

% Uncomment to see margins etc.
%\usepackage{showframe}
%\renewcommand*\ShowFrameColor{\color{red}}
%\renewcommand*\ShowFrameLinethickness{.15pt}

\setlength{\tabcolsep}{0.5em}
\setlength{\extrarowheight}{4pt} % Push first line of text away from rules above.

\begin{document}

\centering
\begin{tabularx}{\linewidth}{|B||C|D|C|A||C|D|C|A|}

\hhline{|*{9}{=}|}
\hz B   &    \multicolumn{4}{c||}{}   &  \multicolumn{4}{c|}{}\\
\hhline{|-||----||----|}
\hz B   &    \multicolumn{2}{c|}{}   &    &      &   \multicolumn{2}{c|}{} &   & \\
\hhline{|-||--|-|-||--|-|-|}
\vz\multirow[c]{3}{=}{\centering B}     &       &      &    &      &    &   &   & \\
\hhline{|~||--|-|-||--|-|-|}
\hz     &    C  &      &    &      &    &   &   & \\
\hhline{|-||--|-|-||--|-|-|}
\vz\multirow[c]{3}{=}{B}    &       &     &    &      &    &   &   & \\
\hhline{|~||--|-|-||--|-|-|}
\hz     &    C  &      &   &      &    &   &   & \\
\hhline{|-||--|-|-||--|-|-|}
\vz \hz\multirow[c]{3}{=}{B}    &       &      &    &      &    &   &   & \\
\hhline{|~||--|-|-||--|-|-|}
\hz     &    C  &      &    &      &    &   &   &  \\
\hhline{|*{9}{=}|}

\end{tabularx}

\end{document}

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