10 怎样实现,可选择地无视或接受,父计数器的清零(重置)规则?

发布于 2025-09-01 22:24:41

enumitem宏包有一个resume选项,它能够继承上一个环境的最后编号值,然后继续编号。此选项默认为关闭状态。我需要一个类似的功能,使我自定义的两个关联计数器的相关命令具有一个星号版本或一个键值版本,来主动开启继续编号,默认执行清零(重置)编号。

例如,在下面的最小工作示例中,两个相关联的计数器具有一定的重置规则。我希望得到的数字序列是:

a,b,b,b.    a,b,b,b.    a,b,b,b.     a,b,b,b.    
1,2,3,4.    2,5,6,7.    3,8,9,10.    4,2,3,4.

也就是说前三组的9个mweb为主动开启继续编号功能,第四组的mweb为默认执行清零(重置)编号的功能。该怎样实现?
image.png

\documentclass{beamer}
\newcommand{\separateline}[1]{%
    \hrulefill\ $\downarrow$ #1 $\downarrow$\ \hrulefill%
}
\newcounter{mwea}
\newcounter{mweb}
\newcommand{\mwea}{%
    \stepcounter{mwea}%
    \setcounter{mweb}{1}%
    cnt mwea's value is \themwea. \par%
}
\newcommand{\mweb}{%
    \stepcounter{mweb}%
    cnt mweb's value is \themweb. \par%
}
\begin{document}
\frame{
    
    \ttfamily\small

    \separateline{first layer}
    
    \mwea \mweb \mweb \mweb 

    \separateline{second layer}

    \mwea \mweb \mweb \mweb  

    \separateline{third layer}
    
    \mwea \mweb \mweb \mweb  

    \separateline{fourth layer}
    
    \mwea \mweb \mweb \mweb 

}
\end{document}

查看更多

关注者
0
被浏览
55
Sagittarius Rover
Sagittarius Rover 7小时前
这家伙很懒,什么也没写!

1.mwea在这里起的作用是?

2.是不是可以理解成,你希望:

  • 假定在一些操作后计数器初始值cnt=5
  • \cmd*带星号,不会自动清零(resume),这将导致cnt=6
  • \cmd*带星号,同样不会自动清零(resume),这将导致cnt=7
  • \cmd不带星号,自动清零,这将导致cnt=0清零之后自增cnt=1
  • \cmd*带星号,不会自动清零(resume),这将导致cnt=2 ?

3.该问题如果与beamer无关,则mwe最好用article或者book


version 1

\documentclass{beamer}
\newif\ifresume %<- add newif condition
\resumefalse
\newcommand{\separateline}[1]{%
    \hrulefill\ $\downarrow$ #1 $\downarrow$\ \hrulefill%
}
\newcounter{mwea}
\newcounter{mweb}
\newcommand{\mwea}{%
    \stepcounter{mwea}%
    \ifresume
        \setcounter{mweb}{1}%
    \fi
    cnt mwea's value is \themwea. \par%
}
\newcommand{\mweb}{%
    \stepcounter{mweb}%
    cnt mweb's value is \themweb. \par%
}
\begin{document}
\frame{
    
    \ttfamily\small

    \separateline{first layer}
    
    \mwea \mweb \mweb \mweb 

    \separateline{second layer}

    \mwea \mweb \mweb \mweb  

    \separateline{third layer}
    
    \mwea \mweb \mweb \mweb  

    \resumetrue%<- change the condition
    \separateline{fourth layer}

    \mwea \mweb \mweb \mweb 

}
\end{document}

image.png

version 2

\documentclass{beamer}
\newcommand{\separateline}[1]{%
    \hrulefill\ $\downarrow$ #1 $\downarrow$\ \hrulefill%
}
\newcounter{mwea}
\newcounter{mweb}
\NewDocumentCommand{\mwea}{s}{%
    \stepcounter{mwea}%
    \IfBooleanF{#1}{\setcounter{mweb}{1}}%
    cnt mwea's value is \themwea. \par%
}
\newcommand{\mweb}{%
    \stepcounter{mweb}%
    cnt mweb's value is \themweb. \par%
}
\begin{document}
\frame{
    \ttfamily\small

    \separateline{first layer}
    
    \mwea* \mweb \mweb \mweb 

    \separateline{second layer}

    \mwea* \mweb \mweb \mweb  

    \separateline{third layer}
    
    \mwea \mweb \mweb \mweb  %<- clear the mweb here

    \separateline{fourth layer}

    \mwea* \mweb \mweb \mweb 
}
\end{document}

image.png

1 个回答

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览