Многоколоночная таблица с различным выравниванием

Многоколоночная таблица с различным выравниванием

Я хочу нарисовать следующую таблицу из нескольких столбцов в латексе. Заголовки выровнены по центру, а остальной текст выровнен по левому краю. Как это сделать? Здесь все поля, такие как Один, Два и т. д. могут содержать произвольное количество текста.

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

Моя текущая попытка выглядит следующим образом. Я также хочу иметь:

(а) Два и три разделены посередине относительно текста в первом столбце.

(б) Весь текст, за исключением заголовков, должен быть выровнен по левому краю.

(c) Прямая линия между Двойкой и Тремя

\documentclass{article}
\usepackage{blindtext}
\begin{document}
\begin{tabular}{|p{5cm}|c|c|c|}
\hline
\textbf{A} & \textbf{B} & \textbf{C} & \textbf{D}\\
\hline
\blindtext & \begin{tabular}{@{}c@{}}Two \\ Three\end{tabular} & Four & Six
\end{tabular}
\end{document}

решение1

\documentclass{article}
\usepackage{multirow}
\usepackage{multicol}
\usepackage{blindtext}
\begin{document}
\begin{tabular}{|p{5cm}|l|l|l|}
\hline
\multicolumn{1}{|c}{\textbf{A} }& \multicolumn{1}{|c|}{\textbf{B} }& \multicolumn{1}{c}{\textbf{C} }& \multicolumn{1}{|c|}{\textbf{D} }\\
\hline
\multirow{2}{*}{One} & Two  & Four & \multirow{2}{*}{Six}  \\ \cline{2-3}
 &  Three & Five & \\ \hline
Seven& Eight & Nine & Ten \\ \hline
\end{tabular}
\end{document}

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

решение2

Я интерпретирую ваши требования следующим образом: (a) Столбец «A» должен быть в два раза шире столбца «B», и вместе они должны охватывать первую половину доступной ширины; (b) столбцы «C» и «D» должны быть одинаковой ширины и охватывать вторую половину; (c) содержимое всех ячеек должно быть выровнено по верхнему краю; и (d) высота среднего ряда ячеек определяется той из ячеек, «One» или «Six», которая выше.

Если эта интерпретация верна, то следующая настройка может быть тем, что вы ищете. Единственным недостатком, на мой взгляд, является то, что горизонтальная линия, разделяющая ячейки Two/Four от ячеек Three/Five, не сбалансирована автоматически; в зависимости от содержимого ячеек Two и Four \phantomможет потребоваться инструкция, как показано в коде ниже.

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

\documentclass{article}
\usepackage{array,ragged2e}
\newcolumntype{P}[1]{>{\RaggedRight\arraybackslash}p{#1}}

\newlength\tablengtho
\newlength\tablengtha
\newlength\tablengthb
\newlength\tablengthcd

% Calculare widths of columns A, B, and C/D
\setlength\tablengtho{\dimexpr\textwidth-8\tabcolsep-5\arrayrulewidth\relax}
\setlength\tablengtha{\dimexpr0.6667\tablengtho/4\relax}
\setlength\tablengthb{\dimexpr1.3333\tablengtho/4\relax}
\setlength\tablengthcd{\dimexpr\tablengtho/4\relax}

\begin{document}

\noindent
\begin{tabular}{| P{\tablengtha} | P{\tablengthb} |
                  P{\tablengthcd} | P{\tablengthcd} |}
\hline
\multicolumn{1}{|c|}{\textbf{A}} & \multicolumn{1}{c|}{\textbf{B}} &
\multicolumn{1}{c|}{\textbf{C}} & \multicolumn{1}{c|}{\textbf{D}} \\
\hline
One One One One One One One One One  & 
\multicolumn{1}{@{}c@{}|}{%
   \begin{tabular}[t]{P{\tablengthb}}
         Two Two Two Two Two Two Two   \\ 
         \hline
         Three Three Three Three Three \\
   \end{tabular}} &
\multicolumn{1}{@{}c@{}|}{%
   \begin{tabular}[t]{P{\tablengthcd}}
         Four Four Four \phantom{Four} \\ % \phantom{Four} needed for balance
         \hline
         Five Five Five \\
   \end{tabular}} &
Six Six Six Six Six Six Six Six Six Six Six Six Six Six Six Six Six Six Six Six Six \\
\hline
Seven & Eight & Nine & Ten \\
\hline
\end{tabular}

\end{document}

решение3

Я пытался сделать это сконюшни – упрощенные таблицы Plain TEXкоторый обычно размещает текст по центру каждой ячейки. Я использовал 4 макроса, по одному на каждую строку, чтобы контролировать горизонтальный размер строк и предоставить способ управления размещением текста в каждой ячейке как по горизонтали, так и по вертикали.

\documentclass{article}

\input stables.tex

%the width of each column is controlled by the "\hsize=" in each of the four macros
%for each macro the first variable controls horizontal placement of the text, the second 
%takes the text itself and the third controls vertical placement of the text.
\def\AA#1#2#3{\hphantom{\hspace{#1}}% 
   \vtop{\hsize=1.2in\vskip#3 #2}\hphantom{\hspace{1pt}}}

\def\BB#1#2#3{\hphantom{\hspace{#1}}%
   \vtop{\hsize=2.2in\vskip#3 #2}\hphantom{\hspace{1pt}}}

\def\CC#1#2#3{\hphantom{\hspace{#1}}%
   \vtop{\hsize=1in\vskip#3 #2}\hphantom{\hspace{1pt}}}

\def\DD#1#2#3{\hphantom{\hspace{#1}}%
   \vtop{\hsize=1.4in\vskip#3 #2}\hphantom{\hspace{1pt}}}

\begin{document}

\begintable

A|B|C|D\elt
\multirow4{\AA{-.1cm}{One}{-.9cm}}|\BB{-.6cm}{Two}{-.2cm} |\CC{-.8cm}%
{Four}{-.2cm}|\multirow4{\DD{-.1cm}{Six}{-.9cm}}\elspec
|||\el
|||\el
|\trule|\trule| \el
|\BB{-.6cm}{Three}{-.4cm} |\CC{-.8cm}{Five}{-.4cm}|\el
|||\elt
\AA{-.9cm}{Seven}{-.2cm}|\BB{-.9cm}{Eight}{-.2cm}|\CC{-.8cm}{Nine}%  
{-.2cm}|\DD{-1cm}{Ten}{-.2cm}

\endtable

\end{document}

Вот мой результат:

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

решение4

Лучше использовать пакетные закладки. Правила предусматривают некоторое пространство между строками.

\documentclass{article}
\usepackage{booktabs}
\usepackage{multirow}
\begin{document}
\begin{tabular}{p{5cm}|l|l|l}
\toprule
\multicolumn{1}{c}{\textbf{A} }& \multicolumn{1}{|c}{\textbf{B} }& \multicolumn{1}{|c}{\textbf{C} }& \multicolumn{1}{|c}{\textbf{D} }\\
\midrule
\multirow{2}{*}{One} & Two  & Four & \multirow{2}{*}{Six}  \\ \cmidrule{2-3}
&  Three & Five & \\ \midrule
Seven& Eight & Nine & Ten \\ \bottomrule
\end{tabular}
\end{document}

tblwithtabs

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