% \iffalse
%<*driver>
\ProvidesFile{xduts.dtx}
[2022/04/10 v0.6.0.0 Xidian University TeX Suite]
%</driver>
%<class|sty>\NeedsTeXFormat{LaTeX2e}
%<class|sty>\RequirePackage{expl3}
%<xduugthesis>\ProvidesExplClass{xduugthesis}
%<xdufont>\ProvidesExplPackage{xdufont}
%<class|sty>  {2022/04/10}{0.6.0.0}
%<xdufont>  {Xidian University Font package}
%<xduugthesis>  {Xidian University Undergraduate Thesis class}
%<*driver>
\documentclass{ctxdoc}
\changes{v0.6.0.0}{2022/04/10}{新增xdufont宏包}
\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{\secrefx}[1]{第\xspace\ref{#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*}\,:}
% 浮动体默认设置
\makeatletter
\renewcommand{\fps@table}{htbp}
\makeatother
% 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     = 0 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{823}
% \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}
% 在使用\xduts{}时，默认您同意以下内容：
% \begin{enumerate}
% \item \xduts{}作者不对使用\xduts{}产生的格式审查问题负责。
% \item \xduts{}的发布遵守
% \LaTeX{} Project Public License\footurl{https://www.latex-project.org/lppl.txt}，
% 使用前请认真阅读协议内容。
% \item 任何个人或组织以\xduts{}为基础进行修改、扩展而生成的新的\LaTeX{}文档类/宏包，
% 请严格遵守\LaTeX{} Project Public License，
% 由于违犯协议而引起的任何纠纷争端均与\xduts{}作者无关。
% \end{enumerate}
% \end{abstract}
% \clearpage
% \tableofcontents
% \clearpage
% \section{介绍}
% \xduts{} (Xidian University \TeX{} Suite)
% 是为了帮助西安电子科技大学本科生/研究生撰写开题报告/学位论文及其他文档
% 而编写的\LaTeX{}文档类和宏包套装，目前有：
% \begin{itemize}
% \item \clsx{xduugthesis}，本科毕业设计论文。
% \item \pkgx{xdufont}，中/英/数学字体配置宏包。
% \end{itemize}
% 即将支持：
% \begin{itemize}
% \item \clsx{xduugtp}，本科毕业设计论文开题报告表。
% \item \clsx{xdupgthesis}，研究生学位论文。
% \item \clsx{xdupgtp}，研究生学位论文开题报告表。
% \end{itemize}
% \par
% 本文档将尽量完整的介绍\xduts{}的使用方法，
% 如有不清楚之处，或者想提出改进建议，
% 可以在GitHub Issues\footurl{https://github.com/note286/xduts/issues/}
% 参与讨论或提问。另外，\textbf{不接受任何Pull Requests}。
% \StopEventually{}
% \section{使用说明}
% \label{使用说明}
% 《一份（不太）简短的\LaTeXe{}介绍》\footctan{info/lshort/chinese/lshort-zh-cn.pdf}
% 中提及的内容本文档将不再提及。
% \xduts{}中的所有文档类和宏包仅内置了实现功能所必要的宏包，
% 对于常用的宏包如\pkgx{subfig}、\pkgx{algpseudocodex}、
% \pkgx{amsmath}、\pkgx{amsthm}和\pkgx{siunitx}等均未内置，
% 用户视需求自行加载。
% 请在最新版\LaTeX{}环境中使用最新版\xduts{}，
% 认真阅读相应文档类/宏包使用说明章节即可使用\xduts{}。
% \par
% 相应格式规范均已实现，用户仅需要撰写文章内容即可，请勿随意添加格式修改命令。
% \subsection{xdufont}
% \pkgx{xdufont}宏包基于\pkgx{xeCJK}，相较于\pkgx{ctex}宏包的主要优势为默认支持宋体粗体、斜体，内置多种字体配置，可任意搭配中/英/数学字体，更加符合校内各种文档的撰写要求。
% \par
% \secrefx{编译}介绍了如何编译，\secrefx{参数设置}介绍了如何自定义配置，具体的配置选项见\secrefx{字体选项}。\pkgx{xdufont}可以搭配任意文档类进行使用，例如：
% \begin{latexexample}[moretexcs={\xdusetup},emph={[1]document}]
%   \documentclass{article}
%   \usepackage{xdufont}
%   \xdusetup{}
%   \begin{document}
%   宋体\textbf{加粗}\textsl{加斜}
%   \textsf{黑体}\textbf{\textsf{加粗}}\textsl{\textsf{加斜}}
%   \end{document}
% \end{latexexample}
% \par
% 学会以上用法后即可立即使用\pkgx{xdufont}宏包了。
% \subsection{xduugthesis}
% \pkgx{xduugthesis}基于\clsx{ctexbook}文档类，
% 提供多种字体配置，部分样式可自定义，信息录入便捷。
% \par
% 典型的\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}
% \par
% \secrefx{编译}介绍了如何编译，\secrefx{参数设置}介绍了如何自定义配置。
% 其中，字体选项见\secrefx{字体选项}，
% 部分英文字体切换见\secrefx{英文字体}，
% 论文语言切换见\secrefx{语言配置}，
% 参考文献配置见\secrefx{参考文献配置}，
% 图片配置见\secrefx{图片配置}，
% 章节配置见\secrefx{章节配置}。
% 如需附录，请使用附录环境，具体见\secrefx{附录环境}。
% 仅支持如下信息录入，具体每个选项的含义见\secrefx{信息录入}，如没有部分选项，则删除该行即可。
% \begin{latexexample}[moretexcs={\xdusetup},emph={[2]info}]
%   \xdusetup {
%     info = {
%       title                 = {第一行标题\\第二行标题},
%       department            = {电子工程学院},
%       major                 = {电子信息工程},
%       author                = {张三},
%       supervisor            = {李四},
%       supervisor-department = {王五},
%       supervisor-enterprise = {赵六},
%       supervisor-school     = {刘七},
%       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}
% \par
% 学会以上用法后即可立即使用\clsx{xduugthesis}文档类了。
% \section{功能说明}
% 请根据\secrefx{使用说明}中相应文档类/宏包的说明来选择性地阅读本节内容。
% \subsection{编译}
% \label{编译}
% \changes{v0.5.1.2}{2022/04/07}{增加编译说明}
% \LaTeX{}本身是命令行程序，通过不同的命令调用所需的编译引擎，编辑器提供的快捷按钮实际只是做了包装。\xduts{}仅支持\XeLaTeX{}，参考文献默认使用\biber{}，也可以切换为\bibtex{}。
% \subsection{参数设置}
% \label{参数设置}
% \changes{v0.5.1.1}{2022/04/06}{增加xdusetup配置文档}
% \begin{function}[added=2022-03-07]{\xdusetup}
%   \begin{syntax}
%     \tnx{xdusetup}=\argx{键值列表}
%   \end{syntax}
% \xduts{}提供了一系列选项，可自行配置。
% 载入文档类/宏包之后，以下所有选项均可通过统一的命令\tnx{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}
% \subsection{字体选项}
% \label{字体选项}
% \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}
% \subsection{英文字体}
% \label{英文字体}
% \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}
% \subsection{语言配置}
% \label{语言配置}
% \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}
% \subsection{参考文献配置}
% \label{参考文献配置}
% \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}
% \subsection{图片配置}
% \label{图片配置}
% \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}
% \subsection{章节配置}
% \label{章节配置}
% \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}
% \subsection{附录环境}
% \label{附录环境}
% \begin{function}[added=2022-04-04]{appendixes}
% 附录位于参考文献后，即在\tnx{backmatter}后。
% \begin{latexexample}[emph={[1]appendixes}]
%   \begin{appendixes}
%       \chapter{这是一个附录}
%       \chapter{这是另一个附录}
%   \end{appendixes}
% \end{latexexample}
% \end{function}
% \subsection{信息录入}
% \label{信息录入}
% \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}
% \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}。
% \clearpage
% \section{代码实现}
% \changes{v0.1.0.0}{2022/04/03}{基本完成本科毕业设计论文模板}
% \setlength\parindent{0pt}
%    \begin{macrocode}
%<@@=xdu>
%    \end{macrocode}
% \subsection{文档类和宏包}
%    \begin{macrocode}
%<*class|sty>
%    \end{macrocode}
%    \begin{macrocode}
\RequirePackage { xparse, l3keys2e }
%    \end{macrocode}
% \begin{macro}{\PassOptionsToPackage}
% 忽略字体警告。
%    \begin{macrocode}
\PassOptionsToPackage { quiet } { xeCJK }
%    \end{macrocode}
% \end{macro}
%    \begin{macrocode}
%</class|sty>
%<*class>
%    \end{macrocode}
% \begin{macro}{\PassOptionsToClass,\LoadClass}
% 加载\clsx{ctexbook}文档类。
% \changes{v0.3.2.0}{2022/04/04}{修正行间距为1.5倍}
%    \begin{macrocode}
\PassOptionsToClass
  {
    zihao=-4,
    sub4section,
    linespread = 1.5,
    fontset    = none
  }
  { ctexbook }
