有没有创建编号保存框的主要方法?例如:\usebox{box-1}, \usebox{box-2}, \usebox{box-3}
以下 MWE 没有给出错误,但没有输出。PS
:这似乎很清楚为什么这行不通。所以问题是,如何让它工作(与进一步的错误分析相反)。
\documentclass{article}
\usepackage{tikz}
\begin{document}
\foreach \n in {1,2,3}{
\expandafter\newsavebox\csname box-\n\endcsname
\expandafter\savebox\csname box-\n\endcsname{The content No. \n}
}
Test: \expandafter\usebox\csname box-3\endcsname
\end{document}
答案1
您可以尝试xsavebox
使用 PDF XObjects 在 PDF 中仅存储一次内容。此外,框不需要声明并且具有全局范围:
\documentclass{article}
\usepackage{tikz}
\usepackage{xsavebox}
\begin{document}
\foreach \n in {1,2,3}{
\xsbox{box-\n}{The content No. \n}
}
Test: \xusebox{box-3}
\end{document}
另外,还有一种expl3
将内容保存在具有全局范围的 TeX 框中的方法:
\documentclass{article}
\usepackage{tikz}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% \sboxx{<box name>}{<content>}
% \useboxx{<box name>}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\ExplSyntaxOn
\NewDocumentCommand{\sboxx}{mm}{
\box_clear_new:c{cis-box-#1}\hbox_gset:cn{cis-box-#1}{#2}
}
\NewDocumentCommand{\useboxx}{m}{\box_use:c{cis-box-#1}}
\ExplSyntaxOff
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{document}
\foreach \n in {1,2,3}{
\sboxx{box-\n}{The content No. \n}
}%
Test: \useboxx{box-3}
\foreach \n in {1,2,3}{ % Re-use existing boxes
\sboxx{box-\n}{The content No. \n a}
}%
Test: \useboxx{box-3}
\end{document}
答案2
该pgf
命令\foreach
形成一个组,因此您会在循环结束时丢失所有定义。我会在这里使用该expl3
函数\int_step_inline:nnnn
,将其包装在文档命令中
\documentclass{article}
\ExplSyntaxOn
\NewDocumentCommand \ForEach { O { 1 } m O { 1 } +m }
{ \int_step_inline:nnnn {#1} {#3} {#2} {#4} }
\ExplSyntaxOff
\begin{document}
\ForEach{3}{
\expandafter\newsavebox\csname box-#1\endcsname
\expandafter\savebox\csname box-#1\endcsname{The content No. #1}
}
Test: \expandafter\usebox\csname box-1\endcsname
\end{document}
通过给出的参数规范,我们可以将起始值作为第一个可选参数,并将步长作为两个强制参数之间的可选参数。
答案3
从其他答案来看,:c
参数签名似乎工作正常,因此一切都可以在 expl3 中完全完成:
包括一个使用数字(比如说)或其他任意字符串的用户框访问函数(\myboxnum
在示例中)。
平均能量损失
\documentclass{article}
\usepackage{tcolorbox}
\tcbuselibrary{skins,xparse}
\tcbuselibrary{listings}
\DeclareTCBListing{mybox}{ s O{} m }{%
colback=red!3!white,
colframe=red!75!blue,
fonttitle=\sffamily\bfseries,
bicolor,
colbacklower=yellow!20,
segmentation style={double=white,draw=blue,
double distance=1pt,solid},
listing options={style=tcblatex,numbers=left,numberstyle=\small\color{blue!75!black},numbersep=5pt},
title=\getegcounter\ -- #3,#2}
\ExplSyntaxOn
%==============================
\newcounter{ic_eg_count}[section]
\cs_new:Nn \ic_get_egnum: {
\refstepcounter{ic_eg_count}[\thesection.\theic_eg_count]
}
\cs_set_eq:NN \getegcounter \ic_get_egnum:
\ExplSyntaxOff
%========================================
\begin{document}
\section{Test}
%=====================
\begin{mybox}{Box 4}
\ExplSyntaxOn
\cs_generate_variant:Nn \box_new:N { c }
\cs_set:Npn \ic_funcpp:n #1 { \box_new:c { l_myicppz#1_box }
\hbox_set:cn { l_myicppz#1_box } { Contents ~ #1 }
x\box_use:c { l_myicppz#1_box }y ~ : ~
\box_show:c { l_myicppz#1_box }
}
\cs_set:Nn \ic_funcppb: {
\int_step_function:nnnN { 97 } { 1 } { 99 } \ic_funcpp:n
}
\NewDocumentCommand { \mycmdppb } { } { \ic_funcppb: }
%
\cs_set:Npn \ic_funcpq:n #1 { \box_use:c { l_myicppz#1_box } }
\NewDocumentCommand { \myboxnum } { m } { \box_use:c { l_myicppz#1_box } }
\ExplSyntaxOff
\mycmdppb
\par >>\myboxnum{98}<<
\end{mybox}
\bigskip
\end{document}