在循环中使用 csname 设置变量仅提供最后一个值

在循环中使用 csname 设置变量仅提供最后一个值

我想定义一些循环计算的变量来在 tikzpicture 中绘制路径。变量由一些长度(以 pt 为单位)和(部分)标题定义。例如,假设我们有:

  • 5 分,第 1 部分
  • 10pt,第 2 部分
  • 15pt,第 3 节

这是通过对部分标签进行小计算和参考(以获取标题)来完成的:

\setcounter{sectionCounter}{0}\relax\loop\ifnum\thesectionCounter<3%
\newcount\frameNumber
\frameNumber=...
\dimen1=\textwidth
\multiply\dimen1 by \frameNumber
\divide\dimen1 by \inserttotalframenumber
\edef\progressbarwidthx{\the\dimen1}
\def\titlexyz{\nameref{\secLabel}}

\expandafter\def\csname sWidth\the\value{sectionCounter} \endcsname{\progressbarwidthx}
\expandafter\def\csname sTitle\the\value{sectionCounter} \endcsname{\titlexyz}%

\stepcounter{sectionCounter}\relax\repeat%
\leavevmode%

但是如果我在循环后调用变量

\csname sWidth0 \endcsname
\csname sTitle0 \endcsname; %      
\csname sWidth1 \endcsname
\csname sTitle1 \endcsname; %        
\csname sWidth2 \endcsname
\csname sTitle2 \endcsname

所有这些都从上次迭代中分配了相同的值:15pt & 第 3 节

在第一次迭代中,sWidth0 和 sTitle0 获得正确的值 5pt 和 Section 1,但在第二次迭代中,sWidth0 和 sWidth1 以及 sTitle0 和 sTitle1 分别获得了相同的值 10pt 和 Section 2。

哪里有问题?

编辑:我手动生成此错误没有发生:

\documentclass{minimal}

\begin{document}
\newcounter{sectionCounter}
\setcounter{sectionCounter}{0}

\expandafter\newcommand\csname ary\the\value{sectionCounter} \endcsname{first}
\expandafter\newcommand\csname arz\the\value{sectionCounter} \endcsname{firstx}
\stepcounter{sectionCounter}
\expandafter\newcommand\csname ary\the\value{sectionCounter} \endcsname{second}
\expandafter\newcommand\csname arz\the\value{sectionCounter} \endcsname{secondx}

\csname ary0 \endcsname
\csname ary1 \endcsname

\csname arz0 \endcsname
\csname arz1 \endcsname

\end{document}

给出

第一的
第二

第一
第二

答案1

尝试

\expandafter\edef\csname sWidth\the\value{sectionCounter} \endcsname{\progressbarwidthx}
\expandafter\edef\csname sTitle\the\value{sectionCounter} \endcsname{\titlexyz}%

相关内容