Compare commits
8
Commits
4aaf14bc63
..
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9da5a6d75b | ||
|
|
4242969f2e | ||
|
|
8d8ddabe31 | ||
|
|
e3f2384e99 | ||
|
|
4bdc1b83ab | ||
|
|
d69eeb3f11 | ||
|
|
e4ba88242c | ||
|
|
999d801896 |
@@ -31,6 +31,53 @@
|
|||||||
3. 可以安装其他的IDE工具进行Tex文件的编写和修改,推荐使用<a href="https://code.visualstudio.com/" target="_blank">Visual Studio Code</a>。
|
3. 可以安装其他的IDE工具进行Tex文件的编写和修改,推荐使用<a href="https://code.visualstudio.com/" target="_blank">Visual Studio Code</a>。
|
||||||
4. 编译时,请选择XeLaTex,有时候,可能需要连续编译两次,以得到正确的页码和图表编号。
|
4. 编译时,请选择XeLaTex,有时候,可能需要连续编译两次,以得到正确的页码和图表编号。
|
||||||
|
|
||||||
|
# 分支与编译器版本
|
||||||
|
|
||||||
|
本仓库按 **TeX Live 年份**组织分支,规则很简单:**分支名是哪一年,就说明该分支可以用那一年的 TeX Live 直接编译通过**。
|
||||||
|
|
||||||
|
| 分支 | 对应 TeX Live | beamer 版本 | 说明 |
|
||||||
|
|------|---------------|-------------|------|
|
||||||
|
| `main` | 最新版 | 最新 | 始终指向最新的年份分支(当前等于 `2026`) |
|
||||||
|
| `2026` | TeX Live 2026 | 3.77 | 无需改动源码即可编译通过 |
|
||||||
|
| `2025` | TeX Live 2025 | 3.72 | 无需改动源码即可编译通过 |
|
||||||
|
| `2024` | TeX Live 2024 | 3.71 | 无需改动源码即可编译通过 |
|
||||||
|
| `2023` | TeX Live 2023 | 3.69 | 适配 beamer 3.69 的 frametitle 变更,并修复 allcaps 选项 |
|
||||||
|
| `2022` | TeX Live 2022 | 3.66 | 原始基线,未做修改 |
|
||||||
|
|
||||||
|
## 我该用哪个分支
|
||||||
|
|
||||||
|
- **想用最新版本**:直接用 `main` 分支,并配合**最新版 TeX Live**。
|
||||||
|
- **本机已经装了某个特定年份的 TeX Live**:切到**同名的那个分支**即可。
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 例如本机是 TeX Live 2023,就用 2023 分支
|
||||||
|
git clone -b 2023 https://code.yangyq.net/laoyang/ouc-slide-latex-template.git
|
||||||
|
|
||||||
|
# 已经克隆过的仓库,可以这样切换
|
||||||
|
git checkout 2023
|
||||||
|
```
|
||||||
|
|
||||||
|
简单说:**编译器是哪一年的,就用哪一年的分支**,不需要自己去改模板代码。
|
||||||
|
|
||||||
|
## 为什么要这样分
|
||||||
|
|
||||||
|
beamer 的内部实现会随 TeX Live 版本变化,而模板中对内部宏的补丁(`\patchcmd`)会因此失效。最典型的一次是:
|
||||||
|
|
||||||
|
- **beamer 3.69(TeX Live 2023)** 起,`\beamer@@frametitle` 改用 `\beamer@insertframetitlecontinuation`,使得面向旧版写法的补丁匹配失败,报 `Patching original frame title failed`。
|
||||||
|
- 模板现已加入**版本自动判别**(依据 `\beamer@insertframetitlecontinuation` 是否存在,判断逻辑写在文件顶层),因此 `2023` 及之后的各年份分支**不需要再改动源码**。
|
||||||
|
- `2022` 分支保留原始写法,只保证在 TeX Live 2022(beamer 3.66)下编译通过。
|
||||||
|
|
||||||
|
## 维护约定
|
||||||
|
|
||||||
|
每当有新的 TeX Live 年份发布时:
|
||||||
|
|
||||||
|
1. 在新版本的 TeX Live 下,用 **XeLaTeX 编译当前的 `main`**;
|
||||||
|
2. 如果编译不通过,进行修复,注意保持向后兼容,不要破坏旧年份分支;
|
||||||
|
3. 修复通过后,新建一个**以该年份命名**的分支并提交;
|
||||||
|
4. 把该年份分支**快进合并到 `main`**,让 `main` 始终是最新版本。
|
||||||
|
|
||||||
|
> 附注:不同年份的 TeX Live 生成的 PDF 在体积上可能略有差异(例如 TeX Live 2024 的 xdvipdfmx 曾一度不做跨页图像去重,导致成品偏大约 4 倍),但**页面渲染内容是一致的**,不影响使用。
|
||||||
|
|
||||||
# 元素介绍
|
# 元素介绍
|
||||||
## 基本信息
|
## 基本信息
|
||||||
Tex文件的开头,是基本信息部分,可以根据需要添加`\title`{标题}、`\subtitle`{子标题}、`\author`{作者}、`\date`{\today}、`\institute`{所属机构}。
|
Tex文件的开头,是基本信息部分,可以根据需要添加`\title`{标题}、`\subtitle`{子标题}、`\author`{作者}、`\date`{\today}、`\institute`{所属机构}。
|
||||||
|
|||||||
BIN
Binary file not shown.
@@ -109,6 +109,11 @@
|
|||||||
\providecommand{\addfontfeature}[1]{} % defined only if latex or pdflatex is used
|
\providecommand{\addfontfeature}[1]{} % defined only if latex or pdflatex is used
|
||||||
\providecommand{\textls}[2][]{#2}{} % defined only if microtype is loaded
|
\providecommand{\textls}[2][]{#2}{} % defined only if microtype is loaded
|
||||||
|
|
||||||
|
%% \MakeTextUppercase 原本由 textcase 宏包提供,但本模板并未加载该宏包,
|
||||||
|
%% 导致 title/subtitle/part/frametitle 的 allcaps 选项报 Undefined control sequence。
|
||||||
|
%% 这里在未定义时退回到 LaTeX 内核的 \MakeUppercase(新版内核语义与 textcase 一致)。
|
||||||
|
\@ifundefined{MakeTextUppercase}{\let\MakeTextUppercase\MakeUppercase}{}
|
||||||
|
|
||||||
% 定义的一些其他命令
|
% 定义的一些其他命令
|
||||||
\def\beameroucslide@titleformat#1{#1}
|
\def\beameroucslide@titleformat#1{#1}
|
||||||
\def\beameroucslide@subtitleformat#1{#1}
|
\def\beameroucslide@subtitleformat#1{#1}
|
||||||
@@ -205,20 +210,39 @@
|
|||||||
{\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.69(TeX Live 2023)起 \beamer@@frametitle 的定义发生了变化:
|
||||||
{{%
|
% 用 \beamer@insertframetitlecontinuation 取代了 \usebeamertemplate*{frametitle continuation}。
|
||||||
\gdef\insertframetitle{{#2\ifnum\beamer@autobreakcount>0\relax{}\space%
|
% 因此这里按 beamer 版本分别处理,保证在 TeX Live 2022 与 2023 下都能编译通过。
|
||||||
\usebeamertemplate*{frametitle continuation}\fi}}%
|
% 注意:判断必须写在文件顶层(不能把 \patchcmd 嵌进 \@ifundefined 等宏的参数里),
|
||||||
\gdef\beamer@frametitle{#2}%
|
% 否则 \patchcmd 的搜索串会被改写而导致补丁失败。
|
||||||
\gdef\beamer@shortframetitle{#1}%
|
\ifcsname beamer@insertframetitlecontinuation\endcsname
|
||||||
}}
|
% 新版 beamer(TeX Live 2023 及以后):按新定义重写,并加入标题格式控制
|
||||||
{{%
|
\long\def\beamer@@frametitle[#1]#2{%
|
||||||
\gdef\insertframetitle{{\beameroucslide@frametitleformatcaps{#2}\ifnum%
|
\ifblank{#2}{}{%
|
||||||
\beamer@autobreakcount>0\relax{}\space%
|
\gdef\insertframetitle{{\beameroucslide@frametitleformatcaps{#2}%
|
||||||
\usebeamertemplate*{frametitle continuation}\fi}}%
|
\ifnum\beamer@autobreakcount>0\relax{}\space%
|
||||||
\gdef\beamer@frametitle{#2}%
|
\beamer@insertframetitlecontinuation\fi}}%
|
||||||
\gdef\beamer@shortframetitle{#1}%
|
\gdef\beamer@frametitle{#2}%
|
||||||
}}
|
\gdef\beamer@shortframetitle{#1}%
|
||||||
{}
|
}%
|
||||||
{\PackageError{beameroucslide}{Patching original frame title failed}\@ehc}
|
}%
|
||||||
|
\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
|
\makeatother
|
||||||
|
|||||||
Reference in New Issue
Block a user