禁忌环境中的列宽和行高

禁忌环境中的列宽和行高

正如标题所说,我正在使用“tabu”,并且我对单元格宽度和高度有 2 个问题。

1) 宽度:下面的第一个示例不需要任何宽度规范。第二个示例即使有宽度规范也超出了页面宽度。第三个示例符合宽度规范。你能告诉我第二个示例有什么问题吗,因为它与第三个示例的原理相同?

2) 高度:这是关于表格的一个经典问题,正如您在第二个和第三个示例中看到的接触指数的线。但是,我不想设置任意长度,例如几个 pt 的规则。我宁愿计算文本的高度并添加精确的额外高度(类似于 egreg 在禁忌环境中的 hline 太低)。我怎样才能对每个表中的每一行执行此操作?

代码如下:

\documentclass[12pt,a4paper]{book}
\everymath{\displaystyle}
\usepackage[T1]{fontenc}
\usepackage{framed}
\usepackage[utf8]{inputenc}
\usepackage[fleqn]{mathtools}
\mathtoolsset{showonlyrefs}
\usepackage{tabu}

\begin{document}

\begin{minipage}{\textwidth}
\begin{framed}
Example 1 :
\begin{center}
\everyrow{\tabucline-}
\begin{tabu}{|*7{X[-1,c,m]|}}
$km$ & $hm$ & $dam$ & $m$ & $dm$ & $cm$ & $mm$\\
& & $1.$ & $2$ & $3$ & &\\
& & $1$ & $2$ & $3$ & &\\
& $0.$ & $1$ & $2$ & $3$ & &\\
\end{tabu}
\end{center}
\begin{equation}
\begin{split}
&1.23\ dam=123\ dm\\
&1.23\ dam=0.123\ hm
\end{split}
\end{equation}
\end{framed}
\end{minipage}

\begin{minipage}{\textwidth}
\begin{framed}
Example 2 :
\begin{center}
\everyrow{\tabucline-}
\begin{tabu}to\dimexpr\textwidth-2\fboxrule-2\fboxsep{|*{14}{X[-1,c,m]|}}
\multicolumn{2}{|c|}{$km^2$} & \multicolumn{2}{c|}{$hm^2$} & \multicolumn{2}{c|}{$dam^2$} & \multicolumn{2}{c|}{$m^2$} & \multicolumn{2}{c|}{$dm^2$} & \multicolumn{2}{c|}{$cm^2$} & \multicolumn{2}{c|}{$mm^2$}\\
& & & & & $1.$ & $2$ & $3$ & & & & & &\\
& & & & & $1$ & $2$ & $3$ & $0$ & $0$ & & & &\\
& & & $0.$ & $0$ & $1$ & $2$ & $3$ & & & & & &\\
\end{tabu}
\end{center}
\begin{equation}
\begin{split}
&1.23\ dam^2=12300\ dm^2\\
&1.23\ dam^2=0.0123\ hm^2
\end{split}
\end{equation}
\end{framed}
\end{minipage}

\begin{minipage}{\textwidth}
\begin{framed}
Example 3 :
\begin{center}
\everyrow{\tabucline-}
\begin{tabu}to\dimexpr\textwidth-2\fboxrule-2\fboxsep{|*{21}{X[-1,c,m]|}}
\multicolumn{3}{|c|}{$km^3$} & \multicolumn{3}{c|}{$hm^3$} & \multicolumn{3}{c|}{$dam^3$} & \multicolumn{3}{c|}{$m^3$} & \multicolumn{3}{c|}{$dm^3$} & \multicolumn{3}{c|}{$cm^3$} & \multicolumn{3}{c|}{$mm^3$}\\
& & & & & & & & $1.$ & $2$ & $3$ & & & & & & & & & &\\
& & & & & & & & $1$ & $2$ & $3$ & $0$ & $0$ & $0$ & $0$ & & & & & &\\
& & & & & $0.$ & $0$ & $0$ & $1$ & $2$ & $3$ & & & & & & & & & &\\
\end{tabu}
\end{center}
\begin{equation}
\begin{split}
&1.23\ dam^3=1230000\ dm^3\\
&1.23\ dam^3=0.00123\ hm^3
\end{split}
\end{equation}
\end{framed}
\end{minipage}

\end{document}

结果如下:

