如何将 amsmath 方程式置于页面顶部而忽略 \topskip?

如何将 amsmath 方程式置于页面顶部而忽略 \topskip?

我需要将每个 amsmath 方程式放在页面顶部。所以我习惯\noindent这样做。除了 equation+split 环境之外,一切都很好。然后公式被放置得稍微高一点(比\vskip-\lineskiplimitasmmath.sty 宏高(-3pt)\@display@init。align+split 没问题。胶水是可丢弃物品,但它在盒子里,所以不会被丢弃。

....\glue(\topskip) 0.0
....\hbox(21.00012+16.0001)x430.00462, direction TLT
.....\vbox(21.00012+16.0001)x430.00462, direction TLT
......\glue -3.0
......\glue 0.0

梅威瑟:

\documentclass{article}
\usepackage[showframe,paperwidth=10cm,paperheight=5cm]{geometry}
\usepackage{amsmath}

\begin{document}

\noindent
\[
\begin{split}
\left(a^{B^{B^{B}}}\right)
\\
bb
\end{split}
\]

\clearpage
\noindent
\begin{align}
\begin{split}
\left(a^{B^{B^{B}}}\right)
\\
bb
\end{split}
\end{align}

\end{document}

结果: 在此处输入图片描述

问题:

  1. 有没有办法测试我是否在页面顶部?然后我就可以解决这个问题\vskip。我试过领导者,但这非常棘手。
  2. 还有其他方法可以强制放置公式吗\topskip

答案1

问题是

\noindent

\begin{align}

那里有一个段落分隔符。删除空白行。页面顶部的空间不会被删除,因为它不是垂直空间,而是一行空白段落。

等式前有空行:

在此处输入图片描述

无空行:

在此处输入图片描述

修正版本并添加

\showoutput
\showboxdepth5

日志(像你一样使用 lualatex)显示

....\glue(\topskip) 0.0
....\hbox(22.50012+17.5001)x199.16841, direction TLT
.....\glue(\tabskip) 80.22015
.....\hbox(22.50012+17.5001)x0.0, direction TLT []

显示对齐之前页面上没有任何内容。

答案2

使用领导者来测试我是否在页面顶部是否安全?专家们怎么看?之前我尝试检查\pagegoal\maxdimen\pagetotal,但效果不是 100%。

\documentclass{article}
\usepackage[showframe,paperwidth=10cm,paperheight=5cm]{geometry}
\usepackage{amsmath}
\usepackage{etoolbox}

\makeatletter
%% leaders should be discarded at top of new page
\newif\if@top@of@page\@top@of@pagefalse
  \def\check@top@of{%
    \ifmmode
    \else
      \@top@of@pagetrue
      \ifvmode
        \cleaders\vbox to \z@{\@top@of@pagefalse}\vskip\z@
      \else
        \cleaders\vbox to \z@{\@top@of@pagefalse}\hskip\z@
      \fi
    \fi
    }
%% Passing check to equations
\preto\equation{\check@top@of}
\expandafter\preto\csname equation*\endcsname{\check@top@of}

\def\@display@init#1{%
    \global\dt@ptrue \spread@equation
    \everycr{%
        \noalign{%
            #1%
            \ifdt@p
                \global\dt@pfalse
                %% No negative skip if equation is on a top of the page
                \if@top@of@page
                \else
                  \vskip-\lineskiplimit
                  \vskip\normallineskiplimit
                \fi
            \else
                \penalty\@eqpen \global\dspbrk@lvl\m@ne
            \fi
        }%
    }%
  }
%% don't add \topskip for equation 
\appto\mathdisplay@push{\noindent}
\makeatother


\begin{document}
\[
\begin{split}
\left(a^{B^{B^{B}}}\right)
\\
bb
\end{split}
\]

\clearpage
\noindent
\begin{align}
\begin{split}
\left(a^{B^{B^{B}}}\right)
\\
bb
\end{split}
\end{align}

\end{document}

我已经用此代码解决了我的问题,因此我将其写为答案。

相关内容