% \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-09-03}{3.0.0}{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/09/03 3.0.0 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
%   此宏包旨在建立一个简单易用的北京理工大学学位论文模板（以及其他模板），包括本科毕业设计与研究生论文。
% \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}）的标准。
% 目前主要设计完成了计算机学院本科生毕业论文开题报告、毕业设计毕业论文与通用实验报告的 {\LaTeX} 模板。
%
% \end{abstract}
% \newpage
%
% \tableofcontents
% \clearpage
% \setlength{\parskip}{0.8ex}
%
% \section{项目简介}
% \subsection{历史与贡献者们}
% \begin{itemize}
%   \item 2017 - 2018 年，杨雅婷等人受研究生院委托，制作了\href{https://github.com/BIT-thesis/LaTeX-template}{BIT-Thesis} 研究生学位论文模板。
%   \item 2019 - 2020 年，\BIThesis 最早由 2016 级的武上博、王赞、唐誉铭、牟思睿和詹熠莎等人维护。
%   \begin{itemize}
%     \item 在此期间，\BIThesis 从无到有诞生了，包括使用手册、在线文档和开箱即用的模板。
%     \item 同时，2017 级的赵池等同学完成了一系列 \BIThesisLaTeX 的视频教程。
%   \end{itemize}
%   \item 2020 - 2021 年，2017 级的冯开宇、杨思云、郝正亮和顾骁等人接管了维护开发工作。
%   \begin{itemize}
%     \item 在此期间，冯开宇将原来的 .tex 文件制作成了宏包，并发布到 CTAN 上。
%     \item 项目代码也随之被拆分成了 \BIThesisMacroPackage，\BIThesisWiki 和 \BIThesisScaffold。
%   \end{itemize}
%   \item 2021 - 2022 年，2021 级（硕士研究生）的冯开宇针对 2021、2022 毕业季收到的反馈对该项目进行维护升级。
%   \begin{itemize}
%      \item 在此期间，冯开宇合入了杨雅婷等人在 2017 年开发的研究生学位论文模板。
%      \item 在项目架构上，BIThesis-scaffold 合入 BIThesis 以便于进一步维护。 
%      \item 次年暑假期间，冯开宇用 \pkg{expl3} 重构了\LaTeX 样式代码，向用户提供了简易易用的接口。
%      \item 同时，也增加了本科全英文专业的毕设论文模板样式。
%   \end{itemize}
% \end{itemize}
% \subsection{\BIThesis 是什么？}
% \BIThesis 之名是英文单词 Beijing Institution of Technology（北京理工大学）的首字母缩写“BIT” 与“Thesis”结合而成。在纯文本环境下，该名字应写作“BIThesis”。
%
% \BIThesisLaTeX 是由北京理工大学众多学子发起并维护的开源项目。该项目旨在建立一套简单易用的北京理工大学 \LaTeX 学位论文模板，包括本科综合论文训练。
% \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 宏包的组成}
% 为了适应用户的不同需求，并符合 CTeX 宏集的设计习惯，我们将 \BIThesisMacroPackage 的主要功能设计安排在两个中文文档类当中，具体的组成见 \ref{tab:classes}。
% \begin{table}[H]
% \centering
% \caption{测试}
% \label{tab:classes}
% \begin{tabular}{@{}lll@{}}
% \toprule
% 类别                   & 文件          & 说明                             \\ \midrule
% \multirow{2}{*}{文档类} & \cls{bithesis.cls}  & 封装本科生与研究生的毕业论文样式。 \\
%                    & \cls{bitreport.cls} & 封装了本科生开题报告与实验报告样式。     \\ \cmidrule(l){2-3}
%                    & \cls{bitbeamer.cls} & 对应 ctexbeamer.cls ，提供了北理工的 Beamer 模板样式。     \\ \cmidrule(l){2-3}
% \end{tabular}
% \end{table}
%
% \section{安装}
% \subsection{\BIThesis 宏包的安装和更新}
% 最常见的 \TeX 发行版（\hologo{TeX} Live 和 \hologo{MiKTeX})已收录\BIThesisMacroPackage 及其依赖的宏包和宏集。
%
% 如果安装以上发行版的时间较早，可能你本地的环境中不存在 \BIThesisMacroPackage 或者不是最新版本的。那么你需要通过包管理器来安装/更新 \BIThesisMacroPackage：
% \begin{shell}[morekeywords={tlmgr,install}]
%   tlmgr install fduthesis
% \end{shell}
%
% 更新可以通过图形界面进行，或者通过命令行：
% \begin{shell}[morekeywords={tlmgr,install}]
%   tlmgr update fduthesis
% \end{shell}
%
% \section{\cls{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|docter>*)
%   \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。
% \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/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/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}
%
% \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}
% \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}{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,addtocategory,printbibliography}]
%     \begin{publications}
%       \nocite{\meta{引用内容的key}}
%       \addtocategory{mypub}{\meta{引用内容的key}}
%       \printbibliography[heading=none,category=mypub,resetnumbers=true]
%     \end{publications}
%   \end{bitsyntax}
%
%   攻读学位期间发表论文与研究成果清单。
% \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{\cls{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。
% \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 的支持。
%   \item 感谢清华大学和复旦大学的学位论文模板项目，他们为后来者提供了前进的方向。
% \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}

%    \begin{macrocode}
%<*thesis>
%    \end{macrocode}

% Define Global Variables
%    \begin{macrocode}
\int_new:N \g_@@_thesis_type_int
\int_new:N \g_@@_head_zihao_int
\bool_new:N \g_@@_twoside_bool
\bool_new:N \g_@@_thesis_type_english_bool
\bool_new:N \g_@@_blind_mode_bool
\tl_new:N \g_@@_label_divide_char_tl

% \bool_new:N \l_@@_cover_auto_width_bool
% \bool_set_true:N \l_@@_cover_auto_width_bool
%
% Define tmp Variables
\seq_new:N \l_@@_right_seq
\seq_new:N \l_@@_left_seq

% helper functions

\cs_generate_variant:Nn \tl_if_empty:nTF {x}
\cs_generate_variant:Nn \seq_set_split:Nnn {Nnx}

\cs_new:Npn \@@_same_page: {
  \let\clearpage\relax
  \let\cleardoublepage\relax
}

% 是否为研究生学位论文
\cs_new:Npn \@@_if_graduate:TF #1#2 {
    \int_compare:nNnTF {3} < {\g_@@_thesis_type_int}
      {#1}
      {#2}
  }

% 是否某一特定模板
\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} {}}

