diff --git a/theme/beamerfontthemeOUCSlide.sty b/theme/beamerfontthemeOUCSlide.sty index 18652ea..44f5c2f 100644 --- a/theme/beamerfontthemeOUCSlide.sty +++ b/theme/beamerfontthemeOUCSlide.sty @@ -206,37 +206,38 @@ {}% {\PackageError{beameroucslide}{Patching original part failed}\@ehc} % beamer 3.69(TeX Live 2023)起 \beamer@@frametitle 的定义发生了变化: -% 1. 内部增加了 \ifblank 判断; -% 2. 用 \beamer@insertframetitlecontinuation 取代了 \usebeamertemplate*{frametitle continuation}。 +% 用 \beamer@insertframetitlecontinuation 取代了 \usebeamertemplate*{frametitle continuation}。 % 因此这里按 beamer 版本分别处理,保证在 TeX Live 2022 与 2023 下都能编译通过。 -\@ifundefined{beamer@insertframetitlecontinuation} - {% 旧版 beamer(TeX Live 2022 及以前):沿用原有的补丁方式 - \patchcmd{\beamer@@frametitle} - {{% - \gdef\insertframetitle{{#2\ifnum\beamer@autobreakcount>0\relax{}\space% - \usebeamertemplate*{frametitle continuation}\fi}}% - \gdef\beamer@frametitle{#2}% - \gdef\beamer@shortframetitle{#1}% - }} - {{% - \gdef\insertframetitle{{\beameroucslide@frametitleformatcaps{#2}\ifnum% - \beamer@autobreakcount>0\relax{}\space% - \usebeamertemplate*{frametitle continuation}\fi}}% - \gdef\beamer@frametitle{#2}% - \gdef\beamer@shortframetitle{#1}% - }} - {} - {\PackageError{beameroucslide}{Patching original frame title failed}\@ehc}% - } - {% 新版 beamer(TeX Live 2023 及以后):按新定义重写,并加入标题格式控制 - \long\def\beamer@@frametitle[#1]#2{% - \ifblank{#2}{}{% - \gdef\insertframetitle{{\beameroucslide@frametitleformatcaps{#2}% - \ifnum\beamer@autobreakcount>0\relax{}\space% - \beamer@insertframetitlecontinuation\fi}}% - \gdef\beamer@frametitle{#2}% - \gdef\beamer@shortframetitle{#1}% - }% +% 注意:判断必须写在文件顶层(不能把 \patchcmd 嵌进 \@ifundefined 等宏的参数里), +% 否则 \patchcmd 的搜索串会被改写而导致补丁失败。 +\ifcsname beamer@insertframetitlecontinuation\endcsname + % 新版 beamer(TeX Live 2023 及以后):按新定义重写,并加入标题格式控制 + \long\def\beamer@@frametitle[#1]#2{% + \ifblank{#2}{}{% + \gdef\insertframetitle{{\beameroucslide@frametitleformatcaps{#2}% + \ifnum\beamer@autobreakcount>0\relax{}\space% + \beamer@insertframetitlecontinuation\fi}}% + \gdef\beamer@frametitle{#2}% + \gdef\beamer@shortframetitle{#1}% }% - } + }% +\else + % 旧版 beamer(TeX Live 2022 及以前):沿用原有的补丁方式 + \patchcmd{\beamer@@frametitle} + {{% + \gdef\insertframetitle{{#2\ifnum\beamer@autobreakcount>0\relax{}\space% + \usebeamertemplate*{frametitle continuation}\fi}}% + \gdef\beamer@frametitle{#2}% + \gdef\beamer@shortframetitle{#1}% + }} + {{% + \gdef\insertframetitle{{\beameroucslide@frametitleformatcaps{#2}\ifnum% + \beamer@autobreakcount>0\relax{}\space% + \usebeamertemplate*{frametitle continuation}\fi}}% + \gdef\beamer@frametitle{#2}% + \gdef\beamer@shortframetitle{#1}% + }} + {} + {\PackageError{beameroucslide}{Patching original frame title failed}\@ehc}% +\fi \makeatother