如何将两个水平对齐的表格环境设置为较大表格环境所需的宽度?

如何将两个水平对齐的表格环境设置为较大表格环境所需的宽度?

作为更大显示的一部分,我将两个表格环境放在一起,一个在另一个之上。这两个环境将出现在更大表格的一列中,我希望这两个环境具有相同的宽度。我宁愿不使用tabular*,因为我不想猜测宽度并随着内容的变化不断调整它。

我尝试将它们设置为单个tabular,但这样两列就太宽了,导致总数太宽,阅读起来不愉快。换句话说,它不会让两个表共享第一列,因为该列太宽,第一个表无法阅读。它们也不能共享第二列,因为第二个表实际上没有空间容纳该宽度的第二列。

然而,如果他们有相同的全部的宽度,一切都应该看起来不错。但我不知道如何找到总宽度,除了玩猜谜游戏tabular*和明确的宽度。

有没有办法改变以下 MWE,以便将第二个表格设置为第一个表格的宽度?(使用合适的\extracolsep)。

\documentclass{article}
\usepackage{booktabs}

\begin{document}
\thispagestyle{empty}
\begin{center} 

\begin{tabular}[t]{@{}l@{}}
\begin{tabular}{@{}ll@{}}
\multicolumn2{c}{(a) Names}\\[\medskipamount]
\toprule
$x, f$&Name of a variable (or function)\\
$X$& Name of a module\\
$K$& Name of a value constructor\\
$t$& Name of a type\\
$T$& Name of a module type\\
\bottomrule
\end{tabular}
\\
\begin{tabular}{@{}ll@{}}
\strut\\
\multicolumn2{c}{(b) Declarations in the theory}\\[\medskipamount]
\toprule
\mbox{(abstype $t$)}&$t :: *$ or $t :: * \mathrel @ \pi$\\
\mbox{(type $t$ $\tau$)}&$t = \tau$\\
\mbox{(val $x$ $\tau$)}&$x : \tau$\\
\bottomrule
\end{tabular}
\end{tabular}
\end{center}
\end{document}

两个表的示例

答案1

我将在外部(主要)中设置标题和规则,tabular并使用两个内部来tabular存储实际数据:

在此处输入图片描述

\documentclass{article}

\usepackage{booktabs}

\begin{document}

\begin{tabular}{@{} l @{}}
  \multicolumn{1}{@{} c @{}}{(a) Names} \\[\medskipamount]
  \toprule
  \begin{tabular}{@{} l l @{}}
    $x, f$ & Name of a variable (or function) \\
    $X$    & Name of a module                 \\
    $K$    & Name of a value constructor      \\
    $t$    & Name of a type                   \\
    $T$    & Name of a module type
  \end{tabular} \\
  \bottomrule \\[\dimexpr-\normalbaselineskip+\bigskipamount]
  \multicolumn{1}{@{} c @{}}{(b) Declarations in the theory} \\[\medskipamount]
  \toprule
  \begin{tabular}{@{} l l @{}}
    (abstype $t$)     & $t :: *$ or $t :: * \mathrel{@} \pi$ \\
    (type $t$ $\tau$) & $t = \tau$                           \\
    (val $x$ $\tau$)  & $x : \tau$
  \end{tabular} \\
  \bottomrule
\end{tabular}

\end{document}

答案2

修订版:在这里,没有 tabular*

我采用了 OP 的 MWE,并将较大宽度的tabular部分放在其自己的子部分中tabular,用来\multicolumn放置它。

\documentclass{article}
\usepackage{booktabs}

\begin{document}
\thispagestyle{empty}
\begin{center} 

\begin{tabular}[t]{@{}l@{}}
\begin{tabular}{@{}ll@{}}
\multicolumn2{c}{(a) Names}\\[\medskipamount]
\toprule
\multicolumn2{@{}c@{}}{\begin{tabular}{@{}ll@{}}
$x, f$&Name of a variable (or function)\\
$X$& Name of a module\\
$K$& Name of a value constructor\\
$t$& Name of a type\\
$T$& Name of a module type\\
\end{tabular}}\\
\bottomrule
\strut\\
\multicolumn2{c}{(b) Declarations in the theory}\\[\medskipamount]
\toprule
\mbox{(abstype $t$)}&$t :: *$ or $t :: * \mathrel @ \pi$\\
\mbox{(type $t$ $\tau$)}&$t = \tau$\\
\mbox{(val $x$ $\tau$)}&$x : \tau$\\
\bottomrule
\end{tabular}
\end{tabular}
\end{center}
\end{document}

在此处输入图片描述

答案3

使用嵌套表格:

在此处输入图片描述

\documentclass{article}
\usepackage{booktabs}

\begin{document}
\thispagestyle{empty}
\begin{center} 

\begin{tabular}{@{}ll@{}}
\multicolumn2{c}{(a) Names}\\[\medskipamount]
\toprule
$x, f$&Name of a variable (or function)\\
$X$& Name of a module\\
$K$& Name of a value constructor\\
$t$& Name of a type\\
$T$& Name of a module type\\
\bottomrule
\strut\\
\multicolumn2{c}{(b) Declarations in the theory}\\[\medskipamount]
\toprule
\multicolumn{2}{@{}l@{}}{\begin{tabular}{@{}ll@{}}
\mbox{(abstype $t$)}&$t :: *$ or $t :: * \mathrel @ \pi$\\
\mbox{(type $t$ $\tau$)}&$t = \tau$\\
\mbox{(val $x$ $\tau$)}&$x : \tau$\\
\end{tabular}}\\
\bottomrule
\end{tabular}
\end{center}
\end{document}

相关内容