Files
ouc_latex_template/幻灯片/theme/beamerfontthemeOUCSlide.sty
T
laoyang 1f807e9cce 所有模板目录改为中文名,并入幻灯片与科技报告两个仓库(#3)
目录改名(git mv 保留历史,包名不变):
  exam/   -> 试卷/
  form/   -> 年度考核登记表/
  form2/  -> 劳务发放说明表/
  course/ -> 课程执行大纲/

改名即可编译:实测 6 个模板在含中文的目录下 XeLaTeX 均零报错,
PDF 逐页文本与改名前的版本完全一致(0 页差异,仅元数据时间戳变化)。

并入两个此前独立维护的仓库:
  ouc-slide-latex-template  -> 幻灯片/
  ouc-report-latex-template -> 科技报告/
带入了 theme/ fonts/ logos/ figs/ cls/ input/ 与 fontawesome.pdf,
字体随模板附带(无须在系统安装)。中间文件一律不入库。

同步修正的文档:根 README 目录表改为中文名并说明统一维护;
四个子 README 的标题;ouclw.sty 注释里对 form/ 的交叉引用;
幻灯片与科技报告 README 里「从旧仓库 clone」「按年份切分支」等已失效的说明
(并入后只有 main 一个分支,各年份 TeX Live 通用)。

两个迁入模板的 PDF 保留源仓库原版(逐字节一致),未重新编译:
源 PDF 出自 TeX Live 2026,本机为 2022,重新编译会让结尾页装饰层定位
产生细微偏移,保留原版以保证样张与原来完全一致。
2026-10-26 18:31:04 +08:00

249 lines
9.7 KiB
TeX
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
%!TEX program = xelatex
%% 版本:1.0
%% 作者:杨永全
%% 本文件的主要作用,是定义各种元素的字体
%% 完成日期:2022-05-09
\usepackage[UTF8]{ctex}
%\usepackage{xeCJK}
%字体
%设置英文字体 鸿蒙字体
\setmainfont[
Path=fonts/,
BoldFont=HarmonyOS_Sans_Bold.ttf,
ItalicFont=HarmonyOS_Sans_Regular_Italic.ttf,
BoldItalicFont=HarmonyOS_Sans_Bold_Italic.ttf,
]{HarmonyOS_Sans_Regular.ttf}
\setsansfont[
Path=fonts/,
BoldFont=HarmonyOS_Sans_Bold.ttf,
ItalicFont=HarmonyOS_Sans_Regular_Italic.ttf,
BoldItalicFont=HarmonyOS_Sans_Bold_Italic.ttf,
]{HarmonyOS_Sans_Regular.ttf}
\setmonofont[
Path=fonts/
]{HarmonyOS_Sans_Regular.ttf}
%设置中文字体 鸿蒙字体
\setCJKmainfont[
Path=fonts/,
BoldFont=HarmonyOS_Sans_SC_Bold.ttf,
ItalicFont=HarmonyOS_Sans_SC_Regular.ttf,
BoldItalicFont=HarmonyOS_Sans_SC_Bold.ttf
]{HarmonyOS_Sans_SC_Regular.ttf}
\setCJKsansfont[
Path=fonts/,
BoldFont=HarmonyOS_Sans_SC_Bold.ttf,
ItalicFont=HarmonyOS_Sans_SC_Regular.ttf,
BoldItalicFont=HarmonyOS_Sans_SC_Bold.ttf
]{HarmonyOS_Sans_SC_Regular.ttf}
\setCJKmonofont[
Path=fonts/
]{HarmonyOS_Sans_SC_Regular.ttf}
%以下为原模板代码,未做改动
\mode<presentation>
\setbeamerfont{sectiontitle}{size*={18pt}{20pt},series=\bfseries} % section标题字体大小
\setbeamerfont{title}{size*={15pt}{16pt},series=\bfseries} % 标题字体大小
\setbeamerfont{subtitle short}{size*={11pt}{12pt},series=\mdseries} % 副标题 短的 字体大小
\setbeamerfont{subtitle long}{size*={9pt}{9pt},series=\mdseries} % 副标题 长的 字体大小
\setbeamerfont*{subtitle}{parent=subtitle long} % 使用父标题
\setbeamerfont*{subtitle}{parent=subtitle short} % 使用父标题
%\setbeamerfont{normal text}{size*={8pt}{9pt}} % 14pt, baselineskip 18pt
\setbeamerfont{footline}{size*={6pt}{7pt}} %页脚文字大小
%\setbeamerfont{frametitle}{size*={16pt}{16pt},series=\bfseries} %30pt, baselineskip 36pt
\setbeamerfont{framesubtitle}{size*={10pt}{11pt},series=\mdseries} % 普通页面,副标题的字体大小
% 特殊文本域的字体设置
\setbeamerfont{caption}{size=\small}
\setbeamerfont{caption name}{parent={structure,caption}}
\setbeamerfont{date}{size*={10pt}{10pt}}
\setbeamerfont{footline}{parent={tiny structure}}
\setbeamerfont{headline}{parent={tiny structure}}
\setbeamerfont{institute}{size=\footnotesize, series=\itshape}
\setbeamerfont{navigation symbols}{size*={7pt}{8pt}}
\setbeamerfont{section in toc}{parent=structure}
\setbeamerfont{section in toc shaded}{parent=section in toc}
% 列表
\setbeamerfont{item}{parent=structure}
\setbeamerfont{subitem}{parent=item}
\setbeamerfont{subsubitem}{parent=subitem}
\setbeamerfont{item projected}{size=\tiny, parent={item, projected text}}
\setbeamerfont{subitem projected}{parent=item projected}
\setbeamerfont{subsubitem projected}{parent=subitem projected}
\setbeamerfont{description item}{parent=item}
\setbeamerfont{enumerate item}{parent=item}
\setbeamerfont{enumerate subitem}{parent=subitem}
\setbeamerfont{enumerate subsubitem}{parent=subsubitem}
\setbeamerfont{itemize/enumerate body}{}
\setbeamerfont{itemize/enumerate subbody}{size=\small}
\setbeamerfont{itemize/enumerate subsubbody}{size=\footnotesize}
\setbeamerfont{itemize item}{parent=item}
\setbeamerfont{itemize subitem}{parent=subitem}
\setbeamerfont{itemize subsubitem}{parent=subsubitem}
\makeatletter
%% 字母间距
\providecommand{\emptydummyb}[1]{} % eats argument of \uppercase() and and \addfontfeature{}
\providecommand{\emptydummya}[2][]{#2}{} % eats optional argument of textls and forwards #2 argument
\providecommand{\addfontfeature}[1]{} % defined only if latex or pdflatex is used
\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@subtitleformat#1{#1}
\def\beameroucslide@partformat#1{#1}
\def\beameroucslide@frametitleformat#1{#1}
%% 标题文字定义
\pgfkeys{
/beameroucslide/font/title/.cd,
.is choice,
.default=regular,
regular/.code={%
\let\beameroucslide@titleformatcaps\emptydummya%
\let\beameroucslide@titleformatspacinga\emptydummya%
\let\beameroucslide@titleformatspacingb\emptydummyb%
},
allcaps/.code={%
\let\beameroucslide@titleformatcaps\MakeTextUppercase%
\let\beameroucslide@titleformatspacinga\emptydummya%
\let\beameroucslide@titleformatspacingb\emptydummyb%
},
}
%% 副标题文字定义
\pgfkeys{
/beameroucslide/font/subtitle/.cd,
.is choice,
.default=allcaps,
regular/.code={%
\let\beameroucslide@subtitleformatcaps\emptydummya%
\let\beameroucslide@subtitleformatspacinga\emptydummya%
\let\beameroucslide@subtitleformatspacingb\emptydummyb%
\setbeamerfont{subtitle long}{size*={9pt}{11pt},series=\bfseries} % 18pt, baselineskip 22pt
},
allcaps/.code={%
\let\beameroucslide@subtitleformatcaps\MakeTextUppercase%
\let\beameroucslide@subtitleformatspacinga\emptydummya%
\let\beameroucslide@subtitleformatspacingb\emptydummyb%
\setbeamerfont{title}{size*={16pt}{16pt},series=\bfseries} % 30pt, baselineskip 36pt%
},
}
%% 普通页面文字设置
\pgfkeys{
/beameroucslide/font/frametitle/.cd,
.is choice,
.default=allcaps,
regular/.code={%
\let\beameroucslide@frametitleformatcaps\emptydummya%
\let\beameroucslide@frametitleformatspacinga\emptydummya%
\let\beameroucslide@frametitleformatspacingb\emptydummyb%
\setbeamerfont{frametitle}{size*={14pt}{18pt},series=\bfseries} % 32pt, baselineskip 36pt%
},
allcaps/.code={%
\let\beameroucslide@frametitleformatcaps\MakeTextUppercase%
\let\beameroucslide@frametitleformatspacinga\emptydummya%
\let\beameroucslide@frametitleformatspacingb\emptydummyb%
\setbeamerfont{frametitle}{size*={14pt}{18pt},series=\bfseries} % 32pt, baselineskip 36pt%
},
}
%% 段落文字设置
\pgfkeys{
/beameroucslide/font/part/.cd,
.is choice,
.default=allcaps,
regular/.code={%
\let\beameroucslide@partformatcaps\emptydummya%
\let\beameroucslide@partformatspacinga\emptydummya%
\let\beameroucslide@partformatspacingb\emptydummyb%
\setbeamerfont{part}{size*={16pt}{18pt},series=\bfseries} % 30pt, baselineskip 36pt%
},
allcaps/.code={%
\let\beameroucslide@partformatcaps\MakeTextUppercase%
\let\beameroucslide@partformatspacinga\emptydummya%
\let\beameroucslide@partformatspacingb\emptydummyb%
\setbeamerfont{part}{size*={16pt}{18pt},series=\bfseries} % 30pt, baselineskip 36pt%
},
}
% redefine beamer title, subtitle, part and frametitle command
\patchcmd{\beamer@title}%
{\def\inserttitle{#2}}%
{\protected\def\inserttitle{{\beameroucslide@titleformatspacingb{LetterSpace=15.0}\beameroucslide@titleformatcaps{\beameroucslide@titleformatspacinga[120]{#2}}}}}%
{}%
{\PackageError{beameroucslide}{Patching original title failed}\@ehc}
\patchcmd{\beamer@subtitle}%
{\def\insertsubtitle{#2}}%
{\protected\def\insertsubtitle{{\beameroucslide@subtitleformatspacingb{LetterSpace=15.0}\beameroucslide@subtitleformatcaps{\beameroucslide@subtitleformatspacinga[120]{#2}}}}}%
{}%
{\PackageError{beameroucslide}{Patching original subtitle failed}\@ehc}
\patchcmd{\beamer@part}%
{\def\insertpart{\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}
% beamer 3.69(TeX Live 2023)起 \beamer@@frametitle 的定义发生了变化:
% 用 \beamer@insertframetitlecontinuation 取代了 \usebeamertemplate*{frametitle continuation}。
% 因此这里按 beamer 版本分别处理,保证在 TeX Live 2022 与 2023 下都能编译通过。
% 注意:判断必须写在文件顶层(不能把 \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