我有几对计数器,Question
和Subquestion
,Example
和Subexample
,等等。每当父系列前进时,我想将子系列设置为 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
最简单的策略是将计数器命名为SubQuestion
和SubExample
。
您永远不需要\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}