我无法正确对齐表格单元格。我希望得到下图中的效果。标题对于这个 MWE 来说应该无关紧要(我知道如何使用包来修改它caption
...)。
- 如果它们属于同一个单元格,我不知道如何让相应的项目位于同一行(见图),以及如何将所有单元格对齐到左上角
这是我的代码,产生上图的输出(请注意,文本是德语,与下图中的示例不同):
\documentclass{article}
\usepackage{ngerman}
\usepackage{tabularx}
\usepackage{booktabs}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{pbox}
\usepackage{mhchem}
\usepackage{caption}
\begin{document}
%%%
\newcommand*{\bacterium}[2]{\textit{#1}~\textit{#2}}
\newcommand*{\bacteriumsub}[3]{\textit{#1}~\textit{#2}~ssp.~\textit{#3}}
\newcommand*{\staphk}[1]{\textit{St}.~\textit{#1}}
\newcommand*{\lactok}[1]{\textit{Lb}.~\textit{#1}}
%%%%
\begin{table}[!htbp]
\small
\caption[Title]{Titel}
\centering
\begin{tabular}{llll}
\toprule
Gruppe & Spezies & \pbox{3cm}{metabolische\\ Aktivität} & \pbox{5cm} {Ziel}\\
\midrule
% first row
\pbox{3cm}{Milchsäure-\\bakterien} & \pbox{5cm}{\lactok{plantarum}\\ \lactok{pentosus}\\ \lactok{sakei}\\ \lactok{curvatus}\\ \bacterium{P.}{acidilactici}\\\bacterium{P.}{pentosaceus}} & \pbox{4cm}{Bildung von\\ Milchsäure} & \pbox{5cm}{Inhiberung v. Pathogenen\\ u. Verderbsorganismen,\\ Beschleunigung d. Umrötung,\\ Textur,\\ Aroma} \\
\\
% second row
\pbox{3cm}{Katalase-\\positive\\ Kokken} & \pbox{5cm}{\staphk{xylosus}\\ \bacteriumsub{St.}{carnosus}{carnosus}\\ \bacteriumsub{St.}{carnosus}{utilis}\\ \bacterium{Kocuria}{varians}} & \pbox{4cm}{Nitratreduktion,\\ Nitritreduktion,\\ Verbrauch von \ce{O2},\\ Dekompensation v.\\ Peroxiden} & \pbox{5cm}{Umrötung u.\\ Farbstabilisierung,\\Modulation von\\Aroma u. Geschmack,\\ Minimierung v.\\ Ranzidität} \\
% third row
\\
\pbox{3cm}{Hefen} & \pbox{5cm}{\bacterium{Deb.}{hansenii}\\ \bacterium{Candida}{famata}} \\
% fourth row
\\
\pbox{3cm}{Schimmel-\\pilze} & \pbox{5cm}{\bacterium{Pen.}{nalgiovense}\\ \bacterium{Pen.}{chrysogenum}} \\
\bottomrule
\end{tabular}
\end{table}
\end{document}
答案1
除了您自己提出的问题之外,您的代码还有许多改进之处:
\-
不要明确地在单词内进行换行(如果有其他可行的解决方案)。在这里,只需在单词中的相应位置插入即可告诉 LaTeX 换行的最佳位置。- 正如评论中提到的约翰内斯·B,最好定义整个列的宽度,而不是每个单元格的宽度。因此,您应该使用
p{width}
而不是l
作为列的说明符。 - 现在来谈谈第一个问题:如何将单元格对齐到左上角?如果您不想手动插入换行符,这将自动完成。如果您希望手动插入换行符,您可以将单元格的内容放入环境中
minipage
,并将[t]
其作为参数传递给它,使其在顶部对齐。 - 您的最后一个问题(如果我理解正确的话)是将单元格内容的各个部分相互对齐。为此,您可以使用
multirow
定义同名命令的包。这样,您可以声明某个单元格占据多行。因此,您可以使用某些行来对齐您希望相互关联的单元格部分。
将这些内容应用到你的代码中的结果是:
\documentclass{article}
\usepackage{ngerman}
\usepackage{tabularx}
\usepackage{booktabs}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{pbox}
\usepackage[version=4]{mhchem}
\usepackage{caption}
\usepackage{multirow}
\begin{document}
%%%
\newcommand*{\bacterium}[2]{\textit{#1}~\textit{#2}}
\newcommand*{\bacteriumsub}[3]{\textit{#1}~\textit{#2}~ssp.~\textit{#3}}
\newcommand*{\staphk}[1]{\textit{St}.~\textit{#1}}
\newcommand*{\lactok}[1]{\textit{Lb}.~\textit{#1}}
%%%%
\begin{table}[!htbp]
\small
\caption[Title]{Titel}
\centering
\begin{tabular}{p{2cm}p{4cm}p{3.5cm}p{4.5cm}}
\toprule
Gruppe & Spezies & metabolische Aktivität & Ziel\\
\midrule
% first row
Milchsäure\-bakterien & \begin{minipage}[t]{4cm}\lactok{plantarum}\\\lactok{pentosus}\\\lactok{sakei}\\\lactok{curvatus}\\\bacterium{P.}{acidilactici}\\\bacterium{P.}{pentosaceus}\end{minipage} & Bildung von Milchsäure & \begin{minipage}[t]{4.5cm}Inhiberung v.\ Pathogenen u.\ Verderbsorganismen,\\ Beschleunigung d.\ Umrötung,\\ Textur,\\ Aroma\end{minipage} \\
\\
% second row
\multirow{3}{2cm}{Katalase\-positive Kokken} & \multirow{3}{4cm}{\begin{minipage}[t]{4cm}\staphk{xylosus}\\\bacteriumsub{St.}{carnosus}{carnosus}\\\bacteriumsub{St.}{carnosus}{utilis}\\\bacterium{Kocuria}{varians}\end{minipage}} & Nitritreduktion, & Umrötung u.\ Farbstabilisierung, \\
&& Verbrauch von \ce{O2}, & Modulation von Aroma u.\ Geschmack, \\
&& Dekompensation v.\ Peroxiden & Minimierung v.\ Ranzidität \\
% third row
\\
Hefen & \begin{minipage}[t]{4cm}\bacterium{Deb.}{hansenii}\\\bacterium{Candida}{famata}\end{minipage} \\
% fourth row
\\
Schimmel\-pilze & \begin{minipage}[t]{4cm}\bacterium{Pen.}{nalgiovense}\\\bacterium{Pen.}{chrysogenum}\end{minipage} \\
\bottomrule
\end{tabular}
\end{table}
\end{document}
输出结果如下:
答案2
还有一个(简约的)替代方案。为此,我添加了makecell
(用于列标题和主行之间的额外空格)和ragged2e
(用于调用表单元格中的智能参差不齐文本)包,删除了第二列中的文本,删除了\newcommands
包及其在表中的使用,并使用了正常大小的字体(而不是小字体)。由于表的宽度似乎与文本宽度相同,因此我改用了表。为此,它定义了新的列类型,从而可以简单地键入表:itshape
pbox
tabularx
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
% \usepackage{ngerman}
\usepackage{booktabs,makecell,tabularx}
%\renewcommand\theadfont{\bfseries\upshape}
\frenchspacing
\usepackage{ragged2e}
\newcolumntype{L}{>{\RaggedRight\arraybackslash\let\\\newline}X}
\usepackage[version=4]{mhchem}
\usepackage{caption}
%%%%
\usepackage[margin=25mm,showframe]{geometry}%to see page layout
\begin{document}
\null\bigskip
\begin{table}[htbp]
\caption[Title]{Titel}
\begin{tabularx}{\textwidth}{>{\hsize=.4\hsize}L
>{\hsize=1.1\hsize\itshape}L
>{\hsize=1.3\hsize}L
>{\hsize=1.2\hsize}L
@{}}
\toprule
\textbf{Gruppe}
& \textb{Spezies}
& \textb{Metabolische Aktivität}
& \textb{Ziel} \tabularnewline
\midrule
% first row
Milchsäure\-bakterien
& Lb. plantarum \\
Lb. pentosus \\
Lb. sakei \\
Lb. curvatus \\
P. acidilactici \\
P. pentosaceus
& Bildung von Milchsäure
& Inhiberung v. Pathogenen u. Verderbsorganismen,
Beschleunigung d. Umrötung, Textur, Aroma \tabularnewline
\addlinespace
% second row
Katalase\-positive Kokken
& St. xylosus \\
St. carnosus ssp. carnosus \\
St. carnosus ssp. utilis
& Nitritreduktion, Umrötung u. Farbstabilisierung,
Verbrauch von \ce{O2},
& Modulation von Aroma u.\ Geschmack, \tabularnewline
& Kocuria varians
& Dekompensation v.\ Peroxiden
& Minimierung v.\ Ranzidität \tabularnewline
\addlinespace
% third row
Hefen
& Deb. hansenii \\
Candida famata \tabularnewline
\addlinespace
% fourth row
Schimmel\-pilze
& Pen. nalgiovense \\
Pen. chrysogenum \tabularnewline
\bottomrule
\end{tabularx}
\end{table}
\end{document}
ngerman
由于我还没有安装,所以包是注释。使用geometry
with 选项showframe
定义页面布局(我根据列/pbox 宽度总和猜测)并显示页面布局。此 MWE 给出:
编辑:根据 Mico 的评论,我对原始答案做了一些修改:(i)列标题从居中改为左对齐(用 替换thead{...}
)textbf{...}
;(ii)的宽度tabularx
是文本宽度,因此这里没有什么可以居中的,所以我删除了多余的指令 \centering
;(iii)为了纠正词间间距,我将其添加\franchspacing
到 MWE 序言中。
一些额外的解释:
- 通过使用
L
(宽度智能不规则右侧文本)类型的列,以及列中的迷你页面X
的使用是多余的。那些启用多行单元格的列“本身”,它们的宽度是通过计算的,在这种情况下,它们的宽度比率是手动调整的(为了更好地查看表格)\pbox{<width>}{...}
tabularx
- 由于行的最小高度足够大,第一列单元格中的更多行不会干扰它们。因此
multirow
不再需要使用单元格。
通过所有这些措施,表格代码精简而简洁(在我看来)。通过编辑器中的设置方式,(再次在我看来)很容易查看和理解表格结构,或者在必要时使用新数据对其进行升级。
答案3
一些建议:
使用
tabularx
环境而不是tabular
环境,并将环境的宽度设置tabularx
为\textwidth
,即文本块的宽度。第二列的内容可能永远不应该换行;因此继续将
l
列类型分配给第二列。相反,第 1、3 和 4 列的内容可以(也应该)换行:X
为它们分配修改后的列类型,修改后的内容允许在右对齐的文本中使用连字符。删除第 1、3 和 4 列内容中的所有内部换行符。对于第 1 列中的某些单词,提供
\-
可选的连字符断开信息,例如Milchsäure\-bakterien
、Katalase\-positive
和Schimmel\-pilze
。为了简化第 2 列内容的排版,我建议使用一个辅助宏,
\columnlist
在下面的代码中调用。该
ngerman
软件包已被弃用;请考虑使用babel
带有该选项的软件包ngerman
。
\documentclass{article}
\usepackage[ngerman]{babel}
\usepackage[a4paper,margin=1in]{geometry} % set page parameters
\usepackage{tabularx,ragged2e}
\newcolumntype{L}{>{\RaggedRight\arraybackslash}X}
\usepackage{booktabs}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[version=4]{mhchem}
\usepackage{caption}
\newcommand\columnlist[1]{%
\begin{tabular}[t]{@{}l@{}}
#1
\end{tabular}}
\begin{document}
\newcommand*{\bacterium}[2]{\textit{#1}~\textit{#2}}
\newcommand*{\bacteriumsub}[3]{\textit{#1}~\textit{#2}~ssp.~\textit{#3}}
\newcommand*{\staphk}[1]{\textit{St}.~\textit{#1}}
\newcommand*{\lactok}[1]{\textit{Lb}.~\textit{#1}}
\begin{table}[!htbp]
\caption[Title]{Titel}
% Note: Sum of 3 `\hsize` directives = 3 = # of columns of type "L"
\begin{tabularx}{\textwidth}{@{}
>{\hsize=0.5\hsize}L
l
>{\hsize=1.25\hsize}L
>{\hsize=1.25\hsize}L @{}}
\toprule
Gruppe & Spezies & Metabolische Aktivität & Ziel\\
\midrule
Milchsäure\-bakterien &
\columnlist{%
\lactok{plantarum}\\
\lactok{pentosus}\\
\lactok{sakei}\\
\lactok{curvatus}\\
\bacterium{P.}{acidilactici}\\
\bacterium{P.}{pentosaceus}} &
Bildung von Milchsäure &
Inhibierung v. Pathogenen u. Verderbsorganismen,
Beschleunigung d. Umrötung,
Textur, Aroma \\
\addlinespace
% second row
Katalase\-positive Kokken &
\columnlist{%
\staphk{xylosus}\\
\bacteriumsub{St.}{carnosus}{carnosus}\\
\bacteriumsub{St.}{carnosus}{utilis}\\
\bacterium{Kocuria}{varians}} &
Nitratreduktion, Nitritreduktion,
Verbrauch von \ce{O2},
Dekompensation v. Peroxiden &
Umrötung u. Farbstabili\-sie\-rung, Modulation von Aroma u. Geschmack, Minimierung v. Ranzidität \\
\addlinespace
% third row
Hefen &
\columnlist{%
\bacterium{Deb.}{hansenii}\\
\bacterium{Candida}{famata}} \\
\addlinespace
% fourth row
Schimmel\-pilze &
\columnlist{%
\bacterium{Pen.}{nalgiovense}\\
\bacterium{Pen.}{chrysogenum}}\\
\bottomrule
\end{tabularx}
\end{table}
\end{document}