%20in%20bestimmten%20Spalten%3F.png)
Wie kann ich die ersten drei Spalten vertikal zentrieren, sodass alle Werte in diesen Spalten in der Mitte liegen?
\begin{center}
\begin{tabular}{|c| c |c| p{5cm}|}
\hline
\rowcolor[gray]{.8}Day & Min Temp & Max Temp & \multicolumn{1}{c|}{ Summary} \\ \hline
Monday & 11C & 22C & A clear day with lots of sunshine.
However, the strong breeze will bring down the temperatures \\ \hline
Tuesday & 9C & 19C & Cloudy with rain, across many northern regions.
Clear spells across most of Scotland and Northern Ireland, but rain
reaching the far northwest \\ \hline
Wednesday & 10C & 21C & Rain will still linger for the morning.
Conditions will improve by early afternoon and continue throughout the evening. \\ \hline
\end{tabular}
\end{center}
Es sollte so aussehen:
Bearbeiten:
Folgendes habe ich anhand der in den Kommentaren eingefügten Fragen versucht:
\begin{center}
\renewcommand{\tabularxcolumn}[1]{m{#1}}
\begin{tabularx}{|m{1in}|c|c| p{5cm}|}
\hline
\rowcolor[gray]{.8}Day & Min Temp & Max Temp & \multicolumn{1}{c|}{ Summary} \\ \hline
Monday & 11C & 22C & A clear day with lots of sunshine. However, the strong breeze will bring down the temperatures \\ \hline
Tuesday & 9C & 19C & Cloudy with rain, across many northern regions. Clear spells across most of Scotland and Northern Ireland, but rain reaching the far northwest \\ \hline
Wednesday & 10C & 21C & Rain will still linger for the morning. Conditions will improve by early afternoon and continue throughout the evening. \\ \hline
\end{tabularx}
\end{center}
Es funktioniert immer noch nicht.
Antwort1
Willkommen bei TeX.SE!
Bitte denken Sie beim nächsten Mal daran, ein vollständiges MWE zu posten. Ich habe meiner Antwort einige fehlende Teile hinzugefügt, aber die graue Hintergrundfarbe in der Überschriftszeile übersehen. Betrachten Sie dies als Ihre Hausaufgabe ;-)
LaTeX kennt grundsätzlich zwei Arten von Spalten. Eine Art, bei der LaTeX die Breite der Spalte selbst berechnet. Die Buchstaben l
, c
und r
repräsentieren diese Art von Spalten. Die Spalten „wachsen“ in der Breite, wenn der Autor ihnen Text hinzufügt.
Auf der anderen Seite gibt es den Typ der Spalten, bei denen der Autor die Breite definiert. Die Kennung für diesen Spaltentyp ist z. B. p{<width>}
. Du hast ihn für deine letzte Spalte verwendet und p{5cm}
in deinem MWE definiert. Diese Spalte soll 5 cm breit sein. Wenn der Autor (also du!) mehr Text hinzufügt, der breiter als 5 cm ist, wird LaTeX den Text umbrechen und eine neue Zeile beginnen. Die resultierende Spalte wird im Blocksatz formatiert, wie du in deinen Beispielen sehen kannst.
Um die gewünschten Ergebnisse zu erzielen, müssen Sie nur
array
das Paket laden- verwenden Sie den
m{<width>}
Spaltentyp anstelle vonc
oderp{<width>}
Spalten
Natürlich ist das nur die halbe Wahrheit.
Die array
Pakete bieten Ihnen die Spaltentypen m
und . Sie verhalten sich wie die Spalte, da der Benutzer ihre Breite definieren muss. LaTeX bricht dann Zeilen um und erzeugt Blocksatz. Der Unterschied zwischen diesen Spaltentypen ist derb
p
Vertikale AusrichtungAls Faustregel gilt:
p
ist auf die ausgerichtetP,m
ist ausgerichtet auf dieMiddle undb
ist ausgerichtet auf dieBunten.
(Bitte lesen Sie das Array-Handbuch, um das genaue Verhalten zu verstehen!)
Wenn Sie m
in Ihrer Tabelle einen Spaltentyp verwenden, werden alle Zeilen wie gewünscht vertikal zentriert ausgerichtet.
Aber auch die horizontale Ausrichtung müssen wir berücksichtigen. Die m
Spalten verhalten sich genauso, wie die p
Spalten, die wir gerade ersetzt haben. In der letzten Spalte ist dieses Verhalten ok. Aber in den ersten Spalten möchten wir, dass der Text ebenfalls horizontal zentriert ist.
Hier kommt der nächste Trick, den das array
Paket bietet. Sie können die verwenden >{cmd}
. Stellen Sie sich die >
als Pfeil vor, der die cmd
von innerhalb der geschweiften Klammern in die Spalte daneben schiebt. Wenn Sie in Ihrer Tabelle etwas wie
\begin{tabular}{ l >{\raggedright}p{5cm} l }
Sie erhalten eine p
Art Spalte mit 5 cm Breite in der Mitte zwischen zwei normalen l
Spalten als erste und letzte Spalte dieser Tabelle.
Aber der Befehl wird jedes Mal in diese Spalte >{\raggedright}
verschoben , wenn Sie diese zweite Spalte aufrufen. Dieser Befehl ändert die Ausrichtung in dieser zweiten Spalte so, dass sie auf der linken Seite bündig und auf der rechten Seite unregelmäßig ist.\raggedright
m
Anstelle der obigen Definition hätten Sie auch Folgendes eingeben können:
\begin{tabular}{l p{5cm} l}
first cell & \raggedright lots of text in the second cell, which is flush left & third cell \\
next line, first cell & \raggedright again lots of text ... & third cell \\
new line first cell & \raggedright ... & ... \\
once again & \raggedright ... & end \\
\end{tabular}
In diesem Fall müssen Sie den \raggedright
Befehl jedoch jedes Mal eingeben, wenn Sie die zweite Spalte eingeben, was sehr schnell lästig werden kann. Anstatt ihn jedes Mal einzugeben, wenn Sie diese Spalte eingeben, >{\raggedright}
erledigt der Trick aus der vorherigen Definition dies automatisch für Sie. Klingt für mich vielversprechend.
Um einen wirklich sauberen LaTeX-Code zu erhalten, sollten Sie \arraybackslash\hspace{0pt}
das obige Beispiel ergänzen. Dieser monströse String macht Ihren Eingabecode allerdings unlesbar. Daher präsentiere ich den nächsten Trick.
Das array
Paket bietet den \newcolumntype
Befehl auch an. Sie sollten ihn in der Präambel Ihres Dokuments verwenden (also vor \begin{document}
). Wählen Sie einfach einen Buchstaben als neuen Spaltentyp. Sie haben nach einem zentrierten Spaltentyp gefragt. Daher schlage ich den Buchstaben „C“ vor, der zuvor nicht definiert wurde.
Die einfachste Lösung wäre also
\newcolumntype{C}{>{\raggedright\arraybackslash\hspace{0pt}}m{5cm}}
und ersetzen Sie alle Ihre Spaltendefinitionen ( c
und p{5cm}
) durch diesen brandneuen und glänzenden C
Spaltentyp.
\begin{tabular}{|C|C|C|C|}
Manchmal hat eine so einfache Lösung einige große Nachteile. In Ihrem speziellen Fall ist jede Spalte in Ihrer Tabelle jetzt 5 cm breit. Ich schätze, das ist nicht genau das, was Sie wollen, oder? Die ersten drei Spalten müssen nicht 5 cm breit sein. Wie könnten wir das lösen?
Hier ist meine nächste Verbesserung. In der ersten Zeile scheint der breiteste Eintrag das Wort „Mittwoch“ zu sein. Lassen Sie LaTeX also dessen Breite bestimmen und diese als Breite für die erste Spalte verwenden. Dazu können Sie den Befehl verwenden, \settowidth
um die Breite des Wortes zu messen. Aber wir müssen auch unsere neue Spaltendefinition von ändern C
. Wir müssen sie flexibler definieren. Bei genauer Betrachtung sollten wir feststellen, dass die C
Spalte eine variable Breite haben sollte, wie p{<width>}
sie hat. Die p
Spalte hat ein Paar Klammern. Fügen wir dies also unserer C
Spalte hinzu.
\newcolumntype{C}[1]{>{\raggedright\arraybackslash\hspace{0pt}}m{#1}}
Sehen Sie den Unterschied? Ich habe [1]
am Anfang der Definition hinzugefügt. Das bedeutet, dass die C
Spalte ein Klammernpaar haben muss. Der in diesem Paar angegebene Wert wird #1
am Ende meiner Definition mit gekennzeichnet. Das gibt uns die gewünschte Flexibilität.
Das vollständige MWE sieht jetzt folgendermaßen aus:
\documentclass{article}
\usepackage{array} % better control for tabular
%% Define the length of the longest day name
\newlength{\daylength}
\settowidth{\daylength}{Wednesday}
%% Create a new columntype, where the text is vertically and
%% horizontally centered. The new identifier should be "C".
\newcolumntype{C}[1]{%
>{\centering\arraybackslash\hspace{0pt}}m{#1}}
\begin{document}
\begin{center}
\begin{tabular}{|C{\daylength}| C{2cm} | C{2cm} | m{5cm} |}
\hline
Day & Min Temp & Max Temp & \multicolumn{1}{c|}{ Summary} \\
\hline
Monday & 11C & 22C & A clear day with lots of sunshine.
However, the strong breeze will bring down the temperatures \\
\hline
Tuesday & 9C & 19C & Cloudy with rain, across many northern regions.
Clear spells across most of Scotland and Northern Ireland, but rain
reaching the far northwest \\
\hline
Wednesday & 10C & 21C & Rain will still linger for the morning.
Conditions will improve by early afternoon and continue throughout the evening. \\
\hline
\end{tabular}
\end{center}
\end{document}
und führt zu dieser Ausgabe
Persönlich würde ich auch einen neuen R
Spaltentyp definieren, der eine linksbündige Spalte ermöglicht, da diese kleinen Spalten im Blocksatz nicht gut aussehen. Ich werde das zu deinem Hausaufgabenstapel hinzufügen. :-)
BEARBEITEN
\arraybackslash
ermöglicht Ihnen wiederum, mit \\
die Tabellenzeile zu beenden und eine neue Zeile zu beginnen. \hspace{0pt}
ermöglicht LaTeX, mit dem Zeilenumbruch bereits im ersten Wort zu beginnen, was bei sehr kleinen Spalten wichtig ist.