<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">% \iffalse meta-comment
%
% Copyright (C) 2025
% Net Pioneer Association of BIT 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
%    https://www.latex-project.org/lppl/lppl-1-3c.txt
% and the latest version of this license is in
%    https://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
%&lt;cls&gt;\RequirePackage{expl3,l3keys2e}
%&lt;thesis&gt;\ProvidesExplClass{bithesis}
%&lt;report&gt;\ProvidesExplClass{bitreport}
%&lt;beamer&gt;\ProvidesExplClass{bitbeamer}
%&lt;cls&gt;  {2025-05-15} {3.8.5} {BIT Thesis Templates}
%
%&lt;*driver&gt;
\ProvidesFile{bithesis.dtx}[2025/05/15 v3.8.5 BIT Thesis Templates]
\documentclass[letterpaper]{l3doc}
\usepackage{dtx-style}

\DisableCrossrefs

\RecordChanges
\begin{document}
  \DocInput{\jobname-doc.tex}
  \PrintChanges
  \def\indexname{ä»£ç&nbsp;ç´¢å¼•}
  %%%%% \PrintIndex
\end{document}
%&lt;/driver&gt;
% \fi
%
% \section{å®žçŽ°ç»†èŠ‚}
%
%    \begin{macrocode}
%&lt;*package&gt;
%    \end{macrocode}
%
% Identify the internal prefix (\LaTeX3 \pkg{DocStrip} convention).
%    \begin{macrocode}
%&lt;@@=bithesis&gt;
%    \end{macrocode}
%
%    \begin{macrocode}
%&lt;/package&gt;
%    \end{macrocode}
%
% \subsection{bithesis.cls æ–‡æ¡£ç±»}
%
%    \begin{macrocode}
%&lt;*thesis&gt;
%    \end{macrocode}
%
% \subsubsection{å…¨å±€å˜é‡ä¸Žä¸´æ—¶å˜é‡}
%
% å®šä¹‰å…¨å±€å˜é‡ã€‚
% \begin{variable}{\g_@@_thesis_type_int}
% è®ºæ–‡ç±»åž‹ï¼Œå–å€¼ä»Ž 1 å¼€å§‹ï¼Œåˆ†åˆ«å¯¹åº”:
%  \begin{enumerate}
%      \item æœ¬ç§‘ç”Ÿæ¯•ä¸šè®¾è®¡ï¼ˆè®ºæ–‡ï¼‰
%      \item æœ¬ç§‘ç”Ÿæ¯•ä¸šè®¾è®¡ï¼ˆè®ºæ–‡ï¼‰å¤–æ–‡ç¿»è¯‘
%      \item æœ¬ç§‘ç”Ÿå…¨è‹±æ–‡ä¸“ä¸šæ¯•ä¸šè®¾è®¡ï¼ˆè®ºæ–‡ï¼‰
%      \item ç¡•å£«å­¦ä½è®ºæ–‡
%      \item åšå£«å­¦ä½è®ºæ–‡
%  \end{enumerate}
%    \begin{macrocode}
\int_new:N \g_@@_thesis_type_int
%    \end{macrocode}
% \end{variable}
%
% \begin{variable}{\g_@@_head_zihao_int}
% é¡µçœ‰å­—å·ã€‚ç&nbsp;”ç©¶ç”Ÿè®ºæ–‡ä½¿ç”¨ 5 å·å­—ï¼Œæœ¬ç§‘ç”Ÿè®ºæ–‡ä½¿ç”¨ 4 å·å­—ã€‚
%    \begin{macrocode}
\int_new:N \g_@@_head_zihao_int
%    \end{macrocode}
% \end{variable}
%
% \begin{variable}{\g_@@_twoside_bool}
% æ˜¯å¦åŒé¢æ‰“å°ã€‚é»˜è®¤å•é¢æ‰“å°ã€‚
%    \begin{macrocode}
\bool_new:N \g_@@_twoside_bool
%    \end{macrocode}
% \end{variable}
%
% \begin{variable}{\g_@@_thesis_type_english_bool}
% æ˜¯å¦ä¸ºè‹±æ–‡æ¨¡æ¿ã€‚ç›®å‰åªæœ‰æœ¬ç§‘ç”Ÿå…¨è‹±æ–‡ä¸“ä¸šçš„æ¨¡æ¿ä¼šå°†æ­¤å˜é‡è®¾ç½®ä¸º trueã€‚
%    \begin{macrocode}
\bool_new:N \g_@@_thesis_type_english_bool
%    \end{macrocode}
% \end{variable}
%
% \begin{variable}{\g_@@_blind_mode_bool}
% æ˜¯å¦ä¸ºç›²å®¡æ¨¡å¼ã€‚é»˜è®¤ä¸º falseã€‚
%    \begin{macrocode}
\bool_new:N \g_@@_blind_mode_bool
%    \end{macrocode}
% \end{variable}
%
% \begin{variable}{\g_@@_quirks_mode_bool}
% æ˜¯å¦å…¼å®¹æ›´ç¬¦åˆåŒ—ç†å·¥å®˜æ–¹æ¨¡æ¿æˆ–è§„èŒƒï¼Œä½†ä¸å¤ªç¬¦åˆä¸€èˆ¬æŽ’ç‰ˆè¦æ±‚çš„æ¨¡å¼ã€‚é»˜è®¤ä¸º falseã€‚
% ç›®å‰æ­¤é€‰é¡¹åŒ…æ‹¬ï¼š
% \begin{itemize}
%   \item \pkg{biblatex} çš„ä¸“åˆ©æ&nbsp;¼å¼ä¸å†ä½¿ç”¨å›½æ&nbsp;‡æ&nbsp;¼å¼ï¼Œè€Œé‡‡ç”¨åŒ—ç†å·¥è‡ªå®šä¹‰æ&nbsp;¼å¼ã€‚
% \end{itemize}
%    \begin{macrocode}
\bool_new:N \g_@@_quirks_mode_bool
%    \end{macrocode}
% \end{variable}
%
% \begin{variable}{\g_@@_label_divide_char_tl}
% ç”¨äºŽåˆ†éš”æ&nbsp;‡ç­¾çš„å­—ç¬¦ã€‚é»˜è®¤ä¸ºã€Œ-ã€æˆ–è€…ã€Œ.ã€ã€‚
%    \begin{macrocode}
\tl_new:N \g_@@_label_divide_char_tl
%    \end{macrocode}
% \end{variable}
%
% \begin{variable}{\l_@@_right_seq, \l_@@_left_seq}
% å®šä¹‰ä¸´æ—¶å˜é‡ã€‚
%    \begin{macrocode}
\seq_new:N \l_@@_right_seq
\seq_new:N \l_@@_left_seq
%    \end{macrocode}
% \end{variable}
%
% \subsubsection{è¾…åŠ©å‡½æ•°ä¸Žå¸¸é‡}
%
% \begin{macro}[added=2023-05-06,updated=2023-07-04]{\@@_secret_info:nn,\@@_secret_info:N,\@@_secret_info:n}
% æ™®é€šæ¨¡å¼ä¸‹æ˜¾ç¤ºå‚æ•°ä¸€ï¼Œç›²å®¡æ¨¡å¼ä¸‹æ˜¾ç¤ºå‚æ•°äºŒã€‚
% æ—&nbsp;å‚æ•°äºŒæ—¶ï¼Œæ›¿æ¢ä¸ºç­‰é‡ |\g_@@_const_substitute_symbol_tl|ï¼Œæ¢è¡Œä¹Ÿä¼šè¢«æ›¿æ¢ã€‚
% \begin{macrocode}
\cs_new:Npn \@@_hide:n #1 {
  \g_@@_const_substitute_symbol_tl
}

\cs_new:Npn \@@_secret_info:nn #1 #2 {
  \bool_if:NTF \g_@@_blind_mode_bool {
    #2
  } {
    #1
  }
}

