
Мне удалось сделать таблицу, но подпись (или любой текст, который я добавляю после нее) находится в середине таблицы, как будто таблица заканчивается после второй строки. Я не смог найти похожий вопрос, поэтому решил задать его себе.
Без подписи или какого-либо текста до/после нее таблица выглядит почти так, как я хотел бы, чтобы она выглядела.
\documentclass{report}
\usepackage{multirow}
\begin{document}
This is some text and here is a reference to Table \ref{table:mytable}.
\begin{table} [h]
\centering
\begin{tabular} {c c c} \\
\textbf{Column A} & \textbf{Column B} & \textbf{Column C} \\
\hline
\multirow{3}{*}{\textbf{Test1}}
& \multirow{3}{*}{\shortstack[l]{line1 \\ line2 \\ line3}}
& \multirow{3}{*}{\shortstack[l]{line1 \\ line2 \\ line3}} \\
\multirow{6}{*}{\textbf{Test2}}
& \multicolumn{2}{c}{ \multirow{6}{*}{\shortstack[l]{line1 \\ line2 \\ line3}}} \\
\multirow{9}{*}{\textbf{Test3}}
& \multirow{9}{*}{\shortstack[l]{line1 \\ line2 \\ line3}}
& \multirow{9}{*}{\shortstack[l]{line1 \\ line2 \\ line3}} \\
\multirow{12}{*}{\textbf{Test4}}
& \multirow{12}{*}{\shortstack[l]{line1 \\ line2 \\ line3}}
& \multirow{12}{*}{\shortstack[l]{line1 \\ line2 \\ line3}} \\
\end{tabular}
\label{table:mytable}
\caption{This is the caption.}
\end{table}
\end{document}
Кстати, ссылка тоже почему-то не работает как надо? Я хотел, чтобы предложение звучало так:
[...] здесь ссылка на Таблицу 1.
и вместо этого он просто говорит:
[...] здесь ссылка на Таблицу.
Мне удалось использовать его \ref
с другими таблицами, но не с этой.
решение1
\multirow{<nrows>}{<width>}{<text>}
распределяет текст (вертикально) по <nrows>
строкам шириной <width>
. Если <width>
задано как *
, он использует естественную ширину <text>
. Так, например, using \multirow{12}{*}{<...>}
означает, что вы хотите распределить эту конкретную ячейку по 12 строкам. Это, очевидно, неправильно, так как каждую TestX
вы хотите распределить только по 3 строкам.
Вот немного другая реализация (поскольку вам не нужноmultirow
здесь) используяmakecell
:
\documentclass{report}
\usepackage{makecell}
\begin{document}
This is some text and here is a reference to Table~\ref{table:mytable}.
\begin{table} [h]
\centering
\begin{tabular} {c c c}
\textbf{Column A} & \textbf{Column B} & \textbf{Column C} \\
\hline
\textbf{Test1}
& \makecell{line1 \\ line2 \\ line3}
& \makecell{line1 \\ line2 \\ line3} \\
\textbf{Test2}
& \multicolumn{2}{c}{\makecell{line1 \\ line2 \\ line3}} \\
\textbf{Test3}
& \makecell{line1 \\ line2 \\ line3}
& \makecell{line1 \\ line2 \\ line3} \\
\textbf{Test4}
& \makecell{line1 \\ line2 \\ line3}
& \makecell{line1 \\ line2 \\ line3}
\end{tabular}
\caption{This is the caption.}
\label{table:mytable}
\end{table}
\end{document}
Обратите внимание, как \label
приходитпосле \caption
для того, чтобы достичь правильного \ref
erence. СмотретьПочему метка среды должна располагаться после подписи?.
решение2
Как я и написал в комментарии к вопросу, вы неправильно поняли, какмногорядныйвычисляет охват строк, но это легко исправить. Просто добавьте 3 все места (то естьвместо 6, 9 и 12).
Чтобы исправить неуместную подпись, если вы хотите использовать свой исходный код, вам нужно добавить дополнительный пробел после -row, multirow
чтобы создать достаточно места для охватываемых строк. Поскольку вы охватываете три строки, вы можете либо добавить две строки ( &&\\
), либо аналогичное количество дополнительной высоты в end-of-row
команде ( \\[<height>]
. Я добавил два \normalbaselineskip
s, чтобы у вас было пространство, равное трем строкам.
На самом деле, вы можете набрать эту таблицу, не используя никаких дополнительных пакетов вообще. Определите \parbox
и разместите три строки внутри него. Вам нужно определить высоту и ширину для того, \parbox
чтобы иметь правильный интервал. Вы можете изменить параметры высоты и ширины, чтобы иметь интервал, который подходит вашему документу. Если вы хотите избежать этого, используйте makecell
. Я определил сочетание клавиш, \pb
чтобы сократить набор текста.
Самое безопасное место для этикетки —внутрикоманда caption. Тогда она не подведет.
Стол с\parbox
\documentclass{report}
%\usepackage{multirow}
\newcommand{\pb}[1]{\parbox[c][40pt][c]{0.2\linewidth}{\centering #1}}
\begin{document}
\begin{table}
\caption{This is the caption.\label{table:mytable}}
\centering
\begin{tabular} {@{}c c c@{}} \\
\bfseries Column A & \bfseries Column B & \bfseries Column C \\\hline
\bfseries Test1 & \pb{line1 \\ line2 \\ line3} & \pb{line1 \\ line2 \\ line3} \\
\bfseries Test2 & \multicolumn{2}{c}{\pb{line1 \\ line2 \\ line3}} \\
\bfseries Test3 & \pb{line1 \\ line2 \\ line3} & \pb{line1 \\ line2 \\ line3}\\
\bfseries Test4 & \pb{line1 \\ line2 \\ line3} & \pb{line1 \\ line2 \\ line3}\\\hline
\end{tabular}
\end{table}
\end{document}
Стол с\multirow
\documentclass{report}
\usepackage{multirow}
\begin{document}
This is some text and here is a reference to Table \ref{table:mytable}. As you see, the table is a float, and since you have available space, it is place at top of the page. Do not mess around with placing floats before you have finished all creative writing. Everting you do, will be invalid when you add more text.
\begin{table}
\centering
\begin{tabular} {c c c} \\
\textbf{Column A} & \textbf{Column B} & \textbf{Column C} \\
\hline
\multirow{3}{*}{\textbf{Test1}}
& \multirow{3}{*}{\shortstack[l]{line1 \\ line2 \\ line3}}
& \multirow{3}{*}{\shortstack[l]{line1 \\ line2 \\ line3}} \\[2\normalbaselineskip] % Add more space
\multirow{3}{*}{\textbf{Test2}}
& \multicolumn{2}{c}{ \multirow{3}{*}{\shortstack[l]{line1 \\ line2 \\ line3}}} \\[2\normalbaselineskip] \multirow{3}{*}{\textbf{Test3}}
& \multirow{3}{*}{\shortstack[l]{line1 \\ line2 \\ line3}}
& \multirow{3}{*}{\shortstack[l]{line1 \\ line2 \\ line3}} \\[2\normalbaselineskip]
\multirow{3}{*}{\textbf{Test4}}
& \multirow{3}{*}{\shortstack[l]{line1 \\ line2 \\ line3}}
& \multirow{3}{*}{\shortstack[l]{line1 \\ line2 \\ line3}} \\[2\normalbaselineskip]
\end{tabular}
\caption{This is the caption.\label{table:mytable}}
\end{table}
\end{document}
решение3
Вариант кода, также основанный на makecell
, в сочетании с multirow
– и booktabs
, чтобы добавить немного отступов вокруг правил. Я добавил немного вертикального интервала, чтобы разделить группы из трех строк. Кроме того, ссылка на требует команды \label
(после заголовка) для работы.
\documentclass{report}
\usepackage{multirow}
\usepackage{makecell, booktabs}
\renewcommand{\theadfont}{\normalsize\bfseries}
\begin{document}
This is some text and here is a reference to Table \ref{table:mytable}.
\begin{table} [h]
\centering
\begin{tabular} {c c c} \\
\textbf{Column A} & \textbf{Column B} & \textbf{Column C} \\
\midrule
\multirowthead{3}{Test1} & line1 & line1 \\
& line2 & line2 \\
& line3 & line 3\\
\addlinespace
\textbf{Test2} & \multicolumn{2}{c}{\makecell{line1 \\ line2 \\ line3}} \\
\addlinespace
\multirowthead{3}{Test 3} & line1 & line1 \\
& line2 & line2 \\
& line3 & line 3\\
\addlinespace
\multirowthead{3}{Test 4} & line1 & line1 \\
& line2 & line2 \\
& line3 & line 3\\
\bottomrule
\end{tabular}
\label{table:mytable}
\caption{This is the caption.}\label{table:mytable}
\end{table}
\end{document}