某LaTeX
用户在beamer文档类中设计了一个\noteinpar
命令来辅助他的教学活动。该命令可以为一个汉字的下方加上一个小圆点,并在右上方加上一个上标序号,还能在其后的圆括号中突出显示加点字的含义。
\newcounter{noteinpar}
\NewDocumentCommand{\noteinpar}{ mm }{%
\stepcounter{noteinpar}%
\CJKunderdot{#1}\ignorespaces%
\textsuperscript{\circledtext[basechar=x,charf=\zihao{-4},boxlinewidth=.2pt]{\thenoteinpar}}%
{\fangsong ({\textcolor{red}{#2}})}%
}
通常看来,这个\noteinpar
命令的设计没有什么大问题。他只需要在正文中按下面的格式书写正文,即可创建一个符合他的教学需要的叠层:
\noteinpar{#1}{\visible<num->{#2}}
例如:
劳仑衣\noteinpar{普}{\visible<2->{桑}},认至将指点效\noteinpar{则}{\visible<3->{机}},最你更枝。
现在,他厌倦了在正文中书写\visible<num->
,(因为这句代码需要他手动指定叠层的计数,并且在教学实际中他发现这一帧中的每个叠层都是独立且连续的,绝不会有至少两个加点字的含义需要被同时展示于同一个叠层之中,)并且他希望能够不用书写\visible<num->
就能自动创建符合需要的叠层!
因此,他做了如下尝试:
\begin{frame}
之后,也就是每一帧开始时,用来表示帧的自然序数(但是并不会打印其计数器值到正文中),虽然不知道叠层是否会对此产生影响,但他决定先试一试;\visible<num->{#2}
时,通过自增并打印计数器值,来代替num
这个值;1
,这是因为,在教学实际中, 他需要一帧中出现的第一个\visible<num->
中的num
从2
开始,也就是说他希望:在一帧中,第1次输入\noteinpar{#1}{#2}
时,自动实现\noteinpar{#1}{\visible<2->{#2}}
,第2次输入\noteinpar{#1}{#2}
时,自动实现\noteinpar{#1}{\visible<3->{#2}}
,第3次输入\noteinpar{#1}{#2}
时,自动实现\noteinpar{#1}{\visible<4->{#2}}
,……;\noteinpar
的定义。\newcounter{noteinpar}
\NewDocumentCommand{\noteinpar}{ mm }{%
\stepcounter{noteinpar}%
\CJKunderdot{#1}\ignorespaces%
\textsuperscript{\circledtext[basechar=x,charf=\zihao{-4},boxlinewidth=.2pt]{\thenoteinpar}}%
{\fangsong ({\stepcounter{naturevisible}\textcolor{red}{\visible<thenaturevisible->{#2}}})}%
}
结果是,叠层失效,并且圆括号中突出显示加点字的含义也消失不见了。现在,他需要返回第4步,重新修改定义,或者,更换思路,另起炉灶。
最小工作示例在此。
编辑了俩小时,原来没加
\
!心态有点崩了...深有体会,所以在造轮子的时候最好先在最小文档独立测试再做封装,多和work的例子做比较...也许可以较快找到这类错误...