定义一个自定义计数器,带有可选的文本后缀注释,可用于交叉引用

定义一个自定义计数器,带有可选的文本后缀注释,可用于交叉引用

问题摘要:

如何改变我的实现,使计数器可以打印 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}

相关内容