我读过很多关于如何\newsavebox
保存盒子内容的答案。据我所知,这是解决某种脆弱性问题的方法。对吗?如果不是,保存盒子有什么意义?
答案1
框的使用(通常)与脆弱性无关。框(和胶水)是 TeX 使用的基本排版结构。TeX 的所有排版都是通过定位框来完成的。保存框(而不是保存命令)意味着您正在保存排版文本的片段,而不是保存要执行的标记列表。正如评论中提到的,想要这样做的原因有很多。它可能是为了测量某些排版结构的宽度,可能是执行命令在执行时间方面非常昂贵,并且您想要多次重新设置相同结果的副本,或者可能只是您想要将排版片段传递给另一个命令(例如,\fbox
首先将内容放入框中比直接作为命令参数更方便(可能是因为内容涉及逐字材料)。
答案2
我用它来保存并重新使用一个小图形来代替amsthm
证明“墓碑”:
\newsavebox{\QEDbox}
\savebox{\QEDbox}{%
\raisebox{-3pt}{\includegraphics[scale=.7]{proofpicture}}}
\renewcommand{\qedsymbol}{\usebox{\QEDbox}}
相关引述教科书(第 329 页):
复制一个盒子比从头开始构建它要快得多。
答案3
我无法说出全部在所有情况下,我都会使用一个savebox
,但我发现它非常有用的一个特殊情况是对齐subfigures
这个想法是将最大的图像保存到一个框中,然后您可以测量它以帮助处理\vfill
其他subfigure
图像。这允许caption
和图像将按照您希望的方式保持对齐。
\documentclass{article}
\usepackage{tikz}
\usepackage{subcaption}
\newsavebox{\tempbox}
\begin{document}
% store the bigger of the pictures in a vbox
\sbox{\tempbox}{%
\begin{tikzpicture}
\draw circle (1.25cm) {};
\end{tikzpicture}%
}
\begin{figure}
\begin{subfigure}[t]{0.3\textwidth}
\centering
% use the save box
\usebox{\tempbox}
\caption{Biggest (using a savebox)}
\end{subfigure}%
\begin{subfigure}[t]{0.3\textwidth}
\centering
% for the other figures, you can use \vfill as follows
\vbox to\ht\tempbox{
\begin{tikzpicture}
\draw circle (.5cm) {};
\end{tikzpicture}%
\vfill
}
\caption{Top justified}
\end{subfigure}%
\begin{subfigure}[t]{0.3\textwidth}
\centering
% vertically centered
\vbox to\ht\tempbox{
\vfill
\begin{tikzpicture}
\draw circle (.5cm) {};
\end{tikzpicture}%
\vfill
}
\caption{Vertically centered}
\end{subfigure}%
\end{figure}
\end{document}
答案4
我主要用它来重用环境中的部分图形picture
。例如打印我的名片:
\documentclass[11pt,DIV=33]{scrlttr2}
\usepackage[utf8]{inputenc}
\usepackage{ngerman}
\usepackage{hyperref}
\pagestyle{empty}
\begin{document}
\setlength{\unitlength}{1mm}
\newkomavar{name}
\newkomavar{street}
\newkomavar{city}
\newkomavar{zip}
\newkomavar{phone}
\newkomavar{mobile}
\newkomavar{email}
\newkomavar{website}
\setkomavar{name}{Mrs. Example}
\setkomavar{street}{Some street 123}
\setkomavar{zip}{12345}
\setkomavar{city}{Hometown}
\setkomavar{phone}{123 456 789}
\setkomavar{mobile}{987 654 321}
\fontshape{sc}
\selectfont
\newsavebox{\myfrontside}
\savebox{\myfrontside}(85,54){
\put(-42.5,0){\makebox(85,54){\shortstack[r]{\vspace{-3pt} \tiny www.\\ \tiny mail@}
\large \usekomavar{name}
\small .com}}
\put(-40,2.5){\makebox(80,0)[bl]{\tiny\shortstack[l]{
\usekomavar{street}, \usekomavar{zip} \usekomavar{city}\\
\usekomavar{phone}, \usekomavar{mobile}
}}}
}
\begin{picture}(178,253)(-7,22)
% crop marks
\linethickness{0.0001in}
\multiput(-2,0)(0,54){6}{\line(-1,0){5}}
\multiput(172,0)(0,54){6}{\line(1,0){5}}
\multiput(0,-2)(85,0){3}{\line(0,-1){5}}
\multiput(0,272)(85,0){3}{\line(0,1){5}}
% place ten cards on the page
\multiput(0,0)(0,54){5}{\usebox{\myfrontside}}
\multiput(85,0)(0,54){5}{\usebox{\myfrontside}}
\end{picture}
\end{document}
看https://en.wikibooks.org/wiki/LaTeX/Picture#Multiple_Use_of_Predefined_Picture_Boxes参见另一个示例和解释。