我正在尝试实现一个映射: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}