Подпись к таблице в середине таблицы

Подпись к таблице в середине таблицы

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

Я добавил подпись и текст после таблицы. Они оба ведут себя так, как будто таблица заканчивается после второй строки

Без подписи или какого-либо текста до/после нее таблица выглядит почти так, как я хотел бы, чтобы она выглядела.

Вот как выглядит таблица без подписи

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

решение2

Как я и написал в комментарии к вопросу, вы неправильно поняли, какмногорядныйвычисляет охват строк, но это легко исправить. Просто добавьте 3 все места (то естьвместо 6, 9 и 12).

Чтобы исправить неуместную подпись, если вы хотите использовать свой исходный код, вам нужно добавить дополнительный пробел после -row, multirowчтобы создать достаточно места для охватываемых строк. Поскольку вы охватываете три строки, вы можете либо добавить две строки ( &&\\), либо аналогичное количество дополнительной высоты в end-of-rowкоманде ( \\[<height>]. Я добавил два \normalbaselineskips, чтобы у вас было пространство, равное трем строкам.

На самом деле, вы можете набрать эту таблицу, не используя никаких дополнительных пакетов вообще. Определите \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} 

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

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