summaryrefslogtreecommitdiff
path: root/Master/texmf-dist
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2022-04-09 20:29:34 +0000
committerKarl Berry <karl@freefriends.org>2022-04-09 20:29:34 +0000
commitdc3f6c27d3ca58b293c798446665a35176d9ffc0 (patch)
tree4786e956de387b4b3e6f0d3f7f55ed8aab43624c /Master/texmf-dist
parentd170ae99c358f2add1c0076626bb0204d778b914 (diff)
xduts (9apr22)
git-svn-id: svn://tug.org/texlive/trunk@62987 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist')
-rw-r--r--Master/texmf-dist/doc/xelatex/xduts/README.md26
-rw-r--r--Master/texmf-dist/doc/xelatex/xduts/xduts.pdfbin0 -> 306881 bytes
-rw-r--r--Master/texmf-dist/doc/xelatex/xduts/xidian-logo.pdfbin0 -> 463660 bytes
-rw-r--r--Master/texmf-dist/doc/xelatex/xduts/xidian-text.pdfbin0 -> 416455 bytes
-rw-r--r--Master/texmf-dist/source/xelatex/xduts/xduts.dtx2351
-rw-r--r--Master/texmf-dist/source/xelatex/xduts/xduts.ins29
-rw-r--r--Master/texmf-dist/tex/xelatex/xduts/xduugthesis.cls914
7 files changed, 3320 insertions, 0 deletions
diff --git a/Master/texmf-dist/doc/xelatex/xduts/README.md b/Master/texmf-dist/doc/xelatex/xduts/README.md
new file mode 100644
index 00000000000..120464e3bf7
--- /dev/null
+++ b/Master/texmf-dist/doc/xelatex/xduts/README.md
@@ -0,0 +1,26 @@
+# XDUTS
+
+XDUTS(Xidian University TeX Suite)是面向西安电子科技大学本科生/研究生的LaTeX3模板套装,支持XeLaTeX,支持TeX Live、MacTeX、MiKTeX,支持Windows、macOS、GNU/Linux、Overleaf和TeXPage。旨在帮助西安电子科技大学本科生/研究生撰写开题报告/学位论文,目前有:
+
+- xduugthesis,本科毕业设计论文
+
+即将支持:
+
+- xduugtp,本科生开题报告
+- xdupgthesis,研究生学位论文
+- xdupgtp,研究生开题报告
+
+# 获取
+
+```shell
+xetex xduts.ins
+xelatex xduts.dtx
+makeindex -s gind.ist -o xduts.ind xduts.idx
+makeindex -s gglo.ist -o xduts.gls xduts.glo
+xelatex xduts.dtx
+xelatex xduts.dtx
+```
+
+# 许可
+
+This material is subject to [the LaTeX Project Public License 1.3c](https://ctan.org/license/lppl1.3).
diff --git a/Master/texmf-dist/doc/xelatex/xduts/xduts.pdf b/Master/texmf-dist/doc/xelatex/xduts/xduts.pdf
new file mode 100644
index 00000000000..e59fc17ef2a
--- /dev/null
+++ b/Master/texmf-dist/doc/xelatex/xduts/xduts.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/xelatex/xduts/xidian-logo.pdf b/Master/texmf-dist/doc/xelatex/xduts/xidian-logo.pdf
new file mode 100644
index 00000000000..1f676b4fafc
--- /dev/null
+++ b/Master/texmf-dist/doc/xelatex/xduts/xidian-logo.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/xelatex/xduts/xidian-text.pdf b/Master/texmf-dist/doc/xelatex/xduts/xidian-text.pdf
new file mode 100644
index 00000000000..aca2d6291ad
--- /dev/null
+++ b/Master/texmf-dist/doc/xelatex/xduts/xidian-text.pdf
Binary files differ
diff --git a/Master/texmf-dist/source/xelatex/xduts/xduts.dtx b/Master/texmf-dist/source/xelatex/xduts/xduts.dtx
new file mode 100644
index 00000000000..81d798f991a
--- /dev/null
+++ b/Master/texmf-dist/source/xelatex/xduts/xduts.dtx
@@ -0,0 +1,2351 @@
+% \iffalse
+%<*driver>
+\ProvidesFile{xduts.dtx}
+[2022/04/09 v0.5.2.1 Xidian University TeX Suite]
+%</driver>
+%<class>\NeedsTeXFormat{LaTeX2e}
+%<class>\RequirePackage{expl3}
+%<xduugthesis>\ProvidesExplClass{xduugthesis}
+%<xduugthesis> {2022/04/09}{0.5.2.1}{Xidian University Undergraduate Thesis class}
+%<*driver>
+\documentclass{ctxdoc}
+\changes{v0.5.2.1}{2022/04/09}{修改项目名称}
+\changes{v0.4.2.1}{2022/04/05}{调整文档目录缩进}
+\usepackage{tocloft}
+\setlength{\cftsecindent}{0em}
+\setlength{\cftsubsecindent}{1em}
+\setlength{\cftsubsubsecindent}{2em}
+\setlength{\cftparaindent}{3em}
+\setlength{\cftsubparaindent}{4em}
+\ctexset{
+ secnumdepth = 5,
+ subparagraph = {
+ afterskip = 1ex plus .2ex,
+ runin = false
+ }
+}
+\setcounter{tocdepth}{5}
+\usepackage{hologo}
+\usepackage{fetamont}
+\usepackage{xurl}
+\usepackage{xspace}
+\xspaceaddexceptions{。?!,、;:“”‘’—….--~·《》<>_}
+\usepackage{tabularx}
+\newcolumntype{Y}{>{\centering\arraybackslash}X}
+\usepackage{multirow}
+\usepackage{makecell}
+% 交叉引用
+\newcommand{\secref}[1]{第\xspace\ref{#1}\xspace{节}}
+\newcommand{\tableref}[1]{\tablename\xspace\ref{#1}\xspace}
+% 文档类选项
+\newcommand{\optx}[1]{\xspace\opt{#1}\xspace}
+% /name LaTeX3控制序列
+\newcommand{\csx}[1]{\xspace\cs{#1}\xspace}
+% /name 传统LaTeX2e命令
+\newcommand{\tnx}[1]{\xspace\tn{#1}\xspace}
+% <name> LaTeX3键值
+\newcommand{\metax}[1]{\xspace\meta{#1}\xspace}
+% LaTeX3键值对
+\newcommand{\breakablethinspace}{\hskip 0.16667em\relax}
+\newcommand{\kvoptx}[2]{\xspace\texttt{#1\breakablethinspace=\breakablethinspace#2}\xspace}
+% {<name>} LaTeX2e参数
+\newcommand{\argx}[1]{\xspace\Arg{#1}\xspace}
+% [<name>] LaTeX2e可选参数
+\newcommand{\oargx}[1]{\xspace\Arg{#1}\xspace}
+% 文件
+\newcommand{\filex}[1]{\xspace\texttt{#1}\xspace}
+% 环境
+\newcommand{\envx}[1]{\xspace\env{#1}\xspace}
+% 宏包
+\newcommand{\pkgx}[1]{\xspace\pkg{#1}\xspace}
+% 文档类
+\newcommand{\clsx}[1]{\xspace\cls{#1}\xspace}
+% 值
+\newcommand{\valuex}[1]{\xspace\texttt{#1}\xspace}
+% 命令
+\newcommand{\cmdx}[1]{\xspace\texttt{#1}\xspace}
+% 链接
+\newcommand{\footurl}[1]{\footnote{\url{#1}}}
+\newcommand{\ctanurl}[1]{\href{https://mirrors.ustc.edu.cn/CTAN/#1}{\ttfamily CTAN://#1}}
+\newcommand{\footctan}[1]{\footnote{\ctanurl{#1}}}
+% logo
+\newcommand{\xduts}{{\bfseries\ffmfamily XDUTS}}
+\newcommand{\texlive}{\TeX{} Live}
+\newcommand{\mactex}{Mac\TeX{}}
+\newcommand{\miktex}{\xspace\hologo{MiKTeX}\xspace}
+\newcommand{\bibtex}{\xspace\hologo{BibTeX}\xspace}
+\newcommand{\biber}{\xspace\hologo{biber}\xspace\xspace}
+% arguments list
+\setlist[arguments]{label=\texttt{\#\arabic*}\,:}
+% listings
+\definecolor{xdu-ai-orange}{cmyk}{0,0.75,1,0}
+\definecolor{xdu-blue}{cmyk}{0.80,0.50,0,0}
+\definecolor{xdu-chem-red}{cmyk}{0.28,0.95,0.84,0}
+\definecolor{xdu-cs-green}{cmyk}{0.60,0.23,1,0}
+\definecolor{xdu-magenta}{cmyk}{0.05,1,0.55,0}
+\definecolor{xdu-violet}{cmyk}{0.50,1,0,0.40}
+\usepackage{listings}
+\lstdefinestyle{style@base}
+ {
+ basewidth = 0.5 em,
+ gobble = 3,
+ lineskip = 3 pt,
+ frame = l,
+ framerule = 1 pt,
+ framesep = 0 pt,
+ xleftmargin = 2 em,
+ xrightmargin = 3 em,
+ escapeinside = {(*}{*)},
+ breaklines = true,
+ basicstyle = \small\ttfamily,
+ keywordstyle = \bfseries\color{xdu-violet},
+ commentstyle = \itshape\color{white!50!gray},
+ stringstyle = \color{xdu-chem-red},
+ backgroundcolor = \color{white!95!gray}
+ }
+\lstdefinestyle{style@shell}
+ {
+ style = style@base,
+ rulecolor = \color{xdu-magenta},
+ language = bash,
+ alsoletter = {-},
+ emphstyle = \color{xdu-cs-green}
+ }
+\lstdefinestyle{style@latex}
+ {
+ style = style@base,
+ rulecolor = \color{xdu-blue},
+ language = [LaTeX]TeX,
+ alsoletter = {*, -},
+ texcsstyle = *\color{xdu-violet},
+ emphstyle = [1]\color{xdu-ai-orange},
+ emphstyle = [2]\color{xdu-cs-green}
+ }
+\lstnewenvironment{shellexample}[1][]{%
+ \lstset{style=style@shell, #1}}{}
+\lstnewenvironment{latexexample}[1][]{%
+ \lstset{style=style@latex, #1}}{}
+\begin{document}
+\DocInput{\jobname.dtx}
+\IndexLayout
+\PrintChanges
+\PrintIndex
+\end{document}
+%</driver>
+% \fi
+% \CheckSum{822}
+% \CharacterTable
+% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+% Digits \0\1\2\3\4\5\6\7\8\9
+% Exclamation \! Double quote \" Hash (number) \#
+% Dollar \$ Percent \% Ampersand \&
+% Acute accent \' Left paren \( Right paren \)
+% Asterisk \* Plus \+ Comma \,
+% Minus \- Point \. Solidus \/
+% Colon \: Semicolon \; Less than \<
+% Equals \= Greater than \> Question mark \?
+% Commercial at \@ Left bracket \[ Backslash \\
+% Right bracket \] Circumflex \^ Underscore \_
+% Grave accent \` Left brace \{ Vertical bar \|
+% Right brace \} Tilde \~}
+% \GetFileInfo{\jobname.dtx}
+% \title{\bfseries\xduts{}手册}
+% \author{\href{https://github.com/note286/}{note286}}
+% \date{\href{https://github.com/note286/xduts/releases/tag/\fileversion/}{\fileversion}~(\filedate)}
+% \maketitle
+% \thispagestyle{empty}
+% \begin{abstract}
+% \xduts{}是面向西安电子科技大学本科生/研究生的\LaTeXiii{}模板套装,
+% 支持\XeLaTeX{},
+% 支持\texlive{}、\mactex{}、\miktex{},
+% 支持Windows、macOS、GNU/Linux、Overleaf和TeXPage。
+% \end{abstract}
+% \renewcommand\abstractname{免责声明}
+% \begin{abstract}
+% \noindent
+% \begin{enumerate}
+% \item 本模板的发布遵守
+% \LaTeX{} Project Public License\footurl{https://www.latex-project.org/lppl.txt},
+% 使用前请认真阅读协议内容。
+% \item 任何个人或组织以本模板为基础进行修改、扩展而生成的新的专用模板,
+% 请严格遵守\LaTeX{} Project Public License,
+% 由于违犯协议而引起的任何纠纷争端均与本模板作者无关。
+% \end{enumerate}
+% \end{abstract}
+% \clearpage
+% \tableofcontents
+% \clearpage
+% \section{介绍}
+% \xduts{} (Xidian University \TeX{} Suite)
+% 是为了帮助西安电子科技大学本科生/研究生撰写开题报告/学位论文而编写的\LaTeX{}模板套装,目前有:
+% \begin{itemize}
+% \item \clsx{xduugthesis},本科毕业设计论文。
+% \end{itemize}
+% \par
+% 本文档将尽量完整的介绍模板的使用方法,
+% 如有不清楚之处,或者想提出改进建议,
+% 可以在GitHub Issues\footurl{https://github.com/note286/xduts/issues/}
+% 参与讨论或提问。另外,不接受任何Pull Requests。
+% \par
+% 请在最新版\LaTeX{}环境中使用最新版\xduts{},
+% 《一份(不太)简短的\LaTeXe{}介绍》\footctan{info/lshort/chinese/lshort-zh-cn.pdf}
+% 中提及的内容本文档将不再提及。
+% \section{贡献者}
+% \xduts{}的开发过程中,维护者为
+% \href{https://github.com/note286/}{\ttfamily @note286}。
+% 同时,也要感谢所有在GitHub和睿思上提出问题的同学、老师们。
+% \xduts{}的持续发展,离不开你们的帮助与支持。
+% \section{致谢}
+% 在学习文学编程的过程中,
+% 《在\LaTeX{}中进行文学编程》\footurl{https://liam.page/2015/01/23/literate-programming-in-latex/}
+% 和《Good things come in little packages: An introduction to writing .ins and .dtx files》\footurl{https://www.tug.org/TUGboat/tb29-2/tb92pakin.pdf}
+% 提供了很大帮助。
+% 在文档的编写过程中,参考了
+% \filex{ctex.dtx}\footctan{language/chinese/ctex/ctex.dtx}、
+% \filex{fduthesis.dtx}\footctan{macros/latex/contrib/fduthesis/fduthesis.dtx}、
+% \filex{njuthesis.dtx}\footctan{macros/unicodetex/latex/njuthesis/njuthesis.dtx}、
+% \filex{thuthesis.dtx}\footctan{macros/latex/contrib/thuthesis/thuthesis.dtx}。
+% \StopEventually{}
+% \section{使用说明}
+% \subsection{基本用法}
+% \changes{v0.5.1.2}{2022/04/07}{增加编译说明}
+% \LaTeX{}本身是命令行程序,通过不同的命令调用所需的编译引擎,编辑器提供的快捷按钮实际只是做了包装。\xduts{}仅支持\XeLaTeX{},参考文献默认使用\biber{},也可以切换为\bibtex{},如何编译\LaTeX{}请学习《一份(不太)简短的\LaTeXe{}介绍》中相关内容。
+% \subsubsection{xduugthesis}
+% \paragraph{标准结构}
+% 典型的\clsx{xduugthesis}主文件结构应该如下所示:
+% \begin{latexexample}[moretexcs={\xdusetup,\frontmatter,\mainmatter,\chapter,\backmatter},emph={[1]document}]
+% \documentclass{xduugthesis}
+% \xdusetup{}
+% \begin{document}
+% \frontmatter
+% \mainmatter
+% \chapter{欢迎}
+% 使用\LaTeX{}!
+% \backmatter
+% \end{document}
+% \end{latexexample}
+% \paragraph{命令与环境}
+% \subparagraph{附录环境}
+% 附录位于参考文献后,即在\tnx{backmatter}后。
+% \begin{latexexample}[emph={[1]appendixes}]
+% \begin{appendixes}
+% \chapter{这是一个附录}
+% \chapter{这是另一个附录}
+% \end{appendixes}
+% \end{latexexample}
+% \subsection{参数设置}
+% \begin{function}[added=2022-03-07]{\xdusetup}
+% \begin{syntax}
+% \tnx{xdusetup}=\argx{键值列表}
+% \end{syntax}
+% 本模板提供了一系列选项,可自行配置。载入文档类之后,以下所有选项均可通过统一的命令\tnx{xdusetup}来设置。下文中尖括号内列出了若干个允许的选项,其中加粗的为默认选项。
+% \changes{v0.5.1.1}{2022/04/06}{增加xdusetup配置文档}
+% \csx{xdusetup}的参数是一组由(英文)逗号隔开的选项列表,列表中的选项通常是\kvoptx{\metax{key}}{\metax{value}}的形式。
+% \csx{xdusetup}采用\LaTeXiii{}风格的键值设置,支持不同类型以及多种层次的选项设定。键值列表中,“|=|”左右的空格不影响设置;但需注意,参数列表中不可以出现空行。
+% 一些选项包含子选项,如\optx{style}和\optx{info}等,它们可以按如下两种等价方式来设定:
+% \begin{latexexample}[morekeywords={\xdusetup},emph={[1]style,cjk-font,latin-font,info,title,author,department}]
+% \xdusetup{
+% style = {cjk-font = adobe, latin-font = tacn},
+% info = {
+% title = {论如何让用户认真阅读文档},
+% author = {张三},
+% department = {排版学院}
+% }
+% }
+% \end{latexexample}
+% 或者
+% \begin{latexexample}[morekeywords={\xdusetup},emph={[1]style,cjk-font,latin-font,info,title,author,department}]
+% \xdusetup{
+% style / cjk-font = adobe,
+% style / latin-font = tacn,
+% info / title = {论如何让用户认真阅读文档},
+% info / author = {张三},
+% info / department = {排版学院}
+% }
+% \end{latexexample}
+% \end{function}
+% \subsubsection{通用}
+% \paragraph{字体配置}
+% 设置字体配置后或不手动配置而使用默认值,请确保相应字体文件已安装。
+% \begin{function}[added=2022-03-06]{style/cjk-font}
+% \begin{syntax}
+% \optx{style/cjk-font}=\metax{adobe|fandol|founder|sinotype|(win)|none}
+% \end{syntax}
+% 设置中文字体,具体配置见\tableref{tab:cjk-font}。
+% \end{function}
+% \begin{optdesc}
+% \item[none] 关闭内置中文字体配置,需自行配置中文字体。
+% \end{optdesc}
+% \begin{table}
+% \begin{threeparttable}
+% \caption{中文字体配置}
+% \label{tab:cjk-font}
+% \centering
+% \begin{tabularx}{\linewidth}{cccc}
+% \toprule
+% \strong{选项名称} & \strong{罗马字体族} & \strong{无衬线字体族} & \strong{打字机字体族} \\
+% \midrule
+% |adobe|\tnote{1} & Adobe 宋体 Std/Adobe 楷体 Std & Adobe 黑体 Std & Adobe 仿宋 Std \\
+% |fandol| & FandolSong/FandolKai & FandolHei & FandolFang \\
+% |founder|\tnote{2} & 方正书宋_GBK/方正楷体_GBK & 方正黑体_GBK & 方正仿宋_GBK \\
+% |sinotype|\tnote{3} & 华文宋体/华文楷体 & 华文细黑/华文黑体 & 华文仿宋 \\
+% |win|\tnote{4} & 中易宋体/中易楷体 & 中易黑体 & 中易仿宋 \\
+% \bottomrule
+% \end{tabularx}
+% \begin{tablenotes}
+% \item [1] \filex{adobesongstd-light.otf}、\filex{adobekaitistd-regular.otf}、\filex{adobeheitistd-regular.otf}和\filex{Adobe-Fangsong-Std-R-Font.otf}。
+% \item [2] \filex{FZShuSong-Z01.ttf}、\filex{FZKai-Z03.ttf}、\filex{FZHei-B01.ttf}和\filex{FZFSK.TTF}。
+% \item [3] \filex{STSONG.TTF}、\filex{STKAITI.TTF}、\filex{STXIHEI.TTF}、\filex{STHeiti.ttf}和\filex{STFANGSO.TTF}。
+% \item [4] \filex{simsun.ttc}、\filex{simkai.ttf}、\filex{simhei.ttf}和\filex{simfang.ttf}。
+% \end{tablenotes}
+% \end{threeparttable}
+% \end{table}
+% \begin{function}[added=2022-04-01]{style/cjk-fake-bold}
+% \begin{syntax}
+% \optx{style/cjk-fake-bold}=\metax{伪粗体粗细程度}
+% \end{syntax}
+% 设置中文字体伪粗体粗细程度。默认为\valuex{3},对于部分存在对应的粗体字体的中文字体,如FandolSong和FandolHei等,该选项不生效。
+% \end{function}
+% \begin{function}[added=2022-04-01]{style/cjk-fake-slant}
+% \begin{syntax}
+% \optx{style/cjk-fake-slant}=\metax{伪斜体倾斜程度}
+% \end{syntax}
+% 设置中文字体伪斜体倾斜程度。默认为\valuex{0.2}。
+% \end{function}
+% \begin{function}[added=2022-03-06]{style/latin-font}
+% \begin{syntax}
+% \optx{style/latin-font}=\metax{(tacn)|thcs|none}
+% \end{syntax}
+% 设置英文字体,具体配置见\tableref{tab:latin-font}。
+% \end{function}
+% \begin{optdesc}
+% \item[none] 关闭内置英文字体配置,需自行配置英文字体。
+% \end{optdesc}
+% \begin{table}
+% \begin{threeparttable}
+% \caption{英文字体配置}
+% \label{tab:latin-font}
+% \centering
+% \begin{tabularx}{\linewidth}{cYYY}
+% \toprule
+% \strong{选项名称} & \strong{罗马字体族} & \strong{无衬线字体族} & \strong{打字机字体族} \\
+% \midrule
+% |tacn|\tnote{1} & Times New Roman & Arial & Courier New \\
+% |thcs|\tnote{2} & Times New Roman & Helvetica & Courier Std \\
+% \bottomrule
+% \end{tabularx}
+% \begin{tablenotes}
+% \item [1] \filex{times.ttf}、\filex{timesbd.ttf}、\filex{timesi.ttf}、\filex{timesbi.ttf}、\filex{arial.ttf}、\filex{arialbd.ttf}、\filex{ariali.ttf}、\filex{arialbi.ttf}、\filex{cour.ttf}、\filex{courbd.ttf}、\filex{couri.ttf}和\filex{courbi.ttf}。
+% \item [2] \filex{times.ttf}、\filex{timesbd.ttf}、\filex{timesi.ttf}、\filex{timesbi.ttf}、\filex{Helvetica.ttf}、\filex{Helvetica~Bold.ttf}、\filex{Helvetica~Oblique.ttf}、\filex{Helvetica~Bold~Oblique.ttf}、\filex{CourierStd.otf}、\filex{CourierStd-Bold.otf}、\filex{CourierStd-Oblique.otf}和\filex{CourierStd-BoldOblique.otf}。
+% \end{tablenotes}
+% \end{threeparttable}
+% \end{table}
+% \begin{function}[added=2022-03-06,updated=2022-03-09]{style/math-font}
+% \begin{syntax}
+% \optx{style/math-font}=\metax{asana|cambria|(cm)|fira|garamond|lm|...|termes|xits|none}
+% \end{syntax}
+% 设置数学字体,具体配置见\tableref{tab:math-font}。除Computer Modern字体外,均使用\pkgx{unicode-math}宏包调用字体。
+% \end{function}
+% \changes{v0.1.4.1}{2022/04/04}{数学字体风格介绍}
+% \begin{optdesc}
+% \item[cambria] 微软Office预装的数学字体。
+% \item[fira] 无衬线数学字体。
+% \item[garamond] Garamond风格。
+% \item[lm] 基于Computer Modern风格。
+% \item[libertinus] Linux Libertine风格。
+% \item[stix] Times风格。
+% \item[dejavu] DejaVu风格。
+% \item[pagella] Palatino风格。
+% \item[termes] Times风格。
+% \item[xits] 基于STIX,Times风格,有粗体XITS Math Bold可用。
+% \item[none] 关闭内置数学字体配置,需自行配置数学字体。
+% \end{optdesc}
+% \begin{table}
+% \begin{threeparttable}
+% \caption{数学字体配置}
+% \label{tab:math-font}
+% \centering
+% \begin{tabularx}{\linewidth}{cY}
+% \toprule
+% \strong{选项名称} & \strong{字体名称} \\
+% \midrule
+% |asana| & Asana Math \\
+% |cambria|\tnote{1} & Cambria Math \\
+% |cm| & Computer Modern \\
+% |fira| & Fira Math \\
+% |garamond| & Garamond Math \\
+% |lm| & Latin Modern Math \\
+% |libertinus| & Libertinus Math \\
+% |stix| & STIX Math \\
+% |bonum| & TeX Gyre Bonum Math \\
+% |dejavu| & TeX Gyre DejaVu Math \\
+% |pagella| & TeX Gyre Pagella Math \\
+% |schola| & TeX Gyre Schola Math \\
+% |termes| & TeX Gyre Termes Math \\
+% |xits| & XITS Math \\
+% \bottomrule
+% \end{tabularx}
+% \begin{tablenotes}
+% \item [1] \filex{cambria.ttc}。
+% \end{tablenotes}
+% \end{threeparttable}
+% \end{table}
+% \begin{function}[added=2022-03-14]{style/unicode-math}
+% \begin{syntax}
+% \optx{style/unicode-math}=\argx{unicode-math宏包选项}
+% \end{syntax}
+% 修改\pkgx{unicode-math}默认选项,具体配置参考\pkgx{unicode-math}宏包文档,仅在数学字体不为Computer Modern时有效。
+% \end{function}
+% \begin{function}[added=2022-03-07]{style/font-type}
+% \begin{syntax}
+% \optx{style/font-type}=\metax{(font)|file}
+% \end{syntax}
+% 设置字体调用方式。
+% \end{function}
+% \begin{optdesc}
+% \item[font] 相应字体已安装,使用字体名称调用字体。
+% \item[file] 相应字体未安装,使用字体文件名称调用字体,适合Overleaf或TeXPage等在线平台,或不方便安装字体的情况。
+% \end{optdesc}
+% \begin{function}[added=2022-03-07]{style/font-path}
+% \begin{syntax}
+% \optx{style/font-path}=\argx{路径}
+% \end{syntax}
+% 设置字体文件路径,即\metax{路径}目录内存储全部所需中文、英文和数学字体文件,仅在\optx{font-type}等于|file|时有效,默认值为\valuex{fonts}。
+% \end{function}
+% \begin{function}[added=2022-04-01]{style/en-cjk-font}
+% \begin{syntax}
+% \optx{style/en-cjk-font}=\metax{true|(false)}
+% \end{syntax}
+% 切换字体族时,英文是否使用中文字体。主要作用于封面、章节标题、页眉页脚等。
+% \end{function}
+% \begin{optdesc}
+% \item[true] 英文使用相对应字体族的中文字体。
+% \item[false] 英文使用相对应字体族的英文字体。
+% \end{optdesc}
+% \paragraph{语言配置}
+% \begin{function}[added=2022-03-29]{style/language}
+% \begin{syntax}
+% \optx{style/language}=\metax{(zh)|en}
+% \end{syntax}
+% 设置论文语言。
+% \end{function}
+% \begin{optdesc}
+% \item[zh] 中文。
+% \item[en] 英文。
+% \end{optdesc}
+% \paragraph{参考文献配置}
+% \begin{function}[added=2022-04-02,updated=2022-04-03]{style/bib-backend}
+% \begin{syntax}
+% \optx{style/bib-backend}=\metax{bibtex|(biblatex)}
+% \end{syntax}
+% 设置参考文献支持方式。
+% \end{function}
+% \begin{optdesc}
+% \item[bibtex] 使用\bibtex{}处理文献,样式由\pkgx{natbib}宏包负责。
+% \item[biblatex] 使用\biber{}处理文献,样式由\pkgx{biblatex}宏包负责。
+% \end{optdesc}
+% \begin{function}[added=2022-04-02]{style/bib-resource}
+% \begin{syntax}
+% \optx{style/bib-resource}=\argx{参考文献文件路径}
+% \end{syntax}
+% 设置参考文献\filex{.bib}文件,多个文件之间需要使用英文半角逗号隔开。
+% \end{function}
+% \paragraph{图片配置}
+% \begin{function}[added=2022-04-03]{style/fig-label-sep}
+% \begin{syntax}
+% \optx{style/fig-label-sep}=\argx{间距}
+% \end{syntax}
+% 设置图片标签与后面标题之间的间距,默认值为\valuex{0.75em}。
+% \end{function}
+% \paragraph{章节配置}
+% \begin{function}[added=2022-04-05]{style/before-skip}
+% \begin{syntax}
+% \optx{style/before-skip}=\argx{间距列表}
+% \end{syntax}
+% 设置章节标题前的垂直间距,默认值为\valuex{\{24pt, 18pt, 12pt, 12pt, 12pt, 12pt\}},分别对应\tnx{chapter}、\tnx{section}、\tnx{subsection}、\tnx{subsubsection}、\tnx{paragraph}和\tnx{subparagraph}。
+% \end{function}
+% \begin{function}[added=2022-04-05]{style/after-skip}
+% \begin{syntax}
+% \optx{style/after-skip}=\argx{间距列表}
+% \end{syntax}
+% 设置章节标题后的垂直间距,默认值为\valuex{\{18pt, 12pt, 6pt, 6pt, 6pt, 6pt\}},分别对应\tnx{chapter}、\tnx{section}、\tnx{subsection}、\tnx{subsubsection}、\tnx{paragraph}和\tnx{subparagraph}。
+% \end{function}
+% \subsubsection{xduugthesis}
+% \paragraph{信息配置}
+% \begin{function}[added=2022-04-01]{info/title}
+% \begin{syntax}
+% \optx{info/title}=\argx{论文标题}
+% \end{syntax}
+% 设置论文标题。如果需要手动制定换行位点,请使用换行控制符(|\\|),最多两行。
+% \end{function}
+% \begin{function}[added=2022-04-01]{info/department}
+% \begin{syntax}
+% \optx{info/department}=\argx{院系名称}
+% \end{syntax}
+% 设置院系名称。
+% \end{function}
+% \begin{function}[added=2022-04-01]{info/major}
+% \begin{syntax}
+% \optx{info/major}=\argx{专业名称}
+% \end{syntax}
+% 设置专业名称。
+% \end{function}
+% \begin{function}[added=2022-04-01]{info/author}
+% \begin{syntax}
+% \optx{info/author}=\argx{作者姓名}
+% \end{syntax}
+% 设置作者姓名。
+% \end{function}
+% \begin{function}[added=2022-04-01]{info/supervisor}
+% \begin{syntax}
+% \optx{info/supervisor}=\argx{导师姓名}
+% \end{syntax}
+% 设置导师姓名。非校外毕业设计填写。
+% \end{function}
+% \begin{function}[added=2022-04-01]{info/supervisor-department}
+% \begin{syntax}
+% \optx{info/supervisor-department}=\argx{院内导师姓名}
+% \end{syntax}
+% 设置院内导师姓名。非校外毕业设计填写,如无院内导师,则无需填写。
+% \end{function}
+% \begin{function}[added=2022-04-01]{info/supervisor-enterprise}
+% \begin{syntax}
+% \optx{info/supervisor-enterprise}=\argx{校外导师姓名}
+% \end{syntax}
+% 设置校外导师姓名。校外毕业设计填写。
+% \end{function}
+% \begin{function}[added=2022-04-01]{info/supervisor-school}
+% \begin{syntax}
+% \optx{info/supervisor-school}=\argx{校内导师姓名}
+% \end{syntax}
+% 设置校内导师姓名。校外毕业设计填写。
+% \end{function}
+% \begin{function}[added=2022-04-01]{info/class-id}
+% \begin{syntax}
+% \optx{info/class-id}=\argx{作者班级号}
+% \end{syntax}
+% 设置作者班级号。
+% \end{function}
+% \begin{function}[added=2022-04-01]{info/student-id}
+% \begin{syntax}
+% \optx{info/student-id}=\argx{作者学号}
+% \end{syntax}
+% 设置作者学号。
+% \end{function}
+% \begin{function}[added=2022-04-02]{info/abstract,info/abstract*}
+% \begin{syntax}
+% \optx{info/abstract}=\argx{中文摘要文件路径}
+% \optx{info/abstract*}=\argx{英文摘要文件路径}
+% \end{syntax}
+% 设置摘要文件路径。
+% \end{function}
+% \begin{function}[added=2022-04-02]{info/keywords,info/keywords*}
+% \begin{syntax}
+% \optx{info/keywords}=\argx{中文关键词}
+% \optx{info/keywords*}=\argx{英文关键词}
+% \end{syntax}
+% 设置关键词,关键词之间需要使用英文半角逗号隔开。
+% \end{function}
+% \begin{function}[added=2022-04-02]{info/acknowledgements}
+% \begin{syntax}
+% \optx{info/acknowledgements}=\argx{致谢文件路径}
+% \end{syntax}
+% 设置致谢文件路径。
+% \end{function}
+% \paragraph{输入示范}
+% 可以参考如下范例输入个人信息。注意不能有空行。
+% \begin{latexexample}[moretexcs={\xdusetup},emph={[2]info}]
+% \xdusetup {
+% info = {
+% title = {第一行标题\\第二行标题},
+% department = {电子工程学院},
+% major = {电子信息工程},
+% author = {张三},
+% supervisor = {李四},
+% supervisor-department = {王五},
+% class-id = {123456},
+% student-id = {12345678910},
+% abstract = {abstract-zh.tex},
+% abstract* = {abstract-en.tex},
+% keywords = {我,就是,充数的,关键词},
+% keywords* = {Dummy,Keywords,Here,it is},
+% acknowledgements = {acknowledgements.tex}
+% }
+% }
+% \end{latexexample}
+% \clearpage
+% \section{代码实现}
+% \changes{v0.1.0.0}{2022/04/03}{基本完成本科毕业设计论文模板}
+% \setlength\parindent{0pt}
+% \subsection{通用}
+% \begin{macrocode}
+%<@@=xdu>
+% \end{macrocode}
+% \begin{macrocode}
+%<*class>
+% \end{macrocode}
+% \begin{macrocode}
+\RequirePackage { xparse, l3keys2e }
+% \end{macrocode}
+% \subsubsection{键值选项定义}
+% \begin{variable}
+% {
+% \l_@@_cjk_font_tl,
+% \l_@@_fake_bold_str,
+% \l_@@_fake_slant_str,
+% \l_@@_latin_font_tl,
+% \l_@@_math_font_tl,
+% \l_@@_unicode_math_tl,
+% \l_@@_font_type_tl,
+% \l_@@_font_path_tl,
+% \l_@@_en_cjk_font_bool,
+% \l_@@_lang_tl,
+% \l_@@_bib_tool_tl,
+% \l_@@_bib_file_clist,
+% \l_@@_fig_label_sep_tl,
+% \l_@@_before_skip_clist,
+% \l_@@_after_skip_clist
+% }
+% 中文字体配置名称。
+% \begin{macrocode}
+\tl_new:N \l_@@_cjk_font_tl
+% \end{macrocode}
+% 中文字体伪粗体粗细程度。
+% \begin{macrocode}
+\str_new:N \l_@@_fake_bold_str
+% \end{macrocode}
+% 中文字体伪斜体倾斜程度。
+% \begin{macrocode}
+\str_new:N \l_@@_fake_slant_str
+% \end{macrocode}
+% 英文字体配置名称。
+% \begin{macrocode}
+\tl_new:N \l_@@_latin_font_tl
+% \end{macrocode}
+% 数学字体配置名称。
+% \begin{macrocode}
+\tl_new:N \l_@@_math_font_tl
+% \end{macrocode}
+% unicode-math配置选项。
+% \begin{macrocode}
+\tl_new:N \l_@@_unicode_math_tl
+% \end{macrocode}
+% 字体名称/文件名称。
+% \begin{macrocode}
+\tl_new:N \l_@@_font_type_tl
+% \end{macrocode}
+% 字体文件路径。
+% \begin{macrocode}
+\tl_new:N \l_@@_font_path_tl
+% \end{macrocode}
+% 英文是否使用中文字体。
+% \begin{macrocode}
+\bool_new:N \l_@@_en_cjk_font_bool
+% \end{macrocode}
+% 语言。
+% \begin{macrocode}
+\tl_new:N \l_@@_lang_tl
+% \end{macrocode}
+% 参考文献支持方式。
+% \begin{macrocode}
+\tl_new:N \l_@@_bib_tool_tl
+% \end{macrocode}
+% 参考文献文件。
+% \begin{macrocode}
+\clist_new:N \l_@@_bib_file_clist
+% \end{macrocode}
+% 图片标签与后面标题之间的间距。
+% \begin{macrocode}
+\tl_new:N \l_@@_fig_label_sep_tl
+% \end{macrocode}
+% 设置章节标题前后的垂直间距。
+% \begin{macrocode}
+\clist_new:N \l_@@_before_skip_clist
+\clist_new:N \l_@@_after_skip_clist
+% \end{macrocode}
+% \end{variable}
+% \begin{macro}{\keys_define:nn}
+% 定义样式键值。
+% \begin{macrocode}
+\keys_define:nn { xdu / style }
+ {
+% \end{macrocode}
+% 中文字体配置。
+% \begin{macrocode}
+ cjk-font .choices:nn =
+ { win, adobe, founder, sinotype, fandol, none }
+ { \tl_set_eq:NN \l_@@_cjk_font_tl \l_keys_choice_tl },
+% \end{macrocode}
+% 中文字体伪粗体粗细程度。
+% \begin{macrocode}
+ cjk-fake-bold .str_set:N = \l_@@_fake_bold_str,
+% \end{macrocode}
+% 中文字体伪斜体倾斜程度。
+% \begin{macrocode}
+ cjk-fake-slant .str_set:N = \l_@@_fake_slant_str,
+% \end{macrocode}
+% 英文字体配置。
+% \begin{macrocode}
+ latin-font .choices:nn = { tacn, thcs, none }
+ { \tl_set_eq:NN \l_@@_latin_font_tl \l_keys_choice_tl },
+% \end{macrocode}
+% 数学字体配置。
+% \begin{macrocode}
+ math-font .choices:nn =
+ {
+ asana, cambria, cm, fira, garamond, lm, libertinus, stix,
+ bonum, dejavu, pagella, schola, termes, xits, none
+ }
+ { \tl_set_eq:NN \l_@@_math_font_tl \l_keys_choice_tl },
+ unicode-math .tl_set:N = \l_@@_unicode_math_tl,
+% \end{macrocode}
+% 字体调用方式配置,文件名称/字体名称。
+% \begin{macrocode}
+ font-type .choices:nn = { font, file }
+ { \tl_set_eq:NN \l_@@_font_type_tl \l_keys_choice_tl },
+% \end{macrocode}
+% 字体文件路径配置。
+% \begin{macrocode}
+ font-path .tl_set:N = \l_@@_font_path_tl,
+% \end{macrocode}
+% 英文是否使用中文字体。
+% \begin{macrocode}
+ en-cjk-font .bool_set:N = \l_@@_en_cjk_font_bool,
+% \end{macrocode}
+% 论文语言配置。
+% \begin{macrocode}
+ language .choices:nn = { zh, en }
+ { \tl_set_eq:NN \l_@@_lang_tl \l_keys_choice_tl },
+% \end{macrocode}
+% 参考文献支持方式配置。
+% \begin{macrocode}
+ bib-backend .choices:nn = { bibtex, biblatex }
+ { \tl_set_eq:NN \l_@@_bib_tool_tl \l_keys_choice_tl },
+% \end{macrocode}
+% 参考文献文件。
+% \begin{macrocode}
+ bib-resource .clist_set:N = \l_@@_bib_file_clist,
+% \end{macrocode}
+% 图片标签与后面标题之间的间距。
+% \begin{macrocode}
+ fig-label-sep .tl_set:N = \l_@@_fig_label_sep_tl,
+% \end{macrocode}
+% 设置章节标题前的垂直间距。
+% \begin{macrocode}
+ before-skip .clist_set:N = \l_@@_before_skip_clist,
+% \end{macrocode}
+% 设置章节标题后的垂直间距。
+% \begin{macrocode}
+ after-skip .clist_set:N = \l_@@_after_skip_clist
+ }
+% \end{macrocode}
+% \end{macro}
+% \begin{variable}
+% {
+% \l_@@_title_str,
+% \l_@@_title_i_str,
+% \l_@@_title_ii_str,
+% \l_@@_dept_str,
+% \l_@@_major_str,
+% \l_@@_author_str,
+% \l_@@_supv_str,
+% \l_@@_supv_dept_str,
+% \l_@@_supv_ent_str,
+% \l_@@_supv_sch_str,
+% \l_@@_class_id_str,
+% \l_@@_student_id_str,
+% \l_@@_abstract_zh_tl,
+% \l_@@_abstract_en_tl,
+% \l_@@_keywords_zh_clist,
+% \l_@@_keywords_en_clist,
+% \l_@@_ack_tl
+% }
+% 论文标题。
+% \begin{macrocode}
+\str_new:N \l_@@_title_str
+\str_new:N \l_@@_title_i_str
+\str_new:N \l_@@_title_ii_str
+% \end{macrocode}
+% 院系名称。
+% \begin{macrocode}
+\str_new:N \l_@@_dept_str
+% \end{macrocode}
+% 专业名称。
+% \begin{macrocode}
+\str_new:N \l_@@_major_str
+% \end{macrocode}
+% 作者姓名。
+% \begin{macrocode}
+\str_new:N \l_@@_author_str
+% \end{macrocode}
+% 导师姓名。
+% \begin{macrocode}
+\str_new:N \l_@@_supv_str
+% \end{macrocode}
+% 院内导师姓名。
+% \begin{macrocode}
+\str_new:N \l_@@_supv_dept_str
+% \end{macrocode}
+% 校外导师姓名。
+% \begin{macrocode}
+\str_new:N \l_@@_supv_ent_str
+% \end{macrocode}
+% 校内导师姓名。
+% \begin{macrocode}
+\str_new:N \l_@@_supv_sch_str
+% \end{macrocode}
+% 作者班级号。
+% \begin{macrocode}
+\str_new:N \l_@@_class_id_str
+% \end{macrocode}
+% 作者学号。
+% \begin{macrocode}
+\str_new:N \l_@@_student_id_str
+% \end{macrocode}
+% 中文摘要。
+% \begin{macrocode}
+\tl_new:N \l_@@_abstract_zh_tl
+% \end{macrocode}
+% 英文摘要。
+% \begin{macrocode}
+\tl_new:N \l_@@_abstract_en_tl
+% \end{macrocode}
+% 中文关键词。
+% \begin{macrocode}
+\clist_new:N \l_@@_keywords_zh_clist
+% \end{macrocode}
+% 英文关键词。
+% \begin{macrocode}
+\clist_new:N \l_@@_keywords_en_clist
+% \end{macrocode}
+% 致谢。
+% \begin{macrocode}
+\tl_new:N \l_@@_ack_tl
+% \end{macrocode}
+% \end{variable}
+% \begin{macro}{\keys_define:nn}
+% 定义信息键值。
+% \begin{macrocode}
+\keys_define:nn { xdu / info }
+ {
+% \end{macrocode}
+% 论文标题。
+% \begin{macrocode}
+ title .tl_set:N = \l_@@_title_str,
+% \end{macrocode}
+% 院系名称。
+% \begin{macrocode}
+ department .tl_set:N = \l_@@_dept_str,
+% \end{macrocode}
+% 专业名称。
+% \begin{macrocode}
+ major .tl_set:N = \l_@@_major_str,
+% \end{macrocode}
+% 作者姓名。
+% \begin{macrocode}
+ author .tl_set:N = \l_@@_author_str,
+% \end{macrocode}
+% 导师姓名。
+% \begin{macrocode}
+ supervisor .tl_set:N = \l_@@_supv_str,
+% \end{macrocode}
+% 院内导师姓名。
+% \begin{macrocode}
+ supervisor-department .tl_set:N = \l_@@_supv_dept_str,
+% \end{macrocode}
+% 校外导师姓名。
+% \begin{macrocode}
+ supervisor-enterprise .tl_set:N = \l_@@_supv_ent_str,
+% \end{macrocode}
+% 校内导师姓名。
+% \begin{macrocode}
+ supervisor-school .tl_set:N = \l_@@_supv_sch_str,
+% \end{macrocode}
+% 作者班级号。
+% \begin{macrocode}
+ class-id .tl_set:N = \l_@@_class_id_str,
+% \end{macrocode}
+% 作者学号。
+% \begin{macrocode}
+ student-id .tl_set:N = \l_@@_student_id_str,
+% \end{macrocode}
+% 中文摘要。
+% \begin{macrocode}
+ abstract .tl_set:N = \l_@@_abstract_zh_tl,
+% \end{macrocode}
+% 英文摘要。
+% \begin{macrocode}
+ abstract* .tl_set:N = \l_@@_abstract_en_tl,
+% \end{macrocode}
+% 中文关键词。
+% \begin{macrocode}
+ keywords .clist_set:N = \l_@@_keywords_zh_clist,
+% \end{macrocode}
+% 英文关键词。
+% \begin{macrocode}
+ keywords* .clist_set:N = \l_@@_keywords_en_clist,
+% \end{macrocode}
+% 致谢。
+% \begin{macrocode}
+ acknowledgements .tl_set:N = \l_@@_ack_tl
+ }
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\keys_define:nn}
+% 定义元(meta)键值对。
+% \begin{macrocode}
+\keys_define:nn { xdu }
+ {
+ style .meta:nn = { xdu / style } { #1 },
+ info .meta:nn = { xdu / info } { #1 }
+ }
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\keys_set:nn}
+% 初始设置。
+% \begin{macrocode}
+\keys_set:nn { xdu }
+ {
+ style / cjk-font = win,
+ style / cjk-fake-bold = 3,
+ style / cjk-fake-slant = 0.2,
+ style / latin-font = tacn,
+ style / math-font = cm,
+ style / unicode-math = { },
+ style / font-type = font,
+ style / font-path = fonts,
+ style / en-cjk-font = false,
+ style / language = zh,
+ style / bib-backend = biblatex,
+ style / bib-resource = { },
+ style / fig-label-sep = { 0.75em },
+ style / before-skip = { 24pt, 18pt, 12pt, 12pt, 12pt, 12pt },
+ style / after-skip = { 18pt, 12pt, 6pt, 6pt, 6pt, 6pt },
+ info / title = { },
+ info / department = { },
+ info / major = { },
+ info / author = { },
+ info / supervisor = { },
+ info / supervisor-department = { },
+ info / supervisor-enterprise = { },
+ info / supervisor-school = { },
+ info / class-id = { },
+ info / student-id = { },
+ info / abstract = { },
+ info / abstract* = { },
+ info / keywords = { },
+ info / keywords* = { },
+ info / acknowledgements = { }
+ }
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\xdusetup}
+% 用户设置接口。
+% \begin{macrocode}
+\NewDocumentCommand \xdusetup { m }
+ { \keys_set:nn { xdu } { #1 } }
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\ProcessKeysOptions}
+% 处理选项。
+% \begin{macrocode}
+\ProcessKeysOptions { xdu }
+% \end{macrocode}
+% \end{macro}
+% \subsubsection{配置字体}
+% 忽略字体警告。
+% \begin{macrocode}
+\str_if_eq:NNTF { \l_@@_cjk_font_tl } { fandol }
+ { \PassOptionsToPackage { quiet } { fontspec } }
+ { }
+\PassOptionsToPackage { quiet } { xeCJK }
+% \end{macrocode}
+% \begin{macro}{\PassOptionsToClass,\LoadClass}
+% 加载\clsx{ctexbook}文档类。
+% \changes{v0.3.2.0}{2022/04/04}{修正行间距为1.5倍}
+% \begin{macrocode}
+\PassOptionsToClass
+ {
+ zihao=-4,
+ sub4section,
+%<xduugthesis> linespread = 1.5,
+ fontset = none
+ }
+ { ctexbook }
+\LoadClass { ctexbook }
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_font_path:}
+% 当选择使用字体文件配置字体时,设置字体文件路径。
+% \begin{macrocode}
+\cs_new:Npn \@@_font_path:
+ {
+ \str_if_eq:NNTF { \l_@@_font_type_tl } { font }
+ { }
+ { Path = \l_@@_font_path_tl / , }
+ }
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_if_platform_macos:FT}
+% \changes{v0.5.1.0}{2022/04/06}{判断操作系统是否是macOS}
+% 判断操作系统是否是macOS。
+% \begin{arguments}
+% \item 非macOS。
+% \item macOS。
+% \end{arguments}
+% \begin{macrocode}
+\cs_new:Npn \@@_if_platform_macos:FT #1#2
+ { \ctex_if_platform_macos:TF { #2 } { #1 } }
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_texmf_font:nn}
+% \changes{v0.5.1.0}{2022/04/06}{加载字体时自动判断是否为macOS平台}
+% 调用TEXMF中的字体时根据操作系统是否是macOS自动选择调用字体名或文件名。
+% \begin{arguments}
+% \item 字体名。
+% \item 文件名。
+% \end{arguments}
+% \begin{macrocode}
+\cs_new:Npn \@@_texmf_font:nn #1#2
+ { \@@_if_platform_macos:FT { #1 } { #2 } }
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_rm_family:,\@@_sf_family:,\@@_tt_family:}
+% 切换字体族时,英文根据配置选择是否使用中文字体。
+% \begin{macrocode}
+\cs_new:Npn \@@_rm_family:
+ { \bool_if:NTF \l_@@_en_cjk_font_bool { \CJKfamily+ { rm } } { \rmfamily } }
+\cs_new:Npn \@@_sf_family:
+ { \bool_if:NTF \l_@@_en_cjk_font_bool { \CJKfamily+ { sf } } { \sffamily } }
+\cs_new:Npn \@@_tt_family:
+ { \bool_if:NTF \l_@@_en_cjk_font_bool { \CJKfamily+ { tt } } { \ttfamily } }
+% \end{macrocode}
+% \end{macro}
+% \paragraph{中文字体}
+% \begin{macro}{\@@_cfg_cjk_font_sub_b:}
+% 中文粗体。
+% \begin{macrocode}
+\cs_new:Npn \@@_cfg_cjk_font_sub_b:n #1
+ {
+ BoldFont = { #1 }
+ }
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_cfg_cjk_font_sub_fb:n}
+% 中文伪粗体。
+% \begin{macrocode}
+\cs_new:Npn \@@_cfg_cjk_font_sub_fb:n #1
+ {
+ BoldFont = { #1 },
+ BoldFeatures = { FakeBold = \l_@@_fake_bold_str }
+ }
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_cfg_cjk_font_sub_fs:n}
+% 中文伪斜体。
+% \begin{macrocode}
+\cs_new:Npn \@@_cfg_cjk_font_sub_fs:n #1
+ {
+ SlantedFont = { #1 },
+ SlantedFeatures = { FakeSlant = \l_@@_fake_slant_str }
+ }
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_cfg_cjk_font_sub_fbfs:n}
+% 中文伪粗斜体。
+% \begin{macrocode}
+\cs_new:Npn \@@_cfg_cjk_font_sub_fbfs:n #1
+ {
+ BoldSlantedFont = { #1 },
+ BoldSlantedFeatures =
+ {
+ FakeBold = \l_@@_fake_bold_str,
+ FakeSlant = \l_@@_fake_slant_str
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_cfg_cjk_font_sub_bfs:n}
+% 中文粗伪斜体。
+% \begin{macrocode}
+\cs_new:Npn \@@_cfg_cjk_font_sub_bfs:n #1
+ {
+ BoldSlantedFont = { #1 },
+ BoldSlantedFeatures = { FakeSlant = \l_@@_fake_slant_str }
+ }
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_cfg_cjk_font_sub_i:n}
+% 中文意大利体。
+% \begin{macrocode}
+\cs_new:Npn \@@_cfg_cjk_font_sub_i:n #1
+ {
+ ItalicFont = { #1 }
+ }
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_cfg_cjk_font_sub_fi:n}
+% 中文伪意大利体,即伪斜体。
+% \begin{macrocode}
+\cs_new:Npn \@@_cfg_cjk_font_sub_fi:n #1
+ {
+ ItalicFont = { #1 },
+ ItalicFeatures = { FakeSlant = \l_@@_fake_slant_str }
+ }
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_cfg_cjk_font_sub_ifb:n}
+% 中文意大利体伪粗体。
+% \begin{macrocode}
+\cs_new:Npn \@@_cfg_cjk_font_sub_ifb:n #1
+ {
+ BoldItalicFont = { #1 },
+ BoldItalicFeatures = { FakeBold = \l_@@_fake_bold_str }
+ }
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_cfg_cjk_font_sub_fifb:n}
+% 中文伪意大利体伪粗体。
+% \begin{macrocode}
+\cs_new:Npn \@@_cfg_cjk_font_sub_fifb:n #1
+ {
+ BoldItalicFont = { #1 },
+ BoldItalicFeatures =
+ {
+ FakeBold = \l_@@_fake_bold_str,
+ FakeSlant = \l_@@_fake_slant_str
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_cfg_cjk_font_r:n}
+% 配置中文字体,包括粗体、斜体、斜粗体、意大利体、粗意大利体。
+% \begin{macrocode}
+\cs_new:Npn \@@_cfg_cjk_font_r:n #1
+ {
+ \@@_cfg_cjk_font_sub_fb:n { #1 },
+ \@@_cfg_cjk_font_sub_fs:n { #1 },
+ \@@_cfg_cjk_font_sub_fbfs:n { #1 },
+ \@@_cfg_cjk_font_sub_fi:n { #1 },
+ \@@_cfg_cjk_font_sub_fifb:n { #1 }
+ }
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_cfg_cjk_font_rb:nn}
+% 配置中文字体,包括粗体、斜体、斜粗体、意大利体、粗意大利体,其中粗体和斜粗体为其他字体。
+% \begin{arguments}
+% \item 常规字体。
+% \item 粗体字体。
+% \end{arguments}
+% \begin{macrocode}
+\cs_new:Npn \@@_cfg_cjk_font_rb:nn #1#2
+ {
+ \@@_cfg_cjk_font_sub_b:n { #2 },
+ \@@_cfg_cjk_font_sub_fs:n { #1 },
+ \@@_cfg_cjk_font_sub_bfs:n { #2 },
+ \@@_cfg_cjk_font_sub_fi:n { #1 },
+ \@@_cfg_cjk_font_sub_fifb:n { #1 }
+ }
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_cfg_cjk_font_ri:nn}
+% 配置中文字体,包括粗体、斜体、斜粗体、意大利体、粗意大利体,其中意大利体和粗意大利体为其他字体。
+% \begin{arguments}
+% \item 常规字体。
+% \item 意大利体字体。
+% \end{arguments}
+% \begin{macrocode}
+\cs_new:Npn \@@_cfg_cjk_font_ri:nn #1#2
+ {
+ \@@_cfg_cjk_font_sub_fb:n { #1 },
+ \@@_cfg_cjk_font_sub_fs:n { #1 },
+ \@@_cfg_cjk_font_sub_fbfs:n { #1 },
+ \@@_cfg_cjk_font_sub_i:n { #2 },
+ \@@_cfg_cjk_font_sub_ifb:n { #2 }
+ }
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_cfg_cjk_font_rbi:nnn}
+% 配置中文字体,包括粗体、斜体、斜粗体、意大利体、粗意大利体,其中粗体、斜粗体、意大利体和粗意大利体为其他字体。
+% \begin{arguments}
+% \item 常规字体。
+% \item 粗体字体。
+% \item 意大利体字体。
+% \end{arguments}
+% \begin{macrocode}
+\cs_new:Npn \@@_cfg_cjk_font_rbi:nnn #1#2#3
+ {
+ \@@_cfg_cjk_font_sub_b:n { #2 },
+ \@@_cfg_cjk_font_sub_fs:n { #1 },
+ \@@_cfg_cjk_font_sub_bfs:n { #2 },
+ \@@_cfg_cjk_font_sub_i:n { #3 },
+ \@@_cfg_cjk_font_sub_ifb:n { #3 }
+ }
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_select_font:nn}
+% 自动选择字体文件名称或字体名称。
+% \begin{arguments}
+% \item 字体名称。
+% \item 字体文件名称。
+% \end{arguments}
+% \begin{macrocode}
+\cs_new:Npn \@@_select_font:nn #1#2
+ {
+ \str_if_eq:NNTF { \l_@@_font_type_tl } { font }
+ { #1 }
+ { #2 }
+ }
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_set_cjk_main_font:nn,\@@_set_cjk_main_font:nnn}
+% 配置中文罗马族字体。
+% \begin{arguments}
+% \item 宋体字体。
+% \item 楷体字体。
+% \end{arguments}
+% \begin{macrocode}
+\cs_new:Npn \@@_set_cjk_main_font:nn #1#2
+ {
+ \setCJKmainfont { #1 }
+ [ \@@_font_path: \@@_cfg_cjk_font_ri:nn { #1 } { #2 } ]
+ }
+\cs_new:Npn \@@_set_cjk_main_font:nnn #1#2#3
+ {
+ \setCJKmainfont { #1 }
+ [ \@@_font_path: \@@_cfg_cjk_font_rbi:nnn { #1 } { #2 } { #3 } ]
+ }
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_set_cjk_sans_font:n,\@@_set_cjk_sans_font:nn}
+% 配置中文无衬线族字体。
+% \begin{macrocode}
+\cs_new:Npn \@@_set_cjk_sans_font:n #1
+ {
+ \setCJKsansfont { #1 }
+ [ \@@_font_path: \@@_cfg_cjk_font_r:n { #1 } ]
+ }
+\cs_new:Npn \@@_set_cjk_sans_font:nn #1#2
+ {
+ \setCJKsansfont { #1 }
+ [ \@@_font_path: \@@_cfg_cjk_font_rb:nn { #1 } { #2 } ]
+ }
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_set_cjk_mono_font:n}
+% 配置中文等宽族字体。
+% \begin{macrocode}
+\cs_new:Npn \@@_set_cjk_mono_font:n #1
+ {
+ \setCJKmonofont { #1 }
+ [ \@@_font_path: \@@_cfg_cjk_font_r:n { #1 } ]
+ }
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_load_cjk_font_win:}
+% 中文字体配置\valuex{win}。
+% \begin{macrocode}
+\cs_new:Npn \@@_load_cjk_font_win:
+ {
+ \@@_set_cjk_main_font:nn
+ { \@@_select_font:nn { SimSun } { simsun.ttc } }
+ { \@@_select_font:nn { KaiTi } { simkai.ttf } }
+ \@@_set_cjk_sans_font:n
+ { \@@_select_font:nn { SimHei } { simhei.ttf } }
+ \@@_set_cjk_mono_font:n
+ { \@@_select_font:nn { FangSong } { simfang.ttf } }
+ }
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_load_cjk_font_adobe:}
+% 中文字体配置\valuex{adobe}。
+% \begin{macrocode}
+\cs_new:Npn \@@_load_cjk_font_adobe:
+ {
+ \@@_set_cjk_main_font:nn
+ { \@@_select_font:nn { Adobe~Song~Std } { adobesongstd-light.otf } }
+ { \@@_select_font:nn { Adobe~Kaiti~Std } { adobekaitistd-regular.otf } }
+ \@@_set_cjk_sans_font:n
+ { \@@_select_font:nn { Adobe~Heiti~Std } { adobeheitistd-regular.otf } }
+ \@@_set_cjk_mono_font:n
+ { \@@_select_font:nn { Adobe~Fangsong~Std } { Adobe-Fangsong-Std-R-Font.otf } }
+ }
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_load_cjk_font_founder:}
+% \changes{v0.5.1.0}{2022/04/06}{适配macOS平台方正字体}
+% 中文字体配置\valuex{founder}。
+% \begin{macrocode}
+\cs_new:Npn \@@_load_cjk_font_founder:
+ {
+ \@@_set_cjk_main_font:nn
+ { \@@_select_font:nn { FZShuSong-Z01 } { FZShuSong-Z01.ttf } }
+ { \@@_select_font:nn { FZKai-Z03 } { FZKai-Z03.ttf } }
+ \@@_set_cjk_sans_font:n
+ { \@@_select_font:nn { FZHei-B01 } { FZHei-B01.ttf } }
+ \@@_set_cjk_mono_font:n
+ { \@@_select_font:nn { FZFangSong-Z02 } { FZFSK.TTF } }
+ }
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_load_cjk_font_sinotype:}
+% 中文字体配置\valuex{sinotype}。
+% \begin{macrocode}
+\cs_new:Npn \@@_load_cjk_font_sinotype:
+ {
+ \@@_set_cjk_main_font:nn
+ { \@@_select_font:nn { STSong } { STSONG.TTF } }
+ { \@@_select_font:nn { STKaiti } { STKAITI.TTF } }
+ \@@_set_cjk_sans_font:nn
+ { \@@_select_font:nn { STXihei } { STXIHEI.TTF } }
+ { \@@_select_font:nn { STHeiti } { STHeiti.ttf } }
+ \@@_set_cjk_mono_font:n
+ { \@@_select_font:nn { STFangsong } { STFANGSO.TTF } }
+ }
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_load_cjk_font_fandol:}
+% \changes{v0.5.1.0}{2022/04/06}{适配macOS平台Fandol字体}
+% 中文字体配置\valuex{fandol}。
+% \begin{macrocode}
+\cs_new:Npn \@@_load_cjk_font_fandol:
+ {
+ \@@_set_cjk_main_font:nnn
+ { FandolSong-Regular.otf }
+ { FandolSong-Bold.otf }
+ { FandolKai-Regular.otf }
+ \@@_set_cjk_sans_font:nn
+ { FandolHei-Regular.otf }
+ { FandolHei-Bold.otf }
+ \@@_set_cjk_mono_font:n
+ { FandolFang-Regular.otf }
+ }
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_load_cjk_font_none:}
+% 中文字体配置\valuex{none}。
+% \begin{macrocode}
+\cs_new:Npn \@@_load_cjk_font_none: { }
+% \end{macrocode}
+% \end{macro}
+% \paragraph{英文字体}
+% \begin{macro}{\@@_set_latin_font:nnn}
+% 配置英文字体。
+% \begin{macrocode}
+\cs_new:Npn \@@_set_latin_font:nnn #1#2#3
+ {
+ \@@_font_path:
+ BoldFont = { #1 },
+ SlantedFont = { #2 },
+ BoldSlantedFont = { #3 },
+ ItalicFont = { #2 },
+ BoldItalicFont = { #3 }
+ }
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_set_latin_main_font:nnnnn}
+% 配置英文罗马族字体,参数分别为字体名称、字体文件名称(常规、粗体、意大利体、粗意大利体)。
+% \begin{arguments}
+% \item 字体名称。
+% \item 常规字体名称。
+% \item 粗体字体名称。
+% \item 意大利体字体名称。
+% \item 粗意大利体字体名称。
+% \end{arguments}
+% \begin{macrocode}
+\cs_new:Npn \@@_set_latin_main_font:nnnnn #1#2#3#4#5
+ {
+ \str_if_eq:NNTF { \l_@@_font_type_tl } { font }
+ { \setmainfont { #1 } }
+ { \setmainfont { #2 } [ \@@_set_latin_font:nnn { #3 } { #4 } { #5 } ] }
+ }
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_set_latin_sans_font:nnnnn}
+% 配置英文无衬线族字体,参数分别为字体名称、字体文件名称(常规、粗体、意大利体、粗意大利体)。
+% \begin{arguments}
+% \item 字体名称。
+% \item 常规字体名称。
+% \item 粗体字体名称。
+% \item 意大利体字体名称。
+% \item 粗意大利体字体名称。
+% \end{arguments}
+% \begin{macrocode}
+\cs_new:Npn \@@_set_latin_sans_font:nnnnn #1#2#3#4#5
+ {
+ \str_if_eq:NNTF { \l_@@_font_type_tl } { font }
+ { \setsansfont { #1 } }
+ { \setsansfont { #2 } [ \@@_set_latin_font:nnn { #3 } { #4 } { #5 } ] }
+ }
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_set_latin_mono_font:nnnnn}
+% 配置英文等宽族字体,参数分别为字体名称、字体文件名称(常规、粗体、意大利体、粗意大利体)。
+% \begin{arguments}
+% \item 字体名称。
+% \item 常规字体名称。
+% \item 粗体字体名称。
+% \item 意大利体字体名称。
+% \item 粗意大利体字体名称。
+% \end{arguments}
+% \begin{macrocode}
+\cs_new:Npn \@@_set_latin_mono_font:nnnnn #1#2#3#4#5
+ {
+ \str_if_eq:NNTF { \l_@@_font_type_tl } { font }
+ { \setmonofont{ #1 } }
+ { \setmonofont{ #2 } [ \@@_set_latin_font:nnn { #3 } { #4 } { #5 } ] }
+ }
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_load_latin_font_tacn:}
+% 英文字体配置\valuex{tacn}。
+% \begin{macrocode}
+\cs_new:Npn \@@_load_latin_font_tacn:
+ {
+ \@@_set_latin_main_font:nnnnn
+ { Times~New~Roman } { times.ttf } { timesbd.ttf } { timesi.ttf } { timesbi.ttf }
+ \@@_set_latin_sans_font:nnnnn
+ { Arial } { arial.ttf } { arialbd.ttf } { ariali.ttf } { arialbi.ttf }
+ \@@_set_latin_mono_font:nnnnn
+ { Courier~New } { cour.ttf } { courbd.ttf } { couri.ttf } { courbi.ttf }
+ }
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_load_latin_font_thcs:}
+% 英文字体配置\valuex{thcs}。
+% \begin{macrocode}
+\cs_new:Npn \@@_load_latin_font_thcs:
+ {
+ \@@_set_latin_main_font:nnnnn
+ { Times~New~Roman }
+ { times.ttf }
+ { timesbd.ttf }
+ { timesi.ttf }
+ { timesbi.ttf }
+ \@@_set_latin_sans_font:nnnnn
+ { Helvetica }
+ { Helvetica.ttf }
+ { Helvetica~Bold.ttf }
+ { Helvetica~Oblique.ttf }
+ { Helvetica~Bold~Oblique.ttf }
+ \@@_set_latin_mono_font:nnnnn
+ { Courier~Std }
+ { CourierStd.otf }
+ { CourierStd-Bold.otf }
+ { CourierStd-Oblique.otf }
+ { CourierStd-BoldOblique.otf }
+ }
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_load_latin_font_none:}
+% 英文字体配置\valuex{none}。
+% \begin{macrocode}
+\cs_new:Npn \@@_load_latin_font_none: { }
+% \end{macrocode}
+% \end{macro}
+% \paragraph{数学字体}
+% \begin{macro}{\@@_load_unicode_math_pkg:}
+% 加载\pkgx{unicode-math}宏包。
+% \begin{macrocode}
+\cs_new:Npn \@@_load_unicode_math_pkg:
+ {
+ \RequirePackage
+ [ \l_@@_unicode_math_tl ]
+ { unicode-math }
+ }
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_load_math_font_cambria:}
+% 数学字体配置\valuex{cambria}。
+% \begin{macrocode}
+\cs_new:Npn \@@_load_math_font_cambria:
+ {
+ \@@_load_unicode_math_pkg:
+ \str_if_eq:NNTF { \l_@@_font_type_tl} { font}
+ { \setmathfont { Cambria~Math} }
+ { \setmathfont { cambria.ttc} [ Path = \l_@@_font_path_tl/, FontIndex = 1 ] }
+ }
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_define_math_font:nn}
+% 批量定义数学字体配置。
+% \changes{v0.2.0.0}{2022/04/04}{增加Garamond Math数学字体}
+% \changes{v0.5.1.0}{2022/04/06}{适配macOS平台MacTeX内置数学字体}
+% \begin{arguments}
+% \item 配置名称。
+% \item 字体名称。
+% \end{arguments}
+% \begin{macrocode}
+\cs_new:Npn \@@_define_math_font:nn #1#2
+ {
+ \cs_new:cpn { @@_load_math_font_ #1 : }
+ {
+ \@@_load_unicode_math_pkg:
+ \setmathfont { #2 }
+ }
+ }
+\clist_map_inline:nn
+ {
+ { asana } { Asana-Math.otf },
+ { fira } { FiraMath-Regular.otf },
+ { garamond } { Garamond-Math.otf },
+ { lm } { latinmodern-math.otf },
+ { libertinus } { LibertinusMath-Regular.otf },
+ { stix } { STIXMath-Regular.otf },
+ { bonum } { texgyrebonum-math.otf },
+ { dejavu } { texgyredejavu-math.otf },
+ { pagella } { texgyrepagella-math.otf },
+ { schola } { texgyreschola-math.otf },
+ { termes } { texgyretermes-math.otf }
+ }
+ { \@@_define_math_font:nn #1 }
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_load_math_font_xits:}
+% \changes{v0.5.1.0}{2022/04/06}{适配macOS平台MacTeX内置XITSMath数学字体}
+% 数学字体配置\valuex{xits}。
+% \begin{macrocode}
+\cs_new:Npn \@@_load_math_font_xits:
+ {
+ \@@_load_unicode_math_pkg:
+ \@@_if_platform_macos:FT
+ {
+ \setmathfont { XITS~Math }
+ }
+ {
+ \@@_load_unicode_math_pkg:
+ \setmathfont { XITSMath-Regular.otf }
+ \setmathfont { XITSMath-Bold.otf }
+ [range= { bfup -> up, bfit -> it } ]
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_load_math_font_cm:}
+% 数学字体配置\valuex{cm}。
+% \begin{macrocode}
+\cs_new:Npn \@@_load_math_font_cm: { }
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_load_math_font_none:}
+% 数学字体配置\valuex{none}。
+% \begin{macrocode}
+\cs_new:Npn \@@_load_math_font_none: { }
+% \end{macrocode}
+% \end{macro}
+% \paragraph{加载字体}
+% \begin{macro}{\@@_load_font:}
+% 加载中文字体、英文字体和数学字体。
+% \begin{macrocode}
+\cs_new:Npn \@@_load_font:
+ {
+ \use:c { @@_load_cjk_font_ \l_@@_cjk_font_tl : }
+ \use:c { @@_load_latin_font_ \l_@@_latin_font_tl : }
+ \use:c { @@_load_math_font_ \l_@@_math_font_tl : }
+ }
+% \end{macrocode}
+% 在导言区末尾加载中文字体、英文字体和数学字体。
+% \begin{macrocode}
+\ctex_at_end_preamble:n { \@@_load_font: }
+% \end{macrocode}
+% \end{macro}
+% \subsubsection{内部函数}
+% \begin{macro}{\@@_begin_document:n}
+% 钩子。
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_begin_document:n #1
+ { \ctex_gadd_ltxhook:nn { env/document/begin } { #1 } }
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_lang_switch:nn}
+% 根据论文语言自动选择中文对应内容或英文对应内容。
+% \begin{arguments}
+% \item 中文对应内容。
+% \item 英文对应内容。
+% \end{arguments}
+% \begin{macrocode}
+\cs_new:Npn \@@_lang_switch:nn #1#2
+ {
+ \str_if_eq:NNTF { \l_@@_lang_tl } { zh }
+ { #1 }
+ { #2 }
+ }
+% \end{macrocode}
+% \end{macro}
+% \begin{variable}{\l_@@_pure_title_str}
+% 移除标题中换行符。
+% \begin{macrocode}
+\ctex_at_end_preamble:n
+ {
+ \str_new:N \l_@@_pure_title_str
+ \str_set_eq:NN \l_@@_pure_title_str \l_@@_title_str
+ \str_remove_all:Nn \l_@@_pure_title_str { \\ }
+ }
+% \end{macrocode}
+% \end{variable}
+% \begin{macro}{\@@_uline:n}
+% 绘制下划线。
+% \begin{macrocode}
+\cs_new:Npn \@@_uline:n #1
+ { \CJKunderline [ thickness = 0.5pt ] { #1 } }
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_get_text_width:Nn,\@@_get_text_width:NV}
+% 获取文本宽度。
+% \begin{arguments}
+% \item 文本宽度。
+% \item 文本。
+% \end{arguments}
+% \begin{macrocode}
+\cs_new:Npn \@@_get_text_width:Nn #1#2
+ {
+ \box_clear_new:N \l_@@_tmp_box
+ \hbox_set:Nn \l_@@_tmp_box { #2 }
+ \dim_set:Nn #1 { \box_wd:N \l_@@_tmp_box }
+ }
+\cs_generate_variant:Nn \@@_get_text_width:Nn { NV }
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_add_bookmark:n}
+% 为当前位置添加书签。
+% \begin{macrocode}
+\cs_new:Npn \@@_add_bookmark:n #1
+ { \currentpdfbookmark { #1 } { #1 } }
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_add_toc:n}
+% 章节添加目录。
+% \begin{macrocode}
+\cs_new:Npn \@@_add_toc:n #1
+ {
+ \cleardoublepage
+ \phantomsection
+ \addcontentsline { toc } { chapter } { #1 }
+ }
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_n_chapter_head:n}
+% 新建无编号章节并添加页眉和书签。
+% \begin{macrocode}
+\cs_new:Npn \@@_n_chapter_head:n #1
+ {
+ \@@_add_bookmark:n { #1 }
+ \chapter* { #1 }
+ \markboth { #1 } { }
+ }
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_n_chapter_head:nn}
+% 新建无编号章节并添加页眉和书签并单独设置标题样式。
+% \begin{macrocode}
+\cs_new:Npn \@@_n_chapter_head:nn #1#2
+ {
+ {
+ \ctexset { chapter / format = { #2 } }
+ \@@_n_chapter_head:n { #1 }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_n_chapter_head_toc:n}
+% 新建无编号章节并添加目录及页眉。
+% \begin{macrocode}
+\cs_new:Npn \@@_n_chapter_head_toc:n #1
+ {
+ \@@_add_toc:n { #1 }
+ \chapter* { #1 }
+ \markboth { #1 } { }
+ }
+% \end{macrocode}
+% \end{macro}
+% \subsubsection{目录}
+% \begin{variable}
+% {
+% \cftchapleader,
+% \cftbeforechapskip,
+% \cftbeforesecskip,
+% \cftbeforesubsecskip,
+% \cftbeforesubsubsecskip,
+% \cftbeforeparaskip,
+% \cftbeforesubparaskip,
+% \cftchapfont,
+% \cftchappagefont,
+% \cftsecfont,
+% \cftsubsecfont,
+% \cftsubsubsecfont,
+% \cftparafont,
+% \cftsubparafont,
+% \cftsecpagefont,
+% \cftsubsecpagefont,
+% \cftsubsubsecpagefont,
+% \cftparapagefont,
+% \cftsubparapagefont
+% }
+% 设置目录样式。
+% \changes{v0.4.1.0}{2022/04/05}{设置目录样式}
+% \begin{macrocode}
+\RequirePackage [ titles ] { tocloft }
+\renewcommand { \cftchapleader } { \bfseries \cftdotfill { \cftdotsep } }
+\clist_map_inline:nn
+ {
+ \cftbeforechapskip,
+ \cftbeforesecskip,
+ \cftbeforesubsecskip,
+ \cftbeforesubsubsecskip,
+ \cftbeforeparaskip,
+ \cftbeforesubparaskip
+ }
+ { \dim_set:Nn { #1 } { 5pt } }
+ \clist_map_inline:nn
+ {
+ \cftchapfont,
+ \cftchappagefont
+ }
+ { \renewcommand { #1 } { \@@_rm_family: \zihao { -4 } \bfseries } }
+\clist_map_inline:nn
+ {
+ \cftsecfont,
+ \cftsubsecfont,
+ \cftsubsubsecfont,
+ \cftparafont,
+ \cftsubparafont,
+ \cftsecpagefont,
+ \cftsubsecpagefont,
+ \cftsubsubsecpagefont,
+ \cftparapagefont,
+ \cftsubparapagefont
+ }
+ { \renewcommand { #1 } { \@@_rm_family: \zihao { -4 } } }
+% \end{macrocode}
+% \end{variable}
+% \subsubsection{图片}
+% \begin{macro}{\DeclareCaptionLabelSeparator,\DeclareCaptionFont,\captionsetup}
+% \changes{v0.1.2.0}{2022/04/03}{设置图片标签与后面标题之间的间距}
+% \changes{v0.1.3.0}{2022/04/03}{设置图片标签与标题字体字号}
+% 设置图片标签与后面标题之间的间距。
+% \begin{macrocode}
+\RequirePackage { caption }
+\DeclareCaptionLabelSeparator { customskip } { \hskip \l_@@_fig_label_sep_tl }
+\DeclareCaptionFont { customfont } { \@@_rm_family: \zihao { 5 } }
+\captionsetup
+ {
+ labelsep = customskip,
+ font = customfont
+ }
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\PassOptionsToPackage,\captionsetup}
+% \changes{v0.4.2.0}{2022/04/05}{设置子图标签与标题字体字号}
+% 设置子图标签与标题字体字号,支持\pkgx{subfig}和\pkgx{subcaption}宏包。
+% \begin{macrocode}
+\PassOptionsToPackage { font = small } { subfig }
+\captionsetup [ sub ] { font = customfont }
+% \end{macrocode}
+% \end{macro}
+% \subsubsection{超链接和PDF元数据}
+% \begin{macro}{\hyperref}
+% 配置超链接和PDF元数据。
+% \changes{v0.5.0.0}{2022/04/05}{添加PDF主题元数据}
+% \begin{macrocode}
+\RequirePackage{hyperref}
+\hypersetup
+ {
+ bookmarksnumbered,
+ hidelinks
+ }
+\ctex_at_end_preamble:n
+ {
+ \hypersetup
+ {
+ pdftitle = \l_@@_pure_title_str,
+%<xduugthesis> pdfsubject = {西安电子科技大学本科毕业设计论文},
+ pdfauthor = \l_@@_author_str
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+% \subsubsection{参考文献}
+% \begin{macro}{\addbibresource}
+% 参考文献。
+% \begin{macrocode}
+\@@_begin_document:n
+ {
+ \tl_if_eq:NnTF \l_@@_bib_tool_tl { bibtex }
+ {
+ \RequirePackage [ sort&compress,square,super,comma,numbers ] { natbib }
+ \RequirePackage { gbt7714 }
+ \bibliographystyle { gbt7714-numerical }
+ }
+ {
+ \RequirePackage [ style = gb7714-2015 ] { biblatex }
+ \clist_map_inline:Nn \l_@@_bib_file_clist { \addbibresource { #1 } }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+% \subsubsection{附录}
+% \begin{macro}{appendixes}
+% 附录环境。
+% \changes{v0.3.0.0}{2022/04/04}{新增附录环境}
+% \changes{v0.3.1.0}{2022/04/04}{修正附录中图表编号样式}
+% \begin{macrocode}
+\RequirePackage { environ }
+\NewEnviron { appendixes }
+ {
+ \appendix
+ \renewcommand { \thefigure } { \thechapter \arabic { figure } }
+ \renewcommand { \thetable } { \thechapter \arabic { table } }
+ \BODY
+ }
+% \end{macrocode}
+% \end{macro}
+% \subsubsection{通用宏包}
+% 设置纸张尺寸为A4。
+% \begin{macrocode}
+\RequirePackage { geometry }
+\geometry { paper = a4paper }
+% \end{macrocode}
+% \begin{macrocode}
+\RequirePackage { fancyhdr }
+\RequirePackage { xeCJKfntef }
+\RequirePackage { graphicx }
+% \end{macrocode}
+% \begin{macrocode}
+%</class>
+% \end{macrocode}
+% \subsection{xduugthesis.cls}
+% \begin{macrocode}
+%<*xduugthesis>
+% \end{macrocode}
+% \subsubsection{内部函数}
+% \begin{macro}{\@@_typeout_keywords:nNn}
+% 排版关键词。
+% \begin{arguments}
+% \item 标签名称。
+% \item 关键词列表。
+% \item 关键词分隔符。
+% \end{arguments}
+% \begin{macrocode}
+\cs_new:Npn \@@_typeout_keywords:nNn #1#2#3
+ {
+ \str_clear_new:N \l_@@_keywords_label_str
+ \str_set:Nn \l_@@_keywords_label_str { #1 }
+ \dim_zero_new:N \l_@@_keywords_label_dim
+ \@@_get_text_width:NV \l_@@_keywords_label_dim \l_@@_keywords_label_str
+ \begin { list } { \l_@@_keywords_label_str }
+ {
+ \labelwidth \l_@@_keywords_label_dim
+ \labelsep \c_zero_dim
+ \rightmargin \c_zero_dim
+ \leftmargin \l_@@_keywords_label_dim
+ }
+ \item \clist_use:Nnnn #2 { #3 } { #3 } { #3 }
+ \end { list }
+ }
+% \end{macrocode}
+% \end{macro}
+% \subsubsection{页面设置}
+% \paragraph{页面尺寸}
+% \begin{macro}{\geometry,\newgeometry,\savegeometry}
+% 正文页面:上3厘米、下2厘米、内侧3厘米、外侧2厘米;装订线1厘米;页眉2厘米;页脚1厘米。
+% \begin{macrocode}
+\newgeometry
+ {
+ top = 3cm,
+ bottom = 2cm,
+ inner = 3cm,
+ outer = 2cm,
+ bindingoffset = 1cm,
+ head = 2cm,
+ foot = 1cm
+ }
+\savegeometry { main }
+% \end{macrocode}
+% 封面页面:上2.5厘米、下2.5厘米、内侧3厘米、外侧2厘米。
+% \begin{macrocode}
+\newgeometry
+ {
+ top = 2.5cm,
+ bottom = 2.5cm,
+ inner = 3cm,
+ outer = 2cm
+ }
+\savegeometry { cover }
+% \end{macrocode}
+% \end{macro}
+% \paragraph{页眉页脚}
+% \begin{macro}{\chaptermark}
+% 设置奇数页页眉为章标题。
+% \begin{macrocode}
+\renewcommand { \chaptermark } [ 1 ]
+ {
+ \markboth
+ {
+ \@@_lang_switch:nn
+ { \CTEXthechapter }
+ { \chaptername\space\Roman { chapter } }
+ \quad #1
+ }
+ { }
+ }
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\fancypagestyle}
+% 设置正文页眉页脚。页眉:宋体五号,居中排列。左面页眉为论文题目,右面页眉为章次和章标题。页眉底划线的宽度为 0.75 磅。页码:宋体小五号,排在页眉行的最外侧,不加任何修饰。
+% \changes{v0.1.1.0}{2022/04/03}{修正页眉字号}
+% \begin{macrocode}
+\fancypagestyle { plain }
+ {
+ \pagestyle { fancy }
+ \fancyhf { }
+ \fancyhead [ CE ] { \@@_rm_family: \zihao { 5 } \l_@@_pure_title_str }
+ \fancyhead [ CO ] { \@@_rm_family: \zihao { 5 } \leftmark }
+ \fancyhead [ LE ] { \@@_rm_family: \zihao { -5 } \thepage }
+ \fancyhead [ RO ] { \@@_rm_family: \zihao { -5 } \thepage }
+ \renewcommand { \headrulewidth } { 0.75pt }
+ }
+% \end{macrocode}
+% \end{macro}
+% \subsubsection{标题设置}
+% 中文章标题黑体,三号,居中排列。节标题宋体,四号,居中排列。英文一级标题字体为Times New Roman,四号,正体,左对齐,以大写罗马数字(I、II 等)标出序号。其余各级标题的字体均为Times New Roman,小四号,正体。二级及以下级别的标题依次缩进4个英文字符,以1.1,1.2,1.1.1,1.1.2形式标出序号。
+% \paragraph{章节层次}
+% \begin{macro}{\ctexset}
+% 设置章节层次为subparagraph。
+% \begin{macrocode}
+\ctexset { secnumdepth=5 }
+% \end{macrocode}
+% \end{macro}
+% \paragraph{章节名字}
+% \begin{macro}{\ctexset}
+% 设置章节的名字。
+% \begin{macrocode}
+\ctexset
+ {
+ chapter / name =
+ {
+ \@@_lang_switch:nn { 第 } { \chaptername\space },
+ \@@_lang_switch:nn { 章 } { }
+ },
+ section / name = { },
+ subsection / name = { },
+ subsubsection / name = { },
+ paragraph / name = { },
+ subparagraph / name = { }
+ }
+% \end{macrocode}
+% \end{macro}
+% \paragraph{章节编号}
+% \begin{macro}{\ctexset}
+% 设置章节编号的数字输出格式。
+% \begin{macrocode}
+\ctexset
+ {
+ chapter / number =
+ {
+ \@@_lang_switch:nn
+ { \chinese { chapter } }
+ { \Roman { chapter } }
+ },
+ section / number = { \thesection },
+ subsection / number = { \thesubsection },
+ subsubsection / number = { \thesubsubsection },
+ paragraph / number = { \theparagraph },
+ subparagraph / number = { \thesubparagraph }
+ }
+% \end{macrocode}
+% \end{macro}
+% \paragraph{章节和标题}
+% \begin{macro}{\@@_zh_title:nnn}
+% 设置中文章节名字和随后的标题内容格式。
+% \begin{arguments}
+% \item 字体族。
+% \item 字号。
+% \item 位置。
+% \end{arguments}
+% \begin{macrocode}
+\cs_new:Npn \@@_zh_title:nnn #1#2#3
+ {
+ \use:c { @@_ #1 _family : }
+ \zihao { #2 }
+ \str_if_eq:ccTF { #3 } { c }
+ { \centering }
+ { \raggedright }
+ }
+% \end{macrocode}
+% \end{macro}
+% 设置英文章节名字和随后的标题内容格式。
+% \begin{macro}{\@@_en_title:nn}
+% \begin{arguments}
+% \item 字号。
+% \item 偏移量。
+% \end{arguments}
+% \begin{macrocode}
+\cs_new:Npn \@@_en_title:nn #1#2
+ { \zihao { #1 } \raggedright \skip_horizontal:n { #2 ex } }
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\ctexset}
+% 设置章节名字和随后的标题内容格式。
+% \begin{macrocode}
+\ctex_at_end_preamble:n
+ {
+ \@@_lang_switch:nn
+ {
+ \ctexset
+ {
+ chapter / format = { \@@_zh_title:nnn { sf } { 3 } { c } },
+ section / format = { \@@_zh_title:nnn { rm } { 4 } { c } },
+ subsection / format = { \@@_zh_title:nnn { rm } { 4 } { l } },
+ subsubsection / format = { \@@_zh_title:nnn { rm } { 4 } { l } },
+ paragraph / format = { \@@_zh_title:nnn { rm } { 4 } { l } },
+ subparagraph / format = { \@@_zh_title:nnn { rm } { 4 } { l } }
+ }
+ }
+ {
+ \ctexset
+ {
+ chapter / format = { \@@_en_title:nn { 4 } { 0 } },
+ section / format = { \@@_en_title:nn { -4 } { 4 } },
+ subsection / format = { \@@_en_title:nn { -4 } { 8 } },
+ subsubsection / format = { \@@_en_title:nn { -4 } { 12 } },
+ paragraph / format = { \@@_en_title:nn { -4 } { 16 } },
+ subparagraph / format = { \@@_en_title:nn { -4 } { 20 } }
+ }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\ctexset}
+% 设置章节标题前后的垂直间距。
+% \changes{v0.4.0.0}{2022/04/05}{设置章节标题前后的垂直间距}
+% \begin{macrocode}
+\ctexset
+ {
+ chapter / fixskip = true,
+ section / fixskip = true,
+ subsection / fixskip = true,
+ subsubsection / fixskip = true,
+ paragraph / fixskip = true,
+ subparagraph / fixskip = true,
+ chapter / beforeskip = { \clist_item:Nn \l_@@_before_skip_clist { 1 } },
+ section / beforeskip = { \clist_item:Nn \l_@@_before_skip_clist { 2 } },
+ subsection / beforeskip = { \clist_item:Nn \l_@@_before_skip_clist { 3 } },
+ subsubsection / beforeskip = { \clist_item:Nn \l_@@_before_skip_clist { 4 } },
+ paragraph / beforeskip = { \clist_item:Nn \l_@@_before_skip_clist { 5 } },
+ subparagraph / beforeskip = { \clist_item:Nn \l_@@_before_skip_clist { 6 } },
+ chapter / afterskip = { \clist_item:Nn \l_@@_after_skip_clist { 1 } },
+ section / afterskip = { \clist_item:Nn \l_@@_after_skip_clist { 2 } },
+ subsection / afterskip = { \clist_item:Nn \l_@@_after_skip_clist { 3 } },
+ subsubsection / afterskip = { \clist_item:Nn \l_@@_after_skip_clist { 4 } },
+ paragraph / afterskip = { \clist_item:Nn \l_@@_after_skip_clist { 5 } },
+ subparagraph / afterskip = { \clist_item:Nn \l_@@_after_skip_clist { 6 } }
+ }
+% \end{macrocode}
+% \end{macro}
+% \paragraph{封面}
+% \begin{macro}{\@@_cover_i:nn}
+% 绘制班级和学号。
+% \begin{arguments}
+% \item 标签名称。
+% \item 班级和学号对应值。
+% \end{arguments}
+% \begin{macrocode}
+\cs_new:Npn \@@_cover_i:nn #1#2
+ {
+ \vbox_to_ht:nn {12pt}
+ {
+ \mode_leave_vertical:
+ \hfill
+ \hbox:n
+ {
+ \@@_rm_family: \zihao { -4 } \bfseries
+ \hbox_to_wd:nn { 3em } { #1 }
+ \skip_horizontal:n { 1em }
+ \@@_uline:n { \hbox_to_wd:nn { 15ex } { \hfil #2 \hfil } }
+ \skip_horizontal:n { 1.5cm }
+ }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_cover_ii:nnn}
+% 绘制西电logo。
+% \begin{arguments}
+% \item 盒子高度。
+% \item logo高度。
+% \item logo文件名称。
+% \end{arguments}
+% \begin{macrocode}
+\cs_new:Npn \@@_cover_ii:nnn #1#2#3
+ {
+ \vbox_to_ht:nn {#1}
+ {
+ \mode_leave_vertical:
+ \hfil
+ \includegraphics [ height = #2, keepaspectratio ] { #3 }
+ \hfil
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_cover_iii:nnnnn}
+% 绘制论文信息。
+% \begin{arguments}
+% \item 标签宽度。
+% \item 标签名称。
+% \item 字体族。
+% \item 字号。
+% \item 论文信息。
+% \end{arguments}
+% \begin{macrocode}
+\cs_new:Npn \@@_cover_iii:nnnnn #1#2#3#4#5
+ {
+ \vbox_to_ht:nn {40pt}
+ {
+ \vfill
+ \mode_leave_vertical:
+ \hfil
+ \hbox:n
+ {
+ \@@_rm_family:
+ \zihao { 3 }
+ \hbox_to_wd:nn { #1 } { \bfseries #2 }
+ \skip_horizontal:n { 1em }
+ \zihao { -3 }
+ \@@_uline:n
+ {
+ \hbox_to_wd:nn { 16em }
+ { \hfil \use:c { @@_ #3 _family : } \zihao { #4 } #5 \hfil }
+ }
+ }
+ \hfil
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_split_title:Nn,\@@_split_title:Nn}
+% 拆分标题。
+% \begin{arguments}
+% \item 拆分后标题。
+% \item 拆分前标题。
+% \end{arguments}
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_split_title:Nn #1#2
+ {
+ \seq_new:N \l_@@_title_seq
+ \tl_if_in:nnTF { #2 } { \\ }
+ {
+ \seq_set_split:Nnn \l_@@_title_seq { \\ } { #2 }
+ \clist_set_from_seq:NN #1 \l_@@_title_seq
+ }
+ {
+ \clist_put_right:Nx #1 { \tl_range:nnn { #2 } { 1 } { 14 } }
+ \clist_put_right:Nx #1 { \tl_range:nnn { #2 } { 15 } { -1 } }
+ }
+ }
+\cs_generate_variant:Nn \@@_split_title:Nn { NV }
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_cover_iii:nnnn}
+% \changes{v0.1.4.0}{2022/04/03}{自动调整论文信息标签宽度}
+% 绘制论文信息并自动调整论文信息标签宽度。
+% \begin{arguments}
+% \item 标签名称。
+% \item 字体族。
+% \item 字号。
+% \item 论文信息。
+% \end{arguments}
+% \begin{macrocode}
+\ctex_at_end_preamble:n
+ {
+ \cs_new:Npn \@@_cover_iii:nnnn #1#2#3#4
+ {
+ \tl_if_blank:VTF \l_@@_supv_dept_str
+ { \@@_cover_iii:nnnnn { 4em } { #1 } { #2 } { #3 } { #4 } }
+ { \@@_cover_iii:nnnnn { 6em } { #1 } { #2 } { #3 } { #4 } }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\frontmatter}
+% 排版正文前部分。
+% \begin{macrocode}
+\renewcommand{\frontmatter}
+ {
+ \loadgeometry { cover }
+ \pagestyle { empty }
+ \dim_set:Nn \parindent { 0pt }
+ \@@_add_bookmark:n { \@@_lang_switch:nn { 封面 } { Cover } }
+% \end{macrocode}
+% 排版班级和学号。
+% \begin{macrocode}
+ \@@_cover_i:nn { 班级 } { \l_@@_class_id_str }
+ \@@_cover_i:nn { 学号 } { \l_@@_student_id_str }
+ \skip_vertical:n { 30pt }
+% \end{macrocode}
+% 排版西电文字logo。
+% \begin{macrocode}
+ \@@_cover_ii:nnn { 65pt } { 35pt } { xidian-text }
+% \end{macrocode}
+% 排版封面标题。
+% \begin{macrocode}
+ \vbox_to_ht:nn { 75pt }
+ { \@@_sf_family: \zihao { 0 } \centering { 本科毕业设计论文 } }
+% \end{macrocode}
+% 排版西电logo。
+% \begin{macrocode}
+ \@@_cover_ii:nnn { 130pt } { 120pt } { xidian-logo }
+% \end{macrocode}
+% 拆分论文标题并排版。
+% \begin{macrocode}
+ \clist_new:N \l_@@_title_clist
+ \@@_split_title:NV \l_@@_title_clist \l_@@_title_str
+ \str_set:Nx \l_@@_title_i_str { \clist_item:Nn \l_@@_title_clist { 1 } }
+ \str_set:Nx \l_@@_title_ii_str { \clist_item:Nn \l_@@_title_clist { 2 } }
+ \@@_cover_iii:nnnn { 题目 } { sf } { 3 } { \l_@@_title_i_str }
+ \tl_if_blank:VF \l_@@_title_ii_str
+ { \@@_cover_iii:nnnn { } { sf } { 3 } { \l_@@_title_ii_str } }
+% \end{macrocode}
+% 排版学院、专业、学生姓名。
+% \begin{macrocode}
+ \@@_cover_iii:nnnn { 学院 } { rm } { -3 } { \l_@@_dept_str }
+ \@@_cover_iii:nnnn { 专业 } { rm } { -3 } { \l_@@_major_str }
+ \@@_cover_iii:nnnn { 学生姓名 } { rm } { -3 } { \l_@@_author_str }
+% \end{macrocode}
+% 校外毕设,排版校外导师姓名、校内导师姓名。
+% \begin{macrocode}
+ \tl_if_blank:VTF \l_@@_supv_str
+ {
+ \@@_cover_iii:nnnn { 校外导师姓名 } { rm } { -3 } { \l_@@_supv_ent_str }
+ \@@_cover_iii:nnnn { 校内导师姓名 } { rm } { -3 } { \l_@@_supv_sch_str }
+ }
+% \end{macrocode}
+% 校内毕设,排版导师姓名、院内导师姓名。
+% \begin{macrocode}
+ {
+ \@@_cover_iii:nnnn { 导师姓名 } { rm } { -3 } { \l_@@_supv_str }
+ \tl_if_blank:VF \l_@@_supv_dept_str
+ {
+ \@@_cover_iii:nnnn
+ { 院内导师姓名 }
+ { rm }
+ { -3 }
+ { \l_@@_supv_dept_str }
+ }
+ }
+ \cleardoublepage
+% \end{macrocode}
+% 更换页面尺寸、页面样式和页码样式。
+% \begin{macrocode}
+ \loadgeometry { main }
+ \pagestyle { plain }
+ \pagenumbering { Roman }
+% \end{macrocode}
+% 中文摘要,宋体小四号。
+% \begin{macrocode}
+ \@@_n_chapter_head:n { 摘要 }
+ {
+ \dim_set:Nn \parindent { 2\ccwd }
+ \rmfamily \zihao { -4 }
+ \file_if_exist_input:n { \l_@@_abstract_zh_tl }
+ }
+% \end{macrocode}
+% 中文关键词,黑体小四号。
+% \begin{macrocode}
+ {
+ \sffamily \zihao { -4 } \par
+ \@@_typeout_keywords:nNn { 关键词: } { \l_@@_keywords_zh_clist } { \qquad }
+ }
+ \cleardoublepage
+% \end{macrocode}
+% 英文摘要,Times New Roman字体,小四号。
+% \changes{v0.4.3.0}{2022/04/05}{修正英文摘要标题字体}
+% \begin{macrocode}
+ \@@_n_chapter_head:nn {ABSTRACT} { \rmfamily \zihao{3} \bfseries \centering }
+ {
+ \dim_set:Nn \parindent { 2\ccwd }
+ \rmfamily \zihao { -4 }
+ \file_if_exist_input:n { \l_@@_abstract_en_tl }
+ }
+% \end{macrocode}
+% 英文关键词,Times New Roman字体加粗,小四号。
+% \begin{macrocode}
+ {
+ \rmfamily \zihao { -4 } \bfseries \par
+ \@@_typeout_keywords:nNn { Keywords: } { \l_@@_keywords_en_clist } { \qquad }
+ }
+ \cleardoublepage
+% \end{macrocode}
+% 目录。
+% \begin{macrocode}
+ \setcounter { tocdepth } { 5 }
+ \tl_set:Nn \contentsname { \@@_lang_switch:nn { 目录 } { Contents } }
+ \@@_add_bookmark:n { \contentsname }
+ \tableofcontents
+ \cleardoublepage
+ }
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\mainmatter}
+% \paragraph{正文}
+% \begin{macro}{\theequation}
+% 重定义公式编号样式。
+% \begin{macrocode}
+\renewcommand { \theequation } { \thechapter - \arabic { equation } }
+% \end{macrocode}
+% \end{macro}
+% 排版正文部分。
+% \begin{macrocode}
+\renewcommand{\mainmatter}
+ {
+ \loadgeometry { main }
+ \pagestyle { plain }
+ \pagenumbering { arabic }
+ \dim_set:Nn \parindent { 2\ccwd }
+ \rmfamily \zihao { -4 }
+ }
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\backmatter}
+% 排版正文后部分。
+% \begin{macrocode}
+\renewcommand{\backmatter}
+ {
+% \end{macrocode}
+% 致谢。
+% \begin{macrocode}
+ \@@_n_chapter_head_toc:n { \@@_lang_switch:nn { 致谢 } { Acknowledgements } }
+ {
+ \dim_set:Nn \parindent { 2\ccwd }
+ \rmfamily \zihao { -4 }
+ \file_if_exist_input:n { \l_@@_ack_tl }
+ }
+% \end{macrocode}
+% 参考文献。
+% \changes{v0.2.1.0}{2022/04/04}{参考文献添加至目录}
+% \changes{v0.5.2.0}{2022/04/07}{修正参考文献列表字体字号}
+% \begin{macrocode}
+ \@@_add_toc:n { \@@_lang_switch:nn { 参考文献 } { Bibliography } }
+ {
+ \tl_if_eq:NnTF \l_@@_bib_tool_tl { bibtex }
+ {
+ \@@_rm_family: \zihao { 5 }
+ \bibliography { \l_@@_bib_file_clist }
+ }
+ {
+ \renewcommand { \bibfont } { \@@_rm_family: \zihao { 5 } }
+ \printbibliography
+ }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+% \begin{macrocode}
+%</xduugthesis>
+% \end{macrocode}
+% \begin{macrocode}
+%<@@=>
+% \end{macrocode}
+% \Finale
+\endinput
diff --git a/Master/texmf-dist/source/xelatex/xduts/xduts.ins b/Master/texmf-dist/source/xelatex/xduts/xduts.ins
new file mode 100644
index 00000000000..f47fc5e39ca
--- /dev/null
+++ b/Master/texmf-dist/source/xelatex/xduts/xduts.ins
@@ -0,0 +1,29 @@
+\input ctxdocstrip
+\askforoverwritefalse
+\preamble
+
+ Copyright (C) 2022--\the\year by @note286 in GitHub
+---------------------------------------------------------------------
+
+ This work may be distributed and/or modified under the
+ conditions of the LaTeX Project Public License, either
+ version 1.3c of this license or (at your option) any later
+ version. This version of this license is in
+ http://www.latex-project.org/lppl/lppl-1-3c.txt
+ and the latest version of this license is in
+ http://www.latex-project.org/lppl.txt
+ and version 1.3 or later is part of all distributions of
+ LaTeX version 2005/12/01 or later.
+
+ This work has the LPPL maintenance status "maintained".
+
+---------------------------------------------------------------------
+
+\endpreamble
+\postamble
+\endpostamble
+\keepsilent
+\generate{\file{xduugthesis.cls}{\from{\jobname.dtx}{class,xduugthesis}}}
+\nopreamble
+\nopostamble
+\endbatchfile
diff --git a/Master/texmf-dist/tex/xelatex/xduts/xduugthesis.cls b/Master/texmf-dist/tex/xelatex/xduts/xduugthesis.cls
new file mode 100644
index 00000000000..6e5b896a0fa
--- /dev/null
+++ b/Master/texmf-dist/tex/xelatex/xduts/xduugthesis.cls
@@ -0,0 +1,914 @@
+%%
+%% This is file `xduugthesis.cls',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% xduts.dtx (with options: `class,xduugthesis')
+%%
+%% Copyright (C) 2022--2022 by @note286 in GitHub
+%% ---------------------------------------------------------------------
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either
+%% version 1.3c of this license or (at your option) any later
+%% version. This version of this license is in
+%% http://www.latex-project.org/lppl/lppl-1-3c.txt
+%% and the latest version of this license is in
+%% http://www.latex-project.org/lppl.txt
+%% and version 1.3 or later is part of all distributions of
+%% LaTeX version 2005/12/01 or later.
+%%
+%% This work has the LPPL maintenance status "maintained".
+%%
+%% ---------------------------------------------------------------------
+%%
+\NeedsTeXFormat{LaTeX2e}
+\RequirePackage{expl3}
+\ProvidesExplClass{xduugthesis}
+ {2022/04/09}{0.5.2.1}{Xidian University Undergraduate Thesis class}
+\RequirePackage { xparse, l3keys2e }
+\tl_new:N \l__xdu_cjk_font_tl
+\str_new:N \l__xdu_fake_bold_str
+\str_new:N \l__xdu_fake_slant_str
+\tl_new:N \l__xdu_latin_font_tl
+\tl_new:N \l__xdu_math_font_tl
+\tl_new:N \l__xdu_unicode_math_tl
+\tl_new:N \l__xdu_font_type_tl
+\tl_new:N \l__xdu_font_path_tl
+\bool_new:N \l__xdu_en_cjk_font_bool
+\tl_new:N \l__xdu_lang_tl
+\tl_new:N \l__xdu_bib_tool_tl
+\clist_new:N \l__xdu_bib_file_clist
+\tl_new:N \l__xdu_fig_label_sep_tl
+\clist_new:N \l__xdu_before_skip_clist
+\clist_new:N \l__xdu_after_skip_clist
+\keys_define:nn { xdu / style }
+ {
+ cjk-font .choices:nn =
+ { win, adobe, founder, sinotype, fandol, none }
+ { \tl_set_eq:NN \l__xdu_cjk_font_tl \l_keys_choice_tl },
+ cjk-fake-bold .str_set:N = \l__xdu_fake_bold_str,
+ cjk-fake-slant .str_set:N = \l__xdu_fake_slant_str,
+ latin-font .choices:nn = { tacn, thcs, none }
+ { \tl_set_eq:NN \l__xdu_latin_font_tl \l_keys_choice_tl },
+ math-font .choices:nn =
+ {
+ asana, cambria, cm, fira, garamond, lm, libertinus, stix,
+ bonum, dejavu, pagella, schola, termes, xits, none
+ }
+ { \tl_set_eq:NN \l__xdu_math_font_tl \l_keys_choice_tl },
+ unicode-math .tl_set:N = \l__xdu_unicode_math_tl,
+ font-type .choices:nn = { font, file }
+ { \tl_set_eq:NN \l__xdu_font_type_tl \l_keys_choice_tl },
+ font-path .tl_set:N = \l__xdu_font_path_tl,
+ en-cjk-font .bool_set:N = \l__xdu_en_cjk_font_bool,
+ language .choices:nn = { zh, en }
+ { \tl_set_eq:NN \l__xdu_lang_tl \l_keys_choice_tl },
+ bib-backend .choices:nn = { bibtex, biblatex }
+ { \tl_set_eq:NN \l__xdu_bib_tool_tl \l_keys_choice_tl },
+ bib-resource .clist_set:N = \l__xdu_bib_file_clist,
+ fig-label-sep .tl_set:N = \l__xdu_fig_label_sep_tl,
+ before-skip .clist_set:N = \l__xdu_before_skip_clist,
+ after-skip .clist_set:N = \l__xdu_after_skip_clist
+ }
+\str_new:N \l__xdu_title_str
+\str_new:N \l__xdu_title_i_str
+\str_new:N \l__xdu_title_ii_str
+\str_new:N \l__xdu_dept_str
+\str_new:N \l__xdu_major_str
+\str_new:N \l__xdu_author_str
+\str_new:N \l__xdu_supv_str
+\str_new:N \l__xdu_supv_dept_str
+\str_new:N \l__xdu_supv_ent_str
+\str_new:N \l__xdu_supv_sch_str
+\str_new:N \l__xdu_class_id_str
+\str_new:N \l__xdu_student_id_str
+\tl_new:N \l__xdu_abstract_zh_tl
+\tl_new:N \l__xdu_abstract_en_tl
+\clist_new:N \l__xdu_keywords_zh_clist
+\clist_new:N \l__xdu_keywords_en_clist
+\tl_new:N \l__xdu_ack_tl
+\keys_define:nn { xdu / info }
+ {
+ title .tl_set:N = \l__xdu_title_str,
+ department .tl_set:N = \l__xdu_dept_str,
+ major .tl_set:N = \l__xdu_major_str,
+ author .tl_set:N = \l__xdu_author_str,
+ supervisor .tl_set:N = \l__xdu_supv_str,
+ supervisor-department .tl_set:N = \l__xdu_supv_dept_str,
+ supervisor-enterprise .tl_set:N = \l__xdu_supv_ent_str,
+ supervisor-school .tl_set:N = \l__xdu_supv_sch_str,
+ class-id .tl_set:N = \l__xdu_class_id_str,
+ student-id .tl_set:N = \l__xdu_student_id_str,
+ abstract .tl_set:N = \l__xdu_abstract_zh_tl,
+ abstract* .tl_set:N = \l__xdu_abstract_en_tl,
+ keywords .clist_set:N = \l__xdu_keywords_zh_clist,
+ keywords* .clist_set:N = \l__xdu_keywords_en_clist,
+ acknowledgements .tl_set:N = \l__xdu_ack_tl
+ }
+\keys_define:nn { xdu }
+ {
+ style .meta:nn = { xdu / style } { #1 },
+ info .meta:nn = { xdu / info } { #1 }
+ }
+\keys_set:nn { xdu }
+ {
+ style / cjk-font = win,
+ style / cjk-fake-bold = 3,
+ style / cjk-fake-slant = 0.2,
+ style / latin-font = tacn,
+ style / math-font = cm,
+ style / unicode-math = { },
+ style / font-type = font,
+ style / font-path = fonts,
+ style / en-cjk-font = false,
+ style / language = zh,
+ style / bib-backend = biblatex,
+ style / bib-resource = { },
+ style / fig-label-sep = { 0.75em },
+ style / before-skip = { 24pt, 18pt, 12pt, 12pt, 12pt, 12pt },
+ style / after-skip = { 18pt, 12pt, 6pt, 6pt, 6pt, 6pt },
+ info / title = { },
+ info / department = { },
+ info / major = { },
+ info / author = { },
+ info / supervisor = { },
+ info / supervisor-department = { },
+ info / supervisor-enterprise = { },
+ info / supervisor-school = { },
+ info / class-id = { },
+ info / student-id = { },
+ info / abstract = { },
+ info / abstract* = { },
+ info / keywords = { },
+ info / keywords* = { },
+ info / acknowledgements = { }
+ }
+\NewDocumentCommand \xdusetup { m }
+ { \keys_set:nn { xdu } { #1 } }
+\ProcessKeysOptions { xdu }
+\str_if_eq:NNTF { \l__xdu_cjk_font_tl } { fandol }
+ { \PassOptionsToPackage { quiet } { fontspec } }
+ { }
+\PassOptionsToPackage { quiet } { xeCJK }
+\PassOptionsToClass
+ {
+ zihao=-4,
+ sub4section,
+ linespread = 1.5,
+ fontset = none
+ }
+ { ctexbook }
+\LoadClass { ctexbook }
+\cs_new:Npn \__xdu_font_path:
+ {
+ \str_if_eq:NNTF { \l__xdu_font_type_tl } { font }
+ { }
+ { Path = \l__xdu_font_path_tl / , }
+ }
+\cs_new:Npn \__xdu_if_platform_macos:FT #1#2
+ { \ctex_if_platform_macos:TF { #2 } { #1 } }
+\cs_new:Npn \__xdu_texmf_font:nn #1#2
+ { \__xdu_if_platform_macos:FT { #1 } { #2 } }
+\cs_new:Npn \__xdu_rm_family:
+ { \bool_if:NTF \l__xdu_en_cjk_font_bool { \CJKfamily+ { rm } } { \rmfamily } }
+\cs_new:Npn \__xdu_sf_family:
+ { \bool_if:NTF \l__xdu_en_cjk_font_bool { \CJKfamily+ { sf } } { \sffamily } }
+\cs_new:Npn \__xdu_tt_family:
+ { \bool_if:NTF \l__xdu_en_cjk_font_bool { \CJKfamily+ { tt } } { \ttfamily } }
+\cs_new:Npn \__xdu_cfg_cjk_font_sub_b:n #1
+ {
+ BoldFont = { #1 }
+ }
+\cs_new:Npn \__xdu_cfg_cjk_font_sub_fb:n #1
+ {
+ BoldFont = { #1 },
+ BoldFeatures = { FakeBold = \l__xdu_fake_bold_str }
+ }
+\cs_new:Npn \__xdu_cfg_cjk_font_sub_fs:n #1
+ {
+ SlantedFont = { #1 },
+ SlantedFeatures = { FakeSlant = \l__xdu_fake_slant_str }
+ }
+\cs_new:Npn \__xdu_cfg_cjk_font_sub_fbfs:n #1
+ {
+ BoldSlantedFont = { #1 },
+ BoldSlantedFeatures =
+ {
+ FakeBold = \l__xdu_fake_bold_str,
+ FakeSlant = \l__xdu_fake_slant_str
+ }
+ }
+\cs_new:Npn \__xdu_cfg_cjk_font_sub_bfs:n #1
+ {
+ BoldSlantedFont = { #1 },
+ BoldSlantedFeatures = { FakeSlant = \l__xdu_fake_slant_str }
+ }
+\cs_new:Npn \__xdu_cfg_cjk_font_sub_i:n #1
+ {
+ ItalicFont = { #1 }
+ }
+\cs_new:Npn \__xdu_cfg_cjk_font_sub_fi:n #1
+ {
+ ItalicFont = { #1 },
+ ItalicFeatures = { FakeSlant = \l__xdu_fake_slant_str }
+ }
+\cs_new:Npn \__xdu_cfg_cjk_font_sub_ifb:n #1
+ {
+ BoldItalicFont = { #1 },
+ BoldItalicFeatures = { FakeBold = \l__xdu_fake_bold_str }
+ }
+\cs_new:Npn \__xdu_cfg_cjk_font_sub_fifb:n #1
+ {
+ BoldItalicFont = { #1 },
+ BoldItalicFeatures =
+ {
+ FakeBold = \l__xdu_fake_bold_str,
+ FakeSlant = \l__xdu_fake_slant_str
+ }
+ }
+\cs_new:Npn \__xdu_cfg_cjk_font_r:n #1
+ {
+ \__xdu_cfg_cjk_font_sub_fb:n { #1 },
+ \__xdu_cfg_cjk_font_sub_fs:n { #1 },
+ \__xdu_cfg_cjk_font_sub_fbfs:n { #1 },
+ \__xdu_cfg_cjk_font_sub_fi:n { #1 },
+ \__xdu_cfg_cjk_font_sub_fifb:n { #1 }
+ }
+\cs_new:Npn \__xdu_cfg_cjk_font_rb:nn #1#2
+ {
+ \__xdu_cfg_cjk_font_sub_b:n { #2 },
+ \__xdu_cfg_cjk_font_sub_fs:n { #1 },
+ \__xdu_cfg_cjk_font_sub_bfs:n { #2 },
+ \__xdu_cfg_cjk_font_sub_fi:n { #1 },
+ \__xdu_cfg_cjk_font_sub_fifb:n { #1 }
+ }
+\cs_new:Npn \__xdu_cfg_cjk_font_ri:nn #1#2
+ {
+ \__xdu_cfg_cjk_font_sub_fb:n { #1 },
+ \__xdu_cfg_cjk_font_sub_fs:n { #1 },
+ \__xdu_cfg_cjk_font_sub_fbfs:n { #1 },
+ \__xdu_cfg_cjk_font_sub_i:n { #2 },
+ \__xdu_cfg_cjk_font_sub_ifb:n { #2 }
+ }
+\cs_new:Npn \__xdu_cfg_cjk_font_rbi:nnn #1#2#3
+ {
+ \__xdu_cfg_cjk_font_sub_b:n { #2 },
+ \__xdu_cfg_cjk_font_sub_fs:n { #1 },
+ \__xdu_cfg_cjk_font_sub_bfs:n { #2 },
+ \__xdu_cfg_cjk_font_sub_i:n { #3 },
+ \__xdu_cfg_cjk_font_sub_ifb:n { #3 }
+ }
+\cs_new:Npn \__xdu_select_font:nn #1#2
+ {
+ \str_if_eq:NNTF { \l__xdu_font_type_tl } { font }
+ { #1 }
+ { #2 }
+ }
+\cs_new:Npn \__xdu_set_cjk_main_font:nn #1#2
+ {
+ \setCJKmainfont { #1 }
+ [ \__xdu_font_path: \__xdu_cfg_cjk_font_ri:nn { #1 } { #2 } ]
+ }
+\cs_new:Npn \__xdu_set_cjk_main_font:nnn #1#2#3
+ {
+ \setCJKmainfont { #1 }
+ [ \__xdu_font_path: \__xdu_cfg_cjk_font_rbi:nnn { #1 } { #2 } { #3 } ]
+ }
+\cs_new:Npn \__xdu_set_cjk_sans_font:n #1
+ {
+ \setCJKsansfont { #1 }
+ [ \__xdu_font_path: \__xdu_cfg_cjk_font_r:n { #1 } ]
+ }
+\cs_new:Npn \__xdu_set_cjk_sans_font:nn #1#2
+ {
+ \setCJKsansfont { #1 }
+ [ \__xdu_font_path: \__xdu_cfg_cjk_font_rb:nn { #1 } { #2 } ]
+ }
+\cs_new:Npn \__xdu_set_cjk_mono_font:n #1
+ {
+ \setCJKmonofont { #1 }
+ [ \__xdu_font_path: \__xdu_cfg_cjk_font_r:n { #1 } ]
+ }
+\cs_new:Npn \__xdu_load_cjk_font_win:
+ {
+ \__xdu_set_cjk_main_font:nn
+ { \__xdu_select_font:nn { SimSun } { simsun.ttc } }
+ { \__xdu_select_font:nn { KaiTi } { simkai.ttf } }
+ \__xdu_set_cjk_sans_font:n
+ { \__xdu_select_font:nn { SimHei } { simhei.ttf } }
+ \__xdu_set_cjk_mono_font:n
+ { \__xdu_select_font:nn { FangSong } { simfang.ttf } }
+ }
+\cs_new:Npn \__xdu_load_cjk_font_adobe:
+ {
+ \__xdu_set_cjk_main_font:nn
+ { \__xdu_select_font:nn { Adobe~Song~Std } { adobesongstd-light.otf } }
+ { \__xdu_select_font:nn { Adobe~Kaiti~Std } { adobekaitistd-regular.otf } }
+ \__xdu_set_cjk_sans_font:n
+ { \__xdu_select_font:nn { Adobe~Heiti~Std } { adobeheitistd-regular.otf } }
+ \__xdu_set_cjk_mono_font:n
+ { \__xdu_select_font:nn { Adobe~Fangsong~Std } { Adobe-Fangsong-Std-R-Font.otf } }
+ }
+\cs_new:Npn \__xdu_load_cjk_font_founder:
+ {
+ \__xdu_set_cjk_main_font:nn
+ { \__xdu_select_font:nn { FZShuSong-Z01 } { FZShuSong-Z01.ttf } }
+ { \__xdu_select_font:nn { FZKai-Z03 } { FZKai-Z03.ttf } }
+ \__xdu_set_cjk_sans_font:n
+ { \__xdu_select_font:nn { FZHei-B01 } { FZHei-B01.ttf } }
+ \__xdu_set_cjk_mono_font:n
+ { \__xdu_select_font:nn { FZFangSong-Z02 } { FZFSK.TTF } }
+ }
+\cs_new:Npn \__xdu_load_cjk_font_sinotype:
+ {
+ \__xdu_set_cjk_main_font:nn
+ { \__xdu_select_font:nn { STSong } { STSONG.TTF } }
+ { \__xdu_select_font:nn { STKaiti } { STKAITI.TTF } }
+ \__xdu_set_cjk_sans_font:nn
+ { \__xdu_select_font:nn { STXihei } { STXIHEI.TTF } }
+ { \__xdu_select_font:nn { STHeiti } { STHeiti.ttf } }
+ \__xdu_set_cjk_mono_font:n
+ { \__xdu_select_font:nn { STFangsong } { STFANGSO.TTF } }
+ }
+\cs_new:Npn \__xdu_load_cjk_font_fandol:
+ {
+ \__xdu_set_cjk_main_font:nnn
+ { FandolSong-Regular.otf }
+ { FandolSong-Bold.otf }
+ { FandolKai-Regular.otf }
+ \__xdu_set_cjk_sans_font:nn
+ { FandolHei-Regular.otf }
+ { FandolHei-Bold.otf }
+ \__xdu_set_cjk_mono_font:n
+ { FandolFang-Regular.otf }
+ }
+\cs_new:Npn \__xdu_load_cjk_font_none: { }
+\cs_new:Npn \__xdu_set_latin_font:nnn #1#2#3
+ {
+ \__xdu_font_path:
+ BoldFont = { #1 },
+ SlantedFont = { #2 },
+ BoldSlantedFont = { #3 },
+ ItalicFont = { #2 },
+ BoldItalicFont = { #3 }
+ }
+\cs_new:Npn \__xdu_set_latin_main_font:nnnnn #1#2#3#4#5
+ {
+ \str_if_eq:NNTF { \l__xdu_font_type_tl } { font }
+ { \setmainfont { #1 } }
+ { \setmainfont { #2 } [ \__xdu_set_latin_font:nnn { #3 } { #4 } { #5 } ] }
+ }
+\cs_new:Npn \__xdu_set_latin_sans_font:nnnnn #1#2#3#4#5
+ {
+ \str_if_eq:NNTF { \l__xdu_font_type_tl } { font }
+ { \setsansfont { #1 } }
+ { \setsansfont { #2 } [ \__xdu_set_latin_font:nnn { #3 } { #4 } { #5 } ] }
+ }
+\cs_new:Npn \__xdu_set_latin_mono_font:nnnnn #1#2#3#4#5
+ {
+ \str_if_eq:NNTF { \l__xdu_font_type_tl } { font }
+ { \setmonofont{ #1 } }
+ { \setmonofont{ #2 } [ \__xdu_set_latin_font:nnn { #3 } { #4 } { #5 } ] }
+ }
+\cs_new:Npn \__xdu_load_latin_font_tacn:
+ {
+ \__xdu_set_latin_main_font:nnnnn
+ { Times~New~Roman } { times.ttf } { timesbd.ttf } { timesi.ttf } { timesbi.ttf }
+ \__xdu_set_latin_sans_font:nnnnn
+ { Arial } { arial.ttf } { arialbd.ttf } { ariali.ttf } { arialbi.ttf }
+ \__xdu_set_latin_mono_font:nnnnn
+ { Courier~New } { cour.ttf } { courbd.ttf } { couri.ttf } { courbi.ttf }
+ }
+\cs_new:Npn \__xdu_load_latin_font_thcs:
+ {
+ \__xdu_set_latin_main_font:nnnnn
+ { Times~New~Roman }
+ { times.ttf }
+ { timesbd.ttf }
+ { timesi.ttf }
+ { timesbi.ttf }
+ \__xdu_set_latin_sans_font:nnnnn
+ { Helvetica }
+ { Helvetica.ttf }
+ { Helvetica~Bold.ttf }
+ { Helvetica~Oblique.ttf }
+ { Helvetica~Bold~Oblique.ttf }
+ \__xdu_set_latin_mono_font:nnnnn
+ { Courier~Std }
+ { CourierStd.otf }
+ { CourierStd-Bold.otf }
+ { CourierStd-Oblique.otf }
+ { CourierStd-BoldOblique.otf }
+ }
+\cs_new:Npn \__xdu_load_latin_font_none: { }
+\cs_new:Npn \__xdu_load_unicode_math_pkg:
+ {
+ \RequirePackage
+ [ \l__xdu_unicode_math_tl ]
+ { unicode-math }
+ }
+\cs_new:Npn \__xdu_load_math_font_cambria:
+ {
+ \__xdu_load_unicode_math_pkg:
+ \str_if_eq:NNTF { \l__xdu_font_type_tl} { font}
+ { \setmathfont { Cambria~Math} }
+ { \setmathfont { cambria.ttc} [ Path = \l__xdu_font_path_tl/, FontIndex = 1 ] }
+ }
+\cs_new:Npn \__xdu_define_math_font:nn #1#2
+ {
+ \cs_new:cpn { __xdu_load_math_font_ #1 : }
+ {
+ \__xdu_load_unicode_math_pkg:
+ \setmathfont { #2 }
+ }
+ }
+\clist_map_inline:nn
+ {
+ { asana } { Asana-Math.otf },
+ { fira } { FiraMath-Regular.otf },
+ { garamond } { Garamond-Math.otf },
+ { lm } { latinmodern-math.otf },
+ { libertinus } { LibertinusMath-Regular.otf },
+ { stix } { STIXMath-Regular.otf },
+ { bonum } { texgyrebonum-math.otf },
+ { dejavu } { texgyredejavu-math.otf },
+ { pagella } { texgyrepagella-math.otf },
+ { schola } { texgyreschola-math.otf },
+ { termes } { texgyretermes-math.otf }
+ }
+ { \__xdu_define_math_font:nn #1 }
+\cs_new:Npn \__xdu_load_math_font_xits:
+ {
+ \__xdu_load_unicode_math_pkg:
+ \__xdu_if_platform_macos:FT
+ {
+ \setmathfont { XITS~Math }
+ }
+ {
+ \__xdu_load_unicode_math_pkg:
+ \setmathfont { XITSMath-Regular.otf }
+ \setmathfont { XITSMath-Bold.otf }
+ [range= { bfup -> up, bfit -> it } ]
+ }
+ }
+\cs_new:Npn \__xdu_load_math_font_cm: { }
+\cs_new:Npn \__xdu_load_math_font_none: { }
+\cs_new:Npn \__xdu_load_font:
+ {
+ \use:c { __xdu_load_cjk_font_ \l__xdu_cjk_font_tl : }
+ \use:c { __xdu_load_latin_font_ \l__xdu_latin_font_tl : }
+ \use:c { __xdu_load_math_font_ \l__xdu_math_font_tl : }
+ }
+\ctex_at_end_preamble:n { \__xdu_load_font: }
+\cs_new_protected:Npn \__xdu_begin_document:n #1
+ { \ctex_gadd_ltxhook:nn { env/document/begin } { #1 } }
+\cs_new:Npn \__xdu_lang_switch:nn #1#2
+ {
+ \str_if_eq:NNTF { \l__xdu_lang_tl } { zh }
+ { #1 }
+ { #2 }
+ }
+\ctex_at_end_preamble:n
+ {
+ \str_new:N \l__xdu_pure_title_str
+ \str_set_eq:NN \l__xdu_pure_title_str \l__xdu_title_str
+ \str_remove_all:Nn \l__xdu_pure_title_str { \\ }
+ }
+\cs_new:Npn \__xdu_uline:n #1
+ { \CJKunderline [ thickness = 0.5pt ] { #1 } }
+\cs_new:Npn \__xdu_get_text_width:Nn #1#2
+ {
+ \box_clear_new:N \l__xdu_tmp_box
+ \hbox_set:Nn \l__xdu_tmp_box { #2 }
+ \dim_set:Nn #1 { \box_wd:N \l__xdu_tmp_box }
+ }
+\cs_generate_variant:Nn \__xdu_get_text_width:Nn { NV }
+\cs_new:Npn \__xdu_add_bookmark:n #1
+ { \currentpdfbookmark { #1 } { #1 } }
+\cs_new:Npn \__xdu_add_toc:n #1
+ {
+ \cleardoublepage
+ \phantomsection
+ \addcontentsline { toc } { chapter } { #1 }
+ }
+\cs_new:Npn \__xdu_n_chapter_head:n #1
+ {
+ \__xdu_add_bookmark:n { #1 }
+ \chapter* { #1 }
+ \markboth { #1 } { }
+ }
+\cs_new:Npn \__xdu_n_chapter_head:nn #1#2
+ {
+ {
+ \ctexset { chapter / format = { #2 } }
+ \__xdu_n_chapter_head:n { #1 }
+ }
+ }
+\cs_new:Npn \__xdu_n_chapter_head_toc:n #1
+ {
+ \__xdu_add_toc:n { #1 }
+ \chapter* { #1 }
+ \markboth { #1 } { }
+ }
+\RequirePackage [ titles ] { tocloft }
+\renewcommand { \cftchapleader } { \bfseries \cftdotfill { \cftdotsep } }
+\clist_map_inline:nn
+ {
+ \cftbeforechapskip,
+ \cftbeforesecskip,
+ \cftbeforesubsecskip,
+ \cftbeforesubsubsecskip,
+ \cftbeforeparaskip,
+ \cftbeforesubparaskip
+ }
+ { \dim_set:Nn { #1 } { 5pt } }
+ \clist_map_inline:nn
+ {
+ \cftchapfont,
+ \cftchappagefont
+ }
+ { \renewcommand { #1 } { \__xdu_rm_family: \zihao { -4 } \bfseries } }
+\clist_map_inline:nn
+ {
+ \cftsecfont,
+ \cftsubsecfont,
+ \cftsubsubsecfont,
+ \cftparafont,
+ \cftsubparafont,
+ \cftsecpagefont,
+ \cftsubsecpagefont,
+ \cftsubsubsecpagefont,
+ \cftparapagefont,
+ \cftsubparapagefont
+ }
+ { \renewcommand { #1 } { \__xdu_rm_family: \zihao { -4 } } }
+\RequirePackage { caption }
+\DeclareCaptionLabelSeparator { customskip } { \hskip \l__xdu_fig_label_sep_tl }
+\DeclareCaptionFont { customfont } { \__xdu_rm_family: \zihao { 5 } }
+\captionsetup
+ {
+ labelsep = customskip,
+ font = customfont
+ }
+\PassOptionsToPackage { font = small } { subfig }
+\captionsetup [ sub ] { font = customfont }
+\RequirePackage{hyperref}
+\hypersetup
+ {
+ bookmarksnumbered,
+ hidelinks
+ }
+\ctex_at_end_preamble:n
+ {
+ \hypersetup
+ {
+ pdftitle = \l__xdu_pure_title_str,
+ pdfsubject = {西安电子科技大学本科毕业设计论文},
+ pdfauthor = \l__xdu_author_str
+ }
+ }
+\__xdu_begin_document:n
+ {
+ \tl_if_eq:NnTF \l__xdu_bib_tool_tl { bibtex }
+ {
+ \RequirePackage [ sort&compress,square,super,comma,numbers ] { natbib }
+ \RequirePackage { gbt7714 }
+ \bibliographystyle { gbt7714-numerical }
+ }
+ {
+ \RequirePackage [ style = gb7714-2015 ] { biblatex }
+ \clist_map_inline:Nn \l__xdu_bib_file_clist { \addbibresource { #1 } }
+ }
+ }
+\RequirePackage { environ }
+\NewEnviron { appendixes }
+ {
+ \appendix
+ \renewcommand { \thefigure } { \thechapter \arabic { figure } }
+ \renewcommand { \thetable } { \thechapter \arabic { table } }
+ \BODY
+ }
+\RequirePackage { geometry }
+\geometry { paper = a4paper }
+\RequirePackage { fancyhdr }
+\RequirePackage { xeCJKfntef }
+\RequirePackage { graphicx }
+\cs_new:Npn \__xdu_typeout_keywords:nNn #1#2#3
+ {
+ \str_clear_new:N \l__xdu_keywords_label_str
+ \str_set:Nn \l__xdu_keywords_label_str { #1 }
+ \dim_zero_new:N \l__xdu_keywords_label_dim
+ \__xdu_get_text_width:NV \l__xdu_keywords_label_dim \l__xdu_keywords_label_str
+ \begin { list } { \l__xdu_keywords_label_str }
+ {
+ \labelwidth \l__xdu_keywords_label_dim
+ \labelsep \c_zero_dim
+ \rightmargin \c_zero_dim
+ \leftmargin \l__xdu_keywords_label_dim
+ }
+ \item \clist_use:Nnnn #2 { #3 } { #3 } { #3 }
+ \end { list }
+ }
+\newgeometry
+ {
+ top = 3cm,
+ bottom = 2cm,
+ inner = 3cm,
+ outer = 2cm,
+ bindingoffset = 1cm,
+ head = 2cm,
+ foot = 1cm
+ }
+\savegeometry { main }
+\newgeometry
+ {
+ top = 2.5cm,
+ bottom = 2.5cm,
+ inner = 3cm,
+ outer = 2cm
+ }
+\savegeometry { cover }
+\renewcommand { \chaptermark } [ 1 ]
+ {
+ \markboth
+ {
+ \__xdu_lang_switch:nn
+ { \CTEXthechapter }
+ { \chaptername\space\Roman { chapter } }
+ \quad #1
+ }
+ { }
+ }
+\fancypagestyle { plain }
+ {
+ \pagestyle { fancy }
+ \fancyhf { }
+ \fancyhead [ CE ] { \__xdu_rm_family: \zihao { 5 } \l__xdu_pure_title_str }
+ \fancyhead [ CO ] { \__xdu_rm_family: \zihao { 5 } \leftmark }
+ \fancyhead [ LE ] { \__xdu_rm_family: \zihao { -5 } \thepage }
+ \fancyhead [ RO ] { \__xdu_rm_family: \zihao { -5 } \thepage }
+ \renewcommand { \headrulewidth } { 0.75pt }
+ }
+\ctexset { secnumdepth=5 }
+\ctexset
+ {
+ chapter / name =
+ {
+ \__xdu_lang_switch:nn { 第 } { \chaptername\space },
+ \__xdu_lang_switch:nn { 章 } { }
+ },
+ section / name = { },
+ subsection / name = { },
+ subsubsection / name = { },
+ paragraph / name = { },
+ subparagraph / name = { }
+ }
+\ctexset
+ {
+ chapter / number =
+ {
+ \__xdu_lang_switch:nn
+ { \chinese { chapter } }
+ { \Roman { chapter } }
+ },
+ section / number = { \thesection },
+ subsection / number = { \thesubsection },
+ subsubsection / number = { \thesubsubsection },
+ paragraph / number = { \theparagraph },
+ subparagraph / number = { \thesubparagraph }
+ }
+\cs_new:Npn \__xdu_zh_title:nnn #1#2#3
+ {
+ \use:c { __xdu_ #1 _family : }
+ \zihao { #2 }
+ \str_if_eq:ccTF { #3 } { c }
+ { \centering }
+ { \raggedright }
+ }
+\cs_new:Npn \__xdu_en_title:nn #1#2
+ { \zihao { #1 } \raggedright \skip_horizontal:n { #2 ex } }
+\ctex_at_end_preamble:n
+ {
+ \__xdu_lang_switch:nn
+ {
+ \ctexset
+ {
+ chapter / format = { \__xdu_zh_title:nnn { sf } { 3 } { c } },
+ section / format = { \__xdu_zh_title:nnn { rm } { 4 } { c } },
+ subsection / format = { \__xdu_zh_title:nnn { rm } { 4 } { l } },
+ subsubsection / format = { \__xdu_zh_title:nnn { rm } { 4 } { l } },
+ paragraph / format = { \__xdu_zh_title:nnn { rm } { 4 } { l } },
+ subparagraph / format = { \__xdu_zh_title:nnn { rm } { 4 } { l } }
+ }
+ }
+ {
+ \ctexset
+ {
+ chapter / format = { \__xdu_en_title:nn { 4 } { 0 } },
+ section / format = { \__xdu_en_title:nn { -4 } { 4 } },
+ subsection / format = { \__xdu_en_title:nn { -4 } { 8 } },
+ subsubsection / format = { \__xdu_en_title:nn { -4 } { 12 } },
+ paragraph / format = { \__xdu_en_title:nn { -4 } { 16 } },
+ subparagraph / format = { \__xdu_en_title:nn { -4 } { 20 } }
+ }
+ }
+ }
+\ctexset
+ {
+ chapter / fixskip = true,
+ section / fixskip = true,
+ subsection / fixskip = true,
+ subsubsection / fixskip = true,
+ paragraph / fixskip = true,
+ subparagraph / fixskip = true,
+ chapter / beforeskip = { \clist_item:Nn \l__xdu_before_skip_clist { 1 } },
+ section / beforeskip = { \clist_item:Nn \l__xdu_before_skip_clist { 2 } },
+ subsection / beforeskip = { \clist_item:Nn \l__xdu_before_skip_clist { 3 } },
+ subsubsection / beforeskip = { \clist_item:Nn \l__xdu_before_skip_clist { 4 } },
+ paragraph / beforeskip = { \clist_item:Nn \l__xdu_before_skip_clist { 5 } },
+ subparagraph / beforeskip = { \clist_item:Nn \l__xdu_before_skip_clist { 6 } },
+ chapter / afterskip = { \clist_item:Nn \l__xdu_after_skip_clist { 1 } },
+ section / afterskip = { \clist_item:Nn \l__xdu_after_skip_clist { 2 } },
+ subsection / afterskip = { \clist_item:Nn \l__xdu_after_skip_clist { 3 } },
+ subsubsection / afterskip = { \clist_item:Nn \l__xdu_after_skip_clist { 4 } },
+ paragraph / afterskip = { \clist_item:Nn \l__xdu_after_skip_clist { 5 } },
+ subparagraph / afterskip = { \clist_item:Nn \l__xdu_after_skip_clist { 6 } }
+ }
+\cs_new:Npn \__xdu_cover_i:nn #1#2
+ {
+ \vbox_to_ht:nn {12pt}
+ {
+ \mode_leave_vertical:
+ \hfill
+ \hbox:n
+ {
+ \__xdu_rm_family: \zihao { -4 } \bfseries
+ \hbox_to_wd:nn { 3em } { #1 }
+ \skip_horizontal:n { 1em }
+ \__xdu_uline:n { \hbox_to_wd:nn { 15ex } { \hfil #2 \hfil } }
+ \skip_horizontal:n { 1.5cm }
+ }
+ }
+ }
+\cs_new:Npn \__xdu_cover_ii:nnn #1#2#3
+ {
+ \vbox_to_ht:nn {#1}
+ {
+ \mode_leave_vertical:
+ \hfil
+ \includegraphics [ height = #2, keepaspectratio ] { #3 }
+ \hfil
+ }
+ }
+\cs_new:Npn \__xdu_cover_iii:nnnnn #1#2#3#4#5
+ {
+ \vbox_to_ht:nn {40pt}
+ {
+ \vfill
+ \mode_leave_vertical:
+ \hfil
+ \hbox:n
+ {
+ \__xdu_rm_family:
+ \zihao { 3 }
+ \hbox_to_wd:nn { #1 } { \bfseries #2 }
+ \skip_horizontal:n { 1em }
+ \zihao { -3 }
+ \__xdu_uline:n
+ {
+ \hbox_to_wd:nn { 16em }
+ { \hfil \use:c { __xdu_ #3 _family : } \zihao { #4 } #5 \hfil }
+ }
+ }
+ \hfil
+ }
+ }
+\cs_new_protected:Npn \__xdu_split_title:Nn #1#2
+ {
+ \seq_new:N \l__xdu_title_seq
+ \tl_if_in:nnTF { #2 } { \\ }
+ {
+ \seq_set_split:Nnn \l__xdu_title_seq { \\ } { #2 }
+ \clist_set_from_seq:NN #1 \l__xdu_title_seq
+ }
+ {
+ \clist_put_right:Nx #1 { \tl_range:nnn { #2 } { 1 } { 14 } }
+ \clist_put_right:Nx #1 { \tl_range:nnn { #2 } { 15 } { -1 } }
+ }
+ }
+\cs_generate_variant:Nn \__xdu_split_title:Nn { NV }
+\ctex_at_end_preamble:n
+ {
+ \cs_new:Npn \__xdu_cover_iii:nnnn #1#2#3#4
+ {
+ \tl_if_blank:VTF \l__xdu_supv_dept_str
+ { \__xdu_cover_iii:nnnnn { 4em } { #1 } { #2 } { #3 } { #4 } }
+ { \__xdu_cover_iii:nnnnn { 6em } { #1 } { #2 } { #3 } { #4 } }
+ }
+ }
+\renewcommand{\frontmatter}
+ {
+ \loadgeometry { cover }
+ \pagestyle { empty }
+ \dim_set:Nn \parindent { 0pt }
+ \__xdu_add_bookmark:n { \__xdu_lang_switch:nn { 封面 } { Cover } }
+ \__xdu_cover_i:nn { 班级 } { \l__xdu_class_id_str }
+ \__xdu_cover_i:nn { 学号 } { \l__xdu_student_id_str }
+ \skip_vertical:n { 30pt }
+ \__xdu_cover_ii:nnn { 65pt } { 35pt } { xidian-text }
+ \vbox_to_ht:nn { 75pt }
+ { \__xdu_sf_family: \zihao { 0 } \centering { 本科毕业设计论文 } }
+ \__xdu_cover_ii:nnn { 130pt } { 120pt } { xidian-logo }
+ \clist_new:N \l__xdu_title_clist
+ \__xdu_split_title:NV \l__xdu_title_clist \l__xdu_title_str
+ \str_set:Nx \l__xdu_title_i_str { \clist_item:Nn \l__xdu_title_clist { 1 } }
+ \str_set:Nx \l__xdu_title_ii_str { \clist_item:Nn \l__xdu_title_clist { 2 } }
+ \__xdu_cover_iii:nnnn { 题目 } { sf } { 3 } { \l__xdu_title_i_str }
+ \tl_if_blank:VF \l__xdu_title_ii_str
+ { \__xdu_cover_iii:nnnn { } { sf } { 3 } { \l__xdu_title_ii_str } }
+ \__xdu_cover_iii:nnnn { 学院 } { rm } { -3 } { \l__xdu_dept_str }
+ \__xdu_cover_iii:nnnn { 专业 } { rm } { -3 } { \l__xdu_major_str }
+ \__xdu_cover_iii:nnnn { 学生姓名 } { rm } { -3 } { \l__xdu_author_str }
+ \tl_if_blank:VTF \l__xdu_supv_str
+ {
+ \__xdu_cover_iii:nnnn { 校外导师姓名 } { rm } { -3 } { \l__xdu_supv_ent_str }
+ \__xdu_cover_iii:nnnn { 校内导师姓名 } { rm } { -3 } { \l__xdu_supv_sch_str }
+ }
+ {
+ \__xdu_cover_iii:nnnn { 导师姓名 } { rm } { -3 } { \l__xdu_supv_str }
+ \tl_if_blank:VF \l__xdu_supv_dept_str
+ {
+ \__xdu_cover_iii:nnnn
+ { 院内导师姓名 }
+ { rm }
+ { -3 }
+ { \l__xdu_supv_dept_str }
+ }
+ }
+ \cleardoublepage
+ \loadgeometry { main }
+ \pagestyle { plain }
+ \pagenumbering { Roman }
+ \__xdu_n_chapter_head:n { 摘要 }
+ {
+ \dim_set:Nn \parindent { 2\ccwd }
+ \rmfamily \zihao { -4 }
+ \file_if_exist_input:n { \l__xdu_abstract_zh_tl }
+ }
+ {
+ \sffamily \zihao { -4 } \par
+ \__xdu_typeout_keywords:nNn { 关键词: } { \l__xdu_keywords_zh_clist } { \qquad }
+ }
+ \cleardoublepage
+ \__xdu_n_chapter_head:nn {ABSTRACT} { \rmfamily \zihao{3} \bfseries \centering }
+ {
+ \dim_set:Nn \parindent { 2\ccwd }
+ \rmfamily \zihao { -4 }
+ \file_if_exist_input:n { \l__xdu_abstract_en_tl }
+ }
+ {
+ \rmfamily \zihao { -4 } \bfseries \par
+ \__xdu_typeout_keywords:nNn { Keywords: } { \l__xdu_keywords_en_clist } { \qquad }
+ }
+ \cleardoublepage
+ \setcounter { tocdepth } { 5 }
+ \tl_set:Nn \contentsname { \__xdu_lang_switch:nn { 目录 } { Contents } }
+ \__xdu_add_bookmark:n { \contentsname }
+ \tableofcontents
+ \cleardoublepage
+ }
+\renewcommand { \theequation } { \thechapter - \arabic { equation } }
+\renewcommand{\mainmatter}
+ {
+ \loadgeometry { main }
+ \pagestyle { plain }
+ \pagenumbering { arabic }
+ \dim_set:Nn \parindent { 2\ccwd }
+ \rmfamily \zihao { -4 }
+ }
+\renewcommand{\backmatter}
+ {
+ \__xdu_n_chapter_head_toc:n { \__xdu_lang_switch:nn { 致谢 } { Acknowledgements } }
+ {
+ \dim_set:Nn \parindent { 2\ccwd }
+ \rmfamily \zihao { -4 }
+ \file_if_exist_input:n { \l__xdu_ack_tl }
+ }
+ \__xdu_add_toc:n { \__xdu_lang_switch:nn { 参考文献 } { Bibliography } }
+ {
+ \tl_if_eq:NnTF \l__xdu_bib_tool_tl { bibtex }
+ {
+ \__xdu_rm_family: \zihao { 5 }
+ \bibliography { \l__xdu_bib_file_clist }
+ }
+ {
+ \renewcommand { \bibfont } { \__xdu_rm_family: \zihao { 5 } }
+ \printbibliography
+ }
+ }
+ }
+%%
+%%
+%% End of file `xduugthesis.cls'.