将表格单元格与周围文本的基线垂直对齐

将表格单元格与周围文本的基线垂直对齐

我有一张这样的桌子:

\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 节点,它就会为你提供更多的可能性,例如绘制箭头或括号,或使用它进行进一步的对齐。看看突出显示矩阵中的元素看看我的意思。

相关内容