amsmath、atbegshi 和 texpower 包之间发生冲突吗?

amsmath、atbegshi 和 texpower 包之间发生冲突吗?

考虑这个文档:

\documentclass{article}
\usepackage{amsmath}
\usepackage{texpower}
\usepackage{picture}
\usepackage{atbegshi}
\setbox0\hbox{\textbf{TEXT}}
\AtBeginShipout{%
\AtBeginShipoutUpperLeft{%
\put(0,-\ht0){\usebox0}
}}
\begin{document}
This is a test
\end{document}

TEXT出现在页面左上角。但是,只要您使用align环境amsmath,就会TEXT消失:

\documentclass{article}
\usepackage{amsmath}
\usepackage{texpower}
\usepackage{picture}
\usepackage{atbegshi}
\setbox0\hbox{\textbf{TEXT}}
\AtBeginShipout{%
\AtBeginShipoutUpperLeft{%
\put(0,-\ht0){\usebox0}
}}
\begin{document}
This is a test
\begin{align}
x&=1+2\\
&=2+1
\end{align}
\end{document}

怎么了?

答案1

无需任何包即可显示该行为。

考虑这个 Plain TeX 示例:

\setbox0=\hbox{Hello} % the same as \sbox0{Hello}
\copy0 % the same as \usebox0
{\box0}
\copy0
\bye

一旦\box0执行,最新的化身就会被销毁,因此你只能看到即使\box0是在组中执行,“Hello” 也会有多个副本。

确实,它amsmath不能以非常连贯的方式管理临时框,但是临时寄存器应该在定义后立即使用,而不是拖延到将来。

\documentclass{article}
\usepackage{amsmath}
\usepackage{texpower}
\usepackage{picture}
\usepackage{atbegshi}

\newsavebox\vafabox
\sbox\vafabox{\textbf{TEXT}}
\AtBeginShipout{%
  \AtBeginShipoutUpperLeft{%
    \put(0,-\ht\vafabox){\usebox\vafabox}%
}}
\begin{document}
This is a test
\end{document}

相关内容