保存一个箱子的理由?

保存一个箱子的理由?

我读过很多关于如何\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参见另一个示例和解释。

相关内容