% 是否为英文模板，这里包括全英文专业和研究生模板的英文模式。
\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}{}}

\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}}

% Define Consts.
\clist_const:Nn \c_@@_thesis_type_clist
    { bachelor, bachelor_translation, bachelor_english, master, docter}

\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}
  }

\clist_map_inline:nn
  {
    {code} {代码},
    {udc} {UDC分类号：},
    {classification} {中国分类号：},
    {classified_level} {密级},
    {type} {种类},
  }
  {\@@_define_label:nn #1}

% bachelor
\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}

% % bachelor english
\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}

\cs_new:Npn \smallgap: {
  \hspace{0.45ex}
}

\cs_new:Npn \label_space: {
  \@@_if_bachelor_thesis:T {
    \quad
  }
}

% graduate
\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}

\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}

\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}

% TODO: \clist_item:Nn
\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,
  }


% key-value interface definition.
\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},
}

\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,
}

\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,
    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 },
  }

\keys_define:nn { bithesis / info }
  {
    title .tl_set:N = \l_@@_value_title_tl,
    titleEn .tl_set:N = \l_@@_value_title_en_tl,
    school .tl_set:N = \l_@@_value_school_tl,
    major .tl_set:N = \l_@@_value_major_tl,
    author .tl_set:N = \l_@@_value_author_tl,
    studentId .tl_set:N = \l_@@_value_student_id_tl,
    supervisor .tl_set:N = \l_@@_value_supervisor_tl,
    externalSupervisor .tl_set:N = \l_@@_value_external_supervisor_tl,
    keywords .tl_set:N = \l_@@_value_keywords_tl,
    keywordsEn .tl_set:N = \l_@@_value_keywords_en_tl,
    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,
    % UDC 分类号，研究生学位论文使用
    UDC .tl_set:N = \l_@@_value_udc_tl,
    chairman .tl_set:N = \l_@@_value_chairman_tl,
    degree .tl_set:N = \l_@@_value_degree_tl,
    degreeEn .tl_set:N = \l_@@_value_degree_en_tl,
    institute .tl_set:N = \l_@@_value_institute_tl,
    institute .initial:n = {\c_@@_label_university_tl},
    defenseDate .tl_set:N = \l_@@_value_defense_date_tl,
    authorEn .tl_set:N = \l_@@_value_author_en_tl,
    schoolEn .tl_set:N = \l_@@_value_school_en_tl,
    supervisorEn .tl_set:N = \l_@@_value_supervisor_en_tl,
    chairmanEn .tl_set:N = \l_@@_value_chairman_en_tl,
    majorEn .tl_set:N = \l_@@_value_major_en_tl,
    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,
    classifiedLevel .tl_set:N = \l_@@_value_classified_level_tl,
  }

