我正在学习低级 tex 来编写我自己的自定义 *latex 宏。作为一个实验,我尝试将数学方程式(多行或非多行)放入\vbox
/中\hbox
,测量它们的尺寸,并尝试使用包的环境拆分里面的多行对齐方程式\vbox
。\vsplit
从amsmath
拆分align
的行为来看,似乎align
环境返回一个hbox
要放入周围的垂直列表中?如何让对齐的方程式进行拆分?我不在乎我们是使用align
环境还是某些纯 tex 等效项,能够拆分对齐的数学方程式会很好。不幸的是,纯 tex 的\eqlign
和$$
在 *latex 中不起作用,所以我没有测试它的作用(它是否返回包裹在\hbox
, 中的多行方程式)。
另外两个观察结果(针对NOTE-num
代码中的相应):1)NOTE-1
如果我不设置*displayskip
为0pt
,vsplit 的高度会比原始的高度短 10pt vbox
,为什么测量结果会有这种差异?2)NOTE-2
如果我不将\unvcopy
split 的内容放回到 split 中,则报告的 split 高度为 12pt(=1\baselineskip),而不是原始内容的高度。这是预期的行为吗?我是否总是需要在 split 之后立即执行此操作以使其报告正确的内容高度?
这是我的代码(使用 运行>> lualatex test.tex
):
% lualatex test.tex
\documentclass[notitlepage,letterpaper]{article}
\usepackage[paper=letterpaper,left=1in,right=1in,top=1in,bottom=1in]{geometry}
\usepackage{lua-visual-debug}
\usepackage{fontspec}
\usepackage{amsmath}
\usepackage{color}
% NOTE-1: If I comment this, then there is a 10pt difference in height of split, and height of vbox contaning same math
\makeatletter
\g@addto@macro\normalsize{%
\setlength\abovedisplayskip{0pt}
\setlength\belowdisplayskip{0pt}
\setlength\abovedisplayshortskip{0pt}
\setlength\belowdisplayshortskip{0pt}
}
\makeatother
\begin{document}
\newcommand{\myformula}{%
\begin{align*}%
x^2+y^2 &= z^2\\%
a^2+b^2+1 &= c^3\\%
\end{align*}%
}
********* test math in vbox ************\\
\newbox\mymathvbox
\global\setbox\mymathvbox=\vbox{{\myformula\endgraf}}
mymathvbox dimen: ht \the\ht\mymathvbox, dp \the\dp\mymathvbox.
\copy\mymathvbox
mymathvbox dimen: ht \the\ht\mymathvbox, dp \the\dp\mymathvbox\\
********** test math in hbox ***********\\
\newbox\mymathhbox
\setbox\mymathhbox=\hbox{\copy\mymathvbox}
mymathhbox dimen: ht \the\ht\mymathhbox, dp \the\dp\mymathhbox
\copy\mymathhbox
mymathhbox dimen: ht \the\ht\mymathhbox, dp \the\dp\mymathhbox\\
************ test vbox split *********\\
\newbox\mymathvboxsplit
\setbox\mymathvboxsplit=\vsplit\mymathvbox to 1\baselineskip
% NOTE-2: If I comment the following line, then reported ht of split is 12pt (=1\baselineskip)
\setbox\mymathvboxsplit=\vbox{\unvcopy\mymathvboxsplit}
mymathvbox dimen: ht \the\ht\mymathvbox, dp \the\dp\mymathvbox; mymathvboxsplit dimen: ht \the\ht\mymathvboxsplit, dp \the\dp\mymathvboxsplit
\copy\mymathvbox
\copy\mymathvboxsplit
mymathvbox dimen: ht \the\ht\mymathvbox, dp \the\dp\mymathvbox; mymathvboxsplit dimen: ht \the\ht\mymathvboxsplit, dp \the\dp\mymathvboxsplit
\end{document}
NOTE-1
未注释和中提到的代码的屏幕截图NOTE-2
:注释下面的代码NOTE-1
将显示 mymathvbox 和 mymathvboxsplit 的尺寸有 10pt 的差异。然后注释下面的行将NOTE-2
显示 mymathvboxsplit 内容的高度更改为 split 中指定的大小(12pt),而不是其中材料的高度。