You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Beamer中创建带独立章节计数器的自定义Opgave环境

解决方案

要让Opgave环境拥有随章节变化的独立计数器,且格式和现有Definition、Example一致,只需把原手动定义的环境改成和其他定理环境相同的newtheorem方式,具体修改如下:

关键修改步骤

  1. 替换原Opgave相关代码:把你代码中从\def \roed到最后一个\AtBeginEnvironment{opgave}的部分,替换成以下内容:
\def \roed {normal text.bg!10!red}
\def \exerciseblockcolour {\roed}

% 清除可能存在的同名命令,避免冲突
\let\opgave\undefined
% 定义Opgave环境,计数器随章节重置,格式为「章节号.序号」
\newtheorem{opgave}{Opgave}[section]

% 设置Opgave环境的样式,和其他环境保持统一
\AtBeginEnvironment{opgave}{%
\setbeamertemplate{itemize items}[circle]
\setbeamercolor{block title}{fg=white,bg=\exerciseblockcolour}
\setbeamercolor{itemize item}{fg=\exerciseblockcolour}
\setbeamercolor{itemize subitem}{fg=\exerciseblockcolour}
\setbeamercolor{itemize subsubitem}{fg=\exerciseblockcolour}
\setbeamercolor{enumerate item}{fg=\exerciseblockcolour}
\setbeamercolor{enumerate subitem}{fg=\exerciseblockcolour}
\setbeamercolor{enumerate subsubitem}{fg=\exerciseblockcolour}
}
  1. 原理说明:
    • newtheorem{opgave}{Opgave}[section]会自动生成一个随章节编号的独立计数器,格式和你现有的Definition、Example完全一致(比如第5章的第一个Opgave会显示为Opgave 5.1)
    • 用AtBeginEnvironment统一设置颜色和项目符号,和其他环境的配置逻辑对齐,确保格式统一

修改后的完整代码

\documentclass[9pt,trans,xcolor={table},envcountsect]{beamer} % Plain

\usefonttheme[onlymath]{serif}
\usetheme[shownavsym,right]{Aalborg}

\setbeamertemplate{section in toc}[sections numbered] % Automatic enumeration of sections
\setbeamertemplate{blocks}[rounded][shadow=true] 

\definecolor{dgreen}{rgb}{0.,0.6,0.} 
\definecolor{aaublue}{RGB}{33,26,82}% dark blue

\usepackage{etoolbox} % In order to still use an outdated beamer version

\AtBeginEnvironment{theorem}{%
\setbeamertemplate{itemize items}[circle]                    % Shape of bullet-points
\setbeamercolor{block title}{bg=dgreen!100!white,fg=white}%
\setbeamercolor{itemize item}{fg=dgreen!100!white}%
\setbeamercolor{itemize subitem}{fg=dgreen!100!white}%
\setbeamercolor{itemize subsubitem}{fg=dgreen!100!white}%
\setbeamercolor{enumerate item}{fg=dgreen!100!black}%
\setbeamercolor{enumerate subitem}{fg=dgreen!100!black}%
\setbeamercolor{enumerate subsubitem}{fg=dgreen!100!black}%
}

\AtBeginEnvironment{lemma}{%
\setbeamertemplate{itemize items}[circle]                    % Shape of bullet-points
\setbeamercolor{block title}{bg=dgreen!100!white,fg=white}%
\setbeamercolor{itemize item}{fg=dgreen!100!white}%
\setbeamercolor{itemize subitem}{fg=dgreen!100!white}%
\setbeamercolor{itemize subsubitem}{fg=dgreen!100!white}%
\setbeamercolor{enumerate item}{fg=dgreen!100!black}%
\setbeamercolor{enumerate subitem}{fg=dgreen!100!black}%
\setbeamercolor{enumerate subsubitem}{fg=dgreen!100!black}%
}

\AtBeginEnvironment{corollary}{%
\setbeamertemplate{itemize items}[circle]                    % Shape of bullet-points
\setbeamercolor{block title}{bg=dgreen!100!white,fg=white}%
\setbeamercolor{itemize item}{fg=dgreen!100!white}%
\setbeamercolor{itemize subitem}{fg=dgreen!100!white}%
\setbeamercolor{itemize subsubitem}{fg=dgreen!100!white}%
\setbeamercolor{enumerate item}{fg=dgreen!100!black}%
\setbeamercolor{enumerate subitem}{fg=dgreen!100!black}%
\setbeamercolor{enumerate subsubitem}{fg=dgreen!100!black}%
}

