Wie zentriere ich Text (sowohl horizontal als auch vertikal) in bestimmten Spalten?

Wie zentriere ich Text (sowohl horizontal als auch vertikal) in bestimmten Spalten?

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}

Bildbeschreibung hier eingeben

Es sollte so aussehen:

Bildbeschreibung hier eingeben

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, cund rreprä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

  1. arraydas Paket laden
  2. verwenden Sie den m{<width>}Spaltentyp anstelle von coder p{<width>}Spalten

Natürlich ist das nur die halbe Wahrheit.

Die arrayPakete bieten Ihnen die Spaltentypen mund . 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 derbpVertikale AusrichtungAls Faustregel gilt:

  • pist auf die ausgerichtetP,
  • mist ausgerichtet auf dieMiddle und
  • bist ausgerichtet auf dieBunten.

(Bitte lesen Sie das Array-Handbuch, um das genaue Verhalten zu verstehen!)

Wenn Sie min 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 mSpalten verhalten sich genauso, wie die pSpalten, 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 arrayPaket bietet. Sie können die verwenden >{cmd}. Stellen Sie sich die >als Pfeil vor, der die cmdvon 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 pArt Spalte mit 5 cm Breite in der Mitte zwischen zwei normalen lSpalten 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.\raggedrightm

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 \raggedrightBefehl 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 arrayPaket bietet den \newcolumntypeBefehl 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 ( cund p{5cm}) durch diesen brandneuen und glänzenden CSpaltentyp.

\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, \settowidthum 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 CSpalte eine variable Breite haben sollte, wie p{<width>}sie hat. Die pSpalte hat ein Paar Klammern. Fügen wir dies also unserer CSpalte 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 CSpalte ein Klammernpaar haben muss. Der in diesem Paar angegebene Wert wird #1am 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

Bildbeschreibung hier eingeben

Persönlich würde ich auch einen neuen RSpaltentyp 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

\arraybackslashermö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.

verwandte Informationen