\LoadClass { ctexbook }
%    \end{macrocode}
% \end{macro}
% 设置纸张尺寸为A4。
%    \begin{macrocode}
\RequirePackage { geometry        }
\geometry       { paper = a4paper }
%    \end{macrocode}
%    \begin{macrocode}
%</class>
%<*xduugthesis>
%    \end{macrocode}
%    \begin{macrocode}
\RequirePackage { fancyhdr        }
\RequirePackage { xeCJKfntef      }
\RequirePackage { graphicx        }
%    \end{macrocode}
%    \begin{macrocode}
%</xduugthesis>
%<*xdufont>
%    \end{macrocode}
%    \begin{macrocode}
\RequirePackage { xeCJK           }
%    \end{macrocode}
%    \begin{macrocode}
%</xdufont>
%    \end{macrocode}
% \subsection{字体配置}
%    \begin{macrocode}
%<*class|xdufont>
%    \end{macrocode}
% \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
%   }
% 中文字体配置名称。
%    \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}
% \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}
% \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
  }
%    \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
  { \file_if_exist:nTF { /System/Library/Fonts/Menlo.ttc } { #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}{\@@_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}{\@@_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}
% \subsubsection{中文字体}
% \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}{\@@_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}
% \subsubsection{英文字体}
% \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}
% \subsubsection{数学字体}
% \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}
% \subsubsection{加载字体}
% \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}
%    \begin{macrocode}
%</class|xdufont>
%<*xduugthesis>
%    \end{macrocode}
% \subsection{信息录入}
% \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_set:nn}
% 初始设置。
%    \begin{macrocode}
\keys_set:nn { xdu }
  {
    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}