\AtBeginEnvironment{definition}{%
\setbeamertemplate{itemize items}[circle]                    % Shape of bullet-points
\setbeamercolor{block title}{bg=blue,fg=white}%
\setbeamercolor{itemize item}{fg=blue}%
\setbeamercolor{itemize subitem}{fg=blue}%
\setbeamercolor{itemize subsubitem}{fg=blue}%
\setbeamercolor{enumerate item}{fg=blue}%
\setbeamercolor{enumerate subitem}{fg=blue}%
\setbeamercolor{enumerate subsubitem}{fg=blue}%
}

\def \exampleblockcolour {cyan}
\AtBeginEnvironment{example}{%
\setbeamertemplate{itemize items}[circle]                    % Shape of bullet-points
\setbeamercolor{block title}{bg=\exampleblockcolour,fg=white}%
\setbeamercolor{itemize item}{fg=\exampleblockcolour}%
\setbeamercolor{itemize subitem}{fg=\exampleblockcolour}%
\setbeamercolor{itemize subsubitem}{fg=\exampleblockcolour}%
\setbeamercolor{enumerate item}{fg=\exampleblockcolour}%
\setbeamercolor{enumerate subitem}{fg=\exampleblockcolour}%
\setbeamercolor{enumerate subsubitem}{fg=\exampleblockcolour}%
}

\def \roed {normal text.bg!10!red}
\def \exerciseblockcolour {\roed}

% 清除可能存在的同名命令,避免冲突
\let\opgave\undefined
% 定义Opgave环境,计数器随章节重置,格式为「章节号.序号」
\newtheorem{opgave}{Opgave}[section]

% 设置Opgave环境的样式,和其他环境保持统一
\AtBeginEnvironment{opgave}{%
\setbeamertemplate{itemize items}[circle]
\setbeamercolor{block title}{fg=white,bg=\exerciseblockcolour}
\setbeamercolor{itemize item}{fg=\exerciseblockcolour}
\setbeamercolor{itemize subitem}{fg=\exerciseblockcolour}
\setbeamercolor{itemize subsubitem}{fg=\exerciseblockcolour}
\setbeamercolor{enumerate item}{fg=\exerciseblockcolour}
\setbeamercolor{enumerate subitem}{fg=\exerciseblockcolour}
\setbeamercolor{enumerate subsubitem}{fg=\exerciseblockcolour}
}

\setbeamercolor*{block body}{bg=black!10!white,fg=black} 
\setbeamercolor*{block body alerted}{bg=normal text.bg!90!black,fg=black} 
\setbeamercolor*{block body example}{bg=normal text.bg!90!black,fg=black} 
\setbeamercolor*{block title}{parent=structure2,bg=normal text.bg!0!blue}
\setbeamercolor*{block title alerted}{use={normal text,alerted text},fg=alerted text.fg!0!white,bg=normal text.bg!10!red}
\setbeamercolor*{block title example}{use={normal text,example text},fg=white,bg=cyan}
\setbeamercolor*{block title theorem}{use={normal text,example text},fg=example text.fg!100!normal text.fg,bg=normal text.bg!0!dgreen}

\makeatletter
\pgfdeclareverticalshading[lower.bg,upper.bg]{bmb@transition}{200cm}{color(0pt)=(lower.bg); color(4pt)=(lower.bg); color(4pt)=(upper.bg)}
\makeatother

\makeatletter
\newcommand{\ShiftSectionNumber}[1]{%
\beamer@tocsectionnumber=\numexpr#1+\beamer@tocsectionnumber}
\makeatother

\setbeamertemplate{theorems}[numbered]
\addtobeamertemplate{theorem begin}{\normalfont}

\let\definition\undefined
\newtheorem{definition}{\translate{Definition}}[section]

\let\example\undefined
\newtheorem{example}{\translate{Example}}[section]

\uselanguage{danish}
\languagepath{danish}
\deftranslation[to=danish]{Example}{Eksempel}
\deftranslation[to=danish]{Theorem}{S\ae tning}
\deftranslation[to=danish]{Corollary}{Korollar}

\begin{document}

\begin{frame}%[allowframebreaks]
    \frametitle{Overview}
    \tableofcontents
\end{frame}

\ShiftSectionNumber{4}
\addtocounter{section}{4} % Enumeration of theorems and examples follows section numbers

\section{Section}
\begin{frame}[<+->]{Enumeration of self-made environment}
    \begin{definition}[Indpendent counter]
        \begin{itemize}
            \item Counter independent of all other counters: Definition 5.1
        \end{itemize}        
    \end{definition}
    \begin{example}[Indpendent counter]
        \begin{itemize}
            \item Counter independent of all other counters: Eksempel 5.1
        \end{itemize}
    \end{example}
    \begin{opgave}[Wanted: Indpendent counter]
        \begin{itemize}
            \item Wanted: Counter independent of all other counters: Opgave 5.1
        \end{itemize}
    \end{opgave}
\end{frame}

\end{document}

内容的提问来源于stack exchange,提问作者Peter Jensen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 20:45:54