
Ich habe es geschafft, eine Tabelle zu erstellen, aber die Überschrift (oder jeder Text, den ich danach hinzufüge) steht in der Mitte der Tabelle, als ob die Tabelle nach der zweiten Zeile enden würde. Ich konnte keine ähnliche Frage finden, also beschloss ich, sie mir selbst zu stellen.
Ohne die Überschrift oder einen Text davor/danach sieht die Tabelle fast so aus, wie ich es mir wünsche.
\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}
Als Randbemerkung: Aus irgendeinem Grund funktioniert die Referenzierung auch nicht richtig. Ich wollte, dass der Satz lautet
[...] hier ein Verweis auf Tabelle 1.
und stattdessen heißt es nur
[...] hier ist ein Verweis auf Tabelle .
Ich konnte es \ref
mit anderen Tabellen verwenden, aber nicht mit dieser.
Antwort1
\multirow{<nrows>}{<width>}{<text>}
verteilt Text (vertikal) über <nrows>
Zeilen mit der Breite <width>
. Wenn <width>
als angegeben wird *
, wird die natürliche Breite von verwendet <text>
. Wenn Sie also beispielsweise verwenden, \multirow{12}{*}{<...>}
möchten Sie diese bestimmte Zelle über 12 Zeilen verteilen. Dies ist offensichtlich falsch, da TestX
Sie jeweils nur über 3 Zeilen verteilen möchten.
Hier ist eine etwas andere Implementierung (da Sie nicht brauchenmultirow
hier) mitmakecell
:
\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}
Beachten Sie, wie das \label
kommtnach \caption
um die richtige \ref
Erektion zu erreichen. SieheWarum muss die Bezeichnung einer Umgebung nach der Überschrift erscheinen?.
Antwort2
Wie ich im Kommentar zur Frage schreibe, haben Sie missverstanden, wiemehrreihigberechnet die Zeilenspanne, aber das lässt sich leicht beheben. Fügen Sie einfach 3 an allen Stellen hinzu (dhstatt 6, 9 und 12).
Um die falsch platzierte Überschrift zu korrigieren, müssen Sie, wenn Sie Ihren Originalcode verwenden möchten, nach der -Zeile zusätzlichen Platz hinzufügen, um genügend Platz für die überspannten Zeilen zu schaffen. Da Sie drei Zeilen überspannen, können Sie entweder zwei Zeilen ( ) oder eine ähnliche Menge zusätzlicher Höhe beim Befehl ( multirow
hinzufügen . Ich habe zwei s hinzugefügt, damit Sie Platz haben, der drei Zeilen entspricht.&&\\
end-of-row
\\[<height>]
\normalbaselineskip
Tatsächlich können Sie diese Tabelle ohne zusätzliche Pakete setzen. Definieren Sie ein \parbox
und platzieren Sie die drei Zeilen darin. Sie müssen eine Höhe und Breite festlegen, damit der \parbox
Abstand richtig ist. Sie können die Parameter für Höhe und Breite ändern, um einen Abstand zu erhalten, der zu Ihrem Dokument passt. Wenn Sie das vermeiden möchten, verwenden Sie makecell
. Ich habe eine Tastenkombination definiert, \pb
um den Tippaufwand zu reduzieren.
Der sicherste Platz für das Etikett istinnender Befehl „capture“. Dann wird es nicht fehlschlagen.
Tisch mit\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}
Tisch mit\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}
Antwort3
Ein Variantencode, der ebenfalls auf basiert makecell
, kombiniert mit multirow
– und booktabs
, um etwas Abstand um die Regeln herum hinzuzufügen. Ich habe etwas vertikalen Abstand hinzugefügt, um die Gruppen von drei Zeilen zu trennen. Außerdem erfordert ein Verweis auf einen \label
Befehl (nach der Überschrift), damit er funktioniert.
\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}