10 如何设计命令\noteinpar,以使用户无感地自动创建叠层?

发布于 2025-09-01 00:35:27

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->就能自动创建符合需要的叠层!

因此,他做了如下尝试:

  1. 新建一个计数器natureframe,它将被紧跟在正文中的每一句\begin{frame}之后,也就是每一帧开始时,用来表示帧的自然序数(但是并不会打印其计数器值到正文中),虽然不知道叠层是否会对此产生影响,但他决定先试一试;
  2. 新建一个计数器naturevisible,它将在使用\visible<num->{#2}时,通过自增并打印计数器值,来代替num这个值;
  3. 每当计数器natureframe自增时,计数器naturevisible的值将被重置为1,这是因为,在教学实际中, 他需要一帧中出现的第一个\visible<num->中的num2开始,也就是说他希望:在一帧中,第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}},……;
  4. 修改命令\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步,重新修改定义,或者,更换思路,另起炉灶。

最小工作示例在此。

查看更多

关注者
0
被浏览
197
1 个回答
Sagittarius Rover
这家伙很懒,什么也没写!

不知道效果对不对...

image.png

but why not \visible<\thenaturevisible->{#2} instead of \visible<thenaturevisible->{#2}?

image.png

撰写答案

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

发布
问题

分享
好友

手机
浏览

扫码手机浏览