应该使用哪一个:`newcommand` 还是 `sbox`

应该使用哪一个:`newcommand` 还是 `sbox`

假设我想使用元素多次,这是最好的解决方法(我选择了一个tikz- 形箭头,因为这让我想到了这个问题,但我想它实际上可以是任何东西):

  • 使用 : 定义新命令\newcommand,据我所知,这会导致已定义的命令及其定义被扩展,因此它基本上是一种快捷方式,可以节省反复输入相同代码的时间。对于tikz下面的示例,这意味着每次都会绘制新的箭头。

  • 定义一个 savebox/sbox \newsavebox:我不确定这里发生了什么,但假设它类似于通过引用调用,这意味着对象只渲染一次并且结果被“复制”,无论何时\usebox使用。

对我来说,最终结果看起来相同,但是 - 取决于重用对象的复杂性 - 它可能会导致编译时间的巨大差异,每次出现时渲染与渲染一次,本质上只是复制一张图片。

因此: 应该使用哪种方法?

这是个人喜好问题吗?还是最终结果确实与我简单的箭头示例未显示的细微差异有关?我的假设是否偏离了主题?

澄清代码:

\documentclass{article}
\usepackage{tikz}

\newcommand{\myDownArrow}{\tikz\draw (0,0)--++(10pt,0)--++(0,-10pt)--++(5pt,0)--++(-10pt,-5pt)--++(-10pt,5pt)--++(5pt,0)--cycle;}

\newsavebox{\myDownArrowBox}
\sbox{\myDownArrowBox}{\tikz\draw (0,0)--++(10pt,0)--++(0,-10pt)--++(5pt,0)--++(-10pt,-5pt)--++(-10pt,5pt)--++(5pt,0)--cycle;}


\begin{document}
\verb|\myDownArrow|\myDownArrow \qquad \verb|\usebox{\myDownArrowBox}|\usebox{\myDownArrowBox}
\end{document}

显而易见的结果: 结果

答案1

框是固定的。您可以调整其大小,但除此之外,您无法进行太多更改。当您调用宏时,它会再次执行,因此它可能会根据计数器或颜色等外部条件而有所不同。

\documentclass{article}
\usepackage{tikz}

\tikzset{arrowstyle/.style={}}

\newcommand{\myDownArrow}{\tikz\draw[arrowstyle] (0,0)--++(10pt,0)--++(0,-10pt)--++(5pt,0)--++(-10pt,-5pt)--++(-10pt,5pt)--++(5pt,0)--cycle;}

\newsavebox{\myDownArrowBox}
\sbox{\myDownArrowBox}{\tikz\draw[arrowstyle] (0,0)--++(10pt,0)--++(0,-10pt)--++(5pt,0)--++(-10pt,-5pt)--++(-10pt,5pt)--++(5pt,0)--cycle;}


\begin{document}
\verb|\myDownArrow|\myDownArrow \qquad \verb|\usebox{\myDownArrowBox}|\usebox{\myDownArrowBox}

{\color{green}\verb|\myDownArrow|\myDownArrow \qquad \verb|\usebox{\myDownArrowBox}|\usebox{\myDownArrowBox}}

\tikzset{arrowstyle/.style={line width=2pt, red}}
\verb|\myDownArrow|\myDownArrow \qquad \verb|\usebox{\myDownArrowBox}|\usebox{\myDownArrowBox} 


\end{document}

在此处输入图片描述

相关内容