在此处输入图片描述

提前感谢您的回答。

答案1

由于tabu该包已过时且无人维护,我将首先使用新的 LaTeX3 包重写上述示例tabularray,然后进行一些测试并加以解释。

tabularray由于具有默认值,因此高度问题自然得到解决。当有多列单元格时,宽度问题与具有负系数的列rowsep有关。X


第一次测试

我添加了\SetTblrTracing{+target}代码来记录X列的宽度计算。

\documentclass[12pt,a4paper]{book}

\everymath{\displaystyle}
\usepackage{framed}
\usepackage[fleqn]{mathtools}
\mathtoolsset{showonlyrefs}
\usepackage{tabularray}
\SetTblrTracing{+target}

\begin{document}

\begin{minipage}{\textwidth}
\begin{framed}
Example 1 :
\begin{center}
\begin{tblr}{
  colspec = {|*7{X[-1,c,m]|}},
  hlines,
}
$km$ & $hm$ & $dam$ & $m$ & $dm$ & $cm$ & $mm$ \\
     &      & $1.$  & $2$ & $3$  &      &      \\
     &      & $1$   & $2$ & $3$  &      &      \\
     & $0.$ & $1$   & $2$ & $3$  &      &      \\
\end{tblr}
\end{center}
\begin{equation}
\begin{split}
&1.23\ dam=123\ dm\\
&1.23\ dam=0.123\ hm
\end{split}
\end{equation}
\end{framed}
\end{minipage}

\begin{minipage}{\textwidth}
\begin{framed}
Example 2 :
\begin{center}
\begin{tblr}{
  colspec = {|*{14}{X[-1,c,m]|}},
  hlines,
  cell{1}{odd} = {c=2}{c}, % multicolumn
}
$km^2$ & & $hm^2$ &      & $dam^2$ &      & $m^2$ &     & $dm^2$ &     & $cm^2$ & & $mm^2$ & \\
       & &        &      &         & $1.$ & $2$   & $3$ &        &     &        & &        & \\
       & &        &      &         & $1$  & $2$   & $3$ & $0$    & $0$ &        & &        & \\
       & &        & $0.$ & $0$     & $1$  & $2$   & $3$ &        &     &        & &        & \\
\end{tblr}
\end{center}
\begin{equation}
\begin{split}
&1.23\ dam^2=12300\ dm^2\\
&1.23\ dam^2=0.0123\ hm^2
\end{split}
\end{equation}
\end{framed}
\end{minipage}

\begin{minipage}{\textwidth}
\begin{framed}
Example 3 :
\begin{center}
\begin{tblr}{
  colspec={|*{21}{X[-1,c,m]|}},
  hlines,
  cell{1}{1,4,7,10,13,16,19} = {c=3}{c}, % multicolumn
}
$km^3$ & & & $hm^3$ & &      & $dam^3$ &     &      & $m^3$ &     &     & $dm^3$ &     &     & $cm^3$ & & & $mm^3$ & & \\
       & & &        & &      &         &     & $1.$ & $2$   & $3$ &     &        &     &     &        & & &        & & \\
       & & &        & &      &         &     & $1$  & $2$   & $3$ & $0$ & $0$    & $0$ & $0$ &        & & &        & & \\
       & & &        & & $0.$ & $0$     & $0$ & $1$  & $2$   & $3$ &     &        &     &     &        & & &        & & \\
\end{tblr}
\end{center}
\begin{equation}
\begin{split}
&1.23\ dam^3=1230000\ dm^3\\
&1.23\ dam^3=0.00123\ hm^3
\end{split}
\end{equation}
\end{framed}
\end{minipage}

\end{document}

在此处输入图片描述

第二张表的跟踪日志显示以下内容:

