如果不使用 X 列参数,表格中的手动换行符(tabu)会破坏其他列的布局

如果不使用 X 列参数,表格中的手动换行符(tabu)会破坏其他列的布局

我知道这个问题已经讨论过很多次了,建议的解决方案是在表格单元格内使用嵌套的 parbox,但我想避免这种情况。到目前为止,我使用的表格的每一列都用选项定义X。换行符语句已被考虑在内,效果很好。 在此处输入图片描述

然后,我决定第一列有点太大,我X用左列的列语句替换了它l。但是我现在得到的结果没有正确对齐。如您所见,我得到了不必要的空格,并且换行符被丢弃了。

在此处输入图片描述

我拥有的最小工作代码:

\documentclass[twoside]{report}
\usepackage[a4paper,margin=2cm]{geometry}
\linespread{1.2}
\usepackage{fontspec}
\usepackage{csquotes}
\usepackage{graphicx}
\usepackage{longtable}
\usepackage{tabu}
% Add extra space for proper alignement between table rows
\tabulinesep = 3pt
\usepackage{float}
\usepackage{booktabs}
\usepackage[export]{adjustbox}
\usepackage{mwe}
\usepackage[french]{babel}
\usepackage{parskip}

\begin{document}

    \begin{tabu}{X X X}\toprule
        Catégories & Objectifs de la vue & Exemples de vue\\\midrule
        Contenu

        \adjustbox{margin=1ex 0.5\baselineskip}{\includegraphics[width=0.05\textwidth]{example-image-a}} & Afficher un type particulier de contenu comme une image ou un texte & Image view, label\\

        Collections

        \adjustbox{margin=1ex 0.5\baselineskip}{\includegraphics[width=0.05\textwidth]{example-image-b}} & Afficher des collections ou un groupe de vues & Collection view (conteneur), table view (ableau)\\

        Contrôles utilisateurs

        \adjustbox{margin=1ex 0.5\baselineskip}{\includegraphics[width=0.05\textwidth]{example-image-c}} & Effectuer des actions pour afficher des éléments & Bouton, un slider (barre glissante), switch (interrupteur ON-OFF)\\

        Barres

        \adjustbox{margin=1ex 0.5\baselineskip}{\includegraphics[width=0.05\textwidth]{example-image-a}} & Naviger dans les vues ou effectuer des actions & Barre d'outils, barre de navigation, barre d'onglets\\

        Entrées

        \adjustbox{margin=1ex 0.5\baselineskip}{\includegraphics[width=0.05\textwidth]{example-image-b}} & Recevoir une entrée de l'utilisateur généralement à partir du clavier & Barre de recherche, text view\\

        Conteneurs

        \adjustbox{margin=1ex 0.5\baselineskip}{\includegraphics[width=0.05\textwidth]{example-image-c}} & Serveur de conteneurs pour d'autres vues & Simple vue, scroll view\\

        Modal & Interrompre le flux de l'application pour autoriser l'utilisateur à effectuer une action particulière & \enquote{Action sheet} (feuille d'actions), \enquote{alert view} (boites de dialogues d'avertissement)\\\bottomrule
    \end{tabu}

\end{document}

答案1

首先,您使用手动回车/换行符为第一列中的图像插入换行符。请将它们替换为\newline,不要使用,\\因为您的表格环境会认为您正在尝试创建新行,并且第二列和第三列中的文本将移至底部,并添加一个空白区域(请参见以下屏幕截图中我用红色标记的空间)。

在此处输入图片描述

在代码中这将给出(仅给出第一行内容的示例):

Contenu\newline\adjustbox{margin=1ex 0.5\baselineskip}{\includegraphics[width=0.05\textwidth]{example-image-a}} & Afficher un type particulier de contenu comme une image ou un texte & Image view, label\\

正如@Sveinung 在您的问题评论中明确指出的那样,这是由于l段落模式下未定义列的参数:\newline未被解释。

幸运的是,tabu确实X为列提供了系数(参见第 2.3 点来自文档)。基本上,您只需要用\begin{tabu}{X X X}\topruleby替换该行\begin{tabu}{X[0.8] X[1.1] X[1.1]}\toprule即可。

现在它可以按预期工作了(请注意,第一列的大小已调整,但回车符保持不变):

在此处输入图片描述

相关内容