\sbox & \savebox
Синопсис, один из:
\sbox{box-cmd}{text}
\savebox{box-cmd}{text}
\savebox{box-cmd}[width]{text}
\savebox{box-cmd}[width][pos]{text}
Форматирует текст так же, как и \makebox (см. \mbox & \makebox), за исключением того, что LaTeX не выводит его, а вместо этого сохраняет его в регистре ячеек, на который ссылается переменная с именем box-cmd. Имя переменной box-cmd начинается с обратной косой черты, \. Вы должны были предварительно выделить регистр ячейки box-cmd с помощью \newsavebox (см. \newsavebox). Команда \sbox является надёжной, в то время как \savebox является хрупкой (см. \protect).
Это создаёт и использует регистр ячеек.
\newsavebox{\fullname}
\sbox{\fullname}{John Jacob Jingleheimer Schmidt}
...
\usebox{\fullname}! His name is my name, too!
Whenever we go out, the people always shout!
There goes \usebox{\fullname}! Ya da da da da da da.
Одно из преимуществ использования и повторного использования регистра ячеек по сравнению с переменной макроса \newcommand заключается в эффективности, поскольку LaTeX не должен многократно переформатировать содержимое. См. пример ниже.
Первые два вызова команд, \sbox{box-cmd}{text} и \savebox{box-cmd}{text}, примерно эквивалентны. Что касается третьей и четвёртой, необязательные аргументы позволяют указать ширину ячейки как width и положение текста внутри этой ячейки как position. См. \mbox & \makebox, для полного описания.
В командах \sbox и \savebox текст форматируется в режиме LR, поэтому он не имеет переносов строк (см. Режимы). Если вы их используете, LaTeX не выдаёт ошибку, но игнорирует ваши желания: если вы введёте \sbox{\newreg}{test \\ test} и \usebox{\newreg}, вы получите ‘testtest’, а если вы введёте \sbox{\newreg}{test \par test} и \usebox{\newreg}, вы получите ‘test test’, но без ошибок или предупреждений. Чтобы исправить это, используйте \parbox или minipage, как показано здесь.
\newsavebox{\areg}
\savebox{\areg}{%
\begin{minipage}{\linewidth}
\begin{enumerate}
\item First item
\item Second item
\end{enumerate}
\end{minipage}}
...
\usebox{\areg}
В качестве примера эффективности повторного использования содержимого регистра, это помещает одну и ту же картинку на каждой странице документа, поместив её в заголовок. LaTeX форматирует её только один раз.
\usepackage{graphicx} % all this in the preamble
\newsavebox{\sealreg}
\savebox{\sealreg}{%
\setlength{\unitlength}{1in}%
\begin{picture}(0,0)%
\put(1.5,-2.5){%
\begin{tabular}{c}
\includegraphics[height=2in]{companylogo.png} \\
Office of the President
\end{tabular}}
\end{picture}%
}
\markright{\usebox{\sealreg}}
\pagestyle{headings}
Окружение picture хорошо подходит для тонкой настройки размещения.
Если регистр \noreg ещё не определён, вы получите что-то вроде ‘Неопределённая последовательность управления. <argument> \noreg’.
© 2007–2018 Karl Berry
Public Domain Software
http://latexref.xyz/_005csbox-_0026-_005csavebox.html