我试图找出一个自动答案两个不同项目中的方程式之间共享对齐通过{align}
在 a 内排版 an \vbox
,然后反复使用\unvbox
和\lastbox
来获取对齐的行。唉,这不起作用,正如此会话latex
所示:
>latex
**\relax
*\documentclass{article}\usepackage{amsmath}\begin{document}
*\setbox0=\vbox{\begin{align*} a&=b \end{align*}}
*\tracingonline=1
*\showbox0
> \box0= []
! OK.
<*> \showbox0
?
*
*\unvbox0
*\unskip
*\setbox1=\lastbox
*\showbox1
> \box1=void
! OK.
<*> \showbox1
?
怎么会没有什么在框里?TeX 不是排版了一些东西吗?这肯定是数学模式的事情,除了以下做工作:
> tex
**\relax
*\setbox0=\vbox{$$\eqalign{a&=b}$$}
*\tracingonline=1
*\showbox0
> \box0=
\vbox(22.5+0.0)x469.75499
.\hbox(0.0+0.0)x469.75499, glue set 449.75499fil
..\hbox(0.0+0.0)x20.0
..\penalty 10000
..\glue(\parfillskip) 0.0 plus 1.0fil
..\glue(\rightskip) 0.0
.\penalty 10000
.\glue(\abovedisplayshortskip) 0.0 plus 3.0
.\glue(\baselineskip) 3.5
.\hbox(8.5+3.5)x26.24402, shifted 221.7555
..\hbox(0.0+0.0)x0.0
..\glue 1.66663
..\vbox(8.5+3.5)x22.91077
...\hbox(8.5+3.5)x22.91077 []
..\glue 1.66663
.etc.
! OK.
<*> \showbox0
?
*
(在某种程度上\eqalign
是 TeX 版本的{align}
)。也许 AMS 环境所做的更多是 TikZ 文档中提到的“邪恶的事情”,但我不明白它们如何欺骗 TeX 本身认为该框是空的。我确实注意到,即使在示例中\eqalign
,对齐的最内层框也是\hbox(8.5+3.5)x22.91077 []
;根据尺寸\hbox(0.0+0.0)x469.75499, glue set 449.75499fil
,这是文本(即a = b
),但空括号表示框内没有任何东西。所以也许这毕竟是数学模式的事情,而 AMS 的邪恶之处只是隐藏了周围的材料?
那么,有没有什么办法可以解开{align}
?
答案1
列宽align
保存在\maxcolumn@widths
第一次传递环境内容后设置的宏中:在你的情况下
> \maxcolumn@widths=macro:
-> \or 5.28589pt \or 17.62488pt \or 0.0pt.
可以使用 访问这些值\ifcase
。当然,需要“导出”宏,这可以通过在任意单元格中输入
\ifmeasuring@
\global\let\lastmaxcolumn@width\maxcolumn@widths
\fi
(也许可以将其添加到代码中\end{align*}
,但我不确定)。
答案2
事实证明,我所问的主要问题是误解的结果:如果你设置得\showboxdepth
足够大,那么所有内容都会按预期显示。没有空框。
至于解开:大概和的{align}
某种组合会揭示实际的行列表,之后\unskip
\unpenalty
\lastbox
可以了。请参阅我的第二个回答两个不同项目中的方程式之间共享对齐这是它的简易版本。