我有一张这样的桌子:
\begin{tabular}[b]{c}
A \\
B \\
C \\
D \\
\end{tabular}E
上述代码将“D”和“E”放在同一基线上,无论字母的大小如何。
在不更改“E”的情况下(我无法更改此文本),我该如何调整表格,使得“C”和“E”位于同一基线上,无论字母大小如何?
答案1
假设没有\hline
,并且表格单元格具有“正常”大小,则这应该可以工作(设置\arraystretch
只是为了表明可以做到这一点):
\documentclass{article}
\newsavebox{\lowertabularbox}
\newenvironment{lowertabular}[1][0]
{\newcommand{\lowertabulararg}{#1}\begin{lrbox}{\lowertabularbox}
\begin{tabular}[b]}
{\end{tabular}\end{lrbox}%
\raisebox{-\dimexpr\arraystretch\baselineskip*\lowertabulararg\relax}{\usebox{\lowertabularbox}}}
\begin{document}
\renewcommand{\arraystretch}{1.4}
\begin{lowertabular}[0]{c}
A \\
B \\
C \\
D \\
\end{lowertabular}E
\begin{lowertabular}[1]{c}
A \\
B \\
C \\
D \\
\end{lowertabular}E
\begin{lowertabular}[2]{c}
A \\
B \\
C \\
D \\
\end{lowertabular}E
\begin{lowertabular}[3]{c}
A \\
B \\
C \\
D \\
\end{lowertabular}E
some text below to ensure that all is going well
\end{document}
答案2
一个更简单的解决方案是使用 TeX 命令。请记住,对于 TeX 来说,一切都是盒子。
\documentclass{article}
\begin{document}
\mbox{}\raise-6.0pt\hbox{
\begin{tabular}[c]{c}
A \\
B \\
C \\
D \\
\end{tabular}}E
\end{document}
答案3
这是使用 TikZ 节点在基线上定位的解决方案。在示例中,我们在第三行对齐。
\documentclass{article}
\usepackage{tikz}
\newcommand{\tikzmark}[2]{\tikz[overlay,remember picture,
baseline=(#1.base)] \node (#1) {#2};}
\begin{document}
\tikz[overlay,remember picture,baseline=(cell.base)]{
\node (table) {\begin{tabular}{c}
A \\
B \\
\tikzmark{cell}{C} \\
D \\
\end{tabular}};}
\quad text aligned with the third row
\end{document}
该宏\tikzmark
生成一个我们称为的节点cell
。整个表格已放入包含在 TikZ 环境中的节点中,并且我们定义此环境(包含表格)的基线应为该节点的基线。这样表格就获得了所需的基线,与以下文本的基线相匹配。
一旦有了这样的 TikZ 节点,它就会为你提供更多的可能性,例如绘制箭头或括号,或使用它进行进一步的对齐。看看突出显示矩阵中的元素看看我的意思。