\cs_new:Npn \@@_secret_info:N #1 {
  \@@_secret_info:nn {#1} {\tl_map_function:NN #1 \@@_hide:n }
}
\cs_new:Npn \@@_secret_info:n #1 {
  \@@_secret_info:nn {#1} {\tl_map_function:NN {#1} \@@_hide:n }
}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}[added=2025-04-30]{\@@_secret_info_fixed:Nn}
% æ™®é€šæ¨¡å¼ä¸‹æ˜¾ç¤ºå‚æ•°ä¸€ï¼Œç›²å®¡æ¨¡å¼ä¸‹æ˜¾ç¤ºå‚æ•°äºŒä¸ªæ•°çš„ |\g_@@_const_substitute_symbol_tl|ã€‚
% ä¾‹å¤–ï¼šè‹¥å‚æ•°ä¸€ä¸ºç©ºï¼Œä¹Ÿè¾“å‡ºç©ºã€‚è¿™æ&nbsp;·å…è®¸ |\@@_render_cover_entry:nn| éšè—æ­¤é¡¹ã€‚
% ä¸ºäº†å®žçŽ°ä¾‹å¤–ï¼Œå‚æ•°ä¸€å¿…é¡»æ˜¯ N è€Œéž nï¼Œä¸ç„¶éš¾ä»¥æ£€æµ‹æ˜¯å¦çœŸæ­£ä¸ºç©ºã€‚
%
%    \begin{macrocode}
\cs_new:Npn \@@_secret_info_fixed:Nn #1 #2 {
  \tl_if_blank:VF #1 {
    \@@_secret_info:nn {#1} {
      \prg_replicate:nn {#2} {\g_@@_const_substitute_symbol_tl}
    }
  }
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}[added=2023-03-16, updated=2025-04-04]{\@@_get_const:n} èŽ·å–æ&nbsp;‡é¢˜ã€ç«&nbsp;èŠ‚ã€è¡¨æ&nbsp;¼ã€å›¾å½¢ç­‰çš„å¸¸é‡åç§°ã€‚
% ä¼šåŒºåˆ«è‹±æ–‡æ¨¡å¼å’Œä¸­æ–‡æ¨¡å¼ã€‚
%   \begin{macrocode}
\cs_new:Npn \@@_get_const:n #1 {
  \@@_if_thesis_english:TF {
    \use:c {c_@@_label_ #1 _en_tl}
  } {
    \use:c {c_@@_label_ #1 _tl}
  }
}
%   \end{macrocode}
% \end{macro}
%
% \begin{macro}[added=2023-03-16]{\@@_set_english_mode:}
% è®¾ç½®ä¸ºè‹±æ–‡æ¨¡å¼ã€‚
%   \begin{macrocode}
\cs_new:Npn \@@_set_english_mode: {
  \bool_gset_true:N \g_@@_thesis_type_english_bool
}
%   \end{macrocode}
% \end{macro}
%
% \begin{macro}{\tl_if_empty:xTF,\seq_set_split:Nnx}
% ç”Ÿæˆå˜ä½“ã€‚
%    \begin{macrocode}
\cs_generate_variant:Nn \tl_if_empty:nTF {x}
\cs_generate_variant:Nn \seq_set_split:Nnn {Nnx}
%    \end{macrocode}
%
% ä¸ºå…¼å®¹æ—§ç‰ˆç”Ÿæˆå˜ä½“ã€‚
%    \begin{macrocode}
% å…¼å®¹ TeX Live 2022/2023 åŠæ›´æ—©ç‰ˆæœ¬ï¼ˆl3msg ä¸Ž TeX Live å¹¶ä¸åŒæ­¥æ›´æ–°ï¼Œ2023 æ”¯æŒä¸Žå¦å‡æœ‰å¯èƒ½ï¼‰
\cs_if_exist:NF \msg_warning:nnV {
    \cs_generate_variant:Nn \msg_warning:nnn { nnV }
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_warning_footer:n}
% ç”¨ l3msg åˆ›å»ºè­¦å‘Šæ—¶ï¼Œéœ€åŽç¼€çš„å†…å®¹ã€‚
% å‚æ•°å»ºè®®ä¸º âŸ¨messageâŸ©ï¼Œå³ |\msg_new:nnn| ç³»åˆ—å‡½æ•°çš„ç¬¬äºŒä¸ªå‚æ•°ã€‚
%
% ä¹‹æ‰€ä»¥è®¾ç½®æ­¤å‡½æ•°ï¼Œæ˜¯å›&nbsp;ä¸º VS Code æ’ä»¶ LaTeX Workshop æ—&nbsp;æ³•è¯†åˆ«éšæ„æ”¾ç½®çš„ |\msg_line_context:|ï¼Œåªå¥½ä¸“é—¨é€‚é…ã€‚
% https://github.com/James-Yu/LaTeX-Workshop/blob/c62e327b8233e20d61814bfda305811bea1ae83f/src/parse/parser/latexlog.ts#L17
%    \begin{macrocode}
\cs_new:Npn \@@_warning_footer:n #1 {
    â€”The~â€œ#1â€\\warning~on~input~line~\msg_line_number:.
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_same_page:}
% å–æ¶ˆæ¢é¡µã€‚
%    \begin{macrocode}
\cs_new:Npn \@@_same_page: {
  \let\clearpage\relax
  \let\cleardoublepage\relax
}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\@@_if_graduate:TF,\@@_if_graduate:T}
% æ˜¯å¦ä¸ºç&nbsp;”ç©¶ç”Ÿå­¦ä½è®ºæ–‡ã€‚
%    \begin{macrocode}
\cs_new:Npn \@@_if_graduate:TF #1#2 {
    \int_compare:nNnTF {3} &lt; {\g_@@_thesis_type_int}
      {#1}
      {#2}
  }
\cs_new:Npn \@@_if_graduate:T #1 {\@@_if_graduate:TF {#1} {}}
%    \end{macrocode}
% \end{macro}

% \begin{macro}{\@@_if_thesis_int_type:nT,\@@_if_thesis_int_type:nTF}
% æ˜¯å¦æŸä¸€ç‰¹å®šæ¨¡æ¿ã€‚
%    \begin{macrocode}
\cs_new:Npn \@@_if_thesis_int_type:nTF #1#2#3 {\int_compare:nNnTF {\g_@@_thesis_type_int} = {#1} {#2} {#3}}
\cs_new:Npn \@@_if_thesis_int_type:nT #1#2 {\@@_if_thesis_int_type:nTF {#1} {#2} {}}
\cs_new:Npn \@@_if_thesis_int_type:nF #1#2 {\@@_if_thesis_int_type:nTF {#1} {} {#2}}
%    \end{macrocode}
% \end{macro}

% \begin{macro}{\@@_if_thesis_english:T,\@@_if_thesis_english:F,\@@_if_thesis_english:TF}
% æ˜¯å¦ä¸ºè‹±æ–‡æ¨¡æ¿ï¼Œè¿™é‡ŒåŒ…æ‹¬å…¨è‹±æ–‡ä¸“ä¸šå’Œç&nbsp;”ç©¶ç”Ÿæ¨¡æ¿çš„è‹±æ–‡æ¨¡å¼ã€‚
%    \begin{macrocode}
\cs_new:Npn \@@_if_thesis_english:TF #1#2 {\bool_if:nTF {\g_@@_thesis_type_english_bool} {#1} {#2}}
\cs_new:Npn \@@_if_thesis_english:T #1 {\@@_if_thesis_english:TF {#1}{}}
\cs_new:Npn \@@_if_thesis_english:F #1 {\@@_if_thesis_english:TF {}{#1}}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_if_bachelor_thesis:TF,\@@_if_bachelor_thesis:T,\@@_if_master_thesis:TF,\@@_if_doctor_thesis:TF}
% æ˜¯å¦ä¸ºæœ¬ç§‘ã€ç¡•å£«ã€åšå£«å­¦ä½è®ºæ–‡ã€‚
%    \begin{macrocode}
\cs_new:Npn \@@_if_bachelor_thesis:TF #1#2 {\int_compare:nNnTF {\g_@@_thesis_type_int} &lt; {4} {#1} {#2}}
\cs_new:Npn \@@_if_bachelor_thesis:T #1 {\@@_if_bachelor_thesis:TF {#1} {}}
\cs_new:Npn \@@_if_master_thesis:TF #1#2 {\int_compare:nNnTF {\g_@@_thesis_type_int} = {4} {#1} {#2}}
\cs_new:Npn \@@_if_doctor_thesis:TF #1#2 {\int_compare:nNnTF {\g_@@_thesis_type_int} = {5} {#1} {#2}}
%    \end{macrocode}
% \end{macro}
%
% \begin{variable}{\c_@@_thesis_type_clist}
% å®šä¹‰è®ºæ–‡ç±»åž‹çš„åˆ—è¡¨ã€‚
%    \begin{macrocode}
\clist_const:Nn \c_@@_thesis_type_clist
    { bachelor, bachelor_translation, bachelor_english, master, doctor}
%    \end{macrocode}
% \end{variable}
%
% \begin{variable}{\c_@@_publication_modes_clist}
% å®šä¹‰ã€Œæ”»è¯»å­¦ä½æœŸé—´å‘è¡¨è®ºæ–‡ä¸Žç&nbsp;”ç©¶æˆæžœæ¸…å•ã€ç®¡ç†æ–¹å¼ã€‚
%    \begin{macrocode}
\clist_const:Nn \c_@@_publication_modes_clist
    { biblatex, custom }
%    \end{macrocode}
% \end{variable}
%
% \begin{macro}{\@@_define_label:nn,\@@_define_label_by_thesis_type:nnn,\@@_define_label:nnn,\@@_define_label_by_thesis_type:nnnn}
% å®šä¹‰å¸¸é‡ï¼ˆæ&nbsp;‡ç­¾ï¼‰çš„è¾…åŠ©å‡½æ•°ã€‚
%    \begin{macrocode}
\cs_new_protected:Npn \@@_define_label:nn #1#2
  { \tl_const:cn { c_@@_label_ #1 _tl } {#2} }

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

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

\cs_new_protected:Npn \@@_define_label_by_thesis_type:nnnn #1#2#3#4
  {
    \tl_const:cn { c_@@_ #1 _label_ #2 _tl } {#3}
    \tl_const:cn { c_@@_ #1 _label_ #2 _en_tl } {#4}
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_smallgap:}
% æ&nbsp;‡ç­¾æ–‡å­—ä¹‹é—´çš„é—´è·ã€‚
%    \begin{macrocode}
\cs_new:Npn \@@_smallgap: {
  \hspace{0.45ex}
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_boxempty:}
% ç©ºçš„é€‰æ¡†ã€‚
%    \begin{macrocode}
\cs_new:Npn \@@_boxempty:
{
  \makebox[1em][l]
  {
    % ä¸ºä¿è¯ä¸Žæ‰“äº†å‹¾çš„ä¸€è‡´ï¼Œä¹Ÿéœ€å¥—ç›’å­
    \makebox[0pt][l]
    {
      % é»˜è®¤æ¯”åŸºçº¿ç•¥é«˜ï¼Œå‘ä¸‹é™é™
      \raisebox{-1pt}{$\square$}
    }
  }
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_boxcheck:}
% æ‰“äº†å‹¾çš„é€‰æ¡†ã€‚
%    \begin{macrocode}
\cs_new:Npn \@@_boxcheck:
{
  \makebox[1em][l]
  {
    \makebox[0pt][l]
    {
      % é»˜è®¤æ¯”åŸºçº¿ç•¥é«˜ï¼Œå‘ä¸‹é™é™
      \raisebox{-1pt}{$\square$}
    }
    $\checkmark$
  }
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_label_space:}
% æ&nbsp;‡ç­¾ä¸Žå†…å®¹ä¹‹é—´çš„ç©ºç™½é—´è·ã€‚
%    \begin{macrocode}
\cs_new:Npn \@@_label_space: {
  \@@_if_bachelor_thesis:T {
    \quad
  }
}
%    \end{macrocode}
% \end{macro}
%
% \begin{variable}{\c_@@_label_code_tl,\c_@@_label_udc_tl,
%   \c_@@_label_classification_tl,\c_@@_label_classified_level_tl,\c_@@_label_type_tl}
% æ²¡æœ‰å¯¹åº”è‹±æ–‡çš„å¸¸é‡ã€‚
%    \begin{macrocode}
\clist_map_inline:nn
  {
    {code} {ä»£ç&nbsp;},
    {udc} {UDCåˆ†ç±»å·ï¼š},
    {classification} {ä¸­å›¾åˆ†ç±»å·ï¼š},
    {classified_level} {å¯†çº§},
    {type} {ç§ç±»},
    {special_type} {å­¦ç”Ÿç±»åž‹},
    {engineering_special_plan} {å·¥ç¨‹ç¡•åšå£«ä¸“é¡¹},
    {cross_research} {äº¤å‰ç&nbsp;”ç©¶æ–¹å‘},
    {international_student_ugp} {æ”¿åºœé¡¹ç›®ç•™å­¦ç”Ÿ},
  }
  {\@@_define_label:nn #1}
%    \end{macrocode}
% \end{variable}
%
% \begin{variable}{\c_@@_bachelor_label_xxx_tl}
% æœ¬ç§‘æ¯•è®¾çš„å¸¸é‡ã€‚
%    \begin{macrocode}
\clist_map_inline:nn
  {
    {originality} {åŽŸåˆ›æ€§å£°æ˜Ž},
    {originality_clause} {æœ¬äººéƒ‘é‡å£°æ˜Žï¼šæ‰€å‘ˆäº¤çš„æ¯•ä¸šè®¾è®¡ï¼ˆè®ºæ–‡ï¼‰ï¼Œ
    æ˜¯æœ¬äººåœ¨æŒ‡å¯¼è€å¸ˆçš„æŒ‡å¯¼ä¸‹ç‹¬ç«‹è¿›è¡Œç&nbsp;”ç©¶æ‰€å–å¾—çš„æˆæžœã€‚é™¤æ–‡ä¸­å·²ç»æ³¨æ˜Žå¼•ç”¨çš„å†…å®¹å¤–ï¼Œ
    æœ¬æ–‡ä¸åŒ…å«ä»»ä½•å…¶ä»–ä¸ªäººæˆ–é›†ä½“å·²ç»å‘è¡¨æˆ–æ’°å†™è¿‡çš„ç&nbsp;”ç©¶æˆæžœã€‚
    å¯¹æœ¬æ–‡çš„ç&nbsp;”ç©¶åšå‡ºé‡è¦è´¡çŒ®çš„ä¸ªäººå’Œé›†ä½“ï¼Œå‡å·²åœ¨æ–‡ä¸­ä»¥æ˜Žç¡®æ–¹å¼æ&nbsp;‡æ˜Žã€‚\par~ç‰¹æ­¤ç”³æ˜Žã€‚},
    {authorization} {å…³äºŽä½¿ç”¨æŽˆæƒçš„å£°æ˜Ž},
    {authorization_clause} {æœ¬äººå®Œå…¨äº†è§£åŒ—äº¬ç†å·¥å¤§å­¦æœ‰å…³ä¿ç®¡ã€ä½¿ç”¨æ¯•ä¸šè®¾è®¡ï¼ˆè®ºæ–‡ï¼‰çš„è§„å®šï¼Œ
    å…¶ä¸­åŒ…æ‹¬ï¼š\circled{1}~å­¦æ&nbsp;¡æœ‰æƒä¿ç®¡ã€å¹¶å‘æœ‰å…³éƒ¨é—¨é€äº¤æœ¬æ¯•ä¸šè®¾è®¡ï¼ˆè®ºæ–‡ï¼‰çš„åŽŸä»¶ä¸Žå¤å°ä»¶ï¼›
    \circled{2}~å­¦æ&nbsp;¡å¯ä»¥é‡‡ç”¨å½±å°ã€ç¼©å°æˆ–å…¶å®ƒå¤åˆ¶æ‰‹æ®µå¤åˆ¶å¹¶ä¿å­˜æœ¬æ¯•ä¸šè®¾è®¡ï¼ˆè®ºæ–‡ï¼‰ï¼›
    \circled{3}~å­¦æ&nbsp;¡å¯å…è®¸æœ¬æ¯•ä¸šè®¾è®¡ï¼ˆè®ºæ–‡ï¼‰è¢«æŸ¥é˜…æˆ–å€Ÿé˜…ï¼›\circled{4}~å­¦æ&nbsp;¡å¯ä»¥å­¦æœ¯äº¤æµä¸ºç›®çš„ï¼Œ
    å¤åˆ¶èµ&nbsp;é€å’Œäº¤æ¢æœ¬æ¯•ä¸šè®¾è®¡ï¼ˆè®ºæ–‡ï¼‰ï¼›\circled{5}~å­¦æ&nbsp;¡å¯ä»¥å…¬å¸ƒæœ¬æ¯•ä¸šè®¾è®¡ï¼ˆè®ºæ–‡ï¼‰çš„å…¨éƒ¨æˆ–éƒ¨åˆ†å†…å®¹ã€‚},
    {originality_author_signature}
      {æœ¬äººç­¾åï¼š\hspace{40mm}æ—¥\hspace{2.5mm}æœŸï¼š\hspace{13mm}å¹´\hspace{8mm}æœˆ\hspace{8mm}æ—¥},
    {originality_supervisor_signature}
      {æŒ‡å¯¼è€å¸ˆç­¾åï¼š\hspace{40mm}æ—¥\hspace{2.5mm}æœŸï¼š\hspace{13mm}å¹´\hspace{8mm}æœˆ\hspace{8mm}æ—¥},
  } {\@@_define_label_by_thesis_type:nnn {bachelor} #1}
%    \end{macrocode}
% \end{variable}
%
% \begin{variable}{\c_@@_bachelor_english_label_xxx_tl}
% å…¨è‹±æ–‡ä¸“ä¸šçš„å¸¸é‡ã€‚
%    \begin{macrocode}
\clist_map_inline:nn
  {
    {originality} {åŽŸåˆ›æ€§å£°æ˜Ž~Statement~of~Originality},
    {originality_clause} {
        æœ¬äººéƒ‘é‡å£°æ˜Žï¼šæ‰€å‘ˆäº¤çš„æ¯•ä¸šè®¾è®¡ï¼ˆè®ºæ–‡ï¼‰ï¼Œ
        æ˜¯æœ¬äººåœ¨æŒ‡å¯¼è€å¸ˆçš„æŒ‡å¯¼ä¸‹ç‹¬ç«‹è¿›è¡Œç&nbsp;”ç©¶æ‰€å–å¾—çš„æˆæžœã€‚é™¤æ–‡ä¸­å·²ç»æ³¨æ˜Žå¼•ç”¨çš„å†…å®¹å¤–ï¼Œ
        æœ¬æ–‡ä¸åŒ…å«ä»»ä½•å…¶ä»–ä¸ªäººæˆ–é›†ä½“å·²ç»å‘è¡¨æˆ–æ’°å†™è¿‡çš„ç&nbsp;”ç©¶æˆæžœã€‚
        å¯¹æœ¬æ–‡çš„ç&nbsp;”ç©¶åšå‡ºé‡è¦è´¡çŒ®çš„ä¸ªäººå’Œé›†ä½“ï¼Œå‡å·²åœ¨æ–‡ä¸­ä»¥æ˜Žç¡®æ–¹å¼æ&nbsp;‡æ˜Žã€‚ç‰¹æ­¤ç”³æ˜Žã€‚\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}å­¦æ&nbsp;¡æœ‰æƒä¿ç®¡ã€å¹¶å‘æœ‰å…³éƒ¨é—¨é€äº¤æœ¬æ¯•ä¸šè®¾è®¡ï¼ˆè®ºæ–‡ï¼‰çš„åŽŸä»¶ä¸Žå¤å°ä»¶ï¼›
      \circled{2}å­¦æ&nbsp;¡å¯ä»¥é‡‡ç”¨å½±å°ã€ç¼©å°æˆ–å…¶å®ƒå¤åˆ¶æ‰‹æ®µå¤åˆ¶å¹¶ä¿å­˜æœ¬æ¯•ä¸šè®¾è®¡ï¼ˆè®ºæ–‡ï¼‰ï¼›
      \circled{3}å­¦æ&nbsp;¡å¯å…è®¸æœ¬æ¯•ä¸šè®¾è®¡ï¼ˆè®ºæ–‡ï¼‰è¢«æŸ¥é˜…æˆ–å€Ÿé˜…ï¼›
      \circled{4}å­¦æ&nbsp;¡å¯ä»¥å­¦æœ¯äº¤æµä¸ºç›®çš„,å¤åˆ¶èµ&nbsp;é€å’Œäº¤æ¢æœ¬æ¯•ä¸šè®¾è®¡ï¼ˆè®ºæ–‡ï¼‰ï¼›
      \circled{5}å­¦æ&nbsp;¡å¯ä»¥å…¬å¸ƒæœ¬æ¯•ä¸šè®¾è®¡ï¼ˆè®ºæ–‡ï¼‰çš„å…¨éƒ¨æˆ–éƒ¨åˆ†å†…å®¹ã€‚\par
      I~fully~understand~the~regulations~on~the~storage,~
      use~of~graduation~design~(thesis)~in~Beijing~Institute~of~Technology.~
      Beijing~Institute~of~Technology~has~the~right~to~(1)~keep,~
      and~to~the~relevant~departments~to~send~the~original~or~copy~
      of~this~graduation~design~(thesis);~(2)~copy~and~preserve~this~
      graduation~design~(thesis)~by~photocopying,~miniature~or~other~
      means~of~reproduction;~(3)~allow~this~graduation~design~(thesis)~
      to~be~read~or~borrowed;~(4)~for~the~purpose~of~academic~exchange,~
      copy,~give~and~exchange~this~graduation~design~(thesis);~(5)~
      publish~all~or~part~of~the~contents~of~this~graduation~design~(thesis).~
    },
  } {\@@_define_label_by_thesis_type:nnn {bachelor_english} #1}
%    \end{macrocode}
% \end{variable}
%
% \begin{variable}{\c_@@_graduate_label_xxx_tl}
% ç&nbsp;”ç©¶ç”Ÿæ¨¡æ¿çš„å¸¸é‡ã€‚
%    \begin{macrocode}
\clist_map_inline:nn
  {
    {originality} {ç&nbsp;”ç©¶æˆæžœå£°æ˜Ž},
    {originality_clause} {æœ¬äººéƒ‘é‡å£°æ˜Žï¼šæ‰€æäº¤çš„å­¦ä½è®ºæ–‡æ˜¯æˆ‘æœ¬äººåœ¨æŒ‡å¯¼æ•™å¸ˆçš„æŒ‡å¯¼ä¸‹ç‹¬ç«‹å®Œæˆçš„ç&nbsp;”ç©¶æˆæžœã€‚æ–‡ä¸­æ‰€æ’°å†™å†…å®¹ç¬¦åˆä»¥ä¸‹å­¦æœ¯è§„èŒƒï¼ˆè¯·å‹¾é€‰ï¼‰ï¼š
\par \@@_boxcheck:\hspace{0.5em} è®ºæ–‡ç»¼è¿°éµå¾ªâ€œé€‚å½“å¼•ç”¨â€çš„è§„èŒƒï¼Œå…¨éƒ¨å¼•ç”¨çš„å†…å®¹ä¸è¶…è¿‡50\%ã€‚
\par \@@_boxcheck:\hspace{0.5em} è®ºæ–‡ä¸­çš„ç&nbsp;”ç©¶æ•°æ®åŠç»“æžœä¸å­˜åœ¨ç¯¡æ”¹ã€å‰½çªƒã€æŠ„è¢­ã€ä¼ªé€&nbsp;ç­‰å­¦æœ¯ä¸ç«¯è¡Œä¸ºï¼Œå¹¶æ„¿æ„æ‰¿æ‹…å›&nbsp;å­¦æœ¯ä¸ç«¯è¡Œä¸ºæ‰€å¸¦æ¥çš„ä¸€åˆ‡åŽæžœå’Œæ³•å¾‹è´£ä»»ã€‚
\par \@@_boxcheck:\hspace{0.5em} æ–‡ä¸­ä¾æ³•å¼•ç”¨ä»–äººçš„æˆæžœï¼Œå‡å·²åšå‡ºæ˜Žç¡®æ&nbsp;‡æ³¨æˆ–å¾—åˆ°è®¸å¯ã€‚
\par \@@_boxcheck:\hspace{0.5em} è®ºæ–‡å†…å®¹æœªåŒ…å«æ³•å¾‹æ„ä¹‰ä¸Šå·²å±žäºŽä»–äººçš„ä»»ä½•å½¢å¼çš„ç&nbsp;”ç©¶æˆæžœï¼Œä¹Ÿä¸åŒ…å«æœ¬äººå·²ç”¨äºŽå…¶ä»–å­¦ä½ç”³è¯·çš„è®ºæ–‡æˆ–æˆæžœã€‚
\par \@@_boxcheck:\hspace{0.5em} ä¸Žæœ¬äººä¸€åŒå·¥ä½œçš„åˆä½œè€…å¯¹æ­¤ç&nbsp;”ç©¶å·¥ä½œæ‰€åšçš„ä»»ä½•è´¡çŒ®å‡å·²åœ¨å­¦ä½è®ºæ–‡ä¸­ä½œäº†æ˜Žç¡®çš„è¯´æ˜Žå¹¶è¡¨ç¤ºäº†è°¢æ„ã€‚
\par~ç‰¹æ­¤å£°æ˜Žã€‚},
    {authorization} {å…³äºŽå­¦ä½è®ºæ–‡ä½¿ç”¨æƒçš„è¯´æ˜Ž},
    {authorization_clause} {æœ¬äººå®Œå…¨äº†è§£åŒ—äº¬ç†å·¥å¤§å­¦æœ‰å…³ä¿ç®¡ã€ä½¿ç”¨å­¦ä½è®ºæ–‡çš„è§„å®šï¼Œå…¶ä¸­åŒ…æ‹¬ï¼š
\par~\circled{1}~å­¦æ&nbsp;¡æœ‰æƒä¿ç®¡ã€å¹¶å‘æœ‰å…³éƒ¨é—¨é€äº¤å­¦ä½è®ºæ–‡çš„åŽŸä»¶ä¸Žå¤å°ä»¶ï¼›
\par~\circled{2}~å­¦æ&nbsp;¡å¯ä»¥é‡‡ç”¨å½±å°ã€ç¼©å°æˆ–å…¶å®ƒå¤åˆ¶æ‰‹æ®µå¤åˆ¶å¹¶ä¿å­˜å­¦ä½è®ºæ–‡ï¼›
\par~\circled{3}~å­¦æ&nbsp;¡å¯å…è®¸å­¦ä½è®ºæ–‡è¢«æŸ¥é˜…æˆ–å€Ÿé˜…ï¼›
\par~\circled{4}~å­¦æ&nbsp;¡å¯ä»¥å­¦æœ¯äº¤æµä¸ºç›®çš„,å¤åˆ¶èµ&nbsp;é€å’Œäº¤æ¢å­¦ä½è®ºæ–‡ï¼›
\par~\circled{5}~å­¦æ&nbsp;¡å¯ä»¥å…¬å¸ƒå­¦ä½è®ºæ–‡çš„å…¨éƒ¨æˆ–éƒ¨åˆ†å†…å®¹ï¼ˆä¿å¯†å­¦ä½è®ºæ–‡åœ¨è§£å¯†åŽéµå®ˆæ­¤è§„å®šï¼‰ã€‚},
    {originality_author_signature}
      {ç­¾\qquad åï¼š\hspace{40mm}æ—¥\hspace{2.5mm}æœŸï¼š\hspace{30mm}\quad},
    {originality_supervisor_signature}
      {å¯¼å¸ˆç­¾åï¼š\hspace{40mm}æ—¥\hspace{2.5mm}æœŸï¼š\hspace{30mm}\quad},
  } {\@@_define_label_by_thesis_type:nnn {graduate} #1}
%    \end{macrocode}
% \end{variable}
%
% \begin{variable}{\c_@@_graduate_label_xxx_tl,\c_@@_graduate_label_xxx_en_tl}
% ç&nbsp;”ç©¶ç”Ÿæ¨¡æ¿çš„ä¸­è‹±å¸¸é‡ã€‚
%    \begin{macrocode}
\clist_map_inline:nn
  {
    % TODO: è‡ªåŠ¨å®žçŽ°æ±‰å­—å‡æŽ’
    {author} {ä½œ\quad è€…\quad å§“\quad å} {Candidate~Name},
    {school} {å­¦\quad é™¢\quad å\quad ç§°} {School~or~Department},
    {supervisor} {æŒ‡\quad å¯¼\quad æ•™\quad å¸ˆ} {Faculty~Mentor},
    {industrial_mentor} {è¡Œ\@@_smallgap: ä¸š\@@_smallgap: åˆ\@@_smallgap: ä½œ\@@_smallgap: å¯¼\@@_smallgap: å¸ˆ} {Industry~Collaboration~Mentor},
    {chairman} {ç­”è¾©å§”å‘˜ä¼šä¸»å¸­} {Chair,~Thesis~Committee},
    % degreeã€major çš„ä¸­æ–‡ä¸Ž degreeType æœ‰å…³ï¼Œæ­¤å¤„ä»¥ academic ä¸ºå‡†ï¼Œå…¶ä½™æƒ…å†µé€šè¿‡ \c_@@_auto_tl å¤„ç†
    % è‹±æ–‡å€’æ˜¯æ—&nbsp;å…³ã€‚
    {degree} {ç”³\quad è¯·\quad å­¦\quad ä½} {Degree~Applied},
    {major} {ä¸€\quad çº§\quad å­¦\quad ç§‘} {Major},
    {institute}
      {å­¦\@@_smallgap: ä½\@@_smallgap: æŽˆ\@@_smallgap: äºˆ\@@_smallgap: å•\@@_smallgap: ä½}
      {Degree~by},
    {defense_date}
      {è®º\@@_smallgap: æ–‡\@@_smallgap: ç­”\@@_smallgap: è¾©\@@_smallgap: æ—¥\@@_smallgap: æœŸ}
      {The~Date~of~Defence},
  } {\@@_define_label_by_thesis_type:nnnn {graduate} #1}
%    \end{macrocode}
% \end{variable}
%
% \begin{variable}{\c_@@_label_xxx_tl,\c_@@_label_xxx_en_tl}
% å¸¸ç”¨çš„ä¸­è‹±å¸¸é‡ã€‚
%    \begin{macrocode}
\clist_map_inline:nn
  {
    {school} {å­¦\qquad é™¢} {School},
    {major} {ä¸“\qquad ä¸š} {Degree},
    {course} {è¯¾ç¨‹åç§°} {Course},
    {class} {ç­\qquad{}çº§} {Class},
    {author} {å­¦ç”Ÿå§“å} {Author},
    {student_id} {å­¦\qquad å·} {Student~ID},
    {supervisor} {æŒ‡å¯¼æ•™å¸ˆ} {Supervisor},
    {co_supervisor} {æ&nbsp;¡å¤–æŒ‡å¯¼æ•™å¸ˆ} {Co-Supervisor},
    {teacher} {ä»»è¯¾æ•™å¸ˆ} {Teacher},
    {semester} {ä¸Šè¯¾å­¦æœŸ} {Semester},
    {keywords} {å…³é”®è¯ï¼š} {Key~Words:~},
    {toc} {ç›®\@@_label_space: å½•} {Table~of~Contents},
    {abstract} {æ‘˜\@@_label_space: è¦} {Abstract},
    {conclusion} {ç»“\@@_label_space: è®º} {Conclusions},
    % é™„å½•éƒ¨åˆ†çš„æ€»æ&nbsp;‡é¢˜
    {appendix} {é™„\@@_label_space: å½•} {Appendices},
    {ack} {è‡´\@@_label_space: è°¢} {Acknowledgements},
    {figure} {æ’\@@_label_space: å›¾} {Illustrations},
    {table} {è¡¨\@@_label_space: æ&nbsp;¼} {Tables},
    % é™„å½•ä¸‹å„éƒ¨åˆ†ç¼–å·çš„å‰ç¼€
    {appendix_prefix} {é™„å½•} {Appendix},
    {reference} {å‚è€ƒæ–‡çŒ®} {References},
    {university} {åŒ—äº¬ç†å·¥å¤§å­¦} {Beijing~Institute~of~Technology},
    {publications} {æ”»è¯»å­¦ä½æœŸé—´å‘è¡¨è®ºæ–‡ä¸Žç&nbsp;”ç©¶æˆæžœæ¸…å•}
      {Publications~During~Studies},
    % TODO: Not so sure about the translation.
    {resume} {ä½œè€…ç®€ä»‹} {Author~Biography},
    {symbols} {ä¸»è¦ç¬¦å·å¯¹ç…§è¡¨} {Nomenclature},
    {algo} {ç®—æ³•} {Algorithm},
    {them} {å®šç†} {Theorem},
    {lem} {å¼•ç†} {Lemma},
    {prop} {å‘½é¢˜} {Proposition},
    {cor} {æŽ¨è®º} {Corollary},
    {axi} {å…¬ç†} {Axiom},
    {defn} {å®šä¹‰} {Definition},
    {conj} {çŒœæƒ³} {Conjecture},
    {exmp} {ä¾‹} {Example},
    {case} {æƒ…å½¢} {Case},
    {rem} {æ³¨} {Remark},
    {fig} {å›¾} {Figure},
    {tab} {è¡¨} {Table},
    {equ} {å¼} {Equation},
  }
  {\@@_define_label:nnn #1}
%    \end{macrocode}
% \end{variable}
%
% \begin{variable}{\c_@@_bachelor_thesis_header_clist,\c_@@_bachelor_thesis_headline_clist}
% æœ¬ç§‘ç”Ÿæ¨¡æ¿çš„é¡µçœ‰æ&nbsp;‡é¢˜ä¸Žå°é¢å¤§æ&nbsp;‡é¢˜å¸¸é‡åˆ—è¡¨ï¼Œå…¶ä¸­å°é¢å¤§æ&nbsp;‡é¢˜ä¸é€‚ç”¨äºŽç¡•å£«ã€åšå£«å­¦ä½è®ºæ–‡ï¼Œåªé€‚ç”¨äºŽæœ¬ç§‘ç”Ÿæ¯•ä¸šè®¾è®¡ï¼ˆè®ºæ–‡ï¼‰åŠå…¶è¡ç”Ÿç‰©ã€‚
%    \begin{macrocode}
\clist_const:Nn \c_@@_bachelor_thesis_header_clist
  {
    åŒ—äº¬ç†å·¥å¤§å­¦æœ¬ç§‘ç”Ÿæ¯•ä¸šè®¾è®¡ï¼ˆè®ºæ–‡ï¼‰,
    åŒ—äº¬ç†å·¥å¤§å­¦æœ¬ç§‘ç”Ÿæ¯•ä¸šè®¾è®¡ï¼ˆè®ºæ–‡ï¼‰å¤–æ–‡ç¿»è¯‘,
    Beijing~Institute~of~Technology~Bachelor's~Thesis,
    åŒ—äº¬ç†å·¥å¤§å­¦ç¡•å£«å­¦ä½è®ºæ–‡,
    åŒ—äº¬ç†å·¥å¤§å­¦åšå£«å­¦ä½è®ºæ–‡,
  }
\clist_const:Nn \c_@@_bachelor_thesis_headline_clist
  {
    æœ¬ç§‘ç”Ÿæ¯•ä¸šè®¾è®¡ï¼ˆè®ºæ–‡ï¼‰,
    æœ¬ç§‘ç”Ÿæ¯•ä¸šè®¾è®¡ï¼ˆè®ºæ–‡ï¼‰å¤–æ–‡ç¿»è¯‘,
    Beijing\nobreak{~}Institute\nobreak{~}of\nobreak{~}Technology~Bachelor's~Thesis,
  }
%    \end{macrocode}
% \end{variable}
%
% \subsubsection{BITSetup l3keys æŽ¥å£é”®å€¼å¯¹å®šä¹‰}
%
% \begin{macro}{\c_@@_auto_tl}
% å®šä¹‰ |\c_@@_auto_tl|
% é€‰é¡¹è®¾ä¸ºå®ƒæ—¶ï¼Œè¡¨ç¤ºæ™ºèƒ½é»˜è®¤å€¼ï¼Œç¨åŽç”± |\@@_resolve_auto_values:| æ&nbsp;¹æ®å…¶å®ƒä¿¡æ¯è‡ªåŠ¨å¡«å……ã€‚
% å‚è€ƒ https://typst.app/docs/reference/foundations/auto/ çš„è®¾è®¡ã€‚
%    \begin{macrocode}
\tl_const:Nn \c_@@_auto_tl { BIThesis-auto-magic }
%    \end{macrocode}
% \end{macro}
%
% å®šä¹‰ |bithesis| é”®å€¼å¯¹ç±»ã€‚
%    \begin{macrocode}
\keys_define:nn { bithesis }
{
  info .meta:nn = { bithesis / info } {#1},
  misc .meta:nn = { bithesis / misc } {#1},
  cover .meta:nn = { bithesis / cover } {#1},
  style .meta:nn = { bithesis / style } {#1},
  option .meta:nn = { bithesis / option } {#1},
  TOC .meta:nn = { bithesis / TOC } {#1},
  appendices .meta:nn = { bithesis / appendices } {#1},
  publications .meta:nn = { bithesis / publications } {#1},
  const .meta:nn = { bithesis / const } {#1},
}
%    \end{macrocode}
%
% å®šä¹‰ |bithesis/option| é”®å€¼å¯¹ç±»ã€‚
%    \begin{macrocode}
\keys_define:nn { bithesis / option }
{
  type .choice:,
  type .value_required:n = true,
  type .choices:Vn =
    \c_@@_thesis_type_clist
    {
      \int_set_eq:NN \g_@@_thesis_type_int \l_keys_choice_int
      \int_case:nn {\l_keys_choice_int} {
        % æœ¬ç§‘å…¨è‹±æ–‡ä¹Ÿæ˜¯è‹±æ–‡æ¨¡æ¿ã€‚
        {3} {\@@_set_english_mode:}
      }
    },
  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,
  quirks .bool_gset:N = \g_@@_quirks_mode_bool,
  % xeCJK
  autoFakeBold .tl_set:N = \g_@@_auto_fake_bold_tl,
  autoFakeBold .initial:n = {3},
  % æ˜¯å¦å¼€å¯è‹±æ–‡æ¨¡å¼ã€‚ç›®å‰åœ¨è®¾è®¡ä¸Šï¼Œè¿™ä¸ªé€‰é¡¹ä»…å¯¹ç&nbsp;”ç©¶ç”Ÿæ¨¡æ¿ç”Ÿæ•ˆã€‚
  % æœ¬ç§‘ç”Ÿæ¨¡æ¿çš„è‹±æ–‡æ¨¡å¼æ˜¯æ&nbsp;¹æ® |type| é€‰é¡¹è‡ªåŠ¨åˆ¤æ–­çš„ã€‚
  english .code:n = { \@@_set_english_mode: } ,
}
%    \end{macrocode}
%
% å®šä¹‰ |bithesis/cover| é”®å€¼å¯¹ç±»ã€‚
%    \begin{macrocode}
\keys_define:nn { bithesis / cover }
  {
    date .tl_set:N = \l_@@_cover_date_tl,
    headerImage .tl_set:N = \l_bit_coverheaderimage_tl,
    xiheiFont .tl_set:N = \l_@@_cover_xihei_font_path_tl,
    xiheiFont .default:n = {STXihei},
    %% cover entry
    delimiter .tl_set:N = \l_@@_cover_delimiter_tl,
    labelAlign .tl_set:N = \l_@@_cover_label_align_tl,
    labelAlign .initial:n = {r},
    valueAlign .tl_set:N = \l_@@_cover_value_align_tl,
    valueAlign .initial:n = {c},
    labelMaxWidth .dim_set:N = \l_@@_cover_label_max_width_dim,
    valueMaxWidth .dim_set:N = \l_@@_cover_value_max_width_dim,
    autoWidthPadding .dim_set:N = \l_@@_cover_auto_width_padding_dim,
    autoWidthPadding .initial:n = {0.25em},
    autoWidth .bool_set:N = \l_@@_cover_auto_width_bool,
    autoWidth .initial:n = {true},
    underlineThickness .dim_set:N = \l_@@_cover_underline_thickness_dim,
    underlineThickness .initial:n = {1pt},
    underlineOffset .dim_set:N = \l_@@_cover_underline_offset_dim,
    underlineOffset .initial:n = { -10pt },
    hideCoverInPeerReview .bool_set:N = \l_@@_cover_hide_cover_in_peer_review_bool,
    % æ­¤å¤„æš‚ä¸”å¡«å……é»˜è®¤å€¼ä¸º`false`ï¼Œå¾…ç¡®å®š`\g_@@_thesis_type_int`åŽå†æ&nbsp;¹æ®è®ºæ–‡ç±»åž‹è¦†ç›–é»˜è®¤å€¼
    hideCoverInPeerReview .initial:n = {false},
    % ç&nbsp;”ç©¶ç”Ÿçš„ã€Œç‰¹æ®Šç±»åž‹ã€
    showSpecialTypeBox .bool_set:N = \l_@@_cover_show_special_type_box_bool,
    showSpecialTypeBox .initial:n = {false},
    % æœ¬ç§‘è‹±æ–‡æ¨¡æ¿ä¹Ÿå¯ä»¥ä½¿ç”¨ä¸­æ–‡å°é¢
    prefer-zh .bool_set:N = \l_@@_cover_prefer_zh_bool,
    prefer-zh .initial:n = {false},
    % æœ¬ç§‘è‹±æ–‡æ¨¡æ¿ä½¿ç”¨ä¸­æ–‡å°é¢æ—¶å¯èƒ½éœ€è¦è°ƒæ¢ä¸­è‹±æ–‡æ&nbsp;‡é¢˜é¡ºåº
    reverse-titles .bool_set:N = \l_@@_cover_reverse_titles_bool,
    reverse-titles .initial:n = {false},
    % æœ¬ç§‘è‹±æ–‡æ¨¡æ¿å¯åŠ&nbsp;å…¥ä¸­æ–‡æ&nbsp;‡é¢˜
    addTitleZh .bool_set:N = \l_@@_cover_add_titlezh_bool,
    addTitleZh .initial:n = {true},
  }
%    \end{macrocode}
%
% å®šä¹‰ |bithesis/info| é”®å€¼å¯¹ç±»ã€‚
%    \begin{macrocode}
\keys_define:nn { bithesis / info }
  {
    title .tl_set:N = \l_@@_value_title_tl,
    title .initial:n = {å½¢çŠ¶è®°å¿†èšæ°¨é…¯çš„åˆæˆåŠå…¶åœ¨ç»‡ç‰©ä¸­çš„åº”ç”¨ï¼ˆç¤ºä¾‹ï¼‰},
    titleEn .tl_set:N = \l_@@_value_title_en_tl,
    titleEn .initial:n = {Synthesis~and~Application~on~Texttiles~of~the~Shape~Memory~Polyurethane~(example)},
    % å›&nbsp;ä¸ºæ˜¯è¦†ç›–é€‰é¡¹ï¼Œæ‰€ä»¥ä¸éœ€è¦è®¾ç½®åˆå§‹å€¼ã€‚
    verticalTitle .tl_set:N = \l_@@_value_vertical_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,
    % è¯¾ç¨‹åç§°ï¼Œè¯»ä¹¦æŠ¥å‘Šä½¿ç”¨
    course .tl_set:N = \l_@@_value_course_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,
    % å›&nbsp;ä¸ºé»˜è®¤ä¸æ˜¾ç¤ºï¼Œæ‰€ä»¥ä¸éœ€è¦è®¾ç½®åˆå§‹å€¼ã€‚
    externalSupervisor .tl_set:N = \l_@@_value_external_supervisor_tl,
    % ä»»è¯¾æ•™å¸ˆï¼Œè¯»ä¹¦æŠ¥å‘Šä½¿ç”¨
    teacher .tl_set:N = \l_@@_value_teacher_tl,
    % ä¸Šè¯¾å­¦æœŸï¼Œè¯»ä¹¦æŠ¥å‘Šä½¿ç”¨
    semester .tl_set:N = \l_@@_value_semester_tl,
    keywords .tl_set:N = \l_@@_value_keywords_tl,
    keywords .initial:n = {èšæ°¨é…¯,å½¢çŠ¶è®°å¿†,ç»‡ç‰©ï¼ˆç¤ºä¾‹ï¼‰},
    keywordsEn .tl_set:N = \l_@@_value_keywords_en_tl,
    keywordsEn .initial:n = {Polyurethane,Shape Memory,Textiles (example)},
    translationTitle .tl_set:N = \l_@@_value_trans_title_tl,
    translationOriginTitle .tl_set:N = \l_@@_value_trans_origin_title_tl,
    % ä¸­å›¾åˆ†ç±»å·ï¼Œç&nbsp;”ç©¶ç”Ÿå­¦ä½è®ºæ–‡ä½¿ç”¨
    classification .tl_set:N = \l_@@_value_classification_tl,
    classification .initial:n = {TQ~028.1ï¼ˆç¤ºä¾‹ï¼‰},
    % UDC åˆ†ç±»å·ï¼Œç&nbsp;”ç©¶ç”Ÿå­¦ä½è®ºæ–‡ä½¿ç”¨
    UDC .tl_set:N = \l_@@_value_udc_tl,
    UDC .initial:n = {540ï¼ˆç¤ºä¾‹ï¼‰},
    % å­¦æœ¯åž‹/ä¸“ä¸šåž‹ï¼Œç&nbsp;”ç©¶ç”Ÿå­¦ä½è®ºæ–‡ä½¿ç”¨
    degreeType .choice:,
    degreeType .choices:nn = {professional, academic} {
      \tl_set:Nn \l_@@_value_degree_type_tl {#1}
    },
    degreeType .initial:n = academic,
    chairman .tl_set:N = \l_@@_value_chairman_tl,
    industrialMentor .tl_set:N = \l_@@_value_industrial_mentor_tl,
    industrialMentorEn .tl_set:N = \l_@@_value_industrial_mentor_en_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 = {\tl_use: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,
    defenseDateEn .initial:n = {June,~2019~(example)},
    % å›&nbsp;ä¸ºé»˜è®¤ä¸æ˜¾ç¤ºï¼Œæ‰€ä»¥ä¸éœ€è¦è®¾ç½®åˆå§‹å€¼ã€‚
    classifiedLevel .tl_set:N = \l_@@_value_classified_level_tl,
    % å­¦ç”Ÿç±»åž‹-å·¥ç¨‹ç¡•åšå£«ä¸“é¡¹
    å·¥ç¨‹ç¡•åšå£«ä¸“é¡¹ .bool_set:N = \l_@@_value_engineering_special_plan_bool,
    å·¥ç¨‹ç¡•åšå£«ä¸“é¡¹ .initial:n = {false},
    % å­¦ç”Ÿç±»åž‹-äº¤å‰ç&nbsp;”ç©¶æ–¹å‘
    crossResearch .bool_set:N = \l_@@_value_cross_research_bool,
    crossResearch .initial:n = {false},
    % å­¦ç”Ÿç±»åž‹-æ”¿åºœé¡¹ç›®ç•™å­¦ç”Ÿ
    internationalStudentUGP .bool_set:N = \l_@@_value_international_student_ugp_bool,
    internationalStudentUGP .initial:n = {false},
  }
%    \end{macrocode}
%
% å®šä¹‰ |bithesis/misc| é”®å€¼å¯¹ç±»ã€‚
%    \begin{macrocode}
\keys_define:nn { bithesis / misc }
  {
    % è¡¨æ&nbsp;¼å­—ä½“å¤§å°ï¼Œé»˜è®¤ä¸º 5 å·å­—ä½“ã€‚
    tabularFontSize .tl_set:N = \l_@@_misc_tabular_font_size_tl,
    tabularFontSize .initial:n = {5},
    arialFont .tl_set:N = \l_@@_misc_arial_font_path_tl,
    autoref / algo .tl_set:N = \l_@@_misc_autoref_algo_tl,
    autoref / algo .initial:n = {\g_@@_const_autoref_algo_tl},
    autoref / them .tl_set:N = \themautorefname,
    autoref / them .initial:n = {\g_@@_const_autoref_them_tl},
    autoref / lem .tl_set:N = \lemautorefname,
    autoref / lem .initial:n = {\g_@@_const_autoref_lem_tl},
    autoref / prop .tl_set:N = \propautorefname,
    autoref / prop .initial:n = {\g_@@_const_autoref_prop_tl},
    autoref / cor .tl_set:N = \corautorefname,
    autoref / cor .initial:n = {\g_@@_const_autoref_cor_tl},
    autoref / axi .tl_set:N = \axiautorefname,
    autoref / axi .initial:n = {\g_@@_const_autoref_axi_tl},
    autoref / defn .tl_set:N = \defnautorefname,
    autoref / defn .initial:n = {\g_@@_const_autoref_defn_tl},
    autoref / conj .tl_set:N = \conjautorefname,
    autoref / conj .initial:n = {\g_@@_const_autoref_conj_tl},
    autoref / exmp .tl_set:N = \exmpautorefname,
    autoref / exmp .initial:n = {\g_@@_const_autoref_exmp_tl},
    autoref / case .tl_set:N = \caseautorefname,
    autoref / case .initial:n = {\g_@@_const_autoref_case_tl},
    autoref / rem .tl_set:N = \remautorefname,
    autoref / rem .initial:n = {\g_@@_const_autoref_rem_tl},
    hideLinks .bool_set:N = \l_@@_misc_hide_links_bool,
    hideLinks .initial:n = {true},
    autoref / figure .tl_set:N = \figureautorefname,
    autoref / figure .initial:n = {\g_@@_const_autoref_fig_tl},
    autoref / table .tl_set:N = \tableautorefname,
    autoref / table .initial:n = {\g_@@_const_autoref_tab_tl},
    autoref / equ .tl_set:N = \equationautorefname,
    autoref / equ .initial:n = {\g_@@_const_autoref_equ_tl},
    % æµ®åŠ¨ä½“ç›¸å…³çš„å„ç§é—´è·
    floatSeparation .tl_set:N = \l_@@_misc_float_separation_tl,
    floatSeparation .initial:n = {0},
    algorithmSeparation .tl_set:N = \l_@@_misc_algorithm_separation_tl,
    algorithmSeparation .initial:n = {12pt plus 4pt minus 4pt},
    tabularRowSeparation .tl_set:N = \l_@@_misc_tabular_row_separation_tl,
    tabularRowSeparation .initial:n = {1},
  }
%    \end{macrocode}
%
% å®šä¹‰ |bithesis/const| é”®å€¼å¯¹ç±»ã€‚
%    \begin{macrocode}
\keys_define:nn { bithesis / const }
  {
    autoref .meta:nn = { bithesis / const / autoref } { #1 },
    style .meta:nn = { bithesis / const / style } { #1 },
    info .meta:nn = { bithesis / const / info } { #1 },
    heading .meta:nn = { bithesis / const / heading } { #1 },
  }
\keys_define:nn { bithesis / const / autoref }
  {
    algo .tl_set:N = \g_@@_const_autoref_algo_tl,
    algo .initial:n = {\@@_get_const:n {algo}},
    them .tl_set:N = \g_@@_const_autoref_them_tl,
    them .initial:n = {\@@_get_const:n {them}},
    lem .tl_set:N = \g_@@_const_autoref_lem_tl,
    lem .initial:n = {\@@_get_const:n {lem}},
    prop .tl_set:N = \g_@@_const_autoref_prop_tl,
    prop .initial:n = {\@@_get_const:n {prop}},
    cor .tl_set:N = \g_@@_const_autoref_cor_tl,
    cor .initial:n = {\@@_get_const:n {cor}},
    axi .tl_set:N = \g_@@_const_autoref_axi_tl,
    axi .initial:n = {\@@_get_const:n {axi}},
    defn .tl_set:N = \g_@@_const_autoref_defn_tl,
    defn .initial:n = {\@@_get_const:n {defn}},
    conj .tl_set:N = \g_@@_const_autoref_conj_tl,
    conj .initial:n = {\@@_get_const:n {conj}},
    exmp .tl_set:N = \g_@@_const_autoref_exmp_tl,
    exmp .initial:n = {\@@_get_const:n {exmp}},
    case .tl_set:N = \g_@@_const_autoref_case_tl,
    case .initial:n = {\@@_get_const:n {case}},
    rem .tl_set:N = \g_@@_const_autoref_rem_tl,
    rem .initial:n = {\@@_get_const:n {rem}},
    figure .tl_set:N = \g_@@_const_autoref_fig_tl,
    figure .initial:n =  {\@@_get_const:n {fig}},
    table .tl_set:N = \g_@@_const_autoref_tab_tl,
    table .initial:n =  {\@@_get_const:n {tab}},
    equ .tl_set:N = \g_@@_const_autoref_equ_tl,
    equ .initial:n = {\@@_get_const:n {equ}},
  }
\keys_define:nn { bithesis / const / style }
  {
    substituteSymbol .tl_set:N = \g_@@_const_substitute_symbol_tl,
    substituteSymbol .initial:n = {*},
  }
\keys_define:nn { bithesis / const / info }
  {
    degree .tl_set:N = \g_@@_const_info_degree_tl,
    degree .initial:n = {\c_@@_auto_tl},
    major .tl_set:N = \g_@@_const_info_major_tl,
    major .initial:n = {\c_@@_auto_tl},
  }
\keys_define:nn { bithesis / const / heading }
  {
    acknowledgements .tl_set:N = \g_@@_const_heading_acknowledgements_tl,
    acknowledgements .initial:n = {
      \@@_get_const:n {ack}
    },
  }
%    \end{macrocode}
%
% å®šä¹‰ |bithesis/style| é”®å€¼å¯¹ç±»ã€‚
%    \begin{macrocode}
\keys_define:nn { bithesis / style }
{
  head .tl_set:N = \l_@@_style_head_tl,
  head .initial:n = {
    \clist_item:Nn \c_@@_bachelor_thesis_header_clist \g_@@_thesis_type_int
  },
  headline .tl_set:N = \l_@@_style_headline_tl,
  headline .initial:n = {
    \clist_item:Nn \c_@@_bachelor_thesis_headline_clist \g_@@_thesis_type_int
  },
  bibliographyIndent .bool_set:N = \l_@@_style_bibliography_indent_bool,
  bibliographyIndent .initial:n = {true},
  pageVerticalAlign .choices:nn = {top, scattered} {
    \tl_if_eq:NnTF \l_keys_choice_tl {top}
      { \raggedbottom }
      { \flushbottom }
  },
  pageVerticalAlign .initial:n = {top},
  non-CJK-font-in-headings .choice:,
  non-CJK-font-in-headings / serif .code:n = { \bool_set_false:N \l_@@_arial_as_title_font_bool },
  non-CJK-font-in-headings / sans .code:n = { \bool_set_true:N \l_@@_arial_as_title_font_bool },
  non-CJK-font-in-headings .initial:n = {serif},
  % æ•°å­¦å­—ä½“é…ç½®
  mathFont .choices:nn = {
    asana, bonum, cm, concrete, dejavu, erewhon, euler,
    fira, garamond, gfsneohellenic, kp, libertinus, lm, newcm,
    pagella, schola, stix, stix2, termes, xcharter, xits, none,
    } { \tl_set_eq:NN \l_@@_style_math_font_tl \l_keys_choice_tl },
  mathFont .initial:n = {cm},
  % Options that will be pass to `unicode-math` pkgs.
  unicodeMathOptions .tl_set:N = \l_@@_unicode_math_options_tl,
  % Windows å¹³å°å¼€å¯å®‹ä½“ä¼ªç²—ä½“ã€‚
  windowsSimSunFakeBold .bool_set:N = \l_@@_style_windows_simsum_fake_bold,
  windowsSimSunFakeBold .initial:n = {false},
  % æŽ§åˆ¶è‹±æ–‡æ˜¯å¦ä½¿ç”¨ hyphen è¿›è¡Œæ¢è¡Œ
  hyphen .bool_set:N = \l_@@_style_hyphen_bool,
  hyphen .initial:n = {true},
  % æŽ§åˆ¶å…¬å¼å’Œä¸Šä¸‹æ–‡çš„è·ç¦»
  mathAboveDisplaySkip .dim_set:N = \l_@@_style_math_above_display_skip_dim,
  mathAboveDisplaySkip .initial:n = {10pt},
  mathBelowDisplaySkip .dim_set:N = \l_@@_style_math_below_display_skip_dim,
  mathBelowDisplaySkip .initial:n = {10pt},
  betterTimesNewRoman .bool_set:N = \l_@@_style_better_new_roman_bool,
  betterTimesNewRoman .initial:n = {false},
}
%    \end{macrocode}
%
% å®šä¹‰ |bithesis/TOC| é”®å€¼å¯¹ç±»ã€‚
%    \begin{macrocode}
\keys_define:nn { bithesis / TOC }
{
  title .tl_set:N = \l_@@_toc_title_tl,
  title .initial:n = {
    \@@_get_const:n {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},
  TOC .bool_set:N = \l_@@_add_toc_to_toc_bool,
  TOC .initial:n = {false},
  symbols .bool_set:N = \l_@@_add_symbols_to_toc_bool,
  symbols .initial:n = {true},
}
%    \end{macrocode}
%
% å®šä¹‰ |bithesis/appendices| é”®å€¼å¯¹ç±»ã€‚
%    \begin{macrocode}
\keys_define:nn { bithesis / appendices }
{
  chapterLevel .bool_set:N = \l_@@_appendices_chapter_level_bool,
  title .tl_set:N = \l_@@_appendices_title_tl,
  TOCTitle .tl_set:N = \l_@@_appendix_toc_title_tl,
}
%    \end{macrocode}
%
% å®šä¹‰ |bithesis/appendices| é”®å€¼å¯¹ç±»ã€‚
%    \begin{macrocode}
\keys_define:nn { bithesis / publications }
{
  % mode .choice:,
  % mode .value_required:n = true,
  % mode .choices:Vn =
  %   \c_@@_publication_modes_clist
  %   {
  %     \int_new:N \l_@@_publication_mode_int
  %     \int_set:Nn \l_@@_publication_mode_int \l_keys_choice_int
  %   },
  % mode .initial:n = biblatex,
  sorting .bool_set:N = \l_@@_publications_sorting_bool,
  sorting .initial:n = {true},
  omit .bool_set:N = \l_@@_publications_omit_bool,
  omit .initial:n = {false},
  maxbibnames .int_set:N = \l_@@_publications_maxbibnames_int,
  maxbibnames .initial:n = {10},
  minbibnames .int_set:N = \l_@@_publications_minbibnames_int,
  minbibnames .initial:n = {10},
}
%    \end{macrocode}
%
% \subsubsection{å†…éƒ¨ l3keys æŽ¥å£é”®å€¼å¯¹å®šä¹‰}
%
% é™¤äº† |\BITSetup|ï¼Œæœ‰äº›ç”¨æˆ·æŽ¥å£ä¹Ÿæ˜¯é”®å€¼å¯¹ï¼Œåœ¨æ­¤é€šè¿‡ |bithesis-internal| å®žçŽ°ã€‚
% çº¦å®šå®ƒåªç”¨äºŽå†…éƒ¨è§£æžç”¨æˆ·å‘½ä»¤ä¼&nbsp;å…¥çš„å‚æ•°ï¼Œä¸ç›´æŽ¥é¢å‘æœ€ç»ˆä½œè€…ï¼Œè€Œä¸”æ¯ä¸ªç”¨æˆ·å‘½ä»¤éƒ½ä¸è®°å¿†ä¹‹å‰è®¾ç½®çš„å€¼ã€‚
% æ­¤å¤„åªå®šä¹‰æ•°æ®ç»“æž„ï¼Œé»˜è®¤å€¼ç­‰é€»è¾‘ç”±å„å‘½ä»¤è‡ªè¡Œå¤„ç†ã€‚
%
% å®šä¹‰ |bithesis-internal / pre-frontmatter|ï¼Œç”¨äºŽè®¾ç½® |\frontmatter| ä¹‹å‰çš„ |\MakeCover|ã€|\MakeTitle| ç­‰ã€‚
% ç›®å‰è¿™äº›éƒ¨åˆ†çš„æŽ¥å£ç›¸åŒï¼Œæ•…å…±ç”¨ |pre-frontmatter|ã€‚
%    \begin{macrocode}
\keys_define:nn { bithesis-internal / pre-frontmatter }
{
  % æ˜¯å¦å°†æ&nbsp;‡é¢˜åŠ&nbsp;å…¥PDFä¹¦ç­¾
  bookmarked .bool_set:N = \l_@@_internal__pre_frontmatter__bookmarked_bool,
}
%    \end{macrocode}
%
% å®šä¹‰ |bithesis-internal / conclusion|ï¼Œç”¨äºŽè®¾ç½® |conclusion| çŽ¯å¢ƒã€‚
%    \begin{macrocode}
\keys_define:nn { bithesis-internal / conclusion }
{
  title .tl_set:N = \l_@@_internal__conclusion__title_tl,
}
%    \end{macrocode}
%
%
% \subsubsection{BITSetup l3keys æŽ¥å£é”®å€¼å¯¹é¢„å¤„ç†}
%
% åœ¨å®åŠ&nbsp;è½½æ—¶ï¼Œå¤„ç† |bithesis/option| ä¸­çš„å€¼ã€‚ä½¿å¾— |bithesis|
% å®åŒ…çš„æ¨¡æ¿é€‰é¡¹å¯ä»¥åœ¨å®åŠ&nbsp;è½½æ—¶ç”Ÿæ•ˆã€‚
%    \begin{macrocode}
\ProcessKeysOptions { bithesis / option }
%    \end{macrocode}
%
% ç¡®å®š |bithesis/option| ä¸­çš„ |\g_@@_thesis_type_int| åŽï¼Œæ&nbsp;¹æ®è®ºæ–‡ç±»åž‹è‡ªåŠ¨è¦†ç›–æŸäº›é€‰é¡¹çš„é»˜è®¤å€¼ã€‚
%    \begin{macrocode}
\@@_if_graduate:TF {
  \keys_set:nn {bithesis} {cover/hideCoverInPeerReview = false}
} {
  \keys_set:nn {bithesis} {cover/hideCoverInPeerReview = true}
}
%    \end{macrocode}
%
% \begin{macro}{\@@_resolve_auto_values:}
% è®¡ç®— auto å¹¶æ›¿æ¢ä¸ºæ&nbsp;‡å‡†çš„å€¼
%    \begin{macrocode}
\cs_new:Npn \@@_resolve_auto_values: {
  \tl_if_eq:NnT \g_@@_const_info_degree_tl {\c_@@_auto_tl} {
    \tl_if_eq:NnTF \l_@@_value_degree_type_tl {academic} {
      \keys_set:nn {bithesis} {const/info/degree = \c_@@_graduate_label_degree_tl}
    } {
      \keys_set:nn {bithesis} {const/info/degree = ç”³\quad è¯·\quad ç±»\quad åˆ«}
    }
  }
  \tl_if_eq:NnT \g_@@_const_info_major_tl {\c_@@_auto_tl} {
    \@@_if_graduate:TF {
      \tl_if_eq:NnTF \l_@@_value_degree_type_tl {academic} {
        \keys_set:nn {bithesis} {const/info/major = \c_@@_graduate_label_major_tl}
      } {
        \keys_set:nn {bithesis} {const/info/major = å­¦\quad ä½\quad é¢†\quad åŸŸ}
      }
    } {
      \keys_set:nn {bithesis} {const/info/major = \@@_get_const:n {major}}
    }
  }
}
%    \end{macrocode}
% \end{macro}
%
% \subsubsection{åº”ç”¨æ¨¡æ¿é€‰é¡¹}
%
% è‹±æ–‡æ¨¡æ¿éœ€è¦å¼€å¯ ctexbook å®åŒ…çš„è‹±æ–‡é€‰é¡¹ã€‚
%    \begin{macrocode}
\@@_if_thesis_english:T {
  \PassOptionsToClass{scheme=plain}{ctexbook}
}
%    \end{macrocode}
% å¦‚æžœè®¾ç½® blindPeerReview é€‰é¡¹ï¼Œåˆ™æŠ‘åˆ¶ twoside é€‰é¡¹ã€‚
%    \begin{macrocode}
\bool_if:NT \g_@@_blind_mode_bool {
  \bool_set_false:N \g_@@_twoside_bool
}
%    \end{macrocode}
%
% å¦‚æžœæ²¡æœ‰å¼€å¯åŒé¢æ‰“å°é€‰é¡¹ï¼Œåˆ™åœ¨ ctexbook ä¸­å¼€å¯å•é¢æ‰“å°é€‰é¡¹ã€‚
% å…è®¸ chapter ç›´æŽ¥å¦èµ·ä¸€é¡µï¼ˆå³ä½¿æ˜¯å¶æ•°ï¼ˆå·¦æ‰‹ï¼‰é¡µï¼‰ã€‚
%    \begin{macrocode}
\bool_if:NTF \g_@@_twoside_bool {} {
  \PassOptionsToClass{oneside}{ctexbook}
}
\PassOptionsToClass{openany}{ctexbook}
%    \end{macrocode}
%
% å°† |bithesis/option/ctex| ä¸­çš„å€¼ä¼&nbsp;é€’ç»™ ctexbook æ¨¡æ¿ç±»ã€‚
%    \begin{macrocode}
% Any extra option passed by user will be passed to ctexbook.
\DeclareOption*{
  \PassOptionsToClass{\l_@@_options_to_ctex_tl}{ctexbook}
}
%    \end{macrocode}
%
% æŠ‘åˆ¶ fontspec å®åŒ…å…³äºŽå­—ä½“çš„è­¦å‘Šä¿¡æ¯ã€‚
% æ‰‹åŠ¨å¼€å¯ä¼ªç²—ä½“ã€ä¼ªæ–œä½“ã€‚
%    \begin{macrocode}
\PassOptionsToPackage{quiet,AutoFakeBold=\g_@@_auto_fake_bold_tl,AutoFakeSlant}{xeCJK}
%    \end{macrocode}
% åŠ&nbsp;è½½ ctexbook æ¨¡æ¿ç±»ã€‚
%    \begin{macrocode}
\ProcessOptions\relax
\LoadClass[zihao=-4,]{ctexbook}
%    \end{macrocode}
%
% \subsubsection{å®šä¹‰æ¨¡æ¿ç±»æ&nbsp;·å¼}
%
% åŠ&nbsp;è½½æ‰€éœ€çš„å®åŒ…ã€‚
%
% åœ¨åŠ&nbsp;è½½å®åŒ…ä¹‹å‰ï¼Œå°½é‡ä¸ä½¿ç”¨ AtBeginDocument ç­‰ hookã€‚
% å›&nbsp;ä¸º listings ç­‰å®åŒ…ä¹Ÿä¼šç”¨è¿™äº› hookã€‚è‹¥åœ¨åŠ&nbsp;è½½å®ƒä»¬ä¹‹å‰ä½¿ç”¨ hookï¼Œä¼šå¯¼è‡´æˆ‘ä»¬æ‰€æœ‰ hook åœ¨è¿™äº›å®åŒ…â€œä¹‹å‰â€è¿è¡Œã€‚
%
%    \begin{macrocode}
\RequirePackage{geometry}
\RequirePackage[table,xcdraw]{xcolor}
% æ¢å¤æ•°å­¦è¡Œè·ï¼ˆrestoremathleadingï¼‰ï¼ŒåŒæ—¶é¿å…æ”¹å˜æ­£æ–‡è¡Œè·ã€‚
% ï¼ˆctex é»˜è®¤ linespread 1.3 Ã— LaTeX é»˜è®¤å€æ•° 1.2 = 1.56ï¼‰
\RequirePackage[bodytextleadingratio=1.56]{zhlineskip}
\RequirePackage{titletoc}
\RequirePackage{graphicx}
\RequirePackage{fancyhdr}
\RequirePackage{pdfpages}
\RequirePackage[nodisplayskipstretch]{setspace}
\RequirePackage{booktabs}
\RequirePackage{multirow}
\RequirePackage{tikz}
\RequirePackage{etoolbox}
% Hide color and border in hyperref.
\RequirePackage[bookmarksnumbered]{hyperref}
% è¯¦è§ `caption` å®åŒ…æ‰‹å†Œå’Œ
% https://github.com/CTeX-org/forum/issues/86
\RequirePackage[strut=off]{caption}
\RequirePackage{array}
\RequirePackage{amsmath}
\RequirePackage{amssymb}
\RequirePackage{pifont}
\RequirePackage{amsthm}
\RequirePackage{pdfpages}
\RequirePackage{listings}
\RequirePackage{enumitem}
\RequirePackage{fmtcount}
%    \end{macrocode}
%
% æŠ‘åˆ¶ \pkg{hyperref} ä¸­å¯¹ |\hskip| çš„ warning ä¿¡æ¯ã€‚
%    \begin{macrocode}
\pdfstringdefDisableCommands{%
  \let\quad\empty
}
%    \end{macrocode}
%
% è®¾ç½®é¡µçœ‰å­—å·ï¼Œé¡µè¾¹è·ã€‚
%
% éœ€è¦æ³¨æ„çš„æ˜¯ï¼Œæ&nbsp;¹æ® \pkg{geometry} çš„è§„åˆ™ï¼Œ
% |headsep| å’Œ |footskip| åˆ†åˆ«å—åˆ° |top| ä¸Ž |bottom| çš„å½±å“ã€‚
% æ‰€ä»¥ä½&nbsp;èƒ½çœ‹åˆ°åœ¨è®¡ç®— |headsep| ä¸Ž |footskip| æ—¶ï¼Œæˆ‘ä»¬
% é¦–å…ˆè®¡ç®—äº†ç›¸åº”çš„åç§»é‡ã€‚
%    \begin{macrocode}
\@@_if_graduate:TF {
  \int_set:Nn \g_@@_head_zihao_int {5}
  \geometry{
    a4paper,
    left=2.7cm,
    bottom=2.5cm + 7bp,
    top=3.5cm + 7bp,
    right=2.7cm,
    % `headsep' is affected by `top' option.
    headsep = 3.5cm + 7bp - 2.5cm - 15bp,
    headheight = 15 bp,
    % `footskip' is affected by `bottom' option.
    footskip = 2.5cm + 7bp - 1.8cm,
  }
} {
  \int_set:Nn \g_@@_head_zihao_int {4}
  \geometry{
    a4paper,
    left=3cm,
    bottom=2.6cm + 7bp,
    top=3.5cm + 7bp,
    right=2.6cm,
    % `headsep' is affected by `top' option.
    headsep = 3.5cm + 7bp - 2.4cm - 20bp,
    headheight = 20 bp,
    % `footskip' is affected by `bottom' option.
    footskip = 2.6cm + 7bp - 2cm,
  }
}
%    \end{macrocode}
%
%  \subsubsection{å®šä¹‰å­—ä½“ç›¸å…³é€‰é¡¹}
%
% è®¾ç½® Times New Roman å­—ä½“ã€‚
% æ&nbsp;¹æ®å­¦æ&nbsp;¡è§„èŒƒè¦æ±‚ï¼Œé»˜è®¤æƒ…å†µä¸‹ä¹Ÿä½¿ç”¨ Times New Roman å­—ä½“ã€‚
%    \begin{macrocode}
\ctex_at_end_preamble:n {
  \bool_if:NTF \l_@@_style_better_new_roman_bool {
    \defaultfontfeatures[TeX~Gyre~Termes]
    {
     Extension      = .otf ,
     UprightFont    = texgyretermes-regular,
     BoldFont       = texgyretermes-bold,
     ItalicFont     = texgyretermes-italic,
     BoldItalicFont = texgyretermes-bolditalic,
    }
    \setmainfont{TeX~Gyre~Termes}
  }{
    \setmainfont{Times~New~Roman}
    \setromanfont{Times~New~Roman}
  }
}
%    \end{macrocode}
%
% \begin{macro}{\@@_font_path:}
% å½“é€‰æ‹©ä½¿ç”¨å­—ä½“æ–‡ä»¶é…ç½®å­—ä½“æ—¶ï¼Œè®¾ç½®å­—ä½“æ–‡ä»¶è·¯å¾„ã€‚
%    \begin{macrocode}
\cs_new:Npn \@@_font_path:
  {
    \str_if_eq:VnTF \l_@@_font_type_tl { font }
      { }
      { Path = \l_@@_font_path_tl / , }
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_load_unicode_math_pkg:}
% åŠ&nbsp;è½½\pkg{unicode-math}å®åŒ…ã€‚
%    \begin{macrocode}
\cs_new:Npn \@@_load_unicode_math_pkg:
  {
    \PassOptionsToPackage { \l_@@_unicode_math_options_tl } { unicode-math }
    \RequirePackage { unicode-math }
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_define_math_font:nn}
% æ‰¹é‡å®šä¹‰æ•°å­¦å­—ä½“é…ç½®ã€‚
% \begin{arguments}
%   \item é…ç½®åç§°ã€‚
%   \item å­—ä½“åç§°ã€‚
% \end{arguments}
%    \begin{macrocode}
\cs_new:Npn \@@_define_math_font:nn #1#2
  {
    \cs_new:cpn { @@_load_math_font_ #1 : }
      {
        \@@_load_unicode_math_pkg:
        \setmathfont { #2 }
      }
  }
\clist_map_inline:nn
  {
    { asana          } { Asana-Math.otf             },
    { concrete       } { Concrete-Math.otf          },
    { erewhon        } { Erewhon-Math.otf           },
    { euler          } { Euler-Math.otf             },
    { fira           } { FiraMath-Regular.otf       },
    { garamond       } { Garamond-Math.otf          },
    { gfsneohellenic } { GFSNeohellenicMath.otf     },
    { kp             } { KpMath-Regular.otf         },
    { libertinus     } { LibertinusMath-Regular.otf },
    { lm             } { latinmodern-math.otf       },
    { newcm          } { NewCMMath-Regular.otf      },
    { stix           } { STIXMath-Regular.otf       },
    { stix2          } { STIXTwoMath-Regular.otf    },
    { xcharter       } { XCharter-Math.otf          },
    { xits           } { XITSMath-Regular.otf       },
    { bonum          } { texgyrebonum-math.otf      },
    { dejavu         } { texgyredejavu-math.otf     },
    { pagella        } { texgyrepagella-math.otf    },
    { schola         } { texgyreschola-math.otf     },
    { termes         } { texgyretermes-math.otf     }
  }
  { \@@_define_math_font:nn #1 }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_load_math_font_cm:}
% æ•°å­¦å­—ä½“é…ç½® |cm|ã€‚
%    \begin{macrocode}
\cs_new:Npn \@@_load_math_font_cm: { }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_load_math_font_none:}
% æ•°å­¦å­—ä½“é…ç½® |none|ã€‚
%    \begin{macrocode}
\cs_new:Npn \@@_load_math_font_none: { }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_load_font:}
% åŠ&nbsp;è½½æ•°å­¦å­—ä½“
%    \begin{macrocode}
\cs_new:Npn \@@_load_font:
  {
    \use:c { @@_load_math_font_  \l_@@_style_math_font_tl  : }
  }
%    \end{macrocode}
% \end{macro}
%
%  \paragraph{å®šä¹‰å¯¼è¨€åŒºæœ«å°¾åŠ&nbsp;è½½å†…å®¹}
%
% åœ¨ |preamble| ä¸­ï¼ŒåŠ&nbsp;è½½å„ä¸ªæ¨¡æ¿éœ€è¦çš„å­—ä½“ã€‚
%    \begin{macrocode}
\ctex_at_end_preamble:n {
  % é’ˆå¯¹ Windows å­—ä½“é‡‡ç”¨ Fake Bold å®‹ä½“
  \bool_if:NT \l_@@_style_windows_simsum_fake_bold
  {
    \RequirePackage{ifplatform}
    \ifwindows
      \setCJKmainfont{SimSun}[AutoFakeBold,AutoFakeSlant]
    \fi
  }

  % åœ¨å¯¼è¨€åŒºæœ«å°¾åŠ&nbsp;è½½æ•°å­¦å­—ä½“ã€‚
  \@@_load_font:

  % misc / hideLinks é€‰é¡¹
  \bool_if:NTF \l_@@_misc_hide_links_bool
    {
      \hypersetup { hidelinks }
    } {
      \definecolor{blue}{RGB}{10,10,110}
      \hypersetup{
        colorlinks=true,
      }
    }

  \bool_if:NTF \l_@@_arial_as_title_font_bool {
    % æ‰‹åŠ¨æŒ‡å®šæ—¶è¦åŠ&nbsp;è½½ Arial
    \newfontfamily\arialfamily{Arial}
  } {
    % å³ä½¿æœªæŒ‡å®šï¼Œæœ¬ç§‘å…¨è‹±æ–‡ä¸“ä¸šæ¨¡æ¿çš„å£°æ˜Žä¹Ÿéœ€è¦ Arial
    \@@_if_thesis_int_type:nT {3} {
      \newfontfamily\arialfamily{Arial}
    }
  }
  % æ—&nbsp;è®ºä¸­è‹±æ–‡ï¼Œå°é¢éƒ½å¯èƒ½éœ€è¦ç»†é»‘ä½“ã€‚
  \tl_if_blank:VTF \l_@@_cover_xihei_font_path_tl {}
  {
    \setCJKfamilyfont{xihei}[AutoFakeBold,AutoFakeSlant]
      {\l_@@_cover_xihei_font_path_tl}
  }

  % å¯¹äºŽæœ¬ç§‘å…¨è‹±æ–‡ä¸“ä¸šæ¨¡æ¿ï¼Œéœ€è¦è‡ªå®šä¹‰æ—¥æœŸæ&nbsp;¼å¼ã€‚
  \@@_if_thesis_int_type:nT {3} {
    \RequirePackage[en-US]{datetime2}
    \RequirePackage{indentfirst}
    \DTMlangsetup[en-US]{dayyearsep={\space}}
  }

  % Define biblatex category if it was imported.
  % è¿™éƒ¨åˆ†æ˜¯ç»™ç&nbsp;”ç©¶ç”Ÿæ¨¡æ¿ä¸­çš„
  % ã€Œæ”»è¯»å­¦ä½æœŸé—´å‘è¡¨è®ºæ–‡ä¸Žç&nbsp;”ç©¶æˆæžœæ¸…å•ã€ä½¿ç”¨çš„ã€‚
  \cs_if_exist:NT \DeclareBibliographyCategory {
    \DeclareBibliographyCategory{mypub}
  }

  % Define biblatex strings if it was imported.
  % è¿™éƒ¨åˆ†æ˜¯ç»™ç&nbsp;”ç©¶ç”Ÿæ¨¡æ¿ä¸­çš„
  % gbpunctin = false æ—¶ä½¿ç”¨çš„ã€‚
  \cs_if_exist:NT \DefineBibliographyStrings {
    \DefineBibliographyStrings{english}{in={}}
    \DefineBibliographyStrings{english}{incn={}}
  }

  % ä¿®æ”¹ biblatex ä¸­ã€Œä¸“åˆ©ã€ï¼ˆpatentï¼‰éƒ¨åˆ†çš„è‘—å½•æ&nbsp;¼å¼ã€‚
  % ä¸»è¦æ&nbsp;¹æ®åŒ—ç†å·¥è‡ªå®šä¹‰çš„è§„èŒƒï¼Œå‚è€ƒ biblatex å’Œ
  % biblatex-gb7714-2015 çš„å®žçŽ°ä¿®æ”¹è€Œæˆã€‚
  %
  % é»˜è®¤ä¸å¼€å¯ï¼Œå›&nbsp;ä¸ºæ­¤ä¿®æ”¹å¯èƒ½ä¼šäº§ç”Ÿå…¶ä»–è¾¹ç•Œé—®é¢˜ã€‚
  \bool_if:NT \g_@@_quirks_mode_bool {
    \cs_if_exist:NT \DeclareBibliographyDriver {
      %
      %   é‡è®¾ä¸“åˆ©titleçš„è¾“å‡ºï¼Œå°†æ–‡çŒ®ç±»åž‹æ&nbsp;‡è¯†ç¬¦è¾“å‡ºå‡ºåŽ»
      %
      \newbibmacro*{patenttitle}{%åŽŸè¾“å‡ºæ¥è‡ªbiblatex.defæ–‡ä»¶
        \ifboolexpr{%
          test{\iffieldundef{title}}%
          and%
          test{\iffieldundef{subtitle}}%
        }%
          {}%
          {\printtext[title]{\bibtitlefont%
             \printfield[titlecase]{title}%
             \ifboolexpr{test {\iffieldundef{subtitle}}}%è¿™é‡Œå¢žåŠ&nbsp;äº†å¯¹å­æ&nbsp;‡é¢˜çš„åˆ¤æ–­ï¼Œè§£å†³ä¸åˆ¤æ–­å¤šä¸€ä¸ªç‚¹çš„é—®é¢˜
             {}{\setunit{\subtitlepunct}%
             \printfield[titlecase]{subtitle}}%
              \iftoggle{bbx:gbtype}{\printfield[gbtypeflag]{usera}}{}%
             \iffieldundef{titleaddon}{}%åˆ¤æ–­ä¸€ä¸‹titleaddonï¼Œå¦åˆ™ç›´æŽ¥åŠ&nbsp;å¯èƒ½å¤šä¸€ä¸ªç©ºæ&nbsp;¼
              {\setunit{\subtitlepunct}\printfield{titleaddon}}%
              % ï¼šåœ°åŒº
              \setunit{\subtitlepunct}\iflistundef{location}
                {}
                {\setunit*{\subtitlepunct}%
                 \printtext{%[parens]
                   \printlist[][-\value{listtotal}]{location}}}%
              % ï¼Œä¸“åˆ©å·
              \setunit{\addcomma\addspace}\printfield{number}%å†™ä¸“åˆ©å·
              \setunit{\addcomma\addspace}
              \usebibmacro{newsdate}%
           }%
        }%
      }

      %
      %   é‡å®šä¹‰ä¸“åˆ©æ–‡çŒ®é©±åŠ¨
      %
        \DeclareBibliographyDriver{patent}{%æºæ¥è‡ªstandard.BBX
        \usebibmacro{bibindex}%
        \usebibmacro{begentry}%
        \usebibmacro{author}%
        \ifnameundef{author}{}{\setunit{\labelnamepunct}\newblock}%è¿™ä¸€æ®µç”¨äºŽåŽ»é™¤ä½œè€…ä¸å­˜åœ¨æ—¶å¤šå‡ºçš„æ&nbsp;‡ç‚¹
        \usebibmacro{patenttitle}%ç»™å‡ºä¸“åˆ©ä¸“ç”¨çš„æ&nbsp;‡é¢˜è¾“å‡º
        \iftoggle{bbx:gbstrict}{}{%
          \newunit%
          \printlist{language}%
          \newunit\newblock
          \usebibmacro{byauthor}
        }%
        \newunit\newblock
        \printfield{type}%
        \setunit*{\addspace}%
        \newunit\newblock
        \usebibmacro{byholder}%
        \newunit\newblock
        \printfield{note}%
        \newunit\newblock
        \usebibmacro{doi+eprint+url}%
        \newunit\newblock
        \usebibmacro{addendum+pubstate}%
        \setunit{\bibpagerefpunct}\newblock
        \usebibmacro{pageref}%
        \newunit\newblock
        \iftoggle{bbx:related}
          {\usebibmacro{related:init}%
           \usebibmacro{related}}
          {}%
        \usebibmacro{annotation}\usebibmacro{finentry}}
    }
  }
}
%    \end{macrocode}
%
% \begin{macro}{\@@_xihei:n}
% å®šä¹‰åŽæ–‡ç»†é»‘å­—ä½“ï¼Œé‡‡ç”¨ |cover/xiheiFont| æŒ‡å®šçš„å­—ä½“æ–‡ä»¶ã€‚
% ä¸ºå…¼å®¹æ—§ç‰ˆï¼ŒXeLaTeX ä¸ŠæœªæŒ‡å®šå­—ä½“æ–‡ä»¶æ—¶ï¼Œä¼šå›žé€€åˆ°ä¸­æ˜“å­—åº“çš„é»‘ä½“ã€‚
%    \begin{macrocode}
\cs_new:Npn \@@_xihei:n #1 {
  \sys_if_engine_xetex:TF {
    \xeCJK_family_if_exist:nTF {xihei} {
      \CJKfamily{xihei} #1
    }{
      \heiti #1
    }
  } {
    \CJKfamily{xihei} #1
  }
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_title_font:}
% å®šä¹‰æ&nbsp;‡é¢˜å­—ä½“ã€‚
%    \begin{macrocode}
\cs_new:Npn \@@_title_font: {
  \bool_if:NTF \l_@@_arial_as_title_font_bool {
    % å³ä½¿æ˜¯è‹±æ–‡æ¨¡æ¿ï¼Œä»å¯èƒ½å‡ºçŽ°ä¸­æ–‡ï¼Œä¹Ÿéœ€è®¾ç½®ä¸­æ–‡å­—ä½“ã€‚
    \heiti\arialfamily
  } {
    % è¥¿æ–‡ä¿æŒåŽŸæœ¬çš„ Times New Romanã€‚é»‘ä½“ä¸€èˆ¬ä¸æ­é…è¡¬çº¿ä½“ï¼Œä½†å­¦æ&nbsp;¡è¦æ±‚å¦‚æ­¤ã€‚
    \heiti
  }
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_unnumchapter_style:}
% å®šä¹‰æ—&nbsp;åºç«&nbsp;èŠ‚çš„æ&nbsp;·å¼ã€‚
%    \begin{macrocode}
\cs_new:Npn \@@_unnumchapter_style: {
  % æœ¬ç§‘å…¨è‹±æ–‡ã€ç&nbsp;”ç©¶ç”Ÿå­¦ä½è®ºæ–‡éœ€è¦åŠ&nbsp;ç²—
  \int_compare:nNnTF {\g_@@_thesis_type_int} &gt; {2} {
    \bfseries
  } {
    \mdseries
  }
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\arabicHeiti}
% é—ç•™ä¸‹æ¥çš„é»‘ä½“å­—ä½“å®šä¹‰ã€‚
%    \begin{macrocode}
\cs_set:Npn \arabicHeiti #1 {#1}
%    \end{macrocode}
% \end{macro}
%
% å®šä¹‰ \pkg{fancyhdr} çš„é¡µçœ‰é¡µè„šã€‚
%    \begin{macrocode}
\fancypagestyle{BIThesis}{
  \fancyhf{}
  % å®šä¹‰é¡µçœ‰ã€é¡µç&nbsp;
  \fancyhead[C]{
    \zihao{\int_use:N \g_@@_head_zihao_int}
    \ziju{0.08}
    \songti{\tl_use:N \l_@@_style_head_tl}
  }
  \fancyfoot[C]{\songti\zihao{5} \thepage}
  % é¡µçœ‰åˆ†å‰²çº¿ç¨å¾®ç²—ä¸€äº›
  \RenewDocumentCommand \headrulewidth {} {0.6pt}
}
%    \end{macrocode}
%
%  å®šä¹‰ \pkg{ctex} çš„ç«&nbsp;èŠ‚æ&nbsp;‡é¢˜å½¢å¼ã€‚
%    \begin{macrocode}
\ctexset{chapter={
    number = {\arabicHeiti{ \arabic{chapter} }},
    format = { \@@_title_font: \bfseries \centering \zihao{3}},
    nameformat = {},
    titleformat = {},
    aftername = \hspace{9bp},
    pagestyle = BIThesis,
    beforeskip = \@@_if_graduate:TF {13bp} {8bp},
    afterskip = \@@_if_graduate:TF {24.5bp} {32bp},
    fixskip = true,
    lofskip = 0cm,
    lotskip = 0cm,
  }
}

\ctexset{section={
    number = {\arabicHeiti{\thechapter.\hspace{1bp}\arabic{section}}},
    format = {\@@_title_font: \raggedright \bfseries \zihao{4}},
    nameformat = {},
    titleformat = {},
    aftername = \hspace{8bp},
    beforeskip = \@@_if_graduate:TF {26bp} {20bp},
    afterskip = \@@_if_graduate:TF {18bp} {17bp},
    fixskip = true,
  }
}

\ctexset{subsection={
    number = {
      \arabicHeiti{
        \thechapter.\hspace{1bp}
        \arabic{section}.\hspace{1bp}
        \arabic{subsection}
      }
    },
    format = {\@@_title_font: \bfseries \raggedright \zihao{-4}},
    nameformat = {},
    titleformat = {},
    aftername = \hspace{7bp},
    beforeskip = 17bp,
    afterskip = 17bp,
    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={\@@_title_font: \raggedright \zihao{-4}},
    nameformat = {},
    titleformat = {},
    beforeskip=14bp,
    afterskip=14bp,
    fixskip=true,
  }
}
%    \end{macrocode}
%
%  å®šä¹‰ TOC æ&nbsp;·å¼ã€‚
%    \begin{macrocode}
\addtocontents{toc}{\protect\hypersetup{hidelinks}}

\@@_if_graduate:TF {
  % å¯¹äºŽç&nbsp;”ç©¶ç”Ÿæ¨¡æ¿ï¼Œå®šä¹‰å„ç«&nbsp;æ&nbsp;‡é¢˜ä¸ºå®‹ä½“å››å·ã€‚
  \titlecontents{chapter}[0pt]{\songti \zihao{4}}
  {\thecontentslabel\hspace{\ccwd}}{}
  {\hspace{.5em}\titlerule*{.}\contentspage}
  % section æ&nbsp;‡é¢˜ä¸ºå®‹ä½“å°å››å·ã€‚ç¼©è¿›ä¸ºä¸¤ä¸ªå­—ç¬¦å®½åº¦ã€‚
  \titlecontents{section}[2\ccwd]{\songti \zihao{-4}}
  {\thecontentslabel\hspace{\ccwd}}{}
  {\hspace{.5em}\titlerule*{.}\contentspage}
  % subsection æ&nbsp;‡é¢˜ä¸ºå®‹ä½“å°å››å·ã€‚ç¼©è¿›ä¸ºå››ä¸ªå­—ç¬¦å®½åº¦ã€‚
  \titlecontents{subsection}[4\ccwd]{\songti \zihao{-4}}
  {\thecontentslabel\hspace{\ccwd}}{}
  {\hspace{.5em}\titlerule*{.}\contentspage}
} {
  % å¯¹äºŽå…¶ä»–ï¼Œå®šä¹‰å„ç«&nbsp;æ&nbsp;‡é¢˜ä¸ºå®‹ä½“å°å››å·ã€‚
  \titlecontents{chapter}[0pt]{\songti \zihao{-4}}
  {\thecontentslabel\hspace{\ccwd}}{}
  {\hspace{.5em}\titlerule*{.}\contentspage}
  % section æ&nbsp;‡é¢˜ä¸ºå®‹ä½“å°å››å·ã€‚
  \titlecontents{section}[1\ccwd]{\songti \zihao{-4}}
  {\thecontentslabel\hspace{\ccwd}}{}
  {\hspace{.5em}\titlerule*{.}\contentspage}
  % subsection æ&nbsp;‡é¢˜ä¸ºå®‹ä½“å°å››å·ã€‚
  \titlecontents{subsection}[2\ccwd]{\songti \zihao{-4}}
  {\thecontentslabel\hspace{\ccwd}}{}
  {\hspace{.5em}\titlerule*{.}\contentspage}
}
% listoffigure æ&nbsp;·å¼ä¼˜åŒ–
\titlecontents{figure}[0pt]{\songti\zihao{-4}}
    {\figurename~\thecontentslabel\quad}{\hspace*{-1.5cm}}
    {\hspace{.5em}\titlerule*{.}\contentspage}
% listoftable æ&nbsp;·å¼ä¼˜åŒ–
\titlecontents{table}[0pt]{\songti\zihao{-4}}
    {\tablename~\thecontentslabel\quad}{\hspace*{-1.5cm}}
    {\hspace{.5em}\titlerule*{.}\contentspage}
%    \end{macrocode}
%
%  \subsubsection{å®šä¹‰æ&nbsp;·å¼ç›¸å…³å‡½æ•°}
%
% \begin{macro}{\frontmatter}
% å®šä¹‰å‰ç½®å†…å®¹çš„é¡µé¢æ&nbsp;·å¼ã€‚
%    \begin{macrocode}
\RenewDocumentCommand \frontmatter {} {
  \pagenumbering{Roman}
  % è¿™éƒ¨åˆ†çš„ç«&nbsp;èŠ‚æ&nbsp;‡é¢˜ä¸è¿›è¡Œç¼–å·ã€‚
  \ctexset{
    chapter = {
      numbering = false,
    }
  }
  \linespread{1.53}\selectfont
  \pagestyle{BIThesis}

  % è°ƒæ•´è¡¨æ&nbsp;¼å†…å®¹å­—å·ï¼ˆé»˜è®¤äº”å·ï¼‰å’Œå„è¡Œä¹‹é—´çš„è·ç¦»ã€‚
  %
  % ç”±äºŽè¿™ç§æ–¹å¼ä¼šå½±å“æ‰€æœ‰çš„è¡¨æ&nbsp;¼ï¼Œ
  % æ‰€ä»¥æˆ‘ä»¬å°½å¯èƒ½å»¶è¿Ÿè¿™ç§å½±å“ã€‚
  %
  % ä¸è¿‡ï¼Œåœ¨ç›®å‰çš„ä»£ç&nbsp;å®žçŽ°ä¸­æ²¡æœ‰åœ¨å°é¢
  % ä¹‹ç±»çš„åœ°æ–¹ä½¿ç”¨è¡¨æ&nbsp;¼ï¼Œæ‰€ä»¥ç›®å‰å³ä½¿æ”¾åœ¨
  % preamble ä¸­ä¹Ÿä¸ä¼šæœ‰å½±å“ã€‚
  %
  % æ”¯æŒæ&nbsp;‡å‡†tabularã€tabular*çŽ¯å¢ƒå’Œå®åŒ…tabularxã€longtableã€‚
  \clist_map_inline:nn
    {tabular, tabular*, tabularx, longtable}
    {
      \AtBeginEnvironment {##1} {
        % å­—å·åªæƒ³è®¾ç½®è¡¨æ&nbsp;¼å†…å®¹ï¼Œä¸æƒ³å½±å“captionã€‚
        % ä¸€èˆ¬captionåœ¨çŽ¯å¢ƒä¹‹å¤–ï¼Œè‡ªç„¶ä¸å—å½±å“ï¼›
        % è€Œlongtableçš„captionè™½åœ¨çŽ¯å¢ƒå†…ï¼Œä½†captionå®åŒ…èƒ½æ­£å¸¸å¤„ç†ã€‚
        \zihao{\l_@@_misc_tabular_font_size_tl}
        % å„è¡Œé—´è·åªæƒ³å½±å“è¡¨æ&nbsp;¼ï¼Œä¸æƒ³å½±å“çŸ©é˜µï¼Œå›&nbsp;æ­¤ä¹Ÿå¿…é¡»åœ¨é’©å­ä¸­è®¾ç½®ã€‚
        \cs_set:Npn \arraystretch {\l_@@_misc_tabular_row_separation_tl}
      }
    }
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\mainmatter}
% ä¸»ä½“å†…å®¹çš„é¡µé¢æ&nbsp;·å¼ã€‚
%    \begin{macrocode}
\RenewDocumentCommand \mainmatter {} {
  % å¦èµ·ä¸€ä¸ªç©ºé¡µï¼Œä»¥ä¾¿äºŽåŽç»­çš„ç«&nbsp;èŠ‚æ&nbsp;‡é¢˜ç¼–å·ã€‚
  % \clearpage
  \cleardoublepage
  % è¿™éƒ¨åˆ†çš„ç«&nbsp;èŠ‚æ&nbsp;‡é¢˜è¿›è¡Œç¼–å·ã€‚
  \ctexset{
    chapter = {
      numbering = true,
    }
  }
  % é¡µç&nbsp;ä½¿ç”¨é˜¿æ‹‰ä¼¯æ•°å­—ã€‚
  \pagenumbering{arabic}
  \pagestyle{BIThesis}
  % æ­£æ–‡ 22 ç£…çš„è¡Œè·
  \setlength{\parskip}{0em}
  \linespread{1.53}\selectfont
  % ä¿®å¤è„šæ³¨å‡ºçŽ°è·¨é¡µçš„é—®é¢˜
  \interfootnotelinepenalty=10000
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\backmatter}
% åŽç½®å†…å®¹çš„é¡µé¢æ&nbsp;·å¼ã€‚
%    \begin{macrocode}
\RenewDocumentCommand \backmatter {} {
  % åŒæ&nbsp;·ï¼Œæ‰€æœ‰çš„ç«&nbsp;èŠ‚æ&nbsp;‡é¢˜ä¸è¿›è¡Œç¼–å·ã€‚
  \setcounter{section}{0}
  \setcounter{subsection}{0}
  \setcounter{subsubsection}{0}
  \ctexset{
    chapter = {
      numbering = false,
      beforeskip = 18bp,
      format = {
        \@@_title_font: \@@_unnumchapter_style: \centering \zihao{3}
      },
      afterskip = \@@_if_graduate:TF {31bp} {26bp},
    }
  }
}
%    \end{macrocode}
% \end{macro}
%
% è®¾ç½®å›¾è¡¨æµ®åŠ¨ä½“ä¸Žå‰åŽæ­£æ–‡çš„é—´è·ï¼Œä»¥åŠæµ®åŠ¨ä½“å†…éƒ¨çš„å›¾è¡¨æœ¬ä½“ä¸Ž caption çš„é—´è·ã€‚
%
% æ­¤å¤„åªæ»¡è¶³å­¦æ&nbsp;¡è¦æ±‚ï¼›åŽç»­`misc/floatSeparation`ç­‰è®¾ç½®ä¼šåœ¨æ­¤åŸºç¡€ä¸Šå&nbsp;åŠ&nbsp;ã€‚
%
% å­¦æ&nbsp;¡è¦æ±‚ï¼š
%
% - æœ¬ç§‘ç”Ÿ
%   - å›¾è¡¨ä¸Žä¸Šä¸‹æ–‡ä¹‹é—´å„ç©ºä¸€è¡Œã€‚
%   - ç©ºè¡Œä¸€è¾¹æ˜¯ captionï¼Œä¸€è¾¹æ˜¯æ­£æ–‡ï¼Œå­—å·ä¸åŒã€‚ç©ºè¡Œçš„å­—å·å…·ä½“é‡‡ç”¨å“ªä¸ªæ²¡æœ‰è¯´æ˜Žã€‚
% - ç&nbsp;”ç©¶ç”Ÿ
%   - å›¾åºã€å›¾é¢˜ã€è¡¨åºã€è¡¨é¢˜å•å€è¡Œè·ï¼Œæ®µå‰6ç£…ï¼Œæ®µåŽ6ç£…ã€‚
%   - å›¾è¡¨æœ¬ä½“ä¸Žæ­£æ–‡çš„é—´è·æ²¡æœ‰æ˜Žç¡®è§„å®šï¼Œä¸è¿‡Wordæ¨¡æ¿å®žä½œæ˜Žæ˜¾çª„äºŽLaTeXé»˜è®¤é—´è·ï¼ˆç”šè‡³å°äºŽè¡Œè·ï¼‰ï¼Œç‰¹åˆ«æ˜¯è¡¨æ&nbsp;¼ã€‚
%
% è¿™äº›é—´è·åœ¨LaTeXä¸­æ¯”è¾ƒå¤æ‚ï¼š
%
% - å›¾è¡¨ caption çš„å¸ƒå±€ä½ç½®ç›¸åï¼Œå´å…±ç”¨æœ¯è¯­
%
%   å›¾è‡ªä¸Šè€Œä¸‹çš„å¸ƒå±€é¡ºåºæ˜¯â€œæ­£æ–‡ â†’ å›¾æœ¬ä½“ â†’ caption â†’ æ­£æ–‡â€ï¼Œè€Œè¡¨æ˜¯â€œæ­£æ–‡ â†’ caption â†’ è¡¨æœ¬ä½“ â†’ æ­£æ–‡â€ã€‚
%   æŒ‰ç…§å›¾çš„å¸ƒå±€ï¼Œcaption çš„ below æŒ‡â€œcaption ðŸ¡˜ æ­£æ–‡â€è·ç¦»ï¼Œabove æŒ‡â€œå›¾è¡¨æœ¬ä½“ ðŸ¡˜ captionâ€è·ç¦»ã€‚
%   è¿™ç§ belowã€above è¯´æ³•å¤–æŽ¨åˆ°äº†è¡¨çš„å¸ƒå±€ï¼Œå¯¼è‡´è¡¨çš„æ‰€è°“ belowã€above ä¸Žå®žé™…ç©ºé—´å…³ç³»ç›¸åã€‚
%   è¯¦è§`caption`å®åŒ…æ‰‹å†Œã€‚
%
% - é—´è·æ˜¯å¤šä¸ªè®¾ç½®ä¹‹å’Œ
%
%   å¯èƒ½æ¶‰åŠä»¥ä¸‹å››ç±»è®¾ç½®ã€‚
%   1. æµ®åŠ¨ä½“è®¾ç½® intextsepã€textfloatsepã€floatsep â€”â€”é»˜è®¤æ˜¯ä¸€æ®µéžé›¶çš„å¼¹æ€§é•¿åº¦ï¼ˆç”± LaTeX å’Œ CTeX å…±åŒæä¾›ï¼‰ï¼Œå¯`setlength`ã€‚
%   2. caption è®¾ç½® belowcaptionskipã€abovecaptionskip â€”â€”é»˜è®¤ä¸ºé›¶ï¼Œå¯ç›´æŽ¥`setlength`ï¼Œæˆ–é—´æŽ¥ç”¨`captionsetup`è®¾ç½®ã€‚
%   3. `caption`å®åŒ…åŠ&nbsp;çš„ strutâ€”â€”è¿™éƒ¨åˆ†ä¸ºé›¶ï¼Œå›&nbsp;ä¸ºå¼•å…¥å®åŒ…æ—¶å·²è®¾ç½®`strut=off`ã€‚
%   4. è¡Œè·â€”â€”æ‰æ‘¸ä¸å®šï¼ˆå›&nbsp;ä¸ºé—´è·ä¸¤è¾¹å­—å·ä¸åŒï¼‰ï¼Œå¹¶ä¸”éš¾ä»¥ä¿®æ”¹ã€‚
%   è¯¦è§ https://github.com/CTeX-org/forum/issues/86 å’Œ https://tex.stackexchange.com/q/26521/266758ã€‚
%
% - å›¾è¡¨å…·ä½“å½¢å¼å¤šæ&nbsp;·
%
%   å›¾å¯èƒ½åŒ…å«å­å›¾ï¼Œå­å›¾è¿˜å¯èƒ½æœ‰å¤šè¡Œï¼Œè¦é¿å…å„è¡Œé—´é®æŒ¡ã€‚
%   è¡¨é™¤äº†æ™®é€š tableï¼Œè¿˜å¯èƒ½æœ‰ longtableï¼ŒåŽè€…æœ‰å¦å¤–çš„`LTpre`ã€`LTpost`æœºåˆ¶ã€‚
%
%    \begin{macrocode}
%
% 1. è®¾ç½®ç›¸å¯¹ç®€å•çš„æµ®åŠ¨ä½“å†…éƒ¨â€œå›¾è¡¨æœ¬ä½“ ðŸ¡˜ captionâ€è·ç¦»ã€‚
%
\@@_if_bachelor_thesis:TF {
  \setlength{\abovecaptionskip}{11pt}

  % è°ƒæ•´è¡¨æ&nbsp;¼ caption å’Œè¡¨æ&nbsp;¼æœ¬ä½“é—´çš„è·ç¦»ã€‚
  \@@_if_thesis_english:TF {
    % è‹±æ–‡æ¨¡æ¿ç¼ºä¹è§„å®šï¼Œåªè°ƒæ•´ä¸­æ–‡æ¨¡æ¿
  } {
    % æœ¬æ¥é»˜è®¤æœ‰ä¸€å®šç©ºéš™ï¼ŒçŽ°æ”¹ä¸ºç´§è´´ï¼Œè¿™æ&nbsp;·æ›´æŽ¥è¿‘Wordæ¨¡æ¿å®žä½œã€‚
    \captionsetup[table]{skip=5pt}
  }
} {
  \captionsetup[table]{skip=8bp}
}
%
% 2. è®¾ç½®æ¯”è¾ƒå¤æ‚çš„å›¾è¡¨æµ®åŠ¨ä½“ä¸Žå‰åŽæ­£æ–‡çš„é—´è·ã€‚
%    a. é¦–å…ˆè®¾ç½®æµ®åŠ¨ä½“ï¼Œä¿è¯â€œå›¾è¡¨æœ¬ä½“ ðŸ¡˜ captionâ€è·ç¦»ï¼›
%    b. ç„¶åŽè®¾ç½® captionï¼Œåœ¨æµ®åŠ¨ä½“è®¾ç½®çš„åŸºç¡€ä¸Šï¼Œè¡¥æ­£â€œcaption ðŸ¡˜ æ­£æ–‡â€è·ç¦»ã€‚
%    c. åŒæ—¶é€‚é… subcaptionã€longtable ç­‰å®åŒ…ã€‚
%
\@@_if_bachelor_thesis:TF {
  % æµ®åŠ¨ä½“ä½äºŽæ­£æ–‡ä¸­é—´æ—¶ï¼Œè°ƒæ•´æµ®åŠ¨ä½“ä¸Žä¸Šä¸‹æ­£æ–‡ä¹‹é—´çš„è·ç¦»ï¼Œå³"å‰åŽåŠ&nbsp;ä¸Šä¸€è¡Œç©ºç™½"
  \setlength{\intextsep}{1.80\baselineskip plus 0.2\baselineskip minus 0.2\baselineskip}
  % æµ®åŠ¨ä½“ä½äºŽé¡µé¢é¡¶éƒ¨æˆ–åº•éƒ¨æ—¶ï¼Œè°ƒæ•´æµ®åŠ¨ä½“ä¸Žæ­£æ–‡ä¹‹é—´çš„è·ç¦»ï¼ŒåŽæˆ–å‰åŠ&nbsp;ä¸Šä¸€è¡Œç©ºç™½
  \setlength{\textfloatsep}{1.80\baselineskip plus 0.2\baselineskip minus 0.2\baselineskip}

  \@@_if_thesis_english:TF {
    \setlength{\belowcaptionskip}{9pt}
  } {
    % ä¸ºäº†æ»¡è¶³â€œå‰åŽä¸€è¡Œç©ºç™½çš„é—®é¢˜â€ï¼Œéœ€è¦åˆ&nbsp;é™¤ caption ä¸‹æ–¹çš„é—´è·ã€‚
    %
    % è¿™é‡Œå®žé™…çš„ skip åœ¨ 15pt å·¦å³ï¼Œä½†æ˜¯å…¨éƒ¨ç§»é™¤ä¼šå¯¼è‡´å½“å›¾ç‰‡ç½®äºŽé¡µé¢é¡¶éƒ¨æ—¶ï¼Œ
    % å›¾ç‰‡ä¸Žä¸Šæ–¹çš„é—´è·è¿‡å°ï¼Œå›&nbsp;æ­¤è¿™é‡Œåªç§»é™¤ 5ptã€‚
    % å½“ç„¶ï¼Œè¿™æ&nbsp;·ä¼šå¯¼è‡´æ–‡æœ¬é—´çš„å›¾ç‰‡çš„ caption ä¸‹æ–¹çš„é—´è·å¾®å¾®å¤§äºŽä¸€è¡Œã€‚
    %
    % è‡³äºŽè¡¨æ&nbsp;¼ï¼Œ`caption`å®åŒ…å·²è€ƒè™‘å¸ƒå±€åŒºåˆ«ï¼Œç»Ÿä¸€è®¾ç½® belowskip å³å¯ã€‚
    \captionsetup{belowskip=-5pt}
    % ä¸è¿‡ longtable å®åŒ…æœ‰å¦å¤–çš„æœºåˆ¶ï¼Œä¸è®¾ç½® belowskip æ—¶é—´è·å·²å¯è¾ƒå°ï¼Œ
    % è®¾ç½®æˆè´Ÿæ•°è¿˜å¯¼è‡´ caption å’Œè¡¨æ&nbsp;¼æœ¬ä½“çš„è·ç¦»å˜å¤§ã€‚å›&nbsp;æ­¤æˆ‘ä»¬æ’¤é”€æ›´æ”¹ã€‚
    \captionsetup[longtable]{belowskip=0pt}

  }
  \AtBeginDocument {
    % longtable å®åŒ…æœ‰å¦å¤–çš„æœºåˆ¶ï¼Œéœ€ä¸“é—¨è°ƒæ•´
    \@ifpackageloaded{longtable}{
      \setlength{\LTpre}{1.60\baselineskip plus 0.2\baselineskip minus 0.2\baselineskip}
      \setlength{\LTpost}{1.60\baselineskip plus 0.2\baselineskip minus 0.2\baselineskip}
    }{}
  }
} {
  % ä¿ç•™â€œæ­£æ–‡ ðŸ¡˜ å›¾ç‰‡æœ¬ä½“â€è·ç¦»ä¸åŠ¨ï¼Œç¼©å°â€œè¡¨æ&nbsp;¼æœ¬ä½“ ðŸ¡˜ æ­£æ–‡â€å®žé™…è·ç¦»ï¼Œä½¿äºŒè€…ç›¸è¿‘
  \AtBeginEnvironment{table}{
    \setlength{\intextsep}{3bp plus 1pt minus 1pt}
  }

  % è°ƒæ•´â€œæ­£æ–‡ ðŸ¡˜ è¡¨æ&nbsp;¼ captionâ€è·ç¦»
  \captionsetup[table]{belowskip = 6bp + 0.25\baselineskip}

  % è°ƒæ•´â€œå›¾ç‰‡ caption ðŸ¡˜ æ­£æ–‡â€è·ç¦»
  % è¿™ä¸€è·ç¦»æ˜¯ intextsep ä¸Ž belowcaptionskip ä¹‹å’Œã€‚
  % å‰è€…åœ¨å°å›› ctexbook ä¸­é»˜è®¤ä¸º`14.0pt plus 4.0pt minus 4.0pt`ï¼Œæˆ‘ä»¬æœªæ”¹ã€‚
  % è®¡ç®—ä¸‹æ¥ï¼ŒåŽè€…åº”è®¾ç½®ä¸º 14.0pt - 6bp å·¦å³ã€‚
  \captionsetup[figure]{belowskip = -12pt}
  % æµ®åŠ¨ä½“è¿žç»­æŽ’åˆ—æ—¶ï¼Œè¡¥å¿ä»¥ä¸Šè´Ÿé—´è·
  \addtolength{\floatsep}{12pt}

  % é€‚é…å­å›¾
  \captionsetup[subfigure]{aboveskip = 3bp, belowskip = 3bp}

  \AtBeginDocument {
    % longtable å®åŒ…æœ‰å¦å¤–çš„æœºåˆ¶ï¼Œéœ€ä¸“é—¨è°ƒæ•´
    \@ifpackageloaded{longtable}{
      \setlength{\LTpre}{0.2\baselineskip plus 0.2\baselineskip minus 0.2\baselineskip}
      \setlength{\LTpost}{0.1\baselineskip plus 0.2\baselineskip minus 0.2\baselineskip}
    }{}
  }
}
%    \end{macrocode}
%
% å®šä¹‰å›¾è¡¨æ&nbsp;‡é¢˜ä¸­çš„åˆ†éš”å­—ç¬¦ï¼ŒåŒæ—¶è°ƒæ•´å­—å·ã€‚
%    \begin{macrocode}
\@@_if_graduate:TF {
  \tl_set:Nn \g_@@_label_divide_char_tl {.}
  % ç&nbsp;”ç©¶ç”Ÿæ¨¡æ¿è¦æ±‚ "å›¾åºå’Œå›¾é¢˜é—´ç©º1ä¸ªä¸­æ–‡å­—è·"
  \captionsetup[figure]{font=small,labelsep=quad}
  % ç&nbsp;”ç©¶ç”Ÿæ¨¡æ¿è¦æ±‚ "è¡¨åºå’Œé¢˜ç›®é—´ç©º1ä¸ªä¸­æ–‡å­—è·"
  \captionsetup[table]{font=small,labelsep=quad}
  % å…¶å®ƒ caption ä¹Ÿå‚ç…§ä¸Šè¿°æ&nbsp;¼å¼
  \captionsetup[lstlisting]{font=small,labelsep=quad}
  \captionsetup[algorithm]{font=small,labelsep=quad}
} {
  \tl_set:Nn \g_@@_label_divide_char_tl {-}
  % æœ¬ç§‘ç”Ÿæ¨¡æ¿æ—&nbsp; caption å­—è·è¦æ±‚
  \captionsetup[figure]{font=small,labelsep=space}
  \captionsetup[table]{font=small,labelsep=space}
  \captionsetup[lstlisting]{font=small,labelsep=space}
  \captionsetup[algorithm]{font=small,labelsep=space}
}
% ä¸ºäº†ä¸å¼ºåˆ¶å¯¼å…¥å®åŒ…ï¼Œä¸”å…è®¸æœ€ç»ˆä½œè€…åœ¨å¯¼è¨€åŒºè¦†å†™ï¼Œä¸ä½¿ç”¨`\@ifpackageloaded`æˆ–`\AtBeginDocument`
\ctex_at_end_package:nn {algorithm2e} {
  \SetAlCapFnt{\small}
  \SetAlCapNameFnt{\small}
}
%    \end{macrocode}
%
% ä¸ºä¿è¯å„ç§è¡¨æ&nbsp;¼ã€ç®—æ³•æ•ˆæžœä¸€è‡´ï¼Œè¦æ‰‹åŠ¨é‡ç½® setspace å®åŒ…æ¼æŽ‰çš„æƒ…å†µï¼Œå…·ä½“åŒ…æ‹¬ longtable å’Œä»»æ„ H åž‹æµ®åŠ¨ä½“ã€‚
% ç”±äºŽæµ®åŠ¨ä½“çš„ H å¾ˆéš¾æ£€æµ‹ï¼Œå¹²è„†ç»Ÿä¸€è®¾ç½®ã€‚ï¼ˆH æœªå¿…ç”± float å®åŒ…æä¾›ï¼Œä¾‹å¦‚ algorithm2e çš„ H å°±ä¸æ˜¯ã€‚ï¼‰
% æœªä½¿ç”¨ |\singlespacing|ï¼Œå›&nbsp;ä¸ºå®ƒä¼šåœ¨ |\setstretch{1}| åŸºç¡€ä¸Šç©ºä¸€è¡Œï¼Œæ·»åŠ&nbsp;å¤šä½™ç©ºç™½ã€‚
%    \begin{macrocode}
\clist_map_inline:nn {longtable, table, algorithm} {
  \AtBeginEnvironment {#1} { \setstretch{1} }
}
%    \end{macrocode}
%
% è°ƒæ•´ç®—æ³•çŽ¯å¢ƒå†…éƒ¨çš„å­—å·ã€‚
%
% å­¦æ&nbsp;¡æ—&nbsp;è§„å®šï¼Œä½†é»˜è®¤ä¸Žæ­£æ–‡ç›¸åŒï¼Œå¾ˆæ€ªã€‚éœ€è¦è°ƒå°è‡³ä¸Ž caption ç›¸åŒã€‚
%    \begin{macrocode}
\AtBeginEnvironment {algorithmic} {\small}
\ctex_at_end_package:nn {algorithm2e} { \SetAlFnt{\small} }
%    \end{macrocode}
%
% æ±‰åŒ–å®åŒ…ã€‚
%    \begin{macrocode}
\@@_if_thesis_english:F {
  \ctex_at_end_package:nn {algorithm2e} {
    \SetKwInput{KwData}{æ•°æ®}
    \SetKwInput{KwResult}{ç»“æžœ}
    \SetKwInput{KwIn}{è¾“å…¥}
    \SetKwInput{KwOut}{è¾“å‡º}
  }
  \ctex_at_end_package:nn {algorithmic} {
    \renewcommand*{\algorithmicrequire}{\textbf{è¾“å…¥ï¼š}}
    \renewcommand*{\algorithmicensure}{\textbf{è¾“å‡ºï¼š}}
  }
}
%    \end{macrocode}
%
% \begin{macro}{\thefigure,\thetable,\theequation,\thelstlisting,\lstlistingname}
% å®šä¹‰å„ç§è®¡æ•°å™¨çš„æ&nbsp;¼å¼ã€‚
%    \begin{macrocode}
% å›¾ç‰‡ï¼šäº”å·å­—ã€‚
\cs_set:Npn \thefigure {\thechapter\g_@@_label_divide_char_tl\arabic{figure}}

% è¡¨æ&nbsp;¼ï¼šäº”å·å­—ã€‚
\cs_set:Npn \thetable {\thechapter\g_@@_label_divide_char_tl\arabic{table}}

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

% code snippet
\AtBeginDocument{
  \cs_gset:Npn \thelstlisting {\thechapter\g_@@_label_divide_char_tl\arabic{lstlisting}}
  \cs_gset:Npn \lstlistingname {\c_@@_label_code_tl}

  % å®šä¹‰ç®—æ³•æ&nbsp;‡é¢˜
  % é’ˆå¯¹ algorithm å®åŒ…
  \tl_set:Nn \ALG@name {\l_@@_misc_autoref_algo_tl}
  % é’ˆå¯¹ algorithm2e å®åŒ…
  \tl_set:Nn \algorithmcfname {\l_@@_misc_autoref_algo_tl}

  % å®šä¹‰ç®—æ³•çš„ autoref
  % algorithm2e å®åŒ…ä¼šè¦†å†™å®ƒï¼Œæ‰€ä»¥æˆ‘ä»¬å¿…é¡»AtBeginDocumentæ—¶å†ä¿®æ”¹
  \tl_set:Nn \algorithmautorefname {\l_@@_misc_autoref_algo_tl}

  % ç®—æ³•å˜æˆã€Œç«&nbsp;èŠ‚å·-åºå·ã€
  % ä¸ºäº†å‡å°‘ä¿®æ”¹ï¼Œæˆ‘ä»¬åªé€‚é…æŒ‰ç«&nbsp;ç¼–å·çš„æƒ…å†µã€‚
  % é’ˆå¯¹ algorithm å®åŒ…
  \@ifpackagewith{algorithm}{chapter}{
    \cs_gset:Npn \thealgorithm
    {\thechapter\g_@@_label_divide_char_tl\arabic{algorithm}}
  }{}
  % é’ˆå¯¹ algorithm2e å®åŒ…
  \@ifpackagewith{algorithm2e}{algochapter}{
    % åå­—ä¸­çš„â€œcfâ€æ˜¯æŒ‡å…¶ä½œè€… Christophe Fiorioã€‚
    \cs_gset:Npn \thealgocf
    {\thechapter\g_@@_label_divide_char_tl\arabic{algocf}}
  }{}

  % é»˜è®¤çš„æƒ…å†µä¸‹ï¼Œä¿ç•™å…¬å¼å’Œä¸Šä¸‹æ–‡çš„ä¸€å®šé—´è·ã€‚ï¼ˆä¼šæ¯” Word ç¨å®½ä¸€äº›ï¼‰
  \setlength{\abovedisplayskip}{\l_@@_style_math_above_display_skip_dim}
  \setlength{\abovedisplayshortskip}{\l_@@_style_math_above_display_skip_dim}
  \setlength{\belowdisplayskip}{\l_@@_style_math_below_display_skip_dim}
  \setlength{\belowdisplayshortskip}{\l_@@_style_math_below_display_skip_dim}
  % è°ƒæ•´æµ®åŠ¨ä½“ä¸Žæ–‡å­—ä¹‹é—´çš„è·ç¦»
  \addtolength{\intextsep}{\l_@@_misc_float_separation_tl\baselineskip}
  \addtolength{\textfloatsep}{\l_@@_misc_float_separation_tl\baselineskip}
  % longtable å®åŒ…æœ‰å¦å¤–çš„æœºåˆ¶ï¼Œéœ€ä¸“é—¨è°ƒæ•´
  \@ifpackageloaded{longtable}{
    \addtolength{\LTpre}{\l_@@_misc_float_separation_tl\baselineskip}
    \addtolength{\LTpost}{\l_@@_misc_float_separation_tl\baselineskip}
  }{}
  % è°ƒæ•´ç®—æ³•ä¸Žæ–‡å­—ä¹‹é—´çš„è·ç¦»
  % é’ˆå¯¹ algorithm2e å®åŒ…
  \@ifpackageloaded{algorithm2e}{
    % å®åŒ…æ‰‹å†Œä»‹ç»å¯è‡ªå®šä¹‰å®ï¼Œå†`\SetAlgoSkip`ï¼›æˆ‘ä»¬ä¸ºç®€æ´ï¼Œç›´æŽ¥è¦†å†™ã€‚
    \renewcommand{\@algoskip}{\vspace{\l_@@_misc_algorithm_separation_tl}}
  }{}
}
%    \end{macrocode}
% \end{macro}
%
% è°ƒæ•´åº•å±‚ TeX æŽ’ç‰ˆå¼•æ“Žå‚æ•°ä»¥ä¿è¯æ‰€æœ‰æ®µè½èƒ½å¤Ÿå¾ˆå¥½åœ°ä»¥ä¸¤ç«¯å¯¹é½çš„æ–¹å¼å‘ˆçŽ°ã€‚
% æ˜¯çš„ï¼Œè¿™æ˜¯ç¥–ä¼&nbsp;ä»£ç&nbsp;ã€‚
% åœ¨è‹±æ–‡æ¨¡å¼ä¸‹ç¦ç”¨ï¼Œå›&nbsp;ä¸ºè¿™æ®µä»£ç&nbsp;ä¼šç¦ç”¨ hyphenation.
%    \begin{macrocode}
\bool_if:NF \l_@@_style_hyphen_bool {
  \hbadness=10000
  \tolerance=1
  \emergencystretch=\maxdimen
  \hyphenpenalty=10000
}
%    \end{macrocode}
%
% è‡ªå®šä¹‰ä¸€ä¸ªé»˜è®¤çš„ lstlisting æ&nbsp;·å¼ã€‚
%    \begin{macrocode}
\definecolor{codegreen}{rgb}{0,0.6,0}
\definecolor{codegray}{rgb}{0.5,0.5,0.5}
\definecolor{codepurple}{rgb}{0.58,0,0.82}
\definecolor{backcolour}{rgb}{0.95,0.95,0.92}
\lstdefinestyle{examplestyle}{
    backgroundcolor=\color{backcolour},
    commentstyle=\color{codegreen},
    keywordstyle=\color{magenta},
    numberstyle=\tiny\color{codegray},
    stringstyle=\color{codepurple},
    basicstyle=\ttfamily\footnotesize,
    breakatwhitespace=false,
    breaklines=true,
    captionpos=b,
    keepspaces=true,
    numbers=left,
    numbersep=5pt,
    showspaces=false,
    showstringspaces=false,
    showtabs=false,
    tabsize=2
}
\lstset{style=examplestyle}
%    \end{macrocode}
%
% è°ƒæ•´æ’å›¾ç›®å½•ä¸Žè¡¨æ&nbsp;¼ç›®å½•çš„æ&nbsp;‡é¢˜ã€‚
%    \begin{macrocode}
\cs_set:Npn \listfigurename {\currentpdfbookmark{\c_@@_label_figure_tl}{ch:figures}\@@_get_const:n {figure}}
\cs_set:Npn \listtablename {\currentpdfbookmark{\c_@@_label_table_tl}{ch:tables}\@@_get_const:n {table}}
%    \end{macrocode}
%
% é¢„å®šä¹‰ç”¨æˆ·å¸¸ç”¨çš„è¯æ˜ŽçŽ¯å¢ƒã€‚
%    \begin{macrocode}
\theoremstyle{plain}
  \newtheorem{algo}{\@@_get_const:n {algo}}[chapter]
  \newtheorem{them}{\@@_get_const:n {them}}[chapter]
  \newtheorem{lem}{\@@_get_const:n {lem}}[chapter]
  \newtheorem{prop}{\@@_get_const:n {prop}}[chapter]
  \newtheorem{cor}{\@@_get_const:n {cor}}[chapter]
  \newtheorem{axi}{\@@_get_const:n {axi}}[chapter]
\theoremstyle{definition}
  \newtheorem{defn}{\@@_get_const:n {defn}}[chapter]
  \newtheorem{conj}{\@@_get_const:n {conj}}[chapter]
  \newtheorem{exmp}{\@@_get_const:n {exmp}}[chapter]
  \newtheorem{case}{\@@_get_const:n {case}}
\theoremstyle{remark}
  \newtheorem{rem}{\@@_get_const:n {rem}}
  \renewcommand{\qedsymbol}{\ensuremath{\blacksquare}}
%    \end{macrocode}
%
% \begin{macro}{\@@_dunderline:nnn,\@@_dunderline:nn,\@@_dunderline:n}
% ç”¨äºŽæ¸²æŸ“ä¸‹åˆ’çº¿ã€‚
%
% å‚æ•°å¦‚ä¸‹ï¼š
% \begin{itemize}
%   \item \#1 ä½ç½®ï¼Œå¯é€‰å€¼ä¸º \texttt{c}enterã€\texttt{l}eftã€\texttt{r}ightã€‚
%   \item \#2 |dim| é•¿åº¦ã€‚
%   \item \#3 |tl| æ–‡å­—å†…å®¹ã€‚
% \end{itemize}
%    \begin{macrocode}
\cs_new:Npn \@@_dunderline:nnn #1#2#3 {
  {\setbox0=\hbox{#3}\ooalign{\copy0\cr\rule[\dimexpr#1-#2\relax]{\wd0}{#2}}}
}
\cs_new:Npn \@@_dunderline:nn #1#2 {
  \@@_dunderline:nnn {#1} {1pt} {#2}
}
\cs_new:Npn \@@_dunderline:n #1 {
  \@@_dunderline:nnn {-10pt} {1pt} {#1}
}
% é—ç•™ä»£ç&nbsp;ï¼Œç­‰å¾…é‡æž„ã€‚
\newcommand\dunderline[3][-1pt]{{%
  \setbox0=\hbox{#3}
  \ooalign{\copy0\cr\rule[\dimexpr#1-#2\relax]{\wd0}{#2}}}}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{|@@_render_cover_entry:nn}
% ç”¨äºŽæ¸²æŸ“å°é¢çš„è¾…åŠ©å‡½æ•°ã€‚
%
% å‚æ•°å¦‚ä¸‹ï¼š
% \begin{itemize}
%   \item \#1 |{token_list}| ä¸ºå°é¢ä¿¡æ¯æ¡ç›®çš„åç§°ï¼Œå«åˆ†éš”ç¬¦ã€‚
%   \item \#2 |{token_list}| ä¸ºå°é¢ä¿¡æ¯æ¡ç›®çš„å†…å®¹ã€‚
% \end{itemize}
%
% éœ€è¦åœ¨ |\l_@@_cover_label_max_width_dim| å’Œ |\l_@@_cover_value_max_width_dim|
% å­˜å‚¨å·²ç»è®¡ç®—å‡ºæ¥çš„æœ€å¤§å®½åº¦ã€‚
%    \begin{macrocode}
\cs_new:Npn \@@_render_cover_entry:nn #1#2 {
  \makebox[\l_@@_cover_label_max_width_dim][\l_@@_cover_label_align_tl]{
    \tl_if_blank:VTF #1 {} {#1}
  }
  \hspace{1ex}
  \@@_dunderline:nnn{\l_@@_cover_underline_offset_dim}
    {\l_@@_cover_underline_thickness_dim}{
    \makebox[\l_@@_cover_value_max_width_dim][\l_@@_cover_value_align_tl]{#2}
  }\par
}
%    \end{macrocode}
% \end{macro}

% \begin{macro}{|@@_cover_entry_rendered_width:}
% é¢„ä¼° |\@@_render_cover_entry:nn| ä¼šå&nbsp;ç”¨çš„å®½åº¦ï¼Œå¯ç”¨äºŽåˆ¤æ–­è¡Œæ˜¯å¦ä¼šæº¢å‡º
%    \begin{macrocode}
\cs_new:Nn \@@_cover_entry_rendered_width: {
  \l_@@_cover_label_max_width_dim + 1ex + \l_@@_cover_value_max_width_dim
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{|@@_get_text_width:Nn,\@@_get_text_width:NV}
% è®¡ç®— \#2 æ‰€å&nbsp;ç”¨çš„å®½åº¦ï¼Œå°†ç»“æžœå­˜å‚¨åœ¨ \#1 ä¸­ã€‚
%
% å‚æ•°å¦‚ä¸‹ï¼š
% \begin{itemize}
%   \item \#1 |dim| å­˜å‚¨å®½åº¦çš„å˜é‡ã€‚
%   \item \#2 |tl| è¦è®¡ç®—å®½åº¦çš„æ–‡æœ¬ã€‚
% \end{itemize}
%    \begin{macrocode}
\cs_new:Npn \@@_get_text_width:Nn #1#2
  {
    \hbox_set:Nn \l_tmpa_box {#2}
    \dim_set:Nn #1 { \box_wd:N \l_tmpa_box }
  }
\cs_generate_variant:Nn \@@_get_text_width:Nn { NV }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_get_max_text_width:NN}
% ä»Ž \#2 ä¸­èŽ·å–æœ€å¤§çš„æ–‡æœ¬å®½åº¦ï¼Œç„¶åŽè®¾ç½®åˆ° \#1 ä¸­ã€‚
%
% å‚æ•°å¦‚ä¸‹ï¼š
% \begin{itemize}
%   \item \#1: |dim| ç”¨äºŽè¾“å‡ºæœ€å¤§å®½åº¦ã€‚
%   \item \#2: |seq| ç”¨äºŽè¾“å…¥æ–‡æœ¬ã€‚
% \end{itemize}
%    \begin{macrocode}
\cs_new:Npn \@@_get_max_text_width:NN #1#2
  {
% è¿™é‡Œç”¨ |group| ç¡®ä¿å±€éƒ¨å˜é‡ä¸ä¼šè¢«æ±¡æŸ“ã€‚
    \group_begin:
      \seq_set_eq:NN \l_@@_tmpa_seq #2
      \dim_zero:N #1
      \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:
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_parse_entry:nn}
% è§£æžå°é¢ä¿¡æ¯æ¡ç›®ï¼Œä¸¢å¼ƒç©ºé¡¹ï¼Œå¹¶æ·»åŠ&nbsp;åˆ†éš”ç¬¦ã€‚
%
% å‚æ•°å¦‚ä¸‹ï¼š
% \begin{itemize}
%   \item \#1: |tl| ä¸ºå°é¢ä¿¡æ¯æ¡ç›®çš„åç§°ã€‚
%   \item \#2: |tl| ä¸ºå°é¢ä¿¡æ¯æ¡ç›®çš„å†…å®¹ã€‚
% \end{itemize}
% |\\| ä¼šè¢«è§†ä¸ºæ¢è¡Œç¬¦ï¼Œä»Žè€Œå®žçŽ°ä¿¡æ¯æ¡ç›®æ¢è¡Œçš„æ•ˆæžœã€‚
%
% ç»“æžœä¼šå­˜å‚¨åˆ° |\l_@@_tmp_left_seq| å’Œ |\l_@@_tmp_right_seq|ã€‚
%
%    \begin{macrocode}
\cs_new:Npn \@@_parse_entry:nn #1 #2 {
  \seq_clear:N \l_@@_tmp_left_seq
  \seq_clear:N \l_@@_tmp_right_seq

  % åªå¤„ç† value éžç©ºçš„é¡¹
  \tl_set:Nn \l_tmpa_tl {#2}
  \tl_if_empty:xTF {\l_tmpa_tl} {} {
    \seq_set_split:Nnx \l_@@_tmp_right_seq {\\} {#2}
    \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\l_@@_cover_delimiter_tl}
    \seq_pop_right:NN \l_@@_tmp_left_seq \g_@@_trashcan_tl
  }
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_render_cover_entry}
% æ¸²æŸ“å°é¢ä¿¡æ¯é¡¹ã€‚æ­¤å‡½æ•°ä¸ºä¸»å‡½æ•°ã€‚
%    \begin{macrocode}
\msg_new:nnn { bithesis } { render-cover-entry/overfull-hbox }
  {
    One~or~more~cover~entries~are~too~wide,~which~may~result~in~poor~layout.\\
    To~fix~it,~please~split~long~entries~into~multiple~lines~by~inserting~â€œ\c_backslash_str\c_backslash_strâ€.\\
    \@@_warning_footer:n { render-cover-entry/overfull-hbox }
  }
\cs_new:Npn \@@_render_cover_entry:N #1 {
  % å·¦è¾¹æ˜¯æ&nbsp;‡ç­¾ï¼Œå³è¾¹æ˜¯å€¼ã€‚
  % å½¢å¦‚ï¼š
  % { {label_1} {value_1}, {label_2} {value 2} }
  % é¦–å…ˆè½¬æ¢æˆ seq ç±»åž‹ã€‚
  \seq_set_from_clist:NN \l_@@_input_seq #1
  \seq_map_inline:Nn \l_@@_input_seq {
    % ç„¶åŽå¯¹äºŽæ¯ä¸€å¯¹ label å’Œ valueï¼Œé¦–å…ˆæŸ¥æ‰¾
    % value ä¸­æ˜¯å¦å«æœ‰ \\ å­—ç¬¦ï¼Œå¦‚æžœæœ‰ï¼Œåˆ™å°†å…¶åˆ†å‰²æˆå¤šä¸ª
    % label - value å¯¹ã€‚
    % æ¯”å¦‚ {label_1} {value \\ 1} ä¼šè¢«è½¬æ¢æˆ
    % { {label_1} {value}, {} {1} }
    \@@_parse_entry:nn ##1
    % ç„¶åŽå°†è¿™äº› label - value å¯¹æ·»åŠ&nbsp;åˆ° \l_@@_right_seq
    % æˆ–è€… \l_@@_left_sql ä¸­ã€‚
    % left å°±æ˜¯ labelï¼Œright å°±æ˜¯ valueã€‚
    \seq_concat:NNN \l_@@_right_seq \l_@@_right_seq \l_@@_tmp_right_seq
    \seq_concat:NNN \l_@@_left_seq \l_@@_left_seq \l_@@_tmp_left_seq
  }

  % å¦‚æžœç”¨æˆ·é€‰æ‹©è‡ªåŠ¨è®¡ç®—æœ€å¤§å®½åº¦ï¼Œåˆ™è®¡ç®—æœ€å¤§å®½åº¦ã€‚
  \bool_if:NT \l_@@_cover_auto_width_bool {
    \@@_get_max_text_width:NN \l_@@_cover_label_max_width_dim \l_@@_left_seq
    \@@_get_max_text_width:NN \l_@@_cover_value_max_width_dim \l_@@_right_seq
    % åœ¨ value ä¸¤è¾¹åŠ&nbsp;ä¸Šç©ºç™½ï¼Œé¿å…æ–‡æœ¬å¤ªé&nbsp;è¾¹ã€‚
    \dim_add:Nn \l_@@_cover_value_max_width_dim { \l_@@_cover_auto_width_padding_dim * 2 }
  }
  \dim_compare:nNnT { \linewidth } &lt; { \@@_cover_entry_rendered_width: } {
    \msg_warning:nn {bithesis} {render-cover-entry/overfull-hbox}
  }


  % æœ€åŽï¼Œæ&nbsp;¹æ®å®½åº¦æ¸²æŸ“ label å’Œ value å¯¹ã€‚
  \group_begin:
    \bool_until_do:nn { \seq_if_empty_p:N \l_@@_left_seq }
      {
        \seq_pop_left:NN \l_@@_left_seq \l_@@_tmpa_tl
        \seq_pop_left:NN \l_@@_right_seq \l_@@_tmpb_tl
        \@@_render_cover_entry:nn {\l_@@_tmpa_tl} {\l_@@_tmpb_tl}
      }
  \group_end:
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_make_graduate_cover:}
% åˆ¶ä½œç&nbsp;”ç©¶ç”Ÿè®ºæ–‡æ¨¡æ¿å°é¢ã€‚
%    \begin{macrocode}
\cs_new:Npn \@@_make_graduate_cover: {
  \cleardoublepage
  \bool_if:NT \l_@@_internal__pre_frontmatter__bookmarked_bool {
    \currentpdfbookmark{å°é¢}{pre-frontmatter:cover}
  }
  \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 \par}
    \vskip 60mm
    {
      % æ¸²æŸ“ä¿¡æ¯ã€‚
      \clist_set:Nn \l_@@_input_clist {
        {å§“åï¼š} {\@@_secret_info_fixed:Nn \l_@@_value_author_tl {3}},
        {å­¦å·ï¼š} {\@@_secret_info:N \l_@@_value_student_id_tl},
        {å­¦é™¢ï¼š} {\l_@@_value_school_tl},
      }
      \linespread{2.0}\selectfont
      % é»‘ä½“ å°ä¸‰
      \heiti \zihao{-3} \@@_render_cover_entry:N \l_@@_input_clist
    }
    \vskip 10mm
    % é»‘ä½“ å°ä¸‰
    {\heiti \zihao{-3} \l_@@_cover_date_tl}
  \end{titlepage}
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_make_paper_back:}
% åˆ¶ä½œä¹¦è„Šã€‚
%    \begin{macrocode}
\msg_new:nnn { bithesis } { paper-back/missing-degree-type-icon-file }
  {
    Failed~to~find~the~file~for~degree~type~in~the~paper~back:~#1.\\
    Please~download~from~https://github.com/BITNP/BIThesis/blob/main/templates/graduate-thesis/ #1.\\
    \@@_warning_footer:n { paper-back/missing-degree-type-icon-file }
  }
\cs_new:Npn \@@_make_paper_back: {
  \cleardoublepage
  \bool_if:NT \l_@@_internal__pre_frontmatter__bookmarked_bool {
    \currentpdfbookmark{ä¹¦è„Š}{pre-frontmatter:paperback}
  }
  \begin{titlepage}
    \centering
    % å®žçŽ°ç«–æŽ’â€”â€”å°†æ°´å¹³å®½åº¦è®¾å¾—å¾ˆçª„ï¼Œè®©æ–‡å­—è‡ªåŠ¨æ¢è¡Œï¼Œå¹¶æ”¹å°è¡Œè·
    \linespread{1.1}\selectfont
    \begin{minipage}[c][19.7cm]{2em}
      \centering
      {  
        \tl_new:N \l_@@_icon_path_tl
        \tl_set:Nx \l_@@_icon_path_tl { misc/icon_ \l_@@_value_degree_type_tl .jpg }
        \file_if_exist:nTF {\l_@@_icon_path_tl} {
          \includegraphics[width=1.5em]{\l_@@_icon_path_tl}
        } {
          \msg_warning:nnV {bithesis} {paper-back/missing-degree-type-icon-file} {\l_@@_icon_path_tl}
        }
      }
      \vspace{1em plus 1fill}
      \par
      {
        \heiti\zihao{3}
        \tl_if_blank:VTF \l_@@_value_vertical_title_tl
          {\l_@@_value_title_tl}{\l_@@_value_vertical_title_tl}
      }
      \par
      \vspace{1em plus 1fill}
      {\heiti\zihao{3}\@@_secret_info:nn{\l_@@_value_author_tl}{\g_@@_const_substitute_symbol_tl\quad\g_@@_const_substitute_symbol_tl\quad\g_@@_const_substitute_symbol_tl}}
      \par
      \vspace{1em plus 1fill}
      {\heiti\zihao{3}\c_@@_label_university_tl}
    \end{minipage}
  \end{titlepage}
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_make_chinese_title_page:}
% åˆ¶ä½œä¸­æ–‡å°é¢é¡µã€‚
%    \begin{macrocode}
\cs_new:Npn \@@_make_chinese_title_page: {
  \cleardoublepage
  \bool_if:NT \l_@@_internal__pre_frontmatter__bookmarked_bool {
    \currentpdfbookmark{ä¸­æ–‡é¢˜åé¡µ}{pre-frontmatter:titlepage-zh}
  }
  \begin{titlepage}
      \begin{minipage}[t]{0.48\textwidth}
        % å¯†çº§ã€åˆ†ç±»å·
        {\heiti \zihao{5} \noindent \c_@@_label_classification_tl}
        \l_@@_value_classification_tl\\
        {\heiti \zihao{5} \c_@@_label_udc_tl}  \l_@@_value_udc_tl
      \end{minipage}

      \hfill

      % ä»¥ä¸‹å†…å®¹æ˜¯ã€Œå­¦ç”Ÿç±»åž‹ã€çš„å†…å®¹ï¼Œ
      % åœ¨æ²¡æœ‰å‹¾é€‰çš„æ—¶å€™éšè—ã€‚
      \bool_if:nT {\l_@@_cover_show_special_type_box_bool || \l_@@_value_international_student_ugp_bool || \l_@@_value_cross_research_bool || \l_@@_value_engineering_special_plan_bool} {
        \begin{minipage}[t]{0.48\textwidth}
          \vspace{-12pt}
          \begin{flushright}
          \setlength\fboxrule{1pt}\setlength\fboxsep{3mm}
          \fbox{
            \noindent\begin{minipage}{0.48\linewidth}
              \heiti \zihao{-4}
              \scalebox{1.1}\BigStar{}\hspace{4pt} \c_@@_label_special_type_tl\\

              {
                \zihao{4}
                \bool_if:NTF \l_@@_value_engineering_special_plan_bool {\@@_boxcheck:} {\@@_boxempty:}
              }
              \hspace{1pt}\c_@@_label_engineering_special_plan_tl\\

              {
                \zihao{4}
                \bool_if:NTF \l_@@_value_cross_research_bool {\@@_boxcheck:} {\@@_boxempty:}
              }
              \hspace{1pt}\c_@@_label_cross_research_tl\\

              {
                \zihao{4}
                \bool_if:NTF \l_@@_value_international_student_ugp_bool {\@@_boxcheck:} {\@@_boxempty:}
              }
              \hspace{1pt}\c_@@_label_international_student_ugp_tl
            \end{minipage}
          }
          \end{flushright}
        \end{minipage}
        % ä¿è¯ä¸‹é¢çš„å†…å®¹ç©ºé—´ä¸ä¼šå—åˆ°æŒ¤å&nbsp;ã€‚
        \vspace{-35pt}
      }

     \begin{center}

      \vskip \stretch{1}

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

      \vskip \stretch{1}

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

      {
        \renewcommand{\baselinestretch}{2}

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

        % å¦‚æžœä¸æ˜¯è‡ªåŠ¨è®¡ç®—å®½åº¦ï¼Œä¸”ç”¨æˆ·æ²¡æœ‰è‡ªå®šä¹‰å®½åº¦ï¼Œ
        % åˆ™å°è¯•æä¾›ä¸€ä¸ªé»˜è®¤å®½åº¦ã€‚
        \bool_if:NF \l_@@_cover_auto_width_bool {
          \dim_compare:nNnT {\l_@@_cover_label_max_width_dim} = {0pt} {
            \dim_set:Nn \l_@@_cover_label_max_width_dim {45mm}
          }
          \dim_compare:nNnT {\l_@@_cover_value_max_width_dim} = {0pt} {
            \dim_set:Nn \l_@@_cover_value_max_width_dim {60mm}
          }
        }

        % æ¸²æŸ“ä¿¡æ¯ã€‚
        % æ­¤å¤„å¿…é¡»é™åˆ¶ç›²å®¡æ¨¡å¼æ›¿æ¢ç¬¦å·æ•°é‡ï¼Œä¸ç„¶ä¼šæ³„éœ²ä¿¡æ¯ï¼Œè¿˜å¯èƒ½å¯¼è‡´è¡Œæº¢å‡º
        \clist_set:Nn \l_@@_input_clist {
            {\c_@@_graduate_label_author_tl} {\@@_secret_info_fixed:Nn \l_@@_value_author_tl {3}},
            {\c_@@_graduate_label_school_tl} {\l_@@_value_school_tl},
            {\c_@@_graduate_label_supervisor_tl} {\@@_secret_info_fixed:Nn \l_@@_value_supervisor_tl {5}},
            {\c_@@_graduate_label_industrial_mentor_tl} {\@@_secret_info_fixed:Nn \l_@@_value_industrial_mentor_tl {5}},
            {\c_@@_graduate_label_chairman_tl} {\@@_secret_info_fixed:Nn \l_@@_value_chairman_tl {5}},
            {\g_@@_const_info_degree_tl} {\l_@@_value_degree_tl},
            {\g_@@_const_info_major_tl} {\l_@@_value_major_tl},
            {\c_@@_graduate_label_institute_tl} {\l_@@_value_institute_tl},
            {\c_@@_graduate_label_defense_date_tl} {\l_@@_value_defense_date_tl},
         }

        \heiti\zihao{-3}
        \@@_render_cover_entry:N \l_@@_input_clist
      }
    \end{center}
    \vskip \stretch{0.5}
  \end{titlepage}
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_make_english_title_page:}
% åˆ¶ä½œè‹±æ–‡å°é¢é¡µã€‚
%    \begin{macrocode}
\cs_new:Npn \@@_make_english_title_page: {
  \bool_if:NT \l_@@_internal__pre_frontmatter__bookmarked_bool {
    \currentpdfbookmark{è‹±æ–‡é¢˜åé¡µ}{pre-frontmatter:titlepage-en}
  }
  \begin{titlepage}
    \begin{center}

    \vspace*{10em}

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

    \vskip \stretch{1}

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

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

      % å¦‚æžœä¸æ˜¯è‡ªåŠ¨è®¡ç®—å®½åº¦ï¼Œä¸”ç”¨æˆ·æ²¡æœ‰è‡ªå®šä¹‰å®½åº¦ï¼Œ
      % åˆ™å°è¯•æä¾›ä¸€ä¸ªé»˜è®¤å®½åº¦ã€‚
      \bool_if:NF \l_@@_cover_auto_width_bool {
        \dim_compare:nNnT {\l_@@_cover_label_max_width_dim} = {0pt} {
          \dim_set:Nn \l_@@_cover_label_max_width_dim {55mm}
        }
        \dim_compare:nNnT {\l_@@_cover_value_max_width_dim} = {0pt} {
          \dim_set:Nn \l_@@_cover_value_max_width_dim {85mm}
        }
      }

      % æ¸²æŸ“ä¿¡æ¯ã€‚
      % æ­¤å¤„å¿…é¡»é™åˆ¶ç›²å®¡æ¨¡å¼æ›¿æ¢ç¬¦å·æ•°é‡ï¼Œä¸ç„¶ä¼šæ³„éœ²ä¿¡æ¯ï¼Œè¿˜å¯èƒ½å¯¼è‡´è¡Œæº¢å‡º
      \clist_set:Nn \l_@@_input_clist {
          {\c_@@_graduate_label_author_en_tl} {\@@_secret_info_fixed:Nn \l_@@_value_author_en_tl {9}},
          {\c_@@_graduate_label_school_en_tl} {\l_@@_value_school_en_tl},
          {\c_@@_graduate_label_supervisor_en_tl} {\@@_secret_info_fixed:Nn \l_@@_value_supervisor_en_tl {12}},
          {\c_@@_graduate_label_industrial_mentor_en_tl} {\@@_secret_info_fixed:Nn \l_@@_value_industrial_mentor_en_tl {12}},
          {\c_@@_graduate_label_chairman_en_tl} {\@@_secret_info_fixed:Nn \l_@@_value_chairman_en_tl {12}},
          {\c_@@_graduate_label_degree_en_tl} {\l_@@_value_degree_en_tl},
          {\c_@@_graduate_label_major_en_tl} {\l_@@_value_major_en_tl},
          {\c_@@_graduate_label_institute_en_tl} {\l_@@_value_institute_en_tl},
          {\c_@@_graduate_label_defense_date_en_tl} {\l_@@_value_defense_date_en_tl},
       }

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

    \end{center}

    \vskip \stretch{0.5}
  \end{titlepage}
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\circled}
% åœ†å½¢æ•°å­—ç¼–å·å®šä¹‰ã€‚
%    \begin{macrocode}
\newcommand{\circled}[2][]{\tikz[baseline=(char.base)]
  {\node[shape = circle, draw, inner~sep = 1pt]
  (char) {\phantom{\ifblank{#1}{#2}{#1}}};
  \node at (char.center) {\makebox[0pt][c]{#2}};}}
\robustify{\circled}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_graduate_originality:}
% ç&nbsp;”ç©¶ç”ŸåŽŸåˆ›æ€§å£°æ˜Žã€‚
%    \begin{macrocode}
\cs_new:Npn \@@_graduate_originality:
  {
    % å–æ¶ˆé¡µçœ‰é¡µè„šã€‚
    \ctexset {
      chapter / pagestyle = plain,
    }

    \begin{titlepage}
      % ä¸è®¡ç®—é¡µç&nbsp;ã€‚
      \pagenumbering{gobble}

      % åŽŸåˆ›æ€§å£°æ˜Žéƒ¨åˆ†
      \begin{center}
        \@@_same_page:
        \ctexset{
          chapter = {
            titleformat = {\heiti\zihao{-2}},
          }
        }
        \bool_if:NT \l_@@_internal__pre_frontmatter__bookmarked_bool {
          \currentpdfbookmark{\c_@@_graduate_label_originality_tl}{pre-frontmatter:originality}
        }
        \chapter*{
          \c_@@_graduate_label_originality_tl
        }
      \end{center}

      % æœ¬éƒ¨åˆ†å­—å·ä¸ºä¸‰å·ã€‚
      \zihao{3}
      \qquad\c_@@_graduate_label_originality_clause_tl
      \vspace{3\baselineskip}

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

      \vspace{3\baselineskip}

      % ä½¿ç”¨æŽˆæƒå£°æ˜Žéƒ¨åˆ†ã€‚
      \begin{center}
        \@@_same_page:
        \ctexset{
          chapter = {
            titleformat = {\heiti\zihao{-2}},
          }
        }
        \bool_if:NT \l_@@_internal__pre_frontmatter__bookmarked_bool {
          \currentpdfbookmark{\c_@@_graduate_label_authorization_tl}{pre-frontmatter:originality-authorization}
        }
        \chapter*{
          \c_@@_graduate_label_authorization_tl
        }
      \end{center}

      \qquad\c_@@_graduate_label_authorization_clause_tl

      \vspace*{15mm}

      \begin{flushright}
        \begin{spacing}{1.65}
          \zihao{3}
          % \hspace{5mm}\raisebox{-2ex}{\includegraphics[width=30mm]{example-image}}\hspace{5mm}
          \c_@@_graduate_label_originality_author_signature_tl\par
          \vspace{1\baselineskip}
          \c_@@_graduate_label_originality_supervisor_signature_tl\par
        \end{spacing}
      \end{flushright}
    \end{titlepage}
    \cleardoublepage
  }
%    \end{macrocode}
% \end{macro}
%
% \subsubsection{å®šä¹‰ç”¨æˆ·æŽ¥å£}
%
% \begin{macro}{\BITSetup}
% æä¾›ç”¨æˆ·é…ç½®çš„æŽ¥å£ã€‚
%    \begin{macrocode}
\DeclareDocumentCommand \BITSetup { m }
  {
    \keys_set:nn { bithesis } { #1 }
    \@@_resolve_auto_values:
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\BigStar}
% æä¾›å¯†çº§é€‰é¡¹ä¸­éœ€è¦çš„äº”è§’æ˜Ÿï¼Œåœ¨æ™®é€šçŽ¯å¢ƒä¸­ä½¿ç”¨ã€‚
%    \begin{macrocode}
\DeclareDocumentCommand \BigStar { }
  { \ding{72} }
%    \end{macrocode}
% \end{macro}
%
% \begin{environment}{blindPeerReview}
% ç”¨äºŽåŒ…è£¹æ¶‰åŠä¸ªäººä¿¡æ¯çš„å†…å®¹ã€‚
%
% åœ¨å¯ç”¨ç›²å®¡æ¨¡å¼æ—¶ï¼Œå…¶ä¸­çš„å†…å®¹ä¼šè¢«éšè—ã€‚
%
% æœ¬çŽ¯å¢ƒæä¾›äº†ä¸€ä¸ªå¯é€‰å‚æ•°ï¼Œå¯ä»¥ä¼&nbsp;å…¥ä¸€ä¸ª bool å€¼ï¼Œç”¨äºŽåœ¨ç›²å®¡æ¨¡å¼ä¸‹å…³é—­
% éšè—è¡Œä¸ºã€‚
%    \begin{macrocode}
  \NewDocumentEnvironment {blindPeerReview} {O{\c_true_bool} +b}
  {
    \bool_if:nTF {\g_@@_blind_mode_bool &amp;&amp; #1} {} {
      #2
    }
  } {}
%    \end{macrocode}
% \end{environment}
%
% \begin{macro}{\cleardoublepage}
% é‡å®šä¹‰ \tn{cleardoublepage}ï¼Œ
% ä½¿å¾—å¶æ•°é¡µé¢åœ¨æ²¡æœ‰å†…å®¹æ—¶ä¹Ÿä¸æ˜¾ç¤ºé¡µçœ‰é¡µè„šã€‚è§ï¼š
% \url{https://tex.stackexchange.com/a/1683}ã€‚
%    \begin{macrocode}
\RenewDocumentCommand \cleardoublepage { }
  {
    \clearpage
    \bool_if:NT \g_@@_twoside_bool
      {
        \int_if_odd:nF \c@page
          { \hbox:n { } \thispagestyle { empty } \newpage }
      }
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\SecretInfo}
% ç”¨äºŽåŒ…è£¹æ¶‰åŠä¸ªäººä¿¡æ¯çš„å†…å®¹ã€‚
%   \begin{macrocode}
\DeclareDocumentCommand \SecretInfo { m o }
  {
    \IfValueTF {#2} {
      \@@_secret_info:nn {#1} {#2}
    } {
      \@@_secret_info:n {#1}
    }
  }
%   \end{macrocode}
% \end{macro}
%
% \begin{macro}{\MakeCover}
% åˆ¶ä½œå°é¢ã€‚
%    \begin{macrocode}
\DeclareDocumentCommand \MakeCover { O{} }
  {
    \begin{blindPeerReview}[\l_@@_cover_hide_cover_in_peer_review_bool]
    \group_begin:

    % è§£æžä¼&nbsp;å…¥å‚æ•°
    \keys_set:nn { bithesis-internal / pre-frontmatter } { bookmarked = true }
    \keys_set:nn { bithesis-internal / pre-frontmatter } { #1 }

    % å°é¢ä½¿ç”¨çš„ thesis-type å¯èƒ½ä¸Žæ•´ä½“ä¸åŒã€‚
    \int_new:N \l_@@_thesis_type_int
    \bool_if:NTF \l_@@_cover_prefer_zh_bool {
      \int_set:Nn \l_@@_thesis_type_int {1}
    } {
      \int_set:Nn \l_@@_thesis_type_int \g_@@_thesis_type_int
    }

    \int_case:nn {\l_@@_thesis_type_int}
    {
      {1}
      {
        \bool_if:NT \l_@@_internal__pre_frontmatter__bookmarked_bool {
          \currentpdfbookmark{å°é¢}{pre-frontmatter:cover}
        }
        \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{\l_@@_style_headline_tl}}\par

          \vspace{0.5em plus 1fill}

          \group_begin:
          % ä¸­æ–‡æ&nbsp;‡é¢˜
          \tl_set:Nn \l_tmpa_tl {
            \linespread{1.46}\selectfont
            \zihao{2}\textbf{\@@_xihei:n \l_@@_value_title_tl}\par
          }
          % è‹±æ–‡æ&nbsp;‡é¢˜
          \tl_set:Nn \l_tmpb_tl {
            \linespread{1.65}\selectfont
            \zihao{3}\textbf{\l_@@_value_title_en_tl}\par
          }

          \bool_if:NTF \l_@@_cover_reverse_titles_bool {
            \l_tmpb_tl \vspace{3mm} \l_tmpa_tl
          } {
            \l_tmpa_tl \vspace{3mm} \l_tmpb_tl
          }
          \group_end:

          \vspace{0em plus 1fill}


          \begin{spacing}{1.8}
            \begin{center}
            \tl_if_empty:NT \l_@@_cover_delimiter_tl {
              \tl_set:Nn \l_@@_cover_delimiter_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_semester_tl} {\l_@@_value_semester_tl},
              {\c_@@_label_school_tl} {\l_@@_value_school_tl},
              {\g_@@_const_info_major_tl} {\l_@@_value_major_tl},
              {\c_@@_label_class_tl} {\@@_secret_info:N \l_@@_value_class_tl},
              {\c_@@_label_author_tl} {\@@_secret_info_fixed:Nn \l_@@_value_author_tl {3}},
              {\c_@@_label_student_id_tl} {\@@_secret_info:N \l_@@_value_student_id_tl},
              {\c_@@_label_course_tl} {\l_@@_value_course_tl},
              {\c_@@_label_supervisor_tl} {\@@_secret_info_fixed:Nn \l_@@_value_supervisor_tl {5}},
              {\c_@@_label_co_supervisor_tl} {\@@_secret_info_fixed:Nn \l_@@_value_external_supervisor_tl {5}},
              {\c_@@_label_teacher_tl} {\l_@@_value_teacher_tl},
            }

            \zihao{3}

            \@@_render_cover_entry:N \l_@@_input_clist

            \end{center}
          \end{spacing}

          \vspace*{1.5em plus 1.5fill}
          \centering
          \zihao{3}\ziju{0.5}\songti{
            \tl_if_empty:NTF \l_@@_cover_date_tl {
              % è‹±æ–‡æ¨¡æ¿ä¸­ ctex ä¸ä¼šé¢„è®¾æ—¥æœŸæ&nbsp;¼å¼ï¼Œä½†ä»è¦ä¿è¯ä¸­æ–‡å°é¢çš„æ—¥æœŸæŒ‰ä¸­æ–‡ä¹&nbsp;æƒ¯
              \ctexset{today=small}
              \today
            } {
              \l_@@_cover_date_tl
            }
          }
        \end{titlepage}
      }
      {2}
      {
        \bool_if:NT \l_@@_internal__pre_frontmatter__bookmarked_bool {
          \currentpdfbookmark{å°é¢}{pre-frontmatter:cover}
        }
        \begin{titlepage}
          \centering

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

          \vspace{1.2mm}

          \zihao{2}\textbf{\songti{\l_@@_style_headline_tl}}

          % å¤–æ–‡ç¿»è¯‘å°é¢æœ‰ä¸¤ç»„ä¸­è‹±æ–‡æ&nbsp;‡é¢˜ï¼Œè¡Œæ•°å˜åŒ–èŒƒå›´å¤§ï¼Œå›&nbsp;æ­¤é‡‡ç”¨ fill æ¯”ä¾‹å¸ƒå±€
          \vspace{\stretch{1}}

          {

          \begin{spacing}{1.8}

            \tl_set:Nn \l_@@_cover_delimiter_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 {
              {\songti\zihao{4}\textbf{å¤–æ–‡åŽŸæ–‡é¢˜ç›®}} {\l_@@_value_trans_origin_title_tl},
              {\songti\zihao{4}\textbf{ä¸­æ–‡ç¿»è¯‘é¢˜ç›®}} {\l_@@_value_trans_title_tl},
            }

            \zihao{-3}
            \centering

            \@@_render_cover_entry:N \l_@@_input_clist

          \end{spacing}

          }

          \vspace{\stretch{1}}

          \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{\stretch{0.67}}

          \begin{spacing}{1.8}
            \tl_if_empty:NT \l_@@_cover_delimiter_tl {
              \tl_set:Nn \l_@@_cover_delimiter_tl {ï¼š}
            }

            % å¦‚æžœä¸æ˜¯è‡ªåŠ¨è®¡ç®—å®½åº¦ï¼Œä¸”ç”¨æˆ·æ²¡æœ‰è‡ªå®šä¹‰å®½åº¦ï¼Œ
            % åˆ™å°è¯•æä¾›ä¸€ä¸ªé»˜è®¤å®½åº¦ã€‚
            \bool_if:NF \l_@@_cover_auto_width_bool {
              \dim_compare:nNnT {\l_@@_cover_label_max_width_dim} = {0pt} {
                \dim_set:Nn \l_@@_cover_label_max_width_dim {35mm}
              }
              \dim_compare:nNnT {\l_@@_cover_value_max_width_dim} = {0pt} {
                \dim_set:Nn \l_@@_cover_value_max_width_dim {78mm}
              }
            }

            \zihao{3}

            % æ¸²æŸ“ä¿¡æ¯ã€‚
            % æ­¤å¤„å¿…é¡»é™åˆ¶ç›²å®¡æ¨¡å¼æ›¿æ¢ç¬¦å·æ•°é‡ï¼Œä¸ç„¶ä¼šæ³„éœ²ä¿¡æ¯ï¼Œè¿˜å¯èƒ½å¯¼è‡´è¡Œæº¢å‡º
            \clist_set:Nn \l_@@_input_clist {
              {\c_@@_label_school_tl} {\l_@@_value_school_tl},
              {\c_@@_label_major_tl} {\l_@@_value_major_tl},
              {\c_@@_label_class_tl} {\@@_secret_info:N \l_@@_value_class_tl},
              {\c_@@_label_author_tl} {\@@_secret_info_fixed:Nn \l_@@_value_author_tl {3}},
              {\c_@@_label_student_id_tl} {\@@_secret_info:N \l_@@_value_student_id_tl},
              {\c_@@_label_supervisor_tl} {\@@_secret_info_fixed:Nn \l_@@_value_supervisor_tl {5}},
              {\c_@@_label_co_supervisor_tl} {\@@_secret_info_fixed:Nn \l_@@_value_external_supervisor_tl {5}},
            }

            \@@_render_cover_entry:N \l_@@_input_clist

          \end{spacing}

          \vspace{\stretch{0.67}}
        \end{titlepage}
      }
      {3} {
        \bool_if:NT \l_@@_internal__pre_frontmatter__bookmarked_bool {
          \currentpdfbookmark{Cover}{pre-frontmatter:cover}
        }
        \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}\l_@@_style_headline_tl}\par

          \vspace{18mm}

          \bool_if:NT \l_@@_cover_add_titlezh_bool {
            \zihao{2}\textbf{\@@_xihei:n \l_@@_value_title_tl}\par
            \vspace{16mm}
          }

          \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_delimiter_tl {
              \tl_set:Nn \l_@@_cover_delimiter_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},
              {\g_@@_const_info_major_tl} {\l_@@_value_major_tl},
              {\c_@@_label_author_en_tl} {\l_@@_value_author_tl},
              {\c_@@_label_student_id_en_tl} {\l_@@_value_student_id_tl},
              {\c_@@_label_supervisor_en_tl} {\l_@@_value_supervisor_tl},
              {\c_@@_label_co_supervisor_en_tl} {\l_@@_value_external_supervisor_tl},
            }

            \@@_render_cover_entry:N \l_@@_input_clist

            \end{center}
          \end{spacing}

          \vspace*{\fill}
          \centering
          \zihao{3}\ziju{0.5}\songti{
            \tl_if_empty:NTF \l_@@_cover_date_tl {
              \today
            } {
              \l_@@_cover_date_tl
            }
          }
        \end{titlepage}
      }
      {4} {
        \@@_make_graduate_cover:
      }
      {5} {
        \@@_make_graduate_cover:
      }
    }
    \group_end:
    \end{blindPeerReview}
  }
%    \end{macrocode}
% \end{macro}
%
%
% \begin{macro}{\MakeOriginality}
% åŽŸåˆ›æ€§å£°æ˜Žã€‚
%    \begin{macrocode}
\NewDocumentCommand \MakeOriginality { O{} }
  {
    \group_begin:
    % è§£æžä¼&nbsp;å…¥å‚æ•°
    \keys_set:nn { bithesis-internal / pre-frontmatter } { bookmarked = true }
    \keys_set:nn { bithesis-internal / pre-frontmatter } { #1 }

    \begin{blindPeerReview}[\l_@@_cover_hide_cover_in_peer_review_bool]
      \int_case:nn {\g_@@_thesis_type_int}
      {
        {1}
        {
          \bool_if:NT \l_@@_internal__pre_frontmatter__bookmarked_bool {
            \currentpdfbookmark{å£°æ˜Ž}{pre-frontmatter:originality}
          }
          \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} {
          \bool_if:NT \l_@@_internal__pre_frontmatter__bookmarked_bool {
            \currentpdfbookmark{Statements}{pre-frontmatter:originality}
          }
          \pagestyle{BIThesis}
          \pagenumbering{gobble}

          % åŽŸåˆ›æ€§å£°æ˜Žéƒ¨åˆ†
          \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{\stretch{1}}

          % ä½¿ç”¨æŽˆæƒå£°æ˜Žéƒ¨åˆ†
          \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:}
      }
    % å•ç‹¬æˆé¡µ
    \clearpage
    \end{blindPeerReview}
    \group_end:
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\MakePaperBack}
% ç”Ÿæˆä¹¦è„Šã€‚ï¼ˆç&nbsp;”ç©¶ç”Ÿï¼‰
%    \begin{macrocode}
\NewDocumentCommand \MakePaperBack { O{} }
  {
    % ä¸Šä¸‹å„ç•™å‡ºè§„å®šçš„è¾¹è·ï¼Œåˆ°ä¸‹ä¸€é¡µå†æ¢å¤ã€‚
    % è‹¥æ&nbsp;‡é¢˜è¶…é•¿ï¼Œè‡ªç„¶ä¼šå‘ä¸Šä¸‹æº¢å‡ºã€‚
    %
    % å¿…é¡»åœ¨é¡¶å±‚æ“ä½œï¼Œä¸ç„¶å½±å“ä¸ç¡®å®šã€‚
    % https://tex.stackexchange.com/q/718581
    %
    % å•çº¯`\newgeometry`å†`\restoregeometry`ç›¸å½“äºŽä»…ä»…`\clearpage`ï¼Œä¹Ÿæ—&nbsp;é—®é¢˜ã€‚
    \newgeometry{
      vmargin = 5cm,
    }
    \begin{blindPeerReview}[\l_@@_cover_hide_cover_in_peer_review_bool]
      \group_begin:
      % è§£æžä¼&nbsp;å…¥å‚æ•°
      \keys_set:nn { bithesis-internal / pre-frontmatter } { bookmarked = true }
      \keys_set:nn { bithesis-internal / pre-frontmatter } { #1 }

      \@@_make_paper_back:

      \group_end:
    \end{blindPeerReview}
    \restoregeometry
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\MakeTitle}
% ç”Ÿæˆæ&nbsp;‡é¢˜é¡µã€‚ï¼ˆç&nbsp;”ç©¶ç”Ÿï¼‰
%    \begin{macrocode}
\NewDocumentCommand \MakeTitle { O{} }
  {
    \begin{blindPeerReview}[\l_@@_cover_hide_cover_in_peer_review_bool]
      \group_begin:
      % è§£æžä¼&nbsp;å…¥å‚æ•°
      \keys_set:nn { bithesis-internal / pre-frontmatter } { bookmarked = true }
      \keys_set:nn { bithesis-internal / pre-frontmatter } { #1 }

      \@@_make_chinese_title_page:
      \@@_make_english_title_page:

      \group_end:
    \end{blindPeerReview}
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\MakeTOC}
% ç”Ÿæˆç›®å½•ã€‚
%    \begin{macrocode}
\DeclareDocumentCommand \MakeTOC {}
  {
    {
      \@@_if_bachelor_thesis:TF {
        \renewcommand{\baselinestretch}{1.35}
      } {
        \renewcommand{\baselinestretch}{1.56}
      }

      % è‡ªå®šä¹‰ç›®å½•æ&nbsp;·å¼
      \cs_set:Npn \contentsname {
        \fontsize{16pt}{\baselineskip}
        { \@@_unnumchapter_style: \@@_title_font: \l_@@_toc_title_tl }
        \vspace{-8pt}
      }

      \bool_if:NTF \l_@@_add_toc_to_toc_bool {
        % æ·»åŠ&nbsp;ã€Œç›®å½•ã€æœ¬èº«åˆ°ç›®å½•ä¸­ï¼ŒåŒæ—¶è‡ªåŠ¨æ·»åŠ&nbsp;ä¹¦ç­¾
        % æ­¤å¤„å¿…é¡»æœ‰`\phantomsection`ï¼Œä¸ç„¶ hyperref ä¼šæŠŠé“¾æŽ¥æŒ‡å‘ä¹‹å‰æ‘˜è¦çš„æ&nbsp;‡é¢˜ã€‚
        \phantomsection
        \addcontentsline{toc}{chapter}{\c_@@_label_toc_en_tl}
      } {
        % æ‰‹åŠ¨æ·»åŠ&nbsp;ç›®å½•ä¹¦ç­¾
        \currentpdfbookmark{\l_@@_toc_title_tl}{ch:toc}
      }

      % åˆ¶ä½œç›®å½•
      \tableofcontents

      % å•ç‹¬æˆé¡µ
      \clearpage
    }
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{environment}{abstract}
% ç”Ÿæˆæ‘˜è¦ã€‚
%    \begin{macrocode}
\NewDocumentEnvironment {abstract} {}
  {

    \cleardoublepage
    \linespread{1.53}\selectfont

    % æœ¬ç§‘æ¨¡æ¿åœ¨æ&nbsp;‡é¢˜ã€Œæ‘˜è¦ã€äºŒå­—ä¸Šæ–¹å¦æœ‰æ¯•ä¸šè®¾è®¡é¢˜ç›®
    \@@_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}
      }
    }

    % æ‘˜è¦å¯¹é¡µæ•°å¾ˆæ•æ„Ÿï¼Œæ&nbsp;‡é¢˜ä¸Šä¸‹é—´è·åº”æœ‰å¼¹æ€§ï¼›å…¶ä¸­ç¡•åšæ¨¡æ¿çš„åŸºç¡€é•¿åº¦å‚è€ƒ Word å®žä½œå¾®è°ƒè¿‡ã€‚
    \ctexset{ chapter = {
      % æœ€çŸ­å‡ä¸º 8bp
      beforeskip = \@@_if_graduate:TF {13bp minus 5bp} {8bp},
      afterskip = \@@_if_graduate:TF {24bp minus 16bp} {32bp minus 24bp},
    } }

    {
      \@@_same_page:
      \bool_if:NTF \l_@@_add_abstract_to_toc_bool {
        \chapter{\c_@@_label_abstract_tl}
      } {
        \currentpdfbookmark{\c_@@_label_abstract_tl}{ch:abstract}
        \chapter*{\c_@@_label_abstract_tl}
      }
    }
    \vspace*{1mm}
    \par
  }
  {
    \par
    % æ‘˜è¦å¯¹é¡µæ•°å¾ˆæ•æ„Ÿï¼Œå…³é”®è¯ä¸Šæ–¹é—´è·åº”æœ‰å¼¹æ€§
    \vspace{4ex minus 4ex}
    \noindent
    \@@_if_graduate:TF {
      % ç&nbsp;”ç©¶ç”Ÿæ¨¡æ¿ä¸­ï¼Œâ€œå…³é”®è¯â€å®‹ä½“å°å››åŠ&nbsp;ç²—
      % å…³é”®è¯ä¸ºå®‹ä½“å°å››å·å­—ã€‚
      \textbf{\c_@@_label_keywords_tl}\l_@@_value_keywords_tl\par
    } {
      % æœ¬ç§‘ç”Ÿæ¨¡æ¿ä¸­ï¼Œå…³é”®è¯ä¸ºé»‘ä½“åŠ&nbsp;ç²—
      \textbf{\heiti \c_@@_label_keywords_tl \l_@@_value_keywords_tl}\par
    }
    \newpage
  }
%    \end{macrocode}
% \end{environment}
%
% \begin{environment}{abstractEn}
% ç”Ÿæˆè‹±æ–‡æ‘˜è¦ã€‚
%    \begin{macrocode}
\NewDocumentEnvironment {abstractEn} {}
  {
    \linespread{1.53}\selectfont

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

        {
          \@@_title_font:
          \zihao{3}\textbf
          \l_@@_value_title_en_tl\\
        }
      \end{spacing}
      % æœ€çŸ­ç¼©åˆ°ä¸Žä¸­æ–‡æ‘˜è¦ç›¸åŒ
      \vspace*{10mm minus 8mm}
    }

    \ctexset{
      chapter/numbering = false,
    }

    \@@_if_bachelor_thesis:TF {
      \ctexset{
        chapter/titleformat = {\zihao{-3}\textmd}
      }
    } {
      \ctexset {
        chapter/titleformat = {\heiti\zihao{3}\centering\textbf}
      }
    }

    % æ‘˜è¦å¯¹é¡µæ•°å¾ˆæ•æ„Ÿï¼Œæ&nbsp;‡é¢˜ä¸Šä¸‹é—´è·åº”æœ‰å¼¹æ€§ï¼›å…¶ä¸­ç¡•åšæ¨¡æ¿çš„åŸºç¡€é•¿åº¦å‚è€ƒ Word å®žä½œå¾®è°ƒè¿‡ã€‚
    \ctexset{ chapter = {
      % æœ€çŸ­å‡ä¸º 8bp
      beforeskip = \@@_if_graduate:TF {19bp minus 11bp} {8bp},
      afterskip = \@@_if_graduate:TF {35bp minus 27bp} {32bp minus 24bp},
    } }

    {
      \@@_same_page:
      \bool_if:nTF {\l_@@_add_abstract_en_to_toc_bool} {
        \chapter{\c_@@_label_abstract_en_tl}
      } {
        \currentpdfbookmark{\c_@@_label_abstract_en_tl}{ch:abstract:en}
        \chapter*{\c_@@_label_abstract_en_tl}
      }
    }
  }
  {
    % æ‘˜è¦å¯¹é¡µæ•°å¾ˆæ•æ„Ÿï¼Œå…³é”®è¯ä¸Šæ–¹é—´è·åº”æœ‰å¼¹æ€§
    \par\vspace{3ex minus 3ex}\noindent
    \@@_if_graduate:TF {
      % Times New Romanå°å››å·å­—ï¼Œè¡Œè·22ç£…
      % â€œKey Wordsâ€
      % Times New Romanå°å››å·å­—åŠ&nbsp;ç²—
      \textbf{\c_@@_label_keywords_en_tl} \l_@@_value_keywords_en_tl
    } {
      \textbf{\c_@@_label_keywords_en_tl \l_@@_value_keywords_en_tl}
    }
    \newpage
  }

%    \end{macrocode}
% \end{environment}
%
% \begin{environment}{conclusion}
% ç”Ÿæˆç»“è®ºã€‚éœ€è¦æ”¾åœ¨ \cs{macrocode} ä¹‹åŽã€‚
%    \begin{macrocode}
\NewDocumentEnvironment {conclusion} { O{} }
  {
    \group_begin:
    % è§£æžä¼&nbsp;å…¥å‚æ•°
    \keys_set:nn { bithesis-internal / conclusion } {
      title = \@@_if_thesis_english:TF {
        \c_@@_label_conclusion_en_tl
      } {
        \c_@@_label_conclusion_tl
      },
    }
    \keys_set:nn { bithesis-internal / conclusion } { #1 }

    \ctexset{
      section/number = \arabic{section}
    }

    \chapter{\l_@@_internal__conclusion__title_tl}
    \group_end:
  }
  {}
%    \end{macrocode}
% \end{environment}
%
% \begin{environment}{bibprint}
% ç”Ÿæˆå‚è€ƒæ–‡çŒ®ã€‚éœ€è¦æ”¾åœ¨ \cs{backmatter} ä¹‹åŽã€‚
%    \begin{macrocode}
\NewDocumentEnvironment {bibprint} {}
  {
    % è®¾ç½®å‚è€ƒæ–‡çŒ®å­—å·ä¸º 5 å·
    \renewcommand*{\bibfont}{\zihao{5}}
    % è®¾ç½®å‚è€ƒæ–‡çŒ®å„ä¸ªé¡¹ç›®ä¹‹é—´çš„åž‚ç›´è·ç¦»ä¸º 0
    \setlength{\bibitemsep}{0ex}
    \setlength{\bibnamesep}{0ex}
    \setlength{\bibinitsep}{0ex}
    \@@_if_graduate:TF {
    } {
      % ã€Œæœ¬ç§‘ç”Ÿã€è®¾ç½®å•å€è¡Œè·
      \renewcommand{\baselinestretch}{1.2}
    }
    % è®¾ç½®å‚è€ƒæ–‡çŒ®é¡ºåºæ&nbsp;‡ç­¾ `[1]` ä¸Žæ–‡çŒ®å†…å®¹ `ä½œè€…. æ–‡çŒ®æ&nbsp;‡é¢˜...` çš„é—´è·
    \setlength{\biblabelsep}{1.7mm}

    \bool_if:NF \l_@@_style_bibliography_indent_bool {
      % è®¾ç½®å‚è€ƒæ–‡çŒ®åŽæ–‡ç¼©è¿›ä¸º 0ï¼ˆä¸Ž Word æ¨¡æ¿ä¿æŒä¸€è‡´ï¼‰
      % See: https://github.com/hushidong/biblatex-gb7714-2015
      %      å¦‚ä½•ä¿®å‚è€ƒæ–‡çŒ®è¡¨çš„ç¼©è¿›ï¼Ÿ
      \cs_set:Npn \itemcmd {
        \settowidth{\lengthid}{\mkgbnumlabel{\printfield{labelnumber}}}
        %%è¿™é‡Œæ˜¯æ‰€åšçš„è°ƒæ•´ï¼Œä»¥ä¸‹ä¸¤å¥é€šè¿‡è°ƒæ•´\lengthidæ¥è°ƒæ•´ç¼©è¿›
        \setlength{\lengthid}{0pt}
        \addtolength{\lengthid}{-\biblabelsep}
        \setlength{\lengthlw}{\textwidth}
        \addtolength{\lengthlw}{-\lengthid}
        \addvspace{\bibitemsep}%æ¢å¤\bibitemsepçš„ä½œç”¨
        \hangindent\lengthid
        \leavevmode\mkgbnumlabel{\printfield{labelnumber}}%
        \hspace{\biblabelsep}
      }
    }

    \@@_if_thesis_english:TF {
      \chapter{\c_@@_label_reference_en_tl}
    } {
      \chapter{\c_@@_label_reference_tl}
    }
  }
  {}
%    \end{macrocode}
% \end{environment}
%
% \begin{environment}{appendices}
% ç”Ÿæˆé™„å½•ã€‚
%    \begin{macrocode}
\NewDocumentEnvironment {appendices} {}
  {
    % Used in chapter, ToC.
    \tl_new:N \l_@@_appendix_plain_label_tl
    % Used before reference label.
    \tl_new:N \l_@@_appendix_default_title_tl

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

    \bool_if:NTF \l_@@_appendices_chapter_level_bool {
      % ä½¿ç”¨ä»¥ã€Œchapterã€ä¸ºé¡¶å±‚çš„é™„å½•æ&nbsp;¼å¼

      % ä»…è®¾ç½® \setcounter{chapter}{0} æ—¶ï¼Œpdf ç›®å½•ä¼šç´¢å¼•åˆ°æ­£æ–‡ç«&nbsp;èŠ‚ã€‚
      % å›&nbsp;æ­¤ï¼Œéœ€è¦ä½¿ç”¨ \appendix é‡ç½®è®¡æ•°å™¨ï¼Œå¹¶å°†é™„å½•åŽé¢çš„
      % å‡&nbsp;ä¸ªç«&nbsp;èŠ‚è§†ä¸ºç‰¹æ®Šçš„é™„å½•é¡µã€‚
      \appendix

      \ctexset{
        chapter/numbering = true,
        chapter/name = {},
        chapter/number = \l_@@_appendix_plain_label_tl\hspace{1ex}\Alph{chapter},
        section/number = \Alph{chapter}. \arabic{section},
        subsection/number = \Alph{chapter}. \arabic{section}. \arabic{subsection},
      }

      \cs_set:Npn \thechapter {
        \Alph{chapter}
      }
    } {
      % ä½¿ç”¨ä»¥ã€Œsectionã€ä¸ºé¡¶å±‚çš„é™„å½•æ&nbsp;¼å¼

      % å›&nbsp;ä¸ºä¸éœ€è¦ç”¨åˆ° chapter counter, æ‰€ä»¥ç›´æŽ¥åŠ&nbsp;ä¸€å³å¯ã€‚
      \stepcounter{chapter}
      \setcounter{section}{0}
      % ï¼ˆä¸Žä¸Šé¢æ–¹æ³•è‡³å°‘ç”¨ä¸€ä¸ªï¼‰
      % éœ€è¦è®© section åœ¨ pdf bookmark ä¸­è¾“å‡ºå­—æ¯è€Œä¸æ˜¯æ•°å­—ã€‚
      % è¯¦è§ hyperref ä»£ç&nbsp;ã€‚
      \gdef\theHsection{\Alph{section}}

      % å®šä¹‰ \thefigure é‡‡ç”¨èŠ‚è€Œä¸æ˜¯ç«&nbsp;
\cs_set:Npn \thefigure {\theHsection \g_@@_label_divide_char_tl\arabic{figure}}

      \ctexset{
        section/number = \l_@@_appendix_plain_label_tl\hspace{1ex}\Alph{section},
        subsection/number = \Alph{section}. \arabic{subsection},
      }

      \cs_gset:Npn \thechapter {
        \Alph{section}
      }
      % \gdef \thechapter{\Alph{section}}

      \tl_if_blank:VTF \l_@@_appendices_title_tl {
        \chapter{\l_@@_appendix_default_title_tl}
      } {
        \chapter*{\l_@@_appendices_title_tl}
        \stepcounter{chapter}
        \tl_if_blank:VTF \l_@@_appendix_toc_title_tl {
          \addcontentsline{toc}{chapter}{\l_@@_appendix_default_title_tl}
        } {
          \addcontentsline{toc}{chapter}{\l_@@_appendix_toc_title_tl}
        }
      }
    }
  }
  {
  }
%    \end{macrocode}
% \end{environment}
%
% \begin{environment}{acknowledgements}
% ç”Ÿæˆè‡´è°¢ã€‚
%    \begin{macrocode}
\NewDocumentEnvironment {acknowledgements} {+b}
  {
    \begin{blindPeerReview}
      % å°†æ­¤ç«&nbsp;èŠ‚è§†ä¸ºç‰¹æ®Šçš„é™„å½•é¡µï¼Œå…³é—­é™„å½•ç¼–å·ï¼Œé‡å®šä¹‰ section ç¼–å·ã€‚
      % ä¸çŸ¥ä¸ºä½•ï¼Œéœ€è¦æ‰‹åŠ¨é‡ç½® section è®¡æ•°å™¨ã€‚
      \setcounter{section}{0}
      \ctexset{
        appendix/numbering = false,
        section/number = \arabic{section},
        subsection/number = \arabic{section}. \arabic{subsection},
        subsubsection/number = \arabic{section}. \arabic{subsection}. \arabic{subsubsection},
      }

      \chapter{\g_@@_const_heading_acknowledgements_tl}
      \@@_if_graduate:TF {\fangsong}{}
      #1
    \end{blindPeerReview}
  } {}
%    \end{macrocode}
% \end{environment}
%
% \begin{macro}{\Author,\AuthorEn}
% åœ¨æ™®é€šæ¨¡å¼ä¸‹ï¼Œè¾“å‡ºä½œè€…å§“åã€‚
% åœ¨ç›²å®¡æ¨¡å¼ä¸‹ï¼Œè¾“å‡ºã€Œç¬¬ n ä½œè€…ã€ã€‚
%    \begin{macrocode}
\NewDocumentCommand \Author {O{1} o o}
  {
    \bool_if:NTF \g_@@_blind_mode_bool {
      % ç›²å®¡æ¨¡å¼
      \IfValueTF {#3} {
        #3
      } {
        ç¬¬\zhnumber{#1}ä½œè€…
      }
    } {
      % æ™®é€šæ¨¡å¼
      \IfValueTF {#2} {
        % è¦†ç›–é»˜è®¤çš„ \author å‘½ä»¤
        #2
      } {
        % é»˜è®¤é‡‡ç”¨ä½œè€…å§“å
        \l_@@_value_author_tl
      }
    }
  }

% è‹±æ–‡å§“å
\NewDocumentCommand \AuthorEn {O{1} o o}
  {
    \bool_if:NTF \g_@@_blind_mode_bool {
      % ç›²å®¡æ¨¡å¼
      \IfValueTF {#3} {
        #3
      } {
        \Ordinalstringnum{#1}~Author
      }
    } {
      % æ™®é€šæ¨¡å¼
      \IfValueTF {#2} {
        % è¦†ç›–é»˜è®¤çš„ \author å‘½ä»¤
        #2
      } {
        % é»˜è®¤é‡‡ç”¨ä½œè€…å§“å
        \l_@@_value_author_en_tl
      }
    }
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\addpub,\addpubs}
% æ·»åŠ&nbsp;ä¸€ä¸ªæˆ–å¤šä¸ªå‚è€ƒæ–‡çŒ®ã€‚
%   \begin{macrocode}
\NewDocumentCommand \addpub {m} {
  \nocite{#1}
  \addtocategory{mypub}{#1}
}

\NewDocumentCommand \addpubs {m} {
  % apply a clist
  \clist_map_function:nN {#1} \addpub
}
%   \end{macrocode}
% \end{macro}
%
% \begin{macro}{\pubsection}
% è®¾ç½®å°æ&nbsp;‡é¢˜ã€‚
%    \begin{macrocode}
\NewDocumentCommand \pubsection {s m} {
  {
    \par
    \IfBooleanF {#1} {
      % è‡ªå¢žè®¡æ•°å™¨
      \stepcounter{pub}
    }
    % è®¾ç½®å°æ&nbsp;‡é¢˜ï¼Œæš‚æ—¶æ²¡æœ‰è€ƒè™‘è‹±æ–‡æ¨¡å¼
    \noindent
    \textbf{
      \heiti{
        \IfBooleanF {#1} {\zhnumber{\thepub}ã€}#2
      }
    }\par
  }
}
%    \end{macrocode}
% \end{macro}
%
% \begin{environment}{publications}
% ç”Ÿæˆæ”»è¯»å­¦ä½æœŸé—´å‘è¡¨è®ºæ–‡ä¸Žç&nbsp;”ç©¶æˆæžœæ¸…å•ã€‚
%    \begin{macrocode}
\NewDocumentEnvironment {publications} {+b}
  {
    % åŒæ—¶è®¾ç½® omit ä»¥åŠ blindPeerReview æ‰èƒ½è·³è¿‡æ­¤ç«&nbsp;èŠ‚ç”Ÿæˆã€‚
    \begin{blindPeerReview}[\l_@@_publications_omit_bool]
      % å°†æ­¤ç«&nbsp;èŠ‚è§†ä¸ºç‰¹æ®Šçš„é™„å½•é¡µï¼Œå…³é—­é™„å½•ç¼–å·ï¼Œé‡å®šä¹‰ section ç¼–å·ã€‚
      % ä¸çŸ¥ä¸ºä½•ï¼Œéœ€è¦æ‰‹åŠ¨é‡ç½® section è®¡æ•°å™¨ã€‚
      \setcounter{section}{0}
      \ctexset{
        appendix/numbering = false,
        section/number = \arabic{section},
        subsection/number = \arabic{section}. \arabic{subsection},
        subsubsection/number = \arabic{section}. \arabic{subsection}. \arabic{subsubsection},
      }
      % è®¾ç½®å‚è€ƒæ–‡çŒ®å­—å·ä¸º 5 å·
      \renewcommand*{\bibfont}{\zihao{5}}
      % è®¾ç½®å‚è€ƒæ–‡çŒ®å„ä¸ªé¡¹ç›®ä¹‹é—´çš„åž‚ç›´è·ç¦»ä¸º 0
      \setlength{\bibitemsep}{0ex}
      \setlength{\bibnamesep}{0ex}
      \setlength{\bibinitsep}{0ex}
      % è®¾ç½®å‚è€ƒæ–‡çŒ®é¡ºåºæ&nbsp;‡ç­¾ `[1]` ä¸Žæ–‡çŒ®å†…å®¹ `ä½œè€…. æ–‡çŒ®æ&nbsp;‡é¢˜...` çš„é—´è·
      \setlength{\biblabelsep}{1.7mm}

      \bool_if:NF \l_@@_style_bibliography_indent_bool {
        % è®¾ç½®å‚è€ƒæ–‡çŒ®åŽæ–‡ç¼©è¿›ä¸º 0ï¼ˆä¸Ž Word æ¨¡æ¿ä¿æŒä¸€è‡´ï¼‰
        % See: https://github.com/hushidong/biblatex-gb7714-2015
        %      å¦‚ä½•ä¿®å‚è€ƒæ–‡çŒ®è¡¨çš„ç¼©è¿›ï¼Ÿ
        \cs_set:Npn \itemcmd {
          \settowidth{\lengthid}{\mkgbnumlabel{\printfield{labelnumber}}}
          %%è¿™é‡Œæ˜¯æ‰€åšçš„è°ƒæ•´ï¼Œä»¥ä¸‹ä¸¤å¥é€šè¿‡è°ƒæ•´\lengthidæ¥è°ƒæ•´ç¼©è¿›
          \setlength{\lengthid}{0pt}
          \addtolength{\lengthid}{-\biblabelsep}
          \setlength{\lengthlw}{\textwidth}
          \addtolength{\lengthlw}{-\lengthid}
          \addvspace{\bibitemsep}%æ¢å¤\bibitemsepçš„ä½œç”¨
          \hangindent\lengthid
          \leavevmode\mkgbnumlabel{\printfield{labelnumber}}%
          \hspace{\biblabelsep}
        }
      }

      % If in blindPeerReview mode, omit delimiters in author field.
      \bool_if:NT \g_@@_blind_mode_bool {
        % å¦‚æžœæœ‰å¤šä¸ªä½œè€…ï¼Œä¸ä¿®æ”¹æ­¤é¡¹çš„è¯ï¼Œä½œè€…ä¸Žæ&nbsp;‡é¢˜ä¹‹é—´ä¼šæœ‰é€—å·ã€‚
        \DeclareDelimFormat[bib,biblist]{finalnamedelim}{}
        % å¦‚æžœè‡ªå·±ä¸æ˜¯ç¬¬ä¸€ä¸ªä½œè€…ï¼Œä¸ä¿®æ”¹æ­¤é¡¹çš„è¯ï¼Œä¼šåœ¨æœ€å¼€å§‹æœ‰é€—å·ã€‚
        \DeclareDelimFormat{multinamedelim}{}
        % å¦‚æžœè¦†ç›–çš„æ˜¯è‹±æ–‡ä½œè€…ï¼Œä¸ä¿®æ”¹æ­¤é¡¹çš„è¯ï¼Œä¼šåœ¨æœ€å¼€å§‹æœ‰ç©ºæ&nbsp;¼ã€‚
        \DeclareDelimFormat{bibnamedelimd}{}

        % å¦‚æžœä½œè€…å¤ªå¤šè€Œè¢«æˆªæ–­ï¼Œä¸ä¿®æ”¹çš„è¯ï¼Œä¼šå¤šä½™é€—å·ã€â€œç­‰â€äº‘äº‘ã€‚
        % è¢«æˆªæ–­çš„å……è¦æ¡ä»¶ï¼šä½œè€…æ•°é‡å¤§äºŽé€šè¿‡`\BITSetup`è®¾ç½®çš„`publications/maxbibnames`ã€‚
        % æ•…è®¾ç½®æ&nbsp;‡ç‚¹æ¥åŽ»æŽ‰é€—å·ï¼Œ
        \DeclareDelimFormat[bib,biblist]{andothersdelim}{}
        % å¹¶è®¾ç½®æœ¬åœ°åŒ–å­—ç¬¦ä¸²æ¥åŽ»æŽ‰â€œç­‰â€ã€‚
        \setlocalbibstring{andothers}{}
        \setlocalbibstring{andotherscn}{}
        % å¦å¤–æ³¨æ„ï¼Œæˆ‘ä»¬ä»å°Šé‡`maxbibnames`å’Œ`minbibnames`ï¼Œä¿è¯è‹¥å¼€ç›²å®¡æ—¶æ˜¾ç¤ºä½œè€…ï¼Œåˆ™å…³ç›²å®¡æ—¶ä¹Ÿæ­£å¸¸ã€‚
      }

      % ===== ä¸Šæ–¹å®šä¹‰ä¸Žã€Œå‚è€ƒæ–‡çŒ®ã€éƒ¨åˆ†ç›¸åŒ

      % ä¸­æ–‡å§“åä¸‹ï¼Œæ­¤éƒ¨åˆ†ä¸å‚ä¸Žè¾“å‡ºã€‚
      \cs_set:Npn \mkbibnamegiven ##1 {
        \haspartannotation{myself}{
          \bool_if:NTF \g_@@_blind_mode_bool {
            % ç›²å®¡æ¨¡å¼ï¼Œä¸è¾“å‡ºå†…å®¹
          } {
            % æ™®é€šæ¨¡å¼
            \textbf{##1}
          }
        }{
          \bool_if:NTF \g_@@_blind_mode_bool {
            % ç›²å®¡æ¨¡å¼ï¼Œä¸è¾“å‡ºå†…å®¹
          } {
            % æ™®é€šæ¨¡å¼
            ##1
          }
        }
      }

      \cs_set:Npn \mkbibnamefamily ##1 {
        \haspartannotation{myself}{
          % ä½œè€…ä¸ºè‡ªå·±
          \bool_if:NTF \g_@@_blind_mode_bool {
            % ç›²å®¡æ¨¡å¼
            \getpartannotation{myself}
          } {
            % æ™®é€šæ¨¡å¼
            \textbf{##1}
          }
        }{
          % ä½œè€…ä¸æ˜¯è‡ªå·±
          \bool_if:NTF \g_@@_blind_mode_bool {
            % ç›²å®¡æ¨¡å¼ï¼Œä¸è¾“å‡º
          } {
            % æ™®é€šæ¨¡å¼
            ##1
          }
        }
      }

      \if_cs_exist:N \c@pub {
        % é‡ç½®è®¡æ•°å™¨
        \setcounter{pub}{0}
      } \else: {
        % è®¾ç½®è®¡æ•°å™¨
        \newcounter{pub}
      } \fi:

      % è®¾ç½®å‚è€ƒæ–‡çŒ®çš„æŽ’åº
      \bool_if:NTF \l_@@_publications_sorting_bool {
        % Sorting by year, name, type.
        \newrefcontext[sorting=ynt]
      } {
        % Do not sort.
        \newrefcontext
      }

      % æ&nbsp;¹æ® maxbibnames çš„è®¾ç½®ï¼Œè¦†ç›– \blx@maxbibnames é€‰é¡¹ï¼Œä¿è¯æ‰€æœ‰ä½œè€…éƒ½èƒ½æ˜¾ç¤ºã€‚
      \cs_set:Npn \blx@maxbibnames {
        \l_@@_publications_maxbibnames_int
      }

      % æ&nbsp;¹æ® minbibnames çš„è®¾ç½®ï¼Œè¦†ç›– \blx@minbibnames é€‰é¡¹ï¼Œä¿è¯æ‰€æœ‰ä½œè€…éƒ½èƒ½æ˜¾ç¤ºã€‚
      \cs_set:Npn \blx@minbibnames {
        \l_@@_publications_minbibnames_int
      }

      \chapter{\@@_get_const:n {publications}}
      #1
    \end{blindPeerReview}
  }
  {}
%    \end{macrocode}
% \end{environment}
%
% \begin{environment}{resume}
% ç”Ÿæˆä¸ªäººç®€åŽ†ã€‚
%    \begin{macrocode}
\NewDocumentEnvironment {resume} {+b}
  {
    \begin{blindPeerReview}
      % å°†æ­¤ç«&nbsp;èŠ‚è§†ä¸ºç‰¹æ®Šçš„é™„å½•é¡µï¼Œå…³é—­é™„å½•ç¼–å·ï¼Œé‡å®šä¹‰ section ç¼–å·ã€‚
      % ä¸çŸ¥ä¸ºä½•ï¼Œéœ€è¦æ‰‹åŠ¨é‡ç½® section è®¡æ•°å™¨ã€‚
      \setcounter{section}{0}
      \ctexset{
        appendix/numbering = false,
        section/number = \arabic{section},
        subsection/number = \arabic{section}. \arabic{subsection},
        subsubsection/number = \arabic{section}. \arabic{subsection}. \arabic{subsubsection},
      }
      \chapter{\@@_get_const:n {resume}}
      #1
    \end{blindPeerReview}
  }
  {
  }
%    \end{macrocode}
% \end{environment}

% \begin{environment}{symbols}
% ç”Ÿæˆä¸»è¦æœ¯è¯­å¯¹ç…§è¡¨ã€‚
%    \begin{macrocode}
\NewDocumentEnvironment {symbols} {}
  {
    \bool_if:NTF \l_@@_add_symbols_to_toc_bool {
      \chapter{\@@_get_const:n {symbols}}
    } {
      \chapter*{\@@_get_const:n {symbols}}
      \currentpdfbookmark{\c_@@_label_symbols_tl}{ch:symbols}
    }
    \zihao{-4}
    \begin{itemize}[
      labelwidth=2.5cm,
      labelsep=0.5cm,
      leftmargin=3cm,
      itemindent=0cm,
      % ä¸å†åœ¨ä¸¤é¡¹ä¹‹é—´å¢žåŠ&nbsp;é¢å¤–çš„é—´è·ï¼ˆ1.5 å€çš„è¡Œé—´è·å·²ç»å¤Ÿå®½äº†ï¼‰ï¼ˆæœªæ¥å¯ä»¥æä¾›ä¸€ä¸ªæŽ¥å£ä»¥ä¾›ç”¨æˆ·æ‰‹åŠ¨è®¾ç½®é—´è·ï¼‰
      itemsep=-0.5ex,
    ]
    \cs_set:Npn \makelabel ##1 {##1\hfil}
  }
  {
    \end{itemize}

    % å•ç‹¬ä¸€é¡µ
    \clearpage
  }
%    \end{macrocode}
% \end{environment}
%
%    \begin{macrocode}
%&lt;/thesis&gt;
%    \end{macrocode}
%
% \subsection{bitreport.cls æ¨¡æ¿ç±»}
%
%    \begin{macrocode}
%&lt;*report&gt;
%    \end{macrocode}
%
% \subsubsection{å…¨å±€å˜é‡ä¸Žä¸´æ—¶å˜é‡}
%
% \begin{variable}{\g_@@_thesis_type_int}
% è®ºæ–‡ç±»åž‹ï¼Œå–å€¼ä»Ž 1 å¼€å§‹ï¼Œåˆ†åˆ«å¯¹åº”:
%  \begin{enumerate}
%      \item è¯¾ç¨‹å®žéªŒæŠ¥å‘Š
%      \item ï¼ˆè®¡ç®—æœºå­¦é™¢ï¼‰æœ¬ç§‘ç”Ÿæ¯•ä¸šï¼ˆè®¾è®¡ï¼‰å¼€é¢˜æŠ¥å‘Šï¼ˆå·²åºŸå¼ƒï¼‰
%  \end{enumerate}
%    \begin{macrocode}
\int_new:N \g_@@_report_type_int
%    \end{macrocode}
% \end{variable}
%
% \begin{variable}{\c_@@_report_type_clist}
% å®šä¹‰æŠ¥å‘Šç±»åž‹çš„åˆ—è¡¨ã€‚
%    \begin{macrocode}
\clist_const:Nn \c_@@_report_type_clist
    { common, undergraduate_proposal}
%    \end{macrocode}
% \end{variable}
%
% \begin{variable}{\l_@@_right_seq,\l_@@_left_seq}
% ä¸´æ—¶å˜é‡ã€‚
%    \begin{macrocode}
\seq_new:N \l_@@_right_seq
\seq_new:N \l_@@_left_seq
%    \end{macrocode}
% \end{variable}
%
% æ‰‹åŠ¨å¼€å¯ä¼ªç²—ä½“ã€ä¼ªæ–œä½“ã€‚
%    \begin{macrocode}
\PassOptionsToPackage{AutoFakeBold,AutoFakeSlant}{xeCJK}
%    \end{macrocode}
%
% \subsubsection{l3keys æŽ¥å£é”®å€¼å¯¹å®šä¹‰}
%
% å®šä¹‰ |bitreport| æ¨¡æ¿ç±»çš„é”®å€¼å¯¹ã€‚
%    \begin{macrocode}
\keys_define:nn { bitreport }
  {
    option .meta:nn = {bitreport / option } {#1},
    cover .meta:nn = { bitreport / cover  } {#1},
    info .meta:nn = { bitreport / info } {#1},
    misc .meta:nn = { bitreport / misc } {#1}
  }
%    \end{macrocode}
%
% å®šä¹‰ |bitreport/option| æ¨¡æ¿ç±»çš„é”®å€¼å¯¹ã€‚
%    \begin{macrocode}
\keys_define:nn { bitreport / option }
  {
    type .choice:,
    type .value_required:n = true,
    type .choices:Vn =
      \c_@@_report_type_clist
      {
        \int_set_eq:NN \g_@@_report_type_int \l_keys_choice_int
      },
    type .initial:n = common,
    ctex .tl_set:N = \l_@@_options_to_ctex_tl,
  }
%    \end{macrocode}
%
% å®šä¹‰ |bitreport/cover| æ¨¡æ¿ç±»çš„é”®å€¼å¯¹ã€‚
%    \begin{macrocode}
\keys_define:nn { bitreport / cover }
  {
    imagePath .tl_set:N = \l_bit_coverimagepath_tl,
    date .tl_set:N = \l_@@_cover_date_tl,
    %% cover entry
    delimiter .tl_set:N = \l_@@_cover_delimiter_tl,
    labelAlign .tl_set:N = \l_@@_cover_label_align_tl,
    labelAlign .initial:n = {r},
    valueAlign .tl_set:N = \l_@@_cover_value_align_tl,
    valueAlign .initial:n = {c},
    labelMaxWidth .dim_set:N = \l_@@_cover_label_max_width_dim,
    valueMaxWidth .dim_set:N = \l_@@_cover_value_max_width_dim,
    autoWidthPadding .dim_set:N = \l_@@_cover_auto_width_padding_dim,
    autoWidthPadding .initial:n = {0.25em},
    autoWidth .bool_set:N = \l_@@_cover_auto_width_bool,
    autoWidth .initial:n = {true},
    underlineThickness .dim_set:N = \l_@@_cover_underline_thickness_dim,
    underlineThickness .initial:n = {1pt},
    underlineOffset .dim_set:N = \l_@@_cover_underline_offset_dim,
    underlineOffset .initial:n = { -10pt },
  }
%    \end{macrocode}
%
% å®šä¹‰ |bitreport/info| æ¨¡æ¿ç±»çš„é”®å€¼å¯¹ã€‚
%    \begin{macrocode}
\keys_define:nn { bitreport / info }
  {
    title .tl_set:N = \l_@@_value_title_tl,
    school .tl_set:N = \l_@@_value_school_tl,
    major .tl_set:N = \l_@@_value_major_tl,
    class .tl_set:N = \l_@@_value_class_tl,
    author .tl_set:N = \l_@@_value_author_tl,
    supervisor .tl_set:N = \l_@@_value_supervisor_tl,
    externalSupervisor .tl_set:N = \l_@@_value_external_supervisor_tl,
    studentId .tl_set:N = \l_@@_value_student_id_tl,
  }
%    \end{macrocode}
%
% å®šä¹‰ |bitreport/misc| æ¨¡æ¿ç±»çš„é”®å€¼å¯¹ã€‚
%    \begin{macrocode}
\keys_define:nn { bitreport / misc }
  {
    reviewTable .tl_set:N = \l_bit_reviewtable_tl,
  }
%    \end{macrocode}
%
% å°† |bithesis/option/ctex| ä¸­çš„å€¼ä¼&nbsp;é€’ç»™ ctexbook æ¨¡æ¿ç±»ã€‚
%    \begin{macrocode}
\DeclareOption*{
  \PassOptionsToClass{\l_@@_options_to_ctex_tl}{ctexart}
}
%    \end{macrocode}
%
% åŠ&nbsp;è½½ ctexbook æ¨¡æ¿ç±»ã€‚
%    \begin{macrocode}
\ProcessOptions\relax
\LoadClass[zihao=-4]{ctexart}
%    \end{macrocode}
%
% \subsubsection{å®šä¹‰æ¨¡æ¿ç±»æ&nbsp;·å¼}
% åŠ&nbsp;è½½æ‰€éœ€çš„å®åŒ…ã€‚
%    \begin{macrocode}
\RequirePackage[a4paper,left=3cm,right=2.4cm,top=2.6cm,bottom=2.38cm,includeheadfoot]{geometry}
\RequirePackage{fancyhdr}
\RequirePackage{setspace}
\RequirePackage{caption}
\RequirePackage{booktabs}
\RequirePackage{pdfpages}
%    \end{macrocode}
%
% åœ¨å®åŠ&nbsp;è½½æ—¶ï¼Œå¤„ç† |bitreport/option| ä¸­çš„å€¼ã€‚ä½¿å¾— |bitreport|
% å®åŒ…çš„æ¨¡æ¿é€‰é¡¹å¯ä»¥åœ¨å®åŠ&nbsp;è½½æ—¶ç”Ÿæ•ˆã€‚
%    \begin{macrocode}
\ProcessKeysOptions { bitreport / option }
%    \end{macrocode}
%
% \subsubsection{è¾…åŠ©å‡½æ•°ä¸Žå¸¸é‡}
%
% \begin{macro}{\tl_if_empty:xTF,\seq_set_split:Nnx}
% ç”Ÿæˆå˜ä½“ã€‚
%    \begin{macrocode}
\cs_generate_variant:Nn \tl_if_empty:nTF {x}
\cs_generate_variant:Nn \seq_set_split:Nnn {Nnx}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_dunderline:nnn}
% ç”¨äºŽæ¸²æŸ“ä¸‹åˆ’çº¿ã€‚
%
% å‚æ•°å¦‚ä¸‹ï¼š
% \begin{itemize}
%   \item \#1 ä½ç½®ï¼Œå¯é€‰å€¼ä¸º \texttt{c}enterã€\texttt{l}eftã€\texttt{r}ightã€‚
%   \item \#2 |dim| é•¿åº¦ã€‚
%   \item \#3 |tl| æ–‡å­—å†…å®¹ã€‚
% \end{itemize}
%    \begin{macrocode}
\cs_new:Npn \@@_dunderline:nnn #1#2#3 {
  {\setbox0=\hbox{#3}\ooalign{\copy0\cr\rule[\dimexpr#1-#2\relax]{\wd0}{#2}}}
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{|@@_render_cover_entry:nn}
% ç”¨äºŽæ¸²æŸ“å°é¢çš„è¾…åŠ©å‡½æ•°ã€‚
%
% å‚æ•°å¦‚ä¸‹ï¼š
% \begin{itemize}
%   \item \#1 |{token_list}| ä¸ºå°é¢ä¿¡æ¯æ¡ç›®çš„åç§°ï¼Œå«åˆ†éš”ç¬¦ã€‚
%   \item \#2 |{token_list}| ä¸ºå°é¢ä¿¡æ¯æ¡ç›®çš„å†…å®¹ã€‚
% \end{itemize}
%
% éœ€è¦åœ¨ |\l_@@_cover_label_max_width_dim| å’Œ |\l_@@_cover_value_max_width_dim|
% å­˜å‚¨å·²ç»è®¡ç®—å‡ºæ¥çš„æœ€å¤§å®½åº¦ã€‚
%    \begin{macrocode}
\cs_new:Npn \@@_render_cover_entry:nn #1#2 {
  \makebox[\l_@@_cover_label_max_width_dim][\l_@@_cover_label_align_tl]{
    \tl_if_blank:VTF #1 {} {#1}
  }
  \hspace{1ex}
  \@@_dunderline:nnn{\l_@@_cover_underline_offset_dim}{\l_@@_cover_underline_thickness_dim}{
    \makebox[\l_@@_cover_value_max_width_dim][\l_@@_cover_value_align_tl]{#2}
  }\par
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{|@@_get_text_width:Nn,\@@_get_text_width:NV}
% è®¡ç®— \#2 æ‰€å&nbsp;ç”¨çš„å®½åº¦ï¼Œå°†ç»“æžœå­˜å‚¨åœ¨ \#1 ä¸­ã€‚
%
% å‚æ•°å¦‚ä¸‹ï¼š
% \begin{itemize}
%   \item \#1 |dim| å­˜å‚¨å®½åº¦çš„å˜é‡ã€‚
%   \item \#2 |tl| è¦è®¡ç®—å®½åº¦çš„æ–‡æœ¬ã€‚
% \end{itemize}
%    \begin{macrocode}
% Get text with from #2, then set to #1.
\cs_new:Npn \@@_get_text_width:Nn #1#2
  {
    \hbox_set:Nn \l_tmpa_box {#2}
    \dim_set:Nn #1 { \box_wd:N \l_tmpa_box }
  }
\cs_generate_variant:Nn \@@_get_text_width:Nn { NV }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_get_max_text_width:NN}
% ä»Ž \#2 ä¸­èŽ·å–æœ€å¤§çš„æ–‡æœ¬å®½åº¦ï¼Œç„¶åŽè®¾ç½®åˆ° \#1 ä¸­ã€‚
%
% å‚æ•°å¦‚ä¸‹ï¼š
% \begin{itemize}
%   \item \#1: |dim| ç”¨äºŽè¾“å‡ºæœ€å¤§å®½åº¦ã€‚
%   \item \#2: |seq| ç”¨äºŽè¾“å…¥å­˜å‚¨æ–‡æœ¬ã€‚
% \end{itemize}
%    \begin{macrocode}
\cs_new:Npn \@@_get_max_text_width:NN #1#2
  {
% è¿™é‡Œç”¨ |group| ç¡®ä¿å±€éƒ¨å˜é‡ä¸ä¼šè¢«æ±¡æŸ“ã€‚
    \group_begin:
      \seq_set_eq:NN \l_@@_tmpa_seq #2
      \dim_zero_new:N \l_@@_tmpa_dim
      \bool_until_do:nn { \seq_if_empty_p:N \l_@@_tmpa_seq }
        {
          \seq_pop_left:NN \l_@@_tmpa_seq \l_@@_tmpa_tl
          \@@_get_text_width:NV \l_@@_tmpa_dim \l_@@_tmpa_tl
          \dim_gset:Nn #1 { \dim_max:nn {#1} { \l_@@_tmpa_dim } }
        }
    \group_end:
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_parse_entry:nn}
% è§£æžå°é¢ä¿¡æ¯æ¡ç›®ï¼Œä¸¢å¼ƒç©ºé¡¹ï¼Œå¹¶æ·»åŠ&nbsp;åˆ†éš”ç¬¦ã€‚
%
% å‚æ•°å¦‚ä¸‹ï¼š
% \begin{itemize}
%   \item \#1: |tl| ä¸ºå°é¢ä¿¡æ¯æ¡ç›®çš„åç§°ã€‚
%   \item \#2: |tl| ä¸ºå°é¢ä¿¡æ¯æ¡ç›®çš„å†…å®¹ã€‚
% \end{itemize}
% |\\| ä¼šè¢«è§†ä¸ºæ¢è¡Œç¬¦ï¼Œä»Žè€Œå®žçŽ°ä¿¡æ¯æ¡ç›®æ¢è¡Œçš„æ•ˆæžœã€‚
%
% ç»“æžœä¼šå­˜å‚¨åˆ° |\l_@@_tmp_left_seq| å’Œ |\l_@@_tmp_right_seq|ã€‚
%
%    \begin{macrocode}
\cs_new:Npn \@@_parse_entry:nn #1 #2 {
  \seq_clear:N \l_@@_tmp_left_seq
  \seq_clear:N \l_@@_tmp_right_seq

  % åªå¤„ç† value éžç©ºçš„é¡¹
  \tl_set:Nn \l_tmpa_tl {#2}
  \tl_if_empty:xTF {\l_tmpa_tl} {} {
    \seq_set_split:Nnx \l_@@_tmp_right_seq {\\} {#2}
    \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\l_@@_cover_delimiter_tl}
    \seq_pop_right:NN \l_@@_tmp_left_seq \g_@@_trashcan_tl
  }
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_render_cover_entry}
% æ¸²æŸ“å°é¢ä¿¡æ¯é¡¹ã€‚æ­¤å‡½æ•°ä¸ºä¸»å‡½æ•°ã€‚
%    \begin{macrocode}
\cs_new:Npn \@@_render_cover_entry:n #1 {
  % å·¦è¾¹æ˜¯æ&nbsp;‡ç­¾ï¼Œå³è¾¹æ˜¯å€¼ã€‚
  % å½¢å¦‚ï¼š
  % { {label_1} {value_1}, {label_2} {value 2} }
  % é¦–å…ˆè½¬æ¢æˆ seq ç±»åž‹ã€‚
  \seq_set_from_clist:NN \l_@@_input_seq #1
  \seq_map_inline:Nn \l_@@_input_seq {
    % ç„¶åŽå¯¹äºŽæ¯ä¸€å¯¹ label å’Œ valueï¼Œé¦–å…ˆæŸ¥æ‰¾
    % value ä¸­æ˜¯å¦å«æœ‰ \\ å­—ç¬¦ï¼Œå¦‚æžœæœ‰ï¼Œåˆ™å°†å…¶åˆ†å‰²æˆå¤šä¸ª
    % label - value å¯¹ã€‚
    % æ¯”å¦‚ {label_1} {value \\ 1} ä¼šè¢«è½¬æ¢æˆ
    % { {label_1} {value}, {} {1} }
    \@@_parse_entry:nn ##1
    % ç„¶åŽå°†è¿™äº› label - value å¯¹æ·»åŠ&nbsp;åˆ° \l_@@_right_seq
    % æˆ–è€… \l_@@_left_sql ä¸­ã€‚
    % left å°±æ˜¯ labelï¼Œright å°±æ˜¯ valueã€‚
    \seq_concat:NNN \l_@@_right_seq \l_@@_right_seq \l_@@_tmp_right_seq
    \seq_concat:NNN \l_@@_left_seq \l_@@_left_seq \l_@@_tmp_left_seq
  }

  % å¦‚æžœç”¨æˆ·é€‰æ‹©è‡ªåŠ¨è®¡ç®—æœ€å¤§å®½åº¦ï¼Œåˆ™è®¡ç®—æœ€å¤§å®½åº¦ã€‚
  \bool_if:NT \l_@@_cover_auto_width_bool {
    \@@_get_max_text_width:NN \l_@@_cover_label_max_width_dim \l_@@_left_seq
    \@@_get_max_text_width:NN \l_@@_cover_value_max_width_dim \l_@@_right_seq
    % åœ¨ value ä¸¤è¾¹åŠ&nbsp;ä¸Šç©ºç™½ï¼Œé¿å…æ–‡æœ¬å¤ªé&nbsp;è¾¹ã€‚
    \dim_add:Nn \l_@@_cover_value_max_width_dim { \l_@@_cover_auto_width_padding_dim * 2 }
  }


  % æœ€åŽï¼Œæ&nbsp;¹æ®å®½åº¦æ¸²æŸ“ label å’Œ value å¯¹ã€‚
  \group_begin:
    \bool_until_do:nn { \seq_if_empty_p:N \l_@@_left_seq }
      {
        \seq_pop_left:NN \l_@@_left_seq \l_@@_tmpa_tl
        \seq_pop_left:NN \l_@@_right_seq \l_@@_tmpb_tl
        \@@_render_cover_entry:nn {\l_@@_tmpa_tl} {\l_@@_tmpb_tl}
      }
  \group_end:
}
%    \end{macrocode}
% \end{macro}
%
% \subsubsection{å®šä¹‰ç”¨æˆ·æŽ¥å£}
%
% \begin{macro}{\BITSetup}
% æä¾›ç”¨æˆ·é…ç½®çš„æŽ¥å£ã€‚
%    \begin{macrocode}
\DeclareDocumentCommand \BITSetup { m }
  { \keys_set:nn { bitreport } { #1 }}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\MakeCover}
% æ¸²æŸ“å°é¢ã€‚
%    \begin{macrocode}
\DeclareDocumentCommand \MakeCover {}
  {
    \group_begin:
    \int_case:nn {\g_@@_report_type_int} {
      {1} {
        \begin{titlepage}
          \centering

          \vspace{23mm}

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

          \vspace{10mm}

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

          \vspace{67mm}

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

            \clist_set:Nn \l_@@_input_clist {
                {\textbf{å­¦\qquad é™¢ï¼š}} {\l_@@_value_school_tl},
                {\textbf{ä¸“\qquad ä¸šï¼š}} {\l_@@_value_major_tl},
                {\textbf{ç­\qquad çº§ï¼š}} {\l_@@_value_class_tl},
                {\textbf{å­¦\qquad å·ï¼š}} {\l_@@_value_student_id_tl},
                {\textbf{å§“\qquad åï¼š}} {\l_@@_value_author_tl},
                {\textbf{ä»»è¯¾æ•™å¸ˆï¼š}} {\l_@@_value_supervisor_tl},
            }

            \@@_render_cover_entry:n \l_@@_input_clist

          \end{spacing}

          \vspace*{\fill}

          \centering

          \songti\fontsize{12pt}{12pt}\selectfont{
            \tl_if_empty:NTF \l_@@_cover_date_tl {
              \today
            } {
              \l_@@_cover_date_tl
            }
          }
        \end{titlepage}
      }
      {2} {
        % Main code for \MakeCover
        \begin{titlepage}
          \topskip=0pt
          \vspace*{-16mm}
          \centering
          \hspace{-6mm}
          \songti\fontsize{22pt}{22pt}
          \selectfont{åŒ—äº¬ç†å·¥å¤§å­¦}\par

          \vspace{13mm}

          \hspace{-6mm}
          \heiti\fontsize{24pt}{24pt}
          \selectfont{æœ¬ç§‘ç”Ÿæ¯•ä¸šè®¾è®¡ï¼ˆè®ºæ–‡ï¼‰å¼€é¢˜æŠ¥å‘Š}\par

          \vspace{53mm}

          \begin{spacing}{2.2}
            \songti\zihao{3}
            \clist_set:Nn \l_@@_input_clist {
                {\textbf{å­¦\qquad é™¢ï¼š}} {\l_@@_value_school_tl},
                {\textbf{ä¸“\qquad ä¸šï¼š}} {\l_@@_value_major_tl},
                {\textbf{ç­\qquad çº§ï¼š}} {\l_@@_value_class_tl},
                {\textbf{å§“\qquad åï¼š}} {\l_@@_value_author_tl},
                {\textbf{æŒ‡å¯¼æ•™å¸ˆï¼š}} {\l_@@_value_supervisor_tl},
                {\textbf{æ&nbsp;¡å¤–æŒ‡å¯¼æ•™å¸ˆï¼š}} {\l_@@_value_external_supervisor_tl},
            }

          \@@_render_cover_entry:n \l_@@_input_clist

          \end{spacing}

          \vspace*{\fill}

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

        \end{titlepage}
      }
    }
    \group_end:
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\MakeReviewTable}
% æ¸²æŸ“è¯„é˜…è¡¨ã€‚
%    \begin{macrocode}
\DeclareDocumentCommand \MakeReviewTable {}
  {
    \group_begin:
      \begin{titlepage}
        \includepdf[pages=-]{\l_bit_reviewtable_tl}
      \end{titlepage}
    \group_end:
  }
%    \end{macrocode}
% \end{macro}
%
% å®šä¹‰ caption å­—ä½“ä¸ºæ¥·ä½“
%    \begin{macrocode}
\DeclareCaptionFont{kaiticaption}{\kaishu \normalsize}
%    \end{macrocode}
%
% è®¾ç½®å›¾ç‰‡çš„ caption æ&nbsp;¼å¼
%    \begin{macrocode}
\renewcommand{\thefigure}{\thesection-\arabic{figure}}
\captionsetup[figure]{font=small,labelsep=space,skip=10bp,labelfont=bf,font=kaiticaption}
%    \end{macrocode}
%
% è®¾ç½®è¡¨æ&nbsp;¼çš„ caption æ&nbsp;¼å¼
%    \begin{macrocode}
\renewcommand{\thetable}{\thesection-\arabic{table}}
\captionsetup[table]{font=small,labelsep=space,skip=10bp,labelfont=bf,font=kaiticaption}
%    \end{macrocode}
%
% è¾“å‡ºå¤§å†™æ•°å­—æ—¥æœŸ
%    \begin{macrocode}
\ctexset{today=big}
%    \end{macrocode}
%
% å°†è¥¿æ–‡å­—ä½“è®¾ç½®ä¸º Times New Roman
%    \begin{macrocode}
\setromanfont{Times~New~Roman}
%    \end{macrocode}
%
% è®¾ç½®æ–‡æ¡£æ&nbsp;‡é¢˜æ·±åº¦
%    \begin{macrocode}
\setcounter{tocdepth}{3}
\setcounter{secnumdepth}{3}
%    \end{macrocode}
%
% è®¾ç½®ä¸€çº§æ&nbsp;‡é¢˜ã€äºŒçº§æ&nbsp;‡é¢˜æ&nbsp;¼å¼ã€‚
%    \begin{macrocode}
% ä¸€çº§æ&nbsp;‡é¢˜ï¼šå°ä¸‰ï¼Œå®‹ä½“ï¼ŒåŠ&nbsp;ç²—ï¼Œæ®µå‰æ®µåŽå„åŠè¡Œã€‚
\ctexset{section={
  format={
    \raggedright \bfseries \songti \zihao{-3}
  },
  beforeskip = 24bp plus 1ex minus .2ex,
  afterskip = 24bp plus .2ex,
  fixskip = true,
  name = {,.\quad}
  }
}
% äºŒçº§æ&nbsp;‡é¢˜ï¼šå°å››ï¼Œå®‹ä½“ï¼ŒåŠ&nbsp;ç²—ï¼Œæ®µå‰æ®µåŽå„åŠè¡Œã€‚
\ctexset{subsection={
  format = {
    \bfseries \songti \raggedright \zihao{4}
  },
  beforeskip = 24bp plus 1ex minus .2ex,
  afterskip = 24bp plus .2ex,
  fixskip = true,
  }
}
%    \end{macrocode}
%
% é¡µçœ‰å’Œé¡µè„šï¼ˆé¡µç&nbsp;ï¼‰çš„æ&nbsp;¼å¼è®¾å®šã€‚
%    \begin{macrocode}
\fancyhf{}
\int_case:nn {\g_@@_report_type_int} {
  {1} {
    \fancyhead[R]{
      \fontsize{10.5pt}{10.5pt}
      \selectfont{\l_@@_value_title_tl}
    }
  }
  {2} {
    \fancyhead[R]{
      \fontsize{10.5pt}{10.5pt}
      \selectfont{åŒ—äº¬ç†å·¥å¤§å­¦æœ¬ç§‘ç”Ÿæ¯•ä¸šè®¾è®¡ï¼ˆè®ºæ–‡ï¼‰å¼€é¢˜æŠ¥å‘Š}
    }
  }
}
\fancyfoot[R]{\fontsize{9pt}{9pt}\selectfont{\thepage}}
\renewcommand{\headrulewidth}{1pt}
\renewcommand{\footrulewidth}{0pt}
%    \end{macrocode}
%
% æ­£æ–‡å¼€å§‹
%    \begin{macrocode}
\pagestyle{fancy}
\setcounter{page}{1}
%    \end{macrocode}
%
%    \begin{macrocode}
% æ­£æ–‡ 22 ç£…çš„è¡Œè·ï¼Œæ®µå‰æ®µåŽé—´è·ä¸º 0
% \setlength{\parskip}{0em}
\cs_set:Npn \baselinestretch {1.53}
% æ­£æ–‡é¦–è¡Œæ‚¬æŒ‚ 1.02cm
% \setlength{\parindent}{1.02cm}
%    \end{macrocode}
%
%    \begin{macrocode}
%&lt;/report&gt;
%    \end{macrocode}
%
% \subsection{bitbeamer.cls æ–‡æ¡£ç±»}
%
%    \begin{macrocode}
%&lt;*beamer&gt;
%    \end{macrocode}
%
% \subsubsection{l3keys æŽ¥å£é”®å€¼å¯¹å®šä¹‰}
%
% å®šä¹‰ |bitbeamer| æ–‡æ¡£ç±»çš„æŽ¥å£é”®å€¼å¯¹ã€‚
%    \begin{macrocode}
\keys_define:nn { bitbeamer }
  {
    titlegraphic .tl_set:N = \l_bit_titlegraphic_tl,
    framelogo .tl_set:N = \l_bit_framelogo_tl,
  }
%    \end{macrocode}
%
% åœ¨å®åŠ&nbsp;è½½æ—¶ï¼Œå¤„ç† |bitbeamer| ä¸­çš„å€¼ã€‚ä½¿å¾— |bitbeamer|
% å®åŒ…çš„æ¨¡æ¿é€‰é¡¹å¯ä»¥åœ¨å®åŠ&nbsp;è½½æ—¶ç”Ÿæ•ˆã€‚
%    \begin{macrocode}
\ProcessKeysOptions { bitbeamer }
%    \end{macrocode}
%
% Pass every option not explicitly defined to `ctexbeamer`.
%    \begin{macrocode}
\DeclareOption*{
  \PassOptionsToClass{\CurrentOption}{ctexbeamer}
}
%    \end{macrocode}
%
% Executes the code for each option.
% Load.
%    \begin{macrocode}
\ProcessOptions\relax
\LoadClass{ctexbeamer}
%    \end{macrocode}
%
% \subsubsection{å®šä¹‰æ¨¡æ¿ç±»æ&nbsp;·å¼}
%
% åŠ&nbsp;è½½æ‰€éœ€çš„å®åŒ…ã€‚
%    \begin{macrocode}
\RequirePackage{xeCJKfntef}
\RequirePackage{tikz}
%    \end{macrocode}
%
% è®¾ç½®ä¸»é¢˜ä¸Žä¸»é¢˜è‰²ã€‚
%    \begin{macrocode}
\usetheme{Madrid}
\definecolor{bitred}{HTML}{A13E0B}
\definecolor{bitgreen}{HTML}{0A8F30}
\definecolor{bitdarkgreen}{HTML}{005B30}
\colorlet{beamer@blendedblue}{bitdarkgreen}
%    \end{macrocode}
%
%
% \begin{macro}{\@@_CJKhl:nn}
% é«˜äº®ä¸­æ–‡å­—ç¬¦ã€‚
%    \begin{macrocode}
\cs_new:Npn \@@_CJKhl:nn #1 #2
  { \CJKsout*[thickness=2.5ex, format=\color{#1}]{#2} }
%    \end{macrocode}
% \end{macro}
%
% Set header if logo path is provided.
%    \begin{macrocode}
\tl_if_empty:NF \l_bit_titlegraphic_tl {
  % BIT Logo
  \titlegraphic{
      \includegraphics[width=2cm]{\l_bit_titlegraphic_tl}
  }
}
%    \end{macrocode}
%
% Set title logo if logo path is provided.
%    \begin{macrocode}
\tl_if_empty:NF \l_bit_framelogo_tl {
  \addtobeamertemplate{frametitle}{}{%
    \begin{tikzpicture}[remember~picture,overlay]
      \node[anchor=north~east,yshift=2pt] at (current~page.north~east)
        {\includegraphics[height=0.8cm]{\tl_use:N \l_bit_framelogo_tl}};
    \end{tikzpicture}
  }
}
%    \end{macrocode}
%
% \subsubsection{å®šä¹‰ç”¨æˆ·æŽ¥å£}
%
%    \begin{macrocode}
\cs_new_eq:NN \CJKhl \@@_CJKhl:nn
%    \end{macrocode}
%
%    \begin{macrocode}
%&lt;/beamer&gt;
%    \end{macrocode}
%
% \iffalse
%
%&lt;*dtx-style&gt;
\ProvidesPackage{dtx-style}
\RequirePackage{hypdoc}
\RequirePackage{ifthen}
\RequirePackage[quiet]{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,table,xcdraw]{xcolor}
\RequirePackage{awesomebox}
% \RequirePackage{etoolbox}
\RequirePackage{dirtree}
\RequirePackage{metalogo}
% The markdown package uses lt3luabridge, which is also required.
\RequirePackage[tightLists=false]{markdown}
\RequirePackage{caption}
\RequirePackage{tikz}
\usetikzlibrary{positioning}
\RequirePackage{framed}
\RequirePackage{menukeys}
\RequirePackage{float}
\RequirePackage{subfig}

 % è®¾ç½®åˆ—è¡¨æ—&nbsp;é—´éš”
\usepackage{enumitem}
\setlist{nosep}

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

\hypersetup{
  pdflang     = zh-CN,
  pdftitle    = {BIThesisï¼šåŒ—äº¬ç†å·¥å¤§å­¦å­¦ä½è®ºæ–‡åŠæŠ¥å‘Šæ¨¡æ¿},
  pdfauthor   = {å†¯å¼€å®‡},
  pdfsubject  = {åŒ—äº¬ç†å·¥å¤§å­¦å­¦ä½è®ºæ–‡åŠæŠ¥å‘Šæ¨¡æ¿ä½¿ç”¨è¯´æ˜Ž},
  pdfkeywords = {è®ºæ–‡æ¨¡æ¿; åŒ—äº¬ç†å·¥å¤§å­¦; ä½¿ç”¨è¯´æ˜Ž},
  pdfdisplaydoctitle = true
}%

\renewcommand{\subsectionautorefname}{å°èŠ‚}
\renewcommand{\subsubsectionautorefname}{å°èŠ‚}
\renewcommand{\sectionautorefname}{èŠ‚}
\renewcommand{\chapterautorefname}{ç«&nbsp;}

\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 &lt;
  \char_set_catcode_active:N (
  \char_set_active_eq:NN | \orbar
  \char_set_active_eq:NN &lt; \syntaxopt@aux
  \char_set_active_eq:NN ( \defaultval@aux
}

\NewDocumentCommand \BIThesisTemplates {m} {
  \str_case:nn {#1} {
    {UT}{æœ¬ç§‘ç”Ÿæ¯•ä¸šè®ºæ–‡æ¨¡æ¿ï¼ˆundergraduate-thesisï¼‰}
    {UTE}{æœ¬ç§‘ç”Ÿå…¨è‹±æ–‡ä¸“ä¸šæ¯•ä¸šè®ºæ–‡æ¨¡æ¿ï¼ˆundergraduate-thesis-enï¼‰}
    {GT}{ç&nbsp;”ç©¶ç”Ÿå­¦ä½è®ºæ–‡æ¨¡æ¿ï¼ˆgraduate-thesisï¼‰}
    {LR}{ç®€æ˜“å®žéªŒæŠ¥å‘Šæ¨¡æ¿ï¼ˆlab-reportï¼‰}
    {PT}{æœ¬ç§‘ç”Ÿæ¯•ä¸šè®¾è®¡å¤–æ–‡ç¿»è¯‘æ¨¡æ¿ï¼ˆpaper-translationï¼‰}
    {PS}{åŒ—ç†å·¥ä¸»é¢˜çš„ Beamer æ¨¡æ¿ï¼ˆpresentation-slideï¼‰}
    {UP}{æœ¬ç§‘ç”Ÿæ¯•ä¸šè®¾è®¡å¼€é¢˜æŠ¥å‘Šï¼ˆundergraduate-proposalï¼Œå·²åºŸå¼ƒï¼‰}
    {RR}{æœ¬ç§‘ç”Ÿè¯»ä¹¦æŠ¥å‘Šæ¨¡æ¿ï¼ˆreading-reportï¼‰}
  }
}

% å…è®¸æ¢è¡Œçš„ç»†é—´è·ã€‚
\def\breakablethinspace{\hskip 0.16667em\relax}


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

\ExplSyntaxOff

\ctexset{
  today=big,
  abstractname=ç®€ä»‹,
}

\pagestyle{fancy}

\ctexset{section={
  format={\raggedright \bfseries \zihao{-3}},
  name = {ç¬¬,ç«&nbsp;}
  }
}

\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=0,
   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}[1][]{\lstset{style=lstStyleShell, #1}}{}
\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&gt;{\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}}
\newenvironment{note}[1][Note]
  {{\color{magenta} \bfseries #1} \itshape}
  {}

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


  % è®¾ç½® caption ä¸Ž figure ä¹‹é—´çš„è·ç¦»
\setlength{\abovecaptionskip}{11pt}
\setlength{\belowcaptionskip}{9pt}

  % è®¾ç½®å›¾ç‰‡çš„ caption æ&nbsp;¼å¼
\renewcommand{\thefigure}{\thesection-\arabic{figure}}
\captionsetup[figure]{font=small,labelsep=space}

  % è®¾ç½®è¡¨æ&nbsp;¼çš„ caption ä¸Ž table ä¹‹é—´çš„åž‚ç›´è·ç¦»
\captionsetup[table]{skip=2pt}

  % è®¾ç½®è¡¨æ&nbsp;¼çš„ caption æ&nbsp;¼å¼
\renewcommand{\thetable}{\thesection-\arabic{table}}
\captionsetup[table]{font=small,labelsep=space}

  % å®šä¹‰ BIThesis \LaTeX é£Žæ&nbsp;¼çš„ Logo
\usepackage{relsize}
\makeatletter
\def\matex@ssize{\smaller\scshape}
\DeclareRobustCommand{\BIThesis}{
  \texorpdfstring{\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
     }}{BIThesis}
}

%% from \pkg{ctxdoc}
\newlist{optdesc}{description}{3}
%% è®¾ç½®é—´è·ä¸º \marginparsepï¼Œä¸Ž l3doc ä¸€è‡´
\setlist[optdesc]{%
  font=\mdseries\small\ttfamily,align=right,listparindent=\parindent,
  labelsep=\marginparsep,labelindent=-\marginparsep,leftmargin=0pt}

\makeatother

%&lt;/dtx-style&gt;
% \fi
%
%
% \Finale
\endinput
% \iffalse
%  Local Variables:
%  mode: doctex
%  TeX-master: t
%  End:
% \fi
</pre></body></html>