% \subsection{样式配置}
% \begin{variable}
%   {
%     \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}
\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}
    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{macro}{\keys_set:nn}
% 初始设置。
%    \begin{macrocode}
\keys_set:nn { xdu }
  {
    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 }
  }
%    \end{macrocode}
% \end{macro}
%    \begin{macrocode}
%</xduugthesis>
%    \end{macrocode}
%    \begin{macrocode}
%<*class|xdufont>
%    \end{macrocode}
% \subsection{键值选项}
% \begin{macro}{\xdusetup}
% 用户设置接口。
%    \begin{macrocode}
\NewDocumentCommand \xdusetup { m }
  { \keys_set:nn { xdu } { #1 } }
%    \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}{\ProcessKeysOptions}
% 处理选项。
%    \begin{macrocode}
\ProcessKeysOptions { xdu / style }
%    \end{macrocode}
% \end{macro}
%    \begin{macrocode}
%</class|xdufont>
%<*xduugthesis>
%    \end{macrocode}
% \subsection{内部函数}
% \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{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}
% \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}
% \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}
% \subsection{页面设置}
% \subsubsection{页面尺寸}
% \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}
% \subsubsection{页眉页脚}
% \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}
% \subsection{标题设置}
% 中文章标题黑体，三号，居中排列。节标题宋体，四号，居中排列。英文一级标题字体为Times New Roman，四号，正体，左对齐，以大写罗马数字（I、II 等）标出序号。其余各级标题的字体均为Times New Roman，小四号，正体。二级及以下级别的标题依次缩进4个英文字符，以1.1，1.2，1.1.1，1.1.2形式标出序号。
% \subsubsection{章节层次}
% \begin{macro}{\ctexset}
% 设置章节层次为subparagraph。
%    \begin{macrocode}
\ctexset { secnumdepth=5 }
%    \end{macrocode}
% \end{macro}
% \subsubsection{章节名字}
% \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}
% \subsubsection{章节编号}
% \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}
% \subsubsection{章节和标题}
% \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}
% \subsection{目录}
% \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}
% \subsection{公式}
% \begin{macro}{\theequation}
% 重定义公式编号样式。
%    \begin{macrocode}
\renewcommand { \theequation } { \thechapter - \arabic { equation } }
%    \end{macrocode}
% \end{macro}
% \subsection{图片}
% \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}
% \subsection{超链接和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}
% \subsection{参考文献}
% \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}{\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}
% \subsection{附录}
% \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}
% \subsection{封面}
% \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}
% \subsection{正文}
% \begin{macro}{\mainmatter}
% 排版正文部分。
%    \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