\keys_define:nn { bithesis / misc }
  {
    arialFont .tl_set:N = \l_@@_misc_arial_font_path_tl,
  }

\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} {北京理工大学博士学位论文}
    }
  },
}

\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},
}

\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,
}

\ProcessKeysOptions { bithesis / option }

\@@_if_thesis_english:T {
  \PassOptionsToClass{scheme=plain}{ctexbook}
}

\bool_if:NTF \g_@@_twoside_bool {} {
  \PassOptionsToClass{oneside,openany}{ctexbook}
}


% Any extra option passed by user will be passed to ctexbook.
\DeclareOption*{
  \PassOptionsToClass{\l_@@_options_to_ctex_tl}{ctexbook}
}
% Executes the code for each option.
\ProcessOptions\relax
% Load
\LoadClass[zihao=-4,]{ctexbook}

\RequirePackage{geometry}
\RequirePackage{xeCJK}
\RequirePackage{titletoc}
\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{amsthm}
\RequirePackage{unicode-math}
\RequirePackage{pdfpages}
\RequirePackage{listings}
\RequirePackage{enumitem}
\RequirePackage{environ}

% Suppress warning for \hskip by hyperref.
\pdfstringdefDisableCommands{%
  \let\quad\empty  
}

\@@_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 = 3.5cm + 7bp - 2.5cm - 15bp,
    headheight = 15 bp,
    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 = 3.5cm + 7bp - 2.4cm - 20bp,
    headheight = 20 bp,
    footskip = 2.6cm + 7bp - 2cm,
  }
}

% One blank line before the figure and after the caption.
\setlength{\intextsep}{2\baselineskip plus 0.2\baselineskip minus 0.2\baselineskip}

\setromanfont{Times~New~Roman}

\ctex_at_end_preamble:n {
  \@@_if_thesis_english:TF {
    \@@_if_thesis_int_type:nT {3} {
      % font Arial 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}
  }
}

\cs_new:Npn \xihei:n #1 {
  \xeCJK_family_if_exist:nTF {xihei} {
    \CJKfamily{xihei} #1
  }{
    \heiti #1
  }
}

\cs_new:Npn \l_@@_title_font_cs:n #1 {
  \int_compare:nNnTF {\g_@@_thesis_type_int} = {3}
  {
    \arialfamily #1
  } {
    \heiti #1
  }
}

\cs_new:Npn \l_@@_unnumchapter_style_cs:n #1 {
  % 本科全英文、研究生学位论文需要加粗
  \int_compare:nNnTF {\g_@@_thesis_type_int} > {2}
  {
    \bfseries #1
  } {
    \mdseries #1
  }
}

\cs_set:Npn \arabicHeiti #1 {#1}

% TODO: custom title
\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}
}

\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,
  }
}

% TOC
\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}
}
\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}

