正如标题所说,我正在使用“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}