Savebox 相当于 \csname?

Savebox 相当于 \csname?

我想定义一个命令来增加计数器,并创建一个新的保存框,其名称由计数器值生成。例如:

\documentclass{article}

\newcounter{mycounter}
\newcommand{\mycommand}[1]{%
    \addtocounter{mycounter}{1}%
    \newsavebox{\csname foobox\roman{mycounter}\endcsname}%
    \savebox{\csname foobox\roman{mycounter}\endcsname}{#1}%
    }

\begin{document}

    \mycommand{This is the content of fooboxi.}
    \mycommand{This is the content of fooboxii.}
    \usebox{\fooboxi}
    \usebox{\fooboxii}

\end{document}

我的 Google 能力太弱了,无法找到编写此代码的方法。有什么建议吗?

答案1

你可以做

\documentclass{article}

\newcounter{mycounter}
\newcommand{\mycommand}[1]{%
    \addtocounter{mycounter}{1}%
    \expandafter\newsavebox\csname foobox\roman{mycounter}\endcsname
    \expandafter\savebox\csname foobox\roman{mycounter}\endcsname{#1}%
    }

\begin{document}

    \mycommand{This is the content of fooboxi.}
    \mycommand{This is the content of fooboxii.}
    \usebox{\fooboxi}
    \usebox{\fooboxii}

\end{document}

虽然一般情况下你不应该这样做。通常的模式是只分配几个寄存器并尽可能地重复使用它们。经典的 TeX 只有 256 个盒子寄存器,而 latex 内核在你开始之前就用完了其中的一半。(e-tex 还有数千个,但一般原则保持不变)

相关内容