计数器问题

计数器问题

我想做一个包含某些任务的演示文稿,但是由于使用enumitemwith存在某些问题beamer,所以我决定自己做,因此我有这个示例代码:

\documentclass{beamer}

\usepackage[english]{babel}
\usepackage[utf8]{inputenc}
\usepackage{ifthen}

\usetheme{CambridgeUS}

\newcounter{tasknumber}
\stepcounter{tasknumber}
\newcounter{taskletter}

\resetcounteronoverlays{tasknumber}
\resetcounteronoverlays{taskletter}

\newcommand{\task}[1][ ]
{
        \ifthenelse{\equal{#1}{+}}{
        \stepcounter{tasknumber}\setcounter{taskletter}{0}}{} %<- why this doesn't work?
        Task \thetasknumber.
}

\newcommand{\taskl}
{
    \stepcounter{taskletter}
    \alph{taskletter})
}

\begin{document}
    \begin{frame}
        \frametitle{\task}
        \taskl ...
        \taskl ...
        \taskl ...
    \end{frame}
    %\setcounter{taskletter}{0}
    \begin{frame}
        \frametitle{\task[+]}
        \taskl ...
        \taskl ...
        \taskl ...
    \end{frame}
\end{document}

显然,我希望获得第一个任务的第一帧(a)、b)和 c),以及第二个任务的第二帧(a)b)和 c),但我在第二帧上获得了 d)、e)和 f)。我不喜欢\setcounter{taskletter}{0}在每一帧之后添加。

答案1

您应该将其放入\frametitle里面\task,而不是将其放回去。

\documentclass{beamer}

\usepackage[english]{babel}
\usepackage[utf8]{inputenc}
\usepackage{ifthen}

\usetheme{CambridgeUS}

\newcounter{tasknumber}
\stepcounter{tasknumber}
\newcounter{taskletter}

\resetcounteronoverlays{tasknumber}
\resetcounteronoverlays{taskletter}

\newcommand{\task}[1][ ]
{
        \ifthenelse{\equal{#1}{+}}{
        \stepcounter{tasknumber}\setcounter{taskletter}{0}}{} %<- why this doesn't work?
        \frametitle{Task \thetasknumber.}
}

\newcommand{\taskl}
{
    \stepcounter{taskletter}
    \alph{taskletter})
}

\begin{document}
    \begin{frame}
        \task
        \taskl ...
        \taskl ...
        \taskl ...
    \end{frame}
    %\setcounter{taskletter}{0}
    \begin{frame}
        \task[+]
        \taskl ...
        \taskl ...
        \taskl ...
    \end{frame}
\end{document}

相关内容