% \iffalse meta-comment
%
% Copyright (C) 2022
% Association of Bit Network Pioneer and any individual authors listed elsewhere in this file.
% -----------------------------------
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either
% version 1.3c of this license or (at your option) any later
% version. This version of this license is in
%    http://www.latex-project.org/lppl/lppl-1-3c.txt
% and the latest version of this license is in
%    http://www.latex-project.org/lppl.txt
% and version 1.3 or later is part of all distributions of
% LaTeX version 2020/11/27 or later.
%
% \fi
%
% \iffalse
%<cls>\RequirePackage{expl3,l3keys2e}
%<thesis>\ProvidesExplClass{bithesis}
%<report>\ProvidesExplClass{bitreport}
%<beamer>\ProvidesExplClass{bitbeamer}
%<cls>{2022-12-30}{3.2.3}{BIT Thesis Templates}
%
%<oldcls>\NeedsTeXFormat{LaTeX2e}[2020/10/01]
%<book>\ProvidesClass{bitbook}
%<article>\ProvidesClass{bitart}
%<graduate>\ProvidesClass{bitgrad}
%<oldcls> [2022/05/09 v2.1.1 BIT Thesis Templates]
%
%<*driver>
\ProvidesFile{bithesis.dtx}[2022/12/30 3.2.3 BIT Thesis Templates]
\documentclass[letterpaper]{l3doc}
\usepackage{dtx-style}

\EnableCrossrefs
\CodelineIndex

\RecordChanges
\begin{document}
  \DocInput{\jobname.dtx}
  \PrintChanges
  \def\indexname{代码索引}
  \PrintIndex
