问题(用户反馈):\flatpyramid 显示成「平行四边形」而不是梯形。 根因:tikz 的 trapezium 形状在给定 minimum width 时,会同时把上边和下边 撑到同一宽度,整体只是平移 —— 于是上下边等宽,就是一个平行四边形。 实测顶层顶点:上边宽 60.2pt、下边宽 60.2pt(完全相等)。 修复:不再使用 trapezium 形状,改为按显式坐标自绘梯形。 每一层的上边宽 = 上一层下边宽(斜边连续),各层中心对齐。 实测修复后(TeX Live 2025): 层 上边宽 下边宽 ① 42.5 78.7 ② 78.7 114.8 ③ 114.8 150.9 ④ 150.9 187.1 形状参数已提到代码顶部并加注释(\flpw 顶半宽 / \flbw 底半宽 / \fllyh 层高), 需要调整金字塔胖瘦或高矮时改这三个值即可。 已验证:TeX Live 2025 下 0 错误 0 溢出;跨版本渲染逐像素一致。
中国海洋大学幻灯片LaTex模板
中国海洋大学幻灯片LaTex非官方模板。
本模板修改自HelmholtzAI模板。在原有模板基础上进行了大量修改。
模板主要使用海大公布的标准色,包括海大蓝、海大天蓝、海大红、樱缤粉、文脉棕、专金、专银,以及后加的苍松绿、暮山紫、琥珀橙。
此外,使用了大量的信息框来增加模板的活力。
文件结构
模板中的文件主要包括:
- slide.tex:主文件,编写的演示文稿内容主要存放在该文件当中。
- oucslide.sty:模板的样式文件。
- font:字体文件夹,所有编译需要用到的字体。默认字体使用的是华为鸿蒙字体。
- theme:主题文件夹。
- beamercolorthemeOUCSlide.sty:颜色定义文件。
- beamerfontthemeOUCSlide.sty:字体定义文件。
- beamerinnerthemeOUCSlide.sty:内部元素定义文件。
- beamerouterthemeOUCSlide.sty:整体布局定义文件。
- beamerthemeOUCSlide.sty:主题定义文件。
- logos:模板中使用的Logo存放文件夹。
- figs:插入的图片文件夹。
- fontawesome.pdf:图标使用说明文件。
使用方法
- 从git上clone项目到本地。目前,共有多个git库供选择,分别是:Github、Gitee、Gitlab、阿里云Code。这些库都和源库保持一致和同步,从理论上来讲,使用任何一个库都可以。
- 安装Tex编译器,推荐使用TexLive,安装成功后,可以使用自带的TeXworks打开目录下的tex文件进行编译。
- 可以安装其他的IDE工具进行Tex文件的编写和修改,推荐使用Visual Studio Code。
- 编译时,请选择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 | 无需改动源码即可编译通过(PDF 体积说明见下) |
2023 |
TeX Live 2023 | 3.69 | 适配 beamer 3.69 的 frametitle 变更,并修复 allcaps 选项 |
2022 |
TeX Live 2022 | 3.66 | 保留早期 beamer 的写法(旧版 frametitle 补丁) |
两点说明
一、各分支的 PDF 都是用对应年份的 TeX Live 编译出来的。
也就是说,2023 分支里的 slides.pdf 出自 TeX Live 2023,
2026 分支里的出自 TeX Live 2026,以此类推。功能上各分支内容一致,
差别只在于适配各自 beamer 版本的源码写法。
二、2024 分支的 PDF 体积明显偏大(约 9.7 MB,其他年份约 2.4 MB)。
这是 TeX Live 2024 的 xdvipdfmx 一度不做跨页图像去重导致的,
从 TeX Live 2025 起恢复正常。页面渲染内容与其他年份完全一致,不影响使用。
我该用哪个分支
- 想用最新版本:直接用
main分支,并配合最新版 TeX Live。 - 本机已经装了某个特定年份的 TeX Live:切到同名的那个分支即可。
# 例如本机是 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 年份发布时:
- 在新版本的 TeX Live 下,用 XeLaTeX 编译当前的
main; - 如果编译不通过,进行修复,注意保持向后兼容,不要破坏旧年份分支;
- 修复通过后,新建一个以该年份命名的分支并提交;
- 把该年份分支快进合并到
main,让main始终是最新版本。
附注:不同年份的 TeX Live 生成的 PDF 在体积上可能略有差异(例如 TeX Live 2024 的 xdvipdfmx 曾一度不做跨页图像去重,导致成品偏大约 4 倍),但页面渲染内容是一致的,不影响使用。
元素介绍
基本信息
Tex文件的开头,是基本信息部分,可以根据需要添加\title{标题}、\subtitle{子标题}、\author{作者}、\date{\today}、\institute{所属机构}。
\newcommand{\last}{敬请批评指正!} 的作用是为了制作最后一页致谢页面而单独设置的,可以修改为任何致谢语句。
特殊页面
模板中有三个特殊的页面,分别是:标题页(首页)、目录页和结尾页。这三个页面由于其特殊性,不能使用frame的常规模板,因此,为它们创建了三个命令进行生成:
\maketitle
\makeoutline
\makelast
使用者三个命令后,将会自动创建首页、目录页和结尾页。
首页和结尾页,使用的是基本信息中的数据,而目录页的内容,将根据\section进行填充。
目录页样式(自适应方框)
目录页默认使用自适应方框样式:每一个一级标题(\section)被放进一个独立的方框里,方框的高度、以及方框内文字的字号,都会根据一级标题的数目自动计算,并且方框会自动均分、铺满整个目录页。章节少时方框又高又大、字号醒目;章节多时方框自动变矮、字号自动缩小,不需要手工调任何一个数字。
方框内的文字左对齐,左侧只留一点点缩进,读起来更像一份正常的目录。
配色:默认海大红,蓝色可选
目录页默认使用海大红(oucred)——和各章节标题页的颜色保持一致。
这是因为目录页上「目录」二字本身是海大蓝的,如果目录项再用蓝色,整页就分不出层次。用海大红正好和章节标题页呼应。
如果就喜欢蓝色,改一行即可切回海大蓝:
\toctheme{red} % 默认:海大红,与各章节标题页同色
\toctheme{blue} % 海大蓝,与目录页标题「目录」同色
三种方框样式
在导言区用一行命令即可切换,样式与配色可以自由组合:
\settocstyle{box} % 默认:浅色底 + 圆角框 + 圆形序号
\settocstyle{solid} % 实心色底 + 白色文字
\settocstyle{bar} % 白底 + 左侧粗色条
章节较多时(下面这张是 9 个一级标题),方框和字号会自动压缩:
可调参数
所有参数都可以在导言区用 \setlength 覆盖,一般不需要改:
| 参数 | 默认值 | 含义 |
|---|---|---|
\tocareamargin |
52pt |
目录区上下预留的高度(自动模式下从 \textheight 中扣除) |
\tocareaheight |
0pt |
直接指定目录区高度;0pt 表示自动 |
\tocboxgap |
10pt |
方框之间的理想间距(空间紧张时会自动压缩) |
\tocboxgapmin |
2pt |
方框之间允许的最小间距 |
\tocboxmaxheight |
110pt |
单个方框的最大高度 |
\tocboxleftpad |
2.5pt |
方框内文字距左边框的距离(只留一点点) |
\tocfontmax |
26pt |
方框内文字的最大字号 |
\tocfontwarn |
8pt |
字号低于该值时会给出警告 |
例如,希望方框之间更紧凑一些:
\setlength{\tocboxgap}{6pt}
几点说明
- 目录页需要连续编译两次:章节数目是从上一次编译生成的
.toc文件里读出来的。第一次编译时.toc还是空的,目录页会是空白,再编译一次即可正常。 - 方框的序号和标题是超链接,在 PDF 里点击会直接跳到对应章节。
- 一级标题太多时(大约 9 个以上),方框和字号会变得偏小,编译日志里会有
oucslide Warning提示。这种情况下建议合并章节,或者把目录页改回普通的列表样式。 - 如果确实想换回旧版那种简洁的列表目录,把
\makeoutline里的\ouc@toc@body换回\tableofcontents[hideallsubsections]即可(旧的模板定义仍保留在beamerouterthemeOUCSlide.sty中)。
使用分节
本模板使用分节进行整体规划,章节共三级,对应的关键字分别是:
\section
\subsection
\subsubsection
其中,\section 会有单独的页面进行显示。如下图所示。而且,section还将会出现在目录页面中。
\subsection 和 \subsubsection都没有单独的页面相对应,他们会出现在对应章节的frame中,作为标题进行呈现,并且加入了自动编号的效果。需要说明的是,\subsection是必须的,而 \subsubsection 却可有可无。他们呈现出的最终的效果,如下图所示。
需要注意的是,虽然frame的标题,是由subsection和subsubsection自动生成的,但是frame中的frametitle仍然是必须的,否则没有frametitle这个元素,标题无法自动填充。
使用Frame
章节确定好后,就可以增加Frame来编写幻灯片。使用代码:
\begin{frame}
\frametitle{测试}
\end{frame}
就可以插入一张幻灯片。
需要注意的是:如果幻灯片中使用了代码块,则需要加入关键字fragile。这样,引入的代码才能保持它们原有的样子,如下所示:
\begin{frame}[fragile]
\frametitle{测试}
\end{frame}
当然,也可以使用定义的特殊的frame模板来达到这种效果。
\begin{fragileframe}
\frametitle{测试}
\end{fragileframe}
他们的效果是一样的。
字体
模板使用的默认字体是华为鸿蒙字体 (HarmonyOS Sans)。该字体可以免费商用。
如果对字体不满意,可下载其他字体,放入fonts文件夹,并在beamerfontthemeOUCSlide.sty文件中修改。
推荐的字体包括:思源黑体、阿里普惠字体、OPPO字体、小米字体。这些字体基本上都可以免费商用,并且效果都很不错。关于他们是否能够继续免费商用的政策,请查阅其官方网站以得到最准确的信息。
颜色
根据海大公布的标准颜色,定义了相关颜色。其中文名称和代码如下表所示。
当然,也可以使用LaTex自带的颜色,例如white、black等。
| 名称 | 中文名 | 说明 |
|---|---|---|
| oucblue | 海大蓝 | 海大标准色 |
| ouclightblue | 海大天蓝 | 海大标准色 |
| oucred | 海大红 | 海大标准色 |
| ouccherry | 樱缤粉 | 海大标准色 |
| oucbrown | 文脉棕 | 海大标准色 |
| oucgolden | 专金 | 海大标准色 |
| oucsilver | 专银 | 海大标准色 |
| oucpine | 苍松绿 | 新增,深绿 |
| oucdusk | 暮山紫 | 新增,深紫 |
| oucamber | 琥珀橙 | 新增,深橘 |
新增的三个颜色
已有的浅色(樱缤粉、专金、专银)在内容多的时候不太够用,因此补充了三个较深的颜色——
深色的好处是和白色文字有足够的对比度,可以直接当作色块底色(pointbox、titlebox、
block 等)使用,不必再担心白字看不清。
| 名称 | 色值 | 白字对比度 | 命名与定位 |
|---|---|---|---|
oucpine |
RGB 30, 86, 64 | 8.54 | 苍松绿——取自传统色「苍松」,色相偏青的深绿,沉静稳重 |
oucdusk |
RGB 92, 58, 118 | 9.04 | 暮山紫——取自传统色「暮山紫」(暮色中的远山),深紫而不艳 |
oucamber |
RGB 196, 82, 16 | 4.60 | 琥珀橙——取自传统色「琥珀」,高饱和的深橘 |
三点说明:
- 琥珀橙和文脉棕不会混淆:文脉棕是「低饱和的暗褐」,琥珀橙是「高饱和的深橘」, 两者在饱和度上拉开了明显差距(色相接近,但饱和度 0.61 vs 0.98)。
- 三个新颜色同样带十个色阶(
oucpine10~oucpine90等),浅色等级可以当背景底。 - 对比度按 WCAG 计算,≥ 4.5 即白字清晰可读。三个新颜色都在 4.5 以上 (对比度越高,白字越清晰)。
颜色等级
为了显示更丰富的色彩,定义的海大标准色,每一种颜色,都有十个等级,等级越低,颜色越浅。例如:对于海大蓝,其等级颜色从oucblue90-oucblue10不等,分成10个等级。
信息框
信息框使用边框的形式,提升幻灯片的表现力。
主要的信息框包括:列表框(vcolorbox)、提示框(notebox、importantbox)、信息框(titlebox)、要点框(pointbox)、块(block、exampleblock、alertblock)、标题框(headbox)和文本框(textbox)。它们的效果,如下图所示。
要点框自动排布(pointboxgrid)
要点框数量多的时候,不需要自己摆 columns——用 pointboxgrid 环境会自动排成网格:
\begin{pointboxgrid}{高度}
\pointitem{标题}{颜色}{内容}
\pointitem{标题}{颜色}{内容}
...
\end{pointboxgrid}
排布规则:每行最多 4 个;超过 4 个自动分成多行,并尽量均匀(上行不少于下行)。
| 个数 | 排布 | 个数 | 排布 |
|---|---|---|---|
| 1~4 | 一行 | 9 | 3 + 3 + 3 |
| 5 | 3 + 2 | 10 | 4 + 3 + 3 |
| 6 | 3 + 3 | 11 | 4 + 4 + 3 |
| 7 | 4 + 3 | 12 | 4 + 4 + 4 |
| 8 | 4 + 4 | N | 行数 = ⌈N/4⌉,前 N mod 行数 行每行多放一个 |
几点说明:
- 高度参数的含义和
pointbox的height一样,是固定高度——内容别写超,超了会画到框外(见下)。数量多时记得把高度调小。 - 行数多了会超出页面底部。经验值:正文区高约 243pt,总高 ≈
69 + 行数×高度 + (行数−1)×25(pt)。 所以 4 行时高度不要超过 24pt。超过时编译日志里会有oucslide Warning提醒。 - 想让每行放更多/更少,可改
\l_ouc_pbg_max(默认 4);间距可改\l_ouc_pbg_gap(横向,默认 8pt)与\l_ouc_pbg_vgap(纵向,默认 6pt)。 - 单个要点框仍然可以像以前那样手写
columns+pointbox,两种用法并存。
图示组件(扁平风格)
模板自带 9 个扁平简约图示组件:圆角色块 + 实心纯色 + 白字 + 细箭头, 无渐变、无阴影、无立体。全部用纯 TikZ 绘制,不依赖任何外部绘图宏包。
颜色:一个或多个都可以
所有组件的颜色列表写在方括号里(可选参数)。写一个就是全部同色, 写多个就按顺序取色、不够时自动循环:
\flatflow[oucblue]{数据采集, 数据清洗, 模型训练, 结果评估} % 全部海大蓝
\flatflow[oucblue,oucred,oucpine,oucamber]{数据采集, 数据清洗, 模型训练, 结果评估}
% ← 4 个块 4 种颜色
\flatflow[oucred,oucblue]{块一, 块二, 块三, 块四, 块五, 块六}
% ← 2 色循环:红蓝红蓝红蓝
⚠️ 颜色必须写成方括号
[ ]。若误写成花括号{ },颜色会被当成第一个条目, 编译时会报图示组件的颜色要写在方括号里的明确错误(不会静默出错)。
九个组件速查
| 命令 | 说明 |
|---|---|
\flatflow[颜色]{条目1, 条目2, ...} |
横向箭头流程,自动等分满宽 |
\flatstack[颜色]{条目1, 条目2, ...} |
纵向流程 |
\flatcycle[颜色]{条目1, ...} |
循环图(弧线箭头首尾相接) |
\flathub[颜色]{中心文字}{环绕1, 环绕2, ...} |
中心辐射(中心圆 + 环绕卡片) |
\flatsteps[颜色]{条目1, ...} |
阶梯递进 |
\flattime[颜色]{年份列表}{事件列表} |
时间轴(节点上下交替) |
\flatquad[颜色]{左上}{右上}{左下}{右下} |
四象限 |
\flatpyramid[颜色]{顶层, ..., 底层} |
金字塔(上窄下宽) |
\flatcompare[左色][右色]{左标题}{左内容}{右标题}{右内容} |
左右对比 |
示例(slides.tex 里有完整的 5 页演示):
\flatflow[oucblue,oucred,oucpine,oucamber]{数据采集, 数据清洗, 模型训练, 结果评估}
\flathub[oucblue,oucred,oucpine,oucamber,oucdusk]{核心}{可行性, 必要性, 创新性, 实用性}
\flattime[oucblue,oucred,oucpine,oucdusk]{2020, 2021, 2023, 2025}{立项, 方案设计, 中期检查, 结题验收}
\flatcompare[oucpine][oucred]{优势}{响应快、成本低、易于维护}{不足}{精度受限、依赖数据质量}
\flatquad 与 \flatcompare 的颜色是独立的固定参数(分别 1 个和 2 个),
不参与循环取色。
几点说明
- 颜色可以直接用模板的 10 个颜色(
oucblue、oucred、oucpine、oucdusk、oucamber等)。 - 横向流程会自动把 N 个块加间隙摊满整行,不需要手算宽度。
- 纵向对比、四象限这类元素较宽,建议用
\begin{center}...\end{center}居中。 - 这套组件已用 TeX Live 2022~2026 逐一编译验证:0 错误、0 溢出,且跨版本渲染逐像素一致。
代码
模板可以插入代码块,使用lstlisting即可。
公式
模板中可以直接插入公式,和LaTex中没有什么区别。
脚注
可以在任何地方使用脚注。即便是在各种信息框中也可以。