The property list \l__column_natural_width_prop contains the pairs (without outer braces):
>  {1}  =>  {0pt}
>  {2}  =>  {0pt}
>  {3}  =>  {0pt}
>  {4}  =>  {9.1388pt}
>  {5}  =>  {5.87494pt}
>  {6}  =>  {9.1388pt}
>  {7}  =>  {5.87494pt}
>  {8}  =>  {5.87494pt}
>  {9}  =>  {5.87494pt}
>  {10}  =>  {5.87494pt}
>  {11}  =>  {0pt}
>  {12}  =>  {0pt}
>  {13}  =>  {0pt}
>  {14}  =>  {0pt}.
The property list \l__column_computed_width_prop contains the pairs (without outer braces):
>  {1}  =>  {0.0pt}
>  {2}  =>  {0.0pt}
>  {3}  =>  {0.0pt}
>  {4}  =>  {37.8192pt}
>  {5}  =>  {24.31235pt}
>  {6}  =>  {37.8192pt}
>  {7}  =>  {24.31235pt}
>  {8}  =>  {24.31235pt}
>  {9}  =>  {24.31235pt}
>  {10}  =>  {24.31235pt}
>  {11}  =>  {0.0pt}
>  {12}  =>  {0.0pt}
>  {13}  =>  {0.0pt}
>  {14}  =>  {0.0pt}.

Tabu并且tabularray在计算宽度时不考虑多列单元格的宽度X。当所有列都有负系数且单元格较窄时,额外的空间将按其自然宽度的比例分配。

现在,第 1 列和第 2 列合并后的单元格宽度为12.4pt(2 colsep + 1 rulewidth),不足以容纳$km^2$。因此 TeX (或包) 扩展了第 2 列的宽度并使整个表格更宽。单元格和 也tabularray一样。$cm^2$$mm^2$

相反,在示例 3 中,第 1、2、3 列的合并单元格的宽度为24.8pt(4 colsep + 2 rulewidth),足以容纳$km^2$。因此表格的宽度是正确的。

并且在示例 1 中,没有合并单元格,并且所有列的自然宽度都为0pt,因此所有列都获得了足够的空间。


第二次测试

由于tabularray有一个选项hspan=minimal可以禁止多列单元格的扩展,我们在第二个测试中加入了它,这样你就可以看到X列的真实宽度:

\documentclass[12pt,a4paper]{book}

\everymath{\displaystyle}
\usepackage{framed}
\usepackage[fleqn]{mathtools}
\mathtoolsset{showonlyrefs}
\usepackage{tabularray}
%\SetTblrTracing{+target}

\begin{document}

\begin{minipage}{\textwidth}
\begin{framed}
Example 1 :
\begin{center}
\begin{tblr}{
  colspec = {|*7{X[-1,c,m]|}},
  hlines,
}
$km$ & $hm$ & $dam$ & $m$ & $dm$ & $cm$ & $mm$ \\
     &      & $1.$  & $2$ & $3$  &      &      \\
     &      & $1$   & $2$ & $3$  &      &      \\
     & $0.$ & $1$   & $2$ & $3$  &      &      \\
\end{tblr}
\end{center}
\begin{equation}
\begin{split}
&1.23\ dam=123\ dm\\
&1.23\ dam=0.123\ hm
\end{split}
\end{equation}
\end{framed}
\end{minipage}

\begin{minipage}{\textwidth}
\begin{framed}
Example 2 :
\begin{center}
\begin{tblr}{
  colspec = {|*{14}{X[-1,c,m]|}},
  hlines,
  cell{1}{odd} = {c=2}{c}, % multicolumn
  hspan = minimal,
}
$km^2$ & & $hm^2$ &      & $dam^2$ &      & $m^2$ &     & $dm^2$ &     & $cm^2$ & & $mm^2$ & \\
       & &        &      &         & $1.$ & $2$   & $3$ &        &     &        & &        & \\
       & &        &      &         & $1$  & $2$   & $3$ & $0$    & $0$ &        & &        & \\
       & &        & $0.$ & $0$     & $1$  & $2$   & $3$ &        &     &        & &        & \\
\end{tblr}
\end{center}
\begin{equation}
\begin{split}
&1.23\ dam^2=12300\ dm^2\\
&1.23\ dam^2=0.0123\ hm^2
\end{split}
\end{equation}
\end{framed}
\end{minipage}

\begin{minipage}{\textwidth}
\begin{framed}
Example 3 :
\begin{center}
\begin{tblr}{
  colspec={|*{21}{X[-1,c,m]|}},
  hlines,
  cell{1}{1,4,7,10,13,16,19} = {c=3}{c}, % multicolumn
  hspan = minimal,
}
$km^3$ & & & $hm^3$ & &      & $dam^3$ &     &      & $m^3$ &     &     & $dm^3$ &     &     & $cm^3$ & & & $mm^3$ & & \\
       & & &        & &      &         &     & $1.$ & $2$   & $3$ &     &        &     &     &        & & &        & & \\
       & & &        & &      &         &     & $1$  & $2$   & $3$ & $0$ & $0$    & $0$ & $0$ &        & & &        & & \\
       & & &        & & $0.$ & $0$     & $0$ & $1$  & $2$   & $3$ &     &        &     &     &        & & &        & & \\
