% \iffalse
%<*driver>
\ProvidesFile{xduts.dtx}
[2023/03/23 v6.1.4.2 Xidian University TeX Suite]
%</driver>
%<class|sty>\NeedsTeXFormat{LaTeX2e}
%<class|sty>\RequirePackage{expl3}
%<xdufont>\ProvidesExplPackage{xdufont}
%<xduugtp>\ProvidesExplClass{xduugtp}
%<xdupgthesis>\ProvidesExplClass{xdupgthesis}
%<xduugthesis>\ProvidesExplClass{xduugthesis}
%<class|sty>  {2023/03/23}{6.1.4.2}
%<xdufont>  {Xidian University Font package}
%<xduugtp>  {Xidian University Undergraduate Thesis Proposal class}
%<xdupgthesis>  {Xidian University Postgraduate Thesis document class}
%<xduugthesis>  {Xidian University Undergraduate Thesis document class}
%<*driver>
\PassOptionsToPackage{AutoFakeBold=3}{xeCJK}
\RequirePackage{silence}
\WarningsOff[hyperref,tocloft,latexfont]
\renewcommand{\message}[1]{}
\documentclass{ctxdoc}
\changes{v4.3.0.2}{2023/01/30}{移除文档编译警告和消息}
\changes{v1.9.0.0}{2022/05/03}{支持中文选项默认值加粗}
\changes{v1.9.0.0}{2022/05/03}{增大function环境盒子宽度}
\addtolength{\marginparwidth}{5mm}
\geometry{hmargin={0mm,10mm}}
\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}
\ctexset{punct=quanjiao}
\usepackage{pifont}
\newcommand{\cmark}{\ding{51}}
\usepackage{subcaption}
\changes{v5.1.0.1}{2023/02/22}{修改文档内表格样式}
\DeclareCaptionLabelSeparator{customskip}{\hskip.75em}
\captionsetup{font=bf,labelsep=customskip}
\usepackage{tabularray}
\changes{v2.16.1.3}{2022/11/27}{修改文档中caption字体样式}
\setlength{\intextsep}{\the\abovecaptionskip}
\SetTblrOuter[tblr,longtblr]{presep=\belowcaptionskip+\intextsep,headsep=\abovecaptionskip}
\SetTblrStyle{caption-tag}{font=\bfseries}
\SetTblrStyle{caption-text}{font=\bfseries}
\DefTblrTemplate{caption-sep}{default}{\hskip.75em}
\DefTblrTemplate{conthead-text}{default}{\textbf{(续表)}}
\DefTblrTemplate{contfoot-text}{default}{\textbf{接下页}}
\changes{v6.1.2.1}{2023/03/09}{修改文档交叉引用样式}
\changes{v4.4.5.1}{2023/02/11}{移除文档对xspace的依赖}
% 交叉引用
\NewDocumentCommand{\secrefx}{m}{第\nobreakspace\ref{#1}\nobreakspace{}节}
\NewDocumentCommand{\tabrefx}{mO{\space}}{表\nobreakspace\ref{#1}#2}
\NewDocumentCommand{\figrefx}{mO{\space}}{图\nobreakspace\ref{#1}#2}
% 选项
\NewDocumentCommand{\optx}{O{\space}mO{\space}}{#1{\ttfamily\seqsplit{#2}}#3}
% \name LaTeX3控制序列
\NewDocumentCommand{\csx}{O{\space}mO{\space}}{#1\cs{#2}#3}
% \name LaTeX2e命令
\NewDocumentCommand{\tnx}{O{\space}mO{\space}}{#1\tn{#2}#3}
% <name> 键值
\NewDocumentCommand{\metax}{O{\space}mO{\space}}{#1\meta{#2}#3}
% LaTeX3键值对
\newcommand{\breakablethinspace}{\hskip.16667em\relax}
\NewDocumentCommand{\kvoptx}{O{\space}mmO{\space}}{#1\texttt{#2\breakablethinspace=\breakablethinspace#3}#4}
% {<name>} 必选参数
\NewDocumentCommand{\margx}{O{\space}mO{\space}}{#1\marg{#2}#3}
% [<name>] 可选参数
\NewDocumentCommand{\oargx}{O{\space}mO{\space}}{#1\oarg{#2}#3}
% 文件
\usepackage{seqsplit}
\NewDocumentCommand{\filex}{O{\space}mO{\space}}{#1{\ttfamily\seqsplit{#2}}#3}
% 环境
\NewDocumentCommand{\envx}{O{\space}mO{\space}}{#1\env{#2}#3}
% 宏包
\NewDocumentCommand{\pkgx}{O{\space}mO{\space}}{#1\pkg{#2}#3}
% 文档类
\NewDocumentCommand{\clsx}{O{\space}mO{\space}}{#1\cls{#2}#3}
% 值
\NewDocumentCommand{\valuex}{O{\space}mO{\space}}{#1{\ttfamily\seqsplit{#2}}#3}
% 程序
\NewDocumentCommand{\cmdx}{O{\space}mO{\space}}{#1{\ttfamily\seqsplit{#2}}#3}
% 链接
\NewDocumentCommand{\footurl}{m}{\footnote{\url{#1}}}
\NewDocumentCommand{\footctan}{m}{\footnote{\href{https://mirrors.cloud.tencent.com/CTAN/#1}{\ttfamily CTAN://#1}}}
% logo
\changes{v4.1.1.1}{2023/01/21}{修正LOGO字形高度}
\newfontfamily{\ffmfamily}[Scale=MatchUppercase]{ffmb10.otf}
\NewDocumentCommand{\xduts}{O{\space}mO{\space}}{#1{\ffmfamily XDUTS}#3}
\NewDocumentCommand{\bibtex}{O{\space}mO{\space}}{#1\hologo{BibTeX}#3}
\NewDocumentCommand{\biblatex}{O{\space}mO{\space}}{#1 Bib\LaTeX #3}
% arguments list
\setlist[arguments]{label=\texttt{\#\arabic*}\,:}
% 浮动体默认设置
\makeatletter
\renewcommand{\fps@table}{htbp}
\makeatother
% listings
\changes{v2.14.1.2}{2022/11/23}{修改示例代码缩进}
\changes{v2.14.1.1}{2022/11/22}{修改示例代码样式}
\usepackage{listings}
\lstset{
language        = [LaTeX]TeX,
gobble          = 1,
basewidth       = 0.5em,
breaklines      = true,
basicstyle      = \small\ttfamily,
backgroundcolor = \color{gray9!25},
texcsstyle      = *[1]{\color{brown3}},
texcsstyle      = *[2]{\color{teal3}},
texcsstyle      = *[3]{\color{azure3}},
texcsstyle      = *[4]{\color{violet3}},
texcsstyle      = *[5]{\color{yellow3}},
emphstyle       = [6]{\color{blue3}},
texcs           = [1]{documentclass,usepackage},
texcs           = [2]{begin,end},
texcs           = [3]{part,chapter,section,subsection,subsubsection,paragraph,subparagraph},
texcs           = [4]{xdusetup,anon,noauxwrite},
texcs           = [5]{textbf,textsl,textsf,par,item,caption,parencite},
emph            = [6]{document,tabular,edubg,resresult,appendixes},
literate        = {\$}{{\textcolor{purple3}{\$}}}{1}
                  {\{}{{\textcolor{purple3}{\{}}}{1}
                  {\}}{{\textcolor{purple3}{\}}}}{1}
                  {[}{{\textcolor{purple3}{[}}}{1}
                  {]}{{\textcolor{purple3}{]}}}{1}
                  {=}{{\textcolor{purple3}{=}}}{1}
                  {\&}{{\textcolor{purple3}{\&}}}{1}
                  {\\\\}{{\textcolor{purple3}{\textbackslash{}\textbackslash{}}}}{2}
}
\changes{v2.14.1.2}{2022/11/23}{增加示例代码换行符高亮}
\makeatletter
\lst@AddToHook{SelectCharTable}
{\ifx\lst@literate\@empty\else\expandafter\lst@Literate\lst@literate{}\relax\z@\fi}
\makeatother
\RenewDocumentCommand{\floatpagefraction}{}{.8}
\usepackage[nolinks]{qrcode}
\usepackage{fontawesome5}
\usepackage{tikz}
\changes{v3.1.1.1}{2022/12/04}{手册首页增加水印}
\usepackage[firstpageonly=true]{draftwatermark}
\DraftwatermarkOptions{angle=45,fontsize=40pt,color={gray9!25}}
\ExplSyntaxOn
\SetWatermarkText{\prg_replicate:nn{18}{\prg_replicate:nn{6}{\xduts[]{}[]~}\xduts[]{}[]\\[30pt]}}
\ExplSyntaxOff
\begin{document}
\changes{v2.18.1.1}{2022/12/01}{隐藏源码、版本和索引}
\OnlyDescription
\DocInput{\jobname.dtx}
% \IndexLayout
% \PrintChanges
% \PrintIndex
\end{document}
%</driver>
% \fi
% \GetFileInfo{\jobname.dtx}
% \title{\bfseries\xduts[]{}手册}
% \hypersetup{pdftitle=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{}、Mac\TeX{}、\MiKTeX{}，
% 支持Windows、macOS、GNU/Linux、Overleaf和TeXPage。
% \end{abstract}
% \changes{v4.4.5.4}{2023/02/11}{更新许可证版本号}
% \renewcommand{\abstractname}{免责声明}
% \begin{abstract}
% 在使用\xduts{}时，默认你同意以下内容：
% \begin{enumerate}
% \item \xduts[]{}作者不对使用\xduts{}产生的格式审查问题负责。
% \item \xduts[]{}的发布遵守\LaTeX{} Project Public License Version 1.3c或更高版本\footurl{https://www.latex-project.org/lppl.txt}。
% \item 任何个人或组织以\xduts{}为基础进行修改或扩展生成新的\LaTeX{}宏包/文档类，
% 请严格遵守\LaTeX{} Project Public License，
% 由于违犯协议而引起的任何纠纷争端均与\xduts{}作者无关。
% \end{enumerate}
% \end{abstract}
% \clearpage
% \begin{documentation}
% \changes{v2.12.1.1}{2022/07/28}{使用\clsx{l3doc}文档和实现环境}
% \section*{\contentsname\markright{\contentsname}}
% \makeatletter
% \@starttoc{toc}
% \makeatother
% \clearpage
% \changes{v4.4.5.2}{2023/02/11}{调整文档介绍顺序}
% \changes{v2.14.1.3}{2022/11/23}{修改文档措辞}
% \section{介绍}
% \xduts[]{}(Xidian University \TeX{} Suite)
% 是为了帮助西安电子科技大学本科生/研究生撰写开题报告/学位论文及其他文档
% 而编写的\LaTeXiii{}宏包和文档类套装，目前有：
% \begin{itemize}
% \item \pkgx[]{xdufont.sty}[]，中/英/数学字体配置宏包。
% \item \clsx[]{xduugtp.cls}[]，本科生毕业设计论文开题报告文档类。
% \item \clsx[]{xduugthesis.cls}[]，本科生毕业设计论文文档类。
% \item \clsx[]{xdupgthesis.cls}[]，研究生学位论文文档类。
% \end{itemize}
% 即将支持：
% \begin{itemize}
% \item \clsx[]{xdupgtp.cls}[]，研究生学位论文开题报告文档类。
% \end{itemize}
% \par
% \changes{v1.2.0.1}{2022/04/19}{增加GitHub Discussions}
% 本文档将尽量完整地介绍\xduts{}的使用方法，
% 如有不清楚之处，或者想提出改进建议，
% 可以在GitHub Discussions\footurl{https://github.com/note286/xduts/discussions/}
% 参与讨论或提问。
% 如确定\xduts{}存在bug，
% 可以在GitHub Issues\footurl{https://github.com/note286/xduts/issues/}
% 具体描述。另外，\textbf{不接受任何Pull Requests}。
% \section{使用说明}
% \label{使用说明}
% 《一份（不太）简短的\LaTeXe{}介绍》\footctan{info/lshort/chinese/lshort-zh-cn.pdf}
% 中提及的内容本文档将不再赘述。
% 此外，在\secrefx{使用建议}中给出了部分使用建议。
% \xduts[]{}中的所有宏包和文档类仅内置了实现功能所需的宏包，
% 对于常用的宏包如\pkgx{subcaption}[]、\pkgx[]{algorithm}[]、\pkgx[]{algpseudocodex}[]、^^A
% \pkgx[]{amsmath}[]、\pkgx[]{theorem}和\pkgx{siunitx}等\textbf{均未内置}，
% 用户可以参考\secrefx{兼容性说明}视需求自行加载。
% 相应格式规范均已实现，用户仅需要撰写文章内容即可，请勿随意添加格式修改命令。
% \changes{v1.1.2.1}{2022/04/15}{增加默认值说明}
% \textbf{部分样式的默认值并不严格符合学校规范}，
% 用户可以结合学校规范并参考\secrefx{功能说明}功能说明自行修改。
% \par
% 请在最新版\LaTeX{}环境中使用最新版\xduts{}[]，
% 认真阅读相应宏包/文档类使用说明章节后即可使用\xduts{}[]。
% \changes{v6.0.1.1}{2023/03/04}{修正文档中部分标题书签字符}
% \subsection{\textsf{xdufont}宏包}
% \pkgx[]{xdufont}宏包基于\pkgx{xeCJK}宏包和\pkgx{unicode-math}宏包，
% 在中文字体配置方面相较于\pkgx{ctex}宏包的主要优势为默认支持宋体粗体、斜体，
% 内置多种字体配置，可任意搭配中/英/数学字体，更加符合校内各种文档的撰写要求。
% \par
% \pkgx[]{xdufont}宏包可以搭配任意文档类进行使用，例如：
% \begin{lstlisting}
% \documentclass{article}
% \usepackage{xdufont}
% \xdusetup{}
% \begin{document}
% 宋体\textbf{加粗}\textsl{加斜}
% \textsf{黑体}\textbf{\textsf{加粗}}\textsl{\textsf{加斜}}
% \end{document}
% \end{lstlisting}
% \par
% \secrefx{编译}介绍了如何编译，\secrefx{参数设置}介绍了如何自定义配置，具体的配置选项见\secrefx{字体选项}。
% \par
% 学会以上用法后即可使用\pkgx{xdufont}宏包。
% \subsection{\textsf{xduugtp}文档类}
% \clsx[]{xduugtp}文档类基于\clsx{ctexart}文档类，
% 提供多种字体配置，信息录入便捷。
% 请在阅读《西安电子科技大学本科毕设设计（论文）开题报告》后再使用\clsx{xduugtp}文档类。
% \par
% 使用\clsx{xduugtp}文档类的最小示例如下所示：
% \begin{lstlisting}
% \documentclass{xduugtp}
% \xdusetup{}
% \begin{document}
% \section{论文名称及项目来源}
% \section{研究目的和意义}
% \section{国内外研究现状和发展趋势}
% \section{主要研究内容、要解决的问题及本文的初步方案}
% \section{工作的主要阶段、进度和完成时间}
% \section{已进行的前期准备工作}
% \section{指导教师意见}
% \section{学院审核意见}
% \end{document}
% \end{lstlisting}
% \par
% \secrefx{编译}介绍了如何编译，
% \secrefx{参考文献引用}介绍了如何引用参考文献，
% \secrefx{参数设置}介绍了如何自定义配置。
% 其中，字体选项见\secrefx{字体选项}，
% 参考文献配置见\secrefx{参考文献配置}，
% 支持的信息录入选项见\secrefx{信息录入}。
% \par
% 学会以上用法后即可使用\clsx{xduugtp}文档类。
% \subsection{\textsf{xduugthesis}文档类}
% \clsx[]{xduugthesis}文档类基于\clsx{ctexbook}文档类，
% 提供多种字体配置，部分样式可自定义，信息录入便捷。
% \changes{v1.3.1.1}{2022/04/26}{英文本科生毕业设计规范参考说明}
% 请在阅读《本科生毕业设计（论文）工作手册》后再使用\clsx{xduugthesis}文档类。
% \par
% 使用\clsx{xduugthesis}文档类的最小示例如下所示：
% \begin{lstlisting}
% \documentclass{xduugthesis}
% \xdusetup{}
% \begin{document}
% \chapter{欢迎}
% 使用\LaTeX{}！
% \end{document}
% \end{lstlisting}
% \par
% \changes{v1.30.0.1}{2022/06/20}{移除info录入示例}
% \secrefx{编译}介绍了如何编译，
% \secrefx{参考文献引用}介绍了如何引用参考文献，
% \secrefx{参数设置}介绍了如何自定义配置。
% 其中，字体选项见\secrefx{字体选项}，
% 部分英文字体切换见\secrefx{英文字体}，
% 标题数学字体配置见\secrefx{标题数学字体配置}，
% 参考文献配置见\secrefx{参考文献配置}，
% 页面配置见\secrefx{页面配置}，
% \changes{v2.12.0.1}{2022/07/01}{本科生毕业设计增加文件配置}
% 文件配置见\secrefx{文件配置}，
% 交叉引用配置见\secrefx{交叉引用配置}，
% caption配置见\secrefx{caption配置}，
% 图表配置见\secrefx{图表配置}，
% 算法配置见\secrefx{算法配置}，
% 章节配置见\secrefx{章节配置}，
% 支持的信息录入选项见\secrefx{信息录入}。
% \par
% 学会以上用法后即可使用\clsx{xduugthesis}文档类。
% \changes{v1.4.0.0}{2022/04/26}{增加研究生学位论文}
% \changes{v1.30.0.2}{2022/06/20}{研究生学位论文文档}
% \changes{v2.2.1.1}{2022/06/23}{移除研究生学位论文中关于章节配置的文档}
% \subsection{\textsf{xdupgthesis}文档类}
% \clsx[]{xdupgthesis}文档类基于\clsx{ctexbook}文档类，
% 提供多种字体配置，部分样式可自定义，信息录入便捷。
% 请在阅读《西安电子科技大学研究生学位论文模板（2015年修订版）-2022.11修订》后再使用\clsx{xdupgthesis}文档类。
% 专业学位硕士请额外阅读《西安电子科技大学专业学位硕士学位论文封面及中英文题名页模板（2015年版）-2022.11修订》，
% 撰写英文学位论文请额外阅读《西安电子科技大学英文学位论文撰写相关规定》。
% \par
% 使用\clsx{xdupgthesis}文档类的最小示例如下所示：
% \begin{lstlisting}
% \documentclass{xdupgthesis}
% \xdusetup{}
% \begin{document}
% \chapter{欢迎}
% 使用\LaTeX{}！
% \end{document}
% \end{lstlisting}
% \par
% \secrefx{编译}介绍了如何编译，
% \secrefx{参考文献引用}介绍了如何引用参考文献，
% \secrefx{参数设置}介绍了如何自定义配置。
% 其中，字体选项见\secrefx{字体选项}，
% 部分英文字体切换见\secrefx{英文字体}，
% 标题数学字体配置见\secrefx{标题数学字体配置}，
% 语言配置见\secrefx{语言配置}，
% 参考文献配置见\secrefx{参考文献配置}，
% 页面配置见\secrefx{页面配置}，
% \changes{v2.12.0.1}{2022/07/01}{研究生学位论文增加文件配置}
% 文件配置见\secrefx{文件配置}，
% 交叉引用配置见\secrefx{交叉引用配置}，
% caption配置见\secrefx{caption配置}，
% 图表配置见\secrefx{图表配置}，
% 算法配置见\secrefx{算法配置}，
% 对照表配置见\secrefx{对照表配置}，
% 作者简介配置见\secrefx{作者简介配置}。
% 支持的信息录入选项见\secrefx{信息录入}。
% 页面和信息移除见\secrefx{页面和信息移除}。
% \par
% 学会以上用法后即可使用\clsx{xdupgthesis}文档类。
% 另外，在\secrefx{额外命令}和\secrefx{额外功能}中提供了部分额外命令和功能来增强排版效果。
% \changes{v1.3.0.1}{2022/04/20}{增加兼容性说明}
% \section{兼容性说明}
% \label{兼容性说明}
% \clsx[]{xduugthesis}和\clsx{xdupgthesis}文档类对部分常见宏包进行了针对性地适配，
% 需要注意的是，这些宏包仍需用户视需求自行加载。
% \subsection{算法}
% 主要适配算法内容字号和默认浮动位置。^^A
% \pkgx[]{algorithm}宏包提供了算法浮动体\envx{algorithm}环境，
% 可以搭配\pkgx{algpseudocodex}等宏包使用。^^A
% \pkgx[]{algorithm2e}宏包提供了算法环境，
% 该宏包提供的\envx{algorithm}环境实际将浮动体与算法内容合二为一。
% \subsection{图片}
% \changes{v1.13.5.1}{2022/05/08}{补充子图引用样式文档}
% 主要适配子图caption字体字号和子图引用样式，
% \changes{v1.4.1.1}{2022/04/27}{修正子图适配宏包名称}
% 包括\pkgx{subcaption}宏包和\pkgx{subfig}宏包。
% \subsection{表格}
% 主要适配表格内容字号，
% 包括所有使用\envx{table}浮动体的表格、^^A
% \pkgx[]{tabularray}宏包提供的\envx{tblr}[]、\envx[]{longtblr}环境
% 和\pkgx{longtable}宏包提供的\envx{longtable}环境。
% \changes{v4.1.1.0}{2023/01/16}{适配子表样式}
% 以及适配子表caption字体字号和子表引用样式，
% 包括\pkgx{subcaption}宏包和\pkgx{subfig}宏包。
% \changes{v4.4.5.5}{2023/02/15}{增加定理环境自定义建议}
% \changes{v4.0.0.1}{2022/12/11}{增加使用建议}
% \section{使用建议}
% \label{使用建议}
% 本节主要针对\clsx{xduugthesis}和\clsx{xdupgthesis}文档类提出使用建议，
% 用户仍可不遵守本节的建议并根据自己的偏好进行使用。
% \par
% 宏包方面，在\secrefx{兼容性说明}中提到已适配多种宏包。
% 但是，由于各种原因，部分宏包已不建议使用。
% 推荐使用\pkgx{algorithm}和\pkgx{algpseudocodex}宏包排版算法；
% 推荐使用\pkgx{subcaption}宏包排版子图和子表；
% 推荐使用\pkgx{tabularray}宏包排版\textbf{所有的表格}；
% 推荐使用\pkgx{enumitem}宏包修改列表环境样式；
% 推荐使用\pkgx{theorem}宏包修改定理环境样式；
% 推荐使用\pkgx{siunitx}宏包排版单位。
% 另外，不要加载任何与参考文献和中英文字体相关的宏包。
% 使用宏包提供的功能时，\textbf{请阅读相应的宏包文档}。
% \par
% 字体方面，中文、英文和数学字体均提供了多种配置。
% 对于中英文字体，用户可以根据自己的喜好选择合适的配置，
% 部分配置对应的字体可能需要自行购买并安装。
% 对于数学字体，建议用户选择一个与英文字体搭配的数学字体。
% 注意，当使用非Computer Modern字体时，
% 部分命令（例如，加粗等）可能与传统方式不同，
% 请阅读\pkgx{unicode-math}宏包文档。
% \section{功能说明}
% \label{功能说明}
% 请根据\secrefx{使用说明}中相应宏包/文档类的说明来选择性地阅读本节内容。
% \subsection{编译}
% \label{编译}
% \changes{v0.5.1.2}{2022/04/07}{增加编译说明}
% \xduts[]{}仅支持\XeLaTeX{}，
% 参考文献后端程序默认为\cmdx{biber}[]，也可以参考\secrefx{参考文献配置}切换为\cmdx{bibtex}[]。
% \subsection{参考文献引用}
% \label{参考文献引用}
% \changes{v4.3.0.1}{2023/01/30}{修改文档中关于参考文献的描述}
% \xduts[]{}提供了两种参考文献处理方式，
% 一种是\pkgx{natbib}宏包搭配\pkgx{gbt7714}宏包，后端程序为\cmdx{bibtex}[]；
% 另一种是\pkgx{biblatex}宏包，后端程序为\cmdx{biber}[]。
% 引用参考文献时，\tnx[]{cite}为上标样式，\tnx[]{parencite}为非上标样式。
% \subsection{参数设置}
% \label{参数设置}
% \changes{v4.4.2.1}{2023/02/08}{修正接口文档说明样式}
% \changes{v0.5.1.1}{2022/04/06}{增加xdusetup配置文档}
% \changes{v1.30.0.1}{2022/06/20}{修改xdusetup配置文档}
% \begin{function}[added=2022-03-07]{\xdusetup}
%   \begin{syntax}
%     \tn{xdusetup}\marg{键值列表}
%   \end{syntax}
% \xduts[]{}提供了一系列选项，可自行配置。
% 载入宏包/文档类之后，以下所有选项均可通过统一的命令\tnx{xdusetup}来设置。^^A
% \tnx[]{xdusetup}的参数是一组由（英文）逗号隔开的选项列表，
% 下文中尖括号内列出了若干个允许的选项，其中加粗的为默认选项。
% 列表中的选项通常是\kvoptx{\metax[]{key}[]}{\metax[]{value}[]}的形式。^^A
% \tnx[]{xdusetup}采用\LaTeXiii{}风格的键值设置，
% 支持不同类型以及多种层次的选项设定。
% 键值列表中，“|=|”左右的空格不影响设置；
% 但需注意，参数列表中不可以出现空行。
% 一些选项包含子选项，如\optx{style}和\optx{info}等，
% 它们可以按如下两种等价方式来设定：
% \end{function}
% \begin{lstlisting}
% \xdusetup{
%   style = { cjk-font = fandol, latin-font = gyre },
%   info  = {
%     title      = {论如何让用户\\认真阅读文档},
%     author     = {张三},
%     department = {排版学院},
%     abstract   = {chapters/abstract-zh.tex},
%     keywords*  = {Dummy,Keywords,Here,it is}
%   }
% }
% \end{lstlisting}
% 或者
% \begin{lstlisting}
% \xdusetup{
%   style / cjk-font   = fandol,
%   style / latin-font = gyre,
%   info  / title      = {论如何让用户\\认真阅读文档},
%   info  / author     = {张三},
%   info  / department = {排版学院},
%   info  / abstract   = {chapters/abstract-zh.tex},
%   info  / keywords*  = {Dummy,Keywords,Here,it is}
% }
% \end{lstlisting}
% \subsection{字体选项}
% \label{字体选项}
% \begin{function}[added=2022-03-06,updated=2023-02-20]{style/cjk-font}
%   \begin{syntax}
%     \opt{style/cjk-font} = adobe|(fandol)|founder|hanyi|sinotype|win|none
%   \end{syntax}
% 设置中文字体，具体配置见\tabrefx{tab:cjk-font}[]。
% \end{function}
% \begin{optdesc}
%   \item[adobe] \filex[]{adobesongstd-light.otf}[]、\filex[]{adobekaitistd-regular.otf}[]、\filex[]{adobeheitistd-regular.otf}和\filex{Adobe-Fangsong-Std-R-Font.otf}[]。
%   \item[fandol] \filex[]{FandolSong-Regular.otf}[]、\filex[]{FandolSong-Bold.otf}[]、\filex[]{FandolKai-Regular.otf}[]、\filex[]{FandolHei-Regular.otf}[]、\filex[]{FandolHei-Bold.otf}和\filex{FandolFang-Regular.otf}[]。
%   \item[founder] \filex[]{FZShuSong-Z01.ttf}[]、\filex[]{FZKai-Z03.ttf}[]、\filex[]{FZHei-B01.ttf}和\filex{FZFSK.TTF}[]。
%   \item[hanyi] \filex[]{HYShuSongErS.ttf}[]、\filex[]{HYKaiTiS.ttf}[]、\filex[]{HYZhongHeiTiS.ttf}和\filex{HYFangSongS.ttf}[]。
%   \item[sinotype] \filex[]{STSONG.TTF}[]、\filex[]{STKAITI.TTF}[]、\filex[]{STXIHEI.TTF}[]、\filex[]{STHeiti.ttf}和\filex{STFANGSO.TTF}[]。
%   \item[win] \filex[]{simsun.ttc}[]、\filex[]{simkai.ttf}[]、\filex[]{simhei.ttf}和\filex{simfang.ttf}[]。
%   \item[none] 关闭内置中文字体配置，需自行配置中文字体。
% \end{optdesc}
% \changes{v2.16.1.1}{2022/11/27}{修改中文字体配置表文档样式}
% \begin{table}
% \caption{中文字体配置}
% \label{tab:cjk-font}
% \begin{tblr}
% {
% width          = \linewidth,
% colspec        = {Q[c,m]*{4}{X[c,m]}},
% hline{1,3,Z}   = {wd=.08em},
% hline{2}       = {2-3}{wd=.08em,leftpos=-1,rightpos=-1,endpos=true},
% row{odd[3-Z]}  = {bg=gray9!40},
% cell{1}{2}     = {c=2}{},
% cell{1}{1,4,5} = {r=2}{},
% cell{3-Z}{1}   = {font=\ttfamily},
% row{1-2}       = {font=\bfseries}
% }
% 选项名称 & 罗马族         &                & 无衬线族       & 打字机族       \\
%          & 直立/倾斜形状  & 意大利形状     &                &                \\
% adobe    & Adobe 宋体 Std & Adobe 楷体 Std & Adobe 黑体 Std & Adobe 仿宋 Std \\
% fandol   & FandolSong     & FandolKai      & FandolHei      & FandolFang     \\
% founder  & 方正书宋\_GBK  & 方正楷体\_GBK  & 方正黑体\_GBK  & 方正仿宋\_GBK  \\
% hanyi    & 汉仪书宋二S    & 汉仪楷体S      & 汉仪中黑S      & 汉仪仿宋S      \\
% sinotype & 华文宋体       & 华文楷体       & 华文细黑/黑体  & 华文仿宋       \\
% win      & 中易宋体       & 中易楷体       & 中易黑体       & 中易仿宋       \\
% \end{tblr}
% \end{table}
% \begin{function}[added=2022-04-01]{style/cjk-fake-bold}
%   \begin{syntax}
%     \opt{style/cjk-fake-bold} = \meta{伪粗体粗细程度}
%   \end{syntax}
% 设置中文字体伪粗体粗细程度。默认为\valuex{3}[]，对于部分存在对应粗体字体的中文字体，如FandolSong和FandolHei等，该选项不生效。
% \end{function}
% \begin{function}[added=2022-04-01]{style/cjk-fake-slant}
%   \begin{syntax}
%     \opt{style/cjk-fake-slant} = \meta{伪斜体倾斜程度}
%   \end{syntax}
% 设置中文字体伪斜体倾斜程度。默认为\valuex{0.2}[]。
% \end{function}
% \changes{v6.1.4.2}{2023/03/23}{补充TeX Live内置字体文件名}
% \changes{v5.4.0.1}{2023/02/23}{修正文档内英文字体配置表格错误}
% \begin{function}[added=2022-03-06,updated=2023-02-23]{style/latin-font}
%   \begin{syntax}
%     \opt{style/latin-font} = (gyre)|tac|tacn|tcc|thcs|tll|none
%   \end{syntax}
% 设置英文字体，具体配置见\tabrefx{tab:latin-font}[]。
% \end{function}
% \begin{optdesc}
%   \item[gyre] \filex[]{texgyretermes-regular.otf}[]、\filex[]{texgyretermes-bold.otf}[]、\filex[]{texgyretermes-italic.otf}[]、\filex[]{texgyretermes-bolditalic.otf}[]、\filex[]{texgyreheros-regular.otf}[]、\filex[]{texgyreheros-bold.otf}[]、\filex[]{texgyreheros-italic.otf}[]、\filex[]{texgyreheros-bolditalic.otf}[]、\filex[]{texgyrecursor-regular.otf}[]、\filex[]{texgyrecursor-bold.otf}[]、\filex[]{texgyrecursor-italic.otf}和\filex{texgyrecursor-bolditalic.otf}[]。
%   \item[tac] \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[]{consola.ttf}[]、\filex[]{consolab.ttf}[]、\filex[]{consolai.ttf}和\filex{consolaz.ttf}[]。
%   \item[tacn] \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[tcc] \filex[]{times.ttf}[]、\filex[]{timesbd.ttf}[]、\filex[]{timesi.ttf}[]、\filex[]{timesbi.ttf}[]、\filex[]{cmunss.otf}[]、\filex[]{cmunsx.otf}[]、\filex[]{cmunsi.otf}[]、\filex[]{cmunso.otf}[]、\filex[]{cmuntt.otf}[]、\filex[]{cmuntb.otf}[]、\filex[]{cmunit.otf}和\filex{cmuntx.otf}。
%   \item[thcs] \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}[]。
%   \item[tll] \filex[]{times.ttf}[]、\filex[]{timesbd.ttf}[]、\filex[]{timesi.ttf}[]、\filex[]{timesbi.ttf}[]、\filex[]{LinBiolinum_R.otf}[]、\filex[]{LinBiolinum_RB.otf}[]、\filex[]{LinBiolinum_RI.otf}[]、\filex[]{LinBiolinum_RBO.otf}[]、\filex[]{LinLibertine_M.otf}[]、\filex[]{LinLibertine_MB.otf}[]、\filex[]{LinLibertine_MO.otf}和\filex{LinLibertine_MBO.otf}。
%   \item[none] 关闭内置英文字体配置，需自行配置英文字体。
% \end{optdesc}
% \changes{v2.16.1.1}{2022/11/27}{修改英文字体配置表文档样式}
% \begin{table}
% \caption{英文字体配置}
% \label{tab:latin-font}
% \begin{tblr}
% {
% width          = \linewidth,
% colspec        = {Q[c,m]*{3}{X[-1,c,m]}},
% hline{1,2,Z}   = {wd=.08em},
% row{even[2-Z]} = {bg=gray9!40},
% cell{2-Z}{1}   = {font=\ttfamily},
% row{1}         = {font=\bfseries}
% }
% 选项名称 & 罗马族          & 无衬线族         & 打字机族               \\
% gyre     & TeX Gyre Termes & TeX Gyre Heros   & TeX Gyre Cursor        \\
% tac      & Times New Roman & Arial            & Consolas               \\
% tacn     & Times New Roman & Arial            & Courier New            \\
% tcc      & Times New Roman & CMU Sans Serif   & CMU Typewriter Text    \\
% thcs     & Times New Roman & Helvetica        & Courier Std            \\
% tll      & Times New Roman & Linux Biolinum O & Linux Libertine Mono O \\
% \end{tblr}
% \end{table}
% \begin{function}[added=2023-01-28]{style/latin-sans-scale,style/latin-mono-scale}
%   \begin{syntax}
%     \opt{style/latin-sans-scale} = upper|lower|(off)
%     \opt{style/latin-mono-scale} = upper|lower|(off)
%   \end{syntax}
% 匹配无衬线族和打字机族字符高度。
% \end{function}
% \begin{optdesc}
%   \item[upper] 按大写字母的高度缩放以匹配罗马族字体。
%   \item[lower] 按小写字母的高度缩放以匹配罗马族字体。
%   \item[off] 不缩放。
% \end{optdesc}
% \begin{function}[added=2022-03-06,updated=2022-11-27]{style/math-font}
%   \begin{syntax}
%     \opt{style/math-font} = asana|cambria|(cm)|fira|garamond|lm|...|termes|xits|none
%   \end{syntax}
% 设置数学字体，具体配置见\tabrefx{tab:math-font}[]。除Computer Modern字体外，均使用\pkgx{unicode-math}宏包调用字体。
% \end{function}
% \changes{v2.16.1.1}{2022/11/27}{修改数学字体配置表文档样式}
% \changes{v0.1.4.1}{2022/04/04}{数学字体风格介绍}
% \begin{optdesc}
%   \item[cambria] \filex[]{cambria.ttc}[]。
%   \item[none] 关闭内置数学字体配置，需自行配置数学字体。
% \end{optdesc}
% \begin{tblr}
% [
% long,
% caption = {数学字体配置},
% label   = {tab:math-font}
% ]
% {
% width          = \linewidth,
% colspec        = {X[2,c,m]X[3,c,m]},
% hline{1,2,Z}   = {wd=.08em},
% row{even[2-Z]} = {bg=gray9!40},
% cell{2-Z}{1}   = {font=\ttfamily},
% row{1}         = {font=\bfseries},
% rowhead        = 1
% }
% 选项名称       & 字体名称                 \\
% asana          & Asana Math               \\
% cambria        & Cambria Math             \\
% cm             & Computer Modern          \\
% concrete       & Concrete Math            \\
% erewhon        & Erewhon Math             \\
% euler          & Euler Math               \\
% fira           & Fira Math                \\
% garamond       & Garamond Math            \\
% gfsneohellenic & GFS Neohellenic Math     \\
% kp             & KpMath                   \\
% libertinus     & Libertinus Math          \\
% lm             & Latin Modern Math        \\
% newcm          & New Computer Modern Math \\
% stix2          & STIX Two Math            \\
% stix           & STIX Math                \\
% xcharter       & XCharter Math            \\
% xits           & XITS 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     \\
% \end{tblr}
% \begin{function}[added=2022-03-14]{style/unicode-math}
%   \begin{syntax}
%     \opt{style/unicode-math} = \marg{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}
%     \opt{style/font-type} = (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}
%     \opt{style/font-path} = \marg{路径}
%   \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}
%     \opt{style/en-cjk-font} = true|(false)
%   \end{syntax}
% 切换字体族时，英文是否使用中文字体。主要作用于封面、章节标题、caption、页眉页脚、参考文献列表等。
% \end{function}
% \begin{optdesc}
%   \item[true] 英文使用相对应字体族的中文字体。
%   \item[false] 英文使用相对应字体族的英文字体。
% \end{optdesc}
% \subsection{标题数学字体配置}
% \label{标题数学字体配置}
% \begin{function}[added=2023-02-03]{style/title-bold-math}
%   \begin{syntax}
%     \opt{style/title-bold-math} = true|(false)
%   \end{syntax}
% 是否自动加粗如下位置中的数学字体：
% 中文研究生学位论文中，封面和题名页中英文标题，正文所有级别标题和目录一级标题；
% 英文研究生学位论文中，封面和题名页中英文标题，正文二三四五六级标题和中文目录一级标题；
% 本科生毕业设计论文中，封面标题，中英文关键词，目录一级标题和正文一级标题。
% 目前仅支持Computer Modern数学字体。
% \end{function}
% \begin{optdesc}
%   \item[true] 加粗。
%   \item[false] 不加粗。
% \end{optdesc}
% \subsection{语言配置}
% \label{语言配置}
% \begin{function}[added=2022-03-29]{style/language}
%   \begin{syntax}
%     \opt{style/language} = (zh)|en
%   \end{syntax}
% 设置论文语言。
% \end{function}
% \begin{optdesc}
%   \item[zh] 中文。
%   \item[en] 英文。注意，研究生学位论文一二三级标题命令请参考\secrefx{英文研究生学位论文标题}。
% \end{optdesc}
% \subsection{参考文献配置}
% \label{参考文献配置}
% \begin{function}[added=2022-04-02,updated=2022-04-03]{style/bib-backend}
%   \begin{syntax}
%     \opt{style/bib-backend} = bibtex|(biblatex)
%   \end{syntax}
% 设置参考文献支持方式。
% \end{function}
% \begin{optdesc}
%   \item[bibtex] 使用\bibtex{}处理参考文献，后端程序为\cmdx{bibtex}[]。
%   \item[biblatex] 使用\biblatex{}处理参考文献，后端程序为\cmdx{biber}[]。
% \end{optdesc}
% \changes{v1.31.0.0}{2022/06/21}{修改\pkgx{biblatex}默认选项}
% \begin{function}[added=2022-06-21]{style/biblatex-option}
%   \begin{syntax}
%     \opt{style/biblatex-option} = \marg{biblatex宏包选项}
%   \end{syntax}
% 修改\pkgx{biblatex}默认选项，具体配置参考\pkgx{biblatex-gb7714-2015}宏包文档，
% 仅在\optx{style/bib-backend}等于|biblatex|时有效。例如：
% \begin{lstlisting}
% \xdusetup{ style / biblatex-option = { gbnamefmt = quanpin } }
% \end{lstlisting}
% \end{function}
% \subsection{页面配置}
% \label{页面配置}
% \begin{function}[added=2022-04-12]{style/symmetric-margin}
%   \begin{syntax}
%     \opt{style/symmetric-margin} = true|(false)
%   \end{syntax}
% 设置左右页边距是否对称。
% \end{function}
% \begin{optdesc}
%   \item[true] 对称。
%   \item[false] 不对称。
% \end{optdesc}
% \begin{function}[added=2022-05-08]{style/page-vertical-align}
%   \begin{syntax}
%     \opt{style/page-vertical-align} = 分散对齐|(顶部对齐)
%   \end{syntax}
% 设置页面垂直方向的对齐方式。
% \end{function}
% \begin{optdesc}
%   \item[分散对齐] 页面高度均匀地填满，使每一页的底部直接对齐。
%   \item[顶部对齐] 页面中的内容保持它的自然高度，每一页的页面底部用空白填满。
% \end{optdesc}
% \subsection{文件配置}
% \label{文件配置}
% \begin{function}[added=2022-07-01]{style/file-search-path}
%   \begin{syntax}
%     \opt{style/file-search-path} = \marg{路径}
%   \end{syntax}
% 设置文件搜索路径，可用于\tnx{input}[]、\tnx[]{include}和\tnx{includegraphics}[]，
% 多个路径之间需要使用英文半角逗号隔开。
% 设置后\tnx{input}[]、\tnx[]{include}和\tnx{includegraphics}仅需填写文件名。
% \end{function}
% \begin{function}[added=2022-07-01]{style/fix-input,style/fix-include,style/fix-includegraphics}
%   \begin{syntax}
%     \opt{style/fix-input} = true|(false)
%     \opt{style/fix-include} = true|(false)
%     \opt{style/fix-includegraphics} = true|(false)
%   \end{syntax}
% TEXMF树搜索优先级高于用户自定义的文件搜索路径，
% 如果在TEXMF树内存在同名文件，则会导致错误的文件被加载。
% 通过为\tnx{input}[]、\tnx[]{include}和\tnx{includegraphics}命令打补丁可以避免该问题。
% 如果用户的\TeX{}或图片等文件不与TEXMF树内文件同名，或与\TeX{}主文件在同一目录，则无需打补丁。
% \end{function}
% \subsection{交叉引用配置}
% \label{交叉引用配置}
% \begin{function}[added=2022-04-16,updated=2022-05-08]{style/ref-add-space}
%   \begin{syntax}
%     \opt{style/ref-add-space} = true|(false)
%   \end{syntax}
% 是否自动调整\tnx{ref}和\tnx{pageref}两侧中英文间空白。
% \end{function}
% \begin{optdesc}
%   \item[true] 自动调整\tnx{ref}和\tnx{pageref}两侧中英文间空白。
% 未避免产生不正常的空白宽度，请不要在\tnx{ref}和\tnx{pageref}两侧输入空格。
% 仅在\optx{language}等于|zh|时有效。
% 请不要使用\pkgx{subcaption}宏包的提供的\tnx{subref}和\tnx{subref*}命令。
%   \item[false] 保持原始\tnx{ref}和\tnx{pageref}命令效果。
% \end{optdesc}
% \subsection{Caption配置}
% \label{caption配置}
% \changes{v1.0.0.0}{2022/04/14}{设置图、表、算法标签与后面标题之间的间距}
% \begin{function}[added=2022-04-14]{style/caption-label-sep}
%   \begin{syntax}
%     \opt{style/caption-label-sep} = \meta{间距}
%   \end{syntax}
% 设置图、表、算法标签与后面标题之间的间距，默认值为\valuex{0.75em}[]。
% \end{function}
% \subsection{图表配置}
% \label{图表配置}
% \changes{v3.0.0.0}{2022/12/03}{设置图表caption格式}
% \begin{function}[added=2022-12-03]{style/ft-caption-format}
%   \begin{syntax}
%     \opt{style/ft-caption-format} = plain|(hang)
%   \end{syntax}
% 设置图表caption格式。
% \begin{optdesc}
%   \item[plain] 无缩进，即自然段落。
%   \item[hang] 悬挂缩进。
% \end{optdesc}
% \end{function}
% \changes{v3.0.0.0}{2022/12/03}{设置图表caption对齐方式}
% \begin{function}[added=2022-12-03]{style/ft-caption-align}
%   \begin{syntax}
%     \opt{style/ft-caption-align} = left|centering|(centering-left)
%   \end{syntax}
% 设置图表caption对齐方式。
% \begin{optdesc}
%   \item[left] 左对齐。
%   \item[centering] 居中。
%   \item[centering-left] 只有一行时居中，多行时左对齐。
% \end{optdesc}
% \end{function}
% \changes{v6.1.0.0}{2023/03/04}{增加图表对齐接口}
% \begin{function}[added=2023-03-04]{style/figure-align,style/table-align}
%   \begin{syntax}
%     \opt{style/figure-align} = left|(centering)|right
%     \opt{style/table-align} = left|(centering)|right
%   \end{syntax}
% 设置\envx{figure}和\envx{table}环境中内容对齐方式。
% \end{function}
% \begin{optdesc}
%   \item[left] 左对齐。
%   \item[centering] 居中。
%   \item[right] 右对齐。
% \end{optdesc}
% \changes{v0.10.0.1}{2022/04/13}{补充表格内容字号文档说明}
% \begin{function}[added=2022-04-13,updated=2022-04-15]{style/table-small-font}
%   \begin{syntax}
%     \opt{style/table-small-font} = (true)|false
%   \end{syntax}
% 设置表格内容字号是否为五号。
% \end{function}
% \begin{optdesc}
%   \item[true] 五号。
%   \item[false] 小四号。
% \end{optdesc}
% \subsection{算法配置}
% \label{算法配置}
% \changes{v5.0.0.0}{2023/02/17}{精简算法接口名称}
% \begin{function}[added=2022-06-25,updated=2023-02-17]{style/alg-small-caption}
%   \begin{syntax}
%     \opt{style/alg-small-caption} = (true)|false
%   \end{syntax}
% 设置算法caption字号是否为五号。
% \end{function}
% \begin{optdesc}
%   \item[true] 五号。
%   \item[false] 小四号。
% \end{optdesc}
% \begin{function}[added=2022-04-15,updated=2023-02-17]{style/alg-small-font}
%   \begin{syntax}
%     \opt{style/alg-small-font} = (true)|false
%   \end{syntax}
% 设置算法内容字号是否为五号。
% \end{function}
% \begin{optdesc}
%   \item[true] 五号。
%   \item[false] 小四号。
% \end{optdesc}
% \changes{v3.0.0.0}{2022/12/03}{设置算法caption格式}
% \begin{function}[added=2022-12-03]{style/alg-caption-format}
%   \begin{syntax}
%     \opt{style/alg-caption-format} = plain|(hang)
%   \end{syntax}
% 设置算法caption格式。
% \begin{optdesc}
%   \item[plain] 无缩进，即自然段落。
%   \item[hang] 悬挂缩进。
% \end{optdesc}
% \end{function}
% \changes{v3.0.0.0}{2022/12/03}{设置算法caption对齐方式}
% \begin{function}[added=2022-12-03]{style/alg-caption-align}
%   \begin{syntax}
%     \opt{style/alg-caption-align} = (left)|centering|centering-left
%   \end{syntax}
% 设置算法caption对齐方式。
% \begin{optdesc}
%   \item[left] 左对齐。
%   \item[centering] 居中。
%   \item[centering-left] 只有一行时居中，多行时左对齐。
% \end{optdesc}
% \end{function}
% \changes{v3.1.0.0}{2022/12/03}{设置算法三线间距}
% \begin{function}[added=2022-12-03]{style/add-alg-rule-vspace}
%   \begin{syntax}
%     \opt{style/add-alg-rule-vspace} = true|(false)
%   \end{syntax}
% 设置是否为ruled样式的算法环境的三条横线增加纵向间距。
% \begin{optdesc}
%   \item[true] 增加。
%   \item[false] 不增加。
% \end{optdesc}
% \end{function}
% \subsection{章节配置}
% \label{章节配置}
% \begin{function}[added=2022-04-05]{style/before-skip}
%   \begin{syntax}
%     \opt{style/before-skip} = \marg{间距列表}
%   \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}
%     \opt{style/after-skip} = \marg{间距列表}
%   \end{syntax}
% 设置章节标题后的垂直间距，默认值为\valuex{\{18pt, 12pt, 6pt, 6pt, 6pt, 6pt\}}[]，分别对应\tnx{chapter}[]、\tnx[]{section}[]、\tnx[]{subsection}[]、\tnx[]{subsubsection}[]、\tnx[]{paragraph}和\tnx{subparagraph}。
% \end{function}
% \begin{function}[added=2022-04-11]
%   {
%     style/chap-zihao,
%     style/sec-zihao,
%     style/subsec-zihao,
%     style/subsubsec-zihao,
%     style/para-zihao,
%     style/subpara-zihao
%   }
%   \begin{syntax}
%     \opt{style/chap-zihao} = 0|-0|1|-1|2|-2|3|-3|4|-4|5|-5|6|-6|7|8
%     \opt{style/sec-zihao} = 0|-0|1|-1|2|-2|3|-3|4|-4|5|-5|6|-6|7|8
%     \opt{style/subsec-zihao} = 0|-0|1|-1|2|-2|3|-3|4|-4|5|-5|6|-6|7|8
%     \opt{style/subsubsec-zihao} = 0|-0|1|-1|2|-2|3|-3|4|-4|5|-5|6|-6|7|8
%     \opt{style/para-zihao} = 0|-0|1|-1|2|-2|3|-3|4|-4|5|-5|6|-6|7|8
%     \opt{style/subpara-zihao} = 0|-0|1|-1|2|-2|3|-3|4|-4|5|-5|6|-6|7|8
%   \end{syntax}
% 设置章节标题字号。
% 当论文语言为中文时，默认值分别为\valuex{3}[]、\valuex[]{4}[]、\valuex[]{4}[]、\valuex[]{4}[]、\valuex[]{4}和\valuex{4}。
% 当论文语言为英文时，默认值分别为\valuex{4}[]、\valuex[]{-4}[]、\valuex[]{-4}[]、\valuex[]{-4}[]、\valuex[]{-4}和\valuex{-4}。
% \end{function}
% \begin{optdesc}
%   \item[0] 初号
%   \item[−0] 小初号
%   \item[1] 一号
%   \item[-1] 小一号
%   \item[2] 二号
%   \item[-2] 小二号
%   \item[3] 三号
%   \item[-3] 小三号
%   \item[4] 四号
%   \item[-4] 小四号
%   \item[5] 五号
%   \item[-5] 小五号
%   \item[6] 六号
%   \item[-6] 小六号
%   \item[7] 七号
%   \item[8] 八号
% \end{optdesc}
% \subsection{对照表配置}
% \label{对照表配置}
% \begin{function}[added=2022-06-05]{style/customize-los,style/customize-loa}
%   \begin{syntax}
%     \opt{style/customize-los} = (true)|false
%     \opt{style/customize-loa} = (true)|false
%   \end{syntax}
% 是否完全自定义符号对照表和缩略语对照表。
% \end{function}
% \begin{optdesc}
%   \item[true] 完全自定义符号对照表和缩略语对照表，对照表由用户自行排版。
% 在\secrefx{信息录入}中提及的\optx{info/los}和\optx{info/loa}中对应的文件中可以通过表格或列表等方式实现对照表，例如：
% \begin{lstlisting}
% \begin{tabular}{ll}
% 符号         & 符号名称 \\
% $\pi$        & 圆周率   \\
% $\mathbb{R}$ & 实数     \\
% \end{tabular}
% \end{lstlisting}
%   \item[false] 使用内置的基于\envx{longtblr}环境（\pkgx{tabularray}宏包）实现的
% 符号对照表和缩略语对照表样式。
% 在\secrefx{信息录入}中提及的\optx{info/los}和\optx{info/loa}中对应的文件仅需填写相应列数的内容即可，例如：
% \begin{lstlisting}
% $\pi$        & 圆周率 \\
% $\mathbb{R}$ & 实数   \\
% \end{lstlisting}
% \end{optdesc}
% \changes{v2.10.2.1}{2022/06/28}{修改对照表默认列格式}
% \begin{function}[added=2022-06-05,updated=2022-06-28]{style/colspec-los,style/colspec-loa}
%   \begin{syntax}
%     \opt{style/colspec-los} = \marg{符号对照表列格式}
%     \opt{style/colspec-loa} = \marg{缩略语对照表列格式}
%   \end{syntax}
% 设置符号对照表和缩略语对照表列格式，
% 符号对照表列格式默认值为\valuex{Q[l,h]X[l,h]}[]。
% 缩略语对照表列格式默认值为\valuex{Q[l,h]X[l,h]X[l,h]}[]。
% 语法参考\pkgx{tabularray}宏包\valuex{colspec}选项。
% 仅在\optx{style/customize-los}和\optx{style/customize-loa}等于\valuex{false}时有效。
% \end{function}
% \begin{function}[added=2022-06-05]{style/title-row-los,style/title-row-loa}
%   \begin{syntax}
%     \opt{style/title-row-los} = true|(false)
%     \opt{style/title-row-loa} = true|(false)
%   \end{syntax}
% 是否每页均显示符号对照表和缩略语对照表标题行。
% 仅在\optx{style/customize-los}和\optx{style/customize-loa}等于\valuex{false}时有效。
% \end{function}
% \begin{optdesc}
%   \item[true] 每页均显示符号对照表和缩略语对照表标题行。
%   \item[false] 仅第一页显示显示符号对照表和缩略语对照表标题行。
% \end{optdesc}
% \changes{v1.26.0.0}{2022/06/07}{作者简介配置}
% \subsection{作者简介配置}
% \label{作者简介配置}
% \changes{v1.28.4.1}{2022/06/19}{修正作者简介示例}
% \begin{function}[added=2022-06-07]{style/customize-edubg,style/customize-resresult}
%   \begin{syntax}
%     \opt{style/customize-edubg} = (true)|false
%     \opt{style/customize-resresult} = (true)|false
%   \end{syntax}
% 是否完全自定义作者简介中教育背景和攻读硕士学位期间的研究成果。
% \end{function}
% \begin{optdesc}
%   \item[true] 完全自定义作者简介中教育背景和攻读硕士学位期间的研究成果，由用户自行排版。
% 在\secrefx{信息录入}中提及的\optx{info/bio}中对应的文件中
% 可以通过段落、表格或列表等方式排版教育背景和攻读硕士学位期间的研究成果，例如：
% \begin{lstlisting}
% \section{基本情况}
% 张三，男，陕西西安人，1982年8月出生，西安电子科技大学XX学院XX专业2008级硕士研究生。
% \section{教育背景}
% 2001.08～2005.07 西安电子科技大学，本科，专业：电子信息工程
% \par
% 2008.08～ 西安电子科技大学，硕士研究生，专业：电磁场与微波技术
% \section{攻读硕士学位期间的研究成果}
% \subsection{发表学术论文}
% [1] XXX, XXX, XXX. Rapid development technique for drip irrigation emitters[J]. RP Journal,UK.,2003,9(2): 104-110.(SCI: 672CZ, EI: 03187452127)
% \par
% [2] XXX, XXX, XXX. 基于快速成型制造的滴管快速制造技术研究[J]. 西安交通大学学报, 2001, 15(9): 935-939. (EI: 02226959521)
% \subsection{申请（授权）专利}
% [1] XXX, XXX, XXX等. 专利名称: 国别,专利号[P]. 出版日期.
% \subsection{参与科研项目及获奖}
% [1] XXX项目, 项目名称, 起止时间, 完成情况, 作者贡献。
% \par
% [2] XXX, XXX, XXX等. 科研项目名称. 陕西省科技进步三等奖, 获奖日期.
% \end{lstlisting}
%   \item[false] 使用内置的基于\envx{tblr}环境（\pkgx[]{tabularray}宏包）实现的
% 教育背景表格环境\envx{edubg}和基于\envx{enumerate}环境（\pkgx[]{enumitem}宏包）实现的
% 攻读硕士学位期间的研究成果列表环境\envx{resresult}。
% 在\secrefx{信息录入}中提及的\optx{info/bio}中对应的文件中使用\envx{edubg}和\envx{resresult}环境即可，例如：
% \begin{lstlisting}
% \section{基本情况}
% 张三，男，陕西西安人，1982年8月出生，西安电子科技大学XX学院XX专业2008级硕士研究生。
% \section{教育背景}
% \begin{edubg}
% 2001.08～2005.07 & 西安电子科技大学，本科，专业：电子信息工程\\
% 2008.08～ & 西安电子科技大学，硕士研究生，专业：电磁场与微波技术\\
% \end{edubg}
% \section{攻读硕士学位期间的研究成果}
% \subsection{发表学术论文}
% \begin{resresult}
% \item XXX, XXX, XXX. Rapid development technique for drip irrigation emitters[J]. RP Journal,UK.,2003,9(2): 104-110.(SCI: 672CZ, EI: 03187452127)
% \item XXX, XXX, XXX. 基于快速成型制造的滴管快速制造技术研究[J]. 西安交通大学学报, 2001, 15(9): 935-939. (EI: 02226959521)
% \end{resresult}
% \subsection{申请（授权）专利}
% \begin{resresult}
% \item XXX, XXX, XXX等. 专利名称: 国别,专利号[P]. 出版日期.
% \end{resresult}
% \subsection{参与科研项目及获奖}
% \begin{resresult}
% \item XXX项目, 项目名称, 起止时间, 完成情况, 作者贡献。
% \item XXX, XXX, XXX等. 科研项目名称. 陕西省科技进步三等奖, 获奖日期.
% \end{resresult}
% \end{lstlisting}
% \end{optdesc}
% \subsection{信息录入}
% \label{信息录入}
% \changes{v2.18.1.0}{2022/12/01}{增加专业博士校外导师和英文学位类别信息录入}
% \changes{v2.16.1.1}{2022/11/27}{修改信息录入选项分类表文档样式}
% \changes{v1.9.0.0}{2022/05/03}{增加信息录入选项分类表}
% \changes{v1.10.3.1}{2022/05/04}{移除专业博士校外导师信息录入}
% 用户根据\tabrefx{tblr:info}选择相应的选项并使用\secrefx{参数设置}中的方式进行信息录入。
% \begin{tblr}
% [
% long,
% caption = {信息录入选项分类},
% label   = {tblr:info}
% ]
% {
% width          = \linewidth,
% colspec        = {Q[l,m]*{7}{X[c,m]}},
% cell{1}{3}     = {c=2}{},
% cell{1}{5}     = {c=4}{},
% cell{2}{2}     = {r=2}{},
% cell{2}{3,5,7} = {c=2}{},
% hline{1,4,Z}   = {wd=.08em},
% hline{2}       = {2-2}{wd=.08em,leftpos=-1,rightpos=-1,endpos=true},
% hline{2}       = {3-4}{wd=.08em,leftpos=-1,rightpos=-1,endpos=true},
% hline{2}       = {5-8}{wd=.08em,leftpos=-1,rightpos=-1,endpos=true},
% hline{3}       = {3-4}{wd=.08em,leftpos=-1,rightpos=-1,endpos=true},
% hline{3}       = {5-6}{wd=.08em,leftpos=-1,rightpos=-1,endpos=true},
% hline{3}       = {7-8}{wd=.08em,leftpos=-1,rightpos=-1,endpos=true},
% row{odd[4-Z]}  = {bg=gray9!40},
% cell{4-Z}{1}   = {font=\ttfamily},
% row{1-3}       = {font=\bfseries},
% rowhead        = 3
% }
%                  & 开题   & 毕业设计 &        & 学位论文 &        &        &        \\
%                  & 本科   & 本科     &        & 硕士     &        & 博士   &        \\
%                  &        & 校内     & 校外   & 学术     & 专业   & 学术   & 专业   \\
% graduate-type    &        &          &        & \cmark   & \cmark & \cmark & \cmark \\
% degree-type      &        &          &        & \cmark   & \cmark & \cmark & \cmark \\
% degree           &        &          &        & \cmark   & \cmark & \cmark & \cmark \\
% degree*          &        &          &        &          & \cmark &        & \cmark \\
% title            &        & \cmark   & \cmark & \cmark   & \cmark & \cmark & \cmark \\
% title*           &        &          &        & \cmark   & \cmark & \cmark & \cmark \\
% department       & \cmark & \cmark   & \cmark & \cmark   & \cmark & \cmark & \cmark \\
% major            & \cmark & \cmark   & \cmark & \cmark   &        & \cmark &        \\
% major*           &        &          &        & \cmark   &        & \cmark &        \\
% sub-major        &        &          &        & \cmark   &        & \cmark &        \\
% domain           &        &          &        &          & \cmark &        & \cmark \\
% author           & \cmark & \cmark   & \cmark & \cmark   & \cmark & \cmark & \cmark \\
% author*          &        &          &        & \cmark   & \cmark & \cmark & \cmark \\
% supervisor       & \cmark & \cmark   &        & \cmark   & \cmark & \cmark & \cmark \\
% supervisor*      &        &          &        & \cmark   & \cmark & \cmark & \cmark \\
% supv-dept        &        & \cmark   &        &          &        &        &        \\
% supv-ent         &        &          & \cmark &          & \cmark &        & \cmark \\
% supv-ent*        &        &          &        &          & \cmark &        & \cmark \\
% supv-school      &        &          & \cmark &          &        &        &        \\
% supv-title       &        &          &        & \cmark   & \cmark & \cmark & \cmark \\
% supv-title*      &        &          &        & \cmark   & \cmark & \cmark & \cmark \\
% supv-ent-title   &        &          &        &          & \cmark &        & \cmark \\
% supv-ent-title*  &        &          &        &          & \cmark &        & \cmark \\
% class            & \cmark &          &        &          &        &        &        \\
% class-id         &        & \cmark   & \cmark &          &        &        &        \\
% student-id       & \cmark & \cmark   & \cmark & \cmark   & \cmark & \cmark & \cmark \\
% clc              &        &          &        & \cmark   & \cmark & \cmark & \cmark \\
% secret-level     &        &          &        & \cmark   & \cmark & \cmark & \cmark \\
% secret-year      &        &          &        & \cmark   & \cmark & \cmark & \cmark \\
% submit-date      & \cmark &          &        & \cmark   & \cmark & \cmark & \cmark \\
% statement-scan   &        &          &        & \cmark   & \cmark & \cmark & \cmark \\
% statement-sign   &        &          &        & \cmark   & \cmark & \cmark & \cmark \\
% sign             & \cmark &          &        &          &        &        &        \\
% date             & \cmark &          &        &          &        &        &        \\
% abstract         &        & \cmark   & \cmark & \cmark   & \cmark & \cmark & \cmark \\
% abstract*        &        & \cmark   & \cmark & \cmark   & \cmark & \cmark & \cmark \\
% keywords         &        & \cmark   & \cmark & \cmark   & \cmark & \cmark & \cmark \\
% keywords*        &        & \cmark   & \cmark & \cmark   & \cmark & \cmark & \cmark \\
% los              &        &          &        & \cmark   & \cmark & \cmark & \cmark \\
% loa              &        &          &        & \cmark   & \cmark & \cmark & \cmark \\
% bib-resource     & \cmark & \cmark   & \cmark & \cmark   & \cmark & \cmark & \cmark \\
% appendix         &        & \cmark   & \cmark & \cmark   & \cmark & \cmark & \cmark \\
% acknowledgements &        & \cmark   & \cmark & \cmark   & \cmark & \cmark & \cmark \\
% bio              &        &          &        & \cmark   & \cmark & \cmark & \cmark \\
% \end{tblr}
% \changes{v1.9.0.0}{2022/05/03}{增加研究生信息录入选项文档}
% \begin{function}[added=2022-05-02,updated=2022-05-03]{info/graduate-type}
%   \begin{syntax}
%     \opt{info/graduate-type} = (硕士)|博士
%   \end{syntax}
% 设置研究生类型。
% \end{function}
% \begin{optdesc}
%   \item[硕士] 硕士研究生。
%   \item[博士] 博士研究生。
% \end{optdesc}
% \begin{function}[added=2022-05-03]{info/degree-type}
%   \begin{syntax}
%     \opt{info/degree-type} = (学术)|专业
%   \end{syntax}
% 设置研究生学位类型。
% \end{function}
% \begin{optdesc}
%   \item[学术] 学术学位。
%   \item[专业] 专业学位。
% \end{optdesc}
% \begin{function}[added=2022-05-03]{info/degree,info/degree*}
%   \begin{syntax}
%     \opt{info/degree} = \meta{研究生学位类别中文名称}
%     \opt{info/degree*} = \meta{研究生学位类别英文名称}
%   \end{syntax}
% 设置研究生学位类别。
% \end{function}
% \begin{function}[added=2022-04-01,updated=2022-05-30]{info/title,info/title*}
%   \begin{syntax}
%     \opt{info/title} = \meta{论文中文标题}
%     \opt{info/title*} = \meta{论文英文标题}
%   \end{syntax}
% 设置论文标题。建议使用换行控制符（|\\|）手动制定换行位点，
% 本科毕业设计论文最多两行，研究生学位论文无限制。
% \end{function}
% \begin{function}[added=2022-04-01]{info/department}
%   \begin{syntax}
%     \opt{info/department} = \meta{院系名称}
%   \end{syntax}
% 设置院系名称。
% \end{function}
% \begin{function}[added=2022-04-01,updated=2022-05-03]{info/major,info/major*}
%   \begin{syntax}
%     \opt{info/major} = \meta{专业名称/一级学科名称}
%     \opt{info/major*} = \meta{一级学科英文名称}
%   \end{syntax}
% 设置专业名称/一级学科名称。
% \end{function}
% \begin{function}[added=2022-05-03]{info/sub-major}
%   \begin{syntax}
%     \opt{info/sub-major} = \meta{二级学科名称}
%   \end{syntax}
% 设置二级学科名称。
% \end{function}
% \begin{function}[added=2022-05-03]{info/domain}
%   \begin{syntax}
%     \opt{info/domain} = \meta{领域}
%   \end{syntax}
% 设置领域名称。
% \end{function}
% \begin{function}[added=2022-04-01,updated=2022-05-03]{info/author,info/author*}
%   \begin{syntax}
%     \opt{info/author} = \meta{作者姓名}
%     \opt{info/author*} = \meta{作者姓名拼音}
%   \end{syntax}
% 设置作者姓名。
% \end{function}
% \begin{function}[added=2022-04-01,updated=2022-05-03]{info/supervisor,info/supervisor*}
%   \begin{syntax}
%     \opt{info/supervisor} = \meta{导师姓名}
%     \opt{info/supervisor*} = \meta{导师姓名拼音}
%   \end{syntax}
% 设置导师姓名。
% \end{function}
% \changes{v5.0.0.0}{2023/02/17}{精简部分信息录入接口名称}
% \begin{function}[added=2022-04-01,updated=2023-02-17]{info/supv-dept}
%   \begin{syntax}
%     \opt{info/supv-dept} = \meta{院内导师姓名}
%   \end{syntax}
% 设置院内导师姓名。
% \end{function}
% \begin{function}[added=2022-04-01,updated=2023-02-17]{info/supv-ent,info/supv-ent*}
%   \begin{syntax}
%     \opt{info/supv-ent} = \meta{校外导师姓名}
%     \opt{info/supv-ent*} = \meta{校外导师姓名拼音}
%   \end{syntax}
% 设置校外导师姓名。
% \end{function}
% \begin{function}[added=2022-04-01,updated=2023-02-17]{info/supv-school}
%   \begin{syntax}
%     \opt{info/supv-school} = \meta{校内导师姓名}
%   \end{syntax}
% 设置校内导师姓名。
% \end{function}
% \begin{function}[added=2022-05-03,updated=2023-02-17]{info/supv-title,info/supv-title*}
%   \begin{syntax}
%     \opt{info/supv-title} = \meta{导师职称}
%     \opt{info/supv-title*} = \meta{导师职称英文名称}
%   \end{syntax}
% 设置导师职称。
% \end{function}
% \begin{function}[added=2022-05-03,updated=2023-02-17]{info/supv-ent-title,info/supv-ent-title*}
%   \begin{syntax}
%     \opt{info/supv-ent-title} = \meta{校外导师职称}
%     \opt{info/supv-ent-title*} = \meta{校外导师职称英文名称}
%   \end{syntax}
% 设置校外导师职称。
% \end{function}
% \begin{function}[added=2022-12-31]{info/class}
%   \begin{syntax}
%     \opt{info/class} = \meta{界}
%   \end{syntax}
% 设置界，即毕业年份。
% \end{function}
% \begin{function}[added=2022-04-01]{info/class-id}
%   \begin{syntax}
%     \opt{info/class-id} = \meta{作者班级号}
%   \end{syntax}
% 设置作者班级号。
% \end{function}
% \begin{function}[added=2022-04-01]{info/student-id}
%   \begin{syntax}
%     \opt{info/student-id} = \meta{作者学号}
%   \end{syntax}
% 设置作者学号。
% \end{function}
% \begin{function}[added=2022-05-03]{info/clc}
%   \begin{syntax}
%     \opt{info/clc} = \meta{中图分类号}
%   \end{syntax}
% 设置中图分类号。
% \end{function}
% \begin{function}[added=2022-05-03]{info/secret-level}
%   \begin{syntax}
%     \opt{info/secret-level} = 秘密|(公开)
%   \end{syntax}
% 设置密级。
% \end{function}
% \begin{function}[added=2022-05-30]{info/secret-year}
%   \begin{syntax}
%     \opt{info/secret-year} = \meta{保密年限}
%   \end{syntax}
% 设置保密年限，仅在\optx{secret-level}等于|秘密|时有效。
% \end{function}
% \changes{v1.17.0.1}{2022/05/29}{研究生学位论文提交日期格式}
% \begin{function}[added=2022-05-03,updated=2022-12-31]{info/submit-date}
%   \begin{syntax}
%     \opt{info/submit-date} = \meta{yyyy-mm}
%     \opt{info/submit-date} = \meta{yyyy-mm-dd}
%   \end{syntax}
% 设置提交日期，如果留空，则自动使用编译当天日期。
% \end{function}
% \changes{v2.1.0.0}{2022/06/22}{声明页扫描文件路径}
% \begin{function}[added=2022-06-22]{info/statement-scan}
%   \begin{syntax}
%     \opt{info/statement-scan} = \marg{学位论文独创性声明和关于论文使用授权的说明页扫描文件路径}
%   \end{syntax}
% 设置学位论文独创性声明和关于论文使用授权的说明页扫描文件路径。
% \end{function}
% \changes{v2.2.0.0}{2022/06/23}{声明页签名文件路径}
% \begin{function}[added=2022-06-23]{info/statement-sign}
%   \begin{syntax}
%     \opt{info/statement-sign} = \marg{文件路径1,文件路径2,文件路径3,文件路径4,文件路径5,文件路径6}
%   \end{syntax}
% 设置声明页签名文件路径。
% 文件支持格式与\tnx{includegraphics}一致，建议文件为透明背景且仅有黑色，并尽量减少边距。
% \end{function}
% \begin{optdesc}
%   \item[文件路径1] 学位论文独创性声明本人签名文件路径。
%   \item[文件路径2] 学位论文独创性声明日期文件路径。
%   \item[文件路径3] 关于论文使用授权的说明本人签名文件路径。
%   \item[文件路径4] 关于论文使用授权的说明日期文件路径。
%   \item[文件路径5] 关于论文使用授权的说明导师签名文件路径。
%   \item[文件路径6] 关于论文使用授权的说明日期文件路径。
% \end{optdesc}
% \begin{function}[added=2022-12-31]{info/sign}
%   \begin{syntax}
%     \opt{info/sign} = \marg{文件路径1,文件路径2}
%   \end{syntax}
% 设置开题报告签名文件路径。
% 文件支持格式与\tnx{includegraphics}一致，建议文件为透明背景且仅有黑色，并尽量减少边距。
% \end{function}
% \begin{optdesc}
%   \item[文件路径1] 指导教师意见签名文件路径。
%   \item[文件路径2] 学院审核意见签名文件路径。
% \end{optdesc}
% \begin{function}[added=2022-12-31]{info/date}
%   \begin{syntax}
%     \opt{info/date} = \marg{日期1,日期2}
%   \end{syntax}
% 设置开题报告签名日期，格式为\margx{yyyy-mm-dd}[]，如果留空，则自动使用编译当天日期。
% \end{function}
% \begin{optdesc}
%   \item[日期1] 指导教师意见签名日期。
%   \item[日期2] 学院审核意见签名日期。
% \end{optdesc}
% \begin{function}[added=2022-04-02]{info/abstract,info/abstract*}
%   \begin{syntax}
%     \opt{info/abstract} = \marg{中文摘要文件路径}
%     \opt{info/abstract*} = \marg{英文摘要文件路径}
%   \end{syntax}
% 设置摘要文件路径，相应文件内仅撰写摘要内容，无需任何环境。
% \end{function}
% \begin{function}[added=2022-04-02]{info/keywords,info/keywords*}
%   \begin{syntax}
%     \opt{info/keywords} = \marg{中文关键词}
%     \opt{info/keywords*} = \marg{英文关键词}
%   \end{syntax}
% 设置关键词，关键词之间需要使用英文半角逗号隔开。
% \end{function}
% \changes{v1.22.0.0}{2022/06/05}{符号对照表文件路径}
% \begin{function}[added=2022-06-05]{info/los}
%   \begin{syntax}
%     \opt{info/los} = \marg{符号对照表文件路径}
%   \end{syntax}
% 设置符号对照表文件路径。
% \end{function}
% \changes{v1.22.0.0}{2022/06/05}{缩略语对照表文件路径}
% \begin{function}[added=2022-06-05]{info/loa}
%   \begin{syntax}
%     \opt{info/loa} = \marg{缩略语对照表文件路径}
%   \end{syntax}
% 设置缩略语对照表文件路径。
% \end{function}
% \changes{v2.0.0.0}{2022/06/21}{修改参考文献文件路径选项名称}
% \begin{function}[added=2022-06-21]{info/bib-resource}
%   \begin{syntax}
%     \opt{info/bib-resource} = \marg{参考文献文件路径}
%   \end{syntax}
% 设置参考文献\filex{.bib}文件路径，多个文件之间需要使用英文半角逗号隔开。
% \end{function}
% \changes{v4.0.0.0}{2022/12/11}{增加附录文件接口}
% \begin{function}[added=2022-12-11]{info/appendix}
%   \begin{syntax}
%     \opt{info/appendix} = \marg{附录文件路径}
%   \end{syntax}
% 设置附录文件路径，多个文件之间需要使用英文半角逗号隔开。
% \end{function}
% \begin{function}[added=2022-04-02]{info/acknowledgements}
%   \begin{syntax}
%     \opt{info/acknowledgements} = \marg{致谢文件路径}
%   \end{syntax}
% 设置致谢文件路径，相应文件内仅撰写致谢内容，无需任何环境。
% \end{function}
% \begin{function}[added=2022-06-07]{info/bio}
%   \begin{syntax}
%     \opt{info/bio} = \marg{作者简介路径}
%   \end{syntax}
% 设置作者简介文件路径，文件内容可参考\secrefx{作者简介配置}中的示例。
% \end{function}
% \changes{v6.1.4.1}{2023/03/14}{更新研究生信息推荐值}
% \changes{v2.18.1.0}{2022/12/01}{增加专业博士信息录入推荐值来源}
% \changes{v2.12.2.1}{2022/11/20}{调整研究生信息推荐值展示样式}
% \changes{v1.26.11.2}{2022/06/18}{研究生信息推荐值}
% \subsubsection{研究生信息推荐值}
% \label{研究生信息推荐值}
% 以下研究生信息推荐值均来自
% 《西安电子科技大学研究生学位论文模板（2015年修订版）-2022.11修订》、
% 《西安电子科技大学专业学位硕士学位论文封面及中英文题名页模板（2015年版）-2022.11修订》和
% 《西安电子科技大学专业学位博士学位论文封面及中英文题名页模板-2022.11》，
% 无任何修改，仅供参考。
% \setlength\parindent{0pt}
% \begin{itemize}
% \item \optx{degree} (学术硕士、学术博士)
% \par
% 工学硕士、
% 工学博士、
% 哲学硕士、
% 经济学硕士、
% 法学硕士、
% 教育学硕士、
% 文学硕士、
% 理学硕士、
% 理学博士、
% 军事学硕士、
% 军事学博士、
% 管理学硕士、
% 管理学博士
% \item \optx{degree} (专业硕士)
% \par
% 金融硕士、
% 应用统计硕士、
% 翻译硕士、
% 电子信息硕士、
% 机械硕士、
% 材料与化工硕士、
% 工商管理硕士、
% 公共管理硕士、
% 图书情报硕士、
% 工程管理硕士、
% 工程硕士
% \item \optx{degree} (专业博士)
% \par
% 电子信息博士、
% 机械博士、
% 工程博士
% \item \optx{degree*} (专业硕士)
% \par
% Finance、
% Applied Statistics、
% Translation、
% Electronic Information、
% Machinery、
% Material and Chemistry、
% Business Administration、
% Public Administration、
% Engineering Administration、
% Engineering
% \item \optx{degree*} (专业博士)
% \par
% Electronic Information、
% Machinery、
% Engineering
% \item \optx{department}
% \par
% 通信工程学院、
% 电子工程学院、
% 计算机科学与技术学院、
% 机电工程学院、
% 光电工程学院、
% 物理学院、
% 经济与管理学院、
% 数学与统计学院、
% 人文学院、
% 外国语学院、
% 微电子学院、
% 生命科学技术学院、
% 空间科学与技术学院、
% 先进材料与纳米科技学院、
% 网络与信息安全学院、
% 马克思主义学院、
% 人工智能学院、
% 集成电路研究院
% \item \optx{major}
% \par
% 哲学、
% 应用经济学、
% 马克思主义理论、
% 体育学、
% 外国语言文学、
% 数学、
% 物理学、
% 统计学、
% 力学、
% 机械工程、
% 光学工程、
% 仪器科学与技术、
% 材料科学与工程、
% 电气工程、
% 电子科学与技术、
% 信息与通信工程、
% 控制科学与工程、
% 计算机科学与技术、
% 交通运输工程、
% 生物医学工程、
% 软件工程、
% 网络空间安全、
% 军队指挥学、
% 管理科学与工程、
% 工商管理、
% 图书情报与档案管理、
% 集成电路科学与工程
% \item \optx{major*}
% \par
% Philosophy、
% Applied Economics、
% Marxist Theory、
% Sports Science、
% Foreign Languages and Literature、
% Mathematics、
% Physics、
% Statistics、
% Mechanics、
% Mechanical Engineering、
% Optical Engineering、
% Instrument Science and Technology、
% Materials Science and Engineering、
% Electrical Engineering、
% Electronics Science and Technology、
% Information and Communications Engineering、
% Control Science and Engineering、
% Computer Science and Technology、
% Communication and Transportation Engineering、
% Biomedical Engineering、
% Software Engineering、
% Cyber Security、
% Military Command Science、
% Management Science and Engineering、
% Business Administration、
% Science of Library, Information and Archival
% \item \optx{sub-major}
% \par
% 美学、
% 宗教学、
% 国民经济学、
% 金融学、
% 产业经济学、
% 马克思主义基本原理、
% 思想政治教育、
% 体育教育训练学、
% 英语语言文学、
% 外国语言学及应用语言学、
% 计算数学、
% 概率论与数理统计、
% 应用数学、
% 运筹学与控制论、
% 等离子体物理、
% 凝聚态物理、
% 光学、
% 无线电物理、
% 统计学、
% 工程力学、
% 机械制造及其自动化、
% 机械电子工程、
% 机械设计及理论、
% 电子机械科学与技术、
% 工业设计、
% 光学工程、
% 精密仪器及机械、
% 测试计量技术及仪器、
% 材料物理与化学、
% 材料学、
% 电机与电器、
% 电力电子与电力传动、
% 物理电子学、
% 电路与系统、
% 微电子学与固体电子学、
% 电磁场与微波技术、
% 信息对抗技术、
% 集成电路系统设计、
% 通信与信息系统、
% 信号与信息处理、
% 智能信息处理、
% 空间信息科学与技术、
% 控制理论与控制工程、
% 检测技术与自动化装置、
% 系统工程、
% 模式识别与智能系统、
% 导航、制导与控制、
% 计算机系统结构、
% 计算机软件与理论、
% 计算机应用技术、
% 交通信息工程及控制、
% 生物医学工程、
% 生物材料与细胞工程、
% 软件工程、
% 软件工程技术、
% 军事通信学、
% 密码学、
% 管理科学与工程、
% 管理哲学、
% 会计学、
% 企业管理、
% 技术经济及管理、
% 图书馆学、
% 情报学、
% 光通信、
% 信息安全、
% 生物信息科学与技术、
% 机器人技术、
% 遥感信息科学与技术、
% 空间科学与技术、
% 马克思主义中国化研究、
% 外国文学、
% 翻译学、
% 基础数学、
% 流体力学、
% 固体力学、
% 智能机电系统及测控技术、
% 空间科学仪器与电磁实验技术、
% 飞行器测控与导航制导、
% 智能检测与新型传感器
% \item \optx{domain} (专业硕士)
% \par
% 金融、
% 应用统计、
% 英语笔译、
% 新一代电子信息技术（含量子技术等）、
% 通信工程（含宽带网络、移动通信等）、
% 集成电路工程、
% 计算机技术、
% 软件工程、
% 控制工程、
% 仪器仪表工程、
% 光电信息工程、
% 生物医学工程、
% 人工智能、
% 网络与信息安全、
% 机械、
% 材料与化工、
% 工商管理、
% 公共管理、
% 图书情报、
% 工程管理、
% 物流工程与管理、
% 机械工程、
% 光学工程、
% 材料工程、
% 电子与通信工程、
% 航天工程、
% 项目管理、
% 物流工程
% \item \optx{domain} (专业博士)
% \par
% 电子与信息、
% 先进制造、
% 电子信息、
% 机械
% \item \optx{supv-title}
% \par
% 教授、
% 副教授
% \item \optx{supv-title*}
% \par
% Professor、
% Associate Professor
% \item \optx{supv-ent-title}
% \par
% 研究员、
% 副研究员、
% 高工
% \item \optx{supv-ent-title*}
% \par
% Research Fellow、
% Associate Research Fellow、
% Senior Engineer
% \end{itemize}
% \setlength\parindent{2em}
% \subsection{页面和信息移除}
% \label{页面和信息移除}
% \changes{v6.1.1.1}{2023/03/06}{修正文档中页面移除值样式}
% \changes{v6.0.0.0}{2023/03/02}{修正题名页键值}
% \changes{v2.12.1.0}{2022/07/03}{页面和信息移除选项增加分组}
% \begin{function}[added=2022-06-26,updated=2023-03-02]{style/remove-page}
%   \begin{syntax}
%     \opt{style/remove-page} = \texttt{\char`\{}封面|题名页|声明页|摘要|索引|对照表|目录|附录|参考文献|致谢|作者简介\texttt{\char`\}}
%   \end{syntax}
% 设置移除的页面，可多选，多个值之间需要使用英文半角逗号隔开，例如：
% \begin{lstlisting}
% \xdusetup{ style / remove-page = { 封面, 题名页, 致谢 } }
% \end{lstlisting}
% \end{function}
% \begin{optdesc}
%   \item[题名页] 中英文题名页。
%   \item[摘要] 中英文摘要。
%   \item[索引] 图片索引和表格索引。
%   \item[对照表] 符号对照表和缩略语对照表。
% \end{optdesc}
% \begin{function}[added=2022-06-26]{style/remove-header}
%   \begin{syntax}
%     \opt{style/remove-header} = true|(false)
%   \end{syntax}
% 设置是否移除页眉。
% \end{function}
% \begin{function}[added=2022-06-26]{style/remove-footer}
%   \begin{syntax}
%     \opt{style/remove-footer} = true|(false)
%   \end{syntax}
% 设置是否移除页脚。
% \end{function}
% \begin{function}[added=2022-06-26]{style/anonymous}
%   \begin{syntax}
%     \opt{anonymous} = true|(false)
%   \end{syntax}
% 设置是否开启匿名，与\secrefx{额外命令}中的\tnx{anon}搭配使用。
% \end{function}
% \subsection{额外命令}
% \label{额外命令}
% \subsubsection{\tn{noauxwrite}}
% \label{noauxwrite}
% \begin{function}[added=2022-05-13]{\noauxwrite}
%   \begin{syntax}
%     \tn{noauxwrite}\marg{参考文献引用命令}
%   \end{syntax}
% \tnx[]{noauxwrite}允许添加不影响现有引用列表顺序的引用。
% 一个简单的例子如下所示：
% \begin{lstlisting}
% \caption{本文与文献\noauxwrite{\parencite{某文献}}计算开销对比}
% \end{lstlisting}
% \end{function}
% \changes{v1.30.0.0}{2022/06/20}{英文研究生学位论文标题}
% \subsubsection{英文研究生学位论文标题}
% \label{英文研究生学位论文标题}
% \begin{function}[added=2022-06-20,updated=2023-01-28]{\chapter,\section,\subsection}
%   \begin{syntax}
%     \tn{chapter}\marg{英文标题}\oarg{中文标题}
%     \tn{section}\marg{英文标题}\oarg{中文标题}
%     \tn{subsection}\marg{英文标题}\oarg{中文标题}
%   \end{syntax}
% 在英文研究生学位论文中一二三级标题为中英双语，其他级别标题为英文。
% 一个简单的例子如下所示：
% \begin{lstlisting}
% \chapter{This Is Chapter}[这是一级标题]
% \section{This Is Section}[这是二级标题]
% \subsection{This Is Subsection}[这是三级标题]
% \subsubsection{This Is Subsubsection}
% \paragraph{This Is Paragraph}
% \subparagraph{This Is Subparagraph}
% \end{lstlisting}
% \end{function}
% \subsubsection{匿名命令}
% \label{匿名命令}
% \begin{function}[added=2022-06-26]{\anon}
%   \begin{syntax}
%     \tn{anon}\oarg{匿名内容}\marg{非匿名内容}
%   \end{syntax}
% 根据\optx{style/anonymous}的状态来显示相应的\metax{匿名内容}和\metax{非匿名内容}[]。
% 其中\oargx{匿名内容}为可选参数，默认为XXX。
% 一个简单的例子如下所示：
% \begin{lstlisting}
% \anon[XX]{张三}
% \end{lstlisting}
% 当\optx{style/anonymous}为\valuex{true}[]，输出XX；当\optx{style/anonymous}为\valuex{false}[]，输出张三。
% \end{function}
% \subsection{额外功能}
% \label{额外功能}
% \changes{v1.26.11.1}{2022/06/17}{带教导师与挂名导师}
% \subsubsection{带教导师与挂名导师}
% 已和学位办确认，对于研究生，如挂名导师与带教导师不是一人的，
% 仅需填写带教导师，无需填写挂名导师。
% 如有特殊需求，需要填写两位老师，
% 可在\optx{info/supervisor}[]、\optx[]{info/supervisor*}[]、^^A
% \optx[]{info/supv-title}和\optx{info/supv-title*}中
% 使用逗号分隔两位老师的信息。
% \changes{v2.10.1.1}{2022/06/26}{相似性检测、盲审和抽查评估}
% \subsubsection{相似性检测、盲审和抽查评估}
% 对于相似性检测、盲审和抽查评估，主要分为两种操作，
% 一种是页面移除，另外一种是信息的隐藏和替换。
% 页面移除请参考\secrefx{页面和信息移除}，
% 信息隐藏请自行删除或注释相应的信息录入选项，
% 信息替换请自行修改相应的信息录入选项；
% 作者简介部分的信息匿名请参考\secrefx{匿名命令}。
% 用户根据学校和学院的具体要求，
% 组合使用以上两种操作来生成符合相似性检测、盲审和抽查评估要求的论文。
% \changes{v2.14.0.0}{2022/11/21}{隐藏部分索引和对照表}
% \subsubsection{隐藏部分索引和对照表}
% 由于存在插图索引、表格索引、符号对照表或缩略语对照表为空的情况，
% 故支持隐藏插图索引、表格索引、符号对照表或缩略语对照表，例如：
% \begin{lstlisting}
% \xdusetup{ style / remove-page = { 插图索引, 符号对照表 } }
% \end{lstlisting}
% \section{贡献者}
% \xduts[]{}的开发过程中，唯一维护者为
% \href{https://github.com/note286/}{\ttfamily @note286}。
% \changes{v1.15.0.1}{2022/05/15}{增加\clsx{xduugthesis}内测人员}
% 其中，在\clsx{xduugthesis}的开发过程中，^^A
% \href{https://github.com/Ke-Huo}{\ttfamily @Ke-Huo}、^^A
% \href{https://github.com/GRHun}{\ttfamily @RH}、^^A
% \href{https://github.com/songyueran}{\ttfamily @syr-bloom}
% 等人参与了内测。
% \changes{v6.1.0.1}{2023/03/04}{增加赞助致谢}
% \changes{v4.4.5.3}{2023/02/11}{增加致谢参考链接}
% \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}
% 提供了很大帮助。
% 在文档的编写过程中，参考了^^A
% \filex{ctex.dtx}[]\footurl{https://github.com/CTeX-org/ctex-kit/blob/master/ctex/ctex.dtx}、^^A
% \filex[]{fduthesis.dtx}[]\footurl{https://github.com/stone-zeng/fduthesis/blob/main/source/fduthesis.dtx}、^^A
% \filex[]{njuthesis.dtx}[]\footurl{https://github.com/nju-lug/NJUThesis/blob/master/source/njuthesis.dtx}\space{}和^^A
% \filex{thuthesis.dtx}[]\footurl{https://github.com/tuna/thuthesis/blob/master/thuthesis.dtx}。
% \par
% 同时，非常感谢赞助\xduts{}的同学们，你们的赞助让我有持续维护的动力。^^A
% 也感谢所有在GitHub和睿思上反馈问题和提出建议的同学、老师们，^^A
% \xduts[]{}的持续发展，离不开你们的帮助与支持。
% \changes{v4.0.1.1}{2022/12/12}{增加支付宝红包二维码}
% \changes{v3.1.1.3}{2022/12/10}{二维码增加图标}
% \changes{v3.1.1.2}{2022/12/06}{增加QQ支付二维码}
% \changes{v2.16.1.2}{2022/11/27}{修正文档中图片引用间距}
% \changes{v2.15.0.1}{2022/11/26}{增加赞助二维码}
% \section{赞助}
% 如果\xduts{}对你有所帮助，
% 可以扫描\figrefx{fig:zanzhu}中的二维码来赞助\xduts{}[]，
% 并备注\xduts{}或其他相关字样以便于确认款项来源。
% \ExplSyntaxOn
% \str_set_convert:Nnnn \l_xduts_alipay_red_packet_qr_str {%
% 68747470733A2F2F71722E616C697061792E636F6D2F31317731333035336232617236757438%
% 71386C6A323062} { utf8/hex } { }
% \newcommand{\alipayredpacketqr}{\str_use:N \l_xduts_alipay_red_packet_qr_str}
% \str_set_convert:Nnnn \l_xduts_alipay_qr_str {%
% 68747470733A2F2F71722E616C697061792E636F6D2F666B7831353935393164716575747463%
% 77626175726235} { utf8/hex } { }
% \newcommand{\alipayqr}{\str_use:N \l_xduts_alipay_qr_str}
% \str_set_convert:Nnnn \l_xduts_wxp_qr_str {%
% 7778703A2F2F6632663074504D4D506D3161616467483665396162527030446E317746337344%
% 6C6468764350382D66765346424577} { utf8/hex } { }
% \newcommand{\wxpqr}{\str_use:N \l_xduts_wxp_qr_str}
% \str_set_convert:Nnnn \l_xduts_qq_qr_str {%
% 68747470733A2F2F692E7169616E62616F2E71712E636F6D2F77616C6C65742F737172636F64%
% 652E68746D3F6D3D74656E70617926613D3126753D313138333133313434372661633D434145%
% 517438365574415159343457366E415934414549675A4755775A6D51314D6A55784E3249354E%
% 32566A4D4455794E445A684D32457A4D6A45325A6A55314E7A512533445F7878785F7369676E%
% 266E3D4361726F6C26663D77616C6C6574 } { utf8/hex } { }
% \newcommand{\qqqr}{\str_use:N \l_xduts_qq_qr_str}
% \ExplSyntaxOff
% \definecolor{alipayredpacketc}{RGB}{198,48,56}
% \definecolor{alipayc}{RGB}{22,120,255}
% \definecolor{weixinc}{RGB}{7,193,96}
% \definecolor{qqc}{RGB}{18,184,246}
% \NewDocumentCommand{\qrcodex}{mmm}{
% \begin{tikzpicture}
% \node at (0,0) {\textcolor{#3!30}{\qrcode[height=.21\textwidth]{#1}}};
% \node at (current bounding box.center) {\textcolor{#3}{\scalebox{2.1}{\faIcon{#2}}}};
% \end{tikzpicture}
% }
% \begin{figure}[htbp]
% \centering
% \mbox{}\hfill
% \subcaptionbox{扫码领红包}{\qrcodex{\alipayredpacketqr}{alipay}{alipayredpacketc}}\hfill
% \subcaptionbox{支付宝}{\qrcodex{\alipayqr}{alipay}{alipayc}}\hfill
% \subcaptionbox{微信支付}{\qrcodex{\wxpqr}{weixin}{weixinc}}\hfill
% \subcaptionbox{QQ支付}{\qrcodex{\qqqr}{qq}{qqc}}
% \hfill\mbox{}
% \caption{赞助二维码}
% \label{fig:zanzhu}
% \end{figure}
% \clearpage
% \end{documentation}
% \StopEventually{}
% \begin{implementation}
% \addtocontents{toc}{\protect\value{tocdepth}=5}
% \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}
% \changes{v5.5.0.0}{2023/03/01}{抑制\pkgx{fontspec}对数学字体的修改}
% \begin{macro}{\PassOptionsToPackage}
% 抑制\pkgx{fontspec}对数学字体的修改。
%    \begin{macrocode}
\PassOptionsToPackage { no-math } { fontspec }
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\PassOptionsToPackage}
% 忽略字体警告。
%    \begin{macrocode}
\PassOptionsToPackage { quiet } { xeCJK }
%    \end{macrocode}
% \end{macro}
%    \begin{macrocode}
%</class|sty>
%<*class>
%    \end{macrocode}
% \begin{macro}{\PassOptionsToClass,\LoadClass}
% \changes{v0.3.2.0}{2022/04/04}{修正行间距为1.5倍}
% \changes{v1.8.1.0}{2022/05/03}{修正页面尺寸}
% \changes{v1.9.2.0}{2022/05/04}{修正行间距为1.625倍}
% 加载\clsx{ctexbook}或\clsx{ctexart}文档类。
% \\
% \LaTeX{}中基本行距是字号大小的1.2倍，Microsoft Word中基本行距是字号大小的1.3倍，
% Microsoft Word中1.5倍行距，相当于LaTeX中$1.5\times\frac{1.3}{1.2}=1.625$倍行距。
%    \begin{macrocode}
\PassOptionsToClass
  {
    a4paper,
    zihao=-4,
    sub4section,
%<xduugthesis>    linespread = 1.625,
    fontset    = none
  }
%<thesis>  { ctexbook }
%<tp>  { ctexart }
%<thesis>\LoadClass { ctexbook }
%<tp>\LoadClass { ctexart }
%    \end{macrocode}
% \end{macro}
% 设置纸张尺寸为A4。
%    \begin{macrocode}
\RequirePackage { geometry        }
\geometry       { paper = a4paper }
%    \end{macrocode}
%    \begin{macrocode}
%</class>
%<*thesis>
%    \end{macrocode}
%    \begin{macrocode}
\RequirePackage { fancyhdr        }
\RequirePackage { xeCJKfntef      }
\RequirePackage { graphicx        }
%    \end{macrocode}
%    \begin{macrocode}
%</thesis>
%<*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_tl,
%     \l_@@_fake_slant_tl,
%     \l_@@_latin_font_tl,
%     \l_@@_latin_sans_scale_tl,
%     \l_@@_latin_mono_scale_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}
% \changes{v0.8.2.0}{2022/04/12}{修复LaTeX3新接口导致的Overleaf无法编译}
% 中文字体伪粗体粗细程度。
%    \begin{macrocode}
\tl_new:N \l_@@_fake_bold_tl
%    \end{macrocode}
% 中文字体伪斜体倾斜程度。
%    \begin{macrocode}
\tl_new:N \l_@@_fake_slant_tl
%    \end{macrocode}
% 英文字体配置名称。
%    \begin{macrocode}
\tl_new:N \l_@@_latin_font_tl
%    \end{macrocode}
% 匹配无衬线族和打字机族字符高度。
%    \begin{macrocode}
\tl_new:N \l_@@_latin_sans_scale_tl
\tl_new:N \l_@@_latin_mono_scale_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, hanyi, sinotype, fandol, none }
      { \tl_set_eq:NN \l_@@_cjk_font_tl \l_keys_choice_tl },
%    \end{macrocode}
% 中文字体伪粗体粗细程度。
%    \begin{macrocode}
    cjk-fake-bold .tl_set:N = \l_@@_fake_bold_tl,
%    \end{macrocode}
% 中文字体伪斜体倾斜程度。
%    \begin{macrocode}
    cjk-fake-slant .tl_set:N = \l_@@_fake_slant_tl,
%    \end{macrocode}
% 匹配无衬线族和打字机族字符高度。
%    \begin{macrocode}
    latin-sans-scale .choices:nn = { upper, lower, off }
      { \tl_set_eq:NN \l_@@_latin_sans_scale_tl \l_keys_choice_tl },
    latin-mono-scale .choices:nn = { upper, lower, off }
      { \tl_set_eq:NN \l_@@_latin_mono_scale_tl \l_keys_choice_tl },
%    \end{macrocode}
% 英文字体配置。
%    \begin{macrocode}
    latin-font .choices:nn = { gyre, tac, tacn, tcc, thcs, tll, none }
      { \tl_set_eq:NN \l_@@_latin_font_tl \l_keys_choice_tl },
%    \end{macrocode}
% 数学字体配置。
%    \begin{macrocode}
    math-font .choices:nn =
      {
        asana, bonum, cambria, cm, concrete, dejavu, erewhon, euler,
        fira, garamond, gfsneohellenic, kp, libertinus, lm, newcm,
        pagella, schola, stix, stix2, termes, xcharter, 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}
% \changes{v0.9.1.0}{2022/04/13}{修改中英文字体默认配置}
% 初始设置。
%    \begin{macrocode}
\keys_set:nn { xdu }
  {
    style / cjk-font         = fandol,
    style / cjk-fake-bold    = 3,
    style / cjk-fake-slant   = 0.2,
    style / latin-font       = gyre,
    style / latin-sans-scale = off,
    style / latin-mono-scale = off,
    style / math-font        = cm,
    style / unicode-math     = { },
    style / font-type        = font,
    style / font-path        = fonts
  }
%    \end{macrocode}
% \end{macro}
% \changes{v0.5.1.0}{2022/04/06}{判断操作系统是否是macOS}
% \changes{v0.5.1.0}{2022/04/06}{加载字体时自动判断是否为macOS平台}
% \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_tl }
  }
%    \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_tl }
  }
%    \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_tl,
        FakeSlant = \l_@@_fake_slant_tl
      }
  }
%    \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_tl }
  }
%    \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_tl }
  }
%    \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_tl }
  }
%    \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_tl,
        FakeSlant = \l_@@_fake_slant_tl
      }
  }
%    \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}
% \changes{v5.1.0.0}{2023/02/20}{增加汉仪字体}
% \begin{macro}{\@@_load_cjk_font_hanyi:}
% 中文字体配置\valuex{hanyi}[]。
%    \begin{macrocode}
\cs_new:Npn \@@_load_cjk_font_hanyi:
  {
    \@@_set_cjk_main_font:nn
      { \@@_select_font:nn { HYShuSongErS } { HYShuSongErS.ttf  } }
      { \@@_select_font:nn { HYKaiTiS     } { HYKaiTiS.ttf      } }
    \@@_set_cjk_sans_font:n
      { \@@_select_font:nn { HYZhongHei   } { HYZhongHeiTiS.ttf } }
    \@@_set_cjk_mono_font:n
      { \@@_select_font:nn { HYFangSongS  } { HYFangSongS.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
  {
    BoldFont        = { #1 },
    SlantedFont     = { #2 },
    BoldSlantedFont = { #3 },
    ItalicFont      = { #2 },
    BoldItalicFont  = { #3 }
  }
%    \end{macrocode}
% \end{macro}
% \changes{v6.1.2.0}{2023/03/07}{修正匹配打字机族字符高度}
% \changes{v4.3.0.0}{2023/01/28}{匹配无衬线族和打字机族字符高度}
% \changes{v0.8.3.0}{2022/04/13}{匹配小写字母字符高度}
% \begin{macro}{\@@_set_latin_sans_scale:,\@@_set_latin_mono_scale:}
% 匹配无衬线族和打字机族字符高度。
%    \begin{macrocode}
\cs_new:Npn \@@_set_latin_sans_scale: { }
\cs_new:Npn \@@_set_latin_mono_scale: { }
\ctex_at_end_preamble:n
  {
    \tl_if_eq:NnTF \l_@@_latin_sans_scale_tl { upper }
      { \cs_set:Npn \@@_set_latin_sans_scale: { Scale = MatchUppercase , } }
      {
        \tl_if_eq:NnT \l_@@_latin_sans_scale_tl { lower }
          { \cs_set:Npn \@@_set_latin_sans_scale: { Scale = MatchLowercase , } }
      }
    \tl_if_eq:NnTF \l_@@_latin_mono_scale_tl { upper }
      { \cs_set:Npn \@@_set_latin_mono_scale: { Scale = MatchUppercase , } }
      {
        \tl_if_eq:NnT \l_@@_latin_mono_scale_tl { lower }
          { \cs_set:Npn \@@_set_latin_mono_scale: { Scale = MatchLowercase , } }
      }
  }
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\@@_off_latin_ligatures:}
% \changes{v0.8.3.0}{2022/04/13}{关闭连字}
% 关闭连字。
%    \begin{macrocode}
\cs_new:Npn \@@_off_latin_ligatures:
  { Ligatures = CommonOff , }
%    \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 }
          [
            \@@_font_path:
            \@@_set_latin_font:nnn { #3 } { #4 } { #5 }
          ]
      }
  }
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\@@_set_latin_sans_font:nnnnn}
% \changes{v0.8.3.0}{2022/04/13}{修正英文无衬线族字体字符高度}
% 配置英文无衬线族字体，参数分别为字体名称、字体文件名称（常规、粗体、意大利体、粗意大利体）。
% \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 } [ \@@_set_latin_sans_scale: ] }
      {
        \setsansfont { #2 }
          [
            \@@_font_path:
            \@@_set_latin_sans_scale:
            \@@_set_latin_font:nnn { #3 } { #4 } { #5 }
          ]
      }
  }
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\@@_set_latin_mono_font:nnnnn}
% \changes{v0.8.3.0}{2022/04/13}{修正英文等宽族字体字符高度并取消连字}
% 配置英文等宽族字体，参数分别为字体名称、字体文件名称（常规、粗体、意大利体、粗意大利体）。
% \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 } [ \@@_set_latin_mono_scale: \@@_off_latin_ligatures: ] }
      {
        \setmonofont { #2 }
          [
            \@@_font_path:
            \@@_set_latin_mono_scale:
            \@@_off_latin_ligatures:
            \@@_set_latin_font:nnn { #3 } { #4 } { #5 }
          ]
      }
  }
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\@@_set_latin_main_font:nnnn}
% \changes{v0.9.0.0}{2022/04/13}{配置TeX Live内置英文罗马族字体}
% 配置英文罗马族字体，参数分别为字体文件名称（常规、粗体、意大利体、粗意大利体）。
% \begin{arguments}
%   \item 常规字体名称。
%   \item 粗体字体名称。
%   \item 意大利体字体名称。
%   \item 粗意大利体字体名称。
% \end{arguments}
%    \begin{macrocode}
\cs_new:Npn \@@_set_latin_main_font:nnnn #1#2#3#4
  {
    \setmainfont { #1 }
      [
        \@@_set_latin_font:nnn { #2 } { #3 } { #4 }
      ]
  }
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\@@_set_latin_sans_font:nnnn}
% \changes{v0.9.0.0}{2022/04/13}{配置TeX Live内置英文无衬线族字体}
% 配置英文无衬线族字体，参数分别为字体文件名称（常规、粗体、意大利体、粗意大利体）。
% \begin{arguments}
%   \item 常规字体名称。
%   \item 粗体字体名称。
%   \item 意大利体字体名称。
%   \item 粗意大利体字体名称。
% \end{arguments}
%    \begin{macrocode}
\cs_new:Npn \@@_set_latin_sans_font:nnnn #1#2#3#4
  {
    \setsansfont { #1 }
      [
        \@@_set_latin_sans_scale:
        \@@_set_latin_font:nnn { #2 } { #3 } { #4 }
      ]
  }
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\@@_set_latin_mono_font:nnnn}
% \changes{v0.9.0.0}{2022/04/13}{配置TeX Live内置英文等宽族字体}
% 配置英文等宽族字体，参数分别为字体文件名称（常规、粗体、意大利体、粗意大利体）。
% \begin{arguments}
%   \item 常规字体名称。
%   \item 粗体字体名称。
%   \item 意大利体字体名称。
%   \item 粗意大利体字体名称。
% \end{arguments}
%    \begin{macrocode}
\cs_new:Npn \@@_set_latin_mono_font:nnnn #1#2#3#4
  {
    \setmonofont { #1 }
      [
        \@@_set_latin_mono_scale:
        \@@_off_latin_ligatures:
        \@@_set_latin_font:nnn { #2 } { #3 } { #4 }
      ]
  }
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\@@_load_latin_font_tac:}
% \changes{v1.12.0.0}{2022/05/06}{增加Arial和Consolas英文字体配置}
% 英文字体配置\valuex{tac}[]。
%    \begin{macrocode}
\cs_new:Npn \@@_load_latin_font_tac:
  {
    \@@_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
      { Consolas        } { consola.ttf } { consolab.ttf } { consolai.ttf } { consolaz.ttf }
  }
%    \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_tcc:}
% \changes{v5.3.0.0}{2023/02/23}{增加tcc系列英文字体配置}
% 英文字体配置\valuex{tcc}[]。
%    \begin{macrocode}
\cs_new:Npn \@@_load_latin_font_tcc:
  {
    \@@_set_latin_main_font:nnnnn
      { Times~New~Roman }
      { times.ttf       }
      { timesbd.ttf     }
      { timesi.ttf      }
      { timesbi.ttf     }
    \@@_set_latin_sans_font:nnnn
      { cmunss.otf      }
      { cmunsx.otf      }
      { cmunsi.otf      }
      { cmunso.otf      }
    \@@_set_latin_mono_font:nnnn
      { cmuntt.otf      }
      { cmuntb.otf      }
      { cmunit.otf      }
      { cmuntx.otf      }
  }
%    \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_tll:}
% \changes{v5.3.0.0}{2023/02/23}{增加tll系列英文字体配置}
% 英文字体配置\valuex{tll}[]。
%    \begin{macrocode}
\cs_new:Npn \@@_load_latin_font_tll:
  {
    \@@_set_latin_main_font:nnnnn
      { Times~New~Roman      }
      { times.ttf            }
      { timesbd.ttf          }
      { timesi.ttf           }
      { timesbi.ttf          }
    \@@_set_latin_sans_font:nnnn
      { LinBiolinum_R.otf    }
      { LinBiolinum_RB.otf   }
      { LinBiolinum_RI.otf   }
      { LinBiolinum_RBO.otf  }
    \@@_set_latin_mono_font:nnnn
      { LinLibertine_M.otf   }
      { LinLibertine_MB.otf  }
      { LinLibertine_MO.otf  }
      { LinLibertine_MBO.otf }
  }
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\@@_load_latin_font_gyre:}
% \changes{v0.9.0.0}{2022/04/13}{增加gyre系列英文字体配置}
% 英文字体配置\valuex{gyre}[]。
%    \begin{macrocode}
\cs_new:Npn \@@_load_latin_font_gyre:
  {
    \@@_set_latin_main_font:nnnn
      { texgyretermes-regular.otf    }
      { texgyretermes-bold.otf       }
      { texgyretermes-italic.otf     }
      { texgyretermes-bolditalic.otf }
    \@@_set_latin_sans_font:nnnn
      { texgyreheros-regular.otf     }
      { texgyreheros-bold.otf        }
      { texgyreheros-italic.otf      }
      { texgyreheros-bolditalic.otf  }
    \@@_set_latin_mono_font:nnnn
      { texgyrecursor-regular.otf    }
      { texgyrecursor-bold.otf       }
      { texgyrecursor-italic.otf     }
      { texgyrecursor-bolditalic.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{数学字体}
% \changes{v6.1.1.0}{2023/03/06}{修复\pkgx{unicode-math}下书签中公式}
% \changes{v5.6.0.0}{2023/03/01}{设置\pkgx{unicode-math}下算符字体为数学字体}
% \changes{v1.14.1.0}{2022/05/10}{使用\tnx{PassOptionsToPackage}传递\pkgx{unicode-math}宏包参数}
% \begin{macro}{\@@_load_unicode_math_pkg:}
% 加载\pkgx{unicode-math}宏包并设置算符字体为数学字体。
%    \begin{macrocode}
\cs_new:Npn \@@_load_unicode_math_pkg:
  {
    \PassOptionsToPackage { \l_@@_unicode_math_tl } { unicode-math }
    \RequirePackage  { unicode-math }
    \setoperatorfont { \symup       }
    \hypersetup      { psdextra     }
  }
%    \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{v2.16.1.0}{2022/11/27}{修改XITS Math数学字体调用方式}
% \changes{v2.16.0.0}{2022/11/27}{增加若干数学字体}
% \changes{v2.15.0.0}{2022/11/26}{增加New Computer Modern Math数学字体}
% \changes{v2.13.0.0}{2022/11/21}{增加Erewhon Math数学字体}
% \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             },
    { concrete       } { Concrete-Math.otf          },
    { erewhon        } { Erewhon-Math.otf           },
    { euler          } { Euler-Math.otf             },
    { fira           } { FiraMath-Regular.otf       },
    { garamond       } { Garamond-Math.otf          },
    { gfsneohellenic } { GFSNeohellenicMath.otf     },
    { kp             } { KpMath-Regular.otf         },
    { libertinus     } { LibertinusMath-Regular.otf },
    { lm             } { latinmodern-math.otf       },
    { newcm          } { NewCMMath-Regular.otf      },
    { stix           } { STIXMath-Regular.otf       },
    { stix2          } { STIXTwoMath-Regular.otf    },
    { xcharter       } { XCharter-Math.otf          },
    { xits           } { XITSMath-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}
% \changes{v0.5.1.0}{2022/04/06}{适配macOS平台MacTeX内置XITSMath数学字体}
% \changes{v2.12.1.0}{2022/07/03}{移除XITSMath数学字体冗余语句}
% \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>
%<*thesis|tp>
%    \end{macrocode}
% \subsection{信息录入}
% \changes{v1.8.0.0}{2022/05/02}{拆分信息录入选项}
% \begin{variable}
%   {
%     \l_@@_title_tl,
%     \l_@@_title_i_tl,
%     \l_@@_title_ii_tl,
%     \l_@@_dept_str,
%     \l_@@_major_str,
%     \l_@@_author_str,
%     \l_@@_supv_clist,
%     \l_@@_supv_ent_str,
%     \l_@@_student_id_str,
%     \l_@@_abstract_zh_tl,
%     \l_@@_abstract_en_tl,
%     \l_@@_keywords_zh_clist,
%     \l_@@_keywords_en_clist,
%     \l_@@_bib_file_clist,
%     \l_@@_appendix_clist,
%     \l_@@_ack_tl
%   }
% 论文标题。
%    \begin{macrocode}
\tl_new:N \l_@@_title_tl
\tl_new:N \l_@@_title_i_tl
\tl_new:N \l_@@_title_ii_tl
%    \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}
\clist_new:N \l_@@_supv_clist
%    \end{macrocode}
% 校外导师姓名。
%    \begin{macrocode}
\str_new:N \l_@@_supv_ent_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}
\clist_new:N \l_@@_bib_file_clist
%    \end{macrocode}
% 附录。
%    \begin{macrocode}
\clist_new:N \l_@@_appendix_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_tl,
%    \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 .clist_set:N = \l_@@_supv_clist,
%    \end{macrocode}
% 校外导师姓名。
%    \begin{macrocode}
    supv-ent .tl_set:N = \l_@@_supv_ent_str,
    supervisor-enterprise .tl_set:N = \l_@@_supv_ent_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}
    bib-resource .clist_set:N = \l_@@_bib_file_clist,
%    \end{macrocode}
% 附录。
%    \begin{macrocode}
    appendix .clist_set:N = \l_@@_appendix_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 / supv-ent              = { },
    info / supervisor-enterprise = { },
    info / student-id            = { },
    info / abstract              = { },
    info / abstract*             = { },
    info / keywords              = { },
    info / keywords*             = { },
    info / bib-resource          = { },
    info / appendix              = { },
    info / acknowledgements      = { }
  }
%    \end{macrocode}
% \end{macro}
% \begin{variable}
%   {
%     \l_@@_supv_str,
%     \l_@@_supv_ii_str
%   }
% \changes{v1.16.0.0}{2022/05/22}{拆分导师姓名}
% 拆分导师姓名。
%    \begin{macrocode}
\str_new:N \l_@@_supv_str
\str_new:N \l_@@_supv_ii_str
\ctex_at_end_preamble:n
  {
    \str_set:Nx \l_@@_supv_str    { \clist_item:Nn \l_@@_supv_clist { 1 } }
    \str_set:Nx \l_@@_supv_ii_str { \clist_item:Nn \l_@@_supv_clist { 2 } }
  }
%    \end{macrocode}
% \end{variable}
%    \begin{macrocode}
%</thesis|tp>
%<*xduugtp>
%    \end{macrocode}
% \subsubsection{本科生开题报告}
% \begin{variable}
%   {
%     \l_@@_class_str,
%     \l_@@_submit_date_str,
%     \l_@@_sign_clist,
%     \l_@@_date_clist
%   }
% 界。
%    \begin{macrocode}
\str_new:N \l_@@_class_str
%    \end{macrocode}
% 提交日期。
%    \begin{macrocode}
\str_new:N \l_@@_submit_date_str
%    \end{macrocode}
% 签名文件路径。
%    \begin{macrocode}
\clist_new:N \l_@@_sign_clist
%    \end{macrocode}
% 签名日期。
%    \begin{macrocode}
\clist_new:N \l_@@_date_clist
%    \end{macrocode}
% \end{variable}
% \begin{macro}{\keys_define:nn}
% 定义信息键值。
%    \begin{macrocode}
\keys_define:nn { xdu / info }
  {
%    \end{macrocode}
% 界。
%    \begin{macrocode}
    class .tl_set:N = \l_@@_class_str,
%    \end{macrocode}
% 提交日期。
%    \begin{macrocode}
    submit-date .tl_set:N = \l_@@_submit_date_str,
%    \end{macrocode}
% 签名文件路径。
%    \begin{macrocode}
    sign .clist_set:N = \l_@@_sign_clist,
%    \end{macrocode}
% 签名日期。
%    \begin{macrocode}
    date .clist_set:N = \l_@@_date_clist
  }
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\keys_set:nn}
% 初始设置。
%    \begin{macrocode}
\keys_set:nn { xdu }
  {
    info / class       = { },
    info / submit-date = { },
    info / sign        = { },
    info / date        = { }
  }
%    \end{macrocode}
% \end{macro}
%    \begin{macrocode}
%</xduugtp>
%<*xduugthesis>
%    \end{macrocode}
% \subsubsection{本科生}
% \begin{variable}
%   {
%     \l_@@_supv_dept_str,
%     \l_@@_supv_sch_str,
%     \l_@@_class_id_str
%   }
% 院内导师姓名。
%    \begin{macrocode}
\str_new:N \l_@@_supv_dept_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}
% \end{variable}
% \begin{macro}{\keys_define:nn}
% 定义信息键值。
%    \begin{macrocode}
\keys_define:nn { xdu / info }
  {
%    \end{macrocode}
% 院内导师姓名。
%    \begin{macrocode}
    supv-dept .tl_set:N = \l_@@_supv_dept_str,
    supervisor-department .tl_set:N = \l_@@_supv_dept_str,
%    \end{macrocode}
% 校内导师姓名。
%    \begin{macrocode}
    supv-school .tl_set:N = \l_@@_supv_sch_str,
    supervisor-school .tl_set:N = \l_@@_supv_sch_str,
%    \end{macrocode}
% 作者班级号。
%    \begin{macrocode}
    class-id .tl_set:N = \l_@@_class_id_str
  }
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\keys_set:nn}
% 初始设置。
%    \begin{macrocode}
\keys_set:nn { xdu }
  {
    info / supv-dept             = { },
    info / supervisor-department = { },
    info / supv-school           = { },
    info / supervisor-school     = { },
    info / class-id              = { }
  }
%    \end{macrocode}
% \end{macro}
%    \begin{macrocode}
%</xduugthesis>
%<*xdupgthesis>
%    \end{macrocode}
% \subsubsection{研究生}
% \changes{v1.9.0.0}{2022/05/03}{增加研究生信息录入选项}
% \begin{variable}
%   {
%     \l_@@_gr_type_tl,
%     \l_@@_degree_type_tl,
%     \l_@@_degree_str,
%     \l_@@_degree_en_str,
%     \l_@@_author_en_str,
%     \l_@@_supv_en_clist,
%     \l_@@_supv_ent_en_str,
%     \l_@@_supv_t_clist,
%     \l_@@_supv_t_en_clist,
%     \l_@@_supv_ent_t_str,
%     \l_@@_supv_ent_t_en_str,
%     \l_@@_title_en_str,
%     \l_@@_major_en_str,
%     \l_@@_sub_major_str,
%     \l_@@_domain_str,
%     \l_@@_clc_str,
%     \l_@@_secret_lv_str,
%     \l_@@_secret_year_str,
%     \l_@@_submit_date_str,
%     \l_@@_statement_scan_str,
%     \l_@@_statement_sign_clist,
%     \l_@@_los_str,
%     \l_@@_loa_str,
%     \l_@@_bio_str
%   }
% 研究生类型。
%    \begin{macrocode}
\tl_new:N \l_@@_gr_type_tl
%    \end{macrocode}
% 学位类型。
%    \begin{macrocode}
\tl_new:N \l_@@_degree_type_tl
%    \end{macrocode}
% 学位类别。
%    \begin{macrocode}
\str_new:N \l_@@_degree_str
\str_new:N \l_@@_degree_en_str
%    \end{macrocode}
% 作者姓名拼音。
%    \begin{macrocode}
\str_new:N \l_@@_author_en_str
%    \end{macrocode}
% 导师姓名拼音。
%    \begin{macrocode}
\clist_new:N \l_@@_supv_en_clist
%    \end{macrocode}
% 校外导师姓名拼音。
%    \begin{macrocode}
\str_new:N \l_@@_supv_ent_en_str
%    \end{macrocode}
% 导师职称。
%    \begin{macrocode}
\clist_new:N \l_@@_supv_t_clist
\clist_new:N \l_@@_supv_t_en_clist
%    \end{macrocode}
% 校外导师职称。
%    \begin{macrocode}
\str_new:N \l_@@_supv_ent_t_str
\str_new:N \l_@@_supv_ent_t_en_str
%    \end{macrocode}
% 论文标题英文。
%    \begin{macrocode}
\str_new:N \l_@@_title_en_str
%    \end{macrocode}
% 一级学科英文名称。
%    \begin{macrocode}
\str_new:N \l_@@_major_en_str
%    \end{macrocode}
% 二级学科。
%    \begin{macrocode}
\str_new:N \l_@@_sub_major_str
%    \end{macrocode}
% 领域。
%    \begin{macrocode}
\str_new:N \l_@@_domain_str
%    \end{macrocode}
% 中图分类号。
%    \begin{macrocode}
\str_new:N \l_@@_clc_str
%    \end{macrocode}
% 密级。
%    \begin{macrocode}
\str_new:N \l_@@_secret_lv_str
%    \end{macrocode}
% 保密年限。
%    \begin{macrocode}
\str_new:N \l_@@_secret_year_str
%    \end{macrocode}
% 提交日期。
%    \begin{macrocode}
\str_new:N \l_@@_submit_date_str
%    \end{macrocode}
% 声明页扫描文件路径。
%    \begin{macrocode}
\str_new:N \l_@@_statement_scan_str
%    \end{macrocode}
% 声明页签名文件路径。
%    \begin{macrocode}
\clist_new:N \l_@@_statement_sign_clist
%    \end{macrocode}
% 符号对照表文件路径。
%    \begin{macrocode}
\str_new:N \l_@@_los_str
%    \end{macrocode}
% 缩略语对照表文件路径。
%    \begin{macrocode}
\str_new:N \l_@@_loa_str
%    \end{macrocode}
% 作者简介文件路径。
%    \begin{macrocode}
\str_new:N \l_@@_bio_str
%    \end{macrocode}
% \end{variable}
% \begin{macro}{\keys_define:nn}
% 定义信息键值。
%    \begin{macrocode}
\keys_define:nn { xdu / info }
  {
%    \end{macrocode}
% 研究生类型。
%    \begin{macrocode}
    graduate-type .choices:nn = { 硕士, 博士 }
      { \tl_set_eq:NN \l_@@_gr_type_tl \l_keys_choice_tl },
%    \end{macrocode}
% 学位类型。
%    \begin{macrocode}
    degree-type .choices:nn = { 学术, 专业 }
      { \tl_set_eq:NN \l_@@_degree_type_tl \l_keys_choice_tl },
%    \end{macrocode}
% 学位类别。
%    \begin{macrocode}
    degree .tl_set:N = \l_@@_degree_str,
    degree* .tl_set:N = \l_@@_degree_en_str,
%    \end{macrocode}
% 作者姓名拼音。
%    \begin{macrocode}
    author* .tl_set:N = \l_@@_author_en_str,
%    \end{macrocode}
% 导师姓名拼音。
%    \begin{macrocode}
    supervisor* .clist_set:N = \l_@@_supv_en_clist,
%    \end{macrocode}
% 校外导师姓名拼音。
%    \begin{macrocode}
    supv-ent* .tl_set:N = \l_@@_supv_ent_en_str,
    supervisor-enterprise* .tl_set:N = \l_@@_supv_ent_en_str,
%    \end{macrocode}
% 导师职称。
%    \begin{macrocode}
    supv-title .clist_set:N = \l_@@_supv_t_clist,
    supervisor-title .clist_set:N = \l_@@_supv_t_clist,
    supv-title* .clist_set:N = \l_@@_supv_t_en_clist,
    supervisor-title* .clist_set:N = \l_@@_supv_t_en_clist,
%    \end{macrocode}
% 校外导师职称。
%    \begin{macrocode}
    supv-ent-title .tl_set:N = \l_@@_supv_ent_t_str,
    supervisor-enterprise-title .tl_set:N = \l_@@_supv_ent_t_str,
    supv-ent-title* .tl_set:N = \l_@@_supv_ent_t_en_str,
    supervisor-enterprise-title* .tl_set:N = \l_@@_supv_ent_t_en_str,
%    \end{macrocode}
% 论文标题英文。
%    \begin{macrocode}
    title* .tl_set:N = \l_@@_title_en_str,
%    \end{macrocode}
% 一级学科英文名称。
%    \begin{macrocode}
    major* .tl_set:N = \l_@@_major_en_str,
%    \end{macrocode}
% 二级学科。
%    \begin{macrocode}
    sub-major .tl_set:N = \l_@@_sub_major_str,
%    \end{macrocode}
% 领域。
%    \begin{macrocode}
    domain .tl_set:N = \l_@@_domain_str,
%    \end{macrocode}
% 中图分类号。
%    \begin{macrocode}
    clc .tl_set:N = \l_@@_clc_str,
%    \end{macrocode}
% 密级。
%    \begin{macrocode}
    secret-level .choices:nn = { 秘密, 公开 }
      { \tl_set_eq:NN \l_@@_secret_lv_str \l_keys_choice_tl },
%    \end{macrocode}
% 保密年限。
%    \begin{macrocode}
    secret-year .tl_set:N = \l_@@_secret_year_str,
%    \end{macrocode}
% 提交日期。
%    \begin{macrocode}
    submit-date .tl_set:N = \l_@@_submit_date_str,
%    \end{macrocode}
% 声明页扫描文件路径。
%    \begin{macrocode}
    statement-scan .tl_set:N = \l_@@_statement_scan_str,
%    \end{macrocode}
% 声明页签名文件路径。
%    \begin{macrocode}
    statement-sign .clist_set:N = \l_@@_statement_sign_clist,
%    \end{macrocode}
% 符号对照表文件路径。
%    \begin{macrocode}
    los .tl_set:N = \l_@@_los_str,
%    \end{macrocode}
% 缩略语对照表文件路径。
%    \begin{macrocode}
    loa .tl_set:N = \l_@@_loa_str,
%    \end{macrocode}
% 作者简介文件路径。
%    \begin{macrocode}
    bio .tl_set:N = \l_@@_bio_str
  }
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\keys_set:nn}
% \changes{v1.7.1.0}{2022/05/02}{设置研究生类型默认值}
% \changes{v1.7.2.0}{2022/05/02}{修正guard}
% 初始设置。
%    \begin{macrocode}
\keys_set:nn { xdu }
  {
    info / graduate-type                = 硕士,
    info / degree-type                  = 学术,
    info / degree                       = { },
    info / degree*                      = { },
    info / author*                      = { },
    info / supervisor*                  = { },
    info / supv-ent*                    = { },
    info / supervisor-enterprise*       = { },
    info / supv-title                   = { },
    info / supervisor-title             = { },
    info / supv-title*                  = { },
    info / supervisor-title*            = { },
    info / supv-ent-title               = { },
    info / supervisor-enterprise-title  = { },
    info / supv-ent-title*              = { },
    info / supervisor-enterprise-title* = { },
    info / title*                       = { },
    info / major*                       = { },
    info / sub-major                    = { },
    info / domain                       = { },
    info / clc                          = { },
    info / secret-level                 = 公开,
    info / secret-year                  = { },
    info / submit-date                  = { },
    info / statement-scan               = { },
    info / statement-sign               = { },
    info / los                          = { },
    info / loa                          = { },
    info / bio                          = { }
  }
%    \end{macrocode}
% \end{macro}
% \begin{variable}
%   {
%     \l_@@_supv_en_str,
%     \l_@@_supv_ii_en_str,
%     \l_@@_supv_t_str,
%     \l_@@_supv_ii_t_str,
%     \l_@@_supv_t_en_str,
%     \l_@@_supv_ii_t_en_str
%   }
% \changes{v1.16.0.0}{2022/05/22}{拆分导师英文姓名和中英文职称}
% 拆分导师英文姓名和中英文职称。
%    \begin{macrocode}
\str_new:N \l_@@_supv_en_str
\str_new:N \l_@@_supv_ii_en_str
\str_new:N \l_@@_supv_t_str
\str_new:N \l_@@_supv_ii_t_str
\str_new:N \l_@@_supv_t_en_str
\str_new:N \l_@@_supv_ii_t_en_str
\ctex_at_end_preamble:n
  {
    \str_set:Nx \l_@@_supv_en_str
      { \clist_item:Nn \l_@@_supv_en_clist   { 1 } }
    \str_set:Nx \l_@@_supv_ii_en_str
      { \clist_item:Nn \l_@@_supv_en_clist   { 2 } }
    \str_set:Nx \l_@@_supv_t_str
      { \clist_item:Nn \l_@@_supv_t_clist    { 1 } }
    \str_set:Nx \l_@@_supv_ii_t_str
      { \clist_item:Nn \l_@@_supv_t_clist    { 2 } }
    \str_set:Nx \l_@@_supv_t_en_str
      { \clist_item:Nn \l_@@_supv_t_en_clist { 1 } }
    \str_set:Nx \l_@@_supv_ii_t_en_str
      { \clist_item:Nn \l_@@_supv_t_en_clist { 2 } }
  }
%    \end{macrocode}
% \end{variable}
% \changes{v2.7.0.0}{2022/06/26}{页面移除开关}
% \subsection{页面移除开关}
% \label{页面移除开关}
% \begin{variable}
%   {
%     \l_@@_rm_page_clist,
%     \l_@@_rm_header_bool,
%     \l_@@_rm_footer_bool
%   }
% 页面移除开关。
%    \begin{macrocode}
\clist_new:N \l_@@_rm_page_clist
%    \end{macrocode}
% 页眉移除开关。
%    \begin{macrocode}
\bool_new:N \l_@@_rm_header_bool
%    \end{macrocode}
% 页脚移除开关。
%    \begin{macrocode}
\bool_new:N \l_@@_rm_footer_bool
%    \end{macrocode}
% \end{variable}
% \begin{macro}{\keys_define:nn}
% 定义样式键值。
%    \begin{macrocode}
\keys_define:nn { xdu / style }
  {
%    \end{macrocode}
% 设置页面移除开关。
%    \begin{macrocode}
    remove-page .clist_set:N = \l_@@_rm_page_clist,
    remove-header .bool_set:N = \l_@@_rm_header_bool,
    remove-footer .bool_set:N = \l_@@_rm_footer_bool
  }
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\keys_set:nn}
% 初始设置。
%    \begin{macrocode}
\keys_set:nn { xdu }
  {
    style / remove-page   = { },
    style / remove-header = false,
    style / remove-footer = false
  }
%    \end{macrocode}
% \end{macro}
% \begin{variable}
%   {
%     \l_@@_rm_cover_bool,
%     \l_@@_rm_title_page_bool,
%     \l_@@_rm_statement_bool,
%     \l_@@_rm_abstract_bool,
%     \l_@@_rm_lof_bool,
%     \l_@@_rm_lot_bool,
%     \l_@@_rm_los_bool,
%     \l_@@_rm_loa_bool,
%     \l_@@_rm_toc_bool,
%     \l_@@_rm_appendix_bool,
%     \l_@@_rm_ref_bool,
%     \l_@@_rm_ack_bool,
%     \l_@@_rm_bio_bool
%   }
% 封面。
%    \begin{macrocode}
\bool_new:N \l_@@_rm_cover_bool
%    \end{macrocode}
% 中英文题名页。
%    \begin{macrocode}
\bool_new:N \l_@@_rm_title_page_bool
%    \end{macrocode}
% 声明页。
%    \begin{macrocode}
\bool_new:N \l_@@_rm_statement_bool
%    \end{macrocode}
% 中英文摘要。
%    \begin{macrocode}
\bool_new:N \l_@@_rm_abstract_bool
%    \end{macrocode}
% 索引。
%    \begin{macrocode}
\bool_new:N \l_@@_rm_lof_bool
\bool_new:N \l_@@_rm_lot_bool
%    \end{macrocode}
% 符号对照表和缩略语对照表。
%    \begin{macrocode}
\bool_new:N \l_@@_rm_los_bool
\bool_new:N \l_@@_rm_loa_bool
%    \end{macrocode}
% 目录。
%    \begin{macrocode}
\bool_new:N \l_@@_rm_toc_bool
%    \end{macrocode}
% 附录。
%    \begin{macrocode}
\bool_new:N \l_@@_rm_appendix_bool
%    \end{macrocode}
% 参考文献。
%    \begin{macrocode}
\bool_new:N \l_@@_rm_ref_bool
%    \end{macrocode}
% 致谢。
%    \begin{macrocode}
\bool_new:N \l_@@_rm_ack_bool
%    \end{macrocode}
% 作者简介。
%    \begin{macrocode}
\bool_new:N \l_@@_rm_bio_bool
%    \end{macrocode}
% \end{variable}
% \begin{macro}{\clist_if_in:NnT,\bool_set_true:N}
% 设置页面移除开关布尔值。
%    \begin{macrocode}
\ctex_at_end_preamble:n
  {
    \clist_if_in:NnT \l_@@_rm_page_clist { 封面 }
      { \bool_set_true:N \l_@@_rm_cover_bool }
    \clist_if_in:NnT \l_@@_rm_page_clist { 提名页 }
      { \bool_set_true:N \l_@@_rm_title_page_bool }
    \clist_if_in:NnT \l_@@_rm_page_clist { 题名页 }
      { \bool_set_true:N \l_@@_rm_title_page_bool }
    \clist_if_in:NnT \l_@@_rm_page_clist { 声明页 }
      { \bool_set_true:N \l_@@_rm_statement_bool }
    \clist_if_in:NnT \l_@@_rm_page_clist { 摘要 }
      { \bool_set_true:N \l_@@_rm_abstract_bool }
    \clist_if_in:NnT \l_@@_rm_page_clist { 索引 }
      {
        \bool_set_true:N \l_@@_rm_lof_bool
        \bool_set_true:N \l_@@_rm_lot_bool
      }
    \clist_if_in:NnT \l_@@_rm_page_clist { 插图索引 }
      { \bool_set_true:N \l_@@_rm_lof_bool }
    \clist_if_in:NnT \l_@@_rm_page_clist { 表格索引 }
      { \bool_set_true:N \l_@@_rm_lot_bool }
    \clist_if_in:NnT \l_@@_rm_page_clist { 对照表 }
      {
        \bool_set_true:N \l_@@_rm_los_bool
        \bool_set_true:N \l_@@_rm_loa_bool
      }
    \clist_if_in:NnT \l_@@_rm_page_clist { 符号对照表 }
      { \bool_set_true:N \l_@@_rm_los_bool }
    \clist_if_in:NnT \l_@@_rm_page_clist { 缩略语对照表 }
      { \bool_set_true:N \l_@@_rm_loa_bool }
    \clist_if_in:NnT \l_@@_rm_page_clist { 目录 }
      { \bool_set_true:N \l_@@_rm_toc_bool }
    \clist_if_in:NnT \l_@@_rm_page_clist { 附录 }
      { \bool_set_true:N \l_@@_rm_appendix_bool }
    \clist_if_in:NnT \l_@@_rm_page_clist { 参考文献 }
      { \bool_set_true:N \l_@@_rm_ref_bool }
    \clist_if_in:NnT \l_@@_rm_page_clist { 致谢 }
      { \bool_set_true:N \l_@@_rm_ack_bool }
    \clist_if_in:NnT \l_@@_rm_page_clist { 作者简介 }
      { \bool_set_true:N \l_@@_rm_bio_bool }
  }
%    \end{macrocode}
% \end{macro}
% \changes{v2.10.0.0}{2022/06/26}{匿名命令}
% \subsection{匿名操作}
% \label{匿名操作}
% \begin{variable}{\l_@@_anon_bool}
% 匿名开关。
%    \begin{macrocode}
\bool_new:N \l_@@_anon_bool
%    \end{macrocode}
% \end{variable}
% \begin{macro}{\keys_define:nn}
% 定义样式键值。
%    \begin{macrocode}
\keys_define:nn { xdu / style }
  {
%    \end{macrocode}
% 匿名操作。
%    \begin{macrocode}
    anonymous .bool_set:N = \l_@@_anon_bool
  }
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\keys_set:nn}
% 初始设置。
%    \begin{macrocode}
\keys_set:nn { xdu }
  {
    style / anonymous = false
  }
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\anon}
% 匿名命令。
%    \begin{macrocode}
\NewDocumentCommand \anon { O { XXX } m }
  {
    \bool_if:NTF \l_@@_anon_bool
      { #1 } { #2 }
  }
%    \end{macrocode}
% \end{macro}
%    \begin{macrocode}
%</xdupgthesis>
%<*thesis|xduugtp>
%    \end{macrocode}
% \subsection{标签宏配置}
% \label{标签宏配置}
% \begin{macro}
%   {
%     \figurename,
%     \figname,
%     \tablename,
%     \tabname,
%   }
% \changes{v1.21.0.0}{2022/06/01}{配置图表标签宏}
%    \begin{macrocode}
\cs_set:Npn \figurename { \@@_lang_switch:nn { 图 } { Figure } }
\cs_new_eq:NN \figname \figurename
\cs_set:Npn \tablename  { \@@_lang_switch:nn { 表 } { Table  } }
\cs_new_eq:NN \tabname \tablename
%    \end{macrocode}
% \end{macro}
% \subsection{样式配置}
% \begin{variable}
%   {
%     \l_@@_title_bold_math_bool,
%     \l_@@_en_cjk_font_bool,
%     \l_@@_lang_tl,
%     \l_@@_bib_tool_tl,
%     \l_@@_biblatex_option_tl,
%     \l_@@_search_path_clist,
%     \l_@@_fix_input_bool,
%     \l_@@_fix_include_bool,
%     \l_@@_fix_graphics_bool,
%     \l_@@_ref_add_space_bool,
%     \l_@@_cap_label_sep_tl,
%     \l_@@_ft_cap_format_tl,
%     \l_@@_alg_cap_format_tl,
%     \l_@@_ft_cap_align_tl,
%     \l_@@_alg_cap_align_tl,
%     \l_@@_add_alg_rule_vspace_bool,
%     \l_@@_tab_small_bool,
%     \l_@@__figure_align_tl,
%     \l_@@__table_align_tl,
%     \l_@@_alg_small_cap_bool,
%     \l_@@_alg_small_bool,
%     \l_@@_before_skip_clist,
%     \l_@@_after_skip_clist,
%     \l_@@_chap_tl,
%     \l_@@_sec_tl,
%     \l_@@_subsec_tl,
%     \l_@@_subsubsec_tl,
%     \l_@@_para_tl,
%     \l_@@_subpara_tl,
%     \l_@@_sym_mgn_bool,
%     \l_@@_page_v_align_tl
%   }
% 标题数学字体是否加粗。
%    \begin{macrocode}
\bool_new:N \l_@@_title_bold_math_bool
%    \end{macrocode}
% \changes{v2.12.0.2}{2022/07/01}{精简变量名称}
% 英文是否使用中文字体。
%    \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}
% 修改\pkgx{biblatex}默认选项。
%    \begin{macrocode}
\tl_new:N \l_@@_biblatex_option_tl
%    \end{macrocode}
% 设置文件搜索路径。
%    \begin{macrocode}
\clist_new:N \l_@@_search_path_clist
%    \end{macrocode}
% 是否修复文件导入命令。
%    \begin{macrocode}
\bool_new:N \l_@@_fix_input_bool
\bool_new:N \l_@@_fix_include_bool
\bool_new:N \l_@@_fix_graphics_bool
%    \end{macrocode}
% 是否在\tnx{ref}和\tnx{pageref}两侧自动调整中英文间空白。
%    \begin{macrocode}
\tl_new:N \l_@@_ref_add_space_bool
%    \end{macrocode}
% 标签与后面标题之间的间距。
%    \begin{macrocode}
\tl_new:N \l_@@_cap_label_sep_tl
%    \end{macrocode}
% 图、表、算法caption格式。
%    \begin{macrocode}
\tl_new:N \l_@@_ft_cap_format_tl
\tl_new:N \l_@@_alg_cap_format_tl
%    \end{macrocode}
% 图、表、算法caption对齐方式。
%    \begin{macrocode}
\tl_new:N \l_@@_ft_cap_align_tl
\tl_new:N \l_@@_alg_cap_align_tl
%    \end{macrocode}
% 设置算法三线间距。
%    \begin{macrocode}
\bool_new:N \l_@@_add_alg_rule_vspace_bool
%    \end{macrocode}
% 设置表格字号是否为五号。
%    \begin{macrocode}
\bool_new:N \l_@@_tab_small_bool
%    \end{macrocode}
% 设置图表内容对齐方式。
%    \begin{macrocode}
\tl_new:N \l_@@_figure_align_tl
\tl_new:N \l_@@_table_align_tl
%    \end{macrocode}
% 设置算法Caption字号是否为五号。
%    \begin{macrocode}
\bool_new:N \l_@@_alg_small_cap_bool
%    \end{macrocode}
% 设置算法内容字号是否为五号。
%    \begin{macrocode}
\bool_new:N \l_@@_alg_small_bool
%    \end{macrocode}
% 设置章节标题前后的垂直间距。
%    \begin{macrocode}
\clist_new:N \l_@@_before_skip_clist
\clist_new:N \l_@@_after_skip_clist
%    \end{macrocode}
% 设置章节标题字号。
%    \begin{macrocode}
\tl_new:N \l_@@_chap_tl
\tl_new:N \l_@@_sec_tl
\tl_new:N \l_@@_subsec_tl
\tl_new:N \l_@@_subsubsec_tl
\tl_new:N \l_@@_para_tl
\tl_new:N \l_@@_subpara_tl
%    \end{macrocode}
% 设置页边距是否对称。
%    \begin{macrocode}
\bool_new:N \l_@@_sym_mgn_bool
%    \end{macrocode}
% 设置页面垂直方向的对齐方式。
%    \begin{macrocode}
\tl_new:N \l_@@_page_v_align_tl
%    \end{macrocode}
% \end{variable}
% \begin{macro}{\keys_define:nn}
% 定义样式键值。
%    \begin{macrocode}
\keys_define:nn { xdu / style }
  {
%    \end{macrocode}
% 标题数学字体是否加粗。
%    \begin{macrocode}
    title-bold-math .bool_set:N = \l_@@_title_bold_math_bool,
%    \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}
% 修改\pkgx{biblatex}默认选项。
%    \begin{macrocode}
    biblatex-option .tl_set:N = \l_@@_biblatex_option_tl,
%    \end{macrocode}
% 设置文件搜索路径。
%    \begin{macrocode}
    file-search-path .clist_set:N = \l_@@_search_path_clist,
%    \end{macrocode}
% 是否修复文件导入命令。
%    \begin{macrocode}
    fix-input .bool_set:N = \l_@@_fix_input_bool,
    fix-include .bool_set:N = \l_@@_fix_include_bool,
    fix-includegraphics .bool_set:N = \l_@@_fix_graphics_bool,
%    \end{macrocode}
% 是否在\tnx{ref}和\tnx{pageref}两侧自动调整中英文间空白。
%    \begin{macrocode}
    ref-add-space .bool_set:N = \l_@@_ref_add_space_bool,
%    \end{macrocode}
% 标签与后面标题之间的间距。
%    \begin{macrocode}
    caption-label-sep .tl_set:N = \l_@@_cap_label_sep_tl,
%    \end{macrocode}
% 图、表、算法caption格式。
%    \begin{macrocode}
    ft-caption-format .choices:nn = { plain, hang }
      { \tl_set_eq:NN \l_@@_ft_cap_format_tl \l_keys_choice_tl },
    alg-caption-format .choices:nn = { plain, hang }
      { \tl_set_eq:NN \l_@@_alg_cap_format_tl \l_keys_choice_tl },
%    \end{macrocode}
% 图、表、算法caption对齐方式。
%    \begin{macrocode}
    ft-caption-align .choices:nn = { left, centering, centering-left }
      { \tl_set_eq:NN \l_@@_ft_cap_align_tl \l_keys_choice_tl },
    alg-caption-align .choices:nn = { left, centering, centering-left }
      { \tl_set_eq:NN \l_@@_alg_cap_align_tl \l_keys_choice_tl },
%    \end{macrocode}
% 设置算法三线间距。
%    \begin{macrocode}
    add-alg-rule-vspace .bool_set:N = \l_@@_add_alg_rule_vspace_bool,
%    \end{macrocode}
% 设置表格字号是否为五号。
%    \begin{macrocode}
    table-small-font .bool_set:N = \l_@@_tab_small_bool,
%    \end{macrocode}
% 设置图表内容对齐方式。
%    \begin{macrocode}
    figure-align .choices:nn = { left, centering, right }
      { \tl_set_eq:NN \l_@@_figure_align_tl \l_keys_choice_tl },
    table-align .choices:nn = { left, centering, right }
      { \tl_set_eq:NN \l_@@_table_align_tl \l_keys_choice_tl },
%    \end{macrocode}
% 设置算法Caption字号是否为五号。
%    \begin{macrocode}
    alg-small-caption .bool_set:N = \l_@@_alg_small_cap_bool,
    algorithm-small-caption .bool_set:N = \l_@@_alg_small_cap_bool,
%    \end{macrocode}
% 设置算法内容字号是否为五号。
%    \begin{macrocode}
    alg-small-font .bool_set:N = \l_@@_alg_small_bool,
    algorithm-small-font .bool_set:N = \l_@@_alg_small_bool,
%    \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}
% 设置章节标题字号。
%    \begin{macrocode}
    chap-zihao .tl_set:N = \l_@@_chap_tl,
    sec-zihao .tl_set:N = \l_@@_sec_tl,
    subsec-zihao .tl_set:N = \l_@@_subsec_tl,
    subsubsec-zihao .tl_set:N = \l_@@_subsubsec_tl,
    para-zihao .tl_set:N = \l_@@_para_tl,
    subpara-zihao .tl_set:N = \l_@@_subpara_tl,
%    \end{macrocode}
% 设置页边距是否对称。
%    \begin{macrocode}
    symmetric-margin .bool_set:N = \l_@@_sym_mgn_bool,
%    \end{macrocode}
% 设置页面垂直方向的对齐方式。
%    \begin{macrocode}
    page-vertical-align .tl_set:N = \l_@@_page_v_align_tl
  }
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\keys_set:nn}
% 初始设置。
%    \begin{macrocode}
\keys_set:nn { xdu }
  {
    style / title-bold-math         = false,
    style / en-cjk-font             = false,
    style / language                = zh,
    style / bib-backend             = biblatex,
    style / biblatex-option         = { },
    style / file-search-path        = { },
    style / fix-input               = false,
    style / fix-include             = false,
    style / fix-includegraphics     = false,
    style / ref-add-space           = false,
    style / caption-label-sep       = 0.75em,
    style / ft-caption-format       = hang,
    style / alg-caption-format      = hang,
    style / ft-caption-align        = centering-left,
    style / alg-caption-align       = left,
    style / add-alg-rule-vspace     = false,
    style / table-small-font        = true,
    style / figure-align            = centering,
    style / table-align             = centering,
    style / alg-small-caption       = true,
    style / algorithm-small-caption = true,
    style / alg-small-font          = true,
    style / algorithm-small-font    = true,
    style / before-skip             = { 24pt, 18pt, 12pt, 12pt, 12pt, 12pt },
    style / after-skip              = { 18pt, 12pt, 6pt, 6pt, 6pt, 6pt },
    style / symmetric-margin        = false,
    style / page-vertical-align     = 顶部对齐
  }
%    \end{macrocode}
% \end{macro}
% \changes{v4.4.0.0}{2023/02/03}{标题数学字体配置}
% \subsection{标题数学字体配置}
% \begin{macro}{\@@_bold_math:}
% 自定义数学字体加粗命令。
%    \begin{macrocode}
\cs_new:Npn \@@_bold_math: { }
\ctex_at_end_preamble:n
  {
    \bool_if:NT \l_@@_title_bold_math_bool
      {
        \tl_if_eq:NnT \l_@@_math_font_tl { cm }
          { \cs_set_eq:NN \@@_bold_math: \boldmath }
      }
  }
%    \end{macrocode}
% \end{macro}
%    \begin{macrocode}
%</thesis|xduugtp>
%<*xdupgthesis>
%    \end{macrocode}
% \changes{v1.22.0.0}{2022/06/05}{对照表样式配置}
% \subsection{对照表样式配置}
% \begin{variable}
%   {
%     \l_@@_customize_los_bool,
%     \l_@@_customize_loa_bool,
%     \l_@@_colspec_los_tl,
%     \l_@@_colspec_loa_tl,
%     \l_@@_title_row_los_bool,
%     \l_@@_title_row_los_bool,
%   }
% 是否完全自定义符号对照。
%    \begin{macrocode}
\bool_new:N \l_@@_customize_los_bool
%    \end{macrocode}
% 是否完全自定义缩略语对照表。
%    \begin{macrocode}
\bool_new:N \l_@@_customize_loa_bool
%    \end{macrocode}
% 符号对照表列格式。
%    \begin{macrocode}
\tl_new:N \l_@@_colspec_los_tl
%    \end{macrocode}
% 缩略语对照表列格式。
%    \begin{macrocode}
\tl_new:N \l_@@_colspec_loa_tl
%    \end{macrocode}
% 是否每页均显示符号对照表标题行。
%    \begin{macrocode}
\bool_new:N \l_@@_title_row_los_bool
%    \end{macrocode}
% 是否每页均显示缩略语对照表标题行。
%    \begin{macrocode}
\bool_new:N \l_@@_title_row_loa_bool
%    \end{macrocode}
% \end{variable}
% \begin{macro}{\keys_define:nn}
% 定义信息键值。
%    \begin{macrocode}
\keys_define:nn { xdu / style }
  {
%    \end{macrocode}
% 是否完全自定义符号对照。
%    \begin{macrocode}
    customize-los .bool_set:N = \l_@@_customize_los_bool,
%    \end{macrocode}
% 是否完全自定义缩略语对照表。
%    \begin{macrocode}
    customize-loa .bool_set:N = \l_@@_customize_loa_bool,
%    \end{macrocode}
% 符号对照表列格式。
%    \begin{macrocode}
    colspec-los .tl_set:N = \l_@@_colspec_los_tl,
%    \end{macrocode}
% 缩略语对照表列格式。
%    \begin{macrocode}
    colspec-loa .tl_set:N = \l_@@_colspec_loa_tl,
%    \end{macrocode}
% 是否每页均显示符号对照表标题行。
%    \begin{macrocode}
    title-row-los .bool_set:N = \l_@@_title_row_los_bool,
%    \end{macrocode}
% 是否每页均显示缩略语对照表标题行。
%    \begin{macrocode}
    title-row-loa .bool_set:N = \l_@@_title_row_loa_bool
  }
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\keys_set:nn}
% 初始设置。
%    \begin{macrocode}
\keys_set:nn { xdu }
  {
    style / customize-los = true,
    style / customize-loa = true,
    style / colspec-los   = { Q[l,h]X[l,h] },
    style / colspec-loa   = { Q[l,h]X[l,h]X[l,h] },
    style / title-row-los = false,
    style / title-row-loa = false
  }
%    \end{macrocode}
% \end{macro}
% \changes{v1.26.0.0}{2022/06/07}{作者简介样式配置}
% \subsection{作者简介样式配置}
% \begin{variable}
%   {
%     \l_@@_cust_edubg_bool,
%     \l_@@_cust_resresult_bool
%   }
% 是否完全自定义作者简介中教育背景。
%    \begin{macrocode}
\bool_new:N \l_@@_cust_edubg_bool
%    \end{macrocode}
% 是否完全自定义作者简介中攻读硕士学位期间的研究成果。
%    \begin{macrocode}
\bool_new:N \l_@@_cust_resresult_bool
%    \end{macrocode}
% \end{variable}
% \begin{macro}{\keys_define:nn}
% 定义信息键值。
%    \begin{macrocode}
\keys_define:nn { xdu / style }
  {
%    \end{macrocode}
% 是否完全自定义作者简介中教育背景。
%    \begin{macrocode}
    customize-edubg .bool_set:N = \l_@@_cust_edubg_bool,
%    \end{macrocode}
% 是否完全自定义作者简介中攻读硕士学位期间的研究成果。
%    \begin{macrocode}
    customize-resresult .bool_set:N = \l_@@_cust_resresult_bool
  }
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\keys_set:nn}
% 初始设置。
%    \begin{macrocode}
\keys_set:nn { xdu }
  {
    style / customize-edubg     = true,
    style / customize-resresult = true
  }
%    \end{macrocode}
% \end{macro}
%    \begin{macrocode}
%</xdupgthesis>
%<*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>
%<*xdupgthesis>
%    \end{macrocode}
% \subsection{内部文本}
% \begin{variable}{l_@@_header_str}
% \changes{v1.7.0.0}{2022/05/02}{研究生页眉文本}
% 研究生页眉文本。
%    \begin{macrocode}
\str_new:N \l_@@_header_str
\ctex_at_end_preamble:n
  {
    \@@_lang_switch:nn
      {
        \tl_if_eq:NnTF \l_@@_gr_type_tl { 硕士 }
          { \str_set:Nn \l_@@_header_str { 西安电子科技大学硕士学位论文 } }
          { \str_set:Nn \l_@@_header_str { 西安电子科技大学博士学位论文 } }
      }
      {
        \tl_if_eq:NnTF \l_@@_gr_type_tl { 硕士 }
          {
            \str_set:Nn \l_@@_header_str
              { Master~Thesis~of~XIDIAN~UNIVERSITY }
          }
          {
            \str_set:Nn \l_@@_header_str
              { Doctoral~Dissertation~of~XIDIAN~UNIVERSITY }
          }
      }
  }
%    \end{macrocode}
% \end{variable}
%    \begin{macrocode}
%</xdupgthesis>
%<*thesis>
%    \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}
% \changes{v4.3.1.0}{2023/02/03}{修复本科毕设论文页眉公式显示}
% \begin{variable}{\l_@@_pure_title_tl}
% 移除标题中换行符。
%    \begin{macrocode}
\ctex_at_end_preamble:n
  {
    \tl_new:N \l_@@_pure_title_tl
    \tl_set_eq:NN \l_@@_pure_title_tl \l_@@_title_tl
    \tl_remove_all:Nn \l_@@_pure_title_tl { \\ }
  }
%    \end{macrocode}
% \end{variable}
% \changes{v4.0.2.0}{2022/12/26}{移除本科生毕业设计标题自动换行功能}
% \begin{macro}{\@@_split_title:Nn,\@@_split_title:NV}
% 拆分标题。
% \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_set:Nx #1 { #2 } }
  }
\cs_generate_variant:Nn \@@_split_title:Nn { NV }
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\@@_uline:n}
% 绘制下划线。
%    \begin{macrocode}
\cs_new:Npn \@@_uline:n #1
  { \CJKunderline [ thickness = 0.5pt ] { #1 } }
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\@@_tl_set_if_empty:Nn}
% \changes{v0.7.0.0}{2022/04/11}{对空凭据表赋值}
% 对空凭据表赋值。
%    \begin{macrocode}
\cs_new:Npn \@@_tl_set_if_empty:Nn #1#2
  { \tl_if_empty:NT #1 { \tl_set:Nn #1 { #2 } } }
%    \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}
% \changes{v4.4.5.0}{2023/02/09}{修复书签中目录跳转异常}
% \begin{macro}{\@@_add_bookmark:n}
% 为当前位置添加书签。
%    \begin{macrocode}
\cs_new:Npn \@@_add_bookmark:n #1
  {
    \cleardoublepage
    \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_ii:nn}
% 新建无编号章节并添加页眉和书签并单独设置标题样式。
% \begin{arguments}
%   \item 章节标题处。
%   \item 章节标题样式。
% \end{arguments}
%    \begin{macrocode}
\cs_new:Npn \@@_n_chapter_head_ii:nn #1#2
  {
    \group_begin:
      \ctexset { chapter / format = { #2 } }
      \@@_n_chapter_head:n { #1 }
    \group_end:
  }
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\@@_n_chapter_head:nn}
% \changes{v1.1.4.0}{2022/04/16}{新建无编号章节并单独添加页眉和书签}
% 新建无编号章节并添加页眉和书签，多用于章节标题为2个汉字的情况。
% \begin{arguments}
%   \item 书签和页眉处。
%   \item 章节标题处。
% \end{arguments}
%    \begin{macrocode}
\cs_new:Npn \@@_n_chapter_head:nn #1#2
  {
    \@@_add_bookmark:n { #1 }
    \chapter*          { #2 }
    \markboth          { #1 } { }
  }
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\@@_n_chapter_head_ii:nnn}
% \changes{v1.2.1.0}{2022/04/19}{新建无编号章节并单独添加页眉和书签并单独设置标题样式}
% 新建无编号章节并添加页眉和书签并单独设置标题样式，多用于章节标题为2个汉字的情况。
% \begin{arguments}
%   \item 章节标题处。
%   \item 书签和页眉处。
%   \item 章节标题样式。
% \end{arguments}
%    \begin{macrocode}
\cs_new:Npn \@@_n_chapter_head_ii:nnn #1#2#3
  {
    \group_begin:
      \ctexset { chapter / format = { #3 } }
      \@@_n_chapter_head:nn { #1 } { #2 }
    \group_end:
  }
%    \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}{\@@_n_chapter_head_toc:nn}
% \changes{v1.1.4.0}{2022/04/16}{新建无编号章节并单独添加目录及页眉}
% 新建无编号章节并添加目录及页眉，多用于章节标题为2个汉字的情况。
% \begin{arguments}
%   \item 目录、书签、页眉处。
%   \item 章节标题处。
% \end{arguments}
%    \begin{macrocode}
\cs_new:Npn \@@_n_chapter_head_toc:nn #1#2
  {
    \@@_add_toc:n { #1 }
    \chapter* { #2 }
    \markboth { #1 } { }
  }
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\@@_n_chapter_head_toc_ii:nn}
% \changes{v1.28.1.0}{2022/06/18}{新建无编号章节并单独添加目录及页眉并单独设置标题样式}
% 新建无编号章节并单独添加目录及页眉并单独设置标题样式。
% \begin{arguments}
%   \item 目录、书签、页眉处。
%   \item 章节标题处。
% \end{arguments}
%    \begin{macrocode}
\cs_new:Npn \@@_n_chapter_head_toc_ii:nn #1#2
  {
    \group_begin:
      \ctexset { chapter / format = { #2 } }
      \@@_n_chapter_head_toc:n { #1 }
    \group_end:
  }
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\@@_typeout_keywords:nNn}
% \changes{v1.20.0.0}{2022/05/30}{允许关键词标签带格式}
% 排版关键词。
% \begin{arguments}
%   \item 标签名称。
%   \item 关键词列表。
%   \item 关键词分隔符。
% \end{arguments}
%    \begin{macrocode}
\cs_new:Npn \@@_typeout_keywords:nNn #1#2#3
  {
    \tl_clear_new:N \l_@@_keywords_label_str
    \tl_set:Nn \l_@@_keywords_label_tl { #1 }
    \dim_zero_new:N \l_@@_keywords_label_dim
    \@@_get_text_width:NV \l_@@_keywords_label_dim \l_@@_keywords_label_tl
    \begin { list } { \l_@@_keywords_label_tl }
      {
        \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}
%    \begin{macrocode}
%</thesis>
%<*thesis|xduugtp>
%    \end{macrocode}
% \begin{macro}{\@@_str_max_dim:Nn}
% \changes{v1.26.4.0}{2022/06/10}{计算字符串多大长度}
% 计算字符串多大长度。
% \begin{arguments}
%   \item 最大值长度。
%   \item 字符串。
% \end{arguments}
%    \begin{macrocode}
\dim_new:N \l_@@_str_dim
\box_new:N \l_@@_str_box
\cs_new:Npn \@@_str_max_dim:Nn #1#2
  {
    \hbox_set:Nn \l_@@_str_box { #2 }
    \dim_set:Nn \l_@@_str_dim { \box_wd:N \l_@@_str_box }
    \dim_set:Nn #1  { \dim_max:nn { \l_@@_str_dim } { #1 } }
  }
%    \end{macrocode}
% \end{macro}
%    \begin{macrocode}
%</thesis|xduugtp>
%<*thesis>
%    \end{macrocode}
% \subsection{额外命令}
% \begin{macro}{\noauxwrite}
% \changes{v1.15.0.0}{2022/05/13}{\tnx[]{noauxwrite}允许添加不影响现有引用列表顺序的引用}
% \tnx[]{noauxwrite}允许添加不影响现有引用列表顺序的引用。
%    \begin{macrocode}
\NewDocumentCommand \noauxwrite { m }
  {
    \if@filesw
      \@fileswfalse
      #1
      \@fileswtrue
    \else
      #1
    \fi
  }
%    \end{macrocode}
% \end{macro}
% \subsection{页面设置}
% \subsubsection{页面尺寸}
% \begin{macro}{\geometry,\newgeometry,\savegeometry}
% \changes{v2.14.1.0}{2022/11/21}{支持多行页眉}
% \changes{v1.5.1.0}{2022/05/01}{修正页脚高度}
% \changes{v1.5.2.0}{2022/05/02}{修正底部页边距高度}
% \changes{v1.26.8.0}{2022/06/13}{修正研究生页眉高度}
% 正文页面。
% \begin{description}
% \item[本科生] 上3、下2、内3、外2；装订线1；页眉2、页脚1。
% \item[研究生] 上3、\textbf{下2.5}、内2.5、外2.5；装订线0.5；页眉2、页脚$2.5-1.75=0.75$。
% 实测上3.14，headheight和headsep均为实测。
% \end{description}
%    \begin{macrocode}
\newgeometry
  {
%<*xduugthesis>
    top           = 3cm,
    bottom        = 2cm,
    inner         = 3cm,
    outer         = 2cm,
    bindingoffset = 1cm,
    head          = 2cm,
    foot          = 1cm
%</xduugthesis>
%<*xdupgthesis>
    top           = 3.14cm,
    bottom        = 2.5cm,
    inner         = 2.5cm,
    outer         = 2.5cm,
    bindingoffset = 0.5cm,
    headheight    = 60pt,
    headsep       = 10pt,
    foot          = 0.75cm
%</xdupgthesis>
  }
\savegeometry { main }
%    \end{macrocode}
% \changes{v1.5.1.0}{2022/05/01}{修正页脚高度}
% \changes{v1.5.2.0}{2022/05/02}{修正底部页边距高度}
% 左右对称正文页面。
% \begin{description}
% \item[本科生] 上3、下2、内3、外3；页眉2、页脚1。
% \item[研究生] 上3、\textbf{下2.5}、内2.75、外2.75；页眉2、页脚$2.5-1.75=0.75$。
% \end{description}
%    \begin{macrocode}
\newgeometry
  {
%<*xduugthesis>
    top    = 3cm,
    bottom = 2cm,
    inner  = 3cm,
    outer  = 3cm,
    head   = 2cm,
    foot   = 1cm
%</xduugthesis>
%<*xdupgthesis>
    top        = 3.14cm,
    bottom     = 2.5cm,
    inner      = 2.75cm,
    outer      = 2.75cm,
    headheight = 60pt,
    headsep    = 10pt,
    foot       = 0.75cm
%</xdupgthesis>
  }
\savegeometry { main-sym }
%    \end{macrocode}
% \changes{v0.10.3.0}{2022/04/14}{修复封面超页}
% 封面页面。
% \begin{description}
% \item[本科生] 上2.5、下2、内3、外2。
% \item[研究生] 上3、下1、内3、外2.5。
% \end{description}
%    \begin{macrocode}
\newgeometry
  {
%<*xduugthesis>
    top    = 2.5cm,
    bottom = 2cm,
    inner  = 3cm,
    outer  = 2cm
%</xduugthesis>
%<*xdupgthesis>
    top    = 3cm,
    bottom = 1cm,
    inner  = 3cm,
    outer  = 2.5cm
%</xdupgthesis>
  }
\savegeometry { cover }
%    \end{macrocode}
% \changes{v2.1.0.0}{2022/06/22}{无页边距页面}
% 无页边距页面。
%    \begin{macrocode}
%<*xdupgthesis>
\newgeometry  { margin = 0cm }
\savegeometry { nomargin     }
%</xdupgthesis>
%    \end{macrocode}
% \end{macro}
%    \begin{macrocode}
%</thesis>
%<*tp>
%    \end{macrocode}
% \changes{v4.1.0.0}{2022/12/31}{设置本科生毕业设计开题报告页边距}
% \begin{macro}{\newgeometry,\savegeometry,\loadgeometry}
% 设置本科生毕业设计开题报告页边距。
%    \begin{macrocode}
\newgeometry
  {
    left       = 3.17cm,
    right      = 3.17cm,
    top        = 2.54cm,
    bottom     = 2.54cm,
    footskip   = 0cm,
    headsep    = 0cm,
    headheight = 0cm
  }
\savegeometry { main }
\loadgeometry { main }
%    \end{macrocode}
% \end{macro}
%    \begin{macrocode}
%</tp>
%<*thesis>
%    \end{macrocode}
% \begin{macro}{\@@_load_main_geometry:}
% \changes{v0.8.0.0}{2022/04/12}{根据用户配置加载正文页边距配置}
% 根据用户配置加载正文页边距配置。
%    \begin{macrocode}
\cs_new:Npn \@@_load_main_geometry:
  {
    \bool_if:NTF \l_@@_sym_mgn_bool
      { \loadgeometry { main-sym } }
      { \loadgeometry { main     } }
  }
%    \end{macrocode}
% \end{macro}
% \subsubsection{页眉页脚}
% \begin{macro}
%   {
%     \@@_chinese:,
%     \@@_arabic:,
%     \@@_roman:,
%     \@@_Roman:,
%     \@@_alph:,
%     \@@_Alph:,
%     \@@_fnsymbol:
%   }
% \changes{v1.2.2.0}{2022/04/20}{定义序号转换函数}
% 定义序号转换函数。
%    \begin{macrocode}
\clist_map_inline:nn
  {
    { chinese  },
    { arabic   },
    { roman    },
    { Roman    },
    { alph     },
    { Alph     },
    { fnsymbol }
  }
  { \cs_new_eq:cc { @@ _ #1 : } { #1 } }
%    \end{macrocode}
% \end{macro}
% \begin{variable}{\l_@@_chaptername}
% \changes{v1.2.2.0}{2022/04/20}{页眉内部英文章节名}
% 页眉内部英文章节名。
%    \begin{macrocode}
\tl_set:Nn \chaptername { Chapter }
\tl_new:N \l_@@_chaptername
\tl_set_eq:NN \l_@@_chaptername \chaptername
%    \end{macrocode}
% \end{variable}
% \begin{macro}{\chaptermark}
% 设置奇数页页眉为章标题。
%    \begin{macrocode}
\renewcommand { \chaptermark } [ 1 ]
  {
    \markboth
      {
        \@@_lang_switch:nn
          { \CTEXthechapter }
          { \l_@@_chaptername \space \@@_Roman: { chapter } }
        \quad #1
      }
      { }
  }
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\fancypagestyle}
% \changes{v0.1.1.0}{2022/04/03}{修正页眉字号}
% \changes{v1.6.0.0}{2022/05/02}{设置页脚页码}
% \changes{v1.7.0.0}{2022/05/02}{设置页眉}
% \changes{v1.26.9.0}{2022/06/13}{修正页眉文字和双横线高度}
% \changes{v2.8.0.0}{2022/06/26}{研究生学位论文支持移除页眉}
% \changes{v2.9.0.0}{2022/06/26}{研究生学位论文支持移除页脚}
% \changes{v2.9.1.0}{2022/06/26}{研究生学位论文支持移除页眉双横线}
% 设置正文页眉页脚。
% \begin{description}
% \item[本科生] 页眉：宋体五号，居中排列。左面页眉为论文题目，右面页眉为章次和章标题。页眉底划线的宽度为0.75磅。页码：宋体小五号，排在页眉行的最外侧，不加任何修饰。
% \item[研究生] 页眉设置：单面页码页眉标题为章节题目，每一章节的起始页必须在单面页码，双面页码页眉标题统一为“西安电子科技大学博/硕士学位论文”，页眉标题居中排列，字体为宋体，字号为五号。页眉文字下添加双横线，双横线宽度为0.5磅。页眉的“西安电子科技大学博士/硕士学位论文”统一翻译成：Doctoral Dissertation of XIDIAN UNIVERSITY/Master Thesis of XIDIAN UNIVERSITY。页码设置：前置部分的页码用罗马数字标识，字体为Times New Roman，字号为小五号；主体部分的页码用阿拉伯数字标识，字体为宋体，字号为小五号。页码统一居于页面底端中部，不加任何修饰。
% \end{description}
%    \begin{macrocode}
\fancypagestyle { plain }
  {
    \pagestyle { fancy }
    \fancyhf { }
%<*xduugthesis>
    \fancyhead [ CE ] { \@@_rm_family: \zihao { 5  } \l_@@_pure_title_tl }
    \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 }
%</xduugthesis>
%<*xdupgthesis>
    \bool_if:NF \l_@@_rm_header_bool
      {
        \fancyhead [ CE ] { \@@_rm_family: \zihao { 5  } \l_@@_header_str     }
        \fancyhead [ CO ] { \@@_rm_family: \zihao { 5  } \leftmark            }
      }
    \bool_if:NTF \l_@@_rm_footer_bool
      { \fancyfoot [ C ] { } }
      { \fancyfoot [ C ] { \@@_rm_family: \zihao { -5 } \thepage } }
    \cs_set:Npn \headrulewidth { 0.5pt }
    \bool_if:NTF \l_@@_rm_header_bool
      { \cs_set:Npn \headrule { } }
      {
        \cs_set:Npn \headrule
          {
            \hrule \@height 0pt
            \skip_vertical:N 2pt
            \hrule \@height \headrulewidth
            \skip_vertical:N \headrulewidth
            \hrule \@height \headrulewidth
            \skip_vertical:N -\headrulewidth
          }
      }
%</xdupgthesis>
  }
%<*xdupgthesis>
\fancypagestyle { front }
  {
    \pagestyle { plain }
    \bool_if:NTF \l_@@_rm_footer_bool
      { \fancyfoot [ C ] { } }
      { \fancyfoot [ C ] { \rmfamily \zihao { -5 } \thepage } }
  }
%</xdupgthesis>
%    \end{macrocode}
% \end{macro}
% \subsubsection{对齐方式}
% \begin{macro}{\raggedbottom,\flushbottom}
% \changes{v1.13.0.0}{2022/05/08}{设置页面垂直方向的对齐方式}
%    \begin{macrocode}
\ctex_at_end_preamble:n
  {
    \tl_if_eq:NnTF \l_@@_page_v_align_tl { 顶部对齐 }
      { \raggedbottom }
      { \flushbottom  }
  }
%    \end{macrocode}
% \end{macro}
%    \begin{macrocode}
%</thesis>
%<*xduugthesis>
%    \end{macrocode}
% \subsection{标题设置}
% \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 { 第 } { \l_@@_chaptername \space },
        \@@_lang_switch:nn { 章 } { }
      },
    section       / name = { },
    subsection    / name = { },
    subsubsection / name = { },
    paragraph     / name = { },
    subparagraph  / name = { }
  }
%    \end{macrocode}
% \end{macro}
% \paragraph{章节编号}
% \begin{macro}{\ctexset}
% \changes{v1.2.1.0}{2022/04/19}{修正英文论文标题序号}
% 设置章节编号的数字输出格式。
%    \begin{macrocode}
\ctex_at_end_preamble:n
  {
    \@@_lang_switch:nn
      {
        \ctexset
          {
            chapter       / number = { \chinese { chapter } },
            section       / number = { \thesection          },
            subsection    / number = { \thesubsection       },
            subsubsection / number = { \thesubsubsection    },
            paragraph     / number = { \theparagraph        },
            subparagraph  / number = { \thesubparagraph     }
          }
      }
      {
        \ctexset
          {
            chapter       / number = { \Roman { chapter }           },
            section       / number = { \thesection                  },
            subsection    / number = { \thesubsection               },
            subsubsection / number = { ( \roman { subsubsection } ) },
            paragraph     / number = { ( \alph { paragraph } )      },
            subparagraph  / number = { ( \arabic { subparagraph } ) }
          }
      }
  }
%    \end{macrocode}
% \end{macro}
% \paragraph{章节和标题}
% \begin{macro}{\@@_zh_t:nnn}
% 设置中文章节名字和随后的标题内容格式。
% \begin{arguments}
%   \item 字体族。
%   \item 字号。
%   \item 位置。
% \end{arguments}
%    \begin{macrocode}
\cs_new:Npn \@@_zh_t:nnn #1#2#3
  {
    \use:c { @@_ #1 _family : }
    \zihao { \use:c { l_@@_ #2 _tl } }
    \str_if_eq:ccTF { #3 } { c }
      { \centering   }
      { \raggedright }
  }
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\@@_en_t:nnn}
% \changes{v4.4.0.0}{2023/02/03}{本科生英文毕业设计所有级别标题中数学字体加粗}
% \changes{v1.2.1.0}{2022/04/19}{英文章节样式增加位置参数}
% 设置英文章节名字和随后的标题内容格式。
% \begin{arguments}
%   \item 字号。
%   \item 位置。
% \end{arguments}
%    \begin{macrocode}
\cs_new:Npn \@@_en_t:nn #1#2
  {
    \rmfamily
    \zihao { \use:c { l_@@_ #1 _tl } }
    \bfseries \@@_bold_math:
    \str_if_eq:ccTF { #2 } { c }
      { \centering   }
      { \raggedright }
  }
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\ctexset}
% \changes{v4.4.0.0}{2023/02/03}{本科生毕业设计一级标题中数学字体加粗}
% \changes{v0.7.0.0}{2022/04/11}{自定义章节标题字号}
% 设置章节名字和随后的标题内容格式。
%    \begin{macrocode}
\ctex_at_end_preamble:n
  {
    \@@_lang_switch:nn
      {
        \@@_tl_set_if_empty:Nn \l_@@_chap_tl      { 3 }
        \@@_tl_set_if_empty:Nn \l_@@_sec_tl       { 4 }
        \@@_tl_set_if_empty:Nn \l_@@_subsec_tl    { 4 }
        \@@_tl_set_if_empty:Nn \l_@@_subsubsec_tl { 4 }
        \@@_tl_set_if_empty:Nn \l_@@_para_tl      { 4 }
        \@@_tl_set_if_empty:Nn \l_@@_subpara_tl   { 4 }
        \ctexset
          {
            chapter       / format = { \@@_zh_t:nnn { sf } { chap      } { c } \@@_bold_math: },
            section       / format = { \@@_zh_t:nnn { rm } { sec       } { c } },
            subsection    / format = { \@@_zh_t:nnn { rm } { subsec    } { l } },
            subsubsection / format = { \@@_zh_t:nnn { rm } { subsubsec } { l } },
            paragraph     / format = { \@@_zh_t:nnn { rm } { para      } { l } },
            subparagraph  / format = { \@@_zh_t:nnn { rm } { subpara   } { l } }
          }
      }
      {
        \@@_tl_set_if_empty:Nn \l_@@_chap_tl      { 3  }
        \@@_tl_set_if_empty:Nn \l_@@_sec_tl       { 4  }
        \@@_tl_set_if_empty:Nn \l_@@_subsec_tl    { -4 }
        \@@_tl_set_if_empty:Nn \l_@@_subsubsec_tl { -4 }
        \@@_tl_set_if_empty:Nn \l_@@_para_tl      { -4 }
        \@@_tl_set_if_empty:Nn \l_@@_subpara_tl   { -4 }
        \ctexset
          {
            chapter       / format = { \@@_en_t:nn { chap      } { c } },
            section       / format = { \@@_en_t:nn { sec       } { l } },
            subsection    / format = { \@@_en_t:nn { subsec    } { l } },
            subsubsection / format = { \@@_en_t:nn { subsubsec } { l } },
            paragraph     / format = { \@@_en_t:nn { para      } { l } },
            subparagraph  / format = { \@@_en_t:nn { subpara   } { l } }
          }
      }
  }
%    \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}
%    \begin{macrocode}
%</xduugthesis>
%<*xdupgthesis>
%    \end{macrocode}
% \changes{v1.27.0.0}{2022/06/18}{研究生学位论文章节标题样式}
% \subsubsection{研究生}
% \paragraph{章节层次}
% \begin{macro}{\ctexset}
% 设置章节层次为subparagraph。
%    \begin{macrocode}
\ctexset { secnumdepth=5 }
%    \end{macrocode}
% \end{macro}
% \paragraph{章节名字}
% \begin{macro}{\ctexset}
% \changes{v1.29.2.0}{2022/06/19}{修正英文研究生学位论文一级标题名称}
% 设置章节的名字。
%    \begin{macrocode}
\ctex_at_end_preamble:n
  {
    \@@_lang_switch:nn
      { \ctexset { chapter / name = { 第, 章        } } }
      { \ctexset { chapter / name = { Chapter\space } } }
  }
\ctexset
  {
    section       / name = {        },
    subsection    / name = {        },
    subsubsection / name = { （, ） },
    paragraph     / name = { （, ） },
    subparagraph  / name = { （, ） }
  }
%    \end{macrocode}
% \end{macro}
% \paragraph{章节编号}
% \begin{macro}{\ctexset}
% \changes{v1.29.2.0}{2022/06/19}{修正英文研究生学位论文一级标题数字输出格式}
% 设置章节编号的数字输出格式。
%    \begin{macrocode}
\ctex_at_end_preamble:n
  {
    \@@_lang_switch:nn
      { \ctexset { chapter / number = { \chinese { chapter } } } }
      { \ctexset { chapter / number = { \Roman   { chapter } } } }
  }
\ctexset
  {
    section       / number = { \thesection               },
    subsection    / number = { \thesubsection            },
    subsubsection / number = { \arabic { subsubsection } },
    paragraph     / number = { \alph { paragraph }       },
    subparagraph  / number = { \roman { subparagraph }   }
  }
%    \end{macrocode}
% \end{macro}
% \paragraph{章节格式}
% \begin{macro}
%   {
%     \@@_sec_format_i:n,
%     \@@_sec_format_ii:,
%     \@@_sec_format_iii:,
%     \ctexset
%   }
% \changes{v4.4.0.0}{2023/02/03}{研究生学位论文标题中数学字体加粗}
% \changes{v1.29.2.0}{2022/06/19}{修正英文研究生学位论文一级标题字体}
% 设置章节名字和随后的标题内容格式。
%    \begin{macrocode}
\cs_new:Npn \@@_sec_format_i:n #1
  {
    \@@_rm_family:
    \bfseries \@@_bold_math:
    \zihao { #1 }
    \dim_set:Nn \baselineskip { 20pt }
  }
\cs_new:Npn \@@_sec_format_ii:
  {
    \@@_sf_family:
    \centering
    \@@_bold_math:
    \zihao { 3 }
    \dim_set:Nn \baselineskip { 20pt }
  }
\cs_new:Npn \@@_sec_format_iii:
  { \@@_rm_family: \centering \zihao { 3 } \dim_set:Nn \baselineskip { 20pt } }
\ctex_at_end_preamble:n
  {
    \@@_lang_switch:nn
      { \ctexset { chapter / format = { \@@_sec_format_ii:  } } }
      { \ctexset { chapter / format = { \@@_sec_format_iii: } } }
  }
\ctexset
  {
    section       / format = { \@@_sec_format_i:n { -3 } },
    subsection    / format = { \@@_sec_format_i:n { 4  } },
    subsubsection / format = { \@@_sec_format_i:n { 4  } },
    paragraph     / format = { \@@_sec_format_i:n { 4  } },
    subparagraph  / format = { \@@_sec_format_i:n { 4  } }
  }
%    \end{macrocode}
% \end{macro}
% \paragraph{章节编号与标题间距}
% \begin{macro}{\ctexset}
% 设置章节编号与标题间距。
%    \begin{macrocode}
\ctexset
  {
    chapter       / aftername = { \quad   },
    section       / aftername = { \enskip },
    subsection    / aftername = { \enskip },
    subsubsection / aftername = { },
    paragraph     / aftername = { },
    subparagraph  / aftername = { }
  }
%    \end{macrocode}
% \end{macro}
% \paragraph{章节缩进}
% \begin{macro}{\ctexset}
% 设置章节标题本身的首行缩进。
%    \begin{macrocode}
\ctexset
  {
    chapter       / indent = { 0bp  },
    section       / indent = { 0bp  },
    subsection    / indent = { 24bp },
    subsubsection / indent = { 24bp },
    paragraph     / indent = { 24bp },
    subparagraph  / indent = { 24bp }
  }
%    \end{macrocode}
% \end{macro}
% \paragraph{章节间距}
% \begin{macro}{\ctexset}
% 设置章节标题前后的垂直间距。
%    \begin{macrocode}
\ctexset
  {
    chapter       / beforeskip = { 6pt  },
    section       / beforeskip = { 18pt },
    subsection    / beforeskip = { 12pt },
    subsubsection / beforeskip = { 12pt },
    paragraph     / beforeskip = { 12pt },
    subparagraph  / beforeskip = { 12pt },
    chapter       / afterskip  = { 18pt },
    section       / afterskip  = { 12pt },
    subsection    / afterskip  = { 6pt  },
    subsubsection / afterskip  = { 6pt  },
    paragraph     / afterskip  = { 6pt  },
    subparagraph  / afterskip  = { 6pt  }
  }
%    \end{macrocode}
% \end{macro}
%    \begin{macrocode}
%</xdupgthesis>
%<*thesis>
%    \end{macrocode}
% \subsection{目录}
% \begin{macro}{\RequirePackage}
% \changes{v0.4.1.0}{2022/04/05}{设置目录样式}
% \changes{v1.14.1.0}{2022/05/10}{使用\tnx{PassOptionsToPackage}传递\pkgx{tocloft}宏包参数}
% 设置目录样式。
%    \begin{macrocode}
\PassOptionsToPackage { titles } { tocloft }
\RequirePackage { tocloft }
%    \end{macrocode}
% \end{macro}
%    \begin{macrocode}
%</thesis>
%<*xduugthesis>
%    \end{macrocode}
% \subsubsection{本科生}
% \begin{variable}{\cftchapleader}
% 修改目录中一级标题引导点。
%    \begin{macrocode}
\cs_set:Npn \cftchapleader { \bfseries \cftdotfill { \cftdotsep } }
%    \end{macrocode}
% \end{variable}
% \begin{variable}
%   {
%     \cftbeforechapskip,
%     \cftbeforesecskip
%   }
% \changes{v1.10.1.0}{2022/05/04}{修正目录条目间距}
% 设置一级标题与其余各级标题条目前垂直间距一致。
%    \begin{macrocode}
\dim_set_eq:NN \cftbeforechapskip \cftbeforesecskip
%    \end{macrocode}
% \end{variable}
% \begin{variable}
%   {
%     \cftchapfont,
%     \cftchappagefont
%   }
% \changes{v4.4.0.0}{2023/02/03}{本科生毕业设计目录一级标题中数学字体加粗}
% 设置一级标题及相应页码字体字号。
%    \begin{macrocode}
\clist_map_inline:nn
  {
    \cftchapfont,
    \cftchappagefont
  }
  { \renewcommand { #1 } { \@@_rm_family: \zihao { -4 } \bfseries \@@_bold_math: } }
%    \end{macrocode}
% \end{variable}
% \begin{variable}
%   {
%     \cftsecfont,,
%     \cftsubsecfont,,
%     \cftsubsubsecfont,,
%     \cftparafont,,
%     \cftsubparafont,,
%     \cftsecpagefont,,
%     \cftsubsecpagefont,,
%     \cftsubsubsecpagefont,,
%     \cftparapagefont,,
%     \cftsubparapagefont
%   }
% 设置二三四五六级标题及相应页码字体字号。
%    \begin{macrocode}
\clist_map_inline:nn
  {
    \cftsecfont,
    \cftsubsecfont,
    \cftsubsubsecfont,
    \cftparafont,
    \cftsubparafont,
    \cftsecpagefont,
    \cftsubsecpagefont,
    \cftsubsubsecpagefont,
    \cftparapagefont,
    \cftsubparapagefont
  }
  { \renewcommand { #1 } { \@@_rm_family: \zihao { -4 } } }
%    \end{macrocode}
% \end{variable}
%    \begin{macrocode}
%</xduugthesis>
%<*xdupgthesis>
%    \end{macrocode}
% \changes{v1.28.0.0}{2022/06/18}{研究生学位论文目录样式}
% \subsubsection{研究生}
% \begin{variable}{\cftdotsep}
% 修改引导点之间的距离。
%    \begin{macrocode}
\cs_set:Npn \cftdotsep { 0 }
%    \end{macrocode}
% \end{variable}
% \begin{variable}{\cftchapleader}
% 修改目录中一级标题引导点。
%    \begin{macrocode}
\cs_set:Npn \cftchapleader { \cftdotfill { \cftdotsep } }
%    \end{macrocode}
% \end{variable}
% \begin{variable}
%   {
%     \cftbeforechapskip,
%     \cftbeforesecskip
%   }
% 设置一级标题与其余各级标题条目前垂直间距一致。
%    \begin{macrocode}
\dim_set_eq:NN \cftbeforechapskip \cftbeforesecskip
%    \end{macrocode}
% \end{variable}
% \begin{variable}{\cftchapfont}
% \changes{v4.4.0.0}{2023/02/03}{中文研究生学位论文目录中一级标题中数学字体加粗}
% \changes{v1.29.2.0}{2022/06/19}{修正英文研究生学位论文目录中一级标题字体}
% 设置一级标题字体字号。
%    \begin{macrocode}
\ctex_at_end_preamble:n
  {
    \@@_lang_switch:nn
      { \cs_set:Npn \cftchapfont { \@@_sf_family: \@@_bold_math: \zihao { -4 } } }
      { \cs_set:Npn \cftchapfont { \@@_rm_family: \zihao { -4 } } }
  }
%    \end{macrocode}
% \end{variable}
% \begin{variable}
%   {
%     \cftsecfont,
%     \cftsubsecfont,
%     \cftchappagefont,
%     \cftsecpagefont,
%     \cftsubsecpagefont
%   }
% 设置二三级标题及一二三级标题页码字体字号。
%    \begin{macrocode}
\clist_map_inline:nn
  {
    \cftsecfont,
    \cftsubsecfont,
    \cftchappagefont,
    \cftsecpagefont,
    \cftsubsecpagefont
  }
  { \renewcommand { #1 } { \@@_rm_family: \zihao { -4 } } }
%    \end{macrocode}
% \end{variable}
%    \begin{macrocode}
%</xdupgthesis>
%<*thesis>
%    \end{macrocode}
% \subsection{文件配置}
% \begin{macro}
%   {
%     \input,
%     \include,
%     \includegraphics
%   }
% \changes{v2.12.0.0}{2022/07/01}{配置文件搜索路径}
% 配置文件搜索路径。
%    \begin{macrocode}
\ctex_at_end_preamble:n
  {
    \seq_if_empty:NF \l_@@_search_path_clist
      {
        \clist_map_inline:Nn \l_@@_search_path_clist
          { \seq_put_right:Nn \l_file_search_path_seq { #1 } }
      }
    \bool_if:NT \l_@@_fix_input_bool
      {
        \cs_new_eq:NN \@@_org_input:n \input
        \RenewDocumentCommand { \input } { m }
          { \@@_org_input:n { ./ #1 } }
      }
    \bool_if:NT \l_@@_fix_include_bool
      {
        \cs_new_eq:NN \@@_org_include:n \include
        \RenewDocumentCommand { \include } { m }
          { \@@_org_include:n { ./ #1 } }
      }
    \bool_if:NT \l_@@_fix_graphics_bool
      {
        \cs_new_eq:NN \@@_org_includegraphics:n \includegraphics
        \RenewDocumentCommand { \includegraphics } { o m }
          {
            \IfNoValueTF { #1 }
              { \@@_org_includegraphics:n        { ./ #2 } }
              { \@@_org_includegraphics:n [ #1 ] { ./ #2 } }
          }
      }
  }
%    \end{macrocode}
% \end{macro}
% \subsection{公式}
% \begin{macro}{\theequation}
% 重定义公式编号样式。
%    \begin{macrocode}
\renewcommand { \theequation } { \thechapter - \arabic { equation } }
%    \end{macrocode}
% \end{macro}
% \subsection{浮动体}
% \begin{variable}
%   {
%     \topfraction,
%     \floatpagefraction
%   }
% \changes{v2.11.0.0}{2022/06/30}{限制浮动环境占用大小}
% 限制浮动环境占用大小。
%    \begin{macrocode}
\cs_set:Npn \topfraction       { .8 }
\cs_set:Npn \floatpagefraction { .8 }
%    \end{macrocode}
% \end{variable}
% \subsection{算法}
% \begin{macro}{\ALG@name,\algorithmcfname}
% \changes{v1.1.1.0}{2022/04/15}{汉化算法标签名称}
% 算法标签名称。
%    \begin{macrocode}
\ctex_at_end_preamble:n
  {
    \clist_map_inline:nn
      {
        { \algorithmname   },
        { \ALG@name        },
        { \algorithmcfname }
      }
      { \cs_set:Npn #1 { \@@_lang_switch:nn { 算法 } { Algorithm } } }
  }
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\thealgorithm,\floatplacement}
% \changes{v0.10.1.0}{2022/04/13}{重定义算法编号样式}
% \changes{v0.10.2.0}{2022/04/14}{修正算法环境未加载导致的无法编译}
% \changes{v0.10.4.0}{2022/04/14}{修正\pkgx{algorithm}算法编号样式}
% \changes{v1.0.1.0}{2022/04/14}{修改\pkgx{algorithm}算法浮动体默认浮动位置}
% \changes{v1.1.2.0}{2022/04/15}{检测是否加载\pkgx{algorithm}}
% 重定义\pkgx{algorithm}宏包算法编号样式并修改默认浮动位置。
%    \begin{macrocode}
\PassOptionsToPackage { chapter } { algorithm }
\ctex_at_end_preamble:n
  {
    \@ifpackageloaded { algorithm }
      {
        \cs_if_exist:NT \thealgorithm
          {
            \floatplacement { algorithm } { tbp }
            \cs_set:Npn \thealgorithm { \thechapter . \arabic { algorithm } }
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\renewenvironment}
% \changes{v1.1.0.0}{2022/04/15}{设置\pkgx{algorithm}算法内容字号}
% 设置\pkgx{algorithm}算法内容字号。
%    \begin{macrocode}
            \bool_if:NT \l_@@_alg_small_bool
              {
                \renewenvironment { algorithm }
                  {
                    \@nameuse { fst@algorithm }
                    \@float@setevery { algorithm }
                    \ctex_gadd_ltxhook:nn
                      { cmd/@floatboxreset/after }
                      { \zihao { 5 } }
                    \@float { algorithm }
                  }
                  { \float@end }
              }
          }
      }
      { }
  }
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\thealgocf}
% \changes{v0.10.4.0}{2022/04/14}{修正\pkgx{algorithm2e}算法编号样式}
% \changes{v1.1.2.0}{2022/04/15}{检测是否加载\pkgx{algorithm2e}[]}
% 重定义\pkgx{algorithm2e}宏包算法编号样式。
%    \begin{macrocode}
\PassOptionsToPackage { algochapter } { algorithm2e }
\ctex_at_end_preamble:n
  {
    \@ifpackageloaded { algorithm2e }
      {
        \cs_if_exist:NT \thealgocf
          {
            \cs_set:Npn \thealgocf { \thechapter . \arabic { algocf } }
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\renewenvironment}
% \changes{v1.0.3.0}{2022/04/15}{修改\pkgx{algorithm2e}算法浮动体默认浮动位置}
% 修改\pkgx{algorithm2e}算法浮动体默认浮动位置。
%    \begin{macrocode}
            \renewenvironment { \algocf@envname } [ 1 ] [ tbp ]
              {
                \setboolean { algocf@algostar } { false }
                \setboolean { algocf@procenvironment } { false }
                \gdef \algocfautorefname { \algorithmautorefname }
                \begin { algocf@algorithm } [ #1 ] \ignorespaces
              }
              { \end { algocf@algorithm } \ignorespacesafterend }
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\SetAlFnt}
% \changes{v1.1.0.0}{2022/04/15}{设置\pkgx{algorithm2e}算法内容字号}
% 设置\pkgx{algorithm2e}算法内容字号。
%    \begin{macrocode}
            \bool_if:NT \l_@@_alg_small_bool
              { \SetAlFnt { \zihao { 5 } } }
          }
      }
      { }
  }
%    \end{macrocode}
% \end{macro}
% \subsection{Caption}
% \begin{macro}{\DeclareCaptionLabelSeparator,\DeclareCaptionFont,\captionsetup}
% \changes{v6.0.1.0}{2023/03/03}{修正子图子表caption垂直间距}
% \changes{v5.2.0.0}{2023/02/23}{设置图表caption前后垂直间距}
% \changes{v3.0.0.0}{2022/12/03}{设置图表caption格式}
% \changes{v2.17.0.0}{2022/11/28}{设置图表caption格式}
% \changes{v0.1.2.0}{2022/04/03}{设置图片标签与后面标题之间的间距}
% \changes{v0.1.3.0}{2022/04/03}{设置图片标签与标题字体字号}
% \changes{v2.10.1.0}{2022/06/26}{修复算法标签与标题字体字号警告}
% 设置图表标签与后面标题之间的间距及caption字体字号。
%    \begin{macrocode}
\PassOptionsToPackage { ruled } { caption }
\RequirePackage { caption }
\DeclareCaptionLabelSeparator { customskip } { \hskip \l_@@_cap_label_sep_tl }
\DeclareCaptionFont { customfont   } { \@@_rm_family: \zihao { 5 } }
\captionsetup
  {
    strut    = off,
    labelsep = customskip,
    font     = customfont
  }
\captionsetup [ subfigure ] { strut = on, skip = 0pt }
\captionsetup [ subtable  ] { strut = on, skip = 0pt }
\dim_set_eq:NN \intextsep \abovecaptionskip
\ctex_at_end_preamble:n
  {
    \tl_if_eq:NnTF \l_@@_ft_cap_format_tl { hang }
      { \captionsetup { format = hang  } }
      { \captionsetup { format = plain } }
    \tl_if_eq:NnTF \l_@@_ft_cap_align_tl { left }
      { \captionsetup { singlelinecheck = false, justification = justified } }
      {
        \tl_if_eq:NnTF \l_@@_ft_cap_align_tl { centering }
          { \captionsetup { singlelinecheck = false, justification = centerlast } }
          { \captionsetup { singlelinecheck = true, justification = justified   } }
      }
  }
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\DeclareCaptionFont,\captionsetup*}
% \changes{v4.4.2.0}{2023/02/06}{修正\pkgx{algorithm}算法caption对齐方式}
% \changes{v3.1.1.0}{2022/12/04}{修正\pkgx{algorithm}算法caption格式设置}
% \changes{v3.0.0.0}{2022/12/03}{设置\pkgx{algorithm}算法caption格式}
% \changes{v2.18.0.0}{2022/11/28}{设置\pkgx{algorithm}算法caption对齐方式}
% \changes{v2.17.0.0}{2022/11/28}{设置\pkgx{algorithm}算法caption格式}
% \changes{v1.0.4.0}{2022/04/15}{设置\pkgx{algorithm}算法标签与标题字体字号及标签与后面标题之间的间距}
% \changes{v1.1.3.0}{2022/04/15}{修正\pkgx{algorithm}算法标签字体系列}
% \changes{v2.6.0.0}{2022/06/25}{设置\pkgx{algorithm}算法Caption字号是否为五号}
% 设置\pkgx{algorithm}算法标签与标题字体字号及标签与后面标题之间的间距。
%    \begin{macrocode}
\DeclareCaptionFont { algcustomfont }
  {
    \@@_rm_family:
    \bool_if:NTF \l_@@_alg_small_cap_bool
      { \zihao { 5  } }
      { \zihao { -4 } }
  }
\captionsetup* [ algorithm ]
  {
    labelsep  = customskip,
    labelfont = algcustomfont,
    font      = algcustomfont
  }
\ctex_at_end_preamble:n
  {
    \tl_if_eq:NnTF \l_@@_alg_cap_format_tl { hang }
      { \captionsetup* [ algorithm ] { format = hang  } }
      { \captionsetup* [ algorithm ] { format = plain } }
    \captionsetup* [ ruled ] { strut = off }
    \tl_if_eq:NnTF \l_@@_alg_cap_align_tl { left }
      {
        \captionsetup* [ algorithm ]
          { singlelinecheck = false, justification = justified }
      }
      {
        \tl_if_eq:NnTF \l_@@_alg_cap_align_tl { centering }
          {
            \captionsetup* [ algorithm ]
              { singlelinecheck = false, justification = centerlast }
          }
          {
            \captionsetup* [ ruled     ] { singlelinecheck = true    }
            \captionsetup* [ algorithm ] { justification = justified }
          }
      }
  }
%    \end{macrocode}
% \end{macro}
% \changes{v4.4.1.0}{2023/02/06}{修正\pkgx{algorithm}算法三线间距配置}
% \changes{v3.1.0.0}{2022/12/03}{设置\pkgx{algorithm}算法三线间距}
% \begin{macro}{\ctex_at_end_preamble:n}
% 设置\pkgx{algorithm}算法三线间距。
%    \begin{macrocode}
\ctex_at_end_preamble:n
  {
    \bool_if:NT \l_@@_add_alg_rule_vspace_bool
      {
        \@ifpackageloaded { algorithm }
          {
            \cs_set:Npn \fs@ruled
              {
                \cs_set_eq:NN \@fs@capt \floatc@plain
                \cs_set:Npn   \@fs@pre  { \hrule height .8pt depth 0pt \kern 5pt }
                \cs_set:Npn   \@fs@post { \kern 5pt \hrule \relax                }
                \cs_set:Npn   \@fs@mid  { \kern 5pt \hrule \kern 5pt             }
                \cs_set_eq:NN \@fs@iftopcapt \iftrue
              }
          }
          { }
      }
  }
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\SetAlgoCaptionSeparator,\SetAlCapNameFnt,\SetAlCapFnt}
% \changes{v2.18.0.0}{2022/11/29}{设置\pkgx{algorithm2e}算法caption对齐方式}
% \changes{v2.17.0.0}{2022/11/28}{设置\pkgx{algorithm2e}算法caption格式}
% \changes{v1.0.0.0}{2022/04/14}{修正\pkgx{algorithm2e}算法标签与后面标题之间的间距}
% \changes{v1.0.4.0}{2022/04/15}{修正\pkgx{algorithm2e}算法标签与标题字体字号}
% \changes{v2.6.0.0}{2022/06/25}{设置\pkgx{algorithm2e}算法Caption字号是否为五号}
% 设置\pkgx{algorithm2e}算法标签与标题字体字号及标签与后面标题之间的间距。
%    \begin{macrocode}
\ctex_at_end_preamble:n
  {
    \@ifpackageloaded { algorithm2e }
      {
        \SetAlgoCaptionSeparator { \hbox_to_wd:nn { \l_@@_cap_label_sep_tl } { } }
        \bool_if:NTF \l_@@_alg_small_cap_bool
          {
            \SetAlCapNameFnt         { \@@_rm_family: \zihao { 5  } }
            \SetAlCapFnt             { \@@_rm_family: \zihao { 5  } }
          }
          {
            \SetAlCapNameFnt         { \@@_rm_family: \zihao { -4 } }
            \SetAlCapFnt             { \@@_rm_family: \zihao { -4 } }
          }
        \SetAlCapSty { }
%    \end{macrocode}
% 设置\pkgx{algorithm2e}算法caption格式及对齐方式。
%    \begin{macrocode}
        \RenewDocumentCommand { \algocf@makecaption } { mm }
          {
            \box_clear_new:N \l_@@_algiie_capt_box
            \hbox_set:Nn \l_@@_algiie_capt_box
              { \AlCapFnt #1 \algocf@capseparator \AlCapNameFnt #2 }
            \dim_compare:nNnTF { \box_wd:N \l_@@_algiie_capt_box } > { \hsize }
              {
                \tl_if_eq:NnTF \l_@@_alg_cap_format_tl { hang }
                  {
                    \tl_if_eq:NnTF \l_@@_alg_cap_align_tl { centering }
                      {
                        \makebox { \AlCapFnt #1 \algocf@capseparator }
                        \makebox
                          {
                            \parbox [ t ] { \hsize }
                              { \centering \AlCapNameFnt #2 }
                          }
                      }
                      {
                        \makebox { \AlCapFnt #1 \algocf@capseparator }
                        \makebox { \parbox [ t ] { \hsize } { \AlCapNameFnt #2 } }
                      }
                  }
                  {
                    \tl_if_eq:NnTF \l_@@_alg_cap_align_tl { centering }
                      {
                        \parbox { \columnwidth }
                          { \centering \AlCapFnt #1 \algocf@capseparator \AlCapNameFnt #2 }
                      }
                      {
                        \parbox { \columnwidth }
                          { \AlCapFnt #1 \algocf@capseparator \AlCapNameFnt #2 }
                      }
                  }
              }
              {
                \tl_if_eq:NnTF \l_@@_alg_cap_align_tl { left }
                  {
                    \parbox { \columnwidth }
                      { \AlCapFnt #1 \algocf@capseparator \AlCapNameFnt #2 }
                  }
                  {
                    \parbox { \columnwidth }
                      { \centering \AlCapFnt #1 \algocf@capseparator \AlCapNameFnt #2 }
                  }
              }
          }
        \RenewDocumentCommand { \algocf@makecaption@ruled } { mm }
          { \global \sbox \algocf@capbox { \algocf@makecaption { #1 } { #2 } } }
        \RenewDocumentCommand { \algocf@makecaption@boxed } { mm }
          { \global \sbox \algocf@capbox { \algocf@makecaption { #1 } { #2 } } }
      }
      { }
  }
%    \end{macrocode}
% \end{macro}
% \changes{v4.4.1.0}{2023/02/06}{修正\pkgx{algorithm2e}算法三线间距配置}
% \changes{v3.1.0.0}{2022/12/03}{设置\pkgx{algorithm2e}算法三线间距}
% \begin{macro}{\ctex_at_end_preamble:n}
% 设置\pkgx{algorithm2e}算法三线间距。
%    \begin{macrocode}
\ctex_at_end_preamble:n
  {
    \bool_if:NT \l_@@_add_alg_rule_vspace_bool
      {
        \@ifpackageloaded { algorithm2e }
          {
            \dim_set:Nn \interspacetitleruled { 5pt }
            \dim_set:Nn \interspacealgoruled  { 5pt }
          }
          { }
      }
  }
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\@@_tblr_caption_box:n}
% \changes{v2.16.2.0}{2022/11/27}{\envx[]{longtblr}环境整页宽的caption盒子}
% \pkgx[]{tabularray}中\envx{longtblr}环境整页宽的caption盒子。
%    \begin{macrocode}
\cs_new:Npn \@@_tblr_caption_box:n #1
  { \makebox [ \tablewidth ] { \parbox { \columnwidth } { #1 } } }
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\SetTblrStyle,\DefTblrTemplate}
% \changes{v5.2.0.0}{2023/02/23}{适配\pkgx{tabularray}宏包caption前后垂直间距}
% \changes{v2.17.0.0}{2022/11/28}{设置\pkgx{tabularray}中\envx{longtblr}环境caption格式}
% \changes{v2.16.3.0}{2022/11/27}{适配不同语言下的\envx{longtblr}环境中标题和尾部的续表文本}
% \changes{v2.16.2.0}{2022/11/27}{修正\envx{longtblr}环境caption宽度}
% \changes{v1.11.0.0}{2022/05/06}{适配\pkgx{tabularray}宏包caption样式}
% 设置\pkgx{tabularray}宏包中表格标签与后面标题之间的间距及caption字体字号。
%    \begin{macrocode}
\ctex_at_end_preamble:n
  {
    \@ifpackageloaded { tabularray }
      {
        \SetTblrOuter [ tblr, longtblr, talltblr ]
          { presep = \belowcaptionskip + \intextsep, headsep = \abovecaptionskip }
        \SetTblrStyle { head } { font = \@@_rm_family: \zihao { 5 } }
        \DefTblrTemplate { caption-sep } { default }
          { \hskip \l_@@_cap_label_sep_tl }
        \tl_if_eq:NnTF \l_@@_cap_format_tl { hang }
          {
            \DefTblrTemplate { firsthead } { default }
              { \@@_tblr_caption_box:n { \UseTblrTemplate { caption  } { default } } }
            \DefTblrTemplate { middlehead, lasthead } { default }
              { \@@_tblr_caption_box:n { \UseTblrTemplate { capcont  } { default } } }
          }
          {
            \DefTblrTemplate { firsthead } { default }
              { \@@_tblr_caption_box:n { \UseTblrTemplate { caption  } { plain } } }
            \DefTblrTemplate { middlehead, lasthead } { default }
              { \@@_tblr_caption_box:n { \UseTblrTemplate { capcont  } { plain } } }
          }
        \DefTblrTemplate { firstfoot, middlefoot } { default }
          { \@@_tblr_caption_box:n { \UseTblrTemplate { contfoot } { default } } }
        \DefTblrTemplate { lastfoot } { default }
          {
            \@@_tblr_caption_box:n
              {
                \UseTblrTemplate { note   } { default }
                \UseTblrTemplate { remark } { default }
              }
          }
        \DefTblrTemplate { conthead-text } { default }
          { \@@_lang_switch:nn { （续表） } { (Continued) } }
        \DefTblrTemplate { contfoot-text } { default }
          { \@@_lang_switch:nn { 接下页 } { Continued~on~next~page } }
      }
      { }
  }
%    \end{macrocode}
% \end{macro}
% \subsection{图片}
% \changes{v6.1.0.0}{2023/03/04}{设置\envx{figure}环境中内容对齐方式}
% \begin{macro}{\@floatboxreset}
% 设置\envx{figure}环境中内容对齐方式。
%    \begin{macrocode}
\ctex_at_end_preamble:n
  {
    \tl_if_eq:NnTF \l_@@_figure_align_tl { left }
      {
          \AtBeginEnvironment { figure }
            { \g@addto@macro { \@floatboxreset } { \raggedright } }
      }
      {
        \tl_if_eq:NnTF \l_@@_figure_align_tl { centering }
          {
            \AtBeginEnvironment { figure }
              { \g@addto@macro { \@floatboxreset } { \centering } }
          }
          {
            \AtBeginEnvironment { figure }
              { \g@addto@macro { \@floatboxreset } { \raggedleft } }
          }
      }
  }
%    \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}
% \begin{macro}{\captionsetup}
% \changes{v1.13.4.0}{2022/05/08}{设置\pkgx{subfig}宏包子图引用样式}
% 设置\pkgx{subfig}宏包子图引用样式。
%    \begin{macrocode}
\ctex_at_end_preamble:n
  {
    \@ifpackageloaded { subfig }
      { \captionsetup [ subfloat ] { subrefformat = parens } }
      { }
  }
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\thesubfigure}
% \changes{v4.1.1.0}{2023/01/16}{适配子表样式}
% \changes{v1.13.5.0}{2022/05/08}{设置\pkgx{subcaption}宏包子图引用样式}
% \changes{v1.20.1.0}{2022/05/30}{修复\pkgx{subcaption}宏包子图标签样式}
% 设置\pkgx{subcaption}宏包子图子表引用样式。
%    \begin{macrocode}
\PassOptionsToPackage { labelformat = simple } { subcaption }
\ctex_at_end_preamble:n
  {
    \@ifpackageloaded { subcaption }
      {
        \cs_set:Npn \thesubfigure { ( \alph { subfigure } ) }
        \cs_set:Npn \thesubtable  { ( \alph { subtable  } ) }
      }
      { }
  }
%    \end{macrocode}
% \end{macro}
% \subsection{表格}
% \changes{v6.1.0.0}{2023/03/04}{设置\envx{table}环境中内容对齐方式}
% \begin{macro}{\@floatboxreset}
% 设置\envx{table}环境中内容对齐方式。
%    \begin{macrocode}
\ctex_at_end_preamble:n
  {
    \tl_if_eq:NnTF \l_@@_table_align_tl { left }
      {
          \AtBeginEnvironment { table }
            { \g@addto@macro { \@floatboxreset } { \raggedright } }
      }
      {
        \tl_if_eq:NnTF \l_@@_table_align_tl { centering }
          {
            \AtBeginEnvironment { table }
              { \g@addto@macro { \@floatboxreset } { \centering } }
          }
          {
            \AtBeginEnvironment { table }
              { \g@addto@macro { \@floatboxreset } { \raggedleft } }
          }
      }
  }
%    \end{macrocode}
% \end{macro}
% \changes{v6.1.0.0}{2023/03/04}{修改表格字号设置方法}
% \changes{v0.10.0.0}{2022/04/13}{设置表格字号是否为五号}
% \changes{v1.0.2.0}{2022/04/14}{修复表格五号字无法设定浮动位置}
% \begin{macro}{\@floatboxreset}
% 设置表格字号是否为五号。
%    \begin{macrocode}
\ctex_at_end_preamble:n
  {
    \bool_if:NT \l_@@_tab_small_bool
      {
        \AtBeginEnvironment { table }
          { \g@addto@macro { \@floatboxreset } { \small } }
      }
  }
%    \end{macrocode}
% \end{macro}
% \begin{macro}{longtable}
% \changes{v1.3.0.0}{2022/04/20}{设置\envx{longtable}环境字号是否为五号}
% 设置\pkgx{longtable}宏包中\envx{longtable}环境字号是否为五号。
%    \begin{macrocode}
\ctex_at_end_preamble:n
  {
    \@ifpackageloaded { longtable }
      {
        \bool_if:NT \l_@@_tab_small_bool
          {
            \ctex_gadd_ltxhook:nn
              { env/longtable/begin }
              { \small }
          }
      }
      { }
  }
%    \end{macrocode}
% \end{macro}
% \begin{macro}{tblr,longtblr}
% \changes{v1.11.0.0}{2022/05/06}{适配\pkgx{tabularray}宏包中\envx{tblr}和\envx{longtblr}环境字号}
% 设置\pkgx{tabularray}宏包中\envx{tblr}和\envx{longtblr}环境字号是否为五号。
%    \begin{macrocode}
\ctex_at_end_preamble:n
  {
    \@ifpackageloaded { tabularray }
      {
        \bool_if:NT \l_@@_tab_small_bool
          {
            \ctex_gadd_ltxhook:nn
              { env/tblr/begin }
              { \small }
            \ctex_gadd_ltxhook:nn
              { env/longtblr/begin }
              { \small }
          }
      }
      { }
  }
%    \end{macrocode}
% \end{macro}
%    \begin{macrocode}
%</thesis>
%<*thesis|tp>
%    \end{macrocode}
% \subsection{超链接和PDF元数据}
% \begin{macro}{\hypersetup}
% \changes{v0.5.0.0}{2022/04/05}{添加PDF主题元数据}
% \changes{v1.10.0.0}{2022/05/04}{添加PDF应用程序元数据}
% 配置超链接和PDF元数据。
%    \begin{macrocode}
\RequirePackage { hyperref }
\hypersetup
  {
    bookmarksnumbered,
    hidelinks
  }
\ctex_at_end_preamble:n
  {
    \hypersetup
      {
%<thesis>        pdftitle   = \l_@@_pure_title_tl,
%<xduugtp>        pdfsubject = { 西安电子科技大学本科生毕业论文（设计）开题报告 },
%<xduugtp>        pdfcreator = { XeLaTeX~with~xduugtp~class~in~XDUTS },
%<xduugthesis>        pdfsubject = { 西安电子科技大学本科毕业设计论文 },
%<xduugthesis>        pdfcreator = { XeLaTeX~with~xduugthesis~class~in~XDUTS },
%<xdupgthesis>        pdfsubject = \l_@@_header_str,
%<xdupgthesis>        pdfcreator = { XeLaTeX~with~xdupgthesis~class~in~XDUTS },
        pdfauthor  = \l_@@_author_str
      }
  }
%    \end{macrocode}
% \end{macro}
%    \begin{macrocode}
%</thesis|tp>
%<*thesis>
%    \end{macrocode}
% \subsection{交叉引用}
% \begin{macro}{\ref,\pageref}
% \changes{v1.2.0.0}{2022/04/16}{优化中文环境下\tnx{ref}两侧中英文间空白}
% \changes{v1.13.3.0}{2022/05/08}{优化中文环境下\tnx{pageref}两侧中英文间空白}
% 优化中文环境下\tnx{ref}和\tnx{pageref}两侧中英文间空白。
%    \begin{macrocode}
\ctex_at_end_preamble:n
  {
    \bool_if:NT \l_@@_ref_add_space_bool
      {
        \str_if_eq:NNT { \l_@@_lang_tl } { zh }
          {
            \RequirePackage { xspace }
            \xspaceaddexceptions { 。？！，、；：“”‘’—….－-～·《》<>＿ }
            \cs_generate_variant:Nn \str_if_in:nnTF { xnTF }
            \ctex_after_end_preamble:n
              {
                \cs_set_eq:NN \@@_trad_ref:n \ref
                \cs_set:Npn \ref #1
                  {
                    \str_if_in:xnTF { \__hyp_get_anchor:n { #1 } } { chapter }
                      {         \@@_trad_ref:n { #1 }         }
                      { \xspace \@@_trad_ref:n { #1 } \xspace }
                  }
                \cs_set_eq:NN \@@_trad_page_ref:n \pageref
                \cs_set:Npn \pageref #1
                  { \xspace \@@_trad_page_ref:n { #1 } \xspace }
              }
          }
      }
  }
%    \end{macrocode}
% \end{macro}
%    \begin{macrocode}
%</thesis>
%<*thesis|tp>
%    \end{macrocode}
% \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}{\RequirePackage,\bibliographystyle,\addbibresource}
% \changes{v1.13.6.0}{2022/05/09}{移除\pkgx{natbib}宏包显式调用}
% \changes{v1.14.0.0}{2022/05/10}{为\bibtex{}提供\tnx{parencite}命令}
% \changes{v1.14.1.0}{2022/05/10}{使用\tnx{PassOptionsToPackage}传递\pkgx{gbt7714}和\pkgx{biblatex}宏包参数}
% \changes{v2.2.4.0}{2022/06/24}{修改参考文献\bibtex{}标签右对齐}
% \changes{v2.2.5.0}{2022/06/24}{修改\bibtex{}和\pkgx{biblatex}字体配置方式}
% \changes{v2.7.1.0}{2022/06/26}{修改\pkgx{biblatex}中斜杠字符字体族}
% 参考文献。
%    \begin{macrocode}
\PassOptionsToPackage { sort&compress       } { gbt7714  }
\PassOptionsToPackage { style = gb7714-2015 } { biblatex }
\@@_begin_document:n
  {
    \tl_if_eq:NnTF \l_@@_bib_tool_tl { bibtex }
      {
        \RequirePackage { gbt7714 }
        \bibliographystyle { gbt7714-numerical }
        \cs_set:Npn \@biblabel #1 { \hfill [ #1 ] }
        \cs_set:Npn \bibsection { }
        \dim_set:Nn \bibsep { 0pt }
        \NewDocumentCommand \parencite { m }
          { \group_begin: \citestyle { numbers } \cite { #1 } \group_end: }
      }
      {
        \PassOptionsToPackage { \l_@@_biblatex_option_tl } { biblatex }
        \RequirePackage { biblatex }
        \clist_map_inline:Nn \l_@@_bib_file_clist { \addbibresource { #1 } }
        \defbibheading { bibliography } [ ] { }
        \dim_set:Nn \biblabelsep { 1ex }
        \dim_set:Nn \bibitemsep { 0pt }
        \cs_set_eq:NN \SlashFont \rmfamily
      }
%    \end{macrocode}
% \bibtex[]{}和\pkgx{biblatex}通用字体字号配置。
%    \begin{macrocode}
    \cs_set:Npn \bibfont
      {
%<xdupgthesis>        \rmfamily
%<xduugthesis>        \@@_rm_family:
%<thesis>        \zihao { 5 }
%<tp>        \zihao { -4 }
%<xdupgthesis>        \dim_set:Nn \baselineskip { 20pt }
      }
  }
%    \end{macrocode}
%    \begin{macrocode}
%<*xdupgthesis>
%    \end{macrocode}
% \changes{v4.4.4.0}{2023/02/09}{精简研究生学位论文移除参考文献列表宏包调用}
% \changes{v2.12.2.0}{2022/08/15}{修正本科毕业设计参考文献列表编译错误}
% \changes{v2.7.0.0}{2022/06/26}{\bibtex[]{}下允许不生成文献列表}
% \bibtex[]{}下允许不生成文献列表。
%    \begin{macrocode}
\ctex_at_end_preamble:n
  {
    \tl_if_eq:NnT \l_@@_bib_tool_tl { bibtex }
      {
        \bool_if:NT \l_@@_rm_ref_bool
          { \RequirePackage { bibentry } }
      }
  }
%    \end{macrocode}
%    \begin{macrocode}
%</xdupgthesis>
%    \end{macrocode}
% \end{macro}
%    \begin{macrocode}
%</thesis|tp>
%<*thesis>
%    \end{macrocode}
% \subsection{附录}
% \begin{macro}{\@@_appendix:}
% 附录环境。
% \changes{v0.3.0.0}{2022/04/04}{增加附录环境}
% \changes{v0.3.1.0}{2022/04/04}{修正附录中图表编号样式}
% \changes{v0.10.2.0}{2022/04/14}{修正附录中算法编号样式}
% \changes{v0.10.4.0}{2022/04/14}{修正附录中\pkgx{algorithm2e}算法编号样式}
% \changes{v1.2.2.0}{2022/04/20}{修正英文附录编号}
%    \begin{macrocode}
\cs_new:Npn \@@_appendix:
  {
    \cs_set:Npn \appendixname { \@@_lang_switch:nn { 附录 } { Appendix } }
    \tl_set_eq:NN \l_@@_chaptername \appendixname
    \cs_set_eq:NN \@@_Roman: \@@_Alph:
    \appendix
    \renewcommand { \thefigure } { \thechapter \arabic { figure } }
    \renewcommand { \thetable  } { \thechapter \arabic { table  } }
    \cs_if_exist:NT \thealgorithm
      { \cs_set:Npn \thealgorithm { \thechapter \arabic { algorithm } } }
    \cs_if_exist:NT \thealgocf
      { \cs_set:Npn \thealgocf { \thechapter \arabic { algocf } } }
    \bool_if_exist:NTF \l_@@_rm_appendix_bool
      {
        \bool_if:NF \l_@@_rm_appendix_bool
          {
            \clist_map_inline:Nn \l_@@_appendix_clist
              { \file_if_exist_input:n { ##1 } }
          }
      }
      {
        \clist_map_inline:Nn \l_@@_appendix_clist
          { \file_if_exist_input:n { ##1 } }
      }
  }
%    \end{macrocode}
%    \begin{macrocode}
%</thesis>
%    \end{macrocode}
% \end{macro}
%    \begin{macrocode}
%<*xduugthesis>
%    \end{macrocode}
% \changes{v1.26.7.1}{2022/06/12}{整理代码结构}
% \subsection{前言部分}
% \subsubsection{本科生}
% \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}
% \changes{v0.6.1.0}{2022/04/11}{修复logo不存在导致的无法编译}
% \changes{v1.13.1.0}{2022/05/08}{使用融合logo文件}
% 绘制西电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
        \file_if_exist:nT { xdulogo.pdf }
          {
            \str_if_eq:nnTF { #3 } { text }
              { \includegraphics [ page = 1, height = #2 ] { xdulogo.pdf } }
              { \includegraphics [ page = 2, height = #2 ] { xdulogo.pdf } }
          }
        \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 { 42.5pt }
      {
        \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{variable}{\l_@@_is_ent_bool,\l_@@_is_wide_bool}
% \changes{v0.8.1.0}{2022/04/12}{封面导师标签标志位}
% 是否为校外毕设，是否为宽名称。
%    \begin{macrocode}
\bool_new:N \l_@@_is_ent_bool
\bool_new:N \l_@@_is_wide_bool
%    \end{macrocode}
% \end{variable}
% \begin{macro}{\@@_cover_iii:nnnn}
% \changes{v0.8.1.0}{2022/04/12}{使用标志位计算论文信息标签宽度}
% \changes{v0.1.4.0}{2022/04/03}{自动调整论文信息标签宽度}
% 绘制论文信息并自动调整论文信息标签宽度。
% \begin{arguments}
%   \item 标签名称。
%   \item 字体族。
%   \item 字号。
%   \item 论文信息。
% \end{arguments}
%    \begin{macrocode}
\ctex_at_end_preamble:n
  {
    \tl_if_blank:VF \l_@@_supv_dept_str
      { \bool_set_true:N \l_@@_is_wide_bool }
    \tl_if_blank:VF \l_@@_supv_ent_str
      { \bool_set_true:N \l_@@_is_wide_bool }
    \tl_if_blank:VF \l_@@_supv_sch_str
      { \bool_set_true:N \l_@@_is_wide_bool }
    \cs_new:Npn \@@_cover_iii:nnnn #1#2#3#4
      {
        \bool_if:NTF \l_@@_is_wide_bool
          { \@@_cover_iii:nnnnn { 6em } { #1 } { #2 } { #3 } { #4 } }
          { \@@_cover_iii:nnnnn { 4em } { #1 } { #2 } { #3 } { #4 } }
      }
  }
%    \end{macrocode}
% \end{macro}
% \paragraph{重定义\tn{frontmatter}}
% \begin{macro}{\frontmatter,\@@_frontmatter:}
% \changes{v1.9.1.0}{2022/05/04}{修正封面元素位置及尺寸}
% 排版前言部分。
%    \begin{macrocode}
\RenewDocumentCommand { \frontmatter } { } { }
\cs_new:Npn \@@_frontmatter:
  {
    \loadgeometry { cover }
    \pagestyle    { empty }
    \dim_set:Nn \parindent { 0pt }
%    \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 } { text }
%    \end{macrocode}
% \changes{v1.13.2.0}{2022/05/08}{修正封面标题偏移}
% 排版封面标题。
%    \begin{macrocode}
    \vbox_to_ht:nn { 90pt }
      {
        \mode_leave_vertical:
        \hfil
        \hbox_to_wd:nn { 375pt } { \sffamily \zihao { 0 } 本科毕业设计论文 }
        \hfil
      }
%    \end{macrocode}
% 排版西电logo。
%    \begin{macrocode}
    \@@_cover_ii:nnn { 140pt } { 120pt } { icon }
%    \end{macrocode}
% \changes{v4.4.0.0}{2023/02/03}{本科毕设论文标题中公式字体加粗}
% \changes{v4.3.1.0}{2023/02/03}{修复本科毕设论文标题公式显示}
% 拆分论文标题并排版。
%    \begin{macrocode}
    \clist_new:N \l_@@_title_clist
    \@@_split_title:NV \l_@@_title_clist \l_@@_title_tl
    \tl_set:Nx \l_@@_title_i_tl  { \clist_item:Nn  \l_@@_title_clist { 1 } }
    \tl_set:Nx \l_@@_title_ii_tl { \clist_item:Nn  \l_@@_title_clist { 2 } }
    \@@_cover_iii:nnnn { 题目 } { sf } { 3 } { \@@_bold_math: \l_@@_title_i_tl }
    \tl_if_blank:VF \l_@@_title_ii_tl
      { \@@_cover_iii:nnnn { } { sf } { 3 } { \@@_bold_math: \l_@@_title_ii_tl } }
%    \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}
% \changes{v0.8.1.0}{2022/04/12}{修正封面论文信息标签宽度}
% 校外毕设，排版校外导师姓名、校内导师姓名。
%    \begin{macrocode}
    \tl_if_blank:VF \l_@@_supv_ent_str
      { \bool_set_true:N \l_@@_is_ent_bool }
    \tl_if_blank:VF \l_@@_supv_sch_str
      { \bool_set_true:N \l_@@_is_ent_bool }
    \bool_if:NTF \l_@@_is_ent_bool
      {
        \@@_cover_iii:nnnn { 校外导师姓名 } { rm } { -3 } { \l_@@_supv_ent_str }
        \@@_cover_iii:nnnn { 校内导师姓名 } { rm } { -3 } { \l_@@_supv_sch_str }
      }
%    \end{macrocode}
% \changes{v1.15.1.0}{2022/05/21}{使用\csx{group_begin:}和\csx{group_end:}替换分组}
% 校内毕设，排版导师姓名、院内导师姓名。
%    \begin{macrocode}
      \group_begin:
        \@@_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 }
          }
      \group_end:
    \cleardoublepage
%    \end{macrocode}
% \changes{v0.8.0.0}{2022/04/12}{支持对称页边距}
% \changes{v1.10.2.0}{2022/05/04}{修正正文前页码样式}
% 更换页面尺寸、页面样式和页码样式。
%    \begin{macrocode}
    \@@_load_main_geometry:
    \pagestyle     { plain }
    \pagenumbering { roman }
%    \end{macrocode}
% \changes{v1.2.1.0}{2022/04/19}{修正英文论文下中文摘要标题样式}
% 中文摘要，宋体小四号。
%    \begin{macrocode}
    \@@_lang_switch:nn
      { \@@_n_chapter_head:nn { 摘要 } { 摘 { \quad } 要 } }
      {
        \@@_n_chapter_head_ii:nnn
          { 摘要 }
          { 摘 { \quad } 要 }
          { \@@_sf_family: \zihao { 3 } \centering }
      }
    \group_begin:
      \dim_set:Nn \parindent { 2 \ccwd }
      \rmfamily \zihao { -4 }
      \file_if_exist_input:n { \l_@@_abstract_zh_tl }
    \group_end:
%    \end{macrocode}
% \changes{v1.10.3.0}{2022/05/04}{使用弹性长度分隔关键词}
% 关键词弹性分隔间距。
%    \begin{macrocode}
    \cs_new:Npn \@@_keywords_space: { \hspace { 2em plus 1em minus 1em } }
%    \end{macrocode}
% \changes{v4.4.0.0}{2023/02/03}{本科生毕业设计中文关键词中数学字体加粗}
% 中文关键词，黑体小四号。
%    \begin{macrocode}
    \group_begin:
      \sffamily \@@_bold_math: \zihao { -4 } \par
      \@@_typeout_keywords:nNn
        { 关键词： } { \l_@@_keywords_zh_clist } { \@@_keywords_space: }
    \group_end:
    \cleardoublepage
%    \end{macrocode}
% 英文摘要，Times New Roman字体，小四号。
% \changes{v0.4.3.0}{2022/04/05}{修正英文摘要标题字体}
%    \begin{macrocode}
    \@@_n_chapter_head_ii:nn
      { ABSTRACT } { \rmfamily \zihao { 3 } \bfseries \centering }
    \group_begin:
      \dim_set:Nn \parindent { 2 \ccwd }
      \rmfamily \zihao { -4 }
      \file_if_exist_input:n { \l_@@_abstract_en_tl }
    \group_end:
%    \end{macrocode}
% \changes{v4.4.0.0}{2023/02/03}{本科生毕业设计英文关键词中数学字体加粗}
% 英文关键词，Times New Roman字体加粗，小四号。
%    \begin{macrocode}
    \group_begin:
      \rmfamily \zihao { -4 } \bfseries \@@_bold_math: \par
      \@@_typeout_keywords:nNn
        { Keywords： } { \l_@@_keywords_en_clist } { \@@_keywords_space: }
    \group_end:
    \cleardoublepage
%    \end{macrocode}
% \changes{v1.1.4.0}{2022/04/16}{为目录章节标题增加间距}
% \changes{v1.1.5.0}{2022/04/16}{目录中移除目录章节}
% 目录。
%    \begin{macrocode}
    \setcounter { tocdepth } { 5 }
    \@@_n_chapter_head:nn
      { \@@_lang_switch:nn { 目录            } { Contents } }
      { \@@_lang_switch:nn { 目 { \quad } 录 } { Contents } }
    \@starttoc { toc }
    \cleardoublepage
  }
%    \end{macrocode}
% \end{macro}
%    \begin{macrocode}
%</xduugthesis>
%<*xdupgthesis>
%    \end{macrocode}
% \subsubsection{研究生}
% \paragraph{封面}
% \begin{variable}
%   {
%     \l_@@_phd,
%     \l_@@_master,
%     \l_@@_ac,
%     \l_@@_pro
%   }
% \changes{v2.18.1.0}{2022/12/01}{移除部分研究生类型布尔变量}
% \changes{v1.16.0.0}{2022/05/22}{研究生类别}
% \changes{v1.17.0.0}{2022/05/28}{增加学术和专业研究生布尔变量}
% \changes{v1.18.0.0}{2022/05/29}{增加硕士和博士研究生布尔变量}
% 研究生类别。
%    \begin{macrocode}
\bool_new:N \l_@@_phd
\bool_new:N \l_@@_master
\bool_new:N \l_@@_ac
\bool_new:N \l_@@_pro
\ctex_at_end_preamble:n
  {
    \tl_if_eq:NnTF \l_@@_gr_type_tl { 硕士 }
      { \bool_set_true:N \l_@@_master }
      { \bool_set_true:N \l_@@_phd }
    \tl_if_eq:NnTF \l_@@_degree_type_tl { 学术 }
      { \bool_set_true:N \l_@@_ac  }
      { \bool_set_true:N \l_@@_pro }
  }
%    \end{macrocode}
% \end{variable}
% \begin{macro}{\@@_cover_i:nnnnn}
% \changes{v1.16.0.0}{2022/05/22}{绘制研究生封面单行内容}
% \changes{v1.17.0.0}{2022/05/28}{绘制研究生封面和题名页单行内容}
% 绘制研究生封面和题名页单行内容。
% \begin{arguments}
%   \item 盒子高度。
%   \item 字体族。
%   \item 字号。
%   \item 是否加粗。
%   \item 盒子内容。
% \end{arguments}
%    \begin{macrocode}
\cs_new:Npn \@@_cover_i:nnnnn #1#2#3#4#5
  {
    \dim_set:Nn \baselineskip { 20pt }
    \vbox_to_ht:nn { #1 }
      {
        \vfill
        \mode_leave_vertical:
        \hfil
        \use:c { #2 family } \zihao { #3 }
        \str_if_eq:nnTF { #4 } { bf } { \bfseries } { }
        #5
        \hfil
      }
  }
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\@@_cover_ii:nnnn}
% \changes{v1.16.0.0}{2022/05/22}{绘制研究生封面论文信息}
% \changes{v1.26.4.0}{2022/06/10}{研究生封面论文信息可指定宽度}
% 绘制研究生封面论文信息。
% \begin{arguments}
%   \item 标签宽度。
%   \item 标签名称。
%   \item 盒子宽度。
%   \item 盒子内容。
% \end{arguments}
%    \begin{macrocode}
\cs_new:Npn \@@_cover_ii:nnnn #1#2#3#4
  {
    \dim_set:Nn \baselineskip { 20pt }
    \vbox_to_ht:nn { 25pt }
      {
        \vfill
        \mode_leave_vertical:
        \hfil
        \hbox:n
          {
            \zihao { 4 } \bfseries
            \hbox_to_wd:nn { #1 } { \sffamily #2 }
            \skip_horizontal:n { 0.5em }
            \@@_uline:n
              {
                \skip_horizontal:n { 9em - #1 }
                \hbox_to_wd:nn { #3 } { \hfil \rmfamily #4 \hfil }
              }
          }
        \hfil
      }
  }
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\@@_cover_iii:nnnn}
% \changes{v1.17.0.0}{2022/05/28}{绘制研究生中文题名页顶部信息}
% 绘制研究生中文题名页顶部信息。
% \begin{arguments}
%   \item 标签宽度。
%   \item 标签名称。
%   \item 值宽度。
%   \item 值内容。
% \end{arguments}
%    \begin{macrocode}
\cs_new:Npn \@@_cover_iii:nnnn #1#2#3#4
  {
    \dim_set:Nn \baselineskip { 20pt }
    \hbox:n
      {
        \rmfamily \zihao { 5 } \bfseries
        \hbox_to_wd:nn { #1 } { #2 }
        \skip_horizontal:n { 0.5em }
        \@@_uline:n { \hbox_to_wd:nn { #3 } { \hfil #4 \hfil } }
      }
  }
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\@@_en_month:n}
% \changes{v1.18.0.0}{2022/05/29}{英文月份}
% 英文月份。
%    \begin{macrocode}
\cs_new:Npn \@@_en_month:n #1
  {
    \str_case:Vn #1
      {
        { 1  } { January   }
        { 2  } { February  }
        { 3  } { March     }
        { 4  } { April     }
        { 5  } { May       }
        { 6  } { June      }
        { 7  } { July      }
        { 8  } { August    }
        { 9  } { September }
        { 10 } { October   }
        { 11 } { November  }
        { 12 } { December  }
        { 01 } { January   }
        { 02 } { February  }
        { 03 } { March     }
        { 04 } { April     }
        { 05 } { May       }
        { 06 } { June      }
        { 07 } { July      }
        { 08 } { August    }
        { 09 } { September }
      }
  }
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\@@_zh_today:,\@@_en_today:}
% \changes{v1.17.0.0}{2022/05/28}{中文今日年月}
% \changes{v1.18.0.0}{2022/05/29}{英文今日年月}
% 今日年月。
%    \begin{macrocode}
\cs_new:Npn \@@_zh_today:
  { \int_use:N \c_sys_year_int 年 \int_use:N \c_sys_month_int 月 }
\cs_new:Npn \@@_en_today:
  { \@@_en_month:n { \c_sys_month_int } ~ \int_use:N \c_sys_year_int }
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\@@_split_submit_date:N}
% \changes{v1.17.0.0}{2022/05/28}{拆分提交日期为年和月}
% 拆分提交日期为年和月。
%    \begin{macrocode}
\seq_new:N \l_@@_submit_date_seq
\cs_new:Npn \@@_split_submit_date:N #1
  {
    \seq_set_split:NnV \l_@@_submit_date_seq { - } \l_@@_submit_date_str
    \clist_set_from_seq:NN #1 \l_@@_submit_date_seq
  }
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\@@_zh_submit_date:}
% \changes{v1.17.0.0}{2022/05/28}{中文提交日期}
% 中文提交日期。
%    \begin{macrocode}
\clist_new:N \l_@@_submit_date_clist
\cs_new:Npn \@@_zh_submit_date:
  {
    \str_if_empty:NTF \l_@@_submit_date_str
      { \@@_zh_today: }
      {
        \@@_split_submit_date:N \l_@@_submit_date_clist
        \clist_item:Nn \l_@@_submit_date_clist { 1 } 年
        \clist_item:Nn \l_@@_submit_date_clist { 2 } 月
      }
  }
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\@@_en_submit_date:}
% \changes{v1.18.0.0}{2022/05/29}{英文提交日期}
% 英文提交日期。
%    \begin{macrocode}
\str_new:N \l_@@_submit_date_month_str
\cs_new:Npn \@@_en_submit_date:
  {
    \str_if_empty:NTF \l_@@_submit_date_str
      { \@@_en_today: }
      {
        \@@_split_submit_date:N \l_@@_submit_date_clist
        \str_set:Nx \l_@@_submit_date_month_str
          { \clist_item:Nn \l_@@_submit_date_clist { 2 } }
        \@@_en_month:n { \l_@@_submit_date_month_str } ~
        \clist_item:Nn \l_@@_submit_date_clist { 1 }
      }
  }
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\@@_cover_author_info:}
% \changes{v2.18.1.0}{2022/12/01}{修正专业博士封面和题名页信息}
% \changes{v1.26.4.0}{2022/06/10}{研究生封面底部作者信息}
% 研究生封面底部作者信息。
%    \begin{macrocode}
\cs_new:Npn \@@_cover_author_info:
  {
%    \end{macrocode}
% 计算作者信息最大宽度。
%    \begin{macrocode}
    \rmfamily \zihao { 4 }
    \dim_new:N \l_@@_cover_author_info_dim
    \dim_set:Nn \l_@@_cover_author_info_dim { 7em }
    \@@_str_max_dim:Nn \l_@@_cover_author_info_dim { \l_@@_author_str }
    \bool_if:NTF \l_@@_pro
      {
        \@@_str_max_dim:Nn \l_@@_cover_author_info_dim
          { \l_@@_supv_str \enskip \l_@@_supv_t_str }
        \str_if_empty:NF \l_@@_supv_ii_str
          {
            \@@_str_max_dim:Nn \l_@@_cover_author_info_dim
              { \l_@@_supv_ii_str \enskip \l_@@_supv_ii_t_str }
          }
        \@@_str_max_dim:Nn \l_@@_cover_author_info_dim
          { \l_@@_supv_ent_str \enskip \l_@@_supv_ent_t_str }
      }
      {
        \@@_str_max_dim:Nn \l_@@_cover_author_info_dim
          { \l_@@_supv_str \enskip \l_@@_supv_t_str }
        \str_if_empty:NF \l_@@_supv_ii_str
          {
            \@@_str_max_dim:Nn \l_@@_cover_author_info_dim
              { \l_@@_supv_ii_str \enskip \l_@@_supv_ii_t_str }
          }
      }
    \@@_str_max_dim:Nn \l_@@_cover_author_info_dim { \l_@@_degree_str }
    \dim_add:Nn \l_@@_cover_author_info_dim { 3em }
%    \end{macrocode}
% 排版封面论文信息。
%    \begin{macrocode}
    \@@_cover_ii:nnnn { 4em } { 作者姓名 }
      { \l_@@_cover_author_info_dim }
      { \l_@@_author_str }
    \bool_if:NTF \l_@@_pro
      {
        \@@_cover_ii:nnnn { 9em } { 学校导师姓名、职称 }
          { \l_@@_cover_author_info_dim }
          { \l_@@_supv_str \enskip \l_@@_supv_t_str }
        \str_if_empty:NF \l_@@_supv_ii_str
          {
            \@@_cover_ii:nnnn { 9em } { }
              { \l_@@_cover_author_info_dim }
              { \l_@@_supv_ii_str \enskip \l_@@_supv_ii_t_str }
          }
        \@@_cover_ii:nnnn { 9em } { 企业导师姓名、职称 }
          { \l_@@_cover_author_info_dim }
          { \l_@@_supv_ent_str \enskip \l_@@_supv_ent_t_str }
      }
      {
        \@@_cover_ii:nnnn { 9em } { 指导教师姓名、职称 }
          { \l_@@_cover_author_info_dim }
          { \l_@@_supv_str \enskip \l_@@_supv_t_str }
        \str_if_empty:NF \l_@@_supv_ii_str
          {
            \@@_cover_ii:nnnn { 9em } { }
              { \l_@@_cover_author_info_dim }
              { \l_@@_supv_ii_str \enskip \l_@@_supv_ii_t_str }
          }
      }
    \@@_cover_ii:nnnn { 6em } { 申请学位类别 }
      { \l_@@_cover_author_info_dim }
      { \l_@@_degree_str }
  }
%    \end{macrocode}
% \end{macro}
% \paragraph{中文题名页}
% \begin{macro}{\@@_zh_title_page_info:}
% \changes{v1.26.7.0}{2022/06/11}{拆分研究生中文题名页底部信息}
% 中文题名页底部信息。
%    \begin{macrocode}
\cs_new:Npn \@@_zh_title_page_info:
  {
%    \end{macrocode}
% \changes{v1.26.6.0}{2022/06/11}{研究生中文题名页底部信息宽度测量}
% 底部信息宽度测量。
%    \begin{macrocode}
    \rmfamily \zihao { 4 }
    \dim_new:N \l_@@_zh_title_page_info_dim
    \@@_str_max_dim:Nn \l_@@_zh_title_page_info_dim
      { 作者姓名：\l_@@_author_str }
    \bool_if:NTF \l_@@_ac
      {
        \@@_str_max_dim:Nn \l_@@_zh_title_page_info_dim
          { 一级学科：\l_@@_major_str }
        \@@_str_max_dim:Nn \l_@@_zh_title_page_info_dim
          { 二级学科（研究方向）：\l_@@_sub_major_str }
      }
      {
        \@@_str_max_dim:Nn \l_@@_zh_title_page_info_dim
          { 领\qquad{}域：\l_@@_domain_str }
      }
      \@@_str_max_dim:Nn \l_@@_zh_title_page_info_dim
        { 学位类别：\l_@@_degree_str }
    \bool_if:NTF \l_@@_pro
      {
        \@@_str_max_dim:Nn \l_@@_zh_title_page_info_dim
          { 学校导师姓名、职称：\l_@@_supv_str \enskip \l_@@_supv_t_str }
        \str_if_empty:NF \l_@@_supv_ii_str
          {
            \@@_str_max_dim:Nn \l_@@_zh_title_page_info_dim
              { 学校导师姓名、职称：\l_@@_supv_ii_str \enskip \l_@@_supv_ii_t_str }
          }
        \@@_str_max_dim:Nn \l_@@_zh_title_page_info_dim
          { 企业导师姓名、职称：\l_@@_supv_ent_str \enskip \l_@@_supv_ent_t_str }
      }
      {
        \@@_str_max_dim:Nn \l_@@_zh_title_page_info_dim
          { 指导教师姓名、职称：\l_@@_supv_str \enskip \l_@@_supv_t_str }
        \str_if_empty:NF \l_@@_supv_ii_str
          {
            \@@_str_max_dim:Nn \l_@@_zh_title_page_info_dim
              { 指导教师姓名、职称：\l_@@_supv_ii_str \enskip \l_@@_supv_ii_t_str }
          }
      }
    \@@_str_max_dim:Nn \l_@@_zh_title_page_info_dim
      { 学\qquad{}院：\l_@@_dept_str }
    \@@_str_max_dim:Nn \l_@@_zh_title_page_info_dim
      { 提交日期：\@@_zh_submit_date: }
%    \end{macrocode}
% \changes{v1.26.6.0}{2022/06/11}{研究生中文题名页底部信息自动居中}
% \changes{v1.26.10.0}{2022/06/17}{修正中文题名页底部信息字体系列}
% 底部信息。
%    \begin{macrocode}
    \dim_new:N \l_@@_zh_title_page_info_skip_dim
    \dim_set_eq:NN \l_@@_zh_title_page_info_skip_dim \linewidth
    \dim_sub:Nn \l_@@_zh_title_page_info_skip_dim { \l_@@_zh_title_page_info_dim }
    \skip_horizontal:n { \dim_eval:n { \l_@@_zh_title_page_info_skip_dim / 2 } }
    \vbox:n
      {
        \rmfamily \zihao { 4 }
        \dim_set:Nn \baselineskip { 32pt }
        { \bfseries 作者姓名： } \l_@@_author_str
        \bool_if:NTF \l_@@_ac
          {
            \par
            { \bfseries 一级学科： } \l_@@_major_str
            \par
            { \bfseries 二级学科（研究方向）： } \l_@@_sub_major_str
          }
          {
            \par
            { \bfseries 领\qquad{}域： } \l_@@_domain_str
          }
        \par
        { \bfseries 学位类别： } \l_@@_degree_str
        \bool_if:NTF \l_@@_pro
          {
            \par
            { \bfseries 学校导师姓名、职称： }
            \l_@@_supv_str \enskip \l_@@_supv_t_str
            \str_if_empty:NF \l_@@_supv_ii_str
              {
                \par
                \phantom { 学校导师姓名、职称： }
                \l_@@_supv_ii_str \enskip \l_@@_supv_ii_t_str
              }
            \par
            { \bfseries 企业导师姓名、职称： }
            \l_@@_supv_ent_str \enskip \l_@@_supv_ent_t_str
          }
          {
            \par
            { \bfseries 指导教师姓名、职称： }
            \l_@@_supv_str \enskip \l_@@_supv_t_str
            \str_if_empty:NF \l_@@_supv_ii_str
              {
                \par
                \phantom { 指导教师姓名、职称： }
                \l_@@_supv_ii_str \enskip \l_@@_supv_ii_t_str
              }
          }
        \par
        { \bfseries 学\qquad{}院： } \l_@@_dept_str
        \par
        { \bfseries 提交日期： } \@@_zh_submit_date:
      }
  }
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\@@_zh_title_page:}
% \changes{v1.17.0.0}{2022/05/28}{中文题名页}
% 中文题名页。
%    \begin{macrocode}
\cs_new:Npn \@@_zh_title_page:
  {
%    \end{macrocode}
% 顶部信息。
%    \begin{macrocode}
    \vbox:n { }
    \skip_vertical:n { -7.5pt }
    \dim_set:Nn \baselineskip { 15.6bp }
    \vbox:n
      {
        \mode_leave_vertical:
        \@@_cover_iii:nnnn { 4em } { 学校代码 } { 7em } { 10701                }
        \hfill
        \@@_cover_iii:nnnn { 3em } { 学号     } { 7em } { \l_@@_student_id_str }
      }
    \vbox:n
      {
        \mode_leave_vertical:
        \@@_cover_iii:nnnn { 4em } { 分类号   } { 7em } { \l_@@_clc_str        }
        \hfill
        \@@_cover_iii:nnnn { 3em } { 密级     } { 7em } { \l_@@_secret_lv_str  }
      }
%    \end{macrocode}
% 学校名称和论文类型。
%    \begin{macrocode}
    \@@_cover_i:nnnnn { 100pt  } { sf } { 1  } { bf } { 西安电子科技大学   }
    \@@_cover_i:nnnnn { 85pt   } { rm } { -1 } { bf } { \l_@@_gr_type_tl 学位论文 }
%    \end{macrocode}
% \changes{v4.4.0.0}{2023/02/03}{研究生中文题名页标题中数学字体加粗}
% \changes{v1.18.1.0}{2022/05/30}{不拆分研究生中文题名页标题}
% 论文标题。
%    \begin{macrocode}
    \skip_vertical:n { 87.5pt }
    \vbox_to_ht:nn { 150pt }
      {
        \rmfamily \zihao { 2 } \bfseries \@@_bold_math: \centering
        \dim_set:Nn \baselineskip { 30pt }
        \l_@@_title_tl
      }
%    \end{macrocode}
% 底部信息。
%    \begin{macrocode}
    \group_begin:
      \@@_zh_title_page_info:
    \group_end:
    \cleardoublepage
  }
%    \end{macrocode}
% \end{macro}
% \paragraph{中文题名页}
% \begin{macro}{\@@_en_title_supv:n}
% \changes{v1.18.0.0}{2022/05/29}{英文题名页底部导师姓名拼音盒子}
% 英文题名页底部导师姓名拼音盒子。
%    \begin{macrocode}
\dim_new:N \l_@@_supv_dim
\dim_new:N \l_@@_supv_max_dim
\box_new:N \l_@@_supv_box
\cs_new:Npn \@@_en_title_supv:n #1
  {
    \rmfamily \zihao { 3 }
    \dim_zero:N \l_@@_supv_max_dim
    \hbox_set:Nn \l_@@_supv_box { \l_@@_supv_en_str }
    \dim_set:Nn \l_@@_supv_dim { \box_wd:N \l_@@_supv_box }
    \dim_set:Nn \l_@@_supv_max_dim
      { \dim_max:nn { \l_@@_supv_dim } { \l_@@_supv_max_dim } }
    \str_if_empty:NF \l_@@_supv_ii_str
      {
        \hbox_set:Nn \l_@@_supv_box { \l_@@_supv_ii_en_str }
        \dim_set:Nn \l_@@_supv_dim { \box_wd:N \l_@@_supv_box }
        \dim_set:Nn \l_@@_supv_max_dim
          { \dim_max:nn { \l_@@_supv_dim } { \l_@@_supv_max_dim } }
      }
    \bool_if:NT \l_@@_pro
      {
        \hbox_set:Nn \l_@@_supv_box { \l_@@_supv_ent_en_str }
        \dim_set:Nn \l_@@_supv_dim { \box_wd:N \l_@@_supv_box }
        \dim_set:Nn \l_@@_supv_max_dim
          { \dim_max:nn { \l_@@_supv_dim } { \l_@@_supv_max_dim } }
      }
    \hbox_to_wd:nn { \l_@@_supv_max_dim } { #1 \hfil } \quad
  }
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\@@_en_title_supv_t:n}
% \changes{v1.18.0.0}{2022/05/29}{英文题名页底部导师英文职称盒子}
% 英文题名页底部导师英文职称盒子。
%    \begin{macrocode}
\dim_new:N \l_@@_supv_t_dim
\dim_new:N \l_@@_supv_t_max_dim
\box_new:N \l_@@_supv_t_box
\cs_new:Npn \@@_en_title_supv_t:n #1
  {
    \rmfamily \zihao { 3 }
    \dim_zero:N \l_@@_supv_t_max_dim
    \hbox_set:Nn \l_@@_supv_t_box { \l_@@_supv_t_en_str }
    \dim_set:Nn \l_@@_supv_t_dim { \box_wd:N \l_@@_supv_t_box }
    \dim_set:Nn \l_@@_supv_t_max_dim
      { \dim_max:nn { \l_@@_supv_t_dim } { \l_@@_supv_t_max_dim } }
    \str_if_empty:NF \l_@@_supv_ii_str
      {
        \hbox_set:Nn \l_@@_supv_t_box { \l_@@_supv_ii_t_en_str }
        \dim_set:Nn \l_@@_supv_t_dim { \box_wd:N \l_@@_supv_t_box }
        \dim_set:Nn \l_@@_supv_t_max_dim
          { \dim_max:nn { \l_@@_supv_t_dim } { \l_@@_supv_t_max_dim } }
      }
    \bool_if:NT \l_@@_pro
      {
        \hbox_set:Nn \l_@@_supv_t_box { \l_@@_supv_ent_t_en_str }
        \dim_set:Nn \l_@@_supv_t_dim { \box_wd:N \l_@@_supv_t_box }
        \dim_set:Nn \l_@@_supv_t_max_dim
          { \dim_max:nn { \l_@@_supv_t_dim } { \l_@@_supv_t_max_dim } }
      }
    \hbox_to_wd:nn { \l_@@_supv_t_max_dim } { #1 \hfil } \quad
  }
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\@@_en_title_page:}
% \changes{v4.4.0.0}{2023/02/03}{研究生英文题名页标题中数学字体加粗}
% \changes{v1.18.0.0}{2022/05/29}{英文题名页}
% \changes{v1.26.1.0}{2022/06/07}{修复作者拼音为空无法编译}
% \changes{v1.26.11.0}{2022/06/17}{修复非专业硕士英文题名页英文一级学科}
% 英文题名页。
%    \begin{macrocode}
\cs_new:Npn \@@_en_title_page:
  {
    \vbox:n { }
    \skip_vertical:n { -3.5pt }
    \dim_set:Nn \baselineskip { 30pt }
    \vbox_to_ht:nn { 170pt }
      {
        \rmfamily \zihao { 2 } \bfseries \@@_bold_math: \centering
        \dim_set:Nn \baselineskip { 30pt }
        \l_@@_title_en_str
      }
    \vbox_to_ht:nn { 360pt }
      {
        \rmfamily \zihao { 3 } \centering
        \dim_set:Nn \baselineskip { 30pt }
        A
        \bool_if:NTF \l_@@_master { ~thesis~ } { ~dissertation~ }
        submitted~to\\
        XIDIAN~UNIVERSITY\\
        in~partial~fulfillment~of~the~requirements\\
        for~the~degree~of
        \bool_if:NTF \l_@@_master { ~Master\\ } { ~Doctor~of~Philosophy\\ }
        in
        \bool_if:NTF \l_@@_pro
          { ~\l_@@_degree_en_str\\ }
          { ~\l_@@_major_en_str\\  }
      }
    \vbox:n
      {
        \rmfamily \zihao { 3 } \centering
        \dim_set:Nn \baselineskip { 30pt }
        By\\
        \l_@@_author_en_str
        \str_if_empty:NTF \l_@@_author_en_str
          { \skip_vertical:N \baselineskip }
          { \\ }
        Supervisor:~\@@_en_title_supv:n { \l_@@_supv_en_str }
        Title:~\@@_en_title_supv_t:n { \l_@@_supv_t_en_str } \\
        \str_if_empty:NF \l_@@_supv_ii_str
          {
            \phantom { Supervisor:~ } \@@_en_title_supv:n { \l_@@_supv_ii_en_str }
            \phantom { Title:~ } \@@_en_title_supv_t:n { \l_@@_supv_ii_t_en_str } \\
          }
        \bool_if:NT \l_@@_pro
          {
            Supervisor:~ \@@_en_title_supv:n { \l_@@_supv_ent_en_str }
            Title:~ \@@_en_title_supv_t:n { \l_@@_supv_ent_t_en_str } \\
          }
        \@@_en_submit_date:
      }
    \cleardoublepage
  }
%    \end{macrocode}
% \end{macro}
% \paragraph{声明页}
% \begin{macro}
%   {
%     \@@_statement_scan_sign_uline:n,
%     \@@_statement_scan_sign:nnnn
%   }
% \changes{v2.2.0.0}{2022/06/23}{声明页签字扫描文件}
% 声明页签字扫描文件。
%    \begin{macrocode}
\cs_new:Npn \@@_statement_scan_sign_uline:n #1
  {
    \@@_uline:n
      {
        \vbox_to_ht:nn { 17.5pt }
          {
            \vfil
            \hbox_to_wd:nn { 10em }
              {
                \hfil
                \includegraphics [ width = 10em, height = 25pt, keepaspectratio ] { #1 }
                \hfil
              }
          }
      }
  }
\cs_new:Npn \@@_statement_scan_sign:nnnn #1#2#3#4
  {
    \vbox_to_ht:nn { 30pt }
      {
        \vfil
        #1：
        \@@_statement_scan_sign_uline:n { #2 }
        \hfill
        #3：
        \@@_statement_scan_sign_uline:n { #4 }
      }
  }
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\@@_statement:}
% \changes{v1.19.0.0}{2022/05/30}{学位论文独创性声明和关于论文使用授权的说明}
% \changes{v2.2.0.0}{2022/06/23}{支持声明页插入签字扫描文件}
% 学位论文独创性声明和关于论文使用授权的说明。
%    \begin{macrocode}
\cs_new:Npn \@@_statement:
  {
    \vbox:n { }
    \skip_vertical:n { -7.5pt }
    \vbox_to_ht:nn { 60pt }
      {
        \rmfamily \zihao { 4 } \bfseries \centering
        \dim_set:Nn \baselineskip { 20pt }
        西安电子科技大学\\
        学位论文独创性（或创新性）声明
      }
    \vbox_to_ht:nn { 120pt }
      {
        \rmfamily \zihao { -4 }
        \dim_set:Nn \parindent { 2em }
        \dim_set:Nn \baselineskip { 20pt }
        秉承学校严谨的学风和优良的科学道德，本人声明所呈交的论文是我个人在导师指
        导下进行的研究工作及取得的研究成果。尽我所知，除了文中特别加以标注和致谢
        中所罗列的内容以外，论文中不包含其他人已经发表或撰写过的研究成果；也不包
        含为获得西安电子科技大学或其它教育机构的学位或证书而使用过的材料。与我一
        同工作的同事对本研究所做的任何贡献均已在论文中作了明确的说明并表示了谢意。
        \par
        学位论文若有不实之处，本人承担一切法律责任。
        \vfil
      }
    \clist_if_empty:NT \l_@@_statement_sign_clist
      { \skip_vertical:n { 20pt } }
    \vbox_to_ht:nn { 175pt }
      {
        \rmfamily \zihao { -4 }
        \dim_set:Nn \parindent { 2em }
        \dim_set:Nn \baselineskip { 20pt }
        \clist_if_empty:NTF \l_@@_statement_sign_clist
          {
            本人签名：\@@_uline:n { \skip_horizontal:n { 10em } }
            \hfill
            日\qquad{}期：\@@_uline:n { \skip_horizontal:n { 10em } }
          }
          {
            \@@_statement_scan_sign:nnnn
              { 本人签名     } { \clist_item:Nn \l_@@_statement_sign_clist { 1 } }
              { 日\qquad{}期 } { \clist_item:Nn \l_@@_statement_sign_clist { 2 } }
          }
      }
    \clist_if_empty:NF \l_@@_statement_sign_clist
      { \skip_vertical:n { 20pt } }
    \vbox_to_ht:nn { 60pt }
      {
        \rmfamily \zihao { 4 } \bfseries \centering
        \dim_set:Nn \baselineskip { 20pt }
        西安电子科技大学\\
        关于论文使用授权的说明
      }
    \vbox_to_ht:nn { 120pt }
      {
        \rmfamily \zihao { -4 }
        \dim_set:Nn \parindent { 2em }
        \dim_set:Nn \baselineskip { 20pt }
        本人完全了解西安电子科技大学有关保留和使用学位论文的规定，即：研究生在校
        攻读学位期间论文工作的知识产权属于西安电子科技大学。学校有权保留送交论文
        的复印件，允许查阅、借阅论文；学校可以公布论文的全部或部分内容，允许采用
        影印、缩印或其它复制手段保存论文。同时本人保证，结合学位论文研究成果完成
        的论文、发明专利等成果，署名单位为西安电子科技大学。
        \par
        保密的学位论文在
        \str_if_eq:NNTF \l_@@_secret_lv_str { 秘密 }
          {
            \str_if_empty:NTF \l_@@_secret_year_str
              { \@@_uline:n { \skip_horizontal:n { 1.5em } } }
              { \@@_uline:n { \enskip \l_@@_secret_year_str \enskip } }
          }
          { \@@_uline:n { \skip_horizontal:n { 1.5em } } }
        年解密后适用本授权书。
        \vfil
      }
    \clist_if_empty:NT \l_@@_statement_sign_clist
      { \skip_vertical:n { 20pt } }
    \vbox:n
      {
        \rmfamily \zihao { -4 }
        \dim_set:Nn \parindent { 2em }
        \dim_set:Nn \baselineskip { 40pt }
        \clist_if_empty:NTF \l_@@_statement_sign_clist
          {
            本人签名：\@@_uline:n { \skip_horizontal:n { 10em } }
            \hfill
            导师签名：\@@_uline:n { \skip_horizontal:n { 10em } }
            \par
            日\qquad{}期：\@@_uline:n { \skip_horizontal:n { 10em } }
            \hfill
            日\qquad{}期：\@@_uline:n { \skip_horizontal:n { 10em } }
          }
          {
            \@@_statement_scan_sign:nnnn
              { 本人签名     } { \clist_item:Nn \l_@@_statement_sign_clist { 3 } }
              { 导师签名     } { \clist_item:Nn \l_@@_statement_sign_clist { 5 } }
            \par
            \@@_statement_scan_sign:nnnn
              { 日\qquad{}期 } { \clist_item:Nn \l_@@_statement_sign_clist { 4 } }
              { 日\qquad{}期 } { \clist_item:Nn \l_@@_statement_sign_clist { 6 } }
          }
      }
    \cleardoublepage
  }
%    \end{macrocode}
% \end{macro}
% \paragraph{中英文摘要}
% \begin{macro}{\@@_zh_abstract_keywords:}
% \changes{v1.20.0.0}{2022/05/30}{中文摘要和关键词}
% \changes{v1.28.1.0}{2022/06/18}{添加中文摘要至目录}
% \changes{v1.28.2.0}{2022/06/18}{修正英文语言下中文摘要标题样式}
% 中文摘要和关键词。
%    \begin{macrocode}
\cs_new:Npn \@@_zh_abstract_keywords:
  {
%    \end{macrocode}
% 中文摘要。
%    \begin{macrocode}
    \@@_n_chapter_head_toc:nn { 摘要 } { 摘 { \quad } 要 }
    \@@_lang_switch:nn { } { \@@_add_zh_toc:nn { chapter } { 摘要 } }
    \group_begin:
      \dim_set:Nn \parindent { 2 \ccwd }
      \rmfamily \zihao { -4 }
      \dim_set:Nn \baselineskip { 20pt }
      \file_if_exist_input:n { \l_@@_abstract_zh_tl }
    \group_end:
%    \end{macrocode}
% 中文关键词。
%    \begin{macrocode}
    \group_begin:
      \rmfamily \zihao { -4 }
      \dim_set:Nn \baselineskip { 20pt }
      \skip_vertical:n { 20pt }
      \@@_typeout_keywords:nNn
        { \textbf { 关键词 } ： } { \l_@@_keywords_zh_clist } { ， }
    \group_end:
    \cleardoublepage
  }
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\@@_en_abstract_keywords:}
% \changes{v1.20.0.0}{2022/05/30}{英文摘要和关键词}
% \changes{v1.28.1.0}{2022/06/18}{添加英文摘要至目录}
% \changes{v1.28.2.0}{2022/06/18}{修正英文摘要标题样式}
% \changes{v1.28.3.0}{2022/06/18}{修正目录中英文摘要标题样式}
% 英文摘要和关键词。
%    \begin{macrocode}
\cs_new:Npn \@@_en_abstract_keywords:
  {
%    \end{macrocode}
% 英文摘要。
%    \begin{macrocode}
    \@@_n_chapter_head_toc_ii:nn
      { \textrm { ABSTRACT } } { \centering \rmfamily \zihao { 3 } \dim_set:Nn \baselineskip { 20pt } }
    \@@_lang_switch:nn { } { \@@_add_zh_toc:nn { chapter } { \textrm { ABSTRACT } } }
    \group_begin:
      \dim_set:Nn \parskip { 20pt }
      \rmfamily \zihao { -4 }
      \dim_set:Nn \baselineskip { 20pt }
      \file_if_exist:nT { \l_@@_abstract_en_tl } { \skip_vertical:n { -20pt } }
      \file_if_exist_input:n { \l_@@_abstract_en_tl }
    \group_end:
%    \end{macrocode}
% 英文关键词。
%    \begin{macrocode}
    \group_begin:
      \rmfamily \zihao { -4 }
      \dim_set:Nn \baselineskip { 20pt }
      \skip_vertical:n { 20pt }
      \@@_typeout_keywords:nNn
        { \textbf { Keywords } ： } { \l_@@_keywords_en_clist } { ,~ }
    \group_end:
    \cleardoublepage
  }
%    \end{macrocode}
% \end{macro}
% \paragraph{图表索引}
% \begin{macro}{\@@_loft_label_num_width:nN}
% \changes{v1.21.0.0}{2022/06/01}{计算图表索引编号标签最大宽度}
% 计算图表索引编号标签最大宽度。
%    \begin{macrocode}
\cs_new:Npn \@@_loft_label_num_width:nN #1#2
  {
%    \end{macrocode}
% 读取索引文件。
%    \begin{macrocode}
    \tl_clear_new:N \l_@@_loft_tl
    \file_get:nnN
      { \jobname.#1 }
      { \let\do\@makeother \dospecials }
      \l_@@_loft_tl
%    \end{macrocode}
% 使用正则表达式匹配索引编号。
%    \begin{macrocode}
    \seq_clear_new:N \l_@@_loft_label_num_seq
    \cs_generate_variant:Nn \regex_extract_all:nnN { nVN }
    \str_if_eq:nnTF { #1 } { lof }
      {
        \regex_extract_all:nVN
          { \\contentsline\ \{figure\}\{\\numberline\ \{\K[0-9A-Z\.]+ }
          \l_@@_loft_tl \l_@@_loft_label_num_seq
      }
      {
        \regex_extract_all:nVN
          { \\contentsline\ \{table\}\{\\numberline\ \{\K[0-9A-Z\.]+ }
          \l_@@_loft_tl \l_@@_loft_label_num_seq
      }
%    \end{macrocode}
% 计算所有索引编号的最大宽度。
%    \begin{macrocode}
    \dim_zero_new:N \l_@@_loft_label_num_dim
    \seq_map_inline:Nn \l_@@_loft_label_num_seq
      {
        \@@_get_text_width:Nn \l_@@_loft_label_num_dim { ##1 }
        \dim_set:Nn #2 { \dim_max:nn { \l_@@_loft_label_num_dim } { #2 } }
      }
  }
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\@@_list_of_figure:}
% \changes{v1.21.0.0}{2022/05/31}{插图索引}
% \changes{v1.28.1.0}{2022/06/18}{添加插图索引至目录}
% \changes{v1.29.3.0}{2022/06/19}{修正插图索引字号}
% 插图索引。
%    \begin{macrocode}
\cs_new:Npn \@@_list_of_figure:
  {
    \@@_n_chapter_head_toc:n
      { \@@_lang_switch:nn { 插图索引 } { List~of~Figures } }
    \@@_lang_switch:nn { } { \@@_add_zh_toc:nn { chapter } { 插图索引 } }
    \group_begin:
      \addtocontents { lof } { \vspace { 10pt } }
      \renewcommand { \addvspace } [1] { }
%    \end{macrocode}
% 配置文本标签及宽度。
%    \begin{macrocode}
      \tl_set:Nn \cftfigpresnum {  \figurename \space }
      \dim_zero_new:N \l_@@_lof_label_dim
      \@@_get_text_width:NV \l_@@_lof_label_dim \cftfigpresnum
      \dim_set:Nn \cftfignumwidth { \l_@@_lof_label_dim }
%    \end{macrocode}
% 配置索引编号标签宽度。
%    \begin{macrocode}
      \dim_new:N \l_@@_lof_label_num_max_dim
      \@@_loft_label_num_width:nN { lof } \l_@@_lof_label_num_max_dim
      \dim_add:Nn \cftfignumwidth { \l_@@_lof_label_num_max_dim }
      \dim_add:Nn \cftfignumwidth { .75em }
      \dim_set:Nn \cftfigindent { 0pt }
%    \end{macrocode}
% 排版索引表。
%    \begin{macrocode}
      \rmfamily \zihao { -4 } \dim_set:Nn \baselineskip { 20pt }
      \@starttoc { lof }
    \group_end:
    \cleardoublepage
  }
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\@@_list_of_table:}
% \changes{v1.21.0.0}{2022/05/31}{表格索引}
% \changes{v1.28.1.0}{2022/06/18}{添加表格索引至目录}
% \changes{v1.29.3.0}{2022/06/19}{修正表格索引字号}
% 表格索引。
%    \begin{macrocode}
\cs_new:Npn \@@_list_of_table:
  {
    \@@_n_chapter_head_toc:n
      { \@@_lang_switch:nn { 表格索引 } { List~of~Tables } }
    \@@_lang_switch:nn { } { \@@_add_zh_toc:nn { chapter } { 表格索引 } }
    \group_begin:
      \addtocontents { lot } { \vspace { 10pt } }
      \renewcommand { \addvspace } [1] { }
%    \end{macrocode}
% 配置文本标签及宽度。
%    \begin{macrocode}
      \tl_set:Nn \cfttabpresnum {  \tablename \space }
      \dim_zero_new:N \l_@@_lot_label_dim
      \@@_get_text_width:NV \l_@@_lot_label_dim \cfttabpresnum
      \dim_set:Nn \cfttabnumwidth { \l_@@_lot_label_dim }
%    \end{macrocode}
% 配置索引编号标签宽度。
%    \begin{macrocode}
      \dim_new:N \l_@@_lot_label_num_max_dim
      \@@_loft_label_num_width:nN { lot } \l_@@_lot_label_num_max_dim
      \dim_add:Nn \cfttabnumwidth { \l_@@_lot_label_num_max_dim }
      \dim_add:Nn \cfttabnumwidth { .75em }
      \dim_set:Nn \cfttabindent { 0pt }
%    \end{macrocode}
% 排版索引表。
%    \begin{macrocode}
      \rmfamily \zihao { -4 } \dim_set:Nn \baselineskip { 20pt }
      \@starttoc { lot }
    \group_end:
    \cleardoublepage
  }
%    \end{macrocode}
% \end{macro}
% \paragraph{对照表}
% \begin{macro}{\UseTblrLibrary,\NewTblrTheme}
% \changes{v1.22.0.0}{2022/06/05}{对照表样式}
% 对照表样式。
%    \begin{macrocode}
\ctex_at_end_preamble:n
  {
    \bool_new:N \l_@@_load_tabularray_bool
    \bool_if:NF \l_@@_customize_los_bool
      { \bool_set_true:N \l_@@_load_tabularray_bool }
    \bool_if:NF \l_@@_customize_loa_bool
      { \bool_set_true:N \l_@@_load_tabularray_bool }
    \bool_if:NT \l_@@_load_tabularray_bool
      {
        \RequirePackage { tabularray }
        \UseTblrLibrary { functional }
        \NewTblrTheme { losloatheme }
          {
            \DefTblrTemplate { caption-tag   } { default } { }
            \DefTblrTemplate { caption-sep   } { default } { }
            \DefTblrTemplate { caption-text  } { default } { }
            \DefTblrTemplate { conthead-text } { default } { }
            \DefTblrTemplate { contfoot-text } { default } { }
          }
      }
    \cs_generate_variant:Nn \__tblr_parse_colrow_spec:nn { nV }
  }
%    \end{macrocode}
% \end{macro}
% \begin{variable}{\l_@@_losa_add_skip_dim}
% \changes{v2.10.2.0}{2022/06/28}{对照表行间距补偿值}
% 对照表行间距补偿值：
% $20pt-12bp\times(72.27/72)pt/bp\times1.2\times1.3=1.2098pt$。
%    \begin{macrocode}
\dim_new:N \l_@@_losa_add_skip_dim
\dim_set:Nn \l_@@_losa_add_skip_dim { 1.2098pt }
%    \end{macrocode}
% \end{variable}
% \begin{macro}{\@@_symbols_list:}
% \changes{v1.22.0.0}{2022/06/05}{符号对照表}
% \changes{v1.26.2.0}{2022/06/09}{修复符号对照表列格式解析错误}
% \changes{v1.26.3.0}{2022/06/09}{修复符号对照表文件导入接口}
% \changes{v1.26.5.0}{2022/06/10}{修复符号对照表空文件标题行错误}
% \changes{v1.28.1.0}{2022/06/18}{添加符号对照表至目录}
% \changes{v1.29.1.0}{2022/06/19}{修复符号对照表引起的章节段前段后间距错误}
% \changes{v2.2.1.0}{2022/06/23}{移除表格索引中生成的符号对照表}
% \changes{v2.10.2.0}{2022/06/28}{修正符号对照表行内行间距}
% 符号对照表。
%    \begin{macrocode}
\cs_new:Npn \@@_symbols_list:
  {
    \@@_n_chapter_head_toc:n
      { \@@_lang_switch:nn { 符号对照表 } { List~of~Symbols } }
    \@@_lang_switch:nn { } { \@@_add_zh_toc:nn { chapter } { 符号对照表 } }
%    \end{macrocode}
% 是否完全自定义符号对照表。
%    \begin{macrocode}
    \bool_if:NTF \l_@@_customize_los_bool
      { \file_if_exist_input:n { \l_@@_los_str } }
      {
%    \end{macrocode}
% 配置符号对照表标题行。
%    \begin{macrocode}
        \tl_new:N \l_@@_los_head_tl
        \@@_lang_switch:nn
          { \tl_set:Nn \l_@@_los_head_tl { 符号 & 符号名称 \\        } }
          { \tl_set:Nn \l_@@_los_head_tl { Notation & Description \\ } }
%    \end{macrocode}
% 是否每页均显示符号对照表标题行。
%    \begin{macrocode}
        \tl_new:N \l_@@_los_rowhead_tl
        \bool_if:NTF \l_@@_title_row_los_bool
          { \tl_set:Nn \l_@@_los_rowhead_tl { 1 } }
          { \tl_set:Nn \l_@@_los_rowhead_tl { 0 } }
%    \end{macrocode}
% 使用\envx{longtblr}环境排版符号对照表。
%    \begin{macrocode}
        \tl_new:N \l_@@_los_begin_tblr_tl
        \tl_set:Nx \l_@@_los_begin_tblr_tl
          {
            \exp_not:n
              {
                \begin { longtblr }
                  [
                    evaluate = \fileIfExistInput,
                    expand   = \l_@@_los_head_tl,
                    entry    = none,
                    theme    = losloatheme
                  ]
              }
              {
                colspec = { \exp_not:V \l_@@_colspec_los_tl },
                \exp_not:n
                  {
                    rowhead  = \int_compare:nNnTF
                                 { \value { rowcount } } > { 1 }
                                 { \l_@@_los_rowhead_tl } { 0 },
                    cells    = {
                                 font = \rmfamily \zihao { -4 }
                                 \dim_add:Nn \baselineskip { \l_@@_losa_add_skip_dim }
                               },
                    abovesep = 0pt,
                    belowsep = \l_@@_losa_add_skip_dim
                  }
              }
          }
        \tl_use:N \l_@@_los_begin_tblr_tl
          \l_@@_los_head_tl
          \fileIfExistInput { \l_@@_los_str }
        \end { longtblr }
      }
  }
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\@@_abbreviations_list:}
% \changes{v1.22.0.0}{2022/06/05}{缩略语对照表}
% \changes{v1.26.2.0}{2022/06/09}{修复缩略语对照表列格式解析错误}
% \changes{v1.26.3.0}{2022/06/09}{修复缩略语对照表文件导入接口}
% \changes{v1.26.5.0}{2022/06/10}{修复缩略语对照表空文件标题行错误}
% \changes{v1.28.1.0}{2022/06/18}{添加缩略语对照表至目录}
% \changes{v1.29.1.0}{2022/06/19}{修复缩略语对照表引起的章节段前段后间距错误}
% \changes{v2.2.1.0}{2022/06/23}{移除表格索引中生成的缩略语对照表}
% \changes{v2.10.2.0}{2022/06/28}{修正缩略语对照表行内行间距}
% 缩略语对照表。
%    \begin{macrocode}
\cs_new:Npn \@@_abbreviations_list:
  {
    \@@_n_chapter_head_toc:n
      { \@@_lang_switch:nn { 缩略语对照表 } { List~of~Abbreviations } }
    \@@_lang_switch:nn { } { \@@_add_zh_toc:nn { chapter } { 缩略语对照表 } }
%    \end{macrocode}
% 是否完全自定义缩略语对照表。
%    \begin{macrocode}
    \bool_if:NTF \l_@@_customize_loa_bool
      { \file_if_exist_input:n { \l_@@_loa_str } }
      {
%    \end{macrocode}
% 配置缩略语对照表标题行。
%    \begin{macrocode}
        \tl_new:N \l_@@_loa_head_tl
        \@@_lang_switch:nn
          {
            \tl_set:Nn \l_@@_loa_head_tl
              { 缩略语 & 英文全称 & 中文对照 \\ }
          }
          {
            \tl_set:Nn \l_@@_loa_head_tl
              { Abbreviation & English~Full~Name & Chinese~Full~Name \\ }
          }
%    \end{macrocode}
% 是否每页均显示缩略语对照表标题行。
%    \begin{macrocode}
        \tl_new:N \l_@@_loa_rowhead_tl
        \bool_if:NTF \l_@@_title_row_loa_bool
          { \tl_set:Nn \l_@@_loa_rowhead_tl { 1 } }
          { \tl_set:Nn \l_@@_loa_rowhead_tl { 0 } }
%    \end{macrocode}
% 使用\envx{longtblr}环境排版缩略语对照表。
%    \begin{macrocode}
        \tl_new:N \l_@@_loa_begin_tblr_tl
        \tl_set:Nx \l_@@_loa_begin_tblr_tl
          {
            \exp_not:n
              {
                \begin { longtblr }
                  [
                    evaluate = \fileIfExistInput,
                    expand   = \l_@@_loa_head_tl,
                    entry    = none,
                    theme    = losloatheme
                  ]
              }
              {
                colspec = { \exp_not:V \l_@@_colspec_loa_tl },
                \exp_not:n
                  {
                    rowhead  = \int_compare:nNnTF
                                 { \value { rowcount } } > { 1 }
                                 { \l_@@_loa_rowhead_tl } { 0 },
                    cells    = {
                                 font = \rmfamily \zihao { -4 }
                                 \dim_add:Nn \baselineskip { \l_@@_losa_add_skip_dim }
                               },
                    abovesep = 0pt,
                    belowsep = \l_@@_losa_add_skip_dim
                  }
              }
          }
        \tl_use:N \l_@@_loa_begin_tblr_tl
          \l_@@_loa_head_tl
          \fileIfExistInput { \l_@@_loa_str }
        \end { longtblr }
      }
  }
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\@@_add_zh_toc:nn}
% \changes{v4.4.0.0}{2023/02/03}{中文目录一级标题数学字体加粗}
% \changes{v1.30.0.0}{2022/06/20}{添加章节至中文目录}
%    \begin{macrocode}
\cs_new:Npn \@@_add_zh_toc:nn #1#2
  {
    \str_if_eq:NNTF { #1 } { chapter }
      {
        \phantomsection \addcontentsline { zh.toc }
          { #1 } { \@@_sf_family: \@@_bold_math: #2 }
      }
      { \phantomsection \addcontentsline { zh.toc } { #1 } { #2 } }
  }
%    \end{macrocode}
% \end{macro}
% \paragraph{重定义\tn{frontmatter}}
% \begin{macro}{\frontmatter,\@@_frontmatter:}
% \changes{v1.5.0.0}{2022/05/01}{设置封面页边距}
% \changes{v1.6.0.0}{2022/05/02}{设置页脚页码}
% \changes{v1.16.0.0}{2022/05/22}{绘制研究生封面}
% \changes{v2.7.0.0}{2022/06/26}{研究生学位论文支持移除前言部分页面}
% 排版前言部分。
%    \begin{macrocode}
\RenewDocumentCommand { \frontmatter } { } { }
\cs_new:Npn \@@_frontmatter:
  {
    \loadgeometry { cover }
    \pagestyle    { empty }
    \dim_set:Nn \parindent { 0pt }
    \dim_set:Nn \baselineskip { 20pt }
    \bool_if:NF \l_@@_rm_cover_bool
      {
%    \end{macrocode}
% \changes{v4.4.0.0}{2023/02/03}{研究生封面标题中数学字体加粗}
% \changes{v1.18.1.0}{2022/05/30}{不拆分研究生封面标题}
% 封面标题。
%    \begin{macrocode}
        \vbox:n { }
        \skip_vertical:n { 435pt }
        \vbox_to_ht:nn { 120pt }
          {
            \rmfamily \zihao { 2 } \bfseries \@@_bold_math: \centering
            \dim_set:Nn \baselineskip { 30pt }
            \l_@@_title_tl
          }
%    \end{macrocode}
% 封面底部作者信息。
%    \begin{macrocode}
        \@@_cover_author_info:
        \cleardoublepage
      }
%    \end{macrocode}
% 中英文题名页。
%    \begin{macrocode}
    \bool_if:NF \l_@@_rm_title_page_bool
      {
        \@@_lang_switch:nn
          { \@@_zh_title_page: \@@_en_title_page: }
          { \@@_en_title_page: \@@_zh_title_page: }
      }
%    \end{macrocode}
% 声明页。
%    \begin{macrocode}
    \bool_if:NF \l_@@_rm_statement_bool
      {
        \file_if_exist:nTF { \l_@@_statement_scan_str }
          {
            \loadgeometry { nomargin }
            \vbox_to_ht:nn { \textheight }
              {
                \vfil
                \centering
                \includegraphics
                  [ width = \textwidth, height = \textheight, keepaspectratio ]
                  { \l_@@_statement_scan_str }
                \vfil
              }
            \cleardoublepage
          }
          { \@@_statement: }
      }
%    \end{macrocode}
% 更改页面样式。
%    \begin{macrocode}
    \@@_load_main_geometry:
    \pagestyle     { front }
    \pagenumbering { Roman }
    \dim_set:Nn \baselineskip { 20pt }
%    \end{macrocode}
% 中英文摘要。
%    \begin{macrocode}
    \bool_if:NF \l_@@_rm_abstract_bool
      {
        \@@_lang_switch:nn
          { \@@_zh_abstract_keywords: \@@_en_abstract_keywords: }
          { \@@_en_abstract_keywords: \@@_zh_abstract_keywords: }
      }
%    \end{macrocode}
% 图表索引。
%    \begin{macrocode}
    \bool_if:NF \l_@@_rm_lof_bool
      { \@@_list_of_figure: }
    \bool_if:NF \l_@@_rm_lot_bool
      { \@@_list_of_table: }
%    \end{macrocode}
% 符号对照表和缩略语对照表。
%    \begin{macrocode}
    \bool_if:NF \l_@@_rm_los_bool
      { \@@_symbols_list: }
    \bool_if:NF \l_@@_rm_loa_bool
      { \@@_abbreviations_list: }
%    \end{macrocode}
% \changes{v1.23.0.0}{2022/06/05}{研究生学位论文目录}
% \changes{v1.28.0.0}{2022/06/18}{设置研究生学位论文目录深度}
% 目录。
%    \begin{macrocode}
    \bool_if:NF \l_@@_rm_toc_bool
      {
        \setcounter { tocdepth } { 2 }
        \@@_n_chapter_head:nn
          { \@@_lang_switch:nn { 目录            } { Contents } }
          { \@@_lang_switch:nn { 目 { \quad } 录 } { Contents } }
        \@starttoc { toc }
        \cleardoublepage
%    \end{macrocode}
% \changes{v1.30.0.0}{2022/06/20}{英文研究生学位论文中文目录}
% 英文研究生学位论文中文目录。
%    \begin{macrocode}
        \@@_lang_switch:nn { }
          {
            \setcounter { tocdepth } { 2 }
            \@@_n_chapter_head:nn { 目录 } { \@@_sf_family: 目 { \quad } 录 }
            \@starttoc { zh.toc }
            \cleardoublepage
          }
      }
  }
%    \end{macrocode}
% \end{macro}
%    \begin{macrocode}
%</xdupgthesis>
%<*xduugthesis>
%    \end{macrocode}
% \subsection{正文部分}
% \subsubsection{本科生}
% \begin{macro}{\mainmatter,\@@_mainmatter:}
% \changes{v0.8.0.0}{2022/04/12}{支持对称页边距}
% 排版正文部分。
%    \begin{macrocode}
\RenewDocumentCommand { \mainmatter } { } { }
\cs_new:Npn \@@_mainmatter:
  {
    \@@_load_main_geometry:
    \pagestyle     { plain  }
    \pagenumbering { arabic }
    \dim_set:Nn \parindent { 2 \ccwd }
    \rmfamily \zihao { -4 }
  }
%    \end{macrocode}
% \end{macro}
%    \begin{macrocode}
%</xduugthesis>
%<*xdupgthesis>
%    \end{macrocode}
% \subsubsection{研究生}
% \begin{macro}{\mainmatter,\@@_mainmatter:}
% \changes{v1.5.0.0}{2022/05/01}{设置正文页边距}
% \changes{v1.6.0.0}{2022/05/02}{设置页脚页码}
% \changes{v1.23.1.0}{2022/06/05}{设置正文字号和行间距}
% \changes{v2.10.3.0}{2022/06/28}{修正公式与正文间距}
% 排版正文部分。
%    \begin{macrocode}
\RenewDocumentCommand { \mainmatter } { } { }
\cs_new:Npn \@@_mainmatter:
  {
    \@@_load_main_geometry:
    \pagestyle     { plain  }
    \pagenumbering { arabic }
    \dim_set:Nn \parindent { 2 \ccwd }
    \rmfamily \zihao { -4 }
    \dim_set:Nn \baselineskip { 20pt }
%    \end{macrocode}
% \changes{v4.2.0.0}{2023/01/28}{修改英文研究生学位论文标题命令参数格式}
% \changes{v1.30.0.0}{2022/06/20}{英文研究生学位论文目录中正文一二三级中英双语标题}
% 英文研究生学位论文目录中正文一二三级中英双语标题。
%    \begin{macrocode}
    \@@_lang_switch:nn { }
      {
        \cs_new_eq:NN \@@_org_chapter:n \chapter
        \RenewDocumentCommand { \chapter } { m o }
          {
            \@@_org_chapter:n { ##1 }
            \@@_add_zh_toc:nn { chapter }
              {
                \numberline { 第 \chinese { chapter } 章 \hspace { .3em } }
                \IfNoValueTF { ##2 } { ##1 } { ##2 }
              }
          }
        \cs_new_eq:NN \@@_org_section:n \section
        \RenewDocumentCommand { \section } { m o }
          {
            \@@_org_section:n { ##1 }
            \@@_add_zh_toc:nn { section }
              { \numberline { \thesection } \IfNoValueTF { ##2 } { ##1 } { ##2 } }
          }
        \cs_new_eq:NN \@@_org_subsection:n \subsection
        \RenewDocumentCommand { \subsection } { m o }
          {
            \@@_org_subsection:n { ##1 }
            \@@_add_zh_toc:nn { subsection }
              { \numberline { \thesubsection } \IfNoValueTF { ##2 } { ##1 } { ##2 } }
          }
      }
%    \end{macrocode}
% 修正公式与正文间距。
%    \begin{macrocode}
    \dim_set:Nn \abovedisplayskip      { 12bp }
    \dim_set:Nn \belowdisplayskip      { 12bp }
    \dim_set:Nn \abovedisplayshortskip { 0bp  }
    \dim_set:Nn \belowdisplayshortskip { 12bp }
  }
%    \end{macrocode}
% \end{macro}
%    \begin{macrocode}
%</xdupgthesis>
%<*xduugthesis>
%    \end{macrocode}
% \subsection{后记部分}
% \subsubsection{本科生}
% \begin{macro}{\backmatter,\@@_backmatter:}
% 排版后记部分。
%    \begin{macrocode}
\RenewDocumentCommand { \backmatter } { } { }
\cs_new:Npn \@@_backmatter:
  {
%    \end{macrocode}
% \changes{v1.1.4.0}{2022/04/16}{为致谢章节标题增加间距}
% 致谢。
%    \begin{macrocode}
    \@@_n_chapter_head_toc:nn
      { \@@_lang_switch:nn { 致谢            } { Acknowledgements } }
      { \@@_lang_switch:nn { 致 { \quad } 谢 } { Acknowledgements } }
    \group_begin:
      \dim_set:Nn \parindent { 2 \ccwd }
      \rmfamily \zihao { -4 }
      \file_if_exist_input:n { \l_@@_ack_tl }
    \group_end:
%    \end{macrocode}
% 参考文献。
% \changes{v0.2.1.0}{2022/04/04}{参考文献添加至目录}
% \changes{v0.5.2.0}{2022/04/07}{修正参考文献列表字体字号}
% \changes{v1.3.1.0}{2022/04/21}{修复参考文献列表字体字号}
% \changes{v1.4.1.0}{2022/04/27}{修复bibtex产生的多余参考文献列表章节}
% \changes{v2.2.2.0}{2022/06/24}{修正本科生毕业设计参考文献行间距}
% \changes{v2.2.3.0}{2022/06/24}{修改本科生毕业设计参考文献\bibtex{}字体字号设置方式}
% \changes{v2.2.5.0}{2022/06/24}{修改本科生毕业设计参考文献标签与文献内容的间距}
% \changes{v2.6.1.0}{2022/06/25}{修正本科生毕业设计参考文献斜杠符号字体}
%    \begin{macrocode}
    \cs_set:Npn \bibname { \@@_lang_switch:nn { 参考文献 } { Bibliography } }
    \@@_n_chapter_head_toc:n { \bibname }
    \group_begin:
      \tl_if_eq:NnTF \l_@@_bib_tool_tl { bibtex }
        {
          \dim_set:Nn \labelsep { 1ex }
          \bibliography { \l_@@_bib_file_clist }
        }
        { \printbibliography }
    \group_end:
%    \end{macrocode}
% 本科生毕业设计附录。
%    \begin{macrocode}
    \@@_appendix:
  }
%    \end{macrocode}
% \end{macro}
%    \begin{macrocode}
%</xduugthesis>
%<*xdupgthesis>
%    \end{macrocode}
% \subsubsection{研究生}
% \begin{macro}{\RequirePackage,\newenvironment}
% \changes{v1.26.0.0}{2022/06/07}{作者简介样式}
% 作者简介样式。
%    \begin{macrocode}
\ctex_at_end_preamble:n
  {
%    \end{macrocode}
% 计算列表和表格缩进距离。
%    \begin{macrocode}
      \dim_new:N \l_@@_bio_indent_dim
      \box_new:N \l_@@_bio_indent_box
      \hbox_set:Nn \l_@@_bio_indent_box { \rmfamily \zihao { -3 } \bfseries 1. \quad}
      \dim_set:Nn \l_@@_bio_indent_dim { \box_wd:N \l_@@_bio_indent_box }
%    \end{macrocode}
% 定义教育背景表格环境。
%    \begin{macrocode}
    \bool_if:NF \l_@@_cust_edubg_bool
      {
        \RequirePackage { tabularray }
        \newenvironment { edubg }
          {
            \dim_set:Nn \parindent { 0pt }
            \begin { tblr }
              {
                colspec = { @{ \skip_horizontal:N \l_@@_bio_indent_dim } lX @{ } },
                rows    = { font = \zihao { -4 } \dim_set:Nn \baselineskip { 20pt } }
              }
          }
          {
            \end { tblr }
            \dim_set:Nn \parindent { 2 \ccwd }
          }
      }
%    \end{macrocode}
% 定义研究成果列表。
%    \begin{macrocode}
    \bool_if:NF \l_@@_cust_resresult_bool
      {
        \RequirePackage { enumitem }
        \SetEnumitemKey { resresult }
          {
            label   = {[}\arabic*{]},
            left    = \l_@@_bio_indent_dim,
            align   = right,
            parsep  = 0pt,
            itemsep = 0pt,
            topsep  = 0pt
          }
        \newenvironment { resresult }
          { \begin { enumerate } [ resresult ] }
          { \end { enumerate } }
      }
  }
%    \end{macrocode}
% \end{macro}
% \changes{v2.7.0.0}{2022/06/26}{研究生学位论文支持移除后记部分页面}
% \begin{macro}{\backmatter,\@@_backmatter:}
% 排版后记部分。
%    \begin{macrocode}
\RenewDocumentCommand { \backmatter } { } { }
\cs_new:Npn \@@_backmatter:
  {
%    \end{macrocode}
% 研究生学位论文附录。
%    \begin{macrocode}
    \@@_appendix:
%    \end{macrocode}
% \changes{v1.30.0.0}{2022/06/20}{恢复英文研究生学位论文后记一二三级标题命令}
% 恢复英文研究生学位论文后记一二三级标题命令。
%    \begin{macrocode}
    \@@_lang_switch:nn { }
      {
        \cs_set_eq:NN \chapter \@@_org_chapter:n
        \cs_set_eq:NN \section \@@_org_section:n
        \cs_set_eq:NN \subsection \@@_org_subsection:n
      }
%    \end{macrocode}
% \changes{v1.25.0.0}{2022/06/05}{研究生学位论文参考文献}
% \changes{v2.2.2.0}{2022/06/24}{修正研究生学位论文参考文献行间距}
% \changes{v2.2.3.0}{2022/06/24}{修改研究生学位论文参考文献\bibtex{}字体字号设置方式}
% \changes{v2.2.5.0}{2022/06/24}{修改研究生学位论文参考文献标签与文献内容的间距}
% \changes{v2.6.1.0}{2022/06/25}{修正研究生学位论文参考文献斜杠符号字体}
% 参考文献。
%    \begin{macrocode}
    \bool_if:NF \l_@@_rm_ref_bool
      {
        \cs_set:Npn \bibname { \@@_lang_switch:nn { 参考文献 } { Bibliography } }
        \@@_n_chapter_head_toc:n { \bibname }
        \@@_lang_switch:nn { } { \@@_add_zh_toc:nn { chapter } { 参考文献 } }
      }
    \group_begin:
      \tl_if_eq:NnTF \l_@@_bib_tool_tl { bibtex }
        {
          \bool_if:NTF \l_@@_rm_ref_bool
            { \nobibliography { \l_@@_bib_file_clist } }
            {
              \dim_set:Nn \labelsep { 1ex }
              \bibliography { \l_@@_bib_file_clist }
            }
        }
        {
          \bool_if:NF \l_@@_rm_ref_bool
            { \printbibliography }
        }
    \group_end:
%    \end{macrocode}
% \changes{v1.24.0.0}{2022/06/05}{研究生学位论文致谢}
% 致谢。
%    \begin{macrocode}
    \bool_if:NF \l_@@_rm_ack_bool
      {
        \@@_n_chapter_head_toc:nn
          { \@@_lang_switch:nn { 致谢            } { Acknowledgements } }
          { \@@_lang_switch:nn { 致 { \quad } 谢 } { Acknowledgements } }
        \@@_lang_switch:nn { } { \@@_add_zh_toc:nn { chapter } { 致谢 } }
        \group_begin:
          \dim_set:Nn \parindent { 2 \ccwd }
          \rmfamily \zihao { -4 }
          \dim_set:Nn \baselineskip { 20pt }
          \file_if_exist_input:n { \l_@@_ack_tl }
        \group_end:
      }
%    \end{macrocode}
% \changes{v1.26.0.0}{2022/06/07}{研究生学位论文作者简介}
% \changes{v1.28.4.0}{2022/06/18}{移除研究生学位论文目录中作者简介二三级标题}
% 作者简介。
%    \begin{macrocode}
    \bool_if:NF \l_@@_rm_bio_bool
      {
        \@@_n_chapter_head_toc:n
          { \@@_lang_switch:nn { 作者简介 } { Author~Biography } }
        \@@_lang_switch:nn { } { \@@_add_zh_toc:nn { chapter } { 作者简介 } }
        \group_begin:
          \dim_set:Nn \parindent { 2 \ccwd }
          \rmfamily \zihao { -4 }
          \dim_set:Nn \baselineskip { 20pt }
%    \end{macrocode}
% \changes{v4.0.1.0}{2022/12/11}{兼容\pkgx{calc}包}
% 配置作者简介部分标题样式。
%    \begin{macrocode}
          \ctexset
            {
                section    / number = { \arabic { section } . },
                section    / format = { \rmfamily \zihao { -3 } \bfseries \raggedright },
                subsection / number = { \arabic { section } . \arabic { subsection } },
                subsection / format = { \rmfamily \zihao { 4 } \bfseries \raggedright },
                subsection / indent = { \l_@@_bio_indent_dim }
            }
%    \end{macrocode}
% \changes{v6.1.3.0}{2023/03/13}{修复研究生学位论文作者简介书签深度}
% \changes{v4.4.3.0}{2023/02/09}{修复研究生学位论文书签深度}
% 作者简介文件。
%    \begin{macrocode}
          \addtocontents { toc } { \protect \setcounter { tocdepth } { 0 } }
          \setcounter { tocdepth } { 0 }
          \file_if_exist_input:n { \l_@@_bio_str }
          \addtocontents { toc } { \protect \setcounter { tocdepth } { 2 } }
          \setcounter { tocdepth } { 2 }
        \group_end:
      }
%    \end{macrocode}
% \changes{v6.1.4.0}{2023/03/13}{修复研究生学位论文尾页缺失}
%    \begin{macrocode}
    \cleardoublepage
  }
%    \end{macrocode}
% \end{macro}
%    \begin{macrocode}
%</xdupgthesis>
%<*thesis>
%    \end{macrocode}
% \subsection{前言、正文和后记部分}
% \changes{v4.0.0.0}{2022/12/11}{本科生毕业设计和研究生学位论文添加前言、正文和后记部分}
% 本科生毕业设计和研究生学位论文添加前言、正文和后记部分。
%    \begin{macrocode}
\ctex_after_end_preamble:n { \@@_frontmatter: \@@_mainmatter: }
\AtEndDocument             { \@@_backmatter:                  }
%    \end{macrocode}
%    \begin{macrocode}
%</thesis>
%<*xduugtp>
%    \end{macrocode}
% \changes{v4.1.0.0}{2022/12/31}{增加本科生毕业设计开题报告}
% \subsection{本科生毕业设计开题报告}
% \begin{macro}{\tcbset}
% 自定义线框样式。
%    \begin{macrocode}
\PassOptionsToPackage { breakable } { tcolorbox }
\RequirePackage       { tcolorbox }
\dim_new:N \l_@@_box_margin_dim
\dim_set:Nn \l_@@_box_margin_dim { 5pt }
\dim_new:N \l_@@_box_rule_dim
\dim_set:Nn \l_@@_box_rule_dim { 0.5pt }
\tcbset
  {
    standard~jigsaw,
    sharp~corners    = all,
    colframe         = black,
    opacityback      = 0,
    boxsep           = 0pt,
    boxrule          = \l_@@_box_rule_dim,
    top              = \l_@@_box_margin_dim,
    bottom           = \l_@@_box_margin_dim,
    left             = \l_@@_box_margin_dim,
    right            = \l_@@_box_margin_dim,
    beforeafter~skip = 0pt,
    before~upper     =
      {
        \dim_set:Nn \parindent    { 2em  }
        \dim_set:Nn \baselineskip { 20pt }
      }
  }
\tcbset
  {
    tpboxi/.style =
      {
        breakable        = true,
        height~fixed~for = first~and~middle
      },
    tpboxii/.style =
      {
        breakable        = true,
        height~fixed~for = all,
        height~fill      = maximum
      },
    tpboxiii/.style =
      {
        height           = .5\textheight + .5\l_@@_box_rule_dim,
        space~to~upper   = true,
        lower~separated  = false,
        halign~lower     = flush~right
      }
  }
%    \end{macrocode}
% \end{macro}
% \begin{macro}{tpbox}
% 自定义\envx{tpbox}环境，便于实现用户正文输入为空亦可编译。
%    \begin{macrocode}
\RequirePackage { graphicx }
\int_new:N \l_@@_sign_no_int
\int_set:Nn \l_@@_sign_no_int { 1 }
\NewDocumentEnvironment { tpbox } { oo }
  { \IfNoValueF { #1 } { \begin { tcolorbox } [ #1 ] } }
  {
    \IfNoValueF { #1 }
      {
        \IfNoValueF { #2 }
          {
            \tcblower
            签名
            \clist_if_empty:NTF \l_@@_sign_clist
              { \skip_horizontal:n { 6em } \hbox:n { } }
              {
                \skip_horizontal:n { 1em }
                \includegraphics [ width = 10em, height = 25pt, keepaspectratio ]
                  {
                    \str_if_eq:nnTF { #2 } { 指导教师意见 }
                      { \clist_item:Nn \l_@@_sign_clist { 1 } }
                      { \clist_item:Nn \l_@@_sign_clist { 2 } }
                  }
              }
            \\
            \clist_if_empty:NTF \l_@@_date_clist
              { \@@_zh_today: }
              {
                \str_if_eq:nnTF { #2 } { 指导教师意见 }
                  { \clist_item:Nn \l_@@_zh_date_clist { 1 } }
                  { \clist_item:Nn \l_@@_zh_date_clist { 2 } }
              }
          }
        \end { tcolorbox }
      }
  }
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\@@_bib:}
%    \begin{macrocode}
\cs_new:Npn \@@_bib:
  {
    \cs_set:Npn \bibname { 参考文献 }
    \subsection* { \bibname }
    \group_begin:
      \tl_if_eq:NnTF \l_@@_bib_tool_tl { bibtex }
        {
          \dim_set:Nn \labelsep { 1ex }
          \bibliography { \l_@@_bib_file_clist }
        }
        { \printbibliography }
    \group_end:
  }
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\section}
% 重定义\tnx{section}命令。
%    \begin{macrocode}
\cs_new_eq:NN \@@_org_sec:n \section
\RenewDocumentCommand \section { m }
  {
    \str_case:nnTF { #1 }
      {
        { 论文名称及项目来源 }
          {
            \end   { tpbox }
            \begin { tpbox } [tpboxi]
          }
        { 研究目的和意义 }
          {
            \end   { tpbox }
            \skip_vertical:n { -\l_@@_box_rule_dim }
            \skip_vertical:n { \z@skip }
            \begin { tpbox } [ tpboxii ]
          }
        { 国内外研究现状和发展趋势 }
          {
            \end   { tpbox }
            \begin { tpbox } [ tpboxii ]
          }
        { 主要研究内容、要解决的问题及本文的初步方案 }
          {
            \@@_bib:
            \end   { tpbox }
            \begin { tpbox } [ tpboxii ]
          }
        { 工作的主要阶段、进度和完成时间 }
          {
            \end   { tpbox }
            \begin { tpbox } [ tpboxi ]
          }
        { 已进行的前期准备工作 }
          {
            \end   { tpbox }
            \skip_vertical:n { -\l_@@_box_rule_dim }
            \skip_vertical:n { \z@skip }
            \begin { tpbox } [ tpboxii ]
          }
        { 指导教师意见 }
          {
            \end   { tpbox }
            \begin { tpbox } [ tpboxiii ] [ 指导教师意见 ]
          }
        { 学院审核意见 }
          {
            \end   { tpbox }
            \skip_vertical:n { -\l_@@_box_rule_dim }
            \skip_vertical:n { \z@skip }
            \begin { tpbox } [ tpboxiii ] [ 学院审核意见 ]
          }
      }
      { \@@_org_sec:n { #1 } }
      { }
  }
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\pagestyle}
% 移除页码。
%    \begin{macrocode}
\pagestyle { empty }
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\ctexset}
% 设置标题样式。
%    \begin{macrocode}
\ctexset
  {
    section       / name       = { ,、   },
    subsection    / name       = { （,） },
    subsubsection / name       = { （,） },
    section       / number     = { \chinese { section       } },
    subsection    / number     = { \chinese { subsection    } },
    subsubsection / number     = { \arabic  { subsubsection } },
    section       / format     = { \raggedright \zihao { -4 } },
    subsection    / format     = { \raggedright \zihao { -4 } },
    subsubsection / format     = { \raggedright \zihao { -4 } },
    section       / aftername  = { },
    subsection    / aftername  = { },
    subsubsection / aftername  = { },
    section       / beforeskip = { 0pt },
    subsection    / beforeskip = { 8pt },
    subsubsection / beforeskip = { 8pt },
    section       / afterskip  = { 0pt },
    subsection    / afterskip  = { 0pt },
    subsubsection / afterskip  = { 0pt },
    section       / indent     = { 0em },
    subsection    / indent     = { 0em },
    subsubsection / indent     = { 2em },
  }
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\@@_uline:n,\@@_uline:nn}
% 下划线。
%    \begin{macrocode}
\RequirePackage { xeCJKfntef }
\cs_new:Npn \@@_uline:n #1
  { \CJKunderline [ thickness = 1pt ] { #1 } }
\cs_new:Npn \@@_uline:nn #1#2
  { \CJKunderline [ thickness = 1pt ] { \hbox_to_wd:nn { #1 } { \hfil #2 \hfil } } }
%    \end{macrocode}
% \end{macro}
% \begin{variable}{\l_@@_cover_author_info_dim}
% 获取封面作者信息最大宽度。
%    \begin{macrocode}
\dim_new:N \l_@@_cover_author_info_dim
\dim_set:Nn \l_@@_cover_author_info_dim { 5em }
\ctex_at_end_preamble:n
  {
    \rmfamily \zihao { -3 }
    \@@_str_max_dim:Nn \l_@@_cover_author_info_dim { \l_@@_author_str     }
    \@@_str_max_dim:Nn \l_@@_cover_author_info_dim { \l_@@_major_str      }
    \@@_str_max_dim:Nn \l_@@_cover_author_info_dim { \l_@@_student_id_str }
    \@@_str_max_dim:Nn \l_@@_cover_author_info_dim { \l_@@_supv_str       }
    \dim_add:Nn \l_@@_cover_author_info_dim { 2em }
  }
%    \end{macrocode}
% \end{variable}
% \begin{macro}{\@@_cover_author_info:nn}
% 绘制封面作者信息。
%    \begin{macrocode}
\cs_new:Npn \@@_cover_author_info:nn #1#2
  {
    \vbox_to_ht:nn { 31pt }
      {
        \mode_leave_vertical:
        \hfil
        \hbox:n
          {
            \rmfamily \zihao { -3 }
            \hbox_to_wd:nn { 4em } { #1 }
            \skip_horizontal:n { 0.5em }
            \@@_uline:nn { \l_@@_cover_author_info_dim } { #2 }
          }
        \hfil
      }
  }
%    \end{macrocode}
% \end{macro}
% \begin{variable}{\l_@@_pure_dept_str}
% 移除末尾的学院二字。
%    \begin{macrocode}
\cs_generate_variant:Nn \str_if_eq:nnTF { xnTF }
\ctex_at_end_preamble:n
  {
    \str_new:N \l_@@_pure_dept_str
    \str_if_eq:xnTF { \str_range:Nnn \l_@@_dept_str { -2 } { -1 } } { 学院 }
      { \str_set:Nx \l_@@_pure_dept_str { \str_range:Nnn \l_@@_dept_str { 1 } { -3 } } }
      { \str_set:NV \l_@@_pure_dept_str \l_@@_dept_str }
  }
%    \end{macrocode}
% \end{variable}
% \begin{macro}{\@@_zh_today:}
% 今日年月日。
%    \begin{macrocode}
\cs_new:Npn \@@_zh_today:
  {
    \int_use:N \c_sys_year_int  年
    \int_use:N \c_sys_month_int 月
    \int_use:N \c_sys_day_int   日
  }
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\@@_split_submit_date:N}
% 拆分提交日期为年、月和日。
%    \begin{macrocode}
\seq_new:N \l_@@_submit_date_seq
\cs_new:Npn \@@_split_submit_date:N #1
  {
    \seq_set_split:NnV \l_@@_submit_date_seq { - } \l_@@_submit_date_str
    \clist_set_from_seq:NN #1 \l_@@_submit_date_seq
  }
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\@@_zh_submit_date:}
% \changes{v1.17.0.0}{2022/05/28}{中文提交日期}
% 中文提交日期。
%    \begin{macrocode}
\clist_new:N \l_@@_submit_date_clist
\cs_new:Npn \@@_zh_submit_date:
  {
    \str_if_empty:NTF \l_@@_submit_date_str
      { \@@_zh_today: }
      {
        \@@_split_submit_date:N \l_@@_submit_date_clist
        \clist_item:Nn \l_@@_submit_date_clist { 1 } 年
        \clist_item:Nn \l_@@_submit_date_clist { 2 } 月
        \clist_item:Nn \l_@@_submit_date_clist { 3 } 日
      }
  }
%    \end{macrocode}
% \end{macro}
% \begin{variable}
%   {
%     \l_@@_zh_date_clist,
%     \l_@@_zh_date_one_clist,
%     \l_@@_date_seq
%   }
% 格式化开题签名日期。
%    \begin{macrocode}
\clist_new:N \l_@@_zh_date_clist
\clist_new:N \l_@@_zh_date_one_clist
\seq_new:N \l_@@_date_seq
\ctex_at_end_preamble:n
  {
    \clist_map_inline:Nn \l_@@_date_clist
      {
        \seq_set_split:Nnn \l_@@_date_seq { - } { #1 }
        \clist_set_from_seq:NN \l_@@_zh_date_one_clist \l_@@_date_seq
        \clist_put_right:Nx \l_@@_zh_date_clist
          {
            \clist_item:Nn \l_@@_zh_date_one_clist { 1 } 年
            \clist_item:Nn \l_@@_zh_date_one_clist { 2 } 月
            \clist_item:Nn \l_@@_zh_date_one_clist { 3 } 日
          }
      }
  }
%    \end{macrocode}
% \end{variable}
% \begin{macro}{\@@_cover:,\ctex_after_end_preamble:n}
% 绘制封面。
%    \begin{macrocode}
\cs_new:Npn \@@_cover:
  {
    \vbox:n { }
    \skip_vertical:n { -5pt }
    \vbox_to_ht:nn { 85pt }
      {
        \rmfamily \zihao { -2 } \centering
        西安电子科技大学 \@@_uline:n { \l_@@_pure_dept_str } 学院
      }
    \vbox_to_ht:nn { 32.5pt }
      {
        \sffamily \zihao { 2 } \centering
        本科生毕业论文（设计）开题报告
      }
    \vbox_to_ht:nn { 171pt }
      {
        \CJKfamily+ { sf } \zihao { -3 } \centering
        （\l_@@_class_str{} 届）
      }
    \@@_cover_author_info:nn { 学生姓名 } { \l_@@_author_str     }
    \@@_cover_author_info:nn { 专业     } { \l_@@_major_str      }
    \@@_cover_author_info:nn { 学号     } { \l_@@_student_id_str }
    \@@_cover_author_info:nn { 指导教师 } { \l_@@_supv_str       }
    \skip_vertical:n { 92pt }
    \vbox_to_ht:nn { 81.5pt }
      {
        \rmfamily \zihao { 4 } \centering
        \@@_zh_submit_date:
      }
    \vbox:n
      {
        \rmfamily \zihao { 5 } \centering
        （本表一式三份，学生、指导教师、学院各一份）
      }
  }
\ctex_after_end_preamble:n { \@@_cover: \clearpage }
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\ctex_after_end_preamble:n,\AtEndDocument}
% 实现用户正文为空可编译。
%    \begin{macrocode}
\ctex_after_end_preamble:n { \begin { tpbox } }
\AtEndDocument             { \end   { tpbox } }
%    \end{macrocode}
% \end{macro}
%    \begin{macrocode}
%</xduugtp>
%    \end{macrocode}
%    \begin{macrocode}
%<@@=>
%    \end{macrocode}
% \end{implementation}
% \Finale
