当表格中有 \makecell 时,如何将文本对齐到单元格的顶部

当表格中有 \makecell 时,如何将文本对齐到单元格的顶部

我在尝试将所有文​​本对齐到单元格顶部时遇到了问题。事实上,看起来是因为我使用的 \makecell,旁边的文本不在它应该在的位置。我尝试了其他问题和网站的许多建议,但都不起作用。这是我的表格和结果的一个示例。我们看到,即使我在表格中选择了“p{}”,第一列也不在顶部。

\documentclass{article}

% Language setting
% Replace `english' with e.g. `spanish' to change the document language
\usepackage[english]{babel}

% Set page size and margins
% Replace `letterpaper' with`a4paper' for UK/EU standard size
\usepackage[letterpaper,top=2cm,bottom=2cm,left=3cm,right=3cm,marginparwidth=1.75cm]{geometry}

% Useful packages
\usepackage{amsmath}
\usepackage{graphicx}
\usepackage[colorlinks=true, allcolors=blue]{hyperref}
\usepackage{multirow}
\usepackage{makecell}
\title{Your Paper}
\author{You}

\begin{document}
\begin{tabular}{|p{4cm}|p{5cm}|p{4cm}|}
\hline
\multicolumn{3}{|c|}{Title} \\
\hline
Programmation un simulateur complet du système &\makecell[l]{Oui/Non pour chaque item: \\ Corde \\ Actionneur d'entretien \\Capteur (optique) \\ Conditionnement des signaux  \\ Mesure de la fréquence  \\ Méthode d'accord  \\ Contrôleur d'accord}& Chacun des éléments du système doit être simulé dans un module indépendant \\     \hline
\end{tabular}

\end{document}

问题出在第一列

答案1

命令\makecellhah 选项用于水平(c, lr)和垂直(b, c, r)定位,因此在您的情况下makecell[tl]{Oui/Non ,,,}应该执行您之后的操作。

正如我在评论中提到的,您可以考虑使用列表来处理第二列中的项目itemize。除此之外,使用tblrtabularray可以编写漂亮的表格。当然,您itemize也可以在tabular表格中使用,但格式itemize不太简单:

\documentclass{article}
\usepackage[letterpaper,
            vmargin=2cm, hmargin=3cm,
            marginparwidth=1.75cm]{geometry}
\usepackage[english]{babel}

% Useful packages
\usepackage{enumitem}
\usepackage{ragged2e}
\usepackage{tabularray}
    \UseTblrLibrary{varwidth}
\usepackage[colorlinks=true, 
            allcolors=blue]{hyperref} % had to be last in in preamble

\title{Your Paper}
\author{You}

\begin{document}
\begin{tblr}{hlines, vlines,
             colspec = {Q[l,wd=4cm] Q[l, wd=5cm] Q[l, wd=4cm]},
             stretch = -1,%<--- remove extra space above and below lists
             measure = vbox,
             }
\SetCell[c=3]{c}    Title       
    &   &                       \\
Programmation un simulateur complet du système 
    &   Oui/Non pour chaque item: 
        \begin{itemize}[nosep, leftmargin=*]
    \item   Corde 
    \item   Actionneur d'entretien 
    \item   Capteur (optique) 
    \item   Conditionnement des signaux  
    \item   Mesure de la fréquence  
    \item   Méthode d'accord 
    \item   Contrôleur d'accord
        \end{itemize}
        &   Chacun des éléments du système doit être 
            simulé dans un module indépendant \\
\end{tblr}
\end{document}

在此处输入图片描述

如果您出于某种原因不喜欢在列表中的项目前使用项目符号,或者将其更改为破折号等,则只需相应地更改“itemize”选项即可。例如:

  • \begin{itemize}[nosep, label={}, leftmargin=*]没有子弹
  • \begin{itemize}[nosep, label=-, leftmargin=*]用破折号代替项目符号
  • ETC

附录:
关于OP评论:

  • 问题有标签longtable,但其中没有提供关于此问题的任何信息,或者将其扩展至跨越多个页面是否存在问题。

  • 对于长表,开发了特殊的表包,如longtable,,包等。xltabularlongtblrtabularray

  • 对于长桌的设计至少应该了解以下内容:

    • 表格是否有标题(在表格每个部分的顶部)
    • 有多少行表格包含列标题,并且应该在每个表格部分的顶部重复
  • 您的表格结构不太清晰(它是否有列标题,多列单元格的用途是什么)。

  • 使用长表格时,您应该注意,长表格只能在行之间拆分。如果单元格内容有很多行(例如表格第二列中的列表),则可能导致表格部分下方出现大量空白。

  • 使用 table 的长表示例longtblr为:

\documentclass{article}
\usepackage[letterpaper,
            vmargin=2cm, hmargin=3cm,
            marginparwidth=1.75cm]{geometry}
\usepackage[english]{babel}

\usepackage{lipsum} % dummy text filler
% Useful packages
\usepackage{enumitem}
\usepackage{ragged2e}
\usepackage{tabularray}
    \UseTblrLibrary{varwidth}
\usepackage[colorlinks=true, 
            allcolors=blue]{hyperref} % had to be last in in preamble

\title{Your Paper}
\author{You}

\begin{document}
\maketitle

\lipsum[1-3]
\begingroup
    \SetTblrStyle{caption}{font=\small}
    \SetTblrStyle{caption-tag}{font=\bfseries}
%
    \setlist[itemize]{nosep, topsep=0.5ex, leftmargin=*}
\begin{longtblr}[
caption = {From question is not evident, if your table should have caption or not.},
  label = {tab:long}, 
                ]{rowhead = 1,
                  colspec = {Q[l,wd=4cm] Q[l, wd=5cm] Q[l, wd=4cm]},
                  stretch = -1,%<--- remove extra space above and below lists
                  measure = vbox,
                  row{1} = {font=\bfseries},
                  hlines, vlines,
                }
column header
    & column header
        & column header                 \\
Programmation un simulateur complet du système 
    &   Oui/Non pour chaque item: 
        \begin{itemize}
    \item   Corde 
    \item   Actionneur d'entretien 
    \item   Capteur (optique) 
    \item   Conditionnement des signaux  
    \item   Mesure de la fréquence  
    \item   Méthode d'accord 
    \item   Contrôleur d'accord
        \end{itemize}
        &   Chacun des éléments du système doit être 
            simulé dans un module indépendant \\
Programmation un simulateur complet du système
    &   Oui/Non pour chaque item:
        \begin{itemize}
    \item   Corde
    \item   Actionneur d'entretien
    \item   Capteur (optique)
    \item   Conditionnement des signaux
    \item   Mesure de la fréquence
    \item   Méthode d'accord
    \item   Contrôleur d'accord
        \end{itemize}
        &   Chacun des éléments du système doit être
            simulé dans un module indépendant \\
Programmation un simulateur complet du système
    &   Oui/Non pour chaque item:
        \begin{itemize}
    \item   Corde
    \item   Actionneur d'entretien
    \item   Capteur (optique)
    \item   Conditionnement des signaux
    \item   Mesure de la fréquence
    \item   Méthode d'accord
    \item   Contrôleur d'accord
        \end{itemize}
        &   Chacun des éléments du système doit être
            simulé dans un module indépendant \\
\end{longtblr}
\endgroup
\end{document}

在此处输入图片描述

答案2

你不需要\makecell

\documentclass{article}
\usepackage{array}

\usepackage{tabularx} % for the second solution
\usepackage{booktabs} % for the third solution (with also tabularx)

\begin{document}

\begin{center}

\begin{tabular}{|>{\raggedright}p{4cm}|p{5cm}|>{\raggedright\arraybackslash}p{4cm}|}
\hline
\multicolumn{3}{|c|}{Title} \\
\hline
Programmation un simulateur complet du système &
  Oui/Non pour chaque item: \newline
  Corde \newline
  Actionneur d'entretien \newline
  Capteur (optique) \newline
  Conditionnement des signaux \newline
  Mesure de la fréquence \newline
  Méthode d'accord \newline
  Contrôleur d'accord &
  Chacun des éléments du système doit être simulé dans un module indépendant \\
\hline
\end{tabular}

\bigskip

% this has no overfull
\begin{tabularx}{\textwidth}{|>{\raggedright}X | c | >{\raggedright\arraybackslash}X|}
\hline
\multicolumn{3}{|c|}{Title} \\
\hline
Programmation un simulateur complet du système &
  \begin{tabular}[t]{@{}l@{}}
  Oui/Non pour chaque item: \\
  Corde \\
  Actionneur d'entretien \\
  Capteur (optique) \\
  Conditionnement des signaux \\
  Mesure de la fréquence \\
  Méthode d'accord \\
  Contrôleur d'accord
  \end{tabular} &
  Chacun des éléments du système doit être simulé dans un module indépendant \\
\hline
\end{tabularx}

\bigskip

\begin{tabularx}{\textwidth}{@{}>{\raggedright}X c >{\raggedright\arraybackslash}X@{}}
\toprule
\multicolumn{3}{c}{Title} \\
\midrule
Programmation un simulateur complet du système &
  \begin{tabular}[t]{@{}l@{}}
  Oui/Non pour chaque item: \\
  Corde \\
  Actionneur d'entretien \\
  Capteur (optique) \\
  Conditionnement des signaux \\
  Mesure de la fréquence \\
  Méthode d'accord \\
  Contrôleur d'accord
  \end{tabular} &
  Chacun des éléments du système doit être simulé dans un module indépendant \\
\bottomrule
\end{tabularx}

\end{center}

\end{document}

在此处输入图片描述

最后两个表格没有超出文本宽度。

相关内容