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
为默认执行清零(重置)编号的功能。该怎样实现?
\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}
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
\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}
\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}
好像下标有个shift... (但我相信你可以改对...)
但是用
\NewDocumentCommand{}{s}
和\IfBoolean
应该是你希望实现的一个逻辑分支(?)mwea
就是mweb
的父计数器,二者通过\mwea
和\mweb
来控制计数器的变化。当使用\mwea
时,无论mweb
发生了什么额外的变化,mweb
的值都将被设置为1
。@u70550 我更喜欢v2。原来s参数是这么用的!
下标shift是什么?是说,给出的代码没有控制到和提问所需一致吗?