\end{document}
%</driver>
% \fi
%
% \DoNotIndex{\newenvironment,\@bsphack,\@empty,\@esphack,\sfcode}
% \DoNotIndex{\addtocounter,\label,\let,\linewidth,\newcounter}
% \DoNotIndex{\noindent,\normalfont,\par,\parskip,\phantomsection}
% \DoNotIndex{\providecommand,\ProvidesPackage,\refstepcounter}
% \DoNotIndex{\RequirePackage,\setcounter,\setlength,\string,\strut}
% \DoNotIndex{\textbackslash,\texttt,\ttfamily,\usepackage}
% \DoNotIndex{\begin,\end,\begingroup,\endgroup,\par,\\}
% \DoNotIndex{\if,\ifx,\ifdim,\ifnum,\ifcase,\else,\or,\fi}
% \DoNotIndex{\let,\def,\xdef,\edef,\newcommand,\renewcommand}
% \DoNotIndex{\expandafter,\csname,\endcsname,\relax,\protect}
% \DoNotIndex{\Huge,\huge,\LARGE,\Large,\large,\normalsize}
% \DoNotIndex{\small,\footnotesize,\scriptsize,\tiny}
% \DoNotIndex{\normalfont,\bfseries,\slshape,\sffamily,\interlinepenalty}
% \DoNotIndex{\textbf,\textit,\textsf,\textsc}
% \DoNotIndex{\hfil,\par,\hskip,\vskip,\vspace,\quad}
% \DoNotIndex{\centering,\raggedright,\ref}
% \DoNotIndex{\c@secnumdepth,\@startsection,\@setfontsize}
% \DoNotIndex{\ ,\@plus,\@minus,\p@,\z@,\@m,\@M,\@ne,\m@ne}
% \DoNotIndex{\@@par,\DeclareOperation,\RequirePackage,\LoadClass}
% \DoNotIndex{\AtBeginDocument,\AtEndDocument,\AtBeginEnvironment}
%
% \GetFileInfo{\jobname.dtx} %
% 
% \def\indexname{索引}
% \IndexPrologue{\section{\indexname}}
%
% \title{\includegraphics[width=0.3\textwidth]{images/icon.png}
% \\[1cm]
% \bfseries 北京理工大学{\LaTeX}学位论文及报告模板 }
% \author{北京理工大学网络开拓者协会 \\ \texttt{webmaster@bitnp.net}} %
% \date{\zihao{-4} \today\quad \color{RubineRed}{\kaishu {\BIThesis}版本\version}}
% \maketitle\thispagestyle{empty}
%
% \def\abstractname{}
% \begin{abstract}\noindent
%   此宏包旨在建立一个简单易用的北京理工大学学位论文 $\LaTeX$ 模板
%  （以及其他模板），包括本科毕业设计与研究生学位论文。
% \end{abstract}
%
% \vspace{5mm}
%
% \begin{center}
% \noindent\rule[0.25\baselineskip]{0.5\textwidth}{0.7pt}
% \end{center}
% 
% \def\abstractname{免责声明}
% \begin{abstract}
% \noindent
% \begin{enumerate}
% \item 本模板的发布遵守 \LPPL ，使用前请认真阅读协议内容。
% \item 与\BIThesis 相关的文档内容采用 
%  \href{https://github.com/BITNP/BIThesis-wiki/blob/main/LICENSE}{CC0-1.0 协议} 发布。
% \item 任何个人或组织以本模板为基础进行修改、扩展而生成的新的专用模板，
%  请严格遵守 \LaTeX{} Project Public License 协议。
%  由于违犯协议而引起的任何纠纷争端均与本模板作者无关。
% \end{enumerate}
% \end{abstract}
%
% \vspace{5mm}
%
% \def\abstractname{简介}
% \begin{abstract}
% \BIThesisLaTeX 是北京理工大学本科生毕业设计与研究生学位论文，
%   以及其他课程报告、实验报告的 {\LaTeX} 模板集合。
%   如果你厌烦了 Word 格式的不人性化、参考文献的难以管理、
%   公式输入的差劲体验……那么欢迎来尝试用专业的学术稿件排版利器 —— {\LaTeX}，
%   来排版你的论文。
%   专业高端、学界认可、开源免费，{\LaTeX} 是你论文排版的最佳搭档。
%
% \BIThesisLaTeX 目前支持使用 {\hologo{XeLaTeX}} 进行编译，
% 使用以 biber 为后端的 BibLaTeX 进行参考文献的生成，
% 符合《信息与文献参考文献著录规则》
% （\href{http://openstd.samr.gov.cn/bzgk/gb/newGbInfo?hcno=7FA63E9BBA56E60471AEDAEBDE44B14C}{GB/T 7714—2015}）
% 的标准。
% 
% 目前，\BIThesisLaTeX 主要设计完成了计算机学院本科生毕业论文开题报告、
% 本科生毕业（设计）论文、研究生学位论文、本科生毕业（设计）论文外文翻译、
% 全英文专业本科生毕业（设计）论文与通用实验报告的 {\LaTeX} 模板。
%
% \end{abstract}
% \newpage
%
% \tableofcontents
% \clearpage
% \setlength{\parskip}{0.8ex}
%
% \section{常用术语表}
% \label{sec:terms}
% \begin{description}
%   \item[\LaTeX] \LaTeX{} 是一个高质量的文档排版系统
%     ，他是基于 \TeX{} 进一步封装实现的。
%   \item[\LaTeX2e] \LaTeX2e 是 \LaTeX{} 的最新稳定版本，
%     目前大家使用的都是这个版本。
%   \item[\LaTeX3] \LaTeX3 是 \LaTeX{} 的下一代版本，
%     目前还在开发中（近十年了）。
%     \LaTeX3 旨在为宏基编写人员提供一套通用的编程层。
%     目前，\LaTeX3 的功能已经
%     通过 \pkg{expl3} 等宏包在 \LaTeX2e 中提供。
%     目前，|bithesis| 就是通过 \pkg{expl3} 实现的。
%   \item[\LaTeX 引擎] 引擎就是将TeX代码转化为页面描述语言(PDL)的核心部分，
%     就像C语言的编译器一样。比如 \hologo{XeLaTeX}、\hologo{LuaLaTeX} 等。
%   \item[编辑器] TeX的编辑器给用户提供了较为方便的交互工具，
%     将一些编译的过程都做成了按钮，
%     省去了我们需要去命令行一步步编译，且提供了较为方便的编辑环境，
%     如快捷键注释、语法高亮等等功能。常见的编辑器有 TeXstudio 等。
%     另一些编辑器则是通过插件的方式来实现 TeX 的编辑，如 VSCode、Neovim、Vim 等。
%   \item[宏包 (package)] \LaTeX{} 语言本质上是一个宏语言（通过文本替换而层层展开），
%     而宏包就是一些宏的集合。CTAN 中的 bithesis 就是一个宏包。
%   \item[宏集] 宏集是一些宏包的集合，比如 ctex 宏集。
%   \item[CTAN] Comprehensive TeX Archive Network，CTAN 是 TeX 项目的官方网站，
%     也是 TeX 项目的主要资源库。
%     你使用的 \LaTeX{} 发行版中的宏包都是通过 CTAN 来发布的。
%   \item[发行版] 发行版是将引擎，格式，宏包等等打包成一套安装文件的软件，
%     TeX Live、MiKTeX 等。
%   \item[文档类] 文档类指代一类以 |.cls| 结尾的文件，它们定义了文档的基本结构，
%     通常包括文档的标题、作者、日期、页眉、页脚、正文样式等等。
%     你可以通过 \cs{documentclass} 命令来指定文档类。
%     没错，|bithesis| 为你提供的模板功能就是通过数个文档类实现的。
% \end{description}
%
% \section{项目简介}
% \subsection{历史与贡献者们}
% \begin{itemize}
%   \item 在 2017 年之前，网络上已经出现一些北京理工大学学位论文 \LaTeX 模板。
%     它们是“2012大眼小蚂蚁版”和“2016汪卫版”，均以上海交通大学的模板为基础。
%   \item 2017 - 2018 年，计算机学院 2016 级研究生杨雅婷等人受研究生院委托，
%     制作了\href{https://github.com/BIT-thesis/LaTeX-template}{BIT-Thesis} 
%     研究生学位论文模板。
%   \item 2019 - 2020 年，\BIThesis 最早由 2016 级的
%     武上博、王赞、唐誉铭、牟思睿和詹熠莎等人维护。
%   \begin{itemize}
%     \item 此时，\BIThesis 仅支持本科生毕业论文的排版。
%     \item 在此期间，\BIThesis 从无到有诞生了，包括使用手册、
%       在线文档和开箱即用的模板。
%     \item 同时，2017 级的赵池等同学完成了一系列 \BIThesisLaTeX 
%       的视频教程。
%   \end{itemize}
%   \item 2020 - 2021 年，2017 级的冯开宇、杨思云、郝正亮和顾骁等人
%       接管了维护开发工作。
%   \begin{itemize}
%     \item 在此期间，冯开宇将原来的 .tex 文件制作成了宏包，并发布到 CTAN 上。
%     \item 项目代码也随之被拆分成了 \BIThesisMacroPackage，
%       \BIThesisWiki 和 \BIThesisScaffold。
%     \item 此版本是 V2 版本，代号为 Birthday Cake.
%   \end{itemize}
%   \item 2021 - 2022 年，2021 级（硕士研究生）的冯开宇针对 2021、
%       2022 毕业季收到的反馈对该项目进行维护升级。
%   \begin{itemize}
%     \item 在此期间，冯开宇合入了杨雅婷等人在 2017 年开发的研究生学位论文模板。
%     \item 在项目架构上，BIThesis-scaffold 合入 BIThesis 以便于进一步维护。 
%     \item 次年暑假期间，冯开宇用 \pkg{expl3} 重构了\LaTeX 样式代码，
%       向用户提供了简易易用的接口。
%     \item 同时，也增加了本科全英文专业的毕设论文模板样式。
%     \item 此版本是 V3 版本，代号为 Summer Time.
%   \end{itemize}
% \end{itemize}
%
% \subsection{\BIThesis 是什么？}
% \BIThesis 之名是英文单词 Beijing Institution of Technology（北京理工大学）
% 的首字母缩写“BIT” 与“Thesis”结合而成。在纯文本环境下，该名字应写作“BIThesis”。
% 同理，其 IPA 发音为 |/ˈbiːˈaiˈtiːˈθiː.sis/|。
%
% \BIThesisLaTeX 是由北京理工大学众多学子发起并维护的开源项目。
% 该项目旨在建立一套简单易用的北京理工大学 \LaTeX 学位论文模板。
%
% \subsection{为什么要使用 \BIThesis？}
% 学位论文通常具有比较严格的格式要求，这是为了方便同行学术交流的起码要求，
% 同时也是科学研究严谨性的体现。
% 然而，由于市场各种排版软件混杂，使用者水平不一，学生对格式的重视程度不够，
% 学生编写标准格式的学位论存在很多问题。
% \BIThesisLaTeX 为符合北京理工大学硕士（博士）学位论文的LaTeX模板。
% 通过使用\BIThesisLaTeX 模板，学生可以轻松撰写符合学校格式要求的学位论文，
% 避免繁琐的论文格式调整；从而将关注点更多地放在高质量的内容本身。
%
% 要使用这个模板协助你完成学位论文的创作，下面的条件必须满足：
% \begin{itemize}
% \item  操作系统字体目录中有中文字体；
% \item  \TeX~系统有~\XeTeX~引擎（一般发行版均已经具备）；
% \item  你有使用~\LaTeX~ 的经验，或者愿意为此学习；
% \end{itemize}
%
% \subsubsection{\BIThesisLaTeX 的组成}
% 我们将 \BIThesisLaTeX 划分为了两个主要仓库：
% \begin{table}[H]
% \centering
% \begin{tabular}{@{}l l p{6cm} @{}}
% \toprule
% 项目                & 项目地址 & 主要目的 \\ \midrule
% BIThesis   &   \href{https://github.com/BITNP/BIThesis}{BITNP/BIThesis}   
%   &  主要存储 \BIThesis  宏包以及开箱即用的模板样式 \\
% BIThesis-wiki    
%   &   \href{https://github.com/BITNP/BIThesis-wiki}{BITNP/BIThesis-wiki}  
%   &  存储 \BIThesisLaTeX 项目在线文档   \\ \bottomrule
% \end{tabular}
% \end{table}
%
% 如果你仅想解决「我如何使用 \BIThesisLaTeX 来帮助我完成实验论文？」这个问题，
% 那么欢迎你访问我们的\href{https://bithesis.bitnp.net}{在线文档}以获得更多信息。 
%
% 如果你想深入了解 \BIThesisLaTeX 提供的接口的各种选项，那么请继续阅读。
% 
% \subsection{\BIThesis 宏包的组成}
% 为了适应用户的不同需求，我们将 \BIThesisMacroPackage 
% 的主要功能设计安排在两个中文文档类当中，具体的组成见 \ref{tab:classes}。
% \begin{table}[H]
% \centering
% \caption{测试}
% \label{tab:classes}
% \begin{tabular}{@{}lll@{}}
% \toprule
% 类别                   & 文件
%   & 说明                             \\ \midrule
% \multirow{2}{*}{文档类} & \cls{bithesis.cls}\ref{sec:bithesis}  
%   & 封装本科生与研究生的毕业论文样式。 \\
% & \cls{bitreport.cls}\ref{sec:bitreport} 
%   & 封装了本科生开题报告与实验报告样式。     \\ \cmidrule(l){2-3}
% & \cls{bitbeamer.cls} 
%   & 对应 ctexbeamer.cls ，提供了北理工的 Beamer 模板样式。     
%   \\ \cmidrule(l){2-3}
% \end{tabular}
% \end{table}
%
% \subsection{\BIThesisLaTeX 是如何发布的？}
% \label{sec:release}
%
% \BIThesisLaTeX 每一个版本会有三种发布方式： 
%
% \begin{itemize}
%   \item  CTAN 发布：
%     \href{https://ctan.org/pkg/bithesis}{CTAN bithesis package}
%   \item  GitHub 发布：
%     \href{https://github.com/BITNP/BIThesis/releases}{Github Releases}
%     \footnote{最推荐使用此种方式}
%   \item  Overleaf 发布：
%     \href{https://bithesis.bitnp.net}{Overleaf Templates}
% \end{itemize}
% 其中，CTAN 上发布的是 bithesis 宏包，也就是 |*.cls| 组成的文件，
% 它们可以通过 \TeX 发行版自带的包管理器 tlmgr 来更新。
%
% GitHub 和 Overleaf 上发布的是 \BIThesisLaTeX 的完整模板，因此想要升级
% 到最新版本，你需要重新下载最新模板。然后，选择下列方法的一种来更新：
%
% \begin{itemize}
%   \item 将新模板中的 |*.cls| 文件替换到你原有模板的工作目录中。
%   \item 将旧模板中的写作内容复制到新模板中。
% \end{itemize}
%
% 需要注意的是，Github 和 Overleaf 的模板中包含了当前版本的 |*.cls| 文件，
% 因此不会因为 CTAN 上的更新而导致模板无法编译。（但代价当然是需要手动升级）
%
% \section{安装}
%
% \subsection{\BIThesis 宏包的安装和更新}
%
% 最常见的 \TeX 发行版（\hologo{TeX} Live 和 \hologo{MiKTeX})已收录
% \BIThesisMacroPackage 及其依赖的宏包和宏集。
%
% \begin{itemize}
% \item Windows、Linux用户推荐安装 TeX Live 套装，
%   并更新宏包（Linux系统由于版权问题，未能预装宋体等 Windows 下的字体，需要手动安装）
% \item OSX用户推荐安装 Mac TeX。
% \item 由于CTeX套装所含宏包比较陈旧，可能会导致编译无法通过，故不推荐安装。
%   如果已安装 CTeX，\textbf{建议将其卸载}。
% \end{itemize}
%
% 如果安装以上发行版的时间较早，可能你本地的环境中不存在
% \BIThesisMacroPackage 或者不是最新版本的。
% 那么你需要通过包管理器来安装/更新 \BIThesisMacroPackage：
%
% \begin{shell}[morekeywords={tlmgr,install}]
%   tlmgr install bithesis
% \end{shell}
%
% 更新可以通过图形界面进行，或者通过命令行：
%
% \begin{shell}[morekeywords={tlmgr,install}]
%   tlmgr update bithesis
% \end{shell}
%
% \textbf{
%   在安装完发行版之后，还需要安装编辑 \LaTeX 所需的编辑器，在这里推荐 TexStudio。
% }
%
% \textit{更多安装教程请访问我们的 
%   \href{https://bithesis.bitnp.net}{wiki 网站}，那里收录了使用模板以外的信息。}
%
% \subsubsection{升级模板版本}
%
% 由于软件维护是一个持续的过程，我们会不定期地更新 \BIThesisMacroPackage 的版本。
% 更新的版本可能会修复一些 bug，也可能会增加新的功能。
%
% 因此，首先建议你首先查看最新版本与你当前版本的差异，以便决定是否升级。
% 你可以通过 Github Releases 或者 ChangeLog 来查看更新内容。
%
% 当你决定升级时，请首先备份你的工作目录，然后按照\ref{sec:release}节的描述进行升级。
%
% \section{编译方式}
%
% \subsection{使用 Latexmk（推荐）}
%
% 在项目模板中，已经预制好了 latexmk 的配置文件 |.latexmkrc|。
%
% 因此只需要在命令行里执行，或者在代码编辑器里配置并运行以下命令即可：
%
% \begin{shell}
%   latexmk
% \end{shell}
%
% \subsubsection{手动四次编译}
%
% \begin{shell}
% xelatex -no-pdf --interaction=nonstopmode main
% biber main
% xelatex -no-pdf --interaction=nonstopmode main
% xelatex --interaction=nonstopmode main
% \end{shell}
%
% 运行bibtex的时候会提示一些错误，可能是~{{\sc Bib}\TeX}~对UTF-8支持不充
% 分，一般不影响最终结果。加入~\verb|--interaction=nonstopmode|~参数是不让错误打断编译过程。
% \XeTeX~ 仍存在一些宏包兼容性问题，而这些错误通常不会影响最终的编译结果。
%
% \section{\cls{bithesis.cls} 使用与配置}
% \label{sec:bithesis}
% 
% 推荐使用\BIThesisRelease （开箱即用）。
% 
% \BIThesisRelease 提供了多种最常用的模板，你可以在
% \href{https://github.com/BITNP/BIThesis/releases}{主项目的 Releases}中找到它们。 
% 
% 使用此文档类的模板有：
% \begin{itemize}
%  \item \BIThesisTemplates{UT}
%  \item \BIThesisTemplates{UTE}
%  \item \BIThesisTemplates{PT}
%  \item \BIThesisTemplates{GT}
% \end{itemize}
%
% \subsection{最小用例}
% 
% \begin{latex}
%   \documentclass[type=bachelor]{bithesis}
%   \BITSetup{
%     info = {
%       author = FKY,
%       ......
%     }
%   }
%   \begin{document}
%   \end{document}
% \end{latex}
%
% 如您所见，在 \LaTeX 中，用户使用的命令通常以「|\|」作为开头，后面依次跟随
% 命令名称、若干可选参数和若干必需参数。如：
%
% \begin{latex}
%   \MakeCover
%   \BITSetup{}
%   \FooBar[]{}
% \end{latex}
%
% 同理，用户使用的环境通常以 begin 和 end 进行包裹，
% 同样可以传入可选参数和必需参数：
%
% \begin{latex}
%   \begin{abstract}
%   \end{abstract}
%
%   \begin{abstract}[addTOC=false]
%   \end{abstract}
%
%   \begin{foo}{param1}
%   \end{foo}
% \end{latex}
%
% 需要强调的是：以方框号表示的可选参数，在没有参数传入的时候，是可以忽略的。
% 比如以下两个命令等价：
% \begin{latex}
%   \FooBar
%   \FooBar[]
% \end{latex}
%
% 环境同理。
%
% \subsection{模板选项} \label{sec:template-options}
% 
% 所谓“模板选项”，指需要在引入文档类的时候指定的选项：
%
% \begin{latex}[deletetexcs={\documentclass},morekeywords={\documentclass}]
%   \documentclass(*\oarg{模板选项}*){bithesis}
% \end{latex}
%
% \begin{function}{type}
%   \begin{bitsyntax}[emph={[1]type}]
%     type = (*<(bachelor)|\mbox{bachelor_translation}|\mbox{bachelor_english}|master|doctor>*)
%   \end{bitsyntax}
%   选择论文类型，它们分别对应：
%   \begin{itemize}
%     \item \BIThesisTemplates{UT}
%     \item \BIThesisTemplates{PT}
%     \item \BIThesisTemplates{UTE}
%     \item \BIThesisTemplates{GT} 研究生
%     \item \BIThesisTemplates{GT} 博士生
%   \end{itemize}
% \end{function}
% 
% \begin{function}{blindPeerReview}
%   \begin{bitsyntax}[emph={[1]blindPeerReview}]
%     blindPeerReview = (*<(false)|true>*)
%   \end{bitsyntax}
%
%   此选项用于输出符合盲审要求的论文。所有可能暴露个人信息的页面都将隐藏，
%   比如封面、信息页、原创性声明、个人简介、致谢等等。
% \end{function}
%  
% \begin{function}{twoside}
%   \begin{bitsyntax}[emph={[1]twoside}]
%     twoside = (*<(false)|true>*)
%   \end{bitsyntax}
% \end{function}
%
% \begin{function}{ctex}
%   \begin{bitsyntax}[emph={[1]ctex}]
%     ctex = (*{传给 ctexbook 的模板选项}*)
%   \end{bitsyntax}
%
%   该选项用于传入模板选项至 ctexbook。
%   
%   例如：想要同时修改 ctex 的字体参数和标点符号处理格式
%   （更多选项请参考 ctex 手册）。
%
%   \begin{latex}[emph={[1]type,master,ctex,fontset,fandol,punct,banjiao,bithesis}]
%      \documentclass[type=master,ctex={fontset=fandol,punct=banjiao}]{bithesis}
%   \end{latex}
% \end{function}
%  
% \subsection{参数设置}
%   
% \begin{function}{\BITSetup}
%   \begin{bitsyntax}[emph={[1]BITSetup}]
%     \BITSetup = {(*\oarg{键值对}*)}
%   \end{bitsyntax}
% \end{function}
% 
% 本模板提供了一系列选项，可由您自行配置。载入文档类之后，以下所有选项均可通过统一的
% 命令 \cs{BITSetup} 来设置。
%
% \cs{BITSetup} 的参数是一组由（英文）逗号隔开的选项列表，列表中的选项通常是 \meta{key} =
% \meta{value} 的形式。部分选项的 \meta{value} 可以省略。对于同一项，后面的设置将会覆盖前面的设
% 置。在下文的说明中，将用粗体表示默认值。
%
% \cs{BITSetup} 采用 LATEX3 风格的键值设置，支持不同类型以及多种层次的选项设定。键值列
% 表中，“=”左右的空格不影响设置；但需注意，参数列表中不可以出现空行。
% 与模板选项相同，布尔型的参数可以省略 \meta{选项} = true 中的“= true”。
% 另有一些选项包含子选项，如 cover 和 info 等。它们可以按如下两种等价方式来设定：
%
% \begin{latex}[morekeywords={\BITSetup},emph={[1]BITSetup,cover,date,info,title,author}]
%   \BITSetup{
%     cover = {
%       date = xxxx年x月,
%     },
%     info = {
%       author = Feng Kaiyu,
%       title = A Thesis Title for Your Paper,
%     }
%   }
% \end{latex}
%
% 或者
% 
% \begin{latex}[morekeywords={\BITSetup},emph={[1]BITSetup,cover,date,info,title,author}]
%   \BITSetup{
%     cover / date = xxxx年x月,
%     info / author = Feng Kaiyu,
%     info / title = A Thesis Title for Your Paper,
%   }
% \end{latex}
%
% \textbf{请注意：以下选项根据模板的不同，可能会有不同的默认值。
%  有些模板可能不会使用某些选项。使用与否以及使用方式是根据学校的论文撰写要求实现的。}
%  
% \subsubsection{封面选项} \label{sec:cover}
% 
% \begin{function}{cover}
%   \begin{bitsyntax}[emph={[1]cover}]
%     cover = (*\marg{键值列表}*)
%     cover/(*\meta{key}*) = (*\meta{value}*)
%   \end{bitsyntax}
%
%   该选项包含许多子项目，用于设置论文格式。具体内容见下。
% \end{function}
%
% \begin{function}{cover/date}
%   \begin{bitsyntax}[emph={[1]date}]
%     date = (*\marg{任意字符串}*)
%   \end{bitsyntax}
%
%   覆盖封面的日期。
% \end{function}
%
% \begin{function}{cover/headerImage}
%   \begin{bitsyntax}[emph={[1]headerImage}]
%     headerImage = (*\marg{图片路径}*)
%   \end{bitsyntax}
%
%   设置封面顶部的“北京理工大学”字样图片。
% \end{function}
%
% \begin{function}{cover/xiheiFont}
%   \begin{bitsyntax}[emph={[1]xiheiFont}]
%     xiheiFont = (*\marg{字体路径}*)
%   \end{bitsyntax}
%
%   配置此选项以在部分模板封面中使用“华文细黑”，保证与 Word 模板中的字体一致。
%
%   在 Windows 和 MacOS 中，该字体已经安装；在 Linux 中一般需要用户自行安装。
% \end{function}
%
% \begin{function}{cover/dilimiter}
%   \begin{bitsyntax}[emph={[1]dilimiter}]
%     dilimiter = (*\marg{任意字符串}*)
%   \end{bitsyntax}
%
%   \textit{此选项一般不需要用户自行修改。}
%
%   设置封面信息中标签和值的分隔符。一般为全角或者半角的冒号。
% \end{function}
%
% \begin{function}{cover/autoWidth}
%   \begin{bitsyntax}[emph={[1]autoWidth}]
%     autoWidth = (*<(true)|false>*)
%   \end{bitsyntax}
%
%   \textit{此选项一般不需要用户自行修改。}
%
%   自动计算封面中下划线的长度。
%   
%   如果关闭了该选项，则建议配合\kvopt{cover/labelMaxWidth}{\meta{长度}}\\
%   和\kvopt{cover/valueMaxWidth}{\meta{长度}}使用，以控制下划线的长度。
% \end{function}
%
% \begin{function}{cover/autoWidthPadding}
%   \begin{bitsyntax}[emph={[1]autoWidthPadding}]
%     autoWidthPadding = (*<\marg{任意长度}>*)
%   \end{bitsyntax}
%
%   自适应下划线长度时，下划线的长度会比标签和值的长度多出一些空白。
%   该选项用于设置这些空白的长度。默认为 0.25em。
%
%   \textit{此选项一般不需要用户自行修改。}
%
% \end{function}
%
% \begin{function}{cover/labelMaxWidth}
%   \begin{bitsyntax}[emph={[1]labelMaxWidth}]
%     labelMaxWidth = (*\marg{任意长度}*)
%   \end{bitsyntax}
%   
%   此选项仅当\kvopt{cover/autoWidth}{false}时生效。
%
%   设置封面信息中标签的占位长度。
% \end{function}
%
% \begin{function}{cover/valueMaxWidth}
%   \begin{bitsyntax}[emph={[1]valueMaxWidth}]
%     valueMaxWidth = (*\marg{任意长度}*)
%   \end{bitsyntax}
%
%   \textit{此选项一般不需要用户自行修改。}
%
%   设置封面信息中值的占位长度。\textbf{同时也会影响下划线的长度。}
% \end{function}
%
% \begin{function}{cover/labelAlign}
%   \begin{bitsyntax}[emph={[1]labelAlign}]
%     labelAlign = (*<c|l|r>*)
%   \end{bitsyntax}
%
%   \textit{此选项一般不需要用户自行修改。}
%
%   设置封面信息中值的对其方式（居中，左对齐、右对齐）。
% \end{function}
%
% \begin{function}{cover/valueAlign}
%   \begin{bitsyntax}[emph={[1]valueAlign}]
%     valueAlign = (*<c|l|r>*)
%   \end{bitsyntax}
%
%   此选项仅当\kvopt{cover/autoWidth}{false}时生效。
%
%   设置封面信息中标签的对其方式（居中，左对齐、右对齐）。
% \end{function}
%
% \begin{function}{cover/underlineThickness}
%   \begin{bitsyntax}[emph={[1]underlineThickness}]
%     underlineThickness = (*\marg{任意长度}*)
%   \end{bitsyntax}
%
%   设置封面信息中下划线的厚度。
% \end{function}
%
% \begin{function}{cover/underlineOffset}
%   \begin{bitsyntax}[emph={[1]underlineOffset}]
%     underlineOffset = (*(-10pt)|\marg{任意长度}*)
%   \end{bitsyntax}
%
%   设置封面信息中下划线的偏移量。
% \end{function}
%
% \subsubsection{论文基本信息}
%
% \begin{function}{info}
%   \begin{bitsyntax}[emph={[1]info}]
%     info = (*\marg{键值列表}*)
%     info/(*\meta{key}*) = (*\meta{value}*)
%   \end{bitsyntax}
%
%  该选项包含许多子项目，用于录入论文信息。具体内容见下。
%  一般以「En」结尾的项目表示对应的英文字段。
%
%  这其中的很多字段将用于封面信息的渲染，此时，可以使用 |\\| 来换行，以防止单行内容过长。
% \end{function}
%
% \begin{function}{info/title,info/titleEn}
%   \begin{bitsyntax}[emph={[1]title,titleEn}]
%     title = (*\marg{字符串}*)
%     titleEn = (*\marg{字符串}*)
%   \end{bitsyntax}
%
%   论文标题。
% \end{function}
%
% \begin{function}{info/verticalTitle}
%   \begin{bitsyntax}[emph={[1]verticalTitle}]
%     verticalTitle = (*\marg{字符串}*)
%   \end{bitsyntax}
%
%   书籍页竖排标题。此选项默认为空。为空时，会被 \kvopt{info/title}{字符串} 替代。
%
%   如想要使用竖排英文，可以使用 \lstinline|{X }|。
%   其中 X 为英文字符，每个竖排英文间需要空一格。
%   比如，想要竖排「LaTeX」，可以使用：
%
%   \begin{latex}[emph={[1]}]
%      verticalTitle = {其他文字{L } {a } {T } {e } {X }其他文字}
%   \end{latex}
%
%   如果想要使用旋转竖排英文，可以使用
%   \lstinline|\rotatebox[origin=c]{-90}{English text}|。
%
%   \begin{latex}[emph={[1]}]
%      verticalTitle = {其他文字 \lstinline{\rotatebox[origin=c]{-90}{English text}} 其他文字}
%   \end{latex}
%
% \end{function}
%
% \begin{function}{info/school,info/schoolEn}
%   \begin{bitsyntax}[emph={[1]school,schoolEn}]
%     school = (*\marg{字符串}*)
%     schoolEn = (*\marg{字符串}*)
%   \end{bitsyntax}
%
%   学院名称。
% \end{function}
%
% \begin{function}{info/major,info/majorEn}
%   \begin{bitsyntax}[emph={[1]major,majorEn}]
%     major = (*\marg{字符串}*)
%     majorEn = (*\marg{字符串}*)
%   \end{bitsyntax}
%
%   专业名称。
% \end{function}
%
% \begin{function}{info/author,info/authorEn}
%   \begin{bitsyntax}[emph={[1]author,authorEn}]
%     author = (*\marg{字符串}*)
%     authorEn = (*\marg{字符串}*)
%   \end{bitsyntax}
%
%   作者姓名。
% \end{function}
%
% \begin{function}{info/studentId}
%   \begin{bitsyntax}[emph={[1]studentId}]
%     studentId = (*\marg{字符串}*)
%   \end{bitsyntax}
%
%   学号。
% \end{function}
%
% \begin{function}{info/supervisor,info/supervisorEn}
%   \begin{bitsyntax}[emph={[1]supervisor,supervisorEn}]
%     supervisor = (*\marg{字符串}*)
%     supervisorEn = (*\marg{字符串}*)
%   \end{bitsyntax}
%
%   指导教师。
% \end{function}
%
% \begin{function}{info/externalSupervisor}
%   \begin{bitsyntax}[emph={[1]externalSupervisor}]
%     externalSupervisor = (*\marg{字符串}*)
%   \end{bitsyntax}
%
%   校外指导教师。
% \end{function}
%
% \begin{function}{info/keywords,info/keywordsEn}
%   \begin{bitsyntax}[emph={[1]keywords,keywordsEn}]
%     keywords = (*\marg{字符串；以全角分号分割}*)
%     keywordsEn = (*\marg{字符串;以分号分割}*)
%   \end{bitsyntax}
%
%   摘要关键词。
% \end{function}
%
% \begin{function}{info/translationTitle}
%   \begin{bitsyntax}[emph={[1]translationTitle}]
%     translationTitle = (*\marg{字符串}*)
%   \end{bitsyntax}
%
%   文献翻译中，翻译后的论文名称。
% \end{function}
%
% \begin{function}{info/translationOriginTitleEn}
%   \begin{bitsyntax}[emph={[1]translationOriginTitleEn}]
%     translationOriginTitleEn = (*\marg{字符串}*)
%   \end{bitsyntax}
%
%   文献翻译中，翻译前的论文名称。
% \end{function}
%
% \begin{function}{info/classification}
%   \begin{bitsyntax}[emph={[1]classification}]
%     classification = (*\marg{字符串}*)
%   \end{bitsyntax}
%
%   中国分类号。
% \end{function}
%
% \begin{function}{info/UDC}
%   \begin{bitsyntax}[emph={[1]UDC}]
%     UDC = (*\marg{字符串}*)
%   \end{bitsyntax}
%
%   UDC分类号。
% \end{function}
%
% \begin{function}{info/chairman,info/chairmanEn}
%   \begin{bitsyntax}[emph={[1]chairman,chairmanEn}]
%     chairman = (*\marg{字符串}*)
%     chairmanEn = (*\marg{字符串}*)
%   \end{bitsyntax}
%
%   答辩委员会主席。
% \end{function}
%
% \begin{function}{info/degree,info/degreeEn}
%   \begin{bitsyntax}[emph={[1]degree,degreeEn}]
%     degree = (*\marg{字符串}*)
%     degreeEn = (*\marg{字符串}*)
%   \end{bitsyntax}
%
%   申请学位。
% \end{function}
%
% \begin{function}{info/institute,info/instituteEn}
%   \begin{bitsyntax}[emph={[1]institute,instituteEn}]
%     institute = (*(北京理工大学)|\marg{字符串}*)
%     instituteEn = (*(Beijing~Institute~of~Technology)|\marg{字符串}*)
%   \end{bitsyntax}
%
%   学位授予单位。
% \end{function}
%
% \begin{function}{info/defenseDate,info/defenseDateEn}
%   \begin{bitsyntax}[emph={[1]defenseDate,defenseDateEn}]
%     defenseDate = (*\marg{字符串}*)
%     defenseDateEn = (*\marg{字符串}*)
%   \end{bitsyntax}
%
%   答辩日期。
% \end{function}
%
% \begin{function}{info/classifiedLevel}
%   \begin{bitsyntax}[emph={[1]classifiedLevel}]
%     classifiedLevel = (*\marg{字符串}*)
%   \end{bitsyntax}
%
%   密级。
% \end{function}
%
% \subsubsection{样式信息}
% 
% \begin{function}{style}
%   \begin{bitsyntax}[emph={[1]style}]
%     style = (*\marg{键值列表}*)
%     style/(*\meta{key}*) = (*\meta{value}*)
%   \end{bitsyntax}
% 
%  该选项包含许多子项目，用于调整样式。具体内容见下。
% \end{function}
%
% \begin{function}{style/head}
%   \begin{bitsyntax}[emph={[1]head}]
%     head = (*\marg{字符串}*)
%   \end{bitsyntax}
%
%   \textit{此选项一般不需要用户自行修改。}
%
%   页眉文字。
% \end{function}
%
% \begin{function}{style/bibliographyIndent}
%   \begin{bitsyntax}[emph={[1]bibliographyIndent}]
%     bibliographyIndent = (*(true)|false*)
%   \end{bitsyntax}
%
%   \textit{此选项一般不需要用户自行修改。}
%
%   控制参考文献的每一项中，首行之后的行是否缩进。
%   
%   之所以提供这个选项，
%   是因为在 Word 模板中参考文献的格式要求首行之后的行不缩进。
%   但是国标要求首行之后的行缩进。
% \end{function}
%
% \subsubsection{目录选项}
%
% \begin{function}{TOC}
%   \begin{bitsyntax}[emph={[1]TOC}]
%     TOC = (*\marg{键值列表}*)
%     TOC/(*\meta{key}*) = (*\meta{value}*)
%   \end{bitsyntax}
% 
%  该选项包含许多子项目，用于调整其他选项。具体内容见下：
% \end{function}
%
% \begin{function}{TOC/abstract,TOC/abstractEn}
%   \begin{bitsyntax}[emph={[1]abstract,abstractEn}]
%     abstract = (*(true)|false*)
%   \end{bitsyntax}
%
%   \textit{此选项一般不需要用户自行修改。}
%
%   是否在目录中索引摘要。
% \end{function}
%
% \begin{function}{TOC/symbols}
%   \begin{bitsyntax}[emph={[1]symbols}]
%     abstract = (*(true)|false*)
%   \end{bitsyntax}
%
%   \textit{此选项一般不需要用户自行修改。}
%
%   是否在目录中索引主要符号对照表。
% \end{function}
%
% \subsubsection{附录选项}
%
% \begin{function}{appendices}
%   \begin{bitsyntax}[emph={[1]appendices}]
%     appendices = (*\marg{键值列表}*)
%     appendices/(*\meta{key}*) = (*\meta{value}*)
%   \end{bitsyntax}
% 
%  该选项包含许多子项目，用于调整其他选项。具体内容见下：
% \end{function}
%
% \begin{function}{appendices/chapterLevel}
%   \begin{bitsyntax}[emph={[1]chapterLevel}]
%     chapterLevel = (*<(false)|true>*)
%   \end{bitsyntax}
%
%   \textit{此选项一般不需要用户自行修改。}
%
%   开启后，可以使用以「chapter」为顶层的附录格式：
%
%  \begin{latex}[emph={[1]appendices,chapter}]
%    \begin{appendices}
%       \chapter{附录A 题目}
%          (*\meta{附录A 内容}*)
%       \chapter{附录B 题目}
%          (*\meta{附录B 内容}*)
%    \end{appendices}
%  \end{latex}
%
%   默认不开启，使用以「section」为顶层的附录格式。
%
% \end{function}
%
% \begin{function}{appendices/title}
%   \begin{bitsyntax}[emph={[1]title}]
%     title = (*(附录)|\meta{字符串}*)
%   \end{bitsyntax}
%
%  可以覆盖附录的标题名称，默认为「附录」。
% \end{function}
%
% \begin{function}{appendices/TOCTitle}
%   \begin{bitsyntax}[emph={[1]TOCTitle}]
%     TOCTitle = (*(附录)|\meta{字符串}*)
%   \end{bitsyntax}
%
%  可以覆盖附录在目录中的名称，默认为「附录」。
% \end{function}
%
% \subsubsection{攻读学位期间发表论文与研究成果清单选项}
%
% \begin{function}{publications}
%   \begin{bitsyntax}[emph={[1]publications}]
%     publications = (*\marg{键值列表}*)
%     publications/(*\meta{key}*) = (*\meta{value}*)
%   \end{bitsyntax}
% 
%  该选项包含许多子项目，用于调整其他选项。具体内容见下：
% \end{function}
%
% \begin{function}{publications/sorting}
%   \begin{bitsyntax}[emph={[1]sorting}]
%     sorting = (*(true)|false*)
%   \end{bitsyntax}
%
% 根据学校要求，攻读学位期间发表论文与研究成果清单
% 中的论文应按照发表时间排序。
% 但是在实际使用中，有时候需要按照用户意愿自定义排序。
% 该选项用于控制是否按照发表时间排序。
%
% \textit{注意，如果编译后编号产生错误，
% 请使用 |latexmk -c| 或手动清空缓存后再编译}
% \end{function}
%
% \begin{function}{publications/omit}
%   \begin{bitsyntax}[emph={[1]omit}]
%     omit = (*(false)|true*)
%   \end{bitsyntax}
%
% 在盲审模式下，不渲染「攻读学位期间发表论文与研究成果清单」。
%
% \textit{一般不需要用户自行修改。}
% \end{function}
% 
% 
% \subsubsection{其他配置}
% 
% \begin{function}{misc}
%   \begin{bitsyntax}[emph={[1]misc}]
%     misc = (*\marg{键值列表}*)
%     misc/(*\meta{key}*) = (*\meta{value}*)
%   \end{bitsyntax}
% 
%  该选项包含许多子项目，用于调整其他选项。具体内容见下：
% \end{function}
%
% \begin{function}{misc/arialFont}
%   \begin{bitsyntax}[emph={[1]arialFont}]
%     arialFont = (*\marg{字符串}*)
%   \end{bitsyntax}
%
%   \textit{此选项一般不需要用户自行修改。}
%
%   本科生毕业设计模板（全英文专业）需要设置 Arial 字体。
%  （Windows 和 MacOS 自带，Linux 需要用户自行安装）
% \end{function}
%
% \section{正文编写}
% 
% 请注意，请在\env{document} 之内使用以下命令 。
% 
% \subsection{封面及基本信息}
%
% \begin{function}{\MakeCover}
%
%   \textit{封面内容会根据模板选项（具体参见节
%     \ref{sec:template-options}）中\meta{type=xxx}的值而变化。}
%   \textit{封面的下划线效果会受到参数设置中封面选项
%      （具体见节\ref{sec:cover}）的影响。}
%
%   绘制封面。
%
%   在默认配置下，封面中的下划线会自动计算最大宽度。
%   此时，如果用户需要换行，可以通过「\\」控制换行。
%
%   当关闭自动计算下划线宽度后，
%   可以通过 
%
%   \meta{labelMaxWidth=xxx} 
%
%   与 
%
%   \meta{valueMaxWidth=xxx}
%
%   来指定下划线的宽度。一般情况下，我们不建议您这样做。
% \end{function}
% 
% \begin{function}{\MakePaperBack}
%
%   绘制书脊。
% \end{function}
% 
% \begin{function}{\MakeTitle}
%
%   绘制中英文信息页。
% \end{function}
%
% \begin{function}{\MakeOriginality}
%
%   绘制中英文信息页。
% \end{function}
%
% \subsection{前置部分}
%
% \begin{function}{\frontmatter}
%
%   声明前置部分开始。
%
%   此时页码会使用罗马数字进行计数。
% \end{function}
%
% \begin{function}{abstract}
%   \begin{bitsyntax}[emph={[1]abstract}]
%     \begin{abstract}
%        (*\meta{中文摘要}*)
%     \end{abstract}
%   \end{bitsyntax}
% \end{function}
%
% \begin{function}{abstractEn}
%   \begin{bitsyntax}[emph={[1]abstractEn}]
%     \begin{abstractEn}
%        (*\meta{英文摘要}*)
%     \end{abstractEn}
%   \end{bitsyntax}
% 
%  摘要。
%  
%  摘要的最后会显示关键词，关键词通过 \cs{BITSetup} 录入。
%
% \end{function}
%
% \begin{function}{\MakeTOC,\listoffigures,\listoftables}
%
%  绘制目录、插图目录与表格目录。
% \end{function}
%
% \begin{function}{symbols}
%   \begin{bitsyntax}[emph={[1]symbols}]
%     \begin{symbols}
%        \item[BIT] 北京理工大学的英文缩写
%        \item[\LaTeX] 一个很棒的排版系统
%     \end{symbols}
%   \end{bitsyntax}
% 
%  主要符号对照表。
%  
%  主要符号对照表类似于一个列表环境，用以添加文章中使用的关键符号与缩略词。
%
% \end{function}
%
% \begin{function}{addTOC}
%   \begin{bitsyntax}[emph={[1]addTOC}]
%     addTOC = (*<(true)|false>*)
%   \end{bitsyntax}
%
%  主要符号对照表的可选参数。
%
%  添加主要符号对照表到目录，默认开启。
% \end{function}
%
% \subsection{正文部分}
%
% \begin{function}{\mainmatter}
%
%   声明正文部分开始。
%
%   此时页码会使用阿拉伯数字进行计数。
% \end{function}
%
% \subsubsection{定理类环境}
% \paragraph{默认格式}
%
% \begin{function}{algorithm,theorem,lemma,proposition,corollary,axiom,definition,conjecture,example,case,remark}
%   \begin{bitsyntax}[emph={[2]proof}]
%     \begin{theorem}[留数定理]
%       (*\meta{定理内容}*)
%     \end{theorem}
%     
%     \begin{proof}(*\oarg{小标题}*)
%       (*\meta{证明过程}*)
%     \end{proof}
%   \end{bitsyntax}
%   一系列预定义的数学环境。具体含义见表~\ref{tab:theorem}。
% \end{function}
%
% \begin{table}[]
% \caption{预定义的数学环境}
% \centering
% \subfloat[][plain样式]{
%   \begin{tabular}{@{}ccccccc@{}}
%   \toprule
%   \textbf{名称} & algorithm & theorem & lemma & proposition & corollary & axiom \\ \midrule
%   \textbf{含义} & 算法        & 定理      & 引理    & 命题          & 推论        & 公理    \\
%   \textbf{样式} & \multicolumn{6}{c}{\textbf{定理2.1.} \textit{定理内容……}}       \\ \bottomrule
%   \end{tabular}
% }
%
% \subfloat[][definition样式]{
%   \begin{tabular}{@{}ccccc@{}}
%   \toprule
%   \textbf{名称} & definition & conjecture & example & case \\ \midrule
%   \textbf{含义} & 定义        & 猜想      & 例    & 情形          \\
%   \textbf{样式} & \multicolumn{4}{c}{\textbf{定义2.1.} 定义内容……}       \\ \bottomrule
%   \end{tabular}
% }
%
% \subfloat[][remark样式]{
%   \begin{tabular}{@{}cc@{}}
%   \toprule
%   \textbf{名称} & remark \\ \midrule
%   \textbf{含义} & 注        \\
%   \textbf{样式} & \multicolumn{1}{c}{\textit{注1.} 内容……}       \\ \bottomrule
%   \end{tabular}
% }
%
% \subfloat[][proof样式]{
%   \begin{tabular}{@{}cc@{}}
%   \toprule
%   \textbf{名称} & proof \\ \midrule
%   \textbf{含义} & 证明        \\
%   \textbf{样式} & \multicolumn{1}{c}{\textit{证明. } 内容…… 「证毕符号」}       \\ \bottomrule
%   \end{tabular}
% }
% \label{tab:theorem}
% \end{table}
%
% \subsection{后置部分}
%
% \begin{function}{\backmatter}
%
%   声明后置部分开始。
%
%   会取消章节标题的的编号。
%
% \end{function}
%
% \begin{function}{conclusion}
%   \begin{bitsyntax}[emph={[1]conclusion}]
%     \begin{conclusion}
%        (*\meta{结论}*)
%     \end{conclusion}
%   \end{bitsyntax}
% \end{function}
%
% \begin{function}{bibprint}
%   \begin{bitsyntax}[emph={[1]bibprint}]
%     \begin{bibprint}
%        \printbibliography[heading=none]
%     \end{bibprint}
%   \end{bitsyntax}
%
%   打印参考文献。
%
%   在使用\BIThesisTemplates{GT}时需要注意，
%   由于研究生学位论文也要求使用国标形式输出「攻读学位期间发表论文与研究成果清单」，
%   因此 bithesis 同样使用 bibtex 管理其文献。
%   而由于 biblatex 的排序是全局的，
%   因此需要使用 \meta{category} 功能来分割出两个不同的类别。
%
%   因此，请使用下列语句输出参考文献：
%
% \begin{latex}[emph={[1]bibprint}]
%   \begin{bibprint}
%     \printbibliography[heading=none,notcategory=mypub,resetnumbers=true]
%   \end{bibprint}
% \end{latex}
% \end{function}
%
% \begin{function}{appendices}
%   \begin{bitsyntax}[emph={[1]appendices}]
%     \begin{appendices}
%       \section{附录A题目}
%          (*\meta{附录A内容}*)
%       \section{附录B题目}
%          (*\meta{附录B内容}*)
%     \end{appendices}
%   \end{bitsyntax}
%
%  附录。
% \end{function}
%
% \begin{function}{publications}
%   \begin{bitsyntax}[emph={[1]publications,addpubs,printbibliography}]
%     文献较少的时候。
%     \begin{publications}
%       \addpubs{\meta{引用内容的key},\meta{引用内容的key2}}
%
%       \printbibliography[heading=none,category=mypub,resetnumbers=true]
%     \end{publications}
%
%     文献较多，需要分类的时候。
%     \begin{publications}
%       \addpubs{\meta{引用内容的key},\meta{引用内容的key2}}
%       \pubsection{文章}
%
%       \printbibliography[heading=none,type=article,category=mypub,resetnumbers=true]{}
%
%       \pubsection{一些书}
%
%       \printbibliography[heading=none,type=book,category=mypub,resetnumbers=true,notkeyword=dummy]{}
%
%       \pubsection{另一些书}
%
%       \printbibliography[heading=none,type=book,category=mypub,keyword=dummy,resetnumbers=true]{}
%     \end{publications}
%   \end{bitsyntax}
%
%   攻读学位期间发表论文与研究成果清单。
% \end{function}
% 
% \begin{function}[added=2022-10-23]{\addpubs,\addpub}
%   \begin{bitsyntax}[emph={[1]publications,addpubs,addpub}]
%     \begin{publications}
%       \addpub{\meta{单条引用内容的key}}
%       \addpubs{\meta{引用内容的key},\meta{引用内容的key2}}
%     \end{publications}
%   \end{bitsyntax}
%
% \textit{在「攻读学位期间发表论文与研究成果清单」环境中使用。}
% 用于添加个人成果，添加过的成果可以通过 |printbibliography| 打印。
% \end{function}
%
% \begin{function}[added=2022-10-23]{\pubsection}
%   \begin{bitsyntax}[emph={[1]publications,pubsection,printbibliography}]
%     \begin{publications}
%       \addpubs{\meta{引用内容的key},\meta{引用内容的key2}}
%
%       \pubsection{分类一}
%       \printbibliography[heading=none,category=mypub,type=book,resetnumbers=true]
%       
%       \pubsection{分类二}
%       \printbibliography[heading=none,category=mypub,type=article,resetnumbers=true]
%     \end{publications}
%   \end{bitsyntax}
% 
% \textit{在「攻读学位期间发表论文与研究成果清单」环境中使用。}
% 用于添加分类的目录。
% \end{function}
%
% \begin{function}[added=2022-10-23]{\Author,\AuthorEn}
%   \begin{bitsyntax}[emph={[1]Author}]
%     \Author[<n(表示第几作者，默认为 1)>][<覆盖普通模式下内容>][<覆盖盲审模式下内容>]
%   \end{bitsyntax}
%
% \textit{通常在「攻读学位期间发表论文与研究成果清单」的 |.bib| 文件中使用。}
% \begin{itemize}
%   \item 在普通模式下，输出作者姓名（由用户在 |info/author| 中配置）。
%   \item 如果指定了覆盖普通模式下内容，则输出覆盖内容。
%   \item 在盲审模式下，输出「第n作者」。
%   \item 如果指定了覆盖盲审模式下内容，则输出覆盖内容。
% \end{itemize}
% \end{function}
%
% \begin{function}{acknowledgements}
%   \begin{bitsyntax}[emph={[1]acknowledgements}]
%     \begin{acknowledgements}
%       (*\meta{致谢内容}*)
%     \end{acknowledgements}
%   \end{bitsyntax}
%
%   致谢。
% \end{function}
%
% \begin{function}{resume}
%   \begin{bitsyntax}[emph={[1]resume}]
%     \begin{resume}
%       (*\meta{个人简介内容}*)
%     \end{resume}
%   \end{bitsyntax}
%
%   个人简介。
% \end{function}
%
% \section{常见问题和疑难解答}
%
% \subsection{如何修改数学公式的字体？}
%
% 本项目已经使用 \pkg{unicode-math} 宏包，
% 可以在导言区使用 |\setmathfont{XITS Math}| 修改数学环境下字体：
%
% \begin{latex}
%   \unimathsetup{bold-style=ISO}
%   \setmathfont{XITS Math}
% \end{latex}
%
% \textit{请事先安装 XITS 字体。}
%
% \textit{更多字体与使用方法请参考 \url{https://ctan.org/pkg/unicode-math?lang=zh}。}
%
% \section{\cls{bitreport.cls} 使用与配置}
% \label{sec:bitreport}
% 
% 推荐使用\BIThesisRelease （开箱即用）。
%
% \BIThesisRelease 提供了多种最常用的模板，你可以在
% \href{https://github.com/BITNP/BIThesis/releases}{主项目的 Releases}中找到它们。 
% 
% 使用此文档类的模板有：
% \begin{itemize}
%  \item \BIThesisTemplates{UP}
%  \item \BIThesisTemplates{LR}
% \end{itemize}
%
% \subsection{最小用例}
% 
% \begin{latex}
%   \documentclass[]{bitreport}
%   \BITSetup{
%     info = {
%       author = FKY,
%       ......
%     }
%   }
%   \begin{document}
%   \end{document}
% \end{latex}
%
% \subsection{模板选项}
%
% 所谓“模板选项”，指需要在引入文档类的时候指定的选项：
%
% \begin{latex}[deletetexcs={\documentclass},morekeywords={\documentclass}]
%   \documentclass(*\oarg{模板选项}*){bithesis}
% \end{latex}
%
% \begin{function}{type}
%   \begin{bitsyntax}[emph={[1]type}]
%     type = (*<(common)|\mbox{undergraduate_proposal}>*)
%   \end{bitsyntax}
%   选择论文类型，它们分别对应：
%   \begin{itemize}
%     \item \BIThesisTemplates{LR}
%     \item \BIThesisTemplates{UP}
%   \end{itemize}
% \end{function}
% 
% \begin{function}{ctex}
%   \begin{bitsyntax}[emph={[1]ctex}]
%     ctex = (*传给 ctexbook 的模板选项*)
%   \end{bitsyntax}
%
%   该选项用于传入模板选项至 ctexbook。
%
%   例如：想要同时修改 ctex 的字体参数和标点符号处理格式（更多选项请参考 ctex 手册）。
%
%   \begin{latex}[emph={[1]type,common,ctex,fontset,fandol,punct,banjiao,bitreport}]
%      \documentclass[type=common,ctex={fontset=fandol,punct=banjiao}]{bitreport}
%   \end{latex}
% \end{function}
%
% \subsection{参数设置}
%   
% \begin{function}{\BITSetup}
%   \begin{bitsyntax}[emph={[1]BITSetup}]
%     \BITSetup = {(*\oarg{键值对}*)}
%   \end{bitsyntax}
% \end{function}
% 
% 本模板提供了一系列选项，可由您自行配置。载入文档类之后，以下所有选项均可通过统一的
% 命令 \cs{BITSetup} 来设置。
%
% \cs{BITSetup} 的参数是一组由（英文）逗号隔开的选项列表，列表中的选项通常是 \meta{key} =
% \meta{value} 的形式。部分选项的 \meta{value} 可以省略。对于同一项，后面的设置将会覆盖前面的设
% 置。在下文的说明中，将用粗体表示默认值。
%
% \cs{BITSetup} 采用 LATEX3 风格的键值设置，支持不同类型以及多种层次的选项设定。键值列
% 表中，“=”左右的空格不影响设置；但需注意，参数列表中不可以出现空行。
% 与模板选项相同，布尔型的参数可以省略 \meta{选项} = true 中的“= true”。
% 另有一些选项包含子选项，如 cover 和 info 等。它们可以按如下两种等价方式来设定：
%
% \begin{latex}[morekeywords={\BITSetup},emph={[1]BITSetup,cover,date,info,title,author}]
%   \BITSetup{
%     cover = {
%       date = xxxx年x月,
%     },
%     info = {
%       author = Feng Kaiyu,
%       title = A Report Title for Your Experiment,
%     }
%   }
% \end{latex}
%
% 或者
% 
% \begin{latex}[morekeywords={\BITSetup},emph={[1]BITSetup,cover,date,info,title,author}]
%   \BITSetup{
%     cover / date = xxxx年x月,
%     info / author = Feng Kaiyu,
%     info / title = A Thesis Title for Your Paper,
%   }
% \end{latex}
%
% \subsubsection{封面选项}
% 
% \begin{function}{cover}
%   \begin{bitsyntax}[emph={[1]cover}]
%     cover = (*\marg{键值列表}*)
%     cover/(*\meta{key}*) = (*\meta{value}*)
%   \end{bitsyntax}
%
%   该选项包含许多子项目，用于设置论文格式。具体内容见下。
% \end{function}
%
% \begin{function}{cover/date}
%   \begin{bitsyntax}[emph={[1]date}]
%     date = (*\marg{任意字符串}*)
%   \end{bitsyntax}
%
%   覆盖封面的日期。
% \end{function}
%
% \subsubsection{文档基本信息}
%
% \begin{function}{info}
%   \begin{bitsyntax}[emph={[1]info}]
%     info = (*\marg{键值列表}*)
%     info/(*\meta{key}*) = (*\meta{value}*)
%   \end{bitsyntax}
%
%  该选项包含许多子项目，用于录入论文信息。具体内容见下。
% \end{function}
%
% \begin{function}{info/title}
%   \begin{bitsyntax}[emph={[1]title}]
%     title = (*\marg{字符串}*)
%   \end{bitsyntax}
%
%   论文或报告标题。
% \end{function}
%
% \begin{function}{info/school}
%   \begin{bitsyntax}[emph={[1]school}]
%     school = (*\marg{字符串}*)
%   \end{bitsyntax}
%
%   学院名称。
% \end{function}
%
% \begin{function}{info/major}
%   \begin{bitsyntax}[emph={[1]major}]
%     major = (*\marg{字符串}*)
%   \end{bitsyntax}
%
%   专业名称。
% \end{function}
%
% \begin{function}{info/author}
%   \begin{bitsyntax}[emph={[1]author}]
%     author = (*\marg{字符串}*)
%   \end{bitsyntax}
%
%   作者姓名。
% \end{function}
%
% \begin{function}{info/studentId}
%   \begin{bitsyntax}[emph={[1]studentId}]
%     studentId = (*\marg{字符串}*)
%   \end{bitsyntax}
%
%   学号。
% \end{function}
%
% \begin{function}{info/supervisor}
%   \begin{bitsyntax}[emph={[1]supervisor}]
%     supervisor = (*\marg{字符串}*)
%   \end{bitsyntax}
%
%   指导教师。
% \end{function}
%
% \begin{function}{info/externalSupervisor}
%   \begin{bitsyntax}[emph={[1]externalSupervisor}]
%     externalSupervisor = (*\marg{字符串}*)
%   \end{bitsyntax}
%
%   校外指导教师。
% \end{function}
%
% \begin{function}{info/class}
%   \begin{bitsyntax}[emph={[1]class}]
%     class = (*\marg{字符串}*)
%   \end{bitsyntax}
%
%   班级。
% \end{function}
% 
% \subsubsection{其他选项}
%
% \begin{function}{misc}
%   \begin{bitsyntax}[emph={[1]misc}]
%     misc = (*\marg{键值列表}*)
%     misc/(*\meta{key}*) = (*\meta{value}*)
%   \end{bitsyntax}
%
%  该选项包含许多子项目，用于额外的控制。具体内容见下。
% \end{function}
%
% \begin{function}{misc/reviewTable}
%   \begin{bitsyntax}[emph={[1]reviewTable}]
%     reviewTable = (*\marg{指向评审表的路径}*)
%   \end{bitsyntax}
%
%   用于指定已经填写好的评审表 PDF 文件。
% \end{function}
%
% \section{致谢}
% \begin{itemize}
%   \item 感谢历届贡献者对 BIThesis 的悉心维护。
%   \item 感谢学校及老师们对 BIThesis 的支持。
%   \begin{itemize}
%     \item 感谢北京理工大学教务部、计算机学院对本科模板的支持。
%     \item 感谢北京理工大学研究生院对研究生模板的支持。
%   \end{itemize}
%   \item 感谢众多优秀的开源 $\LaTeX$ 项目，他们为后来者提供了前进的方向。
%   \begin{itemize}
%     \item \href{https://github.com/hushidong/biblatex-gb7714-2015}{biblatex-gb7714-2015}
%       提供了易用的国标引用格式以及细心指导。
%     \item \href{https://github.com/BIT-thesis/LaTeX-template}
%       {北京理工大学硕士（博士）学位论文 $\LaTeX$ 模板} 提供了
%       研究生模板样式的代码参考。
%     \item \href{https://github.com/stone-zeng/fduthesis}
%       {fduthesis（复旦大学学位论文 $\LaTeX$ 模板）} 提供了包编写的最佳实践。
%     \item \href{https://github.com/tuna/thuthesis}
%       {ThuThesis（清华大学学位论文 $\LaTeX$ 模板）} 提供了 dtx 文件的编写参考。
%   \end{itemize}
% \end{itemize}
%
% 最后，感谢你的使用。
%
% \section{软件许可证}
%
% \begin{itemize}
%   \item 北京理工大学校徽校名图片的版权归北京理工大学所有。
%   \item \BIThesisLaTeX 宏包以及相关文档类使用 \LPPL 授权。
%   \item \BIThesisLaTeX 文档及其他附属文件通过 CC0-1.0 授权。
% \end{itemize}
% \section{实现细节}
%
%    \begin{macrocode}
%<*package>
%    \end{macrocode}
%
% Identify the internal prefix (\LaTeX3 \pkg{DocStrip} convention).
%    \begin{macrocode}
%<@@=bithesis>
%    \end{macrocode}
%
%    \begin{macrocode}
%</package>
%    \end{macrocode}
%
% \subsection{bithesis.cls 文档类}
%
%    \begin{macrocode}
%<*thesis>
%    \end{macrocode}
%
% \subsubsection{全局变量与临时变量}
%
% 定义全局变量。
% \begin{variable}{\g_@@_thesis_type_int}
% 论文类型，取值从 1 开始，分别对应: 
%  \begin{enumerate}
%      \item 本科生毕业设计（论文）
%      \item 本科生毕业设计（论文）外文翻译
%      \item 本科生全英文专业毕业设计（论文）
%      \item 硕士学位论文
%      \item 博士学位论文
%  \end{enumerate}
%    \begin{macrocode}
\int_new:N \g_@@_thesis_type_int
%    \end{macrocode}
% \end{variable}
%
% \begin{variable}{\g_@@_head_zihao_int}
% 页眉字号。研究生论文使用 5 号字，本科生论文使用 4 号字。
%    \begin{macrocode}
\int_new:N \g_@@_head_zihao_int
%    \end{macrocode}
% \end{variable}
%
% \begin{variable}{\g_@@_twoside_bool}
% 是否双面打印。默认单面打印。
%    \begin{macrocode}
\bool_new:N \g_@@_twoside_bool
%    \end{macrocode}
% \end{variable}
%
% \begin{variable}{\g_@@_thesis_type_english_bool}
% 是否为英文模板。目前只有本科生全英文专业的模板会将此变量设置为 true。
%    \begin{macrocode}
\bool_new:N \g_@@_thesis_type_english_bool
%    \end{macrocode}
% \end{variable}
%
% \begin{variable}{\g_@@_blind_mode_bool}
% 是否为盲审模式。默认为 false。
%    \begin{macrocode}
\bool_new:N \g_@@_blind_mode_bool
%    \end{macrocode}
% \end{variable}
%
% \begin{variable}{\g_@@_label_divide_char_tl}
% 用于分隔标签的字符。默认为「-」或者「.」。
%    \begin{macrocode}
\tl_new:N \g_@@_label_divide_char_tl
%    \end{macrocode}
% \end{variable}
%
% \begin{variable}{\l_@@_right_seq, \l_@@_left_seq}
% 定义临时变量。
%    \begin{macrocode}
\seq_new:N \l_@@_right_seq
\seq_new:N \l_@@_left_seq
%    \end{macrocode}
% \end{variable}
%
% \subsubsection{辅助函数与常量}
%
% \begin{macro}{\tl_if_empty:xTF,\seq_set_split:Nnx}
% 生成变体。
%    \begin{macrocode}
\cs_generate_variant:Nn \tl_if_empty:nTF {x}
\cs_generate_variant:Nn \seq_set_split:Nnn {Nnx}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_same_page:}
% 取消换页。
%    \begin{macrocode}
\cs_new:Npn \@@_same_page: {
  \let\clearpage\relax
  \let\cleardoublepage\relax
}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\@@_if_graduate:TF}
% 是否为研究生学位论文。
%    \begin{macrocode}
\cs_new:Npn \@@_if_graduate:TF #1#2 {
    \int_compare:nNnTF {3} < {\g_@@_thesis_type_int}
      {#1}
      {#2}
  }
%    \end{macrocode}
% \end{macro}

% \begin{macro}{\@@_if_thesis_int_type:nT,\@@_if_thesis_int_type:nTF}
% 是否某一特定模板。
%    \begin{macrocode}
\cs_new:Npn \@@_if_thesis_int_type:nTF #1#2#3 {\int_compare:nNnTF {\g_@@_thesis_type_int} = {#1} {#2} {#3}}
\cs_new:Npn \@@_if_thesis_int_type:nT #1#2 {\@@_if_thesis_int_type:nTF {#1} {#2} {}}
%    \end{macrocode}
% \end{macro}

% \begin{macro}{\@@_if_thesis_english:T,\@@_if_thesis_english:TF}
% 是否为英文模板，这里包括全英文专业和研究生模板的英文模式。
%    \begin{macrocode}
\cs_new:Npn \@@_if_thesis_english:TF #1#2 {\bool_if:nTF {\g_@@_thesis_type_english_bool} {#1} {#2}}
\cs_new:Npn \@@_if_thesis_english:T #1 {\@@_if_thesis_english:TF {#1}{}}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_if_bachelor_thesis:TF,\@@_if_bachelor_thesis:T,\@@_if_master_thesis:TF,\@@_if_doctor_thesis:TF}
% 是否为本科、硕士、博士学位论文。
%    \begin{macrocode}
\cs_new:Npn \@@_if_bachelor_thesis:TF #1#2 {\int_compare:nNnTF {\g_@@_thesis_type_int} < {4} {#1} {#2}}
\cs_new:Npn \@@_if_bachelor_thesis:T #1 {\@@_if_bachelor_thesis:TF {#1} {}}
\cs_new:Npn \@@_if_master_thesis:TF #1#2 {\int_compare:nNnTF {\g_@@_thesis_type_int} = {4} {#1} {#2}}
\cs_new:Npn \@@_if_doctor_thesis:TF #1#2 {\int_compare:nNnTF {\g_@@_thesis_type_int} = {5} {#1} {#2}}
%    \end{macrocode}
% \end{macro}
%
% \begin{variable}{\c_@@_thesis_type_clist}
% 定义论文类型的列表。
%    \begin{macrocode}
\clist_const:Nn \c_@@_thesis_type_clist
    { bachelor, bachelor_translation, bachelor_english, master, doctor}
%    \end{macrocode}
% \end{variable}
%
% \begin{variable}{\c_@@_publication_modes_clist}
% 定义「攻读学位期间发表论文与研究成果清单」管理方式。
%    \begin{macrocode}
\clist_const:Nn \c_@@_publication_modes_clist
    { biblatex, custom }
%    \end{macrocode}
% \end{variable}
%
% \begin{macro}{\@@_define_label:nn,\@@_define_label_by_thesis_type:nnn,\@@_define_label:nnn,\@@_define_label_by_thesis_type:nnnn}
% 定义常量（标签）的辅助函数。
%    \begin{macrocode}
\cs_new_protected:Npn \@@_define_label:nn #1#2
  { \tl_const:cn { c_@@_label_ #1 _tl } {#2} }

\cs_new_protected:Npn \@@_define_label_by_thesis_type:nnn #1#2#3 
  {
    \tl_const:cn { c_@@_ #1 _label_ #2 _tl } {#3}
  }

\cs_new_protected:Npn \@@_define_label:nnn #1#2#3
  {
    \tl_const:cn { c_@@_label_ #1    _tl } {#2}
    \tl_const:cn { c_@@_label_ #1 _en_tl } {#3}
  }

\cs_new_protected:Npn \@@_define_label_by_thesis_type:nnnn #1#2#3#4
  {
    \tl_const:cn { c_@@_ #1 _label_ #2 _tl } {#3}
    \tl_const:cn { c_@@_ #1 _label_ #2 _en_tl } {#4}
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\smallgap:}
% 标签文字之间的间距。
%    \begin{macrocode}
\cs_new:Npn \smallgap: {
  \hspace{0.45ex}
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\label_space:}
% 标签与内容之间的空白间距。
%    \begin{macrocode}
\cs_new:Npn \label_space: {
  \@@_if_bachelor_thesis:T {
    \quad
  }
}
%    \end{macrocode}
% \end{macro}
%
% \begin{variable}{\c_@@_label_code_tl,\c_@@_label_udc_tl,
%   \c_@@_label_classification_tl,\c_@@_label_classified_level_tl,\c_@@_label_type_tl}
% 没有对应英文的常量。
%    \begin{macrocode}
\clist_map_inline:nn
  {
    {code} {代码},
    {udc} {UDC分类号：},
    {classification} {中国分类号：},
    {classified_level} {密级},
    {type} {种类},
  }
  {\@@_define_label:nn #1}
%    \end{macrocode}
% \end{variable}
%
% \begin{variable}{\c_@@_bachelor_label_xxx_tl}
% 本科毕设的常量。
%    \begin{macrocode}
\clist_map_inline:nn
  {
    {title} {本科生毕业设计（论文）},
    {originality} {原创性声明},
    {originality_clause} {本人郑重声明：所呈交的毕业设计（论文），
    是本人在指导老师的指导下独立进行研究所取得的成果。除文中已经注明引用的内容外，
    本文不包含任何其他个人或集体已经发表或撰写过的研究成果。
    对本文的研究做出重要贡献的个人和集体，均已在文中以明确方式标明。\par~特此申明。},
    {authorization} {关于使用授权的声明},
    {authorization_clause} {本人完全了解北京理工大学有关保管、使用毕业设计（论文）的规定，
    其中包括：\circled{1}~学校有权保管、并向有关部门送交本毕业设计（论文）的原件与复印件；
    \circled{2}~学校可以采用影印、缩印或其它复制手段复制并保存本毕业设计（论文）；
    \circled{3}~学校可允许本毕业设计（论文）被查阅或借阅；\circled{4}~学校可以学术交流为目的，
    复制赠送和交换本毕业设计（论文）；\circled{5}~学校可以公布本毕业设计（论文）的全部或部分内容。},
    {originality_author_signature} 
      {本人签名：\hspace{40mm}日\hspace{2.5mm}期：\hspace{13mm}年\hspace{8mm}月\hspace{8mm}日},
    {originality_supervisor_signature} 
      {指导老师签名：\hspace{40mm}日\hspace{2.5mm}期：\hspace{13mm}年\hspace{8mm}月\hspace{8mm}日},
  } {\@@_define_label_by_thesis_type:nnn {bachelor} #1}
%    \end{macrocode}
% \end{variable}
%
% \begin{variable}{\c_@@_bachelor_english_label_xxx_tl}
% 全英文专业的常量。
%    \begin{macrocode}
\clist_map_inline:nn
  {
    {title} {},
    {originality} {原创性声明~Statement~of~Originality},
    {originality_clause} {
        本人郑重声明：所呈交的毕业设计（论文），
        是本人在指导老师的指导下独立进行研究所取得的成果。除文中已经注明引用的内容外，
        本文不包含任何其他个人或集体已经发表或撰写过的研究成果。
        对本文的研究做出重要贡献的个人和集体，均已在文中以明确方式标明。特此申明。\par 
        \arialfamily I,\dunderline[-1pt]{1pt}{\makebox[18mm]{}},~solemnly~
        declare:~the~submitted~graduation~design~(thesis),~
        is~the~research~achievement~completed~independently~by~myself~
        under~the~guidance~of~the~supervisor.~This~article~does~not~contain~
        any~research~published~or~written~by~any~other~individual~or~group,~
        except~as~already~referenced~in~this~paper.~Individuals~and~groups~
        that~have~made~important~contributions~to~the~study~of~this~paper~
        are~clearly~indicated~and~cited~in~the~paper.\par
    },
    {authorization} {关于使用授权的声明~State~of~Use~Authorization},
    {authorization_clause} {
      本人完全了解北京理工大学有关保管、使用毕业设计（论文）的规定，
      其中包括：\circled{1}学校有权保管、并向有关部门送交本毕业设计（论文）的原件与复印件；
      \circled{2}学校可以采用影印、缩印或其它复制手段复制并保存本毕业设计（论文）；
      \circled{3}学校可允许本毕业设计（论文）被查阅或借阅；
      \circled{4}学校可以学术交流为目的,复制赠送和交换本毕业设计（论文）；
      \circled{5}学校可以公布本毕业设计（论文）的全部或部分内容。\par
      I~fully~understand~the~regulations~on~the~storage,~
      use~of~graduation~design~(thesis)~in~Beijing~Institute~of~Technology.~
      Beijing~Institute~of~Technology~has~the~right~to~(1)~keep,~
      and~to~the~relevant~departments~to~send~the~original~or~copy~
      of~this~graduation~design~(thesis);~(2)~copy~and~preserve~this~
      graduation~design~(thesis)~by~photocopying,~miniature~or~other~
      means~of~reproduction;~(3)~allow~this~graduation~design~(thesis)~
      to~be~read~or~borrowed;~(4)~for~the~purpose~of~academic~exchange,~
      copy,~give~and~exchange~this~graduation~design~(thesis);~(5)~
      publish~all~or~part~of~the~contents~of~this~graduation~design~(thesis).~
    },
  } {\@@_define_label_by_thesis_type:nnn {bachelor_english} #1}
%    \end{macrocode}
% \end{variable}
%
% \begin{variable}{\c_@@_graduate_label_xxx_tl}
% 研究生模板的常量。
%    \begin{macrocode}
\clist_map_inline:nn
  {
    {originality} {研究成果声明},
    {originality_clause} {本人郑重声明：
    所提交的学位论文是我本人在指导教师的指导下进行的研究工作获得的研究成果。
    尽我所知，文中除特别标注和致谢的地方外，
    学位论文中不包含其他人已经发表或撰写过的研究成果，
    也不包含为获得北京理工大学或其它教育机构的学位或证书所使用过的材料。
    与我一同工作的合作者对此研究工作所做的任何贡献均已在
    学位论文中作了明确的说明并表示了谢意。\par~特此申明。},
    {authorization} {关于学位论文使用权的说明},
    {authorization_clause} {本人完全了解北京理工大学有关保管、使用学位论文的规定，
    其中包括：\circled{1}~学校有权保管、并向有关部门送交学位论文的原件与复印件；
    \circled{2}~学校可以采用影印、缩印或其它复制手段复制并保存学位论文；
    \circled{3}~学校可允许学位论文被查阅或借阅；\circled{4}~
    学校可以学术交流为目的,复制赠送和交换学位论文；\circled{5}~
    学校可以公布学位论文的全部或部分内容（保密学位论文在解密后遵守此规定）。},
    {originality_author_signature} 
      {签\qquad 名：\hspace{40mm}日\hspace{2.5mm}期：\hspace{30mm}\quad},
    {originality_supervisor_signature} 
      {指导老师签名：\hspace{40mm}日\hspace{2.5mm}期：\hspace{30mm}\quad},
  } {\@@_define_label_by_thesis_type:nnn {graduate} #1}
%    \end{macrocode}
% \end{variable}
%
% \begin{variable}{\c_@@_graduate_label_xxx_tl,\c_@@_graduate_label_xxx_en_tl}
% 研究生模板的中英常量。
%    \begin{macrocode}
\clist_map_inline:nn
  {
    {author} {作\quad 者\quad 姓\quad 名} {Candidate~Name},
    {school} {学\quad 院\quad 名\quad 称} {School~or~Department},
    {supervisor} {指\quad 导\quad 教\quad 师} {Faculty~Mentor},
    {chairman} {答辩委员会主席} {Chair,~Thesis~Committee},
    {degree} 
      {申\smallgap: 请\smallgap: 学\smallgap: 位\smallgap: 级\smallgap: 别}
      {Degree~Applied},
    {major} {学\quad 科\quad 专\quad 业} {Major},
    {institute}
      {学\smallgap: 位\smallgap: 授\smallgap: 予\smallgap: 单\smallgap: 位}
      {Degree~by},
    {defense_date}
      {论\smallgap: 文\smallgap: 答\smallgap: 辩\smallgap: 日\smallgap: 期}
      {The~Date~of~Defence},
  } {\@@_define_label_by_thesis_type:nnnn {graduate} #1}
%    \end{macrocode}
% \end{variable}
%
% \begin{variable}{\c_@@_label_xxx_tl,\c_@@_label_xxx_en_tl}
% 常用的中英常量。
%    \begin{macrocode}
\clist_map_inline:nn 
  {
    {school} {学\qquad 院} {School},
    {major} {专\qquad 业} {Degree},
    {author} {学生姓名} {Author},
    {student_id} {学\qquad 号} {Student~ID},
    {supervisor} {指导教师} {Supervisor},
    {co_supervisor} {校外指导教师} {Co-Supervisor},
    {keywords} {关键词：} {Key~Words:~},
    {toc} {目\label_space: 录} {Table~of~Contents},
    {abstract} {摘\label_space: 要} {Abstract},
    {conclusion} {结\label_space: 论} {Conclusions},
    {appendix} {附\label_space: 录} {Appendices},
    {ack} {致\label_space: 谢} {Acknowledgement},
    {figure} {插\quad 图} {Illustrations},
    {table} {表\quad 格} {Tables},
    {appendix_prefix} {附录} {Appendix},
    {reference} {参考文献} {References},
    {university} {北京理工大学} {Beijing~Institute~of~Technology},
    {publications} {攻读学位期间发表论文与研究成果清单} 
      {Publications~During~Studies},
    % TODO: Not so sure about the translation.
    {resume} {作者简介} {},
    {symbols} {主要符号对照表} {},
  }
  {\@@_define_label:nnn #1}
%    \end{macrocode}
% \end{variable}
%
% \begin{variable}{\c_@@_bachelor_thesis_header_clist,\c_@@_bachelor_thesis_cover_title_clist}
% 本科生模板的封面标题与页眉标题常量列表。
%    \begin{macrocode}
\clist_const:Nn \c_@@_bachelor_thesis_header_clist
  {
    北京理工大学本科生毕业设计（论文）, 
    北京理工大学本科生毕业设计（论文）外文翻译, 
    Beijing~Institute~of~Technology~Bachelor's~Thesis 
  }
\clist_const:Nn \c_@@_bachelor_thesis_cover_title_clist
  {
    本科生毕业设计（论文）,
    本科生毕业设计（论文）外文翻译,
    Beijing\nobreak{~}Institute\nobreak{~}of\nobreak{~}Technology~Bachelor's~Thesis,
  }
%    \end{macrocode}
% \end{variable}
%
% \subsubsection{l3keys 接口键值对定义}
%
% 定义 |bithesis| 键值对类。
%    \begin{macrocode}
\keys_define:nn { bithesis }
{
  info .meta:nn = { bithesis / info } {#1},
  misc .meta:nn = { bithesis / misc } {#1},
  cover .meta:nn = { bithesis / cover } {#1},
  style .meta:nn = { bithesis / style } {#1},
  option .meta:nn = { bithesis / option } {#1},
  TOC .meta:nn = { bithesis / TOC } {#1},
  appendices .meta:nn = { bithesis / appendices } {#1},
  publications .meta:nn = { bithesis / publications } {#1},
}
%    \end{macrocode}
%
% 定义 |bithesis/option| 键值对类。
%    \begin{macrocode}
\keys_define:nn { bithesis / option }
{
  type .choice:,
  type .value_required:n = true,
  type .choices:Vn =
    \c_@@_thesis_type_clist
    { 
      \int_set_eq:NN \g_@@_thesis_type_int \l_keys_choice_int 
      \int_case:nn {\l_keys_choice_int} {
        % 本科全英文也是英文模板。
        {3} {\bool_set_true:N \g_@@_thesis_type_english_bool}
      }
    },
  type .initial:n = bachelor,
  twoside .bool_gset:N = \g_@@_twoside_bool,
  blindPeerReview .bool_gset:N = \g_@@_blind_mode_bool,
  ctex .tl_set:N = \l_@@_options_to_ctex_tl,
}
%    \end{macrocode}
%
% 定义 |bithesis/cover| 键值对类。
%    \begin{macrocode}
\keys_define:nn { bithesis / cover }
  {
    date .tl_set:N = \l_@@_cover_date_tl,
    headerImage .tl_set:N = \l_bit_coverheaderimage_tl,
    xiheiFont .tl_set:N = \l_@@_cover_xihei_font_path_tl,
    xiheiFont .default:n = {STXihei},
    %% cover entry
    dilimiter .tl_set:N = \l_@@_cover_dilimiter_tl,
    labelAlign .tl_set:N = \l_@@_cover_label_align_tl,
    labelAlign .initial:n = {r},
    valueAlign .tl_set:N = \l_@@_cover_value_align_tl,
    valueAlign .initial:n = {c},
    labelMaxWidth .dim_set:N = \l_@@_cover_label_max_width_dim,
    valueMaxWidth .dim_set:N = \l_@@_cover_value_max_width_dim,
    autoWidthPadding .dim_set:N = \l_@@_cover_auto_width_padding_dim,
    autoWidthPadding .initial:n = {0.25em},
    autoWidth .bool_set:N = \l_@@_cover_auto_width_bool,
    autoWidth .initial:n = {true},
    underlineThickness .dim_set:N = \l_@@_cover_underline_thickness_dim,
    underlineThickness .initial:n = {1pt},
    underlineOffset .dim_set:N = \l_@@_cover_underline_offset_dim,
    underlineOffset .initial:n = { -10pt },
  }
%    \end{macrocode}
%
% 定义 |bithesis/info| 键值对类。
%    \begin{macrocode}
\keys_define:nn { bithesis / info }
  {
    title .tl_set:N = \l_@@_value_title_tl,
    title .initial:n = {形状记忆聚氨酯的合成及其在织物中的应用（示例）},
    titleEn .tl_set:N = \l_@@_value_title_en_tl,
    titleEn .initial:n = {Synthesis~and~Application~on~Texttiles~of~the~Shape~Memory~Polyurethane~(example)},
    % 因为是覆盖选项，所以不需要设置初始值。
    verticalTitle .tl_set:N = \l_@@_value_vertical_title_tl,
    school .tl_set:N = \l_@@_value_school_tl,
    school .initial:n = {网络空间安全学院（示例）},
    major .tl_set:N = \l_@@_value_major_tl,
    major .initial:n = {网络空间安全（示例）},
    author .tl_set:N = \l_@@_value_author_tl,
    author .initial:n = {张三（示例）},
    studentId .tl_set:N = \l_@@_value_student_id_tl,
    studentId .initial:n = {3120211xxx（示例）},
    supervisor .tl_set:N = \l_@@_value_supervisor_tl,
    supervisor .initial:n = {李四教授（示例）},
    % 因为默认不显示，所以不需要设置初始值。
    externalSupervisor .tl_set:N = \l_@@_value_external_supervisor_tl,
    keywords .tl_set:N = \l_@@_value_keywords_tl,
    keywords .initial:n = {聚氨酯,形状记忆,织物（示例）},
    keywordsEn .tl_set:N = \l_@@_value_keywords_en_tl,
    keywordsEn .initial:n = {Polyurethane,Shape Memory,Textiles (example)},
    translationTitle .tl_set:N = \l_@@_value_trans_title_tl,
    translationOriginTitle .tl_set:N = \l_@@_value_trans_origin_title_tl,
    % 中国分类号，研究生学位论文使用
    classification .tl_set:N = \l_@@_value_classification_tl,
    classification .initial:n = {TQ~028.1（示例）},
    % UDC 分类号，研究生学位论文使用
    UDC .tl_set:N = \l_@@_value_udc_tl,
    UDC .initial:n = {540（示例）},
    chairman .tl_set:N = \l_@@_value_chairman_tl,
    chairman .initial:n = {王五教授（示例）},
    degree .tl_set:N = \l_@@_value_degree_tl,
    degree .initial:n = {工学博士（示例）},
    degreeEn .tl_set:N = \l_@@_value_degree_en_tl,
    degreeEn .initial:n = {Doctor~of~Engineering~(example)},
    institute .tl_set:N = \l_@@_value_institute_tl,
    institute .initial:n = {\c_@@_label_university_tl},
    defenseDate .tl_set:N = \l_@@_value_defense_date_tl,
    defenseDate .initial:n = {2019年6月（示例）},
    authorEn .tl_set:N = \l_@@_value_author_en_tl,
    authorEn .initial:n = {San~Zhang~(example)},
    schoolEn .tl_set:N = \l_@@_value_school_en_tl,
    schoolEn .initial:n = {School~of~Network~Space~Security\\(example)},
    supervisorEn .tl_set:N = \l_@@_value_supervisor_en_tl,
    supervisorEn .initial:n = {Prof.~Si~Li~(example)},
    chairmanEn .tl_set:N = \l_@@_value_chairman_en_tl,
    chairmanEn .initial:n = {Prof.~Wu~Wang~(example)},
    majorEn .tl_set:N = \l_@@_value_major_en_tl,
    majorEn .initial:n = {Cyberspace~Security~and~Technology\\(example)},
    instituteEn .tl_set:N = \l_@@_value_institute_en_tl,
    instituteEn .initial:n = {\c_@@_label_university_en_tl},
    defenseDateEn .tl_set:N = \l_@@_value_defense_date_en_tl,
    defenseDateEn .initial:n = {June,~2019~(example)},
    % 因为默认不显示，所以不需要设置初始值。
    classifiedLevel .tl_set:N = \l_@@_value_classified_level_tl,
  }
%    \end{macrocode}
%
% 定义 |bithesis/misc| 键值对类。
%    \begin{macrocode}
\keys_define:nn { bithesis / misc }
  {
    arialFont .tl_set:N = \l_@@_misc_arial_font_path_tl,
  }

%    \end{macrocode}
%
% 定义 |bithesis/style| 键值对类。
%    \begin{macrocode}
\keys_define:nn { bithesis / style }
{
  head .tl_set:N = \l_@@_style_head_tl,
  head .initial:n = {
    \int_case:nn {\g_@@_thesis_type_int}
    {
      {1} {北京理工大学本科生毕业设计（论文）}
      {2} {北京理工大学本科生毕业设计（论文）外文翻译}
      {3} {Beijing~Institute~of~Technology~Bachelor's~Thesis}
      {4} {北京理工大学硕士学位论文}
      {5} {北京理工大学博士学位论文}
    }
  },
  bibliographyIndent .bool_set:N = \l_@@_style_bibliography_indent_bool,
  bibliographyIndent .initial:n = {true},
}
%    \end{macrocode}
%
% 定义 |bithesis/TOC| 键值对类。
%    \begin{macrocode}
\keys_define:nn { bithesis / TOC }
{
  abstract .bool_set:N = \l_@@_add_abstract_to_toc_bool,
  abstract .initial:n = {true},
  abstractEn .bool_set:N = \l_@@_add_abstract_en_to_toc_bool,
  abstractEn .initial:n = {true},
  symbols .bool_set:N = \l_@@_add_symbols_to_toc_bool,
  symbols .initial:n = {true},
}
%    \end{macrocode}
%
% 定义 |bithesis/appendices| 键值对类。
%    \begin{macrocode}
\keys_define:nn { bithesis / appendices }
{
  chapterLevel .bool_set:N = \l_@@_appendices_chapter_level_bool,
  title .tl_set:N = \l_@@_appendices_title_tl,
  TOCTitle .tl_set:N = \l_@@_appendix_toc_title_tl,
}
%    \end{macrocode}
%
% 定义 |bithesis/appendices| 键值对类。
%    \begin{macrocode}
\keys_define:nn { bithesis / publications }
{
  % mode .choice:,
  % mode .value_required:n = true,
  % mode .choices:Vn = 
  %   \c_@@_publication_modes_clist
  %   {
  %     \int_new:N \l_@@_publication_mode_int
  %     \int_set:Nn \l_@@_publication_mode_int \l_keys_choice_int
  %   },
  % mode .initial:n = biblatex,
  sorting .bool_set:N = \l_@@_publications_sorting_bool,
  sorting .initial:n = {true},
  omit .bool_set:N = \l_@@_publications_omit_bool,
  omit .initial:n = {false},
}
%    \end{macrocode}
% 在宏加载时，处理 |bithesis/option| 中的值。使得 |bithesis| 
% 宏包的模板选项可以在宏加载时生效。
%    \begin{macrocode}
\ProcessKeysOptions { bithesis / option }
%    \end{macrocode}
%
% \subsubsection{处理模板选项}
%
% 英文模板需要开启 ctexbook 宏包的英文选项。
%    \begin{macrocode}
\@@_if_thesis_english:T {
  \PassOptionsToClass{scheme=plain}{ctexbook}
}
%    \end{macrocode}
%
% 如果没有开启双面打印选项，则在 ctexbook 中开启单面打印选项。
%    \begin{macrocode}
\bool_if:NTF \g_@@_twoside_bool {} {
  \PassOptionsToClass{oneside,openany}{ctexbook}
}
%    \end{macrocode}
%
% 将 |bithesis/option/ctex| 中的值传递给 ctexbook 模板类。
%    \begin{macrocode}
% Any extra option passed by user will be passed to ctexbook.
\DeclareOption*{
  \PassOptionsToClass{\l_@@_options_to_ctex_tl}{ctexbook}
}
%    \end{macrocode}
%
% 加载 ctexbook 模板类。
%    \begin{macrocode}
\ProcessOptions\relax
\LoadClass[zihao=-4,]{ctexbook}
%    \end{macrocode}
%
% \subsubsection{定义模板类样式}
%
% 加载所需的宏包。
%    \begin{macrocode}
\RequirePackage{geometry}
\RequirePackage{xeCJK}
\RequirePackage{titletoc}
\RequirePackage{setspace}
\RequirePackage{graphicx}
\RequirePackage{fancyhdr}
\RequirePackage{pdfpages}
\RequirePackage{setspace}
\RequirePackage{booktabs}
\RequirePackage{multirow}
\RequirePackage{tikz}
\RequirePackage{etoolbox}
% Hide color and border in hyperref.
\RequirePackage[hidelinks,bookmarksnumbered]{hyperref}
\RequirePackage{xcolor}
\RequirePackage{caption}
\RequirePackage{array}
\RequirePackage{amsmath}
\RequirePackage{amssymb}
\RequirePackage{pifont}
\RequirePackage{amsthm}
\RequirePackage{unicode-math}
\RequirePackage{pdfpages}
\RequirePackage{listings}
\RequirePackage{enumitem}
\RequirePackage{fmtcount}
%    \end{macrocode}
%
% 抑制 \pkg{hyperref} 中对 |\hskip| 的 warning 信息。
%    \begin{macrocode}
\pdfstringdefDisableCommands{%
  \let\quad\empty  
}
%    \end{macrocode}
%
% 设置页眉字号，页边距。
% 
% 需要注意的是，根据 \pkg{geometry} 的规则，
% |headsep| 和 |footskip| 分别受到 |top| 与 |bottom| 的影响。
% 所以你能看到在计算 |headsep| 与 |footskip| 时，我们
% 首先计算了相应的偏移量。
%    \begin{macrocode}
\@@_if_graduate:TF {
  \int_set:Nn \g_@@_head_zihao_int {5}
  \geometry{
    a4paper,
    left=2.7cm,
    bottom=2.5cm + 7bp,
    top=3.5cm + 7bp,
    right=2.7cm,
    % `headsep' is affected by `top' option.
    headsep = 3.5cm + 7bp - 2.5cm - 15bp,
    headheight = 15 bp,
    % `footskip' is affected by `bottom' option.
    footskip = 2.5cm + 7bp - 1.8cm,
  }
} {
  \int_set:Nn \g_@@_head_zihao_int {4}
  \geometry{
    a4paper,
    left=3cm,
    bottom=2.6cm + 7bp,
    top=3.5cm + 7bp,
    right=2.6cm,
    % `headsep' is affected by `top' option.
    headsep = 3.5cm + 7bp - 2.4cm - 20bp,
    headheight = 20 bp,
    % `footskip' is affected by `bottom' option.
    footskip = 2.6cm + 7bp - 2cm,
  }
}
%    \end{macrocode}
%
% 根据学校的要求，在本科生模板图片前后加上一行空白。
%    \begin{macrocode}
\@@_if_bachelor_thesis:T {
  \setlength{\intextsep}{2\baselineskip plus 0.2\baselineskip minus 0.2\baselineskip}
}
%    \end{macrocode}
%
% 设置 Times New Roman 字体。
% 根据学校规范要求，默认情况下也使用 Times New Roman 字体。
%    \begin{macrocode}
\setmainfont{Times~New~Roman}
\setromanfont{Times~New~Roman}
%    \end{macrocode}
%
% 在 |preamble| 中，加载各个模板需要的字体。
%    \begin{macrocode}
\ctex_at_end_preamble:n {
  \@@_if_thesis_english:TF {
    \@@_if_thesis_int_type:nT {3} {
      % 对于本科全英文专业模板
      % Font Arial is needed.
      \newfontfamily\arialfamily{Arial}
    }

  } {
    % 对于其他的中文模板，
    % 需要加载细黑体。
    \tl_if_blank:VTF \l_@@_cover_xihei_font_path_tl {} 
    {
      \setCJKfamilyfont{xihei}[AutoFakeBold,AutoFakeSlant]
        {\l_@@_cover_xihei_font_path_tl}
    }
  }

  % 对于本科全英文专业模板，需要自定义日期格式。
  \@@_if_thesis_int_type:nT {3} {
    \RequirePackage[en-US]{datetime2}
    \RequirePackage{indentfirst}
    \DTMlangsetup[en-US]{dayyearsep={\space}}
  }

  % Define biblatex category if it was imported.
  % 这部分是给研究生模板中的
  % 「攻读学位期间发表论文与研究成果清单」使用的。
  \cs_if_exist:NT \DeclareBibliographyCategory {
    \DeclareBibliographyCategory{mypub}
  }
}
%    \end{macrocode}
% 
% \begin{macro}{\xihei:n}
% 定义细黑字体。
%    \begin{macrocode}
\cs_new:Npn \xihei:n #1 {
  \xeCJK_family_if_exist:nTF {xihei} {
    \CJKfamily{xihei} #1
  }{
    \heiti #1
  }
}
%    \end{macrocode}
% \end{macro}
% 
% \begin{macro}{\l_@@_title_font_cs:n}
% 定义标题字体。
%    \begin{macrocode}
\cs_new:Npn \l_@@_title_font_cs:n #1 {
  \int_compare:nNnTF {\g_@@_thesis_type_int} = {3}
  {
    \arialfamily #1
  } {
    \heiti #1
  }
}
%    \end{macrocode}
% \end{macro}
% 
% \begin{macro}{\l_@@_unnumchapter_style_cs:n}
% 定义无序章节的样式。
%    \begin{macrocode}
\cs_new:Npn \l_@@_unnumchapter_style_cs:n #1 {
  % 本科全英文、研究生学位论文需要加粗
  \int_compare:nNnTF {\g_@@_thesis_type_int} > {2}
  {
    \bfseries #1
  } {
    \mdseries #1
  }
}
%    \end{macrocode}
% \end{macro}
% 
% \begin{macro}{\arabicHeiti}
% 遗留下来的黑体字体定义。
%    \begin{macrocode}
\cs_set:Npn \arabicHeiti #1 {#1}
%    \end{macrocode}
% \end{macro}
% 
% 定义 \pkg{fancyhdr} 的页眉页脚。
%    \begin{macrocode}
\fancypagestyle{BIThesis}{
  \fancyhf{}
  % 定义页眉、页码
  \fancyhead[C]{
    \zihao{\int_use:N \g_@@_head_zihao_int}
    \ziju{0.08}
    \songti{\tl_use:N \l_@@_style_head_tl}
  }
  \fancyfoot[C]{\songti\zihao{5} \thepage}
  % 页眉分割线稍微粗一些
  \RenewDocumentCommand \headrulewidth {} {0.6pt}
}
%    \end{macrocode}
%
%  定义 \pkg{ctex} 的章节标题形式。
%    \begin{macrocode}
\ctexset{chapter={
    number = {\arabicHeiti{ \arabic{chapter} }},
    format = { \l_@@_title_font_cs:n \bfseries \centering \zihao{3}},
    nameformat = {},
    titleformat = {},
    aftername = \hspace{9bp},
    pagestyle = BIThesis,
    beforeskip = 8bp,
    afterskip = 32bp,
    fixskip = true,
  }
}

\ctexset{section={
    number = {\arabicHeiti{\thechapter.\hspace{1bp}\arabic{section}}},
    format = {\l_@@_title_font_cs:n \raggedright \bfseries \zihao{4}},
    nameformat = {},
    titleformat = {},
    aftername = \hspace{8bp},
    beforeskip = 20bp plus 1ex minus .2ex,
    afterskip = 18bp plus .2ex,
    fixskip = true,
  }
}

\ctexset{subsection={
    number = {
      \arabicHeiti{
        \thechapter.\hspace{1bp}
        \arabic{section}.\hspace{1bp}
        \arabic{subsection}
      }
    },
    format = {\l_@@_title_font_cs:n \bfseries \raggedright \zihao{-4}},
    nameformat = {},
    titleformat = {},
    aftername = \hspace{7bp},
    beforeskip = 17bp plus 1ex minus .2ex,
    afterskip = 14bp plus .2ex,
    fixskip = true,
  }
}

\ctexset{
  secnumdepth = 3,
  subsubsection={
    numbering = true,
    number = {
      \arabicHeiti{
        \arabic{chapter}.\hspace{1bp}
        \arabic{section}.\hspace{1bp}
        \arabic{subsection}.\hspace{1bp}
        \arabic{subsubsection}
      }
    },
    format={\l_@@_title_font_cs:n \bfseries \raggedright \zihao{-4}},
    nameformat = {},
    titleformat = {},
    beforeskip=28bp plus 1ex minus .2ex,
    afterskip=24bp plus .2ex,
    fixskip=true,
  }
}
%    \end{macrocode}
%
%  定义 TOC 样式。
%    \begin{macrocode}
\addtocontents{toc}{\protect\hypersetup{hidelinks}}

\@@_if_graduate:TF {
  % 对于研究生模板，定义各章标题为宋体四号。
  \titlecontents{chapter}[0pt]{\songti \zihao{4}}
  {\thecontentslabel\hspace{\ccwd}}{}
  {\hspace{.5em}\titlerule*{.}\contentspage}
} {
  % 对于其他，定义各章标题为宋体小四号。
  \titlecontents{chapter}[0pt]{\songti \zihao{-4}}
  {\thecontentslabel\hspace{\ccwd}}{}
  {\hspace{.5em}\titlerule*{.}\contentspage}
}
% section 标题为宋体小四号。
\titlecontents{section}[1\ccwd]{\songti \zihao{-4}}
{\thecontentslabel\hspace{\ccwd}}{}
{\hspace{.5em}\titlerule*{.}\contentspage}
% subsection 标题为宋体小四号。
\titlecontents{subsection}[2\ccwd]{\songti \zihao{-4}}
{\thecontentslabel\hspace{\ccwd}}{}
{\hspace{.5em}\titlerule*{.}\contentspage}
%    \end{macrocode}
% 
% \begin{macro}{\frontmatter}
% 定义前置内容的页面样式。
%    \begin{macrocode}
\RenewDocumentCommand \frontmatter {} {
  \int_compare:nNnTF {\g_@@_thesis_type_int} = {3}
  {
    % 本科全英文专业论文，页码使用小罗马数字。
    \pagenumbering{roman}
  } {
    \pagenumbering{Roman}
  }
  % 这部分的章节标题不进行编号。
  \ctexset{
    chapter = {
      numbering = false,
    }
  }
  \pagestyle{BIThesis}
}
%    \end{macrocode}
% \end{macro}
% 
% \begin{macro}{\mainmatter}
% 主体内容的页面样式。
%    \begin{macrocode}
\RenewDocumentCommand \mainmatter {} {
  \cleardoublepage

  % 这部分的章节标题进行编号。
  \ctexset{
    chapter = {
      numbering = true,
    }
  }
  % 页码使用阿拉伯数字。
  \pagenumbering{arabic}
  \pagestyle{BIThesis}
  % 正文 22 磅的行距
  \setlength{\parskip}{0em}
  \setstretch{1.53}
  % 修复脚注出现跨页的问题
  \interfootnotelinepenalty=10000
}
%    \end{macrocode}
% \end{macro}
% 
% \begin{macro}{\backmatter}
% 后置内容的页面样式。
%    \begin{macrocode}
\RenewDocumentCommand \backmatter {} {
  % 同样，所有的章节标题不进行编号。
  \setcounter{section}{0}
  \setcounter{subsection}{0}
  \setcounter{subsubsection}{0}
  \ctexset{
    chapter = {
      numbering = false,
      beforeskip = 18bp,
      format = {
        \l_@@_title_font_cs:n \l_@@_unnumchapter_style_cs:n \centering \zihao{3}
      },
      afterskip = 26bp,
    }
  }
}
%    \end{macrocode}
% \end{macro}
% 
% 定义标题的前后间距。
%    \begin{macrocode}
\setlength{\abovecaptionskip}{11pt}
\setlength{\belowcaptionskip}{9pt}
%    \end{macrocode}
% 
% 定义分隔字符。
%    \begin{macrocode}
\@@_if_graduate:TF {
  \tl_set:Nn \g_@@_label_divide_char_tl {.}
} {
  \tl_set:Nn \g_@@_label_divide_char_tl {-}
}
%    \end{macrocode}
% 
% \begin{macro}{\thefigure,\thetable,\theequation,\thelstlisting,\lstlistingname}
% 定义各种计数器的格式。
%    \begin{macrocode}
% figure
\cs_set:Npn \thefigure {\thechapter\g_@@_label_divide_char_tl\arabic{figure}}
\captionsetup[figure]{font=small,labelsep=space}

% table
\cs_set:Npn \thetable {\thechapter\g_@@_label_divide_char_tl\arabic{table}}
\captionsetup[table]{font=small,labelsep=space,skip=2pt}

% equation
\cs_set:Npn \theequation {\thechapter\g_@@_label_divide_char_tl\arabic{equation}}

% code snippet
\cs_set:Npn \thelstlisting {\thechapter\g_@@_label_divide_char_tl\arabic{lstlisting}}
\cs_set:Npn \lstlistingname {\c_@@_label_code_tl}
%    \end{macrocode}
% \end{macro}
% 
% 调整底层 TeX 排版引擎参数以保证所有段落能够很好地以两端对齐的方式呈现。
% 是的，这是祖传代码。
%    \begin{macrocode}
\tolerance=1
\emergencystretch=\maxdimen
\hyphenpenalty=10000
\hbadness=10000
%    \end{macrocode}
%
% 自定义一个默认的 lstlisting 样式。
%    \begin{macrocode}
\definecolor{codegreen}{rgb}{0,0.6,0}
\definecolor{codegray}{rgb}{0.5,0.5,0.5}
\definecolor{codepurple}{rgb}{0.58,0,0.82}
\definecolor{backcolour}{rgb}{0.95,0.95,0.92}
\lstdefinestyle{examplestyle}{
    backgroundcolor=\color{backcolour},
    commentstyle=\color{codegreen},
    keywordstyle=\color{magenta},
    numberstyle=\tiny\color{codegray},
    stringstyle=\color{codepurple},
    basicstyle=\ttfamily\footnotesize,
    breakatwhitespace=false,
    breaklines=true,
    captionpos=b,
    keepspaces=true,
    numbers=left,
    numbersep=5pt,
    showspaces=false,
    showstringspaces=false,
    showtabs=false,
    tabsize=2
}
\lstset{style=examplestyle}
%    \end{macrocode}
% 
% 调整插图目录与表格目录的标题。
%    \begin{macrocode}
\cs_set:Npn \listfigurename {\c_@@_label_figure_tl}
\cs_set:Npn \listtablename {\c_@@_label_table_tl}
%    \end{macrocode}
% 
% 根据 GB 3102.11--93 以及 ISO 80000-2:2009 的规定，数学表达式中
% 表示变量的拉丁字母和希腊字母均应当使用斜体。
%    \begin{macrocode}
\unimathsetup{
  math-style = ISO,
  bold-style = ISO,
}
%    \end{macrocode}
% 
% 预定义用户常用的证明环境。
%    \begin{macrocode}
\theoremstyle{plain}
  \newtheorem{algorithm}{算法}[chapter]
  \newtheorem{theorem}{定理}[chapter]
  \newtheorem{lemma}[theorem]{引理}
  \newtheorem{proposition}[theorem]{命题}
  \newtheorem{corollary}[theorem]{推论}
  \newtheorem{axiom}[theorem]{公理}
\theoremstyle{definition}
  \newtheorem{definition}{定义}[chapter]
  \newtheorem{conjecture}{猜想}[chapter]
  \newtheorem{example}{例}[chapter]
  \newtheorem{case}{情形}
\theoremstyle{remark}
  \newtheorem{remark}{注}
  \renewcommand{\qedsymbol}{\ensuremath{\QED}}
%    \end{macrocode}
% 
% \begin{macro}{\@@_dunderline:nnn,\@@_dunderline:nn,\@@_dunderline:n}
% 用于渲染下划线。
% 
% 参数如下：
% \begin{itemize}
%   \item \#1 位置，可选值为 \texttt{c}enter、\texttt{l}eft、\texttt{r}ight。
%   \item \#2 |dim| 长度。
%   \item \#3 |tl| 文字内容。
% \end{itemize}
%    \begin{macrocode}
\cs_new:Npn \@@_dunderline:nnn #1#2#3 {
  {\setbox0=\hbox{#3}\ooalign{\copy0\cr\rule[\dimexpr#1-#2\relax]{\wd0}{#2}}}
}
\cs_new:Npn \@@_dunderline:nn #1#2 {
  \@@_dunderline:nnn {#1} {1pt} {#2}
}
\cs_new:Npn \@@_dunderline:n #1 {
  \@@_dunderline:nnn {-10pt} {1pt} {#1}
}
% 遗留代码，等待重构。
\newcommand\dunderline[3][-1pt]{{%
  \setbox0=\hbox{#3}
  \ooalign{\copy0\cr\rule[\dimexpr#1-#2\relax]{\wd0}{#2}}}}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{|@@_render_cover_entry:nn}
% 用于渲染封面的辅助函数。
%
% 参数如下：
% \begin{itemize}
%   \item \#1 |{token_list}| 为封面信息条目的名称。
%   \item \#2 |{token_list}| 为封面信息条目的内容。
% \end{itemize}
%
% 需要在 |\l_@@_cover_label_max_width_dim| 和 |\l_@@_cover_value_max_width_dim|
% 存储已经计算出来的最大宽度。
%    \begin{macrocode}
\cs_new:Npn \@@_render_cover_entry:nn #1#2 {
  \makebox[\l_@@_cover_label_max_width_dim][\l_@@_cover_label_align_tl]{
    \tl_if_blank:VTF #1 {} {#1\l_@@_cover_dilimiter_tl}
  }
  \hspace{1ex}
  \@@_dunderline:nnn{\l_@@_cover_underline_offset_dim}
    {\l_@@_cover_underline_thickness_dim}{
    \makebox[\l_@@_cover_value_max_width_dim][\l_@@_cover_value_align_tl]{#2}
  }\par
}
%    \end{macrocode}
% \end{macro}
% 
% \begin{macro}{|@@_get_text_width:Nn,\@@_get_text_width:NV}
% 计算 \#2 所占用的宽度，将结果存储在 \#1 中。
%
% 参数如下：
% \begin{itemize}
%   \item \#1 |dim| 存储宽度的变量。
%   \item \#2 |tl| 要计算宽度的文本。
% \end{itemize}
%    \begin{macrocode}
\cs_new:Npn \@@_get_text_width:Nn #1#2
  {
    \hbox_set:Nn \l_tmpa_box {#2}
    \dim_set:Nn #1 { \box_wd:N \l_tmpa_box }
  }
\cs_generate_variant:Nn \@@_get_text_width:Nn { NV }
%    \end{macrocode}
% \end{macro}
% 
% \begin{macro}{\@@_get_max_text_width:NN}
% 从 \#2 中获取最大的文本宽度，然后设置到 \#1 中。
%
% 参数如下：
% \begin{itemize}
%   \item \#1: |dim| 用于存储最大宽度。
%   \item \#2: |seq| 用于存储文本。
% \end{itemize}
%    \begin{macrocode}
\cs_new:Npn \@@_get_max_text_width:NN #1#2
  {
% 这里用 |group| 确保局部变量不会被污染。
    \group_begin:
      \seq_set_eq:NN \l_@@_tmpa_seq #2
      \dim_zero_new:N \l_@@_tmpa_dim
      \bool_until_do:nn { \seq_if_empty_p:N \l_@@_tmpa_seq }
        {
          \seq_pop_left:NN \l_@@_tmpa_seq \l_@@_tmpa_tl
          \@@_get_text_width:NV \l_@@_tmpa_dim \l_@@_tmpa_tl
          % 在两边加上空白，避免文本太靠边。
          \dim_gset:Nn #1 { \dim_max:nn {#1} { \l_@@_tmpa_dim + \l_@@_cover_auto_width_padding_dim * 2} }
        }
    \group_end:
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_parse_entry}
% 解析封面信息条目。
%
% 参数如下：
% \begin{itemize}
%   \item \#1: |tl| 为封面信息条目的名称。
%   \item \#2: |tl| 为封面信息条目的内容。
% \end{itemize}
% |\\| 会被视为换行符，从而实现信息条目换行的效果。
%
%    \begin{macrocode}
\cs_new:Npn \@@_parse_entry #1 #2 {
  \seq_set_split:Nnx \l_@@_tmp_right_seq {\\} {#2}
  \seq_clear:N \l_@@_tmp_left_seq
  \seq_map_inline:Nn \l_@@_tmp_right_seq {
    \seq_put_right:Nn \l_@@_tmp_left_seq {}
  }
  \seq_put_left:Nn \l_@@_tmp_left_seq {#1}
  \seq_pop_right:NN \l_@@_tmp_left_seq \g_@@_trashcan_tl
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_render_cover_entry}
% 渲染封面信息项。此函数为主函数。
%    \begin{macrocode}
\cs_new:Npn \@@_render_cover_entry:n #1 {
  % 左边是标签，右边是值。
  % 形如：
  % { {label_1} {value_1}, {label_2} {value 2} }
  % 首先转换成 seq 类型。
  \seq_set_from_clist:NN \l_@@_input_seq #1
  \seq_map_inline:Nn \l_@@_input_seq {
    % 然后对于每一对 label 和 value，首先查找
    % value 中是否含有 \\ 字符，如果有，则将其分割成多个
    % label - value 对。
    % 比如 {label_1} {value \\ 1} 会被转换成
    % { {label_1} {value}, {} {1} }
    \@@_parse_entry ##1
    % 然后将这些 label - value 对添加到 \l_@@_right_seq 
    % 或者 \l_@@_left_sql 中。
    % left 就是 label，right 就是 value。
    \seq_concat:NNN \l_@@_right_seq \l_@@_right_seq \l_@@_tmp_right_seq
    \seq_concat:NNN \l_@@_left_seq \l_@@_left_seq \l_@@_tmp_left_seq
  }

  % 如果用户选择自动计算最大宽度，则计算最大宽度。
  \bool_if:NT \l_@@_cover_auto_width_bool {
    \@@_get_max_text_width:NN \l_@@_cover_label_max_width_dim \l_@@_left_seq
    \@@_get_max_text_width:NN \l_@@_cover_value_max_width_dim \l_@@_right_seq
  }
  

  % 最后，根据宽度渲染 label 和 value 对。
  \group_begin:
    \bool_until_do:nn { \seq_if_empty_p:N \l_@@_left_seq }
      {
        \seq_pop_left:NN \l_@@_left_seq \l_@@_tmpa_tl
        \seq_pop_left:NN \l_@@_right_seq \l_@@_tmpb_tl
        \tl_if_empty:xTF \l_@@_tmpb_tl {} {
          \@@_render_cover_entry:nn {\l_@@_tmpa_tl} {\l_@@_tmpb_tl}
        }
      }
  \group_end:
}
%    \end{macrocode}
% \end{macro}
% 
% \begin{macro}{\make_graduate_cover:}
% 制作研究生论文模板封面。
%    \begin{macrocode}
\cs_new:Npn \make_graduate_cover: {
  \cleardoublepage
  \begin{titlepage}
    {
      \heiti\zihao{5}
      \tl_if_blank:VTF \l_@@_value_classified_level_tl {} {
        \flushright
        \c_@@_label_classified_level_tl：~
        \l_@@_value_classified_level_tl \par
      }
    }
    \centering
    \vspace*{65mm}
    {\heiti\zihao{-2} \l_@@_value_title_tl}
    \vskip 60mm
    % 黑体 小三
    {\heiti \zihao{-3} \l_@@_value_author_tl}
    \vskip 10mm
    % 黑体 小三
    {\heiti \zihao{-3} \l_@@_cover_date_tl}
  \end{titlepage}
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\make_paper_back:}
% 制作书脊。
%    \begin{macrocode}
\cs_new:Npn \make_paper_back: {
  \cleardoublepage
  \begin{titlepage}
   \vskip 5cm
   \begin{center}
    \setstretch{1.1}
    \begin{minipage}[t][19.7cm]{2em}
      \begin{center}
        {
          \heiti\zihao{3}
          \tl_if_blank:VTF \l_@@_value_vertical_title_tl 
            {\l_@@_value_title_tl}{\l_@@_value_vertical_title_tl}
        }
          \vfill
        {\heiti\zihao{3}\l_@@_value_author_tl}
          \vfill
        {\heiti\zihao{3}\c_@@_label_university_tl}
      \end{center}
    \end{minipage}
   \end{center}
   % \vskip 5cm
  \end{titlepage}
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_make_chinese_title_page:}
% 制作中文封面页。
%    \begin{macrocode}
\cs_new:Npn \@@_make_chinese_title_page: {
  \cleardoublepage
  \begin{titlepage}
      {
        % 密级、分类号
        {\heiti \zihao{5} \noindent \c_@@_label_classification_tl}
        \l_@@_value_classification_tl\\
        {\heiti \zihao{5} \c_@@_label_udc_tl}  \l_@@_value_udc_tl
      }

     \begin{center}

      \vskip \stretch{1}

         {\heiti\zihao{-2} \l_@@_value_title_tl}

      \vskip \stretch{1}

      \def\tabcolsep{1pt}
      \def\arraystretch{1.5}

      {
        \renewcommand{\baselinestretch}{2}

        \tl_if_empty:NT \l_@@_cover_dilimiter_tl {
          \tl_set:Nn \l_@@_cover_dilimiter_tl {\qquad}
        }
        \tl_set:Nn \l_@@_cover_underline_offset_dim {-5pt}

        % 如果不是自动计算宽度，且用户没有自定义宽度，
        % 则尝试提供一个默认宽度。
        \bool_if:NF \l_@@_cover_auto_width_bool {
          \dim_compare:nNnT {\l_@@_cover_label_max_width_dim} = {0pt} {
            \dim_set:Nn \l_@@_cover_label_max_width_dim {45mm}
          } 
          \dim_compare:nNnT {\l_@@_cover_value_max_width_dim} = {0pt} {
            \dim_set:Nn \l_@@_cover_value_max_width_dim {60mm}
          } 
        }

        % 渲染信息。
        \clist_set:Nn \l_@@_input_clist {
            {\c_@@_graduate_label_author_tl} {\l_@@_value_author_tl},
            {\c_@@_graduate_label_school_tl} {\l_@@_value_school_tl},
            {\c_@@_graduate_label_supervisor_tl} {\l_@@_value_supervisor_tl},
            {\c_@@_graduate_label_chairman_tl} {\l_@@_value_chairman_tl},
            {\c_@@_graduate_label_degree_tl} {\l_@@_value_degree_tl},
            {\c_@@_graduate_label_major_tl} {\l_@@_value_major_tl},
            {\c_@@_graduate_label_institute_tl} {\l_@@_value_institute_tl},
            {\c_@@_graduate_label_defense_date_tl} {\l_@@_value_defense_date_tl},
         }

        \heiti\zihao{-3}
        \@@_render_cover_entry:n \l_@@_input_clist
      }
    \end{center}
    \vskip \stretch{0.5}
  \end{titlepage}
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_make_english_title_page:}
% 制作英文封面页。
%    \begin{macrocode}
\cs_new:Npn \@@_make_english_title_page: {
  \begin{titlepage}
    \begin{center}

    \vspace*{10em}

    {
      \zihao{-2}
      \textbf{\l_@@_value_title_en_tl}
    }

    \vskip \stretch{1}

    {
      \tl_if_empty:NT \l_@@_cover_dilimiter_tl {
        \tl_set:Nn \l_@@_cover_dilimiter_tl {:~}
      }

      \tl_set:Nn \l_@@_cover_label_align_tl {l}
      \tl_set:Nn \l_@@_cover_underline_offset_dim {-5pt}

      % 如果不是自动计算宽度，且用户没有自定义宽度，
      % 则尝试提供一个默认宽度。
      \bool_if:NF \l_@@_cover_auto_width_bool {
        \dim_compare:nNnT {\l_@@_cover_label_max_width_dim} = {0pt} {
          \dim_set:Nn \l_@@_cover_label_max_width_dim {55mm}
        } 
        \dim_compare:nNnT {\l_@@_cover_value_max_width_dim} = {0pt} {
          \dim_set:Nn \l_@@_cover_value_max_width_dim {85mm}
        } 
      }

      % 渲染信息。
      \clist_set:Nn \l_@@_input_clist {
          {\c_@@_graduate_label_author_en_tl} {\l_@@_value_author_en_tl},
          {\c_@@_graduate_label_school_en_tl} {\l_@@_value_school_en_tl},
          {\c_@@_graduate_label_supervisor_en_tl} {\l_@@_value_supervisor_en_tl},
          {\c_@@_graduate_label_chairman_en_tl} {\l_@@_value_chairman_en_tl},
          {\c_@@_graduate_label_degree_en_tl} {\l_@@_value_degree_en_tl},
          {\c_@@_graduate_label_major_en_tl} {\l_@@_value_major_en_tl},
          {\c_@@_graduate_label_institute_en_tl} {\l_@@_value_institute_en_tl},
          {\c_@@_graduate_label_defense_date_en_tl} {\l_@@_value_defense_date_en_tl},
       }

      \zihao{-3}
      \@@_render_cover_entry:n \l_@@_input_clist
    }

    \end{center}

    \vskip \stretch{0.5}
  \end{titlepage}
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\circled}
% 圆形数字编号定义。
%    \begin{macrocode}
\newcommand{\circled}[2][]{\tikz[baseline=(char.base)]
  {\node[shape = circle, draw, inner~sep = 1pt]
  (char) {\phantom{\ifblank{#1}{#2}{#1}}};
  \node at (char.center) {\makebox[0pt][c]{#2}};}}
\robustify{\circled}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_graduate_originality:}
% 研究生原创性声明。
%    \begin{macrocode}
\cs_new:Npn \@@_graduate_originality:
  {
    % 取消页眉页脚。
    \ctexset {
      chapter / pagestyle = plain,
    }

    \begin{titlepage}
      % 不计算页码。
      \pagenumbering{gobble}

      % 原创性声明部分
      \begin{center}
        \@@_same_page:
        \chapter*{
          \heiti\zihao{3}
          \c_@@_graduate_label_originality_tl
        }
      \end{center}~\par

      % 本部分字号为四号。
      \zihao{4}
      \c_@@_graduate_label_originality_clause_tl

      \vspace{17mm}

      \begin{flushright}
        \c_@@_graduate_label_originality_author_signature_tl\par
      \end{flushright}

      \vspace{16mm}

      % 使用授权声明部分。
      \begin{center}
        \@@_same_page:
        \chapter*{
          \heiti\zihao{3}
          \c_@@_graduate_label_authorization_tl
        }
      \end{center}~\par

      \c_@@_graduate_label_authorization_clause_tl

      \vspace*{15mm}

      \begin{flushright}
        \begin{spacing}{1.65}
          \zihao{4}
          % \hspace{5mm}\raisebox{-2ex}{\includegraphics[width=30mm]{example-image}}\hspace{5mm}
          \c_@@_graduate_label_originality_author_signature_tl\par
          \c_@@_graduate_label_originality_supervisor_signature_tl\par
        \end{spacing}
      \end{flushright}
    \end{titlepage}
    \cleardoublepage
  }
%    \end{macrocode}
% \end{macro}
%
% \subsubsection{定义用户接口}
%
% \begin{macro}{\BITSetup}
% 提供用户配置的接口。
%    \begin{macrocode}
\DeclareDocumentCommand \BITSetup { m }
  { \keys_set:nn { bithesis } { #1 }}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\BigStar}
% 提供密级选项中需要的五角星，在普通环境中使用。
%    \begin{macrocode}
\DeclareDocumentCommand \BigStar { }
  { \ding{72} }
%    \end{macrocode}
% \end{macro}
%
% \begin{environment}{blindPeerReview}
% 用于包裹涉及个人信息的内容。
%
% 在启用盲审模式时，其中的内容会被隐藏。
%
% 本环境提供了一个可选参数，可以传入一个 bool 值，用于在盲审模式下关闭
% 隐藏行为。
%    \begin{macrocode}
  \NewDocumentEnvironment {blindPeerReview} {O{\c_true_bool} +b}
  {
    \bool_if:nTF {\g_@@_blind_mode_bool && #1} {} {
      #2
    }
  } {}
%    \end{macrocode}
% \end{environment}
%
% \begin{macro}{\cleardoublepage}
% 重定义 \tn{cleardoublepage}，
% 使得偶数页面在没有内容时也不显示页眉页脚。见：
% \url{https://tex.stackexchange.com/a/1683}。
%    \begin{macrocode}
\RenewDocumentCommand \cleardoublepage { }
  {
    \clearpage
    \bool_if:NT \g_@@_twoside_bool
      {
        \int_if_odd:nF \c@page
          { \hbox:n { } \thispagestyle { empty } \newpage }
      }
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\MakeCover}
% 制作封面。
%    \begin{macrocode}
\DeclareDocumentCommand \MakeCover {}
  {
    \begin{blindPeerReview}
    \group_begin:

    \int_case:nn {\g_@@_thesis_type_int}
    {
      {1}
      {
        \begin{titlepage}
          \vspace*{16mm}

          \centering

          \tl_if_blank:VTF \l_bit_coverheaderimage_tl {} {
            \includegraphics[width=9.87cm]{\l_bit_coverheaderimage_tl}\\
          }

          \vspace*{-3mm}

          \zihao{-0}\textbf{\ziju{0.12}\songti{\c_@@_bachelor_label_title_tl}}\par

          \vspace{16mm}

          \zihao{2}\textbf{\xihei:n \l_@@_value_title_tl}\par

          \vspace{3mm}

          \begin{spacing}{1.2}
            \zihao{3}\selectfont{\textbf{\l_@@_value_title_en_tl}}\par
          \end{spacing}

          \vspace{15mm}


          \begin{spacing}{1.8}
            \begin{center}
            \tl_if_empty:NT \l_@@_cover_dilimiter_tl {
              \tl_set:Nn \l_@@_cover_dilimiter_tl {：}
            }
            % if not auto width, try override width
            \bool_if:NF \l_@@_cover_auto_width_bool {
              \dim_compare:nNnT {\l_@@_cover_label_max_width_dim} = {0pt} {
                \dim_set:Nn \l_@@_cover_label_max_width_dim {35mm}
              } 
              \dim_compare:nNnT {\l_@@_cover_value_max_width_dim} = {0pt} {
                \dim_set:Nn \l_@@_cover_value_max_width_dim {78mm}
              } 
            }

            \clist_set:Nn \l_@@_input_clist {
              {\c_@@_label_school_tl} {\l_@@_value_school_tl},
              {\c_@@_label_major_tl} {\l_@@_value_major_tl},
              {\c_@@_label_author_tl} {\l_@@_value_author_tl},
              {\c_@@_label_student_id_tl} {\l_@@_value_student_id_tl},
              {\c_@@_label_supervisor_tl} {\l_@@_value_supervisor_tl},
              {\c_@@_label_co_supervisor_tl} {\l_@@_value_external_supervisor_tl},
            }

            \zihao{3}

            \@@_render_cover_entry:n \l_@@_input_clist
            
            \end{center}
          \end{spacing}

          \vspace*{\fill}
          \centering
          \zihao{3}\ziju{0.5}\songti{
            \tl_if_empty:NTF \l_@@_cover_date_tl {
              \today
            } {
              \l_@@_cover_date_tl
            }
          }
        \end{titlepage}
      }
      {2}
      {
        \begin{titlepage}
          \centering

          \tl_if_blank:VTF \l_bit_coverheaderimage_tl {} {
            \includegraphics[width=6.87cm]{\l_bit_coverheaderimage_tl}\\
          }

          \vspace{1mm}

          \zihao{2}\textbf{\songti{本科生毕业设计（论文）外文翻译}}

          \vspace{8mm}

          {

          \begin{spacing}{1.8}
            
            \tl_set:Nn \l_@@_cover_dilimiter_tl {\textbf{：}}
            \bool_set_false:N \l_@@_cover_auto_width_bool
            \dim_set:Nn \l_@@_cover_label_max_width_dim {35mm}
            \dim_set:Nn \l_@@_cover_value_max_width_dim {115mm}

            \clist_set:Nn \l_@@_input_clist {
              {\zihao{4}\textbf{外文原文题目}} {\l_@@_value_trans_origin_title_tl},
              {\zihao{4}\textbf{中文翻译题目}} {\l_@@_value_trans_title_tl},
            }

            \zihao{-3}
            \centering

            \@@_render_cover_entry:n \l_@@_input_clist

          \end{spacing}

          }

          \vspace{14mm}

          \zihao{2}\textbf{\xihei:n \l_@@_value_title_tl}\par

          \vspace{3mm}

          \begin{spacing}{1.2}
            \zihao{3}\selectfont{\textbf{\l_@@_value_title_en_tl}}\par
          \end{spacing}

          \vspace{19mm}

          \begin{spacing}{1.8}
            \tl_if_empty:NT \l_@@_cover_dilimiter_tl {
              \tl_set:Nn \l_@@_cover_dilimiter_tl {：}
            }

            % 如果不是自动计算宽度，且用户没有自定义宽度，
            % 则尝试提供一个默认宽度。
            \bool_if:NF \l_@@_cover_auto_width_bool {
              \dim_compare:nNnT {\l_@@_cover_label_max_width_dim} = {0pt} {
                \dim_set:Nn \l_@@_cover_label_max_width_dim {35mm}
              } 
              \dim_compare:nNnT {\l_@@_cover_value_max_width_dim} = {0pt} {
                \dim_set:Nn \l_@@_cover_value_max_width_dim {78mm}
              } 
            }

            \zihao{3}

        % 渲染信息。
            \clist_set:Nn \l_@@_input_clist {
              {\c_@@_label_school_tl} {\l_@@_value_school_tl},
              {\c_@@_label_major_tl} {\l_@@_value_major_tl},
              {\c_@@_label_author_tl} {\l_@@_value_author_tl},
              {\c_@@_label_student_id_tl} {\l_@@_value_student_id_tl},
              {\c_@@_label_supervisor_tl} {\l_@@_value_supervisor_tl},
              {\c_@@_label_co_supervisor_tl} {\l_@@_value_external_supervisor_tl},
            }

            \@@_render_cover_entry:n \l_@@_input_clist
            
          \end{spacing}

          \vspace*{\fill}
        \end{titlepage}
      }
      {3} {
        \begin{titlepage}
          \vspace*{16mm}

          \centering

          \tl_if_blank:VTF \l_bit_coverheaderimage_tl {} {
            \includegraphics[width=9.87cm]{\l_bit_coverheaderimage_tl}\\
          }

          \vspace*{-3mm}

          \zihao{1}\textbf{\ziju{0.12}Beijing\nobreak{~}Institute
          \nobreak{~}of\nobreak{~}Technology~Bachelor's~Thesis}\par

          \vspace{18mm}

          \zihao{2}\textbf{\xihei:n \l_@@_value_title_en_tl}\par

          \vspace{10mm}


          \begin{spacing}{1.8}
            \begin{center}
            \tl_if_empty:NT \l_@@_cover_dilimiter_tl {
              \tl_set:Nn \l_@@_cover_dilimiter_tl {:}
            }

            % if not auto width, try override width
            \bool_if:NF \l_@@_cover_auto_width_bool {
              \dim_compare:nNnT {\l_@@_cover_label_max_width_dim} = {0pt} {
                \dim_set:Nn \l_@@_cover_label_max_width_dim {20mm}
              } 
              \dim_compare:nNnT {\l_@@_cover_value_max_width_dim} = {0pt} {
                \dim_set:Nn \l_@@_cover_value_max_width_dim {105mm}
              } 
            }

            \zihao{4}

            \clist_set:Nn \l_@@_input_clist {
              {\c_@@_label_school_en_tl} {\l_@@_value_school_tl},
              {\c_@@_label_major_en_tl} {\l_@@_value_major_tl},
              {\c_@@_label_author_en_tl} {\l_@@_value_author_tl},
              {\c_@@_label_student_id_en_tl} {\l_@@_value_student_id_tl},
              {\c_@@_label_supervisor_en_tl} {\l_@@_value_supervisor_tl},
              {\c_@@_label_co_supervisor_en_tl} {\l_@@_value_external_supervisor_tl},
            }

            \@@_render_cover_entry:n \l_@@_input_clist

            \end{center}
          \end{spacing}

          \vspace*{\fill}
          \centering
          \zihao{3}\ziju{0.5}\songti{
            \tl_if_empty:NTF \l_@@_cover_date_tl {
              \today
            } {
              \l_@@_cover_date_tl
            }
          }
        \end{titlepage}
      }
      {4} {
        \make_graduate_cover:
      }
      {5} {
        \make_graduate_cover:
      }
    }
    \group_end:
    \end{blindPeerReview}
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\MakeOriginality}
% 原创性声明。
%    \begin{macrocode}
\NewDocumentCommand \MakeOriginality {} 
  {
    \group_begin:
      \begin{blindPeerReview}
      \int_case:nn {\g_@@_thesis_type_int}
      {
        {1} 
        {
          \pagestyle{BIThesis}
          \pagenumbering{gobble}

          % 原创性声明部分
          \begin{center}
            \vspace*{-2bp}
            \@@_same_page:
            \chapter*{\heiti\zihao{2}\c_@@_bachelor_label_originality_tl}
          \end{center}~\par

          % 本部分字号为小三。
          \zihao{-3}
          \c_@@_bachelor_label_originality_clause_tl

          \vspace{17mm}

          \begin{flushright}
            \c_@@_bachelor_label_originality_author_signature_tl\par
          \end{flushright}

          \vspace{16mm}

          % 使用授权声明部分
          \begin{center}
            \@@_same_page:
            \chapter*{
              \heiti\zihao{2}
              \c_@@_bachelor_label_authorization_tl
            }
          \end{center}~\par

          \c_@@_bachelor_label_authorization_clause_tl

          \vspace*{3mm}

          \begin{flushright}
            \begin{spacing}{1.65}
              \zihao{-3}
              % \hspace{5mm}\raisebox{-2ex}{\includegraphics[width=30mm]{example-image}}\hspace{5mm}
              \c_@@_bachelor_label_originality_author_signature_tl\par
              \c_@@_bachelor_label_originality_supervisor_signature_tl\par
            \end{spacing}
          \end{flushright}

          \newpage
        }
        {3} {
          \setstretch{1.26}
          % 原创性声明部分
          \begin{center}
            \vspace*{-2bp}
            \@@_same_page:
            \chapter*{
              \heiti\zihao{-2}
              \c_@@_bachelor_english_label_originality_tl
            }
          \end{center}~\par

          % 本部分字号为小三
          \zihao{-4}
          \c_@@_bachelor_english_label_originality_clause_tl

          \bigbreak

          Student~(Signature):~\dunderline[-1pt]{1pt}{\makebox[18mm]{}}~Date:\par

          \vspace{6mm}

          % 使用授权声明部分
          \begin{center}
            \@@_same_page:
            \chapter*{
              \heiti\zihao{-2}
              \c_@@_bachelor_english_label_authorization_tl
            }
          \end{center}~\par

          \c_@@_bachelor_english_label_authorization_clause_tl

          \bigbreak
          Student~(Signature):~
            \dunderline[-1pt]{1pt}{\makebox[18mm + 16bp]{}}~
            \hspace{2mm}Date:\par
          Supervisor~(Signature):~
            \dunderline[-1pt]{1pt}{\makebox[18mm]{}}~
            \hspace{2mm}Date:\par
        }
        {4} {\@@_graduate_originality:}
        {5} {\@@_graduate_originality:}
      }
    \end{blindPeerReview}
    \group_end:
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\MakePaperBack}
% 生成书脊。
%    \begin{macrocode}
\NewDocumentCommand \MakePaperBack {}
  {
    \begin{blindPeerReview}
      \make_paper_back:
    \end{blindPeerReview}
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\MakeTitle}
% 生成标题页。（研究生）
%    \begin{macrocode}
\NewDocumentCommand \MakeTitle {}
  {
    \begin{blindPeerReview}
      \@@_make_chinese_title_page:
      \@@_make_english_title_page:
    \end{blindPeerReview}
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\MakeTOC}
% 生成目录。
%    \begin{macrocode}
\DeclareDocumentCommand \MakeTOC {}
  {
    {
      \@@_if_bachelor_thesis:TF {
        \renewcommand{\baselinestretch}{1.35}
      } {
        \renewcommand{\baselinestretch}{1.56}
      }

      \@@_if_thesis_english:TF {
        \tl_set:Nn \l_@@_toc_title_tl {\c_@@_label_toc_en_tl}
      } {
        \tl_set:Nn \l_@@_toc_title_tl {\c_@@_label_toc_tl}
      }

      % 自定义目录样式
      \cs_set:Npn \contentsname {
        \fontsize{16pt}{\baselineskip}
        \l_@@_unnumchapter_style_cs:n
          \l_@@_title_font_cs:n
            {\l_@@_toc_title_tl}
        \vspace{-8pt}
      }

      % 制作目录
      \tableofcontents

      % 在本科生全英文模板中，添加「目录」本身到目录中。
      \@@_if_thesis_int_type:nT {3} {
        \addcontentsline{toc}{chapter}{\c_@@_label_toc_en_tl}
      }
    }
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{environment}{abstract}
% 生成摘要。
%    \begin{macrocode}
\NewDocumentEnvironment {abstract} {}
  {

    \cleardoublepage
    \setstretch{1.53}

    \@@_if_bachelor_thesis:T {
      \begin{center}
        \vspace*{-17bp}
        \heiti\zihao{-2}\textbf{
          \int_case:nn {\g_@@_thesis_type_int}
          {
            {1} {\l_@@_value_title_tl}
            {2} {\l_@@_value_trans_title_tl}
            {3} {\l_@@_value_title_tl}
          }
        }
      \end{center}

      \vspace*{2mm}
    }

    \ctexset{
      chapter/numbering = false,
    }

    \@@_if_bachelor_thesis:T {
      \ctexset{
        chapter/titleformat = {\textmd}
      }
    }

    {
      \@@_same_page:
      \bool_if:NTF \l_@@_add_abstract_to_toc_bool {
        \chapter{\c_@@_label_abstract_tl}
      } {
        \chapter*{\c_@@_label_abstract_tl}
        \currentpdfbookmark{\c_@@_label_abstract_tl}{ch:abstract}
      }
    }
    \vspace*{1mm}
    \par
  }
  {
    \par
    \vspace{4ex}
    \noindent
    \textbf{\heiti \c_@@_label_keywords_tl \l_@@_value_keywords_tl}\par
    \newpage
  }
%    \end{macrocode}
% \end{environment}
%
% \begin{environment}{abstractEn}
% 生成英文摘要。
%    \begin{macrocode}
\NewDocumentEnvironment {abstractEn} {}
  {
    \cleardoublepage
    \setstretch{1.53}

    \@@_if_bachelor_thesis:T {
      \begin{spacing}{0.95}
        \centering
        \vspace*{-2bp}

        \@@_if_thesis_int_type:nTF {3} {
          \arialfamily\zihao{-2}\textbf
          \l_@@_value_title_en_tl\\
        } {
          \heiti\zihao{3}\textbf
          \l_@@_value_title_en_tl\\
        }
      \end{spacing}
      \vspace*{10mm}
    }
    
    \ctexset{
      chapter/numbering = false,
    }

    \@@_if_bachelor_thesis:TF {
      \int_compare:nNnTF {\g_@@_thesis_type_int} = {3}
      {
        \ctexset{
          chapter = {
            titleformat = {\heiti\zihao{3}\centering\textbf},
          }
        }
      } {
        \ctexset{
          chapter = {
            titleformat = {\heiti\zihao{-3}\centering\textmd},
          }
        }
      }
    } {
      \ctexset {
        chapter/titleformat = {\heiti\zihao{3}\centering\textbf} 
      }
    }

    {
      \@@_same_page:
      \bool_if:nTF {\l_@@_add_abstract_en_to_toc_bool} {
        \chapter{\c_@@_label_abstract_en_tl}
      } {
        \chapter*{\c_@@_label_abstract_en_tl}
        \currentpdfbookmark{\c_@@_label_abstract_en_tl}{ch:abstract:en}
      }
    }
  }
  {
    \par\vspace{3ex}\noindent
    \textbf{\c_@@_label_keywords_en_tl \l_@@_value_keywords_en_tl}
    \newpage
  }

%    \end{macrocode}
% \end{environment}
%
% \begin{environment}{conclusion}
% 生成结论。需要放在 \cs{macrocode} 之后。
%    \begin{macrocode}
\NewDocumentEnvironment {conclusion} {}
  {
    \ctexset{
      section/number = \arabic{section}
    }

    \@@_if_thesis_english:TF {
      \chapter{\c_@@_label_conclusion_en_tl}
    } {
      \chapter{\c_@@_label_conclusion_tl}
    }
  }
  {}
%    \end{macrocode}
% \end{environment}
%
% \begin{environment}{bibprint}
% 生成参考文献。需要放在 \cs{backmatter} 之后。
%    \begin{macrocode}
\NewDocumentEnvironment {bibprint} {}
  {
    % 设置参考文献字号为 5 号
    \renewcommand*{\bibfont}{\zihao{5}}
    % 设置参考文献各个项目之间的垂直距离为 0
    \setlength{\bibitemsep}{0ex}
    \setlength{\bibnamesep}{0ex}
    \setlength{\bibinitsep}{0ex}
    \@@_if_graduate:TF {
    } {
      % 「本科生」设置单倍行距
      \renewcommand{\baselinestretch}{1.2}
    }
    % 设置参考文献顺序标签 `[1]` 与文献内容 `作者. 文献标题...` 的间距
    \setlength{\biblabelsep}{1.7mm}

    \bool_if:NF \l_@@_style_bibliography_indent_bool {
      % 设置参考文献后文缩进为 0（与 Word 模板保持一致）
      % See: https://github.com/hushidong/biblatex-gb7714-2015
      %      如何修参考文献表的缩进？
      \cs_set:Npn \itemcmd {
        \settowidth{\lengthid}{\mkgbnumlabel{\printfield{labelnumber}}}
        %%这里是所做的调整，以下两句通过调整\lengthid来调整缩进
        \setlength{\lengthid}{0pt}
        \addtolength{\lengthid}{-\biblabelsep}
        \setlength{\lengthlw}{\textwidth}
        \addtolength{\lengthlw}{-\lengthid}
        \addvspace{\bibitemsep}%恢复\bibitemsep的作用
        \hangindent\lengthid
        \leavevmode\mkgbnumlabel{\printfield{labelnumber}}%
        \hspace{\biblabelsep}
      }
    }

    \@@_if_thesis_english:TF {
      \chapter{\c_@@_label_reference_en_tl}
    } {
      \chapter{\c_@@_label_reference_tl}
    }
  }
  {}
%    \end{macrocode}
% \end{environment}
%
% \begin{environment}{appendices}
% 生成附录。
%    \begin{macrocode}
\NewDocumentEnvironment {appendices} {}
  {
    % Used in chapter, ToC.
    \tl_new:N \l_@@_appendix_plain_label_tl
    % Used before reference label.
    \tl_new:N \l_@@_appendix_default_title_tl

    \@@_if_thesis_english:TF {
      \tl_set:Nn \l_@@_appendix_plain_label_tl {\c_@@_label_appendix_prefix_en_tl}
      \tl_set:Nn \l_@@_appendix_default_title_tl {\c_@@_label_appendix_en_tl}
    } {
      \tl_set:Nn \l_@@_appendix_plain_label_tl {\c_@@_label_appendix_prefix_tl}
      \tl_set:Nn \l_@@_appendix_default_title_tl {\c_@@_label_appendix_tl}
    }

    \bool_if:NTF \l_@@_appendices_chapter_level_bool {
      % 附录章节级别
      
      % 仅设置 \setcounter{chapter}{0} 时，pdf 目录会索引到正文章节。
      % 因此，需要使用 \appendix 重置计数器，并将附录后面的
      % 几个章节视为特殊的附录页。
      \appendix
      
      \ctexset{
        chapter/numbering = true,
        chapter/name = {},
        chapter/number = \l_@@_appendix_plain_label_tl\hspace{1ex}\Alph{chapter},
        section/number = \Alph{chapter}. \arabic{section},
        subsection/number = \Alph{chapter}. \arabic{section}. \arabic{subsection},
      }

      \cs_set:Npn \thechapter {
        \Alph{chapter}
      }
    } {
      % 附录节（section）级别
      \ctexset{
        section/number = \l_@@_appendix_plain_label_tl\hspace{1ex}\Alph{section},
        subsection/number = \Alph{section}. \arabic{subsection},
      }

      \cs_set:Npn \thechapter {
        \Alph{section}
      }

      \tl_if_blank:VTF \l_@@_appendices_title_tl {
        \chapter{\l_@@_appendix_default_title_tl}
      } {
        \chapter*{\l_@@_appendices_title_tl}
        \stepcounter{chapter}
        \tl_if_blank:VTF \l_@@_appendix_toc_title_tl {
          \addcontentsline{toc}{chapter}{\l_@@_appendix_default_title_tl}
        } {
          \addcontentsline{toc}{chapter}{\l_@@_appendix_toc_title_tl}
        }
      }
    }
  }
  {
  }
%    \end{macrocode}
% \end{environment}
%
% \begin{environment}{acknowledgements}
% 生成致谢。
%    \begin{macrocode}
\NewDocumentEnvironment {acknowledgements} {+b}
  {
    \begin{blindPeerReview}
      % 将此章节视为特殊的附录页，关闭附录编号，重定义 section 编号。
      % 不知为何，需要手动重置 section 计数器。
      \setcounter{section}{0}
      \ctexset{
        appendix/numbering = false,
        section/number = \arabic{section},
        subsection/number = \arabic{section}. \arabic{subsection},
        subsubsection/number = \arabic{section}. \arabic{subsection}. \arabic{subsubsection},
      }

      \@@_if_thesis_english:TF {
        \chapter{\c_@@_label_ack_en_tl}
      } {
        \chapter{\c_@@_label_ack_tl}
      }
      \@@_if_graduate:TF {\fangsong}{}
      #1
    \end{blindPeerReview}
  } {}
%    \end{macrocode}
% \end{environment}
%
% \begin{macro}{\Author,\AuthorEn}
% 在普通模式下，输出作者姓名。
% 在盲审模式下，输出「第 n 作者」。
%    \begin{macrocode}
\NewDocumentCommand \Author {O{1} o o}
  {
    \bool_if:NTF \g_@@_blind_mode_bool {
      % 盲审模式
      \IfValueTF {#3} {
        #3
      } {
        第\zhnumber{#1}作者
      }
    } {
      % 普通模式
      \IfValueTF {#2} {
        % 覆盖默认的 \author 命令
        #2
      } {
        % 默认采用作者姓名
        \l_@@_value_author_tl
      }
    }
  }

% 英文姓名
\NewDocumentCommand \AuthorEn {O{1} o o}
  {
    \bool_if:NTF \g_@@_blind_mode_bool {
      % 盲审模式
      \IfValueTF {#3} {
        #3
      } {
        \Ordinalstringnum{#1}~Author
      }
    } {
      % 普通模式
      \IfValueTF {#2} {
        % 覆盖默认的 \author 命令
        #2
      } {
        % 默认采用作者姓名
        \l_@@_value_author_en_tl
      }
    }
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\addpub,\addpubs}
% 添加一个或多个参考文献。
%   \begin{macrocode}
\NewDocumentCommand \addpub {m} {
  \nocite{#1}
  \addtocategory{mypub}{#1}
}

\NewDocumentCommand \addpubs {m} {
  % apply a clist
  \clist_map_function:nN {#1} \addpub
}
%   \end{macrocode}
% \end{macro}
%
% \begin{macro}{\pubsection}
% 设置小标题。
%    \begin{macrocode}
\NewDocumentCommand \pubsection {m} {
  {
    % 自增计数器
    \par\stepcounter{pub}
    % 设置小标题，暂时没有考虑英文模式
    \noindent
    \textbf{
      \heiti{
        \zhnumber{\thepub}、#1
      }
    }\par
  }
}
%    \end{macrocode}
% \end{macro}
%
% \begin{environment}{publications}
% 生成攻读学位期间发表论文与研究成果清单。
%    \begin{macrocode}
\NewDocumentEnvironment {publications} {+b}
  {
    % 同时设置 omit 以及 blindPeerReview 才能跳过此章节生成。
    \begin{blindPeerReview}[\l_@@_publications_omit_bool]
      % 将此章节视为特殊的附录页，关闭附录编号，重定义 section 编号。
      % 不知为何，需要手动重置 section 计数器。
      \setcounter{section}{0}
      \ctexset{
        appendix/numbering = false,
        section/number = \arabic{section},
        subsection/number = \arabic{section}. \arabic{subsection},
        subsubsection/number = \arabic{section}. \arabic{subsection}. \arabic{subsubsection},
      }
      % 设置参考文献字号为 5 号
      \renewcommand*{\bibfont}{\zihao{5}}
      % 设置参考文献各个项目之间的垂直距离为 0
      \setlength{\bibitemsep}{0ex}
      \setlength{\bibnamesep}{0ex}
      \setlength{\bibinitsep}{0ex}
      % 设置参考文献顺序标签 `[1]` 与文献内容 `作者. 文献标题...` 的间距
      \setlength{\biblabelsep}{1.7mm}

      \bool_if:NF \l_@@_style_bibliography_indent_bool {
        % 设置参考文献后文缩进为 0（与 Word 模板保持一致）
        % See: https://github.com/hushidong/biblatex-gb7714-2015
        %      如何修参考文献表的缩进？
        \cs_set:Npn \itemcmd {
          \settowidth{\lengthid}{\mkgbnumlabel{\printfield{labelnumber}}}
          %%这里是所做的调整，以下两句通过调整\lengthid来调整缩进
          \setlength{\lengthid}{0pt}
          \addtolength{\lengthid}{-\biblabelsep}
          \setlength{\lengthlw}{\textwidth}
          \addtolength{\lengthlw}{-\lengthid}
          \addvspace{\bibitemsep}%恢复\bibitemsep的作用
          \hangindent\lengthid
          \leavevmode\mkgbnumlabel{\printfield{labelnumber}}%
          \hspace{\biblabelsep}
        }
      }

      % If in blindPeerReview mode, omit delimiters in author field.
      \bool_if:NT \g_@@_blind_mode_bool {
        % 如果有多个作者，不修改此项的话，作者与标题之间会有逗号。
        \DeclareDelimFormat[bib,biblist]{finalnamedelim}{}
        % 如果自己不是第一个作者，不修改此项的话，会在最开始有逗号。
        \DeclareDelimFormat{multinamedelim}{}
      }

      % ===== 上方定义与「参考文献」部分相同

      % 中文姓名下，此部分不参与输出。
      \cs_set:Npn \mkbibnamegiven ##1 {
        \haspartannotation{myself}{
          \bool_if:NTF \g_@@_blind_mode_bool {
            % 盲审模式，不输出内容
          } {
            % 普通模式
            \textbf{##1}
          }
        }{
          \bool_if:NTF \g_@@_blind_mode_bool {
            % 盲审模式，不输出内容
          } {
            % 普通模式
            ##1
          }
        }
      }

      \cs_set:Npn \mkbibnamefamily ##1 {
        \haspartannotation{myself}{
          % 作者为自己
          \bool_if:NTF \g_@@_blind_mode_bool {
            % 盲审模式
            \getpartannotation{myself}
          } {
            % 普通模式
            \textbf{##1}
          }
        }{
          % 作者不是自己
          \bool_if:NTF \g_@@_blind_mode_bool {
            % 盲审模式，不输出
          } {
            % 普通模式
            ##1
          }
        }
      }

      \if_cs_exist:N \c@pub {
        % 重置计数器
        \setcounter{pub}{0}
      } \else: {
        % 设置计数器
        \newcounter{pub}
      } \fi:

      % 设置参考文献的排序
      \bool_if:NTF \l_@@_publications_sorting_bool {
        % Sorting by year, name, type.
        \newrefcontext[sorting=ynt]
      } {
        % Do not sort.
        \newrefcontext
      }

      \chapter{\c_@@_label_publications_tl}
      #1
    \end{blindPeerReview}
  }
  {}
%    \end{macrocode}
% \end{environment}
%
% \begin{environment}{resume}
% 生成个人简历。
%    \begin{macrocode}
\NewDocumentEnvironment {resume} {+b}
  {
    \begin{blindPeerReview}
      % 将此章节视为特殊的附录页，关闭附录编号，重定义 section 编号。
      % 不知为何，需要手动重置 section 计数器。
      \setcounter{section}{0}
      \ctexset{
        appendix/numbering = false,
        section/number = \arabic{section},
        subsection/number = \arabic{section}. \arabic{subsection},
        subsubsection/number = \arabic{section}. \arabic{subsection}. \arabic{subsubsection},
      }
      \chapter{\c_@@_label_resume_tl}
      #1
    \end{blindPeerReview}
  }
  {
  }
%    \end{macrocode}
% \end{environment}

% \begin{environment}{symbols}
% 生成主要术语对照表。
%    \begin{macrocode}
\NewDocumentEnvironment {symbols} {}
  {
    \bool_if:NTF \l_@@_add_symbols_to_toc_bool {
      \chapter{\c_@@_label_symbols_tl}
    } {
      \chapter*{\c_@@_label_symbols_tl}
      \currentpdfbookmark{\c_@@_label_symbols_tl}{ch:symbols}
    }
    \zihao{-4}
    \begin{itemize}[
      labelwidth=2.5cm,
      labelsep=0.5cm,
      leftmargin=3cm,
      itemindent=0cm,
      itemsep=0cm
    ]
    \cs_set:Npn \makelabel ##1 {##1\hfil}
  }
  {
    \end{itemize}
  }
%    \end{macrocode}
% \end{environment}
%
%    \begin{macrocode}
%</thesis>
%    \end{macrocode}
%
% \subsection{bitreport.cls 模板类}
%
%    \begin{macrocode}
%<*report>
%    \end{macrocode}
%
% \subsubsection{全局变量与临时变量}
%
% \begin{variable}{\g_@@_thesis_type_int}
% 论文类型，取值从 1 开始，分别对应: 
%  \begin{enumerate}
%      \item 课程实验报告
%      \item （计算机学院）本科生毕业（设计）开题报告
%  \end{enumerate}
%    \begin{macrocode}
\int_new:N \g_@@_report_type_int
%    \end{macrocode}
% \end{variable}
% 
% \begin{variable}{\c_@@_report_type_clist}
% 定义报告类型的列表。
%    \begin{macrocode}
\clist_const:Nn \c_@@_report_type_clist
    { common, undergraduate_proposal}
%    \end{macrocode}
% \end{variable}
% 
% \begin{variable}{\l_@@_right_seq,\l_@@_left_seq}
% 临时变量。
%    \begin{macrocode}
\seq_new:N \l_@@_right_seq
\seq_new:N \l_@@_left_seq
%    \end{macrocode}
% \end{variable}
% 
% 手动开启伪粗体、伪斜体。
%    \begin{macrocode}
\PassOptionsToPackage{AutoFakeBold,AutoFakeSlant}{xeCJK}
%    \end{macrocode}
% 
% \subsubsection{l3keys 接口键值对定义}
%
% 定义 |bitreport| 模板类的键值对。
%    \begin{macrocode}
\keys_define:nn { bitreport }
  {
    option .meta:nn = {bitreport / option } {#1},
    cover .meta:nn = { bitreport / cover  } {#1},
    info .meta:nn = { bitreport / info } {#1},
    misc .meta:nn = { bitreport / misc } {#1}
  }
%    \end{macrocode}
% 
% 定义 |bitreport/option| 模板类的键值对。
%    \begin{macrocode}
\keys_define:nn { bitreport / option }
  {
    type .choice:,
    type .value_required:n = true,
    type .choices:Vn =
      \c_@@_report_type_clist
      { 
        \int_set_eq:NN \g_@@_report_type_int \l_keys_choice_int 
      },
    type .initial:n = common,
    ctex .tl_set:N = \l_@@_options_to_ctex_tl,
  }
%    \end{macrocode}
% 
% 定义 |bitreport/cover| 模板类的键值对。
%    \begin{macrocode}
\keys_define:nn { bitreport / cover }
  {
    imagePath .tl_set:N = \l_bit_coverimagepath_tl,
    date .tl_set:N = \l_@@_cover_date_tl,
    %% cover entry
    dilimiter .tl_set:N = \l_@@_cover_dilimiter_tl,
    labelAlign .tl_set:N = \l_@@_cover_label_align_tl,
    labelAlign .initial:n = {r},
    valueAlign .tl_set:N = \l_@@_cover_value_align_tl,
    valueAlign .initial:n = {c},
    labelMaxWidth .dim_set:N = \l_@@_cover_label_max_width_dim,
    valueMaxWidth .dim_set:N = \l_@@_cover_value_max_width_dim,
    autoWidthPadding .dim_set:N = \l_@@_cover_auto_width_padding_dim,
    autoWidthPadding .initial:n = {0.25em},
    autoWidth .bool_set:N = \l_@@_cover_auto_width_bool,
    autoWidth .initial:n = {true},
    underlineThickness .dim_set:N = \l_@@_cover_underline_thickness_dim,
    underlineThickness .initial:n = {1pt},
    underlineOffset .dim_set:N = \l_@@_cover_underline_offset_dim,
    underlineOffset .initial:n = { -10pt },
  }
%    \end{macrocode}
% 
% 定义 |bitreport/info| 模板类的键值对。
%    \begin{macrocode}
\keys_define:nn { bitreport / info }
  {
    title .tl_set:N = \l_@@_value_title_tl,
    school .tl_set:N = \l_@@_value_school_tl,
    major .tl_set:N = \l_@@_value_major_tl,
    class .tl_set:N = \l_@@_value_class_tl,
    author .tl_set:N = \l_@@_value_author_tl,
    supervisor .tl_set:N = \l_@@_value_supervisor_tl,
    externalSupervisor .tl_set:N = \l_@@_value_external_supervisor_tl,
    studentId .tl_set:N = \l_@@_value_student_id_tl,
  }
%    \end{macrocode}
% 
% 定义 |bitreport/misc| 模板类的键值对。
%    \begin{macrocode}
\keys_define:nn { bitreport / misc }
  {
    reviewTable .tl_set:N = \l_bit_reviewtable_tl,
  }
%    \end{macrocode}
% 
% 将 |bithesis/option/ctex| 中的值传递给 ctexbook 模板类。
%    \begin{macrocode}
\DeclareOption*{
  \PassOptionsToClass{\l_@@_options_to_ctex_tl}{ctexart}
}
%    \end{macrocode}
% 
% 加载 ctexbook 模板类。
%    \begin{macrocode}
\ProcessOptions\relax
\LoadClass[zihao=-4]{ctexart}
%    \end{macrocode}
% 
% \subsubsection{定义模板类样式}
% 加载所需的宏包。
%    \begin{macrocode}
\RequirePackage[a4paper,left=3cm,right=2.4cm,top=2.6cm,bottom=2.38cm,includeheadfoot]{geometry}
\RequirePackage{fancyhdr}
\RequirePackage{setspace}
\RequirePackage{caption}
\RequirePackage{booktabs}
\RequirePackage{pdfpages}
%    \end{macrocode}
% 
% 在宏加载时，处理 |bitreport/option| 中的值。使得 |bitreport| 
% 宏包的模板选项可以在宏加载时生效。
%    \begin{macrocode}
\ProcessKeysOptions { bitreport / option }
%    \end{macrocode}
% 
% \subsubsection{辅助函数与常量}
%
% \begin{macro}{\tl_if_empty:xTF,\seq_set_split:Nnx}
% 生成变体。
%    \begin{macrocode}
\cs_generate_variant:Nn \tl_if_empty:nTF {x}
\cs_generate_variant:Nn \seq_set_split:Nnn {Nnx}
%    \end{macrocode}
% \end{macro}
% 
% \begin{macro}{\@@_dunderline:nnn}
% 用于渲染下划线。
% 
% 参数如下：
% \begin{itemize}
%   \item \#1 位置，可选值为 \texttt{c}enter、\texttt{l}eft、\texttt{r}ight。
%   \item \#2 |dim| 长度。
%   \item \#3 |tl| 文字内容。
% \end{itemize}
%    \begin{macrocode}
\cs_new:Npn \@@_dunderline:nnn #1#2#3 {
  {\setbox0=\hbox{#3}\ooalign{\copy0\cr\rule[\dimexpr#1-#2\relax]{\wd0}{#2}}}
}
%    \end{macrocode}
% \end{macro}
% 
% \begin{macro}{|@@_render_cover_entry:nn}
% 用于渲染封面的辅助函数。
%
% 参数如下：
% \begin{itemize}
%   \item \#1 |{token_list}| 为封面信息条目的名称。
%   \item \#2 |{token_list}| 为封面信息条目的内容。
% \end{itemize}
%
% 需要在 |\l_@@_cover_label_max_width_dim| 和 |\l_@@_cover_value_max_width_dim|
% 存储已经计算出来的最大宽度。
%    \begin{macrocode}
\cs_new:Npn \@@_render_cover_entry:nn #1#2 {
  \makebox[\l_@@_cover_label_max_width_dim][\l_@@_cover_label_align_tl]{
    \tl_if_blank:VTF #1 {} {#1\l_@@_cover_dilimiter_tl}
  }
  \hspace{1ex}
  \@@_dunderline:nnn{\l_@@_cover_underline_offset_dim}{\l_@@_cover_underline_thickness_dim}{
    \makebox[\l_@@_cover_value_max_width_dim][\l_@@_cover_value_align_tl]{#2}
  }\par
}
%    \end{macrocode}
% \end{macro}
% 
% \begin{macro}{|@@_get_text_width:Nn,\@@_get_text_width:NV}
% 计算 \#2 所占用的宽度，将结果存储在 \#1 中。
%
% 参数如下：
% \begin{itemize}
%   \item \#1 |dim| 存储宽度的变量。
%   \item \#2 |tl| 要计算宽度的文本。
% \end{itemize}
%    \begin{macrocode}
% Get text with from #2, then set to #1.
\cs_new:Npn \@@_get_text_width:Nn #1#2
  {
    \hbox_set:Nn \l_tmpa_box {#2}
    \dim_set:Nn #1 { \box_wd:N \l_tmpa_box }
  }
\cs_generate_variant:Nn \@@_get_text_width:Nn { NV }
%    \end{macrocode}
% \end{macro}
% 
% \begin{macro}{\@@_get_max_text_width:NN}
% 从 \#2 中获取最大的文本宽度，然后设置到 \#1 中。
%
% 参数如下：
% \begin{itemize}
%   \item \#1: |dim| 用于存储最大宽度。
%   \item \#2: |seq| 用于存储文本。
% \end{itemize}
%    \begin{macrocode}
\cs_new:Npn \@@_get_max_text_width:NN #1#2
  {
% 这里用 |group| 确保局部变量不会被污染。
    \group_begin:
      \seq_set_eq:NN \l_@@_tmpa_seq #2
      \dim_zero_new:N \l_@@_tmpa_dim
      \bool_until_do:nn { \seq_if_empty_p:N \l_@@_tmpa_seq }
        {
          \seq_pop_left:NN \l_@@_tmpa_seq \l_@@_tmpa_tl
          \@@_get_text_width:NV \l_@@_tmpa_dim \l_@@_tmpa_tl
          % 在两边加上空白，避免文本太靠边。
          \dim_gset:Nn #1 { \dim_max:nn {#1} { \l_@@_tmpa_dim + \l_@@_cover_auto_width_padding_dim * 2} }
        }
    \group_end:
  }
%    \end{macrocode}
% \end{macro}
% 
% \begin{macro}{\@@_parse_entry}
% 解析封面信息条目。
%
% 参数如下：
% \begin{itemize}
%   \item \#1: |tl| 为封面信息条目的名称。
%   \item \#2: |tl| 为封面信息条目的内容。
% \end{itemize}
% |\\| 会被视为换行符，从而实现信息条目换行的效果。
%
%    \begin{macrocode}
\cs_new:Npn \@@_parse_entry #1 #2 {
  \seq_set_split:Nnx \l_@@_tmp_right_seq {\\} {#2}
  \seq_clear:N \l_@@_tmp_left_seq
  \seq_map_inline:Nn \l_@@_tmp_right_seq {
    \seq_put_right:Nn \l_@@_tmp_left_seq {}
  }
  \seq_put_left:Nn \l_@@_tmp_left_seq {#1}
  \seq_pop_right:NN \l_@@_tmp_left_seq \g_@@_trashcan_tl
}
%    \end{macrocode}
% \end{macro}
% 
% \begin{macro}{\@@_render_cover_entry}
% 渲染封面信息项。此函数为主函数。
%    \begin{macrocode}
\cs_new:Npn \@@_render_cover_entry:n #1 {
  % 左边是标签，右边是值。
  % 形如：
  % { {label_1} {value_1}, {label_2} {value 2} }
  % 首先转换成 seq 类型。
  \seq_set_from_clist:NN \l_@@_input_seq #1
  \seq_map_inline:Nn \l_@@_input_seq {
    % 然后对于每一对 label 和 value，首先查找
    % value 中是否含有 \\ 字符，如果有，则将其分割成多个
    % label - value 对。
    % 比如 {label_1} {value \\ 1} 会被转换成
    % { {label_1} {value}, {} {1} }
    \@@_parse_entry ##1
    % 然后将这些 label - value 对添加到 \l_@@_right_seq 
    % 或者 \l_@@_left_sql 中。
    % left 就是 label，right 就是 value。
    \seq_concat:NNN \l_@@_right_seq \l_@@_right_seq \l_@@_tmp_right_seq
    \seq_concat:NNN \l_@@_left_seq \l_@@_left_seq \l_@@_tmp_left_seq
  }

  % 如果用户选择自动计算最大宽度，则计算最大宽度。
  \bool_if:NT \l_@@_cover_auto_width_bool {
    \@@_get_max_text_width:NN \l_@@_cover_label_max_width_dim \l_@@_left_seq
    \@@_get_max_text_width:NN \l_@@_cover_value_max_width_dim \l_@@_right_seq
  }
  

  % 最后，根据宽度渲染 label 和 value 对。
  \group_begin:
    \bool_until_do:nn { \seq_if_empty_p:N \l_@@_left_seq }
      {
        \seq_pop_left:NN \l_@@_left_seq \l_@@_tmpa_tl
        \seq_pop_left:NN \l_@@_right_seq \l_@@_tmpb_tl
        \tl_if_empty:xTF \l_@@_tmpb_tl {} {
          \@@_render_cover_entry:nn {\l_@@_tmpa_tl} {\l_@@_tmpb_tl}
        }
      }
  \group_end:
}
%    \end{macrocode}
% \end{macro}
%
% \subsubsection{定义用户接口}
% 
% \begin{macro}{\BITSetup}
% 提供用户配置的接口。
%    \begin{macrocode}
\DeclareDocumentCommand \BITSetup { m }
  { \keys_set:nn { bitreport } { #1 }}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\MakeCover}
% 渲染封面。
%    \begin{macrocode}
\DeclareDocumentCommand \MakeCover {}
  {
    \group_begin:
    \int_case:nn {\g_@@_report_type_int} {
      {1} {
        \begin{titlepage}
          \centering

          \vspace{23mm}

          \tl_if_empty:NF \l_bit_coverimagepath_tl {
            \includegraphics[width=.5\textwidth]{\l_bit_coverimagepath_tl}\\
          }

          \vspace{10mm}

          \heiti\fontsize{24pt}{24pt}\selectfont{\l_@@_value_title_tl}\\

          \vspace{67mm}

          \begin{spacing}{2.2}
            \songti\zihao{3}

            \clist_set:Nn \l_@@_input_clist {
                {\textbf{学\qquad 院：}} {\l_@@_value_school_tl},
                {\textbf{专\qquad 业：}} {\l_@@_value_major_tl},
                {\textbf{班\qquad 级：}} {\l_@@_value_class_tl},
                {\textbf{学\qquad 号：}} {\l_@@_value_student_id_tl},
                {\textbf{姓\qquad 名：}} {\l_@@_value_author_tl},
                {\textbf{任课教师：}} {\l_@@_value_supervisor_tl},
            }

            \@@_render_cover_entry:n \l_@@_input_clist

          \end{spacing}

          \vspace*{\fill}

          \centering

          \songti\fontsize{12pt}{12pt}\selectfont{
            \tl_if_empty:NTF \l_@@_cover_date_tl {
              \today
            } {
              \l_@@_cover_date_tl
            }
          }
        \end{titlepage}
      }
      {2} {
        % Main code for \MakeCover
        \begin{titlepage}
          \topskip=0pt
          \vspace*{-16mm}
          \centering
          \hspace{-6mm}
          \songti\fontsize{22pt}{22pt}
          \selectfont{北京理工大学}\par

          \vspace{13mm}

          \hspace{-6mm}
          \heiti\fontsize{24pt}{24pt}
          \selectfont{本科生毕业设计（论文）开题报告}\par

          \vspace{53mm}

          \begin{spacing}{2.2}
            \songti\zihao{3}
            \clist_set:Nn \l_@@_input_clist {
                {\textbf{学\qquad 院：}} {\l_@@_value_school_tl},
                {\textbf{专\qquad 业：}} {\l_@@_value_major_tl},
                {\textbf{班\qquad 级：}} {\l_@@_value_class_tl},
                {\textbf{姓\qquad 名：}} {\l_@@_value_author_tl},
                {\textbf{指导教师：}} {\l_@@_value_supervisor_tl},
                {\textbf{校外指导教师：}} {\l_@@_value_external_supervisor_tl},
            }

          \@@_render_cover_entry:n \l_@@_input_clist

          \end{spacing}

          \vspace*{\fill}

          \centering
          \hspace{-6mm}\songti\fontsize{12pt}{12pt}\selectfont{\today}

        \end{titlepage}
      }
    }
    \group_end:
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\MakeReviewTable}
% 渲染评阅表。
%    \begin{macrocode}
\DeclareDocumentCommand \MakeReviewTable {} 
  {
    \group_begin:
      \begin{titlepage}
        \includepdf[pages=-]{\l_bit_reviewtable_tl}
      \end{titlepage}
    \group_end:
  }
%    \end{macrocode}
% \end{macro}
%
% 定义 caption 字体为楷体
%    \begin{macrocode}
\DeclareCaptionFont{kaiticaption}{\kaishu \normalsize}
%    \end{macrocode}
% 
% 设置图片的 caption 格式
%    \begin{macrocode}
\renewcommand{\thefigure}{\thesection-\arabic{figure}}
\captionsetup[figure]{font=small,labelsep=space,skip=10bp,labelfont=bf,font=kaiticaption}
%    \end{macrocode}
% 
% 设置表格的 caption 格式
%    \begin{macrocode}
\renewcommand{\thetable}{\thesection-\arabic{table}}
\captionsetup[table]{font=small,labelsep=space,skip=10bp,labelfont=bf,font=kaiticaption}
%    \end{macrocode}
% 
% 输出大写数字日期
%    \begin{macrocode}
\ctexset{today=big}
%    \end{macrocode}
% 
% 将西文字体设置为 Times New Roman
%    \begin{macrocode}
\setromanfont{Times~New~Roman}
%    \end{macrocode}
% 
% 设置文档标题深度
%    \begin{macrocode}
\setcounter{tocdepth}{3}
\setcounter{secnumdepth}{3}
%    \end{macrocode}
% 
% 设置一级标题、二级标题格式。
%    \begin{macrocode}
% 一级标题：小三，宋体，加粗，段前段后各半行。
\ctexset{section={
  format={
    \raggedright \bfseries \songti \zihao{-3}
  },
  beforeskip = 24bp plus 1ex minus .2ex,
  afterskip = 24bp plus .2ex,
  fixskip = true,
  name = {,.\quad}
  }
}
% 二级标题：小四，宋体，加粗，段前段后各半行。
\ctexset{subsection={
  format = {
    \bfseries \songti \raggedright \zihao{4}
  },
  beforeskip = 24bp plus 1ex minus .2ex,
  afterskip = 24bp plus .2ex,
  fixskip = true,
  }
}
%    \end{macrocode}
% 
% 页眉和页脚（页码）的格式设定。
%    \begin{macrocode}
\fancyhf{}
\int_case:nn {\g_@@_report_type_int} {
  {1} {
    \fancyhead[R]{
      \fontsize{10.5pt}{10.5pt}
      \selectfont{\l_@@_value_title_tl}
    }
  }
  {2} {
    \fancyhead[R]{
      \fontsize{10.5pt}{10.5pt}
      \selectfont{北京理工大学本科生毕业设计（论文）开题报告}
    }
  }
}
\fancyfoot[R]{\fontsize{9pt}{9pt}\selectfont{\thepage}}
\renewcommand{\headrulewidth}{1pt}
\renewcommand{\footrulewidth}{0pt}
%    \end{macrocode}
% 
% 正文开始
%    \begin{macrocode}
\pagestyle{fancy}
\setcounter{page}{1}
%    \end{macrocode}
% 
%    \begin{macrocode}
% 正文 22 磅的行距，段前段后间距为 0
% \setlength{\parskip}{0em}
\cs_set:Npn \baselinestretch {1.53}
% 正文首行悬挂 1.02cm
% \setlength{\parindent}{1.02cm}
%    \end{macrocode}
%
%    \begin{macrocode}
%</report>
%    \end{macrocode}
%
% \subsection{bitbeamer.cls 文档类}
%
%    \begin{macrocode}
%<*beamer>
%    \end{macrocode}
%
% \subsubsection{l3keys 接口键值对定义}
%
% 定义 |bitbeamer| 文档类的接口键值对。
%    \begin{macrocode}
\keys_define:nn { bitbeamer }
  {
    titlegraphic .tl_set:N = \l_bit_titlegraphic_tl,
    framelogo .tl_set:N = \l_bit_framelogo_tl,
  }
%    \end{macrocode}
% 
% 在宏加载时，处理 |bitbeamer| 中的值。使得 |bitbeamer| 
% 宏包的模板选项可以在宏加载时生效。
%    \begin{macrocode}
\ProcessKeysOptions { bitbeamer }
%    \end{macrocode}
% 
% Pass every option not explicitly defined to `ctexbeamer`.
%    \begin{macrocode}
\DeclareOption*{
  \PassOptionsToClass{\CurrentOption}{ctexbeamer}
}
%    \end{macrocode}
% 
% Executes the code for each option.
% Load.
%    \begin{macrocode}
\ProcessOptions\relax
\LoadClass{ctexbeamer}
%    \end{macrocode}
% 
% \subsubsection{定义模板类样式}
%
% 加载所需的宏包。
%    \begin{macrocode}
\RequirePackage{xeCJKfntef}
\RequirePackage{tikz}
%    \end{macrocode}
%
% 设置主题与主题色。
%    \begin{macrocode}
\usetheme{Madrid}
\colorlet{beamer@blendedblue}{green!40!black}
%    \end{macrocode}
% 
%
% \begin{macro}{\CJKhl:nn}
% 高亮中文字符。
%    \begin{macrocode}
\cs_new:Npn \CJKhl:nn #1 #2
  { \CJKsout*[thickness=2.5ex, format=\color{#1}]{#2} }
%    \end{macrocode}
% \end{macro}
% 
% Set header if logo path is provided. 
%    \begin{macrocode}
\tl_if_empty:NF \l_bit_titlegraphic_tl {
  % BIT Logo
  \titlegraphic{
      \includegraphics[width=2cm]{\l_bit_titlegraphic_tl}
  }
}
%    \end{macrocode}
% 
% Set title logo if logo path is provided.
%    \begin{macrocode}
\tl_if_empty:NF \l_bit_framelogo_tl {
  \addtobeamertemplate{frametitle}{}{%
    \begin{tikzpicture}[remember~picture,overlay]
      \node[anchor=north~east,yshift=2pt] at (current~page.north~east) 
        {\includegraphics[height=0.8cm]{\tl_use:N \l_bit_framelogo_tl}};
    \end{tikzpicture}
  }
}
%    \end{macrocode}
% 
% \subsubsection{定义用户接口}
%
%    \begin{macrocode}
\cs_new_eq:NN \CJKhl \CJKhl:nn
%    \end{macrocode}
%
%    \begin{macrocode}
%</beamer>
%    \end{macrocode}
%
% \subsection{已弃用的代码}
%
% 来自老版本的代码，但是在新版本中已经不再使用。
% ，为了保证老版本论文能够正常编译，特此保留。
%
% \subsubsection{bitbook.cls 文档类（已弃用）}
%
%    \begin{macrocode}
%<*book>
%    \end{macrocode}
%    \begin{macrocode}

% 目前只有本科的模板，但仍旧要为可能预留空间。
\newif\if@bit@bachelor
\newif\if@bit@docTranslation
\newif\if@bit@master
\newif\if@bit@doctor

\RequirePackage{kvoptions}

\SetupKeyvalOptions{
  family=BIThesis,
  prefix=BIThesis@
}

\DeclareStringOption[14pt]{footskip}
\DeclareBoolOption{titleNumberHeiti}
\ProcessKeyvalOptions*


\DeclareOption{bachelor}{\@bit@bachelortrue}
\DeclareOption{translation}{\@bit@docTranslationtrue}
\DeclareOption*{\PassOptionsToClass{\CurrentOption}{ctexbook}}

\ExecuteOptions{bachelor}

\ProcessOptions\relax

\PassOptionsToPackage{AutoFakeBold,AutoFakeSlant}{xeCJK}
\LoadClass[UTF8,zihao=-4,oneside,openany]{ctexbook}

% \RequirePackage[a4paper,left=3cm,right=2.6cm,top=3.5cm,bottom=2.9cm]{geometry}
% 目前 29mm 最接近 Word 排版
\RequirePackage{xeCJK}
\RequirePackage{titletoc}
  % \RequirePackage{fontspec}
\RequirePackage{setspace}
\RequirePackage{graphicx}
\RequirePackage{fancyhdr}
\RequirePackage{pdfpages}
\RequirePackage{setspace}
\RequirePackage{booktabs}
\RequirePackage{multirow}
\RequirePackage{tikz}
\RequirePackage{etoolbox}
\RequirePackage{hyperref}
\RequirePackage{xcolor}
\RequirePackage{caption}
\RequirePackage{array}
\RequirePackage{amsmath}
\RequirePackage{amssymb}
\RequirePackage{pdfpages}
\RequirePackage{listings}

%\PackageError{zzzz}{Main \BIThesis@footskip  hellp}{test}

% 设置参考文献编译后端为 biber，引用格式为 GB/T7714-2015 格式
% 参考文献使用宏包见 https://github.com/hushidong/biblatex-gb7714-2015
\RequirePackage[
  backend=biber,
  style=gb7714-2015,
  gbalign=gb7714-2015,
  gbnamefmt=lowercase,
  gbpub=false,
  doi=false,
  url=false,
  eprint=false,
  isbn=false,
]{biblatex}

% 参考文献引用文件位于 misc/ref.bib
\addbibresource{./misc/ref.bib}

% 西文字体默认为 Times New Roman
\setromanfont{Times New Roman}
% 论文题目字体为华文细黑
\setCJKfamilyfont{xihei}[AutoFakeBold,AutoFakeSlant]{[STXIHEI.TTF]} % 若希望使用本机字体，也可以用 {STXihei} 来调用
\newcommand{\xihei}{\CJKfamily{xihei}}

\ifBIThesis@titleNumberHeiti
  \newcommand{\arabicHeiti}[1]{\xeCJKsetup{CJKspace=true}\xeCJKDeclareCharClass{CJK}{`0 -> `9}{\heiti\raisebox{-0.1ex}{#1}}\normalspacedchars{0,1,2,3,4,5,6,7,8,9}\xeCJKsetup{CJKspace=false}}
\else
  \newcommand{\arabicHeiti}[1]{#1}
\fi



% 主题页面格式：BIThesis
\fancypagestyle{BIThesis}{
  % 页眉高度
  \setlength{\headheight}{20pt}
  % 页码高度（不完美，比规定稍微靠下 2mm）
  \setlength{\footskip}{\BIThesis@footskip}

  \fancyhf{}
  % 定义页眉、页码
  \fancyhead[C]{\zihao{4}\ziju{0.08}\songti{北京理工大学本科生毕业设计（论文）}}
  \fancyfoot[C]{\songti\zihao{5} \thepage}
  % 页眉分割线稍微粗一些
  \renewcommand{\headrulewidth}{0.6pt}
}

\if@bit@docTranslation
% 主题页面格式：BIThesis
\fancypagestyle{BIThesis}{
  % 页眉高度
  \setlength{\headheight}{20pt}
  % 页码高度（不完美，比规定稍微靠下 2mm）
  \setlength{\footskip}{\BIThesis@footskip}

  \fancyhf{}
  % 定义页码
  \fancyfoot[C]{\songti\zihao{5} \thepage}
  % 页眉分割线稍微粗一些
  \renewcommand{\headrulewidth}{0.6pt}

  % 定义页眉
  \fancyhead[C]{\zihao{4}\ziju{0.08}\songti{北京理工大学本科生毕业设计（论文）外文翻译}}
}
\fi
% 设置章节格式
% 一级标题：黑体，三号，加粗；间距：段前 0.5 行，段后 1 行；
\ctexset{chapter={
    name = {第,章},
    number = {\arabicHeiti{ \arabic{chapter} }},
    format = {\heiti \bfseries \centering \zihao{3}},
    aftername = \hspace{9bp},
    pagestyle = BIThesis,
    beforeskip = 8bp,
    afterskip = 32bp,
    fixskip = true,
  }
}

% 二级标题：黑体，四号，加粗；间距：段前 0.5 行，段后 0 行；
\ctexset{section={
    number = {\arabicHeiti{\thechapter.\hspace{1bp}\arabic{section}}},
    format = {\heiti \raggedright \bfseries \zihao{4}},
    aftername = \hspace{8bp},
    beforeskip = 20bp plus 1ex minus .2ex,
    afterskip = 18bp plus .2ex,
    fixskip = true,
  }
}

% 三级标题：黑体、小四、加粗；间距：段前 0.5 行，段后 0 行；
\ctexset{subsection={
    number = {\arabicHeiti{\thechapter.\hspace{1bp}\arabic{section}.\hspace{1bp}\arabic{subsection}}},
    format = {\heiti \bfseries \raggedright \zihao{-4}},
    aftername = \hspace{7bp},
    beforeskip = 17bp plus 1ex minus .2ex,
    afterskip = 14bp plus .2ex,
    fixskip = true,
  }
}

% 设置目录样式
% 添加 PDF 链接
\addtocontents{toc}{\protect\hypersetup{hidelinks}}

% 解决「目录」二字的格式问题
\renewcommand{\contentsname}{
  \fontsize{16pt}{\baselineskip}
  \normalfont\heiti{目~~~~录}
  \vspace{-8pt}
}
% 定义目录样式
\titlecontents{chapter}[0pt]{\songti \zihao{-4}}
{\thecontentslabel\hspace{\ccwd}}{}
{\hspace{.5em}\titlerule*{.}\contentspage}
\titlecontents{section}[1\ccwd]{\songti \zihao{-4}}
{\thecontentslabel\hspace{\ccwd}}{}
{\hspace{.5em}\titlerule*{.}\contentspage}
\titlecontents{subsection}[2\ccwd]{\songti \zihao{-4}}
{\thecontentslabel\hspace{\ccwd}}{}
{\hspace{.5em}\titlerule*{.}\contentspage}

% 前置页面（原创性声明、中英文摘要、目录等）
\renewcommand{\frontmatter}{
  \pagenumbering{Roman}
  \pagestyle{BIThesis}
}

% 正文页面
\renewcommand{\mainmatter}{
  \pagenumbering{arabic}
  \pagestyle{BIThesis}
}

% 设置 caption 与 figure 之间的距离
\setlength{\abovecaptionskip}{11pt}
\setlength{\belowcaptionskip}{9pt}

% 设置图片的 caption 格式
\renewcommand{\thefigure}{\thechapter-\arabic{figure}}
\captionsetup[figure]{font=small,labelsep=space}

% 设置 listings 源代码高亮的格式
\AtBeginDocument{
  \renewcommand{\lstlistingname}{代码}
  \renewcommand{\thelstlisting}{\arabic{chapter}-\arabic{lstlisting}}
}

\definecolor{codegreen}{rgb}{0,0.6,0}
\definecolor{codegray}{rgb}{0.5,0.5,0.5}
\definecolor{codepurple}{rgb}{0.58,0,0.82}
\definecolor{backcolour}{rgb}{0.95,0.95,0.92}
\lstdefinestyle{examplestyle}{
    backgroundcolor=\color{backcolour},
    commentstyle=\color{codegreen},
    keywordstyle=\color{magenta},
    numberstyle=\tiny\color{codegray},
    stringstyle=\color{codepurple},
    basicstyle=\ttfamily\footnotesize,
    breakatwhitespace=false,
    breaklines=true,
    captionpos=b,
    keepspaces=true,
    numbers=left,
    numbersep=5pt,
    showspaces=false,
    showstringspaces=false,
    showtabs=false,
    tabsize=2
}
\lstset{style=examplestyle}


% 设置表格的 caption 格式和 caption 与 table 之间的垂直距离
\renewcommand{\thetable}{\thechapter-\arabic{table}}
\captionsetup[table]{font=small,labelsep=space,skip=2pt}

% 调整底层 TeX 排版引擎参数以保证所有段落能够很好地以两端对齐的方式呈现
\tolerance=1
\emergencystretch=\maxdimen
\hyphenpenalty=10000
\hbadness=10000

% 设置数学公式编号格式
\renewcommand{\theequation}{\arabic{chapter}-\arabic{equation}}

\newcommand{\unnumchapter}[1]{
  \chapter*{\vskip 10bp\textmd{#1} \vskip -6bp}
  \addcontentsline{toc}{chapter}{#1}
  \stepcounter{chapter}
}



%    \end{macrocode}
%    \begin{macrocode}
%</book>
%    \end{macrocode}
% \subsubsection{bitart.cls 文档类（已弃用）}
%    \begin{macrocode}
%<*article>
%    \end{macrocode}
%    \begin{macrocode}

\newif\if@bit@labreport
\newif\if@bit@proposalreport

\DeclareOption{lab-report}{\@bit@labreporttrue\@bit@proposalreportfalse}
\DeclareOption{proposal-report}{\@bit@labreportfalse\@bit@proposalreporttrue}
\DeclareOption*{\PassOptionsToClass{\CurrentOption}{ctexart}}
\ExecuteOptions{lab-report}
\ProcessOptions\relax

\PassOptionsToPackage{AutoFakeBold,AutoFakeSlant}{xeCJK}
\LoadClass[UTF8,zihao=-4]{ctexart}%

\if@bit@labreport
  \RequirePackage[a4paper,left=3.18cm,right=3.18cm,top=2.54cm,bottom=2.54cm,includeheadfoot]{geometry}%
\else
  \RequirePackage[a4paper,left=3cm,right=2.4cm,top=2.6cm,bottom=2.38cm,includeheadfoot]{geometry}
\fi

\RequirePackage{fontspec}%
\RequirePackage{setspace}%
\RequirePackage{graphicx}%
\RequirePackage{fancyhdr}%
\RequirePackage{pdfpages}%
\RequirePackage{setspace}%
\RequirePackage{booktabs}%
\RequirePackage{multirow}%
\RequirePackage{caption}%

\if@bit@labreport
  \RequirePackage{titlesec}%
  \RequirePackage{float}%
  \RequirePackage{etoolbox}
\fi

% 设置参考文献编译后端为 biber，引用格式为 GB/T7714-2015 格式
% 参考文献使用宏包见 https://github.com/hushidong/biblatex-gb7714-2015
\RequirePackage[style=gb7714-2015,backend=biber]{biblatex}

\if@bit@labreport
  % 将西文字体设置为 Times New Roman
  \setromanfont{Times New Roman}%

  % 设置文档标题深度
  \setcounter{tocdepth}{3}%
  \setcounter{secnumdepth}{3}%

  %%
  % 设置一级标题、二级标题格式
  \ctexset{section={%
    format={\raggedright \bfseries \songti \zihao{-3}},%
    name = {,.},%
    number = \chinese{section}%
    }%
  }%
  \ctexset{subsection={%
    format = {\bfseries \songti \raggedright \zihao{-4}},%
    }%
  }%

  % 页眉和页脚（页码）的格式设定
  \fancyhf{}%
  \fancyhead[L]{\fontsize{10.5pt}{10.5pt}\selectfont\kaishu{\reportName}}%
  \fancyfoot[C]{\fontsize{9pt}{9pt}\selectfont\kaishu{\thepage}}%
  \renewcommand{\headrulewidth}{0.5pt}%
  \renewcommand{\footrulewidth}{0pt}%

  \AtBeginDocument{
  }
\fi

\if@bit@proposalreport
  % 定义 caption 字体为楷体
  \DeclareCaptionFont{kaiticaption}{\kaishu \normalsize}

  % 设置图片的 caption 格式
  \renewcommand{\thefigure}{\thesection-\arabic{figure}}
  \captionsetup[figure]{font=small,labelsep=space,skip=10bp,labelfont=bf,font=kaiticaption}

  % 设置表格的 caption 格式
  \renewcommand{\thetable}{\thesection-\arabic{table}}
  \captionsetup[table]{font=small,labelsep=space,skip=10bp,labelfont=bf,font=kaiticaption}

  % 输出大写数字日期
  \ctexset{today=big}

  % 将西文字体设置为 Times New Roman
  \setromanfont{Times New Roman}

  %% 将中文楷体设置为 SIMKAI.TTF（如果需要）
  % \setCJKfamilyfont{zhkai}{[SIMKAI.TTF]}
  % \newcommand*{\kaiti}{\CJKfamily{zhkai}}

  % 设置文档标题深度
  \setcounter{tocdepth}{3}
  \setcounter{secnumdepth}{3}

  %%
  % 设置一级标题、二级标题格式
  % 一级标题：小三，宋体，加粗，段前段后各半行
  \ctexset{section={
    format={\raggedright \bfseries \songti \zihao{-3}},
    beforeskip = 24bp plus 1ex minus .2ex,
    afterskip = 24bp plus .2ex,
    fixskip = true,
    name = {,.\quad}
    }
  }
  % 二级标题：小四，宋体，加粗，段前段后各半行
  \ctexset{subsection={
    format = {\bfseries \songti \raggedright \zihao{4}},
    beforeskip =24bp plus 1ex minus .2ex,
    afterskip = 24bp plus .2ex,
    fixskip = true,
    }
  }
  % 页眉和页脚（页码）的格式设定
  \fancyhf{}
  \fancyhead[R]{\fontsize{10.5pt}{10.5pt}\selectfont{北京理工大学本科生毕业设计（论文）开题报告}}
  \fancyfoot[R]{\fontsize{9pt}{9pt}\selectfont{\thepage}}
  \renewcommand{\headrulewidth}{1pt}
  \renewcommand{\footrulewidth}{0pt}
\fi


\AtBeginDocument{
  \if@bit@labreport
    \input{misc/cover_v1.tex}
    % 正文开始
    \pagestyle{fancy}
    \setcounter{page}{1}%
  \fi
  \if@bit@proposalreport
    % 报告封面
    \input{misc/cover.tex}
  \fi

}

%    \end{macrocode}
%
%    \begin{macrocode}
%    \end{macrocode}
%
%    \begin{macrocode}
%</article>
%    \end{macrocode}
% \subsubsection{bitgraduate.cls 文档类（已弃用）}
%    \begin{macrocode}
%<*graduate>
%    \end{macrocode}
%    \begin{macrocode}

%% ==================================================
%% BIT-thesis-grd.cls for BIT Thesis
%% modified by yang yating
%% version: 1.4
%% last update: Mar 25th, 2018
%% ==================================================

%% math packages -- conflict with xunicode
\RequirePackage{amsmath,amsthm,amsfonts,amssymb,bm,mathrsfs}
% 直立希腊字母字体
\RequirePackage{upgreek}

\DeclareOption*{\PassOptionsToClass{\CurrentOption}{ctexbook}}
\newif\ifBIT@master\BIT@masterfalse
\newif\ifBIT@doctor\BIT@doctorfalse
\newif\ifBIT@istwoside\BIT@istwosidefalse
\DeclareOption{twoside}{\BIT@istwosidetrue}
\DeclareOption{master}{\BIT@mastertrue}
\DeclareOption{doctor}{\BIT@doctortrue}

\ProcessOptions\relax
\ifBIT@istwoside
\LoadClass[zihao=-4,a4paper,UTF8,space=auto]{ctexbook}
\else
\LoadClass[zihao=-4,a4paper,oneside,openany,UTF8,space=auto]{ctexbook}
\fi

%%
%% the setup of ctex package
%%
\def\contentsname{目\BITspace 录}
\def\listfigurename{插\BITspace 图}
\def\listtablename{表\BITspace 格}

%%
%% 封面标题
%%
\def\BIT@label@major{学~~~~科~~~~专~~~~业}
\def\BIT@label@title{论文题目}
\def\BIT@label@author{作~~~~者~~~~姓~~~~名}
\def\BIT@label@classification{中图分类号：}
\def\BIT@label@confidential{密级}
\def\BIT@label@UDC{UDC\!分类号：}
\def\BIT@label@serialnumber{编号}
\def\BIT@label@thesis{学位论文}
\def\BIT@label@advisor{指~~~~导~~~~教~~~~师}
\def\BIT@label@degree{申~~~~请~~~~学~~~~位}
\def\BIT@label@submitdate{论文提交日期}
\def\BIT@label@defenddate{论~文~答~辩~日~期}
\def\BIT@label@institute{学~~~~院~~~~名~~~~称}
\def\BIT@label@school{学~位~授~予~单~位}
\def\BIT@label@chairman{答辩委员会主席}

%%
%% 封面内容
%%

\def\BIT@value@classification{}
\def\BIT@value@confidential{}
\def\BIT@value@UDC{}
\def\BIT@value@serialnumber{}
\def\BIT@value@school{}
\def\BIT@value@degree{}
\def\BIT@value@title{~~~~~（论~文~题~目）~~~~~}
\def\BIT@value@vtitle{竖排论文题目}
\def\BIT@value@titlemark{\BIT@value@title}
\def\BIT@value@author{（作~者~姓~名）}
\def\BIT@value@advisor{（姓名、专业技术职务、学位）}
\def\BIT@value@advisorinstitute{（单位）}
\def\BIT@value@major{}
\def\BIT@value@studentnumber{} % _ added by wei.jianwen@gmail.com
\def\BIT@value@submitdate{}
\def\BIT@value@defenddate{}
\def\BIT@value@institute{}
\def\BIT@value@chairman{}
\def\BIT@label@statement{}

%% 设置圆圈的格式 或使用\textcircled
\usepackage{tikz}
\usepackage{etoolbox}
\newcommand{\circled}[2][]{\tikz[baseline=(char.base)]
    {\node[shape = circle, draw, inner sep = 1pt]
    (char) {\phantom{\ifblank{#1}{#2}{#1}}};
    \node at (char.center) {\makebox[0pt][c]{#2}};}}
\robustify{\circled}

%% 论文原创性声明
\def\BIT@label@original{研究成果声明}
\def\BIT@label@authorization{关于学位论文使用权的说明}
\def\BIT@label@authorsign{作者签名：}
\def\BIT@label@Supervisorsign{导师签名：}
\def\BIT@label@originalDate{签字日期：}
\def\BIT@label@originalcontent{\BITspace\BITspace 本人郑重声明：所提交的学位论文是我本人在指导教师的指导下进行的研究工作获得的研究成果。尽我所知，文中除特别标注和致谢的地方外，学位论文中不包含其他人已经发表或撰写过的研究成果，也不包含为获得北京理工大学或其它教育机构的学位或证书所使用过的材料。与我一同工作的合作者对此研究工作所做的任何贡献均已在学位论文中作了明确的说明并表示了谢意。\par 特此申明。}
\def\BIT@label@authorizationcontent{\BITspace\BITspace 本人完全了解北京理工大学有关保管、使用学位论文的规定，其中包括：\circled{1} 学校有权保管、并向有关部门送交学位论文的原件与复印件；\circled{2} 学校可以采用影印、缩印或其它复制手段复制并保存学位论文；\circled{3} 学校可允许学位论文被查阅或借阅；\circled{4} 学校可以学术交流为目的,复制赠送和交换学位论文；\circled{5} 学校可以公布学位论文的全部或部分内容（保密学位论文在解密后遵守此规定）。}

%%
%% 英语封面标题
%%
\def\BIT@label@englishadvisor{Supervisor:}
\def\BIT@label@englishstatement{Submitted in total fulfilment
  of the requirements for the degree of \BIT@value@englishdegree \\
  in \BIT@value@englishmajor}
\def\BIT@label@englishauthor{Candidate Name:}
\def\BIT@label@englishadvisor{Faculty Mentor:}
\def\BIT@label@englishchairman{Chair, Thesis Committee:}
\def\BIT@label@englishinstitute{School or Department:}
\def\BIT@label@englishdegree{Degree Applied:}
\def\BIT@label@englishmajor{Major:}
\def\BIT@label@englishschool{Degree by:}
\def\BIT@label@englishdate{The Date of Defence:}


%%
%% 英语封面内容
%%
\def\BIT@value@englishtitle{(English Title of Thesis)}
\def\BIT@value@englishauthor{(Author Name)}
\def\BIT@value@englishadvisor{(Supervisor Name)}
\def\BIT@value@englishinstitute{(Institute Name)}
\def\BIT@value@englishscholl{(BIT)}
\def\BIT@value@englishchair{(someone)}
\def\BIT@value@englishdate{}
\def\BIT@value@englishdegree{}
\def\BIT@value@englishmajor{}



\def\BIT@label@abstract{摘要}
\def\BIT@label@englishabstract{Abstract}
\def\BIT@label@keywords{关键词：}
\def\BIT@label@englishkeywords{Key Words:~}
\def\BIT@label@conclusion{结论}
\def\BIT@label@appendix{附录}
\def\BIT@label@publications{攻读学位期间发表论文与研究成果清单}
\def\BIT@label@projects{攻读学位期间参与的项目}
\def\BIT@label@resume{作者简介}
\def\BIT@label@reference{参考文献！！！！}
\def\BIT@label@thanks{致谢}
\def\BIT@value@templateversion{v1.2}
%%
%% label in the head 页眉页脚
%%
\def\BIT@label@headschoolname{北京理工大学硕士学位论文}

%% 当前模板的版本
\newcommand{\version}{\BIT@value@templateversion}

%% ==============引用geometry 宏包设置纸张和页面========================
% 设置版面:上3.5cm，下2.5cm，左2.7cm，右2.7cm，页眉2.5cm，页脚1.8cm，装订线0cm
\usepackage[%
paper=a4paper,%
top=3.5cm,% 上 3.5cm %
bottom=2.5cm,% 下 2.5cm %
left=2.7cm,% 左 2.7cm %
right=2.7cm,% 右 2.7cm %
headheight=1.0cm,% 页眉 2.5cm %
footskip=0.7cm% 页脚 1.8cm %
]{geometry} % 页面设置 %

\parskip 0.5ex plus 0.25ex minus 0.25ex
%% Command -- Clear Double Page
\def\cleardoublepage{\clearpage\if@twoside \ifodd\c@page\else
  \thispagestyle{empty}%
  \hbox{}\newpage\if@twocolumn\hbox{}\newpage\fi\fi\fi}
% 设置行距，大概为22榜
\RequirePackage{setspace}
\setstretch{1.523}

%% 设置章节格式, 黑体三号加粗居中，行距22磅，与正文或节标题的间距设定为段后间距1行。章序号与章名间空一格。
\ctexset{chapter={
      name = {第,章},
      number = {\arabic{chapter}},
      format = {\bfseries \sffamily \centering \zihao{3}},
      pagestyle = {BIT@headings},
      beforeskip = 16 bp,
      afterskip = 32 bp,
      fixskip = true,
  }
}
%% 设置一级章节格式
% 黑体四号加粗顶左，行距22磅，与上一节的间距为1行，与下面正文或节标题的段间间距为0.5行。序号与题目间空一格。

\ctexset{section={
  format={\raggedright \bfseries \sffamily \zihao{4}},
  beforeskip = 28bp plus 1ex minus .2ex,
  afterskip = 24bp plus .2ex,
  fixskip = true,
  }
}

% 设置二级标题格式

% 黑体小四加粗顶左，行距22磅，与上一节的间距为1行，与下面正文或节标题的段间间距为0.5行。序号与题目间空一格。 

\ctexset{subsection={
   format = {\bfseries \sffamily \raggedright \zihao{-4}},
   beforeskip =28bp plus 1ex minus .2ex,
   afterskip = 24bp plus .2ex,
   fixskip = true,
   }
}

% 设置三节标题格式

\ctexset{subsubsection={
      format={\heiti \raggedright \zihao{-4}},
      beforeskip=28bp plus 1ex minus .2ex,
      afterskip=24bp plus .2ex,
      fixskip=true,
  }
}

%% 设定目录格式。目录颜色更改黑色
\addtocontents{toc}{\protect\hypersetup{hidelinks}}
\addtocontents{lot}{\protect\hypersetup{hidelinks}}
\addtocontents{lof}{\protect\hypersetup{hidelinks}}

\RequirePackage{titletoc}
\titlecontents{chapter}[0pt]{\songti \zihao{4}}
    {\bf\thecontentslabel\hspace{\ccwd}}{\bf}
    {\hspace{.5em}\titlerule*{.}\contentspage}
\titlecontents{section}[2\ccwd]{\songti \zihao{-4}}
    {\thecontentslabel\hspace{\ccwd}}{}
    {\hspace{.5em}\titlerule*{.}\contentspage}
\titlecontents{subsection}[4\ccwd]{\songti \zihao{-4}}
    {\thecontentslabel\hspace{\ccwd}}{}
    {\hspace{.5em}\titlerule*{.}\contentspage}

\titlecontents{figure}[0pt]{\songti\zihao{-4}}
    {\figurename~\thecontentslabel\quad}{\hspace*{-1.5cm}}
    {\hspace{.5em}\titlerule*{.}\contentspage}

\titlecontents{table}[0pt]{\songti\zihao{-4}}
    {\tablename~\thecontentslabel\quad}{\hspace*{-1.5cm}}
    {\hspace{.5em}\titlerule*{.}\contentspage}

%% 选择编译
\RequirePackage{ifthen}

%% check pdfTeX mode
\RequirePackage{ifpdf}

%% fancyhdr 页眉页脚控制
\RequirePackage{fancyhdr}

% 空 页眉页脚
\fancypagestyle{BIT@empty}{%
  \fancyhf{}}

% ======正文页眉页脚=================
\fancypagestyle{BIT@headings}{%
  \fancyhf{}
  \fancyfoot[C]{\songti\zihao{5} \thepage}
  \fancyhead[C]{\ifBIT@master\zihao{5}{\songti 北京理工大学硕士学位论文}
                \else\zihao{5}{\songti 北京理工大学博士学位论文}\fi}
  }

% ==================================对于openright 选项，必须保证章页右开，且如果前章末页内容须清空其页眉页脚。===================
\let\BIT@cleardoublepage\cleardoublepage
\newcommand{\BIT@clearemptydoublepage}{%
	\clearpage{\pagestyle{BIT@empty}\BIT@cleardoublepage}}
\let\cleardoublepage\BIT@clearemptydoublepage

 % ================修该frontmatter 的页码为大写罗马格式，并调整页面风格===============
\renewcommand{\frontmatter}{
 \if@openright\cleardoublepage\else\clearpage\fi
  \@mainmatterfalse
  \pagenumbering{Roman}
  \pagestyle{BIT@headings}
}
% =======================修改mainmatter 的页码为阿拉伯格式，并调整页面风格========================
\renewcommand{\mainmatter}{
  \if@openright\cleardoublepage\else\clearpage\fi
  \@mainmattertrue
  \pagenumbering{arabic}
  \pagestyle{BIT@headings}
}


%% 复杂表格
\RequirePackage{threeparttable}
\RequirePackage{dcolumn}
\RequirePackage{multirow}
\RequirePackage{booktabs}
\newcolumntype{d}[1]{D{.}{.}{#1}}% or D{.}{,}{#1} or D{.}{\cdot}{#1}


%% 定义几个常用的数学常量符号
\newcommand{\me}{\mathrm{e}} % 定义 对数常数e，虚数符号i,j以及微分算子d为直立体。
\newcommand{\mi}{\mathrm{i}}
\newcommand{\mj}{\mathrm{j}}
\newcommand{\dif}{\,\mathrm{d}} 

\theoremstyle{plain}
  \newtheorem{algo}{算法~}[chapter]
  \newtheorem{thm}{定理~}[chapter]
  \newtheorem{lem}[thm]{引理~}
  \newtheorem{prop}[thm]{命题~}
  \newtheorem{cor}[thm]{推论~}
\theoremstyle{definition}
  \newtheorem{defn}{定义~}[chapter]
  \newtheorem{conj}{猜想~}[chapter]
  \newtheorem{exmp}{例~}[chapter]
  \newtheorem{rem}{注~}
  \newtheorem{case}{情形~}
\renewcommand{\proofname}{\bf 证明}

%% 英文字体使用 Times New Roman
\RequirePackage{xltxtra} % \XeTeX Logo
\setmainfont{Times New Roman}
\setsansfont{Arial}
\setmonofont{Courier New}


%% graphics packages
\RequirePackage{graphicx}
%% 并列子图
\RequirePackage{subfigure}

\RequirePackage{wrapfig}
%% ===========================设置图表标题选项==========================
\RequirePackage{amsmath}
\RequirePackage{caption}
\DeclareCaptionLabelSeparator{zhspace}{\hspace{1\ccwd}}
\DeclareCaptionFont{fontsize}{\zihao{5}}
\captionsetup{
  font = {fontsize},
  labelsep = zhspace,
}
\captionsetup[table]{
  position = top,
  aboveskip = 6bp,
  belowskip = 6bp,
}
\numberwithin{table}{chapter}
\captionsetup[figure]{
  position = bottom,
  aboveskip = 6bp,
  belowskip = 6bp,
}

%% 如果插入的图片没有指定扩展名，那么依次搜索下面的扩展名所对应的文件
\DeclareGraphicsExtensions{.pdf,.eps,.png,.jpg,.jpeg}
% ccaption -- bicaption
% \RequirePackage{ccaption}
% \captiondelim{\ }
% \captionnamefont{\songti\zihao{5}}
% \captiontitlefont{\songti\zihao{5}}

\RequirePackage[
  backend=biber,
  style=gb7714-2015,
  gbalign=gb7714-2015,
  gbnamefmt=lowercase,
  gbpub=false,
  doi=false,
  url=false,
  eprint=false,
  isbn=false,
]{biblatex}

% 将浮动参数设为较宽松的值
\renewcommand{\textfraction}{0.15}
\renewcommand{\topfraction}{0.85}
\renewcommand{\bottomfraction}{0.65}
\renewcommand{\floatpagefraction}{0.60}


% 定公式、图、表编号为"3-1"的形式，即分隔符由.变为短杠
\renewcommand\theequation{\arabic{chapter}.\arabic{equation}}
\renewcommand\thefigure{\arabic{chapter}.\arabic{figure}}
\renewcommand\thetable{\arabic{chapter}.\arabic{table}}

% 颜色宏包
\RequirePackage{xcolor}


% 中文破折号
\newcommand{\cndash}{\rule{0.0em}{0pt}\rule[0.35em]{1.4em}{0.05em}\rule{0.2em}{0pt}}

% listings 源代码显示宏包
\RequirePackage{listings}
\lstset{tabsize=4, %
  frame=shadowbox, % 把代码用带有阴影的框圈起来
  commentstyle=\color{red!50!green!50!blue!50},% 浅灰色的注释
  rulesepcolor=\color{red!20!green!20!blue!20},% 代码块边框为淡青色
  keywordstyle=\color{blue!90}\bfseries, % 代码关键字的颜色为蓝色，粗体
  showstringspaces=false,% 不显示代码字符串中间的空格标记
  stringstyle=\ttfamily, % 代码字符串的特殊格式
  keepspaces=true, %
  breakindent=22pt, %
  numbers=left,% 左侧显示行号
  stepnumber=1,%
  numberstyle=\tiny, % 行号字体用小号
  basicstyle=\footnotesize, %
  showspaces=false, %
  flexiblecolumns=true, %
  breaklines=true, % 对过长的代码自动换行
  postbreak=\mbox{\textcolor{red}{$\hookrightarrow$}\space},
  aboveskip=1em, % 代码块边框
  %% added by http://bbs.ctex.org/viewthread.php?tid=53451
  fontadjust,
  captionpos=t,
  framextopmargin=2pt,framexbottommargin=2pt,abovecaptionskip=-3pt,belowcaptionskip=3pt,
  xleftmargin=4em,xrightmargin=4em, % 设定listing左右的空白
  texcl=true,
  % 设定中文冲突，断行，列模式，数学环境输入，listing数字的样式
  extendedchars=false,columns=flexible,mathescape=true
  numbersep=-1em
}
\renewcommand{\lstlistingname}{代码} %% 重命名Listings标题头

%% hyperref package
\definecolor{navyblue}{RGB}{0,0,128} 
\RequirePackage{hyperref}
\hypersetup{
  bookmarksnumbered,%
  linktoc=all,
  colorlinks=true,
  citecolor=navyblue,
  filecolor=cyan,
  linkcolor=navyblue,
  linkbordercolor=navyblue,
  urlcolor=navyblue,
  plainpages=false,%
  pdfstartview=FitH
}

%% enumerate 列表环境间距调节
\usepackage{enumitem}
% \setenumerate[1]{itemsep=0pt,partopsep=0pt,parsep=\parskip,topsep=5pt}
% \setitemize[1]{itemsep=0pt,partopsep=0pt,parsep=\parskip,topsep=0pt}
% \setdescription{itemsep=0pt,partopsep=0pt,parsep=\parskip,topsep=5pt}

% _ BITspace
% \newcommand\BITspace{\protect\CTEX@spaceChar\protect\CTEX@spaceChar}
\newcommand{\BITspace}[1][1]{\hspace{#1\ccwd}}

\def\BIT@getfileinfo#1 #2 #3\relax#4\relax{%
  \def\BITfiledate{#1}%
  \def\BITfileversion{#2}%
  \def\BITfileinfo{#3}}%
\expandafter\ifx\csname ver@bitmaster-xetex.cls\endcsname\relax
  \edef\reserved@a{\csname ver@ctextemp_bitmaster-xetex.cls\endcsname}
\else
  \edef\reserved@a{\csname ver@bitmaster-xetex.cls\endcsname}
\fi
\expandafter\BIT@getfileinfo\reserved@a\relax? ? \relax\relax
\def\BIT@underline[#1]#2{%
  \underline{\hbox to #1{\hfill#2\hfill}}}
\def\BITunderline{\@ifnextchar[\BIT@underline\underline}

% 中文标题页的可用命令
\newcommand\classification[1]{\def\BIT@value@classification{#1}}
\newcommand\studentnumber[1]{\def\BIT@value@studentnumber{#1}}
\newcommand\confidential[1]{\def\BIT@value@confidential{#1}}
\newcommand\UDC[1]{\def\BIT@value@UDC{#1}}
\newcommand\serialnumber[1]{\def\BIT@value@serialnumber{#1}}
\newcommand\school[1]{\def\BIT@value@school{#1}}
\newcommand\degree[1]{\def\BIT@value@degree{#1}}
\renewcommand\title[2][\BIT@value@title]{%
  \def\BIT@value@title{#2}
  \def\BIT@value@titlemark{\MakeUppercase{#1}}}

\newcommand\vtitle[1]{\def\BIT@value@vtitle{#1}}
\renewcommand\author[1]{\def\BIT@value@author{#1}}
\newcommand\advisor[1]{\def\BIT@value@advisor{#1}}
\newcommand\advisorinstitute[1]{\def\BIT@value@advisorinstitute{#1}}
\newcommand\major[1]{\def\BIT@value@major{#1}}
\newcommand\submitdate[1]{\def\BIT@value@submitdate{#1}}
\newcommand\defenddate[1]{\def\BIT@value@defenddate{#1}}
\newcommand\institute[1]{\def\BIT@value@institute{#1}}
\newcommand\chairman[1]{\def\BIT@value@chairman{#1}}

%% 第一页和第二页
%  “绘制”BIT中文标题页
\renewcommand\maketitle[1]{%
  \cleardoublepage
  \thispagestyle{empty}
  \begin{center}
    \vspace*{60mm}
    {\heiti\zihao{-2} \BIT@value@title}
    \vskip 40mm
    {\heiti \zihao{-3} \BIT@value@author} % 黑体 小三
     \vskip 4mm
    {\heiti \zihao{-3} \BIT@value@defenddate} % 黑体 小三
  \end{center}
  \clearpage
  \if@twoside
    \thispagestyle{empty}
    \cleardoublepage
  \fi
 }

\newcommand\makeInfo[1]%
 {
  \newpage
  \cleardoublepage
  \thispagestyle{empty}

% udc ltz 
{ %
  {\heiti \zihao{5} \noindent \BIT@label@classification} \BIT@value@classification \\
  {\heiti \zihao{5} \BIT@label@UDC}  \BIT@value@UDC
}

   \begin{center}

    \vskip \stretch{1}
       {\heiti\zihao{-2} \BIT@value@title}
    \vskip \stretch{1}

    {\fangsong\zihao{4}}
    \def\tabcolsep{1pt}
    \def\arraystretch{1.5}

	% 黑体 小三
    {\heiti\zihao{-3}
     \begin{tabular}{l p{3mm} c}
      \BIT@label@author & &\BITunderline[180pt]{\BIT@value@author}
    \\
      \BIT@label@institute & & \BITunderline[180pt]{\BIT@value@institute}
    \\
      \BIT@label@advisor & &  \BITunderline[180pt]{\BIT@value@advisor}
    \\
      \BIT@label@chairman & &   \BITunderline[180pt]{\BIT@value@chairman}
    \\
      \BIT@label@degree & &    \BITunderline[180pt]{\BIT@value@degree}
    \\
      \BIT@label@major & &    \BITunderline[180pt]{\BIT@value@major}
    \\
      \BIT@label@school & &   \BITunderline[180pt]{\BIT@value@school}
    \\
      \BIT@label@defenddate & &  \BITunderline[180pt]{\BIT@value@defenddate}
    \end{tabular}}

  \end{center}

  \vskip \stretch{0.5}
  \clearpage
  \if@twoside
    \thispagestyle{empty}
    \cleardoublepage
  \fi
}

% English Title Page
% 英文标题页可用命令
\newcommand\englishtitle[1]{\def\BIT@value@englishtitle{#1}}
\newcommand\englishauthor[1]{\def\BIT@value@englishauthor{#1}}
\newcommand\englishadvisor[1]{\def\BIT@value@englishadvisor{#1}}
\newcommand\englishschool[1]{\def\BIT@value@englishschool{#1}}
\newcommand\englishinstitute[1]{\def\BIT@value@englishinstitute{#1}}
\newcommand\englishdate[1]{\def\BIT@value@englishdate{#1}}
\newcommand\englishdegree[1]{\def\BIT@value@englishdegree{#1}}
\newcommand\englishmajor[1]{\def\BIT@value@englishmajor{#1}}
\newcommand\englishchairman[1]{\def\BIT@value@englishchairman{#1}}

% "绘制"英文标题页
\newcommand\makeEnglishInfo[1]{%
  \cleardoublepage
  \thispagestyle{empty}

   \begin{center}


   \vspace*{10em}
% 论文题目	  Times New Roman 小二 加粗
   {\zihao{-2}\textbf{\BIT@value@englishtitle}}
   % \bfseries
   \vskip \stretch{1}
   
% Times New Roman 小三
   {\zihao{-3}
     \begin{tabular}{ll}
      \BIT@label@englishauthor & \BITunderline[200pt]{\BIT@value@englishauthor}
    \\
      \BIT@label@englishinstitute &  \BITunderline[200pt]{\BIT@value@englishinstitute}
    \\
      \BIT@label@englishadvisor &  \BITunderline[200pt]{\BIT@value@englishadvisor}
    \\
      \BIT@label@englishchairman &   \BITunderline[200pt]{\BIT@value@englishchairman}
    \\
      \BIT@label@englishdegree &    \BITunderline[200pt]{\BIT@value@englishdegree}
    \\
      \BIT@label@englishmajor &     \BITunderline[200pt]{\BIT@value@englishmajor}
    \\
      \BIT@label@englishschool &     \BITunderline[200pt]{\BIT@value@englishschool}
    \\
      \BIT@label@englishdate &   \BITunderline[200pt]{\BIT@value@englishdate}
    \end{tabular}}

  \end{center}

  \vskip \stretch{0.5}
  \clearpage
  \if@twoside
  \thispagestyle{empty}
   \cleardoublepage
  \fi
}

% 绘制树立排放的论文题目和学校名称

\newcommand\makeVerticalTitle{
   \cleardoublepage
   \thispagestyle{empty}
   \vskip 5cm
   \begin{center}
    \setstretch{1.1}
    \begin{minipage}{2em}
      \begin{center}
        {\heiti\zihao{3}\BIT@value@vtitle}
          \vskip 2em
        {\heiti\zihao{3}\BIT@value@school}
      \end{center}
    \end{minipage}
   \end{center}
    \clearpage
    \if@twoside
        \thispagestyle{empty}
        \cleardoublepage
    \fi
}

% 原创性声明
\newcommand\makeDeclareOriginal{%
  \cleardoublepage
  \pdfbookmark[0]{声明}{statement}
  \thispagestyle{empty}
  \begin{center}
  {\bf\zihao{3} \BIT@label@original}
  \end{center}
  \vskip 10pt
  {\zihao{4}\BIT@label@originalcontent}
  \vskip 10pt
  \hspace{8em}{\zihao{4}\BIT@label@authorsign} \BITunderline[6em]{} \hspace{2em} {\zihao{4}\BIT@label@originalDate} \BITunderline[6em]{}

  \vskip 30mm

  \begin{center}
  {\bf\zihao{3} \BIT@label@authorization}
  \end{center}
  \vskip 10pt
  {\zihao{4} \BIT@label@authorizationcontent}
  \vskip 40pt

  \hspace{8em}{\zihao{4}\BIT@label@authorsign} \BITunderline[6em]{} \hspace{2em} {\zihao{4}\BIT@label@Supervisorsign} \BITunderline[6em]{}
  \vskip 15pt
  \hspace{8em}{\zihao{4}\BIT@label@originalDate} \BITunderline[6em]{} \hspace{2em} {\zihao{4}\BIT@label@originalDate} \BITunderline[6em]{}
  \clearpage
  \if@twoside
    \thispagestyle{empty}
    \cleardoublepage
  \fi

}


% 页眉页脚
\pagestyle{fancy}
\fancyhf{}
\fancyhead[C]{\songti \zihao{5} \BIT@label@headschoolname}  % 奇数页左页眉
\fancyfoot[C]{\songti \zihao{5} {\thepage}}      % 页脚


\fancypagestyle{plain}{% 设置开章页页眉页脚风格(只有页码作为页脚)
  \fancyhf{}%
  \fancyfoot[C]{\songti \zihao{5} \BIT@label@headschoolname}
  \fancyfoot[C]{\songti \zihao{5} ~---~{\thepage}~---~} % 首页页脚格式
}


 % 中文摘要
 \newenvironment{abstract}
 {
  \cleardoublepage
  \chapter{\BIT@label@abstract}
 }
 {}
% 下一页从偶数页开始
 \newcommand\beginatevenpage{
 \clearpage
  \if@twoside
    \thispagestyle{empty}
    \cleardoublepage
  \fi
 }
 % 中文关键词
 \newcommand\keywords[1]{%
   \vspace{2ex}\noindent{\bf \BIT@label@keywords} #1}

 % 英文摘要
 \newenvironment{englishabstract}
 {
  \clearpage
  \chapter{\BIT@label@englishabstract}
 }
 {}

 % 英文摘要
 \newcommand\englishkeywords[1]{%
  \vspace{2ex}\noindent{\bf \BIT@label@englishkeywords} #1}


% 目录
\renewcommand\tableofcontents{%
  \if@twocolumn
  \@restonecoltrue\onecolumn
  \else
  \@restonecolfalse
  \fi
  \chapter*{\contentsname}% 目录里显示“目录”，否则\chapter*
  \@mkboth{\MakeUppercase\contentsname}{\MakeUppercase\contentsname}%
  \pdfbookmark[0]{目录}{bittoc}
  \@starttoc{toc}%
  \if@restonecol\twocolumn\fi
}


% 参考文献环境
\renewenvironment{thebibliography}[1]
     {\zihao{5}
      \chapter*{\bibname}
      \@mkboth{\MakeUppercase\bibname}{\MakeUppercase\bibname}%
      \addcontentsline{toc}{chapter}{参考文献}
      \list{\@biblabel{\@arabic\c@enumiv}}%
           {\settowidth\labelwidth{\@biblabel{#1}}%
            \leftmargin\labelwidth
            \advance\leftmargin\labelsep
            \setlength{\parsep}{1mm}
            \setlength{\labelsep}{0.5em}
            \setlength{\itemsep}{0.05pc}
            \setlength{\listparindent}{0in}
            \setlength{\itemindent}{0in}
            \setlength{\rightmargin}{0in}
            \@openbib@code
            \usecounter{enumiv}%
            \let\p@enumiv\@empty
            \renewcommand\theenumiv{\@arabic\c@enumiv}}%
      \sloppy
      \clubpenalty4000
      \@clubpenalty \clubpenalty
      \widowpenalty4000%
      \sfcode`\.\@m}
     {\def\@noitemerr
       {\@latex@warning{Empty `thebibliography' environment}}%
      \endlist}


\newenvironment{publications}[1]
     {\chapter{\BIT@label@publications}%
      \@mkboth{\MakeUppercase\BIT@label@publications}
              {\MakeUppercase\BIT@label@publications}%
      \list{\@biblabel{\@arabic\c@enumiv}}%
           {\settowidth\labelwidth{\@biblabel{#1}}%
            \leftmargin\labelwidth
            \advance\leftmargin\labelsep
            \setlength{\parsep}{1mm}
            \setlength{\labelsep}{0.5em}
            \setlength{\itemsep}{0.05pc}
            \setlength{\listparindent}{0in}
            \setlength{\itemindent}{0in}
            \setlength{\rightmargin}{0in}
            \@openbib@code
            \usecounter{enumiv}%
            \let\p@enumiv\@empty
            \renewcommand\theenumiv{\@arabic\c@enumiv}}%
      \sloppy
      \clubpenalty4000
      \@clubpenalty \clubpenalty
      \widowpenalty4000%
      \sfcode`\.\@m}
     {\def\@noitemerr
       {\@latex@warning{Empty `publications' environment}}%
      \endlist}


\newenvironment{projects}[1]
     {\chapter{\BIT@label@projects}%
      \@mkboth{\MakeUppercase\BIT@label@projects}
              {\MakeUppercase\BIT@label@projects}%
      \list{\@biblabel{\@arabic\c@enumiv}}%
           {\settowidth\labelwidth{\@biblabel{#1}}%
            \leftmargin\labelwidth
            \advance\leftmargin\labelsep
            \@openbib@code
            \usecounter{enumiv}%
            \let\p@enumiv\@empty
            \renewcommand\theenumiv{\@arabic\c@enumiv}}%
      \sloppy
      \clubpenalty4000
      \@clubpenalty \clubpenalty
      \widowpenalty4000%
      \sfcode`\.\@m}
     {\def\@noitemerr
       {\@latex@warning{Empty `projects' environment}}%
      \endlist}

    \newenvironment{resume}
  {\chapter{\BIT@label@resume}}
  {}

\newenvironment{resumesection}[1]
  {{\noindent\normalfont\bfseries #1}
   \list{}{\labelwidth\z@
           \leftmargin 2\ccwd}
   \item\relax}
   {\endlist}

\newenvironment{resumeli}[1]
  {{\noindent\normalfont\bfseries #1}
   \list{}{\labelwidth\z@
           \leftmargin 4\ccwd
           \itemindent -2\ccwd
           \listparindent\itemindent}
   \item\relax}
   {\endlist}

\newenvironment{conclusion}
  {\chapter*{结论}
    \@mkboth{结论}{结论}%
    \addcontentsline{toc}{chapter}{结论}}
  {}

\renewenvironment{thanks}
  {\chapter{\BIT@label@thanks}
  \fangsong
  }
  {}

\newenvironment{symbolnote}
  {\chapter{\BIT@label@symbolnote}
  \fangsong}
  {}

  %% ===========================术语=====================
  \newcommand{\bit@denotation@name}{主要符号对照表}
  \newenvironment{denotation}[1][2.5cm]{
      \chapter{\bit@denotation@name} % no tocline
      \noindent\begin{list}{}%
      {\vskip-30bp\zihao{-4}
       \renewcommand\makelabel[1]{##1\hfil}
       \setlength{\labelwidth}{#1} % 标签盒子宽度
       \setlength{\labelsep}{0.5cm} % 标签与列表文本距离
       \setlength{\itemindent}{0cm} % 标签缩进量
       \setlength{\leftmargin}{\labelwidth+\labelsep} % 左边界
       \setlength{\rightmargin}{0cm}
       \setlength{\parsep}{0cm} % 段落间距
       \setlength{\itemsep}{0cm} % 标签间距
      \setlength{\listparindent}{0cm} % 段落缩进量
      \setlength{\topsep}{0pt} % 标签与上文的间距
     }}{\end{list}}
% ====增加化学、国际单位宏包
     \RequirePackage[version=4]{mhchem}
     \RequirePackage{siunitx}
\setcounter{secnumdepth}{4}  % 章节编号深度 (part 对应 -1)
\setcounter{tocdepth}{2}     % 目录深度 (part 对应 -1)
%% =========================================================
%    \end{macrocode}
%    \begin{macrocode}
%</graduate>
%    \end{macrocode}
%
% \iffalse
%<*dtx-style>
\ProvidesPackage{dtx-style}
\RequirePackage{hypdoc}
\RequirePackage{ifthen}
\RequirePackage{fontspec}
\RequirePackage{amsmath}
\RequirePackage{unicode-math}
\RequirePackage[UTF8,scheme=chinese,heading,sub3section]{ctex}
\RequirePackage[
  top=2.5cm, bottom=2.5cm,
  left=5cm, right=2cm,
  headsep=3mm]{geometry}
\RequirePackage{graphicx}
\RequirePackage{multirow}
\RequirePackage{wrapfig}
\RequirePackage{hologo}
\RequirePackage{array,longtable,booktabs}
\RequirePackage{listings}
\RequirePackage{fancyhdr}
\RequirePackage[dvipsnames]{xcolor}
\RequirePackage{awesomebox}
% \RequirePackage{etoolbox}
\RequirePackage{dirtree}
\RequirePackage{metalogo}
\RequirePackage[tightLists=false]{markdown}
\RequirePackage{caption}
\RequirePackage{tikz}
\usetikzlibrary{positioning}
\RequirePackage{framed}
\RequirePackage{menukeys}
\RequirePackage{float}
\RequirePackage{subfig}

 % 设置列表无间隔
\usepackage{enumitem}
\setlist{nosep}

\markdownSetup{
  renderers = {
    link = {\href{#2}{#1}},
  }
}

\hypersetup{
  pdflang     = zh-CN,
  pdftitle    = {BIThesis：北京理工大学学位论文及报告模板},
  pdfauthor   = {冯开宇},
  pdfsubject  = {北京理工大学学位论文及报告模板使用说明},
  pdfkeywords = {论文模板; 北京理工大学; 使用说明},
  pdfdisplaydoctitle = true
}%

\newcommand{\BIThesisLaTeX}{{\BIThesis}北京理工大学学位论文及报告{\LaTeX}模板}
\newcommand{\BIThesisMacroPackage}{{\BIThesis}宏包}
\newcommand{\BIThesisWiki}{{\BIThesis}在线文档}
\newcommand{\BIThesisScaffold}{{\BIThesis}模板}
\newcommand{\BIThesisRelease}{{\BIThesis}模板}
\newcommand{\LPPL}{{\href{https://www.latex-project.org/lppl/lppl-1-3c.txt}{\LaTeX{} Project Public License (1.3.c)}}}
\newcommand{\versionold}{v2.0 BirthdayCake}
\newcommand{\version}{v3 Summer Time}

\ExplSyntaxOn

\AtBeginEnvironment { bitsyntax } {
  \cs_set:Npn \lparen { \textup { ( } }
  \cs_set:Npn \rparen { \textup { ) } }
  \char_set_catcode_active:N |
  \char_set_catcode_active:N <
  \char_set_catcode_active:N (
  \char_set_active_eq:NN | \orbar
  \char_set_active_eq:NN < \syntaxopt@aux
  \char_set_active_eq:NN ( \defaultval@aux
}

\NewDocumentCommand \BIThesisTemplates {m} {
  \str_case:nn {#1} {
    {UT}{本科生毕业论文模板（undergraduate-thesis）}
    {UTE}{本科生全英文专业毕业论文模板（undergraduate-thesis-en）}
    {GT}{研究生学位论文模板（graduate-thesis）}
    {LR}{简易使用报告模板（lab-report）}
    {PT}{本科生毕业设计外文翻译模板（paper-translation）}
    {PS}{北理工主题的 Beamer 模板（presentation-slide）}
    {UP}{本科生毕业设计开题报告（undergraduate-proposal）}
  }
}

% 允许换行的细间距。
\def\breakablethinspace{\hskip 0.16667em\relax}


\DeclareDocumentCommand\kvopt{mm}
  {\texttt{#1\breakablethinspace=\breakablethinspace#2}}

\ExplSyntaxOff

\ctexset{
  today=big,
  abstractname=简介,
}

\pagestyle{fancy}

\ctexset{section={
  format={\raggedright \bfseries \zihao{-3}},
  name = {第,章}
  }
}

\ctexset{subsection={
  format = {\bfseries \raggedright \zihao{4}}
  }
}



\ifthenelse{\equal{\@nameuse{g__ctex_fontset_tl}}{mac}}{
  \setmainfont{Palatino}
  \setsansfont[Scale=MatchLowercase]{Helvetica}
  \setmonofont[Scale=MatchLowercase]{Menlo}
  \xeCJKsetwidth{‘’“”}{1em}
}{
  \setmainfont[
    Extension      = .otf,
    UprightFont    = *-regular,
    BoldFont       = *-bold,
    ItalicFont     = *-italic,
    BoldItalicFont = *-bolditalic,
  ]{texgyrepagella}
  \setsansfont[
    Extension      = .otf,
    UprightFont    = *-regular,
    BoldFont       = *-bold,
    ItalicFont     = *-italic,
    BoldItalicFont = *-bolditalic,
  ]{texgyreheros}
  \setmonofont[
    Extension      = .otf,
    UprightFont    = *-regular,
    BoldFont       = *-bold,
    ItalicFont     = *-italic,
    BoldItalicFont = *-bolditalic,
    Scale          = MatchLowercase,
    Ligatures      = CommonOff,
  ]{texgyrecursor}
}
\unimathsetup{
  math-style=ISO,
  bold-style=ISO,
}
\IfFontExistsTF{XITSMath-Regular.otf}{
  \setmathfont[
    Extension    = .otf,
    BoldFont     = XITSMath-Bold,
    StylisticSet = 8,
  ]{XITSMath-Regular}
  \setmathfont[range={cal,bfcal},StylisticSet=1]{XITSMath-Regular.otf}
}{
  \setmathfont[
    Extension    = .otf,
    BoldFont     = *bold,
    StylisticSet = 8,
  ]{xits-math}
  \setmathfont[range={cal,bfcal},StylisticSet=1]{xits-math.otf}
}

\colorlet{bit@macro}{blue!60!black}
\colorlet{bit@env}{blue!70!black}
\colorlet{bit@option}{purple}
\patchcmd{\PrintMacroName}{\MacroFont}{\MacroFont\bfseries\color{bit@macro}}{}{}
\patchcmd{\PrintDescribeMacro}{\MacroFont}{\MacroFont\bfseries\color{bit@macro}}{}{}
\patchcmd{\PrintDescribeEnv}{\MacroFont}{\MacroFont\bfseries\color{bit@env}}{}{}
\patchcmd{\PrintEnvName}{\MacroFont}{\MacroFont\bfseries\color{bit@env}}{}{}

\def\DescribeOption{%
  \leavevmode\@bsphack\begingroup\MakePrivateLetters%
  \Describe@Option}
\def\Describe@Option#1{\endgroup
  \marginpar{\raggedleft\PrintDescribeOption{#1}}%
  \bit@special@index{option}{#1}\@esphack\ignorespaces}
\def\PrintDescribeOption#1{\strut \MacroFont\bfseries\sffamily\color{bit@option} #1\ }
\def\bit@special@index#1#2{\@bsphack
  \begingroup
    \HD@target
    \let\HDorg@encapchar\encapchar
    \edef\encapchar usage{%
      \HDorg@encapchar hdclindex{\the\c@HD@hypercount}{usage}%
    }%
    \index{#2\actualchar{\string\ttfamily\space#2}
           (#1)\encapchar usage}%
    \index{#1:\levelchar#2\actualchar
           {\string\ttfamily\space#2}\encapchar usage}%
  \endgroup
  \@esphack}

\lstdefinestyle{lstStyleBase}{%
   basicstyle=\small\ttfamily,
   aboveskip=\medskipamount,
   belowskip=\medskipamount,
   lineskip=0pt,
   boxpos=c,
   showlines=false,
   extendedchars=true,
   escapeinside  = {(*}{*)},
   upquote=true,
   tabsize=2,
   showtabs=false,
   showspaces=false,
   showstringspaces=false,
   numbers=none,
   linewidth=\linewidth,
   xleftmargin=4pt,
   xrightmargin=0pt,
   resetmargins=false,
   breaklines=true,
   breakatwhitespace=false,
   breakindent=0pt,
   breakautoindent=true,
   columns=flexible,
   keepspaces=true,
   gobble=4,
   framesep=3pt,
   rulesep=1pt,
   framerule=1pt,
   backgroundcolor=\color{gray!5},
   stringstyle=\color{green!40!black!100},
   keywordstyle=\bfseries\color{blue!50!black},
   commentstyle=\slshape\color{black!60}}

\lstdefinestyle{lstStyleShell}{%
   style=lstStyleBase,
   frame=l,
   rulecolor=\color{purple},
   language=bash,
}

\lstdefinestyle{lstStyleLaTeX}{%
   style=lstStyleBase,
   frame=l,
   rulecolor=\color{violet},
   language=[LaTeX]TeX,
   emphstyle=[1]\color{teal},
}

\lstdefinestyle{lstStyleSyntax}{%
   style=lstStyleBase,
   frame=l,
   rulecolor=\color{violet},
   language=[LaTeX]TeX,
   emphstyle=[1]\color{teal},
}

\lstnewenvironment{latex}[1][]{\lstset{style=lstStyleLaTeX, #1}}{}
\lstnewenvironment{shell}{\lstset{style=lstStyleShell}}{}
\lstnewenvironment{bitsyntax}[1][]{\lstset{style=lstStyleSyntax, #1}}{}

\def\orbar{\textup{\textbar}}
\def\syntaxopt#1{\textit{#1}}
\def\defaultval#1{\textbf{\textup{#1}}}
\def\syntaxopt@aux#1>{\syntaxopt{#1}}
\def\defaultval@aux#1){\defaultval{#1}}


\setlist{nosep}

\DeclareDocumentCommand{\option}{m}{\textsf{#1}}
\DeclareDocumentCommand{\env}{m}{\texttt{#1}}
\newcommand{\myentry}[1]{%
  \marginpar{\raggedleft\color{purple}\bfseries\strut #1}}
\newcommand{\note}[2][Note]{{%
  \color{magenta}{\bfseries #1}\emph{#2}}}

\DeclareDocumentCommand{\githubuser}{m}{\href{https://github.com/#1}{@#1}}


  % 设置 caption 与 figure 之间的距离
\setlength{\abovecaptionskip}{11pt}
\setlength{\belowcaptionskip}{9pt}

  % 设置图片的 caption 格式
\renewcommand{\thefigure}{\thesection-\arabic{figure}}
\captionsetup[figure]{font=small,labelsep=space}

  % 设置表格的 caption 与 table 之间的垂直距离
\captionsetup[table]{skip=2pt}

  % 设置表格的 caption 格式
\renewcommand{\thetable}{\thesection-\arabic{table}}
\captionsetup[table]{font=small,labelsep=space}

  % 定义 BIThesis \LaTeX 风格的 Logo
\usepackage{relsize}
\makeatletter
\def\matex@ssize{\larger[-1]\scshape}
\DeclareRobustCommand{\BIThesis}{
  \mbox{
    \kern-0.5em{B}\kern-0.05em
    {I}\kern-0.05em
    {T}\kern-0.1em
    \raisebox{-0.38ex}{\matex@ssize {H}}\kern-0.1em
    {\matex@ssize {E}}\kern-0.05em
    \raisebox{-0.38ex}{\matex@ssize {S}}\kern-0.05em
    {\matex@ssize {I}}\kern-0.05em
    \raisebox{-0.35ex}{\matex@ssize {S}}\kern-0.5em
    \kern 1ex
   }
}

\makeatother

%</dtx-style>
% \fi
%
%
% \Finale
\endinput
% \iffalse
%  Local Variables:
%  mode: doctex
%  TeX-master: t
%  End:
% \fi

