storebox 在 begin{document} 之前无法像普通 savebox 那样工作

storebox 在 begin{document} 之前无法像普通 savebox 那样工作

可以使用storebox封装以节省空间。

例如,我期望这会起作用,因为它与 的使用类似savebox。然而,事实并非如此。需要将 移到\storebox{\foobox}{FOO}内部\begin{document}才能使用它。

\documentclass{article}

\usepackage{storebox}
\newstorebox{\foobox}

% moving this line inside begin{document} works
\storebox{\foobox}{FOO}

\begin{document}
 \usestorebox{\foobox}
\end{document}

现在,考虑一下

\documentclass{article}

\newsavebox{\foobox}
\savebox{\foobox}{FOO}
\begin{document}
 \usebox{\foobox}
\end{document}

该选项savebox有效。

那么,我该如何利用工作\storebox前呢?\begin{document}savebox

答案1

\begin{document}文档字体设置预计在处理时完成,其中包括\normalfont完成所有字体请求的声明。

正在做\savebox序言中保证字体与文档中的字体相匹配:一些字体包会延迟它们对 的操作\AtBeginDocument,这样它们就可以利用了解所有已加载的包的优势。 这同样适用于\storebox

如果你想在序言或包中使用,请尝试\savebox使用\storebox

\usepackage{etoolbox}
\usepackage{storebox}

\newstorebox{\foobox}

\AfterEndPreamble{%
  \storebox{\foobox}{whatever}%
}

或者如果只是文档代码,则直接执行。请注意,使用 延迟的代码\storebox{\foobox}{whatever}在任何使用 延迟的代码之后执行。您可以拥有任意数量的命令,它们的效果是累积的。\begin{document}\AfterEndPreamble\AtBeginDocument\AfterEndPreamble

相关内容