Ich möchte nur die Zahlen in der folgenden Tabelle zentrieren. Ich habe einige Variationen des Zentrierbefehls ausprobiert, aber sie wirken sich auf die gesamte Tabelle aus (ich bin relativ neu bei Latex).
MWE:
\documentclass{article}
\usepackage{booktabs, threeparttable}
\usepackage{array}
\newcolumntype{L}[1]{>{\raggedright\arraybackslash}p{#1}}
\begin{document}
\begin{table}[htbp]
\begin{threeparttable}
\caption{Number of Credits per Course by Year}
\label{table:nc}
\begin{tabular}{@{}p{0.18\textwidth}*{6}{L{\dimexpr0.15\textwidth-2\tabcolsep\relax}}@{}}
\toprule
& \multicolumn{2}{c}{\bfseries Commerce Faculty} &
\multicolumn{2}{c}{\bfseries EBE Faculty} &
\multicolumn{2}{c}{\bfseries Science Faculty} \\
\cmidrule(l){2-3} \cmidrule(l){4-5} \cmidrule(l){6-7}
& F, S, H Courses & W Courses & F, S, H Courses & W Courses & F, S, H Courses & W Courses \\
\midrule
First-year & 18 & 36 & Variable & Variable & 18 & 36 \\
Second-year & 18 & 36 & Variable & Variable & 24 & 48 \\
Third-year & 18 & 36 & Variable & Variable & 36 & 72 \\
\bottomrule
\end{tabular}
\end{threeparttable}
\end{table}
\end{document}
Antwort1
Sie könnten anstelle einer Umgebung eine tabularx
Umgebung verwenden, die auf eine Breite von voreingestellt ist . Auf diese Weise könnten Sie auf die mühsamen (und fehleranfälligen) manuellen Berechnungen der erforderlichen Breiten der Spalten 2 bis 7 verzichten. Im folgenden Beispiel ist der Spaltentyp für rechts ausgerichtetes Material, während der Spaltentyp für zentriertes Material ist. Beide Spaltentypen basieren auf dem Spaltentyp des Pakets. Der Hauptspaltentyp ist, da die Spalten 2 bis 7 in den meisten Zeilen zentriert sein sollten. Der Spaltentyp wird für die Spaltenüberschriften „F, S, H Courses“ und „W Courses“ verwendet. Beachten Sie, dass Zeilenumbrüche in diesen Überschriften nicht explizit angegeben werden müssen.\textwidth
tabular
L
C
X
tabularx
C
L
Im Bild unten \bottomrule
wird die dünne horizontale Linie unter durch erstellt \hrule
; sie wurde dort nur platziert, um anzuzeigen, dass die Breite der Tabelle gleich ist \textwidth
.
\documentclass{article}
\usepackage{booktabs, threeparttable}
\usepackage{tabularx}
\newcolumntype{C}{>{\centering\arraybackslash}X}
\newcolumntype{L}{>{\raggedright\arraybackslash}X}
\begin{document}
\begin{table}[htbp]
\begin{threeparttable}
\caption{Number of Credits per Course by Year}
\label{table:nc}
\begin{tabularx}{\textwidth}{@{}l*{6}{C}@{}}
\toprule
& \multicolumn{2}{c}{\bfseries Commerce Faculty} &
\multicolumn{2}{c}{\bfseries EBE Faculty} &
\multicolumn{2}{c@{}}{\bfseries Science Faculty} \\ % note use of "c@{}"
\cmidrule(lr){2-3} \cmidrule(lr){4-5} \cmidrule(l){6-7} % left- and right-trimming
& \multicolumn{1}{L}{F, S, H Courses} &
\multicolumn{1}{L}{W Courses} &
\multicolumn{1}{L}{F, S, H Courses} &
\multicolumn{1}{L}{W Courses}&
\multicolumn{1}{L}{F, S, H Courses} &
\multicolumn{1}{L@{}}{W Courses} \\ % note use of "L@{}"
\midrule
First-year & 18 & 36 & Variable & Variable & 18 & 36 \\
Second-year & 18 & 36 & Variable & Variable & 24 & 48 \\
Third-year & 18 & 36 & Variable & Variable & 36 & 72 \\
\bottomrule
\end{tabularx}
\end{threeparttable}
\end{table}
\hrule % just to indicate the width of the text block
\end{document}
Antwort2
Deklarieren Sie einen neuen Spaltentyp für die zentrierten Spalten (bei Bedarf können Sie die Definition für eine bestimmte Zelle jederzeit mit überschreiben \multicolumn
):
\documentclass[draft]{article}
\usepackage{booktabs, threeparttable}
\usepackage{array}
\newcolumntype{L}[1]{>{\raggedright\arraybackslash}p{#1}}
\newcolumntype{C}[1]{>{\centering\arraybackslash}p{#1}}
\newlength\mylen
\setlength\mylen{\dimexpr0.135\textwidth-2\tabcolsep\relax}
\begin{document}
\begin{table}[htbp]
\begin{threeparttable}
\setlength\tabcolsep{5pt}
\caption{Number of Credits per Course by Year}
\label{table:nc}
\begin{tabular}{
@{}
p{0.18\textwidth}
*{2}{C{\mylen}}
*{2}{L{\mylen}}
*{2}{C{\mylen}}@{}
}
& \multicolumn{2}{c}{\bfseries Commerce Faculty} &
\multicolumn{2}{c}{\bfseries EBE Faculty} &
\multicolumn{2}{c@{}}{\bfseries Science Faculty} \\
\cmidrule(l){2-3} \cmidrule(l){4-5} \cmidrule(l){6-7}
& \multicolumn{1}{l}{F, S, H} & \multicolumn{1}{l}{W} & \multicolumn{1}{l}{F, S, H} & \multicolumn{1}{l}{W} & \multicolumn{1}{l}{F, S, H} & \multicolumn{1}{l@{}}{W} \\
& \multicolumn{1}{l}{Courses} & \multicolumn{1}{l}{Courses} & \multicolumn{1}{l}{Courses} & \multicolumn{1}{l}{Courses} & \multicolumn{1}{l}{Courses} & \multicolumn{1}{l@{}}{Courses} \\
\midrule
First-year & 18 & 36 & \small Variable & \small Variable & 18 & 36 \\
Second-year & 18 & 36 & \small Variable & \small Variable & 24 & 48 \\
Third-year & 18 & 36 & \small Variable & \small Variable & 36 & 72 \\
\bottomrule
\end{tabular}
\end{threeparttable}
\end{table}
\end{document}
Um zu verhindern, dass die Tabelle in den rechten Rand hineinragt, habe ich die Spaltenbreite neu berechnet und verkleinert \tabcolsep
.
Wenn eine anspruchsvollere Ausrichtung der numerischen Werte erforderlich ist, können Sie diedcolumn
odersiunitx
Pakete.
Antwort3
Eine Lösung mit dem makecell
Paket, mit der Sie Ihre Zellen noch weiter anpassen können. Zur Demonstration fordere ich im folgenden Code an, dass Zahlen fett gedruckt werden und oberhalb und unterhalb der Zelle etwas vertikaler Abstand hinzugefügt wird. Außerdem hat jede Gruppe von zwei Spalten, von der zweiten an gezählt, dieselbe Breite – die der ersten Gruppe:
\documentclass{article}
\centering\setlength{\tabcolsep}{4.4pt}
\usepackage{booktabs, threeparttable}
\usepackage{array}
\newcolumntype{L}[1]{>{\raggedright\arraybackslash}p{#1}}
\usepackage{makecell}
\renewcommand{\cellgape}{\bfseries\Gape[2pt]}
\renewcommand{\theadalign}{lc}
\renewcommand{\theadfont}{\normalsize}
\newlength{\headwd}
\settowidth{\headwd}{\bfseries Commerce Faculty}
\begin{document}
\begin{table}[htbp]
\begin{threeparttable}
\caption{Number of Credits per Course by Year}
\label{table:nc}
\begin{tabular}{@{}l*{6}{p{\dimexpr 0.5\headwd-\tabcolsep \relax}}@{}}
\addlinespace
\toprule
& \multicolumn{2}{c}{\bfseries Commerce Faculty} &
\multicolumn{2}{c}{\bfseries EBE Faculty} &
\multicolumn{2}{c}{\bfseries Science Faculty} \\
\cmidrule(lr){2-3}\cmidrule(lr){4-5} \cmidrule(lr){6-7}
&\thead{ F, S, H \\ Courses} & \thead{W\\ Courses }&\thead{ F, S, H \\ Courses } & \thead{W\\ Courses} &\thead{ F, S, H\\ Courses} & \thead{W\\
Courses} \\
\cmidrule(lr){2-3}\cmidrule(lr){4-5} \cmidrule(lr){6-7}
First-year & \makecell{18} & \makecell{36} & Variable & Variable & \makecell{18} & \makecell{36} \\
Second-year & \makecell{18} & \makecell{36} & Variable & Variable & \makecell{24} & \makecell{48} \\
Third-year & \makecell{18} & \makecell{36} & Variable & Variable & \makecell{36} & \makecell{72} \\
\bottomrule
\end{tabular}
\end{threeparttable}
\end{table}
\end{document}
Antwort4
Warum? Ich weiß es nicht, aber mir gefiel dietap
Idee. Eine Mischung aus Plain TeX und LaTeX ist wahrscheinlich alles andere als OK, aber immerhin etwas, womit man spielen kann.
\documentclass{scrartcl}
\input{tap}
\usepackage{kantlipsum}
\begin{document}
\kant[1]
\medskip
\thistable{\desiredwidth\hsize}
%\moveright\parindent
\begintable
\begintableformat & \left \endtableformat
\B" ! @6 \= \E!
\B": ! @2 \textbf{Commerce Faculty} | @2 \textbf{EBE Faculty} | @2 \textbf{Science Faculty} \E!
\B" ! @6 \- \E!
\B"^ ! F, S, H | W | F, S, H | W | F, S, H | W \E!
\B"_ ! Courses | Courses | Courses | Courses | Courses | Courses \E!
\B! @7 \= \E!
\B!^ First-year | \center{18} | \center{36} | Variable | Variable | \center{18} | \center{36} \E!
\B!+ Second-year | \center{18} | \center{36} | Variable | Variable | \center{24} | \center{48} \E!
\B!_ Third-year | \center{18} | \center{36} | Variable | Variable | \center{36} | \center{72} \E!
\=
\endtable
\medskip
\kant[4]
\end{document}