我读了很多与表格相关的帖子,但找不到针对我的问题的具体解决方案。我知道最后一列的多行垂直居中存在错误,但它对我来说不起作用,所以我通过手动调整 \vspace{-0.3em} 来修复它。但这不是解决方案。我的问题是我喜欢使用自设置的列类型(在本例中为“P”)在单元格中垂直居中。它完美适用于第二列,但不适用于第三列。它不是我想要的优雅解决方案。它看起来像下面这样,但经过数小时手动将单元格中的文本移动 0.1em 步长后。
。
这是我在 Overleaf-LuaLatex 编译器中使用的最小代码。我希望这样就很容易理解了。我已经阅读了如何提问,但作为这里的作者,我还是个新手,所以请原谅我的错误,提前谢谢您。如果有问题,我也非常乐意提供语法方面的提示。
\documentclass[a4paper,12pt]{article}
\usepackage[utf8]{}
\usepackage[ngerman]{babel}
\usepackage[T1]{fontenc}
\usepackage{amsmath}%mathem. Symbole
\usepackage{bm}%bold Math Symbols
\usepackage{multicol}
\usepackage{array,multirow,graphicx}
\renewcommand{\arraystretch}{1.7}%Zellenhöhe
\usepackage{booktabs}%Liniendicke
\newcolumntype{P}[1]{>{\centering\arraybackslash}p{#1}}%horizontal centering
\begin{document}
\begin{table}
\caption{Verortung der Stunde zum Thema Saccharose im Unterricht}
\vspace{1.5ex}
\centering
\label{table5}
\resizebox{\textwidth}{!}{ %insgesamt: 0.864\textwidth
\begin{tabular}{ | P{0.288\textwidth} | P{0.288\textwidth} | P{0.288\textwidth} |}
\hline
\small\textbf{\textit{Lernbereich}} &
\small\textbf{\textit{Unterrichtseinheiten}} &
\small\textbf{\textit{angesetzte Stunden}}
\\
\hline
\multirow{4}{*}[-5em]{\parbox{0.288\textwidth}{\centering C9-2: Atombau und gekürztes Periodensystem – Vom Kern-Hülle-Modell zum Energiestufenmodell und zum Ordnungsprinzip des gekürzten Periodensystems}} & Energiestufenmodell: Ionisierungsenergie, Elektronenkonfiguration & \vspace{-0.3em} 1-2\,h \\
\cline{2-3}
& \textbf{Profil: Flammenfärbung und Linienspektrum} & \vspace{-1em} 3\,h \\
\cline{2-3}
& gekürztes Periodensystem: Protonenzahl, Nukleonenzahl, Isotope; Hauptgruppen, Valenzelektronen; Perioden & \vspace{1em} 1-2\,h \\
\cline{2-3}
& Edelgaskonfiguration, Ionenladungszahl von Kationen und Anionen, Edelgasregel & \vspace{0.3em} 1-2\,h \\
\cline{2-3}
\hline
\multicolumn{1}{c}{} &\multicolumn{1}{c}{}& \multicolumn{1}{|c|}{$\sum$ 9\,h}\\
\cline{3-3}
\end{tabular}
}
\end{table}
\end{document}
答案1
一些观察:
\resizebox
很糟糕。这会使字体不一致。更好的方法是计算列宽,使其刚好适合。从中减去4\arrayrulewidth
和,然后除以 3。6\tabcolsep
\textwidth
- 对于垂直居中,请使用
m{...}
代替p{...}
。然后你可以去掉 s\vspace
。 - 不要将 a 放在
\parbox
中\multirow
。而是使用=
而不是*
作为第二个参数。 - 对于垂直条:它应该位于上一列的末尾,而不是下一列的开头。
- (之前)有
\cline{2-3}
太多\hline
\documentclass[a4paper,12pt]{article}
\usepackage[utf8]{}
\usepackage[ngerman]{babel}
\usepackage[T1]{fontenc}
\usepackage{amsmath}%mathem. Symbole
\usepackage{bm}%bold Math Symbols
\usepackage{multicol}
\usepackage{array,multirow,graphicx}
\renewcommand{\arraystretch}{1.7}%Zellenhöhe
\usepackage{booktabs}%Liniendicke
\newlength\Pcolwidth
\setlength\Pcolwidth{\dimexpr (\textwidth-4\arrayrulewidth-6\tabcolsep)/3}
\newcolumntype{P}[1]{>{\centering\arraybackslash}m{#1}}%horizontal and vertical centering
\begin{document}
\begin{table}
\caption{Verortung der Stunde zum Thema Saccharose im Unterricht}
\vspace{1.5ex}
\centering
\label{table5}
\begin{tabular}{ | P{\Pcolwidth} | P{\Pcolwidth} | P{\Pcolwidth} |}
\hline
\small\textbf{\textit{Lernbereich}} &
\small\textbf{\textit{Unterrichtseinheiten}} &
\small\textbf{\textit{angesetzte Stunden}}
\\
\hline
\multirow{4}{=}[-5em]{\centering C9-2: Atombau und gekürztes Periodensystem – Vom Kern-Hülle-Modell zum Energiestufenmodell und zum Ordnungsprinzip des gekürzten Periodensystems} & Energiestufenmodell: Ionisierungsenergie, Elektronenkonfiguration & 1-2\,h \\
\cline{2-3}
& \textbf{Profil: Flammenfärbung und Linienspektrum} & 3\,h \\
\cline{2-3}
& gekürztes Periodensystem: Protonenzahl, Nukleonenzahl, Isotope; Hauptgruppen, Valenzelektronen; Perioden & 1-2\,h \\
\cline{2-3}
& Edelgaskonfiguration, Ionenladungszahl von Kationen und Anionen, Edelgasregel & 1-2\,h \\
\hline
\multicolumn{2}{c|}{}& $\sum$ 9\,h \\
\cline{3-3}
\end{tabular}
\end{table}
\end{document}
第二种解决方案:
使用tabularx
,它会自动计算列宽。您需要重新定义\tabularxcolumn
以使其使用m{...}
列。
\documentclass[a4paper,12pt]{article}
\usepackage[utf8]{}
\usepackage[ngerman]{babel}
\usepackage[T1]{fontenc}
\usepackage{amsmath}%mathem. Symbole
\usepackage{bm}%bold Math Symbols
\usepackage{multicol}
\usepackage{array,multirow,graphicx}
\renewcommand{\arraystretch}{1.7}%Zellenhöhe
\usepackage{booktabs}%Liniendicke
\usepackage{tabularx}
\newcolumntype{P}{>{\centering\arraybackslash}X}%horizontal centering
\begin{document}
\begin{table}
\renewcommand{\tabularxcolumn}[1]{m{#1}}% vertical centering
\caption{Verortung der Stunde zum Thema Saccharose im Unterricht}
\vspace{1.5ex}
\centering
\label{table5}
\begin{tabularx}{\textwidth}{ | P | P | P |}
\hline
\small\textbf{\textit{Lernbereich}} &
\small\textbf{\textit{Unterrichtseinheiten}} &
\small\textbf{\textit{angesetzte Stunden}}
\\
\hline
\multirow{4}{=}[-5em]{\centering C9-2: Atombau und gekürztes Periodensystem – Vom Kern-Hülle-Modell zum Energiestufenmodell und zum Ordnungsprinzip des gekürzten Periodensystems} & Energiestufenmodell: Ionisierungsenergie, Elektronenkonfiguration & 1-2\,h \\
\cline{2-3}
& \textbf{Profil: Flammenfärbung und Linienspektrum} & 3\,h \\
\cline{2-3}
& gekürztes Periodensystem: Protonenzahl, Nukleonenzahl, Isotope; Hauptgruppen, Valenzelektronen; Perioden & 1-2\,h \\
\cline{2-3}
& Edelgaskonfiguration, Ionenladungszahl von Kationen und Anionen, Edelgasregel & 1-2\,h \\
\hline
\multicolumn{2}{c|}{}& $\sum$ 9\,h \\
\cline{3-3}
\end{tabularx}
\end{table}
\end{document}
第三种解决方案:
使用跨度大于单行行高的“tblr environment from the
tabularray \multirow”,这通常是一个更好的解决方案。package. For
\documentclass[a4paper,12pt]{article}
\usepackage[utf8]{}
\usepackage[ngerman]{babel}
\usepackage[T1]{fontenc}
\usepackage{amsmath}%mathem. Symbole
\usepackage{bm}%bold Math Symbols
\usepackage{multicol}
\usepackage{array,multirow,graphicx}
\renewcommand{\arraystretch}{1.7}%Zellenhöhe
\usepackage{booktabs}%Liniendicke
\usepackage{tabularray}
\NewColumnType{P}{X[c,m]}%horizontal and vertical centering
\begin{document}
\begin{table}
\caption{Verortung der Stunde zum Thema Saccharose im Unterricht}
\vspace{1.5ex}
\centering
\label{table5}
\begin{tblr}{width=\textwidth, colspec={| P | P | P |},vline{1,2} = {Z}{0pt}}
\hline
\small\textbf{\textit{Lernbereich}} &
\small\textbf{\textit{Unterrichtseinheiten}} &
\small\textbf{\textit{angesetzte Stunden}}
\\
\hline
\SetCell[r=4]{c,m} C9-2: Atombau und gekürztes Periodensystem – Vom Kern-Hülle-Modell zum Energiestufenmodell und zum Ordnungsprinzip des gekürzten Periodensystems & Energiestufenmodell: Ionisierungsenergie, Elektronenkonfiguration & 1-2\,h \\
\cline{2-3}
& \textbf{Profil: Flammenfärbung und Linienspektrum} & 3\,h \\
\cline{2-3}
& gekürztes Periodensystem: Protonenzahl, Nukleonenzahl, Isotope; Hauptgruppen, Valenzelektronen; Perioden & 1-2\,h \\
\cline{2-3}
& Edelgaskonfiguration, Ionenladungszahl von Kationen und Anionen, Edelgasregel & 1-2\,h \\
\hline
& & $\sum$ 9\,h \\
\cline{3-3}
\end{tblr}
\end{table}
\end{document}
答案2
感谢@pascal974/@Pieter van Oostrum 和 tabularray 包的建议,它运行得非常好。
\documentclass[a4paper,12pt]{article}
\usepackage[utf8]{}
\usepackage[ngerman]{babel}
\usepackage[T1]{fontenc}
\usepackage{tabularray}
\usepackage{amsmath}%mathem. Symbole
\usepackage{graphicx}
\begin{document}
\begin{table}
\caption{Verortung der Stunde zum Thema Saccharose im Unterricht}
\vspace{1ex}
\centering
\label{table8}
\setlength\threecolwidth{\dimexpr (\textwidth-4\arrayrulewidth-6\tabcolsep)/3}
\SetTblrInner{rowsep=5pt}
\begin{tblr}{
vline{1}={1-5}{solid},%erste vert. Linie in den Reihen {}
colspec={Q[l,m,\threecolwidth]|Q[l,m,\threecolwidth]|Q[c,m,\threecolwidth]|}}% m vertical, c horiz. align
\hline
\small\textbf{\textit{Lernbereich}} &
\small\textbf{\textit{Unterrichtseinheiten}} &
\small\textbf{\textit{angesetzte Stunden}}
\\
\hline
\SetCell[r=4]{m} C9-2: Atombau und gekürztes Periodensystem – Vom Kern-Hülle-Modell zum Energiestufenmodell und zum Ordnungsprinzip des gekürzten Periodensystems
%
%
& Energiestufenmodell: Ionisierungsenergie, Elektronenkonfiguration & 1-2\,h \\
\hline
& \textbf{Profil: Flammenfärbung und Linienspektrum} & 3\,h \\
\hline
& gekürztes Periodensystem: Protonenzahl, Nukleonenzahl, Isotope; Hauptgruppen, Valenzelektronen; Perioden & 1-2\,h \\
\hline
& Edelgaskonfiguration, Ionenladungszahl von Kationen und Anionen, Edelgasregel & 1-2\,h \\
\hline
\SetCell[c=2]{c}& & $\sum$ 9\,h\\
\cline{3-3}
\end{tblr}
\end{table}
\end{document}
这非常简单,我可以用 m 将单元格垂直居中,用 c 将单元格水平居中。(Q[m,c])
这非常简洁。我唯一的问题是,我将整个 tblr/tabular 环境放在一个 resizebox 中。我曾经看到过这种情况,从那时起我就一直这样做,以防止任何表格超出我的边距。我宁愿缩小它,也不愿超出边距。但另一方面,我不想使用不同的字体大小,因此为了确定正确的列宽,我让 latex 读取以 cm 或 pt 为单位的文本宽度,并将其除以我拥有的列数。这就是为什么上面的代码中单元格类型为:Q[l,m,139.21471pt]。这是一个相当奇怪的数字,0.3\textwidth 在该包中不起作用,根据经验,3 列表有三个 0.28\textwidth 列,而不是“三分之一”等于 0.33\textwidth。有没有更美观的选项来制作三个等宽的列,并防止整个东西缩小或离开我的边距?
再次感谢迄今为止的大力帮助
编辑:更新了三列宽度的代码
答案3
- 我会重新设计一下表格:让最后一列变窄一些。
- 还有一个建议,如何使用
tabularray
包来尽量缩短代码。 - 对于值,我会使用
siunitx
包。
\documentclass[a4paper,12pt]{article}
\usepackage[ngerman]{babel}
\usepackage[T1]{fontenc}
\usepackage[skip=0.33\baselineskip]{caption}
\usepackage{ragged2e}
\usepackage{tabularray}
\UseTblrLibrary{siunitx}
\begin{document}
\begin{table}
\caption{Verortung der Stunde zum Thema Saccharose im Unterricht}
\label{table5}
\centering
\sisetup{range-phrase={\,--\,}}
\begin{tblr}{hline{1-Y} = solid, hline{Z} = {Z}{solid},
vline{1,2} = {1-Y}{solid}, vline{3,4} = {1-Z}{solid},
colspec= {X[2,c]X[2,c,m]X[1,c, m]},
colsep = 3pt,
row{1} = {font=\small\itshape\bfseries, c}
}
Lernbereich
& Unterrichtseinheiten
& angesetzte Stunden \\
\SetCell[r=4]{m} C9-2: Atombau und gekürztes Periodensystem –
Vom Kern-Hülle-Modell zum Energiestufenmodell
und zum Ordnungsprinzip des gekürzten Periodensystems
& Energiestufenmodell: Ionisierungsenergie, Elektronenkonfiguration
& \qtyrange{1}{2}{\hour} \\
& \textbf{Profil: Flammenfärbung und Linienspektrum}
& \qtyrange{1}{3}{\hour} \\
& gekürztes Periodensystem: Protonenzahl, Nukleonenzahl, Isotope; Hauptgruppen, Valenzelektronen; Perioden
& \qtyrange{1}{2}{\hour} \\
& Edelgaskonfiguration, Ionenladungszahl von Kationen und Anionen, Edelgasregel
& \qtyrange{1}{2}{\hour} \\
& & $\sum= \qty{9}{\hour}$ \\
\end{tblr}
\end{table}
\end{document}