在 csdef 中使用计数器

在 csdef 中使用计数器

我正在尝试实现一个映射:counter => string + another_counter:

1 => 等式1

2 => 等式2

3 => 不等式1...

\csdef这样使用:

\csdef{probName\thecntProblem}{\csuse{filePrefix}\arabic{cntLocalProblem}}%

cntLocalProblem始终指向其最后一个值。我理解这\csuse只是插入保存在 s 键中的文本\csdef。但我如何cntLocalProblem用其实际值替换?

谢谢。

答案1

\csdef等等确实允许在“命令”名称中使用数字,但这里有另一种方法,使用来自 LaTeX2e 核心\@nameuse\@namedef扩展计数器值——我认为etoolbox这里不需要这种方法!

\documentclass{article}

\newcounter{cntLocalProblem}
\newcounter{cntProblem}
\newcommand{\fileprefix}{foo}




\makeatletter
\def\localprobname#1{%
  \@namedef{probName\thecntProblem}{\expandafter\fileprefix#1}
}
\newcommand{\defineprobname}{%
  \expandafter\localprobname\expandafter{\number\value{cntLocalProblem}}
}
\newcommand{\getprobname}[1]{%
  \@nameuse{probName#1}%
}
\makeatother

\begin{document}

\setcounter{cntProblem}{10}

\setcounter{cntLocalProblem}{15}

\defineprobname


\setcounter{cntProblem}{20}

\setcounter{cntLocalProblem}{115}

\defineprobname


\getprobname{10}

\getprobname{20}

\getprobname{40}% should be undefined -> no output
\hrule

\end{document}

相关内容