\makecell align 不起作用?

\makecell align 不起作用?

在文档中makecell 包\makecell[t]{..}在第 1.1 节中,它指出可以使用和将文本水平对齐到顶部或底部\makecell[b]{..}。我尝试使用

\documentclass{article}
\usepackage{makecell}


\begin{document}
\begin{center}
\begin{tabular}{  l | l l l}

 & Leistung & Stunden & Preis \\
\hline
1. Webdesign &  \makecell[l]{asdads asd asd ada dadadas dasdas d
 \\ asdada sdasdasdasd \\ sdads asd asd ada dadadas dasdas d
 \\ asdada sdasdasdasd \\ sdads asd asd ada dadadas dasdas 
 d \\ asdada sdasdasdasd} 
 & \makecell[t]{Should be top} & \makecell[b]{6Should be bottom}  \\

\end{tabular}
\end{center}

\end{document}

但它不起作用。没有发生水平对齐。为什么?结果如下:

在此处输入图片描述

答案1

您对垂直的对齐规范不正确。使用[t]操作对齐只会设置t将该特定单元格的点对齐到单元格内容的第一行的基线。类似地,[b]底部对齐设置指向底线b/最后一行的基线。这并不意味着单元格内容将被向下/向上推以与周围单元格对齐。因此

\makecell[t]{%
  one \\% This will be the anchor point
  two \\
  three
}

尽管

\makecell{%
  one \\
  two \\% This will be the anchor point
  three
}

\makecell[b]{%
  one \\
  two \\
  three% This will be the anchor point
}

在这里我突出显示了锚点以显示它们如何垂直对齐:

在此处输入图片描述

\documentclass{article}

\usepackage{makecell}

\begin{document}

\begin{tabular}{ *{3}{c} }
  \makecell[t]{one \\ two \\ three} &
  \makecell   {one \\ two \\ three} &
  \makecell[b]{one \\ two \\ three}
\end{tabular}

\end{document}

我们应该能够从中了解到一些信息:

  1. 您正在指定一个点,实际上并不是相对于其他单元格的垂直对齐。

  2. 锚点与\makecell所讨论的单元格相关,而不是与同一行内的其他单元格相关。

  3. 您只能指定每个单元的锚点。

在您的示例中,您实际上想要与列进行多重对齐Leistung[t]op 相对于Stunden[b]ottom 相对于Preis),并且列的对齐方式Studen没有Preis偏好,因为它们只有一行;也就是说,它们的垂直只是他们所在的线路。

考虑到您的设置,您可以使用框上下移动内容:

在此处输入图片描述

\documentclass{article}

\usepackage{makecell}

\begin{document}

\newsavebox{\cellbox}
\savebox{\cellbox}{%
  \makecell[l]{%
    asdads asd asd ada dadadas dasdas d \\
    asdada sdasdasdasd \\
    sdads asd asd ada dadadas dasdas d \\
    asdada sdasdasdasd \\
    sdads asd asd ada dadadas dasdas d \\
    asdada sdasdasdasd}
}%
\begin{tabular}{ l | l l l }
  \hline
  1. Webdesign &
    \usebox{\cellbox} &
    \raisebox{\dimexpr\ht\cellbox-\height}{\makecell{Should be top}} &
    \raisebox{\dimexpr-.5\ht\cellbox-.5\dp\cellbox+.5\normalbaselineskip}{\makecell{Should be bottom}}
\end{tabular}

\end{document}

请注意,所有单元格的锚点仍然保留在每个单元格的中间(垂直)。

答案2

解决方法是添加空行。我利用这个机会给单元格添加了一些填充\makegapedcells

\documentclass{article}
\usepackage{makecell}

\begin{document}

\begin{center}
\setcellgapes{3pt}\makegapedcells
\begin{tabular}{ l | l l l}
 & Leistung & Stunden & Preis \\
\hline
1. Webdesign & \makecell[l]{asdads asd asd ada dadadas dasdas d
 \\ asdada sdasdasdasd \\ sdads asd asd ada dadadas dasdas d
 \\ asdada sdasdasdasd \\ sdads asd asd ada dadadas dasdas
 d \\ asdada sdasdasdasd}
 & \makecell{Should be top\\\\\\\\\\\\} & \makecell{\\\\\\\\\\6Should be bottom} \\
\end{tabular}
\end{center}

\end{document} 

在此处输入图片描述

答案3

看下面的例子,两个对齐标签已经起作用了[t][b]但只有当你添加更多行文本并且对齐是相对于第一列时才有效。这是因为你没有makecell在第二列的大单元格中提供标签,所以它默认垂直居中。

\documentclass{article}
\usepackage{makecell}    

\begin{document}
\begin{center}
\begin{tabular}{  l | l l l}
 & Leistung & Stunden & Preis \\
\hline
1. Webdesign &  \makecell[l]{asdads asd asd ada dadadas dasdas d
 \\ asdada sdasdasdasd \\ sdads asd asd ada dadadas dasdas d
 \\ asdada sdasdasdasd \\ sdads asd asd ada dadadas dasdas 
 d \\ asdada sdasdasdasd} 
 & \makecell[t]{Should be top\\and is really top} & \makecell[b]{6Should be bottom\\and is still bottom}  \\
\end{tabular}
\end{center}

\end{document}

在此处输入图片描述

相关内容