表格单元格无法正确对齐

表格单元格无法正确对齐

我无法正确对齐表格单元格。我希望得到下图中的效果。标题对于这个 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

除了您自己提出的问题之外,您的代码还有许多改进之处:

  1. \-不要明确地在单词内进行换行(如果有其他可行的解决方案)。在这里,只需在单词中的相应位置插入即可告诉 LaTeX 换行的最佳位置。
  2. 正如评论中提到的约翰内斯·B,最好定义整个列的宽度,而不是每个单元格的宽度。因此,您应该使用p{width}而不是l作为列的说明符。
  3. 现在来谈谈第一个问题:如何将单元格对齐到左上角?如果您不想手动插入换行符,这将自动完成。如果您希望手动插入换行符,您可以将单元格的内容放入环境中minipage,并将[t]其作为参数传递给它,使其在顶部对齐。
  4. 您的最后一个问题(如果我理解正确的话)是将单元格内容的各个部分相互对齐。为此,您可以使用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包及其在表中的使用,并使用了正常大小的字体(而不是小字体)。由于表的宽度似乎与文本宽度相同,因此我改用了表。为此,它定义了新的列类型,从而可以简单地键入表:itshapepboxtabularx

\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由于我还没有安装,所以包是注释。使用geometrywith 选项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\-bakterienKatalase\-positiveSchimmel\-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}

相关内容