在文档中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}
我们应该能够从中了解到一些信息:
您正在指定一个锚点,实际上并不是相对于其他单元格的垂直对齐。
锚点与
\makecell
所讨论的单元格相关,而不是与同一行内的其他单元格相关。您只能指定一每个单元的锚点。
在您的示例中,您实际上想要与列进行多重对齐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}