Título de la tabla en el medio de la tabla.

Título de la tabla en el medio de la tabla.

Logré hacer una tabla, pero el título (o cualquier texto que agregue después) está en el medio de la tabla, como si la tabla terminara después de la segunda fila. No pude encontrar una pregunta similar así que decidí hacerme.

Agregué el título y algo de texto después de la tabla. Ambos se comportan como si la mesa terminara después de la segunda fila.

Sin el título, ni ningún texto antes o después, la tabla se ve casi como me gustaría que se viera.

Así se ve la tabla sin el título

\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}

Como nota al margen, ¿la referencia tampoco funciona correctamente por alguna razón? Quería que la frase dijera

[...] aquí hay una referencia a la Tabla 1.

y en su lugar solo dice

[...] aquí hay una referencia a la Tabla .

He logrado usarlo \refcon otras tablas pero no con esta.

Respuesta1

\multirow{<nrows>}{<width>}{<text>}extiende el texto (verticalmente) en <nrows>filas de ancho <width>. Si <width>se da como *, utiliza el ancho natural de <text>. Entonces, por ejemplo, usar \multirow{12}{*}{<...>}significa que desea distribuir esa celda específica en 12 filas. Obviamente es incorrecto ya que cada uno TestXdesea distribuirlo en solo 3 filas.

Aquí hay una implementación ligeramente diferente (ya que no necesitamultirowaquí) usandomakecell:

ingrese la descripción de la imagen aquí

\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}

Note como \labelvienedespués \captionpara lograr la correcta \refreferencia. Ver¿Por qué la etiqueta de un entorno tiene que aparecer después del título?.

Respuesta2

Mientras escribo en el comentario a la pregunta, no has entendido cómovarias filascalcula la extensión de filas, pero se soluciona fácilmente. Simplemente agregue 3 todos los lugares (es deciren lugar de 6, 9 y 12).

Para corregir el título mal colocado, si desea utilizar su código original, debe agregar espacio adicional después de la multirowfila para crear suficiente espacio para las filas distribuidas. Dado que abarca tres filas, puede agregar dos filas ( &&\\) o una cantidad similar de altura adicional en el end-of-rowcomando ( \\[<height>]. Agregué dos \normalbaselineskips para que tenga un espacio igual a tres filas.

En realidad, puedes componer esta tabla sin utilizar ningún paquete adicional. Defina a \parboxy coloque las tres líneas dentro de eso. Tienes que decidir una altura y un ancho para que \parboxtengan el espacio correcto. Puede cambiar los parámetros de alto y ancho para tener un espacio que se adapte a su documento. Si quieres evitar eso, usa makecell. He definido un atajo \pbpara reducir la escritura.

El lugar más seguro para la etiqueta esadentroel comando de título. Entonces no fallará.

mesa con\parbox

ingrese la descripción de la imagen aquí

\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}

mesa con\multirow

ingrese la descripción de la imagen aquí

\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}

Respuesta3

Un código variante, también basado en makecell, combinado con multirow– y booktabs, para agregar algo de relleno alrededor de las reglas. Agregué algo de espacio vertical para separar los grupos de tres líneas. Además, una referencia a requiere un \labelcomando (después del título) para funcionar.

\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} 

ingrese la descripción de la imagen aquí

información relacionada