vbox:可拆分对齐方程?在 vsplit 之后测量真实高度

vbox:可拆分对齐方程?在 vsplit 之后测量真实高度

我正在学习低级 tex 来编写我自己的自定义 *latex 宏。作为一个实验,我尝试将数学方程式(多行或非多行)放入\vbox/中\hbox,测量它们的尺寸,并尝试使用包的环境拆分里面的多行对齐方程式\vbox\vsplitamsmath拆分align的行为来看,似乎align环境返回一个hbox要放入周围的垂直列表中?如何让对齐的方程式进行拆分?我不在乎我们是使用align环境还是某些纯 tex 等效项,能够拆分对齐的数学方程式会很好。不幸的是,纯 tex 的\eqlign$$在 *latex 中不起作用,所以我没有测试它的作用(它是否返回包裹在\hbox, 中的多行方程式)。

另外两个观察结果(针对NOTE-num代码中的相应):1)NOTE-1如果我不设置*displayskip0pt,vsplit 的高度会比原始的高度短 10pt vbox,为什么测量结果会有这种差异?2)NOTE-2如果我不将\unvcopysplit 的内容放回到 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),而不是其中材料的高度。

无需注释 note1 和 note2 下面的代码

相关内容