适配 TeX Live 2023:修复 beamer 3.69 下 frametitle 补丁失败的问题

beamer 3.69 起 \beamer@@frametitle 的定义发生变化:
1. 内部新增 \ifblank 判断;
2. 用 \beamer@insertframetitlecontinuation 取代了
   \usebeamertemplate*{frametitle continuation};
因此原有针对旧定义文本的 \patchcmd 匹配失败,报错
"Package beameroucslide Error: Patching original frame title failed"。

现按 beamer 版本分别处理:以 \beamer@insertframetitlecontinuation
是否存在作为版本判别依据,旧版仍走原有补丁路径,新版按新定义重写
并保留 frametitle 的字母大小写格式控制,从而同时兼容
TeX Live 2022 与 TeX Live 2023。已用 TeX Live 2023 用 xelatex
连续编译三遍通过(23 页),并更新编译产物 slides.pdf。
This commit is contained in:
laoyang
2026-09-20 06:44:11 +08:00
parent 999d801896
commit e4ba88242c
2 changed files with 34 additions and 16 deletions
BIN
View File
Binary file not shown.
+20 -2
View File
@@ -205,7 +205,13 @@
{\def\insertpart{{\beameroucslide@partformatspacingb{LetterSpace=15.0}\beameroucslide@partformatcaps{\beameroucslide@partformatspacinga[120]{\expandafter\hyperlink\partlink}}}}}% {\def\insertpart{{\beameroucslide@partformatspacingb{LetterSpace=15.0}\beameroucslide@partformatcaps{\beameroucslide@partformatspacinga[120]{\expandafter\hyperlink\partlink}}}}}%
{}% {}%
{\PackageError{beameroucslide}{Patching original part failed}\@ehc} {\PackageError{beameroucslide}{Patching original part failed}\@ehc}
\patchcmd{\beamer@@frametitle} % beamer 3.69TeX Live 2023)起 \beamer@@frametitle 的定义发生了变化:
% 1. 内部增加了 \ifblank 判断;
% 2. 用 \beamer@insertframetitlecontinuation 取代了 \usebeamertemplate*{frametitle continuation}。
% 因此这里按 beamer 版本分别处理,保证在 TeX Live 2022 与 2023 下都能编译通过。
\@ifundefined{beamer@insertframetitlecontinuation}
{% 旧版 beamerTeX Live 2022 及以前):沿用原有的补丁方式
\patchcmd{\beamer@@frametitle}
{{% {{%
\gdef\insertframetitle{{#2\ifnum\beamer@autobreakcount>0\relax{}\space% \gdef\insertframetitle{{#2\ifnum\beamer@autobreakcount>0\relax{}\space%
\usebeamertemplate*{frametitle continuation}\fi}}% \usebeamertemplate*{frametitle continuation}\fi}}%
@@ -220,5 +226,17 @@
\gdef\beamer@shortframetitle{#1}% \gdef\beamer@shortframetitle{#1}%
}} }}
{} {}
{\PackageError{beameroucslide}{Patching original frame title failed}\@ehc} {\PackageError{beameroucslide}{Patching original frame title failed}\@ehc}%
}
{% 新版 beamerTeX 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}%
}%
}%
}
\makeatother \makeatother