问题摘要:
如何改变我的实现,使计数器可以打印 1.1、1.2a、1.2b、1.3,其中点前的数字是节号,点后的部分是自己的计数器?
长问题: 我想调整我的命令以生成“锻炼计数器”。首先,我向您展示如何使用我的命令,然后我尝试描述所需的行为。最后,我向您展示我当前的实现,它不是我想要的:
\section{Bla}
\exerciseOpt[a]{test}\label{ex1}
[...]
After \ref{ex1} we can jump to \ref{ex2} and [...]
\exerciseOpt[b]{test}\label{ex2}
[...]
\exerciseOpt{test}\label{ex3}
“After” 行应打印如下:
After 1.1a we can jump to 1.1b and [...]
而命令\exerciseOpt
应该打印一个以章节号和自身编号为界的“标题”,并将可选参数显示为文本后缀,如下所示:
Exercise 1.1a test
第二次通话中
Exercise 1.1b test
而第三次调用应该给出
Exercise 1.2 test
我发现过类似的问题,但它们的观点与我的问题不同,或者没有为我提供足够的信息:
下面是我的命令实现,它不能按照我想要的方式处理计数器:
\newcounter{excounter}[section]
\renewcommand{\theexcounter}{\thesection.\arabic{excounter}}
\newcommand{\showexcounter}{\theexcounter}
\newcommand{\exerciseOpt}[2][\relax]{%
\def\myOptional{#1}
\refstepcounter{excounter}
\if\myOptional\relax
\textbf{Exercise: \showexcounter : #2}%
\else
\textbf{Exercise: \showexcounter\myOptional : #2}%
\fi
}
一个“工作最小代码示例”这表明,这些数字并不像我希望的那样出现在输出中,也不像\ref
直接出现在命令中\exerciseOpt
\documentclass{article}
\newcounter{excounter}[section]
\renewcommand{\theexcounter}{\thesection.\arabic{excounter}}
\newcommand{\showexcounter}{\theexcounter}
\newcommand{\exerciseOpt}[2][\relax]{%
\def\myOptional{#1}
\refstepcounter{excounter}
\if\myOptional\relax
\textbf{Exercise: \showexcounter : #2}%
\else
\textbf{Exercise: \showexcounter\myOptional : #2}%
\fi
}
\begin{document}
\section{Bla}
\noindent{}\exerciseOpt[a]{test number should be 1.1a}\label{ex1}
\noindent{}After \ref{ex1} we can jump to \ref{ex2} and [...]\newline
\noindent{}it should be: After 1.1a we can jump to 1.1b and [...]
\noindent{}\exerciseOpt[b]{test number should be 1.1b}\label{ex2}
\noindent{}\exerciseOpt{test number should be 1.2}\label{ex3}
\section{blub}
\noindent{} \exerciseOpt{test number should be 2.1}\label{ex4}
\end{document}