\end{tblr}
\end{center}
\begin{equation}
\begin{split}
&1.23\ dam^3=1230000\ dm^3\\
&1.23\ dam^3=0.00123\ hm^3
\end{split}
\end{equation}
\end{framed}
\end{minipage}

\end{document}

在此处输入图片描述


第三次测试

现在我们知道了额外宽度的真正问题。我们自然而然地有了解决方案:在合并单元格$km^2$$cm^2$和下方的单元格中添加一些空间$mm^2$

\documentclass[12pt,a4paper]{book}

\everymath{\displaystyle}
\usepackage{framed}
\usepackage[fleqn]{mathtools}
\mathtoolsset{showonlyrefs}
\usepackage{tabularray}
%\SetTblrTracing{+target}

\begin{document}

\begin{minipage}{\textwidth}
\begin{framed}
Example 1 :
\begin{center}
\begin{tblr}{
  colspec = {|*7{X[-1,c,m]|}},
  hlines,
}
$km$ & $hm$ & $dam$ & $m$ & $dm$ & $cm$ & $mm$ \\
     &      & $1.$  & $2$ & $3$  &      &      \\
     &      & $1$   & $2$ & $3$  &      &      \\
     & $0.$ & $1$   & $2$ & $3$  &      &      \\
\end{tblr}
\end{center}
\begin{equation}
\begin{split}
&1.23\ dam=123\ dm\\
&1.23\ dam=0.123\ hm
\end{split}
\end{equation}
\end{framed}
\end{minipage}

\begin{minipage}{\textwidth}
\begin{framed}
Example 2 :
\begin{center}
\begin{tblr}{
  colspec = {|*{14}{X[-1,c,m]|}},
  hlines,
  cell{1}{odd} = {c=2}{c}, % multicolumn
  hspan = minimal,
}
$km^2$ &    & $hm^2$ &      & $dam^2$ &      & $m^2$ &     & $dm^2$ &     & $cm^2$ &    & $mm^2$ &    \\
 \;    & \; &        &      &         & $1.$ & $2$   & $3$ &        &     &  \;    & \; &  \;    & \; \\
       &    &        &      &         & $1$  & $2$   & $3$ & $0$    & $0$ &        &    &        &    \\
       &    &        & $0.$ & $0$     & $1$  & $2$   & $3$ &        &     &        &    &        &    \\
\end{tblr}
\end{center}
\begin{equation}
\begin{split}
&1.23\ dam^2=12300\ dm^2\\
&1.23\ dam^2=0.0123\ hm^2
\end{split}
\end{equation}
\end{framed}
\end{minipage}

\begin{minipage}{\textwidth}
\begin{framed}
Example 3 :
\begin{center}
\begin{tblr}{
  colspec={|*{21}{X[-1,c,m]|}},
  hlines,
  cell{1}{1,4,7,10,13,16,19} = {c=3}{c}, % multicolumn
  hspan = minimal,
}
$km^3$ & & & $hm^3$ & &      & $dam^3$ &     &      & $m^3$ &     &     & $dm^3$ &     &     & $cm^3$ & & & $mm^3$ & & \\
       & & &        & &      &         &     & $1.$ & $2$   & $3$ &     &        &     &     &        & & &        & & \\
       & & &        & &      &         &     & $1$  & $2$   & $3$ & $0$ & $0$    & $0$ & $0$ &        & & &        & & \\
       & & &        & & $0.$ & $0$     & $0$ & $1$  & $2$   & $3$ &     &        &     &     &        & & &        & & \\
\end{tblr}
\end{center}
\begin{equation}
\begin{split}
&1.23\ dam^3=1230000\ dm^3\\
&1.23\ dam^3=0.00123\ hm^3
\end{split}
\end{equation}
\end{framed}
\end{minipage}

\end{document}

在此处输入图片描述

相关内容