调用动态命名的计数器

调用动态命名的计数器

我有几对计数器,QuestionSubquestionExampleSubexample,等等。每当父系列前进时,我想将子系列设置为 1,并且我想用一个命令为所有系列安排这一点。

可能做这样的事吗?

\documentclass{article}

\newcounter{Question}
\newcounter{Subquestion}

\newcommand{\mycommand}[1]{
    \stepcounter{#1}
    \setcounter{
         % Sub\MakeLowercase{#1}} % attempt 1
         % \csname Sub\MakeLowercase{#1}endcsname} % attempt 2
    }{1}
}

\begin{document}

\setcounter{Subquestion}{5}
\mycommand{Question}
\theSubquestion % should output 1

\end{document}

答案1

最简单的策略是将计数器命名为SubQuestionSubExample

您永远不需要\the<counter>在文档中直接调用,因此宏内部所做的事情并不重要。

\documentclass{article}

\newcounter{Question}
\newcounter{SubQuestion}

\newcommand{\mycommand}[1]{% <--- don't forget
    \stepcounter{#1}%
    \setcounter{Sub#1}{1}%
}

\begin{document}

\setcounter{Subquestion}{5}
\mycommand{Question}
\theSubQuestion % should output 1

\end{document}

另一方面,我看不出要求将计数器设置为 1 而不是 0(并在子问题、子示例或其他内容开始时递增)的理由。

如果您想要选择该名称,则需要在将名称输入之前将其转换为小写\setcounter

\documentclass{article}

\newcounter{Question}
\newcounter{Subquestion}

\newcommand{\mycommand}[1]{% <--- don't forget
    \stepcounter{#1}%
    \setsubcounter{#1}{1}%
}
\newcommand{\setsubcounter}[1]{%
  \lowercase{\setsubcounteraux{#1}}% Apply \lowercase to #1
}
\newcommand\setsubcounteraux[1]{\setcounter{Sub#1}}

\begin{document}

\setcounter{Subquestion}{5}
\mycommand{Question}
\theSubquestion % should output 1

\end{document}

相关内容