% \bool_new:N \l_@@_add_to_toc_bool
% \bool_set_true:N \l_@@_add_to_toc_bool
%
% \keys_define:nn { bit }
%   {
%     abstract .meta:nn = { bit / abstract } {#1},
%     abstract_en .meta:nn = { bit / abstract_en } {#1},
%     symbols .meta:nn = { bit / symbols } {#1},
%     appendices .meta:nn = { bit / appendices } {#1},
%   }
%
% \keys_define:nn { bit / abstract }
%   {
%     addTOC .bool_set:N = \l_@@_add_to_toc_bool,
%   }
%
% \keys_define:nn { bit / abstract_en }
%   {
%     addTOC .bool_set:N = \l_@@_add_to_toc_bool,
%   }
%
% \keys_define:nn { bit / symbols }
%   {
%     addTOC .bool_set:N = \l_@@_add_to_toc_bool,
%   }
%
% \keys_define:nn { bit / 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,
%   }

\RenewDocumentCommand \frontmatter {} {

  \int_compare:nNnTF {\g_@@_thesis_type_int} = {3}
  {
    \pagenumbering{roman}
  } {
    \pagenumbering{Roman}
  }
  \ctexset{
    chapter = {
      numbering = false,
    }
  }
  \pagestyle{BIThesis}
}

\RenewDocumentCommand \mainmatter {} {
  \cleardoublepage

  \ctexset{
    chapter = {
      numbering = true,
    }
  }
  \pagenumbering{arabic}
  \pagestyle{BIThesis}
  % 正文 22 磅的行距
  \setlength{\parskip}{0em}
  \setstretch{1.53}
  % 修复脚注出现跨页的问题
  \interfootnotelinepenalty=10000
}

\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,
    }
  }
}

\setlength{\abovecaptionskip}{11pt}
\setlength{\belowcaptionskip}{9pt}

\@@_if_graduate:TF {
  \tl_set:Nn \g_@@_label_divide_char_tl {.}
} {
  \tl_set:Nn \g_@@_label_divide_char_tl {-}
}

% 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}


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

\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
}
% TODO: optional
\lstset{style=examplestyle}

% 调整插图目录与表格目录的标题
\cs_set:Npn \listfigurename {\c_@@_label_figure_tl}
\cs_set:Npn \listtablename {\c_@@_label_table_tl}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% 根据 GB 3102.11--93 以及 ISO 80000-2:2009 的规定，数学表达式中
% 表示变量的拉丁字母和希腊字母均应当使用斜体。
\unimathsetup{
  math-style = ISO,
  bold-style = ISO,
}

% 预定义用户常用的证明环境
\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}}


% user interface.
\DeclareDocumentCommand \BITSetup { m }
  { \keys_set:nn { bithesis } { #1 }}

\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
}

% 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 }

% Get max text width from seq #2, then set to #1.
\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 } }
        }
    \group_end:
  }

% process label (#1) and value #2 separately
\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
}

\cs_new:Npn \@@_render_cover_entry:n #1 {
  \seq_set_from_clist:NN \l_@@_input_seq #1
  % parse newline //
  \seq_map_inline:Nn \l_@@_input_seq {
    \@@_parse_entry ##1
    \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
  }
  

  \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:
}

% #1: position
% #2: line_thickness
% #3: token list
\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}}}}

\NewEnviron{blindPeerReview}{
  \bool_if:NTF \g_@@_blind_mode_bool {} {
    \BODY
  }
}

% 重定义 \tn{cleardoublepage}，使得偶数页面在没有内容时也不显示页眉页脚，见
% \url{https://tex.stackexchange.com/a/1683}。
\RenewDocumentCommand \cleardoublepage { }
  {
    \clearpage
    \bool_if:NT \g_@@_twoside_bool
      {
        \int_if_odd:nF \c@page
          { \hbox:n { } \thispagestyle { empty } \newpage }
      }
  }

\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}
}

\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}\l_@@_value_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}
}

\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}

      % TODO: delete this?
      {\fangsong\zihao{4}}
      \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}
        % 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 {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}
}

\cs_new:Npn \@@_make_english_title_page: {
  \begin{titlepage}
    \begin{center}

    \vspace*{10em}
    {\zihao{-2}\textbf{\l_@@_value_title_en_tl}}
    % \bfseries
    \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}

      % 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 {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}
}

\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 {：}
            }

            % 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}
              } 
            }

            \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}
  }

% 圆形数字编号定义
\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}

\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
}

\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:
}

\NewDocumentCommand \MakePaperBack {}
  {
    \begin{blindPeerReview}
      \make_paper_back:
    \end{blindPeerReview}
  }

\NewDocumentCommand \MakeTitle {}
  {
    \begin{blindPeerReview}
      \@@_make_chinese_title_page:
      \@@_make_english_title_page:
    \end{blindPeerReview}
  }

\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}
      }
    }
  }

  % TODO:
  \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}
      }
    }
    \vspace*{1mm}
    \par
  }
  {
    \par
    \vspace{4ex}\noindent\textbf{\heiti \c_@@_label_keywords_tl \l_@@_value_keywords_tl}\par
    \newpage
  }

  \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}
      }
    }
  }
  {
    \par\vspace{3ex}\noindent\textbf{\c_@@_label_keywords_en_tl \l_@@_value_keywords_en_tl}
    \newpage
  }

% after \backmatter
  \NewDocumentEnvironment {conclusion} {}
  {
    \ctexset{
      section/number = \arabic{section}
    }

    \@@_if_thesis_english:TF {
      \chapter{\c_@@_label_conclusion_en_tl}
    } {
      \chapter{\c_@@_label_conclusion_tl}
    }
  }
  {}

% after backmatter
  \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}
    % 设置参考文献后文缩进为 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}
    }
  }
  {}

  % #1: The name that used as chapter title
  % #2: The name that used in ToC.
  \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}
      \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}
      }
    } {
      \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}
        }
      }
    }
  }
  {
  }

  \NewDocumentEnvironment {acknowledgements} {+b}
  {
    \begin{blindPeerReview}
      \ctexset{
        section/number = \arabic{section},
        subsection/number = \arabic{section}. \arabic{subsection},
      }

      \@@_if_thesis_english:TF {
        \chapter{\c_@@_label_ack_en_tl}
      } {
        \chapter{\c_@@_label_ack_tl}
      }
      #1
    \end{blindPeerReview}
  } {}

  \NewDocumentEnvironment {publications} {+b}
  {
    \begin{blindPeerReview}
      % 设置参考文献字号为 5 号
      \renewcommand*{\bibfont}{\zihao{5}}
      % 设置参考文献各个项目之间的垂直距离为 0
      \setlength{\bibitemsep}{0ex}
      \setlength{\bibnamesep}{0ex}
      \setlength{\bibinitsep}{0ex}
      % 设置单倍行距
      \renewcommand{\baselinestretch}{1.2}
      % 设置参考文献顺序标签 `[1]` 与文献内容 `作者. 文献标题...` 的间距
      \setlength{\biblabelsep}{1.7mm}
      % 设置参考文献后文缩进为 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}
      }

      % ===== 上方定义与「参考文献」部分相同
      \cs_set:Npn \mkbibnamegiven ##1 {
        \ifitemannotation{myself}{\textbf{##1}}{##1}
      }

      \cs_set:Npn \mkbibnamefamily ##1 {
        \ifitemannotation{myself}{\textbf{##1}}{##1}
      }

      % Sorting by year, name, type.
      \newrefcontext[sorting=ynt]
      \chapter{\c_@@_label_publications_tl}
      #1
    \end{blindPeerReview}
  }
  {}

  \NewDocumentEnvironment {resume} {+b}
  {
    \begin{blindPeerReview}
    \chapter{\c_@@_label_resume_tl}
    #1
    \end{blindPeerReview}
  }
  {
  }

  \NewDocumentEnvironment {symbols} {}
  {
    \bool_if:NTF \l_@@_add_symbols_to_toc_bool {
      \chapter{\c_@@_label_symbols_tl}
    } {
      \chapter*{\c_@@_label_symbols_tl}
    }
    \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}
%    \begin{macrocode}
%</thesis>
%    \end{macrocode}

%    \begin{macrocode}
%<*report>
%    \end{macrocode}
%
%    \begin{macrocode}
% Define global
\int_new:N \g_@@_report_type_int

% Define Consts.
\clist_const:Nn \c_@@_report_type_clist
    { common, undergraduate_proposal}

% Define tmp Variables
\seq_new:N \l_@@_right_seq
\seq_new:N \l_@@_left_seq

\PassOptionsToPackage{AutoFakeBold,AutoFakeSlant}{xeCJK}

\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}
  }

\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,
  }


% Pass every option not explicitly defined to `ctexbeamer`.
\DeclareOption*{
  \PassOptionsToClass{\l_@@_options_to_ctex_tl}{ctexart}
}
% Executes the code for each option.
\ProcessOptions\relax
% Load
\LoadClass[zihao=-4]{ctexart}

\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}


\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,
    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 },
  }

\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,
  }

\keys_define:nn { bitreport / misc }
  {
    reviewTable .tl_set:N = \l_bit_reviewtable_tl,
  }

\ProcessKeysOptions { bitreport / option }

\cs_generate_variant:Nn \tl_if_empty:nTF {x}
\cs_generate_variant:Nn \seq_set_split:Nnn {Nnx}

% #1: position
% #2: line_thickness
% #3: token list
\cs_new:Npn \@@_dunderline:nnn #1#2#3 {
  {\setbox0=\hbox{#3}\ooalign{\copy0\cr\rule[\dimexpr#1-#2\relax]{\wd0}{#2}}}
}

\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
}

% 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 }

% Get max text width from seq #2, then set to #1.
\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 } }
        }
    \group_end:
  }

% process label (#1) and value #2 separately
\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
}

\cs_new:Npn \@@_render_cover_entry:n #1 {
  \seq_set_from_clist:NN \l_@@_input_seq #1
  % parse newline //
  \seq_map_inline:Nn \l_@@_input_seq {
    \@@_parse_entry ##1
    \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
  }
  

  \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:
}

\DeclareDocumentCommand \BITSetup { m }
  { \keys_set:nn { bitreport } { #1 }}
\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:
  }

\DeclareDocumentCommand \MakeReviewTable {} 
  {
    \group_begin:
      \begin{titlepage}
        \includepdf[pages=-]{\l_bit_reviewtable_tl}
      \end{titlepage}
    \group_end:
  }

% 定义 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{}
\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}

% 正文开始
\pagestyle{fancy}
\setcounter{page}{1}

% 正文 22 磅的行距，段前段后间距为 0
% \setlength{\parskip}{0em}
\cs_set:Npn \baselinestretch {1.53}
% 正文首行悬挂 1.02cm
% \setlength{\parindent}{1.02cm}
%    \end{macrocode}
%
%    \begin{macrocode}
%</report>
%    \end{macrocode}
%    \begin{macrocode}
%<*beamer>
%    \end{macrocode}
%
%    \begin{macrocode}
% Define our keyvalues
\keys_define:nn { bitbeamer }
  {
    titlegraphic .tl_set:N = \l_bit_titlegraphic_tl,
    framelogo .tl_set:N = \l_bit_framelogo_tl,
  }
\ProcessKeysOptions { bitbeamer }

% Pass every option not explicitly defined to `ctexbeamer`.
\DeclareOption*{
  \PassOptionsToClass{\CurrentOption}{ctexbeamer}
}
% Executes the code for each option.
\ProcessOptions\relax

% Load
\LoadClass{ctexbeamer}

\RequirePackage{xeCJKfntef}
\RequirePackage{tikz}

\usetheme{Madrid}
% 设置主题色
\colorlet{beamer@blendedblue}{green!40!black}

\cs_new:Npn \CJKhl:nn #1 #2
  { \CJKsout*[thickness=2.5ex, format=\color{#1}]{#2} }

% Set header if logo path is provided. 
\tl_if_empty:NF \l_bit_titlegraphic_tl {
  % BIT Logo
  \titlegraphic{
      \includegraphics[width=2cm]{\l_bit_titlegraphic_tl}
  }
}

% Set title logo if logo path is provided.
\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}
  }
}

% Expose command to user.
\cs_new_eq:NN \CJKhl \CJKhl:nn
%    \end{macrocode}
%    \begin{macrocode}
%</beamer>
%    \end{macrocode}

%    \begin{macrocode}
%<*book>
%    \end{macrocode}
%    \begin{macrocode}

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

\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}
%    \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}
%    \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 of file `bitmaster-xetex.cls'.

%% =========================================================

%    \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=简介,
}

\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
