<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">% \iffalse meta-comment
% !TEX program = XeLaTeX
%
% DO NOT REMOVE THE MARK MANUALLY (used in l3build) -&gt; %
%
%&lt;*internal&gt;
\iffalse
%&lt;/internal&gt;
%&lt;*internal&gt;
\fi
\begingroup
  \def\nameofLaTeXe{LaTeX2e}
\expandafter\endgroup\ifx\fmtname\nameofLaTeXe\else
\csname fi\endcsname
%&lt;/internal&gt;
%&lt;*install&gt;
\input docstrip
\keepsilent
\askforoverwritefalse
\preamble

    Copyright (C) 2013-2014 by Xu Cheng &lt;xucheng@me.com&gt;
                  2014-     by hust-latex &lt;https://github.com/hust-latex&gt;
                  2024-     by HUANG Yuxi &lt;hustthesis@hyxi.dev&gt;

    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.3c or later is part of all distributions of LaTeX
    version 2008 or later.

    This work has the LPPL maintenance status "maintained".

    The Current Maintainer of this work is HUANG Yuxi &lt;hustthesis@hyxi.dev&gt;.

\endpreamble
\postamble

    This work consists of the files \jobname.dtx
              and the derived files \jobname.ins,
                                    \jobname.cls,
                                    \jobname-doc.sty,
                                    \jobname-m.def,
                                    \jobname-d.def,
                                    \jobname.cbx,
                                    \jobname.bbx.

\endpostamble

\generate
  {
%&lt;/install&gt;
%&lt;*internal&gt;
    \usedir{source/latex/\jobname}
    \file{\jobname.ins}{\from{\jobname.dtx}{install}}
%&lt;/internal&gt;
%&lt;*install&gt;
    \usedir{tex/latex/\jobname}
    \file{\jobname.cls}{\from{\jobname.dtx}{class}}
    \file{\jobname-doc.sty}{\from{\jobname.dtx}{doc-sty}}
    \file{\jobname-m.def}{\from{\jobname.dtx}{def-m}}
    \file{\jobname-d.def}{\from{\jobname.dtx}{def-d}}
    \file{\jobname.cbx}{\from{\jobname.dtx}{cbx}}
    \file{\jobname.bbx}{\from{\jobname.dtx}{bbx}}
  }

\Msg{*********************************************************}
\Msg{*}
\Msg{* To finish the installation you have to move the}
\Msg{* following file into a directory searched by TeX:}
\Msg{*}
\Msg{* \space\space \jobname.cls}
\Msg{* \space\space \jobname.cbx}
\Msg{* \space\space \jobname.bbx}
\Msg{* \space\space \jobname-m.def}
\Msg{* \space\space \jobname-d.def}
\Msg{* \space\space hust-title.pdf}
\Msg{*}
\Msg{* To produce the documentation run the file \jobname.dtx}
\Msg{* through LuaLaTeX.}
\Msg{*}
\Msg{* Happy TeXing!}
\Msg{*}
\Msg{*********************************************************}

\endbatchfile
%&lt;/install&gt;
%&lt;*internal&gt;
\fi
%&lt;/internal&gt;

%&lt;class&gt;\NeedsTeXFormat{LaTeX2e}[2024-11-01]
%&lt;class&gt;\ProvidesExplClass{hustthesis}
%&lt;doc-sty&gt;\ProvidesExplClass{hustthesis-doc}
%&lt;def-m&gt;\ProvidesExplFile{hustthesis-m.def}
%&lt;def-d&gt;\ProvidesExplFile{hustthesis-d.def}
%&lt;cbx&gt;\ProvidesFile{hustthesis.cbx}[Citation style for the hustthesis class]
%&lt;bbx&gt;\ProvidesFile{hustthesis.bbx}[Bibliography style for the hustthesis class]
%&lt;class|doc-sty|def-m|def-d&gt;  {2025-02-27}{2.0.0} %
%&lt;class&gt;  {Thesis Template for Huazhong University of Science and Technology}
%&lt;doc-sty&gt;  {Documentation for the hustthesis class}
%&lt;def-m&gt;  {Definition file for the hustthesis class in master thesis}
%&lt;def-d&gt;  {Definition file for the hustthesis class in doctoral thesis}
%&lt;*driver&gt;
\documentclass[]{\jobname}
\usepackage{useclass}
% Protect \maketitile from the redefinition in \cls{article} in \cls{l3doc}.
\let\maketitleold=\maketitle
\useclass*[full]{l3doc}
\let\maketitle=\maketitleold
\usepackage{\jobname-doc}
\usepackage{mdframed}
\begin{filecontents}[overwrite]{\jobname.bib}
@online{huang2024useclass,
  title = {The useclass.sty Package: Load Classes as Packages},
  author = {Huang, Yuxi},
  year = {2024},
  month = {mar},
  day = {06},
  url = {https://github.com/huangyxi/useclass},
}
@online{zeng2023fduthesis,
  title = {\cls{fduthesis}: å¤æ—¦å¤§å­¦è®ºæ–‡æ¨¡æ¿},
  author = {æ›¾, ç¥¥ä¸œ},
  year = {2023},
  month = {may},
  day = {27},
  url = {https://github.com/stone-zeng/fduthesis},
}
@online{sjtug2024SJTUTeX,
  title = {\cls{SJTU\TeX}: ä¸Šæµ·äº¤é€šå¤§å­¦æ–‡æ¡£ç±»é›†},
  author = {SJTUG},
  year = {2024},
  month = {feb},
  day = {18},
  url = {https://github.com/sjtug/SJTUTeX},
}
@online{njulug2023njuthesis,
  title = {å—äº¬å¤§å­¦å­¦ä½è®ºæ–‡æ¨¡æ¿},
  author = {å—äº¬å¤§å­¦~Linux~ç”¨æˆ·ç»„},
  year = {2023},
  month = {dec},
  day = {05},
  url = {https://github.com/nju-lug/NJUThesis},
}
@online{hu2024bib,
  title = {ç¬¦åˆ GB/T 7714-2015 æ&nbsp;‡å‡†çš„ biblatex å‚è€ƒæ–‡çŒ®æ&nbsp;·å¼},
  author = {èƒ¡æŒ¯éœ‡},
  year = {2024},
  month = {nov},
  day = {15},
  url = {https://github.com/hushidong/biblatex-gb7714-2015},
}
\end{filecontents}
\begin{filecontents}[overwrite]{\jobname-fmt.bib}
@book{YanMingLi2006CFGZhuang,
  title = {CFGæ¡©å¤åˆåœ°åŸºæŠ€æœ¯åŠå·¥ç¨‹å®žè·µ},
  author = {{é—«æ˜Žç¤¼} and {å¼&nbsp;ä¸œåˆš}},
  date = {2006},
  edition = {2},
  publisher = {ä¸­å›½æ°´åˆ©æ°´ç”µå‡ºç‰ˆç¤¾},
  location = {åŒ—äº¬}
}
@book{chalfi1998GreenFluo,
  title = {Green fluorescent protein: properties, applications, and protocols},
  editor = {Chalfie, Martin and {Steven R. Kain}},
  date = {1998},
  publisher = {Wiley-interscience},
  location = {Hoboken, New Jersey},
  pagetotal = {385}
}
@article{ZhanXiangHong2004ZhongYiY,
  title = {ä¸­åŒ»è¯é˜²æ²»é˜¿å°”èŒ¨æµ·é»˜ç—…å®žéªŒç&nbsp;”ç©¶è¿°è¦},
  author = {{è©¹å‘çº¢} and {æŽå¾·æ–°}},
  date = {2004},
  journaltitle = {ä¸­åŒ»è¯å­¦åˆŠ},
  volume = {22},
  number = {11},
  pages = {2094--2096}
}
@article{lein2007Genomewide,
  title = {Genome-wide atlas of gene expression in the adult mouse brain},
  author = {Lein, Ed S. and Hawrylycz, Michael J. and Ao, Nancy and Ayres, Mikael and Bensinger, Amy and Bernard, Amy and Boe, Andrew F., et al.},
  date = {2007-01},
  journaltitle = {Nature},
  volume = {445},
  number = {7124},
  pages = {168--176},
  publisher = {Nature Publishing Group}
}
@article{bouxse2010Guidelines,
  title = {Guidelines for Assessment of bone microstructure in rodents using micro--computed tomography},
  author = {Bouxsein, Mary L and Boyd, Stephen K and Christiansen, Blaine A and Guldberg, Robert E and Jepsen, Karl J and M\"uller, Ralph},
  date = {2010},
  journaltitle = {Journal of Bone and Mineral Research},
  volume = {25},
  number = {7},
  pages = {1468--1486}
}
@inproceedings{yamaki2018Performanc,
  title = {Performance evaluation of phase-only correlation functions from the viewpoint of correlation {{Filters}}},
  booktitle = {2018 {{Asia-Pacific Signal}} and {{Information Processing Association Annual Summit}} and {{Conference}} ({{APSIPA ASC}})},
  author = {Yamaki, Shunsuke and Abet, Masahide and Kawamata, Masayuki and Yoshizawa, Makoto},
  date = {2019},
  pages = {1361--1364},
  publisher = {Proceedings of the IEEE},
  location = {Honolulu, HI, USA, 12-15 Nov. 2018}
}
@article{yao2017BuildingE,
  title = {Building efficient key-value stores via a lightweight compaction tree},
  author = {Yao, Ting and Wan, Jiguang and Huang, Ping and He, Xubin and Wu, Fei and Xie, Changsheng},
  date = {2017-11-24},
  journaltitle = {ACM Trans. Storage},
  volume = {13},
  number = {4},
  pages = {1--28}
}
@patent{LiuJiaLin1993DuoGongN,
  type = {patent},
  title = {å¤šåŠŸèƒ½ä¸€æ¬¡æ€§åŽ‹èˆŒæ¿},
  author = {åˆ˜åŠ&nbsp;æž—},
  holder = {{Individual}},
  date = {1993-04-14},
  number = {ZL92214985. 2},
  location = {ä¸­å›½}
}
@thesis{LiQingQuan1998JiYuHun,
  type = {åšå£«å­¦ä½è®ºæ–‡},
  title = {åŸºäºŽæ··åˆç»“æž„çš„ä¸‰ç»´GISæ•°æ®æ¨¡åž‹ä¸Žç©ºé—´åˆ†æžç&nbsp;”ç©¶},
  author = {{æŽæ¸…æ³‰}},
  namea = {{æŽå¾·ä»}},
  nameatype = {collaborator},
  date = {1998},
  location = {æ­¦æ±‰},
  institution = {æ­¦æ±‰å¤§å­¦æ­¦æ±‰æµ‹ç»˜ç§‘æŠ€å¤§å­¦}
}
\end{filecontents}
\addbibresource{\jobname-fmt.bib}
\addbibresource{\jobname.bib}

\providecommand{\name}{\jobname}
\providecommand{\clsname}{\cls{\name}}

\begin{document}
  \DocInput{\jobname.dtx}
  \PrintChanges
  \PrintIndex
\end{document}
%&lt;/driver&gt;
% \fi
%
% \changes{v2.0.0}{2024-10-01}{ä½¿ç”¨ \LaTeX3 è¯­æ³•é‡æž„}
% \changes{v2.0.0}{2024-10-01}{ä½¿ç”¨ \cls{useclass} å®žçŽ°æ–‡æ¡£ç±»â€œè‡ªä¸¾â€}
%
% \hustsetup {
%   info =
%     {
%       title = { \clsname{} v2.0.0ï¼šåŽä¸­ç§‘æŠ€å¤§å­¦ç&nbsp;”ç©¶ç”Ÿå­¦ä½è®ºæ–‡\LaTeX{}æ–‡æ¡£ç±»ä½¿ç”¨è¯´æ˜Ž }, %
%       title* = { \clsname{} v2.0.0: \LaTeX{} Thesis Template for Huazhong University of Science and Technology }, %
%       degree = { academic },
%       degree* = { Engineering },
%       author = { é»„å®‡å¸Œ },
%       author* = { HUANG Yuxi },
%       major = { \LaTeX{} æ–‡æ¡£ç±»è®¾è®¡ },
%       major* = { \LaTeX{} Template Design },
%       supervisor = { \TeX{}Book\quad{} æ•™æŽˆ },
%       supervisor* = { Prof.~ \TeX{}Book },
%date={2025-02-27},
%     },
% }
%
% \maketitle
% \frontmatter
% \begin{abstract}
%   \clsname{} æ˜¯åŽä¸­ç§‘æŠ€å¤§å­¦ç&nbsp;”ç©¶ç”Ÿå­¦ä½è®ºæ–‡\LaTeX{}\emph{éžå®˜æ–¹}æ–‡æ¡£ç±»ã€‚
%   2.0.0 èµ·ç‰ˆä½¿ç”¨ \LaTeX3 è¯­æ³•é‡æž„ï¼Œå¹¶ä¸”ä¸å†å…¼å®¹ä¹‹å‰çš„ç‰ˆæœ¬ã€‚
%   ç›®å‰ä»…æ”¯æŒ\emph{ä¸­æ–‡ç¡•å£«å’Œåšå£«}å­¦ä½è®ºæ–‡ã€‚
%
%   æœ¬æ–‡æ¡£ç±»éµå¾ª \LaTeX{} é¡¹ç›®å…¬å…±è®¸å¯è¯ 1.3cï¼ˆ\LaTeX Project Public License 1.3c ç‰ˆï¼‰çš„ç›¸å…³è§„å®šè¿›è¡Œåˆ†å‘å’Œä¿®æ”¹ã€‚
%   ä½¿ç”¨æœ¬æ–‡æ¡£ç±»å³è¡¨ç¤ºæ‚¨å·²çŸ¥æ‚‰å¹¶åŒæ„è¯¥è®¸å¯è¯çš„æ¡æ¬¾ã€‚
%   æœ¬æ–‡æ¡£ç±»æŒ‰â€œåŽŸæ&nbsp;·â€æä¾›ï¼Œä¸é™„å¸¦ä»»ä½•æ˜Žç¤ºæˆ–æš—ç¤ºçš„ä¿è¯ï¼ŒåŒ…æ‹¬ä½†ä¸é™äºŽé€‚é”€æ€§æˆ–ç‰¹å®šç”¨é€”çš„é€‚ç”¨æ€§ã€‚
%   ä½œè€…ä¸å¯¹å›&nbsp;ä½¿ç”¨æœ¬æ–‡æ¡£ç±»å¯¼è‡´çš„ä»»ä½•ç›´æŽ¥æˆ–é—´æŽ¥æŸå¤±æ‰¿æ‹…è´£ä»»ã€‚
%   è¯·åœ¨ä¿®æ”¹å’Œåˆ†å‘æœ¬æ–‡æ¡£ç±»æ—¶éµå¾ªè®¸å¯è¯çš„ç›¸å…³è¦æ±‚ï¼Œä»¥ç¡®ä¿å…¶å®Œæ•´æ€§å’Œå¯ç»´æŠ¤æ€§ã€‚
%
%   æœ¬é¡¹ç›®ä»£ç&nbsp;æ‰˜ç®¡åœ¨ GitHub \url{https://github.com/hust-latex/hustthesis}ï¼Œ
%   æœ€æ–°ç‰ˆçš„ \clsname{} æ–‡æ¡£ç±»æ‰‹å†Œè¯·è®¿é—®
%   \url{https://github.com/hust-latex/hustthesis/releases/latest/download/hustthesis.pdf}ã€‚
%
%   \keywords åŽä¸­ç§‘æŠ€å¤§å­¦ï¼›å­¦ä½è®ºæ–‡æ–‡æ¡£ç±»ï¼›\LaTeXï¼›\LaTeX3
% \end{abstract}
%
% \begin{abstract*}
%   \clsname{} is an Unofficial \LaTeX{} thesis template for Huazhong University of Science and Technology.
%   Version 2.0.0 and later are written in \LaTeX3 and are not compatible with previous versions.
%   Currently, it only supports Science and Engineering master's and doctoral theses in Chinese.
%
%   This template is distributed and modified under the terms of the \LaTeX Project Public License 1.3c.
%   By using this template, you acknowledge and agree to the terms of this license.
%   This template is provided ``as is'' without any express or implied warranty, including but not limited to
%   merchantability or fitness for a particular purpose.
%   The author is not responsible for any direct or indirect losses arising from the use of this template.
%   Please follow the relevant requirements of the license when modifying and distributing this template
%   to ensure its integrity and maintainability.
%
%   This project is hosted on GitHub
%   \url{github.com/hust-latex/hustthesis},
%   and the latest version of the \clsname{} documentation can be found at
%   \url{github.com/hust-latex/hustthesis/releases/latest/download/hustthesis.pdf}.
%
%   \keywords* Huazhong University of Science and Technology, Dissertation Template, \LaTeX, \LaTeX3
% \end{abstract*}
%
% \tableofcontents
% \mainmatter
%
% \begin{documentation}
%
% \chapter{\clsname{} ä»‹ç»}
%
% \clsname{} æ˜¯åŽä¸­ç§‘æŠ€å¤§å­¦ç&nbsp;”ç©¶ç”Ÿå­¦ä½è®ºæ–‡\LaTeX{}æ–‡æ¡£ç±»ï¼Œ
% æ—¨åœ¨ä¸ºåŽç§‘å­¦ç”Ÿæä¾›ä¸€ä¸ªç®€å•ä¸Šæ‰‹ï¼Œæ˜“äºŽä½¿ç”¨çš„å­¦ä½è®ºæ–‡æ–‡æ¡£ç±»ã€‚
%
% \section{\clsname{} åŽ†å²}
%
% æœ¬æ–‡æ¡£ç±» |v1.x| ç‰ˆæœ¬ç”±åŽä¸­ç§‘æŠ€å¤§å­¦ç”µå­ä¿¡æ¯å­¦é™¢2014å±Šæœ¬ç§‘ç”Ÿè®¸é“–åšå£«
% \footnote{\url{https://github.com/xu-cheng}}å¼€å‘å¹¶ç»´æŠ¤ï¼Œ
% æ”¯æŒä¸­è‹±æ–‡çš„æœ¬ç§‘ã€ç¡•å£«å’Œåšå£«å­¦ä½è®ºæ–‡æ’°å†™ã€‚
% ä½œä¸ºä¸€ä¸ªè®¾è®¡ç²¾è‰¯çš„ \LaTeXe{} æ–‡æ¡£ç±»ï¼Œè‡ª2013å¹´6æœˆ1æ—¥ |v1.0| åˆç‰ˆ
% ä»¥ \LaTeX é¡¹ç›®å…¬å…±è®¸å¯è¯ 1.3cï¼ˆ\LaTeX{} Project Public License 1.3c ç‰ˆï¼‰å‘å¸ƒä»¥æ¥ï¼Œ
% è¯¥æ–‡æ¡£ç±»å·²ä¸ºæ—&nbsp;æ•°åŽç§‘å­¦å­æä¾›äº†ä¼˜è´¨çš„æœåŠ¡ã€‚
%
% ç„¶è€Œï¼Œéšç€å­¦æ&nbsp;¡å­¦ä½è®ºæ–‡æ&nbsp;¼å¼è¦æ±‚çš„ä¸æ–­æ›´æ–°ï¼Œ
% åŽŸæœ‰çš„æ–‡æ¡£ç±»é€æ¸éš¾ä»¥æ»¡è¶³æ–°çš„æ&nbsp;¼å¼è¦æ±‚ã€‚
% åŠ&nbsp;ä¹‹åŽŸä½œè€…ç§»å±…æµ·å¤–ï¼Œéš¾ä»¥åŠæ—¶å“åº”æ—¥ç›Šå¢žå¤šçš„ç”¨æˆ·éœ€æ±‚ã€‚
% åŒæ—¶ï¼Œéšç€ \LaTeX3 æŠ€æœ¯å’Œ C\TeX{} å®é›†çš„é€æ¸æˆç†Ÿä¸Žæ™®åŠï¼Œ
% ä¸Žä¹‹ç›¸æ¯”çš„ \LaTeXe{} è¯­æ³•æ˜¾å¾—éš¾ä»¥ç»´æŠ¤ã€‚
% å›&nbsp;æ­¤ï¼Œè‡ª2024å¹´æ–‡æ¡£ç±» |v2.x.x| ç‰ˆæœ¬å¼€å§‹äº¤ç”±åŽä¸­ç§‘æŠ€å¤§å­¦åšå£«ç”Ÿé»„å®‡å¸Œ
% \footnote{\url{https://github.com/huangyxi}}æŽ¥æ‰‹ç»´æŠ¤ï¼Œ
% å¹¶åŸºäºŽ \LaTeX3 æŠ€æœ¯å’Œ C\TeX{} å®é›†è¿›è¡Œäº†å…¨é¢é‡æž„ã€‚
%
% æ­¤å¤–ï¼Œ|v2.0.0|èµ·ï¼Œæ–‡æ¡£ç±»è¯´æ˜Žæ‰‹å†Œä½¿ç”¨ \pkg{useclass}\cite{huang2024useclass}
% ä»¥å®åŒ…çš„æ–¹å¼è½½å…¥ \pkg{l3doc} æ–‡æ¡£ç±»ä¸­çš„ä¼—å¤šå‘½ä»¤å’ŒçŽ¯å¢ƒï¼Œ
% ä½¿å¾— \pkg{l3doc} æ–‡æ¡£ç±»èƒ½å¤Ÿä¸Ž \clsname{} æ–‡æ¡£ç±»å…±å­˜ï¼Œ
% å®žçŽ° \clsname{} æ–‡æ¡£ç±»çš„â€œè‡ªä¸¾â€ã€‚
%
% å½“å‰\clsname{} ä»£ç&nbsp;åœ¨ GitHub
% \url{https://github.com/hust-latex/hustthesis} ä¸Šæ‰˜ç®¡ï¼Œ
% æ¬¢è¿Žå„ä½åŒå­¦æå‡ºæ„è§å’Œå»ºè®®ã€‚
%
% \section{å­¦ä½è®ºæ–‡æ&nbsp;¼å¼è§„èŒƒ}
%
% ç›®å‰åŽä¸­ç§‘æŠ€å¤§å­¦å¯¹äºŽç¡•å£«å’Œåšå£«çš„å­¦ä½è®ºæ–‡æ&nbsp;¼å¼ä¸»è¦ç”±ä»¥ä¸‹æ–‡ä»¶è§„èŒƒï¼š
% \begin{itemize}
%   \item \href{http://gs.hust.edu.cn/content.jsp?urltype=news.NewsContentUrl&amp;wbtreeid=1022&amp;wbnewsid=1027}{åŽä¸­ç§‘æŠ€å¤§å­¦åšå£«ã€ç¡•å£«å­¦ä½è®ºæ–‡æ’°å†™è§„å®šï¼Œ æ&nbsp;¡ç&nbsp;”ã€”2009ã€•39å·}
%   \item \href{http://gs.hust.edu.cn/info/1041/5462.htm}{å­¦ä½ç”³è¯·ç›¸å…³æ–‡æ¡£ä¸‹è½½}ï¼Œ
%     å‘å¸ƒæ—¶é—´2023-02-10
% \end{itemize}
%
% ç”±äºŽå…¶ä¸­å¦‚â€œå‚è€ƒæ–‡çŒ®è‘—å½•ä½œè€…æœ€å¤šæ•°é‡â€ç­‰éƒ¨åˆ†è§„èŒƒå°šæœªç»Ÿä¸€ï¼Œ
% æ–‡æ¡£ç±»ä½œè€…åœ¨æ­¤ä»…æ&nbsp;¹æ®è¿‡å¾€å·²é€šè¿‡çš„å­¦ä½è®ºæ–‡çš„æ&nbsp;¼å¼æ‹©å–å…¶ä¸€å®žçŽ°ï¼Œ
% ä¾›åŒå­¦ä»¬å‚è€ƒã€‚
% å…·ä½“çš„æ&nbsp;¼å¼è¦æ±‚è¯·ä»¥å­¦æ&nbsp;¡æœ€æ–°çš„é€šçŸ¥ä¸ºå‡†ã€‚
%
% \section{\clsname{} å‘è¡Œç‰ˆæœ¬å·\label{sec:version}}
%
% æ›´æ–°ç‰ˆæœ¬å¾€å¾€ä¼šå¸¦æ¥æ–°åŠŸèƒ½å’Œä¿®å¤é—®é¢˜ï¼Œ
% ä½†æœ‰æ—¶ä¹Ÿä¼šä¸å¯é¿å…åœ°å¸¦æ¥ä¸å‘åŽå…¼å®¹çš„ä¿®æ”¹ã€‚
% ä¸ºäº†æ¸…æ™°åœ°ä¼&nbsp;è¾¾ç‰ˆæœ¬ä¹‹é—´çš„å˜åŒ–ï¼Œ
% æœ¬æ–‡æ¡£ç±»å‘è¡Œçš„ç‰ˆæœ¬å·ä½¿ç”¨ç±»ä¼¼ä½†ä¸å®Œå…¨åŒäºŽè¯­ä¹‰åŒ–ç‰ˆæœ¬æŽ§åˆ¶ï¼ˆSemantic Versioningï¼‰è§„èŒƒ
% \footnote{\url{https://semver.org/}}ç”¨ä»¥æ&nbsp;‡è¯†ã€‚
% åœ¨æœ¬æ–‡æ¡£ç±»ä¸­ï¼Œå¯¹äºŽç‰ˆæœ¬å· |MAJOR.MINOR.PATCH|ï¼Œé€’å¢žç›¸åº”çš„éƒ¨åˆ†æ‰€è¡¨ç¤ºçš„å«ä¹‰å¦‚ä¸‹ï¼š
% \begin{itemize}
%   \item |MAJOR|ï¼šé€’å¢žå¤§ç‰ˆæœ¬å·ï¼Œ
%     è¡¨ç¤ºå·²åœ¨æ­£æ–‡æ–‡æ¡£åŒ–çš„å…¬å¼€æŽ¥å£ä¸Šå­˜åœ¨ä¸å‘åŽå…¼å®¹ï¼ˆbackward compatibilityï¼‰çš„ä¿®æ”¹ï¼Œ
%     ä¸€èˆ¬å¯¹æ–‡æ¡£ä»£ç&nbsp;ä¸ç»ä¿®æ”¹æ—&nbsp;æ³•æ­£å¸¸ç¼–è¯‘ï¼›
%   \item |MINOR|ï¼šé€’å¢žå°ç‰ˆæœ¬å·ï¼Œ
%     è¡¨ç¤ºå·²åœ¨æ­£æ–‡æ–‡æ¡£åŒ–çš„éžå®žéªŒæ€§å…¬å¼€æŽ¥å£ä¸Š\emph{ä¸}å­˜åœ¨ä¸å‘åŽå…¼å®¹ç¼–è¯‘çš„ä¿®æ”¹ï¼Œ
%     ä½†åœ¨å®žéªŒæ€§å…¬å¼€æŽ¥å£ä¸Šå­˜åœ¨ä¸å‘åŽå…¼å®¹çš„ä¿®æ”¹ï¼›
%     æˆ–è€…æ–‡æ¡£æ&nbsp;·å¼å‘ç”Ÿæ¯”è¾ƒæ˜Žæ˜¾çš„å˜åŒ–ã€‚
%     ä¸€èˆ¬å¯¹æ–‡æ¡£ä»£ç&nbsp;ä¸ä½œä¿®æ”¹æˆ–è€…åªéœ€å°å¹…ä¿®æ”¹å°±å¯ä»¥æ­£å¸¸ç¼–è¯‘ï¼›
%   \item |PATCH|ï¼šé€’å¢žè¡¥ä¸ç‰ˆæœ¬å·ï¼Œ
%     è¡¨ç¤ºæ–°ç‰ˆæœ¬å«æœ‰å‘åŽå…¼å®¹çš„ bug ä¿®å¤ï¼Œæ–°åŠŸèƒ½ï¼Œæˆ–è€…æ–‡æ¡£æ&nbsp;·å¼çš„ç»†å¾®å˜åŒ–ï¼Œ
%     å…¶ä¸­æœªæ–‡æ¡£åŒ–çš„ç§æœ‰æŽ¥å£å¯èƒ½ä¼šå‘ç”Ÿå˜åŒ–ã€‚
% \end{itemize}
% ç”¨æˆ·åœ¨æ›´æ–°æ–‡æ¡£ç±»æ—¶ï¼Œå¯ä»¥æ&nbsp;¹æ®ç‰ˆæœ¬å·çš„å˜åŒ–ä»¥åŠæ›´æ–°æ—¥å¿—æ¥åˆ¤æ–­æ˜¯å¦éœ€è¦ä¿®æ”¹è‡ªå·±çš„æ–‡æ¡£ã€‚
%
%
% \chapter{èŽ·å–é€”å¾„}
%
% èŽ·å–æœ€æ–°ç‰ˆæœ¬çš„ \clsname{} æ–‡æ¡£ç±»ä¸»è¦æœ‰ä¸¤ç§é€”å¾„ï¼š
% ä»Ž CTAN ä¸Šä¸‹è½½ï¼Œæˆ–è€…ä»Ž GitHub Releases é¡µé¢ä¸‹è½½ã€‚
%
% \section{CTAN}
%
% CTAN \url{https://ctan.org/pkg/hustthesis}
% ä¸Šçš„ \clsname{} æ–‡æ¡£ç±»æ˜¯ç»è¿‡æ‰“åŒ…çš„ç‰ˆæœ¬ï¼Œ
% å…¶ä¸­åŒ…å«äº†æ–‡æ¡£ç±»ã€å’Œæ–‡æ¡£ç±»æ‰‹å†Œã€‚
%
% \section{GitHub Release}
%
% \cls{hustthesis} çš„æºç&nbsp;æ‰˜ç®¡åœ¨ GitHub
% \url{https://github.com/hust-latex/hustthesis} ä¸Šï¼Œ
% å…¶ä¸­åŒ…å«äº†æœ€æ–°çš„å¼€å‘ç‰ˆæœ¬ã€‚
% ç”±äºŽæºç&nbsp;æ˜¯ä»¥ Doc\TeX{} æ&nbsp;¼å¼ç¼–å†™ï¼Œ
% å¯¹äºŽåˆå­¦è€…æ¥è¯´ï¼Œå®‰è£…å’Œä½¿ç”¨éƒ½æ¯”è¾ƒéº»çƒ¦ã€‚
% å›&nbsp;æ­¤ï¼Œå»ºè®®åˆå­¦è€…å¯ä»¥ç›´æŽ¥ä»Ž Releases é¡µé¢ä¸‹è½½æ‰“åŒ…å¥½çš„ç‰ˆæœ¬ï¼Œè§£åŽ‹åŽç›´æŽ¥ä½¿ç”¨ã€‚
% \url{https://github.com/hust-latex/hustthesis/releases/latest/download/hustthesis-user.zip}
%
% \chapter{ä½¿ç”¨è¯´æ˜Ž}
%
% \section{å¤ªé•¿ä¸è¯»ï¼ˆTL;DRï¼‰}
%
% æœ¬èŠ‚å°†å±•ç¤ºä¸¤æ®µç®€åŒ–ç¨‹åº¦ä¸ä¸€çš„ä»£ç&nbsp;ç¤ºä¾‹ï¼Œ
% å¯ç”¨äºŽå¿«é€Ÿäº†è§£æœ¬æ–‡æ¡£ç±»çš„ä½¿ç”¨æ–¹æ³•ï¼Œ
% æˆ–è€…åœ¨ç¼–è¯‘å¤±è´¥çš„è°ƒè¯•é˜¶æ®µä½œä¸ºå‚è€ƒã€‚
%
% \subsection{æœ€å°å¯ç”¨ç¤ºä¾‹}
%
% ä»¥ä¸‹ä»£ç&nbsp;åŒ…å«äº†æœ¬æ–‡æ¡£ç±»çš„æœ€å°å¯ç”¨ç¤ºä¾‹ï¼ˆMinimal Working Exampleï¼‰ï¼Œ
% ç”¨äºŽå±•çŽ°æ–‡æ¡£ç±»ä½¿ç”¨çš„ä¸»ä½“ç»“æž„ã€‚
% \begin{latexcode}
%   \documentclass{hustthesis}
%   % \hustsetup{} % è®¾ç½®
%   \begin{document}
%     \maketitle
%     \frontmatter
%     æ‘˜è¦éƒ¨åˆ†
%     \tableofcontents
%     \mainmatter
%     æ­£æ–‡éƒ¨åˆ†
%     \backmatter
%     è‡´è°¢ä»¥åŠå‚è€ƒæ–‡çŒ®
%     \appendix
%     é™„å½•éƒ¨åˆ†
%   \end{document}
% \end{latexcode}
%
% \subsection{æ&nbsp;¸å¿ƒç¤ºä¾‹}
%
% æœ¬ç¤ºä¾‹åŒ…å«äº†è¾ƒé•¿çš„ä¸€æ®µæ–‡æ¡£ç±»æ&nbsp;¸å¿ƒå‘½ä»¤å’ŒçŽ¯å¢ƒï¼Œ
% æ›´å¤šè¿›é˜¶ç”¨æ³•è¯·å‚è€ƒåŽç»­å°èŠ‚ã€‚
% \begin{latexcode}[emph={[1]hustsetup}]
%   \documentclass[type=doctor]{hustthesis} % åšå£«å­¦ä½è®ºæ–‡: doctor, ç¡•å£«å­¦ä½è®ºæ–‡: master
%   \hustsetup { % è®¾ç½®ä¹‹é—´ä¸€å®šä¸èƒ½æœ‰ç©ºè¡Œ
%     info =
%       {
%         title = { ä¸­æ–‡æ&nbsp;‡é¢˜ },
%         title* = { English Title },
%         degree = { academic }, % å­¦æœ¯åž‹: academic, ä¸“ä¸šåž‹: professional
%         degree* = { Engineering }, % è‹±æ–‡å­¦ç§‘
%         author = { å§“å },
%         author* = { Author },
%         student-id = { D201234567 },
%         major = { ä¸“ä¸š },
%         major* = { Major },
%         supervisor = { æŒ‡å¯¼è€å¸ˆ\quad{} æ•™æŽˆ },
%         supervisor* = { Prof.~ Supervisor },
%         date = { 2025-02-26 }, % ä¸å†™è¿™è¡Œçš„è¯ä¼šè‡ªåŠ¨ç”Ÿæˆï¼Œå†™çš„è¯ä¸€å®šè¦æŒ‰ç…§è¿™ä¸ªæ&nbsp;¼å¼
%       },
%   }
%   \addbibresource{references.bib} % % biblatex å‚è€ƒæ–‡çŒ®æ–‡ä»¶å
%   \begin{document}
%     \maketitle
%     \frontmatter
%     \begin{abstract}
%       ä¸­æ–‡æ‘˜è¦
%       \keywords å…³é”®è¯1ï¼›å…³é”®è¯2ï¼›å…³é”®è¯3
%     \end{abstract}
%     \begin{abstract*}
%       English Abstract
%       \keywords* keyword1, keyword2, keyword3
%     \end{abstract*}
%     \tableofcontents
%     \mainmatter
%     \chapter{ç¬¬ä¸€ç«&nbsp;}
%     \section{ç¬¬ä¸€èŠ‚}
%     ...
%     \backmatter
%     \begin{acknowledgements} % è‡´è°¢
%       æ„Ÿè°¢ hustthesis æ–‡æ¡£ç±»ã€‚
%     \end{acknowledgements}
%     \printbibliography
%     \appendix
%     \chapter{é™„å½•}
%   \end{document}
% \end{latexcode}
%
% \section{ç¼–è¯‘è¯´æ˜Ž}
%
% æœ¬æ–‡æ¡£ç±»ä»…å¯ä½¿ç”¨ \XeLaTeX{} æˆ–è€… \LuaLaTeX{} ç¼–è¯‘ã€‚
%
% \section{å¦‚ä½•é˜…è¯»æœ¬ç«&nbsp;ä½¿ç”¨è¯´æ˜Ž}
%
% æ˜¯çš„ï¼Œè¯´æ˜Žæ–‡æ¡£æœ¬èº«ä¹Ÿéœ€è¦è¯´æ˜Žæ–‡æ¡£æ¥è¯´æ˜Žå¦‚ä½•é˜…è¯»è¯´æ˜Žæ–‡æ¡£ã€‚
%
% \subsection{å®žéªŒæ€§å†…å®¹}
%
% æœ¬æ–‡æ¡£ç±»è¯´æ˜Žéƒ¨åˆ†çš„åå­—å«æœ‰ â€œ\rexpstar{}â€ çš„é”®å€¼å¯¹é€‰é¡¹ï¼Œè®¾ç½®ï¼Œå‘½ä»¤æˆ–çŽ¯å¢ƒï¼Œ
% è¡¨ç¤ºè¯¥å†…å®¹ä¸ºå®žéªŒæ€§å†…å®¹ã€‚
% å…³äºŽå®žéªŒæ€§å†…å®¹çš„æ›´æ–°å¸¦æ¥æ½œåœ¨ä¸å‘åŽå…¼å®¹ä¿®æ”¹çš„è¯´æ˜Žï¼Œ
% è¯·å‚è€ƒ \ref{sec:version} èŠ‚ã€‚
%
% \subsection{å•é€‰é”®å€¼å¯¹è®¾ç½®}
%
% \key{key} = &lt;\opt{option},\opt*{default}&gt;,
%
% å…¶ç­‰å·å³è¾¹çš„é€‰é¡¹ \opt{option}ï¼Œå’Œ \opt*{default} å‡è¡¨ç¤ºå¯é€‰çš„å•é€‰é¡¹ï¼Œ
% å…¶ä¸­åŠ&nbsp;ç²—é€‰é¡¹ \opt*{default} è¡¨ç¤ºé»˜è®¤é€‰é¡¹ã€‚
%
% æœ€åŽçš„é€—å·æ˜¯ä¸ºäº†æé†’è¯»è€…ï¼Œ
% å¦‚æžœå­˜åœ¨å¤šä¸ªé”®å€¼å¯¹ï¼Œå…¶ä¹‹é—´éœ€ç”±åŠè§’ï¼ˆè‹±æ–‡ï¼‰é€—å·åˆ†éš”ã€‚ï¼ˆä»¥ä¸‹å¦‚æœªç‰¹æ®Šè¯´æ˜Žï¼Œé€—å·å‡æŒ‡åŠè§’é€—å·ï¼‰
%
% \subsection{è‡ªå®šä¹‰é”®å€¼å¯¹è®¾ç½®}
%
% \key{key} = \marg{value},
%
% å…¶ç­‰å·å³è¾¹çš„å€¼ \marg{value} è¡¨ç¤ºå¯ä»¥è‡ªå®šä¹‰çš„å€¼ã€‚
%
% \section{æ–‡æ¡£ç±»é€‰é¡¹\label{sec:option}}
%
% æœ¬èŠ‚ä»‹ç»çš„é€‰é¡¹ä»…å¯åœ¨å¦‚ä¸‹æ–‡æ¡£ç±»é€‰é¡¹ï¼ˆä¸­æ‹¬å·ä¸­|type=doctor|ï¼‰ä¸­ä½¿ç”¨ã€‚
% å¤šä¸ªé€‰é¡¹ä¹‹é—´ä¹Ÿæ˜¯ç”±é€—å·åˆ†éš”ã€‚
% \begin{latexcode}
%   \documentclass[type=doctor]{hustthesis}
% \end{latexcode}
%
% \begin{function}[module=option/]{type}
%   \begin{syntax}
%     \key{type} = &lt;\opt*{doctor},\opt{master}&gt;,
%   \end{syntax}
%   \begin{arguments}
%     \item[\opt*{doctor}] åšå£«å­¦ä½è®ºæ–‡
%     \item[\opt{master}] ç¡•å£«å­¦ä½è®ºæ–‡
%   \end{arguments}
%   \key{type} é€‰é¡¹ç”¨äºŽè®¾ç½®å­¦ä½è®ºæ–‡ç±»åž‹ã€‚
% \end{function}
%
% \begin{function}[rEXP, module=option/]{anonymous}
%   \begin{syntax}
%     \key{anonymous} = &lt;\opt*{false},\opt{true}&gt;,
%   \end{syntax}
%   \begin{arguments}
%     \item[\opt*{false}] å…³é—­ç›²å®¡æ¨¡å¼
%     \item[\opt{true}] å¼€å¯ç›²å®¡æ¨¡å¼
%   \end{arguments}
%   \key{anonymous} é€‰é¡¹ç”¨äºŽè®¾ç½®æ˜¯å¦å¼€å¯ç›²å®¡æ¨¡å¼ã€‚
%   ç›²å®¡æ¨¡å¼ä¸‹ï¼Œ\key{anonymous-list} ä¸­çš„æ‰€æœ‰ä¿¡æ¯å‡ä¼šè¢«éšè—ã€‚
% \end{function}
%
% \begin{function}[rEXP, module=option/]{anonymous-list}
%   \begin{syntax}
%     \key{anonymous-list} = \marg{ç›²å®¡æ¨¡å¼éšè—æ¡ç›®åˆ—è¡¨},
%   \end{syntax}
%  \key{anonymous-list} é€‰é¡¹ç”¨äºŽè®¾ç½®åœ¨å¼€å¯ç›²å®¡æ¨¡å¼ä¸‹éœ€è¦éšè—çš„æ¡ç›®ã€‚
%  \marg{åŒ¿åæ¡ç›®åˆ—è¡¨} æ˜¯ä¸€ç»„ç”±åŠè§’ï¼ˆè‹±æ–‡ï¼‰é€—å·éš”å¼€çš„é€‰é¡¹åˆ—è¡¨ã€‚
%  |info/| ä¸‹é”®å€¼å¯¹é”®åçš„è¿žæŽ¥ç¬¦ï¼ˆ|-|ï¼‰éœ€æ‰‹åŠ¨æ›¿æ¢ä¸ºä¸‹åˆ’çº¿ï¼ˆ|_|ï¼‰ï¼Œ
%  æ˜Ÿå·ï¼ˆ|*|ï¼‰éœ€æ‰‹åŠ¨æ›¿æ¢ä¸º|_en|ã€‚
%  é»˜è®¤å€¼ä¸º \texttt{\{author, student_id, supervisor, author_en, supervisor_en\}}ã€‚
% \end{function}
%
% \section{æ–‡æ¡£ä¿¡æ¯è®¾ç½®}
%
% æœ¬èŠ‚ä»‹ç»çš„æ–‡æ¡£ä¿¡æ¯è®¾ç½®é€‰é¡¹åªå¯åœ¨ \tn{hustsetup} å‘½ä»¤çš„\marg{é”®å€¼åˆ—è¡¨}ä¸­ä½¿ç”¨ï¼Œ
% ä¸»è¦ç”¨äºŽå°é¢å’Œæ‰‰é¡µçš„æ&nbsp;‡é¢˜ã€ä½œè€…ç­‰ä¿¡æ¯çš„è¾“å‡ºã€‚
%
% \begin{function}{\hustsetup}
%   \begin{syntax}
%      \tn{hustsetup}\marg{é”®å€¼åˆ—è¡¨}
%   \end{syntax}
%   \tn{hustsetup} çš„å‚æ•°æ˜¯ä¸€ç»„ç”±åŠè§’ï¼ˆè‹±æ–‡ï¼‰é€—å·éš”å¼€çš„é€‰é¡¹åˆ—è¡¨ï¼Œ
%   åˆ—è¡¨ä¸­çš„é€‰é¡¹é€šå¸¸æ˜¯
%   \meta{key}|=|\meta{value}çš„å½¢å¼ã€‚
%   å¯¹äºŽç›¸åŒé”®ï¼ŒåŽé¢çš„å€¼ä¼šè¦†ç›–å‰é¢çš„å€¼ã€‚
%   â€œ|=|â€å·¦å³çš„ç©ºæ&nbsp;¼ä¸å½±å“å®žé™…è®¾ç½®ï¼Œ
%   ä½†éœ€æ³¨æ„ï¼Œå‚æ•°åˆ—è¡¨ä¸­ä¸èƒ½æœ‰ç©ºè¡Œã€‚
% \end{function}
%
% \begin{function}[module=info/]{info/degree}
%   \begin{syntax}
%     \key[info]{degree} = &lt;\opt*{academic},\opt{professional}&gt;,
%   \end{syntax}
%    è®¾ç½®ä¸­æ–‡å­¦ä½ç±»åž‹ï¼Œä»…å¯é€‰å­¦æœ¯åž‹æˆ–ä¸“ä¸šåž‹ã€‚
%   \begin{arguments}
%     \item[\opt*{academic}] å­¦æœ¯åž‹
%     \item[\opt{professional}] ä¸“ä¸šåž‹
%   \end{arguments}
% \end{function}
%
% \begin{function}[module=info/]{info/degree*}
%   \begin{syntax}
%     \key[info]{degree*} = &lt;\opt{Arts},\opt{Science},\opt{Education},\opt*{Engineering},\opt{Law},\opt{Medicine},...&gt;,
%   \end{syntax}
%   è®¾ç½®è‹±æ–‡å­¦ç§‘é—¨ç±»ï¼Œ
%   å¯é€‰é¡¹æœ‰ï¼š
%   \begin{arguments}
%     \item[\opt{Arts}] æ–‡å­¦å­¦ä½
%     \item[\opt{Science}] ç†å­¦å­¦ä½
%     \item[\opt{Education}] æ•™è‚²å­¦å­¦ä½
%     \item[\opt*{Engineering}] å·¥å­¦å­¦ä½
%     \item[\opt{Law}] æ³•å­¦å­¦ä½
%     \item[\opt{Medicine}] åŒ»å­¦å­¦ä½
%     \item[...] å…¶ä»–å­¦ç§‘å¯è‡ªè¡Œè®¾ç½®
%   \end{arguments}
% \end{function}
%
% \begin{function}[module=info/]{info/title, info/title*}
%   \begin{syntax}
%     \key[info]{title} = \marg{ä¸­æ–‡æ&nbsp;‡é¢˜},
%     \key[info]{title*} = \marg{è‹±æ–‡æ&nbsp;‡é¢˜},
%   \end{syntax}
%   è®¾ç½®è®ºæ–‡æ&nbsp;‡é¢˜ã€‚
% \end{function}
%
% \begin{function}[module=info/]{info/author, info/author*}
%   \begin{syntax}
%     \key[info]{author} = \marg{å§“åä¸­æ–‡},
%     \key[info]{author*} = \marg{å§“åè‹±æ–‡},
%   \end{syntax}
%   è®¾ç½®å­¦ä½ç”³è¯·äººå§“åã€‚
%   æ&nbsp;¹æ®å­¦æ&nbsp;¡è¦æ±‚ï¼Œè‹±æ–‡å§“ååº”è¯¥æŒ‰ç…§ä¸­æ–‡ä¹&nbsp;æƒ¯ï¼Œ
%   ä¸ºå§“åœ¨å‰ååœ¨åŽï¼Œä¸”å§“å…¨éƒ¨å¤§å†™ã€‚
% \end{function}
%
% \begin{function}[module=info/]{info/major, info/major*}
%   \begin{syntax}
%     \key[info]{major} = \marg{ä¸“ä¸šåç§°ä¸­æ–‡},
%     \key[info]{major*} = \marg{ä¸“ä¸šåç§°è‹±æ–‡},
%   \end{syntax}
%   è®¾ç½®ä¸“ä¸šåç§°ã€‚
% \end{function}
%
% \begin{function}[module=info/]{info/supervisor, info/supervisor*}
%   \begin{syntax}
%     \key[info]{supervisor} = \marg{æŒ‡å¯¼è€å¸ˆä¸­æ–‡å§“å},
%     \key[info]{supervisor*} = \marg{æŒ‡å¯¼è€å¸ˆè‹±æ–‡å§“å},
%   \end{syntax}
%   è®¾ç½®æŒ‡å¯¼è€å¸ˆå§“åã€‚
% \end{function}
%
% \begin{function}[module=info/]{info/date}
%   \begin{syntax}
%     \key[info]{date} = \marg{æ—¥æœŸ},
%   \end{syntax}
%   è®¾ç½®è®ºæ–‡æäº¤æ—¥æœŸã€‚
%   æ—¥æœŸæ&nbsp;¼å¼ä¸º |YYYY-MM-DD|ã€‚
%   å¦‚æžœä¸è®¾ç½®è¯¥é€‰é¡¹ï¼Œæ–‡æ¡£ç±»ä¼šè‡ªåŠ¨ç”Ÿæˆæ—¥æœŸã€‚
% \end{function}
%
% \begin{function}[module=info/]{info/clc}
%   \begin{syntax}
%     \key[info]{clc} = \marg{ä¸­å›¾åˆ†ç±»å·},
%   \end{syntax}
%   è®¾ç½®ä¸­å›¾åˆ†ç±»å·ã€‚
% \end{function}

% \begin{function}[module=info/]{info/student-id}
%   \begin{syntax}
%     \key[info]{student-id} = \marg{å­¦å·},
%   \end{syntax}
%   è®¾ç½®å­¦å·ã€‚
% \end{function}
%
% \begin{function}[rEXP, module=info/]{info/secret}
%   \begin{syntax}
%     \key[info]{secret} = \marg{å¯†çº§},
%   \end{syntax}
%   å®žéªŒæ€§å†…å®¹ï¼Œè®¾ç½®å¯†çº§ã€‚å½“å‰ä»…å½±å“ä¸­æ–‡å°é¢çš„æ˜¾ç¤ºï¼Œé»˜è®¤ä¸ºç©ºã€‚
% \end{function}
%
% \begin{function}[module=info/]{info/committee}
%   \begin{syntax}
%     \key[info]{committee} = \marg{ç­”è¾©å§”å‘˜ä¼šæˆå‘˜},
%   \end{syntax}
%   è®¾ç½®ç­”è¾©å§”å‘˜ä¼šæˆå‘˜ã€‚
%   è¯¥é€‰é¡¹çš„å€¼æ˜¯ä¸€ä¸ªé€—å·åˆ†éš”å§”å‘˜ä¼šæˆå‘˜çš„åˆ—è¡¨ï¼Œ
%   å…¶ä¸­æ¯ä¸ªæˆå‘˜çš„å§“åï¼ŒèŒç§°å’Œå•ä½ä¹‹é—´ç”¨ |&amp;| åˆ†å‰²ã€‚
%   ç¬¬ä¸€ä¸ªæˆå‘˜ä¸ºä¸»å¸­ï¼Œå…¶ä½™æˆå‘˜ä¸ºå§”å‘˜ã€‚
%   ç”±äºŽæ–‡æ¡£ç±»å†…éƒ¨å®žçŽ°åŽŸå›&nbsp;ï¼Œå¦‚æžœè®¾ç½®è¯¥é€‰é¡¹ï¼Œè¯·è‡³å°‘è®¾ç½®3åæˆå‘˜ã€‚
%   ä¾‹å¦‚ï¼š
%   \begin{latexcode}
%   \hustsetup {
%     info/committee =
%       { å¼&nbsp;ä¸‰ &amp; æ•™æŽˆ &amp; åŽä¸­ç§‘æŠ€å¤§å­¦ , æŽå›› &amp; æ•™æŽˆ &amp; æ­¦æ±‰å¤§å­¦ , çŽ‹äº” &amp; æ•™æŽˆ &amp; æ­¦æ±‰ç†å·¥å¤§å­¦ },
%   }
%   \end{latexcode}
%   å¦‚æžœä¸è®¾ç½®è¯¥é€‰é¡¹ï¼Œæ–‡æ¡£ç±»ä¼šè‡ªåŠ¨ç”Ÿæˆ7è¡Œç©ºç™½çš„ç­”è¾©å§”å‘˜ä¼šæˆå‘˜ã€‚
%
%   å¦å¤–ï¼Œè¯¥é€‰é¡¹æ‰€å¯¹åº”çš„é¡µé¢ä»…åœ¨åšå£«å­¦ä½è®ºæ–‡ä¸­ä¼šè‡ªåŠ¨ç”Ÿæˆã€‚
%   å¦‚æžœéœ€è¦æ‰‹åŠ¨ç”Ÿæˆé¡µé¢ï¼Œå¯ä»¥ä½¿ç”¨å‘½ä»¤ \tn{makecommittee}ã€‚
% \end{function}
%
% \section{å†…å®¹ç¼–å†™}
%
% ä»¥ä¸‹å†…å®¹é¡»åœ¨ |\begin{document}| å’Œ |\end{document}| ä¹‹é—´ç¼–å†™ã€‚
%
% \subsection{å°é¢æ‰‰é¡µ}
%
% \begin{function}{\maketitle}
%   \begin{syntax}
%     \tn{maketitle}
%   \end{syntax}
%   \tn{maketitle} å‘½ä»¤ç”¨äºŽç”Ÿæˆä¸­è‹±æ–‡å°é¢ã€‚
%   ä»…å½“æ–‡æ¡£ç±»ç±»åž‹ä¸ºåšå£«å­¦ä½è®ºæ–‡æ—¶ï¼Œ
%   åœ¨ä¸­æ–‡å’Œè‹±æ–‡å°é¢ä¹‹é—´ä¼šè‡ªåŠ¨æ’å…¥ç­”è¾©å§”å‘˜ä¼šæˆå‘˜ã€‚
% \end{function}
%
% \begin{function}[rEXP]{\makezhtitle, \makeentitle}
%   \begin{syntax}
%     \tn{makezhtitle}
%     \tn{makeentitle}
%   \end{syntax}
%   \tn{makezhtitle} å’Œ \tn{makeentitle} å‘½ä»¤åˆ†åˆ«ç”¨äºŽç”Ÿæˆä¸­æ–‡å’Œè‹±æ–‡å°é¢ã€‚
%   ä¸€èˆ¬ä¸éœ€è¦æ‰‹åŠ¨è°ƒç”¨è¿™ä¸¤ä¸ªå‘½ä»¤ã€‚
% \end{function}
%
% \begin{function}[rEXP]{\makecommittee}
%   \begin{syntax}
%     \tn{makecommittee}
%   \end{syntax}
%   \tn{makecommittee} å‘½ä»¤ç”¨äºŽç”Ÿæˆç­”è¾©å§”å‘˜ä¼šæˆå‘˜ã€‚
%   ä¸€èˆ¬ä¹Ÿä¸éœ€è¦æ‰‹åŠ¨è°ƒç”¨è¯¥å‘½ä»¤ã€‚
% \end{function}
%
% \subsection{å‰æ–‡}
%
% \begin{function}{\frontmatter}
%   \begin{syntax}
%     \tn{frontmatter}
%   \end{syntax}
%   \tn{frontmatter} å‘½ä»¤ç”¨äºŽä¿®æ”¹é¡µç&nbsp;æ&nbsp;¼å¼ä¸ºç½—é©¬æ•°å­—ï¼Œ
%   å¢žåŠ&nbsp;é¡µçœ‰å’Œé¡µè„šï¼Œ
%   ä»¥åŠè®¾ç½®ç›®å½•ä¸­è™šçº¿æ&nbsp;·å¼ã€‚
%   è¯¥å‘½ä»¤ä¸€èˆ¬éœ€è¦åœ¨ \tn{maketitle} å‘½ä»¤ä¹‹åŽï¼Œæ‘˜è¦ä¹‹å‰è°ƒç”¨ã€‚
% \end{function}
%
% \begin{environment}{abstract, abstract*}
%   \begin{latexcode}
%   \begin{abstract}
%     ä¸­æ–‡æ‘˜è¦
%     \keywords å…³é”®è¯1ï¼›å…³é”®è¯2ï¼›å…³é”®è¯3
%   \end{abstract}
%
%   \begin{abstract*}
%     English abstract
%     \keywords* keyword1, keyword2, keyword3
%   \end{abstract*}
%   \end{latexcode}
%   |abstract| å’Œ |abstract*| çŽ¯å¢ƒåˆ†åˆ«ç”¨äºŽç”Ÿæˆä¸­æ–‡å’Œè‹±æ–‡æ‘˜è¦ã€‚
% \end{environment}
%
% \begin{function}{keywords, keywords*}
%   \begin{syntax}
%     \tn{keywords} å…³é”®è¯1ï¼›å…³é”®è¯2ï¼›å…³é”®è¯3
%     \tn{keywords*} Keyword1, Keyword2, Keyword3
%   \end{syntax}
%   \tn{keywords} å’Œ \tn{keywords*} å‘½ä»¤åˆ†åˆ«ç”¨äºŽç”Ÿæˆä¸­æ–‡å’Œè‹±æ–‡å…³é”®è¯ã€‚
%   ä¸€èˆ¬éœ€è¦åœ¨ç›¸åº”çš„ |abstract| å’Œ |abstract*| çŽ¯å¢ƒä¸­çš„æœ€åŽä¸€è¡Œè°ƒç”¨ã€‚
% \end{function}
%
% \begin{function}{\tableofcontents}
%   \begin{syntax}
%     \tn{tableofcontents}
%   \end{syntax}
%   \tn{tableofcontents} å‘½ä»¤ç”¨äºŽç”Ÿæˆç›®å½•ã€‚
% \end{function}
%
% \subsection{æ­£æ–‡}
%
% \begin{function}{\mainmatter}
%   \begin{syntax}
%     \tn{mainmatter}
%   \end{syntax}
%   \tn{mainmatter} å‘½ä»¤ç”¨äºŽä¿®æ”¹é¡µç&nbsp;æ&nbsp;¼å¼ä¸ºé˜¿æ‹‰ä¼¯æ•°å­—ï¼Œ
%   ä»¥åŠè®¾ç½®ç›®å½•ä¸­è™šçº¿æ&nbsp;·å¼ã€‚
%   è¯¥å‘½ä»¤ä¸€èˆ¬éœ€è¦åœ¨ç›®å½•ä¹‹åŽï¼Œæ­£æ–‡ä¹‹å‰è°ƒç”¨ã€‚
% \end{function}
%
% \begin{function}{\chapter, \chapter*, \chapter**}
%   \begin{syntax}
%     \tn{chapter}\marg{æ&nbsp;‡é¢˜å}
%     \tn{chapter*}\marg{æ&nbsp;‡é¢˜å}
%     \tn{chapter**}\marg{æ&nbsp;‡é¢˜å}
%   \end{syntax}
%   \tn{chapter} å’Œ \tn{chapter*} å‘½ä»¤ä¸Žæ&nbsp;‡å‡† \LaTeXe-\pkg{book} æ–‡æ¡£ç±»ä¸­çš„å‘½ä»¤åŠŸèƒ½ç›¸åŒï¼Œ
%   ç”¨äºŽç”Ÿæˆç«&nbsp;æ&nbsp;‡é¢˜ã€‚
%   å‰è€…ä¸ºæœ‰ç¼–å·çš„ç«&nbsp;æ&nbsp;‡é¢˜ï¼Œä¼šåœ¨ç›®å½•ä¸­ç”Ÿæˆå¯¹åº”çš„æ¡ç›®ï¼›
%   åŽè€…ä¸ºæ—&nbsp;ç¼–å·çš„ç«&nbsp;æ&nbsp;‡é¢˜ï¼Œä¸ä¼šåœ¨ç›®å½•ä¸­ç”Ÿæˆå¯¹åº”çš„æ¡ç›®ã€‚
%
%   \tn{chapter**} å‘½ä»¤æ˜¯æœ¬æ–‡æ¡£ç±»æ–°å¢žçš„ç«&nbsp;èŠ‚æ&nbsp;‡é¢˜ç”Ÿæˆçš„å‘½ä»¤ï¼Œ
%   ç”¨äºŽç”Ÿæˆæ—&nbsp;ç¼–å·ç«&nbsp;èŠ‚æ&nbsp;‡é¢˜ï¼Œä½†ä¼šåœ¨ç›®å½•ä¸­ç”Ÿæˆå¯¹åº”çš„æ¡ç›®ã€‚
%   ä¸€èˆ¬å¯ç”¨äºŽåœ¨é™„å½•ä¸­ç”Ÿæˆæ—&nbsp;ç¼–å·çš„ç«&nbsp;èŠ‚æ&nbsp;‡é¢˜ã€‚
% \end{function}
%
% \subsection{åŽæ–‡}
%
% \begin{function}{\backmatter}
%   \begin{syntax}
%     \tn{backmatter}
%   \end{syntax}
%   \tn{backmatter} å‘½ä»¤ç”¨äºŽä¿®æ”¹ç›®å½•ä¸­è™šçº¿æ&nbsp;·å¼ã€‚
%   è¯¥å‘½ä»¤ä¸€èˆ¬éœ€è¦åœ¨æ­£æ–‡ä¹‹åŽï¼Œè‡´è°¢ä¹‹å‰è°ƒç”¨ã€‚
% \end{function}
%
% \begin{environment}{acknowledgements}
%   \begin{syntax}
%     |\begin{acknowledgements}|
%       è‡´è°¢
%     |\end{acknowledgements}|
%   \end{syntax}
%   |acknowledgements| çŽ¯å¢ƒç”¨äºŽç”Ÿæˆè‡´è°¢ã€‚
% \end{environment}
%
% \begin{function}{\printbibliography}
%   \begin{syntax}
%     \tn{printbibliography}
%   \end{syntax}
%   \tn{printbibliography} å‘½ä»¤ç”¨äºŽç”Ÿæˆ \pkg{biblatex} å®åŒ…çš„å‚è€ƒæ–‡çŒ®ã€‚
% \end{function}
%
% \subsection{é™„å½•}
%
% \begin{function}{\appendix}
%   \begin{syntax}
%     \tn{appendix}
%   \end{syntax}
%   \tn{appendix} å‘½ä»¤ç”¨äºŽä¿®æ”¹ç«&nbsp;èŠ‚æ&nbsp;‡é¢˜æ&nbsp;¼å¼ï¼Œ
%   è¯¥å‘½ä»¤ä¸€èˆ¬éœ€è¦åœ¨å‚è€ƒæ–‡çŒ®ä¹‹åŽè°ƒç”¨ã€‚
% \end{function}
%
% é™„å½•çš„ç«&nbsp;èŠ‚å¦‚ç­”è¾©å§”å‘˜ä¼šå†³è®®ç­‰ï¼Œå¯ä»¥æ&nbsp;¹æ®éœ€è¦ä½¿ç”¨ \tn{chapter} å‘½ä»¤ç”Ÿæˆæœ‰ç¼–å·çš„æ&nbsp;‡é¢˜ï¼Œ
% ä¹Ÿå¯ä»¥ä½¿ç”¨ \tn{chapter**} å‘½ä»¤ç”Ÿæˆæ—&nbsp;ç¼–å·çš„æ&nbsp;‡é¢˜ã€‚
%
% \section{å‚è€ƒæ–‡çŒ®è¯´æ˜Ž}
%
% è¿™é‡Œåˆ—ä¸¾äº†åœ¨å­¦ä½è®ºæ–‡è§„èŒƒæ–‡æ¡£ä¸­çš„å‚è€ƒæ–‡çŒ®ã€‚
% å¯ä»¥åœ¨æ­£æ–‡åŽå‚è€ƒæ–‡çŒ®åˆ—è¡¨ä¸­æŸ¥çœ‹ç”Ÿæˆçš„æ&nbsp;·å¼ã€‚
% \citeauthor{YanMingLi2006CFGZhuang}
% \cite{chalfi1998GreenFluo, ZhanXiangHong2004ZhongYiY}
% \parencite{lein2007Genomewide,bouxse2010Guidelines,yamaki2018Performanc,yao2017BuildingE,LiuJiaLin1993DuoGongN,LiQingQuan1998JiYuHun}
%
% \backmatter
% \begin{acknowledgements}
%   æ„Ÿè°¢ \cls{fduthesis} æ–‡æ¡£ç±»\cite{zeng2023fduthesis}ï¼Œ
%   \cls{SJTU\TeX} æ–‡æ¡£ç±»é›†\cite{sjtug2024SJTUTeX}ï¼Œ
%   å’Œ \cls{njuthesis} æ–‡æ¡£ç±»\cite{njulug2023njuthesis}ï¼Œ
%   æœ¬æ–‡æ¡£ç±»çš„è®¸å¤šè®¾è®¡å’Œå®žçŽ°éƒ½æ˜¯å‚è€ƒäº†ä¸Šè¿°ä»£ç&nbsp;ã€‚
%   å¹¶ä¸”ç‰¹åˆ«æ„Ÿè°¢ \pkg{biblatex-gb7714-2015} å®åŒ…\cite{hu2024bib}åŠå…¶ä½œè€…èƒ¡æŒ¯éœ‡ï¼Œ
%   æœ¬äººåœ¨ä¹‹å‰çš„æ–‡æ¡£ç±»è®¾è®¡ä¸­å¾—åˆ°äº†å…¶å¾ˆå¤šçƒ­æƒ…çš„å¸®åŠ©ï¼Œ
%   æ”¶èŽ·çš„ç»éªŒä¹Ÿä¸ºæœ¬æ–‡æ¡£ç±»çš„è®¾è®¡å¥&nbsp;å®šäº†åŸºç¡€ã€‚
%
%   æ­¤å¤–æœ¬äººå¼€å‘çš„å®åŒ… \pkg{useclass}\cite{huang2024useclass}
%   ä¹Ÿè®©æœ¬æ–‡æ¡£ç±»æ‰‹å†Œçš„æ–‡æ¡£ç±»â€œè‡ªä¸¾â€å®žçŽ°å¯èƒ½ã€‚
% \end{acknowledgements}
%
% \printbibliography
%
% \end{documentation}
%
% \begin{implementation}
%
% \appendix
% \newgeometry{
%   marginpar = 2.8 cm,
% }
%
% \chapter{\clsname{} ä»£ç&nbsp;å®žçŽ°}
% æœ¬æ–‡æ¡£ç±»ä½¿ç”¨ \LaTeX3 è¯­æ³•ç¼–å†™ï¼Œä¾èµ– \pkg{expl3} çŽ¯å¢ƒã€‚
%
%    \begin{macrocode}
%&lt;@@=hust&gt;
%&lt;*class&gt;
%    \end{macrocode}
%
% \section{æ–‡æ¡£ç±»é¢„å¤„ç†}
%
% æœ¬æ–‡æ¡£ç±»éšå¼ä¾èµ–å·²æ•´åˆè¿› \LaTeX--\pkg{base} çš„ \pkg{ltkeys} (åŽŸ \pkg{l3keys2e}) å’Œ \pkg{lttemplates}ï¼ˆåŽŸ \pkg{xtemplate}ï¼‰ã€‚
%
%    \begin{macrocode}
 \RequirePackage { }
%    \end{macrocode}
%
% \subsection{å˜é‡å£°æ˜Ž}
%
% \begin{variable}{
%   \l_@@_tmpa_box,
%   \l_@@_tmpa_clist,
%   \l_@@_tmpa_dim,
%   \l_@@_tmpa_skip,
%   \l_@@_tmpa_tl, \l_@@_tmpb_tl,
% }
% ä¸´æ—¶å˜é‡ã€‚
%    \begin{macrocode}
\box_new:N \l_@@_tmpa_box
\clist_new:N \l_@@_tmpa_clist
\dim_new:N \l_@@_tmpa_dim
\skip_new:N \l_@@_tmpa_skip
\tl_new:N \l_@@_tmpa_tl
\tl_new:N \l_@@_tmpb_tl
%    \end{macrocode}
% \end{variable}
%
% \begin{variable}{\g_@@_degree_type_tl}
% è®ºæ–‡ç±»åž‹ã€‚
%    \begin{macrocode}
\tl_new:N \g_@@_degree_type_tl
%    \end{macrocode}
% \end{variable}
%
% \begin{variable}{\g_@@_to_ctex_class_clist, \g_@@_to_hyperref_clist}
% åˆ†åˆ«ä¿å­˜ç”± \clsname{} ä¼&nbsp;å…¥ \cls{ctexbook} æ–‡æ¡£ç±»å’Œ \pkg{hyperref} å®åŒ…çš„é€‰é¡¹åˆ—è¡¨ã€‚
%    \begin{macrocode}
\clist_new:N \g_@@_to_ctex_class_clist
\clist_new:N \g_@@_to_hyperref_clist
%    \end{macrocode}
% \end{variable}
%
% \begin{variable}{\g_@@_draft_bool}
% è‰ç¨¿æ¨¡å¼ã€‚
%    \begin{macrocode}
\bool_new:N \g_@@_draft_bool
%    \end{macrocode}
% \end{variable}
%
% \begin{variable}{\g_@@_anonymous_bool}
% ç›²å®¡æ¨¡å¼ã€‚
%    \begin{macrocode}
\bool_new:N \g_@@_anonymous_bool
%    \end{macrocode}
% \end{variable}
%
% \begin{variable}{\g_@@_anonymous_clist}
% ç›²å®¡æ¨¡å¼éœ€è¦éšè—çš„å†…å®¹ã€‚
%    \begin{macrocode}
\clist_new:N \g_@@_anonymous_clist
%    \end{macrocode}
% \end{variable}
%
% \begin{variable}{
%   \g_@@_font_set_tl,
%   \g_@@_font_latin_tl,
%   \g_@@_font_cjk_tl,
%   \g_@@_font_math_tl}
% å­˜å‚¨æ‰€ä½¿ç”¨å­—ä½“åç§°çš„å…¨å±€å˜é‡ã€‚
%    \begin{macrocode}
\tl_new:N \g_@@_font_set_tl
\tl_new:N \g_@@_font_latin_tl
\tl_new:N \g_@@_font_cjk_tl
\tl_new:N \g_@@_font_math_tl
%    \end{macrocode}
% \end{variable}
%
% \begin{variable}{\g_@@_font_dir_tl}
% å­˜å‚¨å­—ä½“è·¯å¾„çš„å…¨å±€å˜é‡ã€‚
%    \begin{macrocode}
\tl_new:N \g_@@_font_dir_tl
%    \end{macrocode}
% \end{variable}
%
% \begin{variable}{\g_@@_font_dir_bool}
% æ˜¯å¦ä½¿ç”¨ç‹¬ç«‹çš„å­—ä½“æ–‡ä»¶ã€‚
%    \begin{macrocode}
\bool_new:N \g_@@_font_dir_bool
%    \end{macrocode}
% \end{variable}
%
% \begin{variable}{\g_@@_config_tl}
% ä¿å­˜é…ç½®æ–‡ä»¶åç§°ã€‚é»˜è®¤ä¸ºç©ºã€‚
%    \begin{macrocode}
\tl_new:N \g_@@_config_tl
%    \end{macrocode}
% \end{variable}
%
% \subsection{å†…éƒ¨å‡½æ•°}
%
%
% \subsubsection{è¾…åŠ©å‡½æ•°}
% \begin{macro}{\@@_patch_cmd:Nnn, \@@_appto_cmd:Nn}
% è¡¥ä¸å·¥å…·ï¼Œæ¥è‡ª \pkg{ctexpatch} å®åŒ…ã€‚
%    \begin{macrocode}
\cs_new_protected:Npn \@@_patch_cmd:Nnn #1#2#3
  {
    \ctex_patch_cmd_once:NnnnTF #1 { } {#2} {#3}
      { } { \ctex_patch_failure:N #1 }
  }
\cs_new_protected:Npn \@@_appto_cmd:Nn #1#2
  {
    \ctex_appto_cmd:NnnTF #1 { } {#2}
      { } { \ctex_patch_failure:N #1 }
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_define_fn_style:nn,
%   \@@_define_punct:nn,
%   \@@_define_name:nn,
%   \@@_define_name:nnn}
% ç”¨æ¥å®šä¹‰è„šæ³¨æ&nbsp;·å¼ã€æ&nbsp;‡ç‚¹ã€é»˜è®¤åç§°çš„è¾…åŠ©å‡½æ•°ã€‚
%    \begin{macrocode}
\cs_new_protected:Npn \@@_define_fn_style:nn #1#2
  { \tl_const:cn { c_@@_fn_style_ #1 _tl } {#2} }
\cs_new_protected:Npn \@@_define_punct:nn #1#2
  { \tl_const:cn { c_@@_ #1 _tl } {#2} }
\cs_new_protected:Npn \@@_define_name:nn #1#2
  { \tl_const:cn { c_@@_name_ #1 _tl } {#2} }
\cs_new_protected:Npn \@@_define_name:nnn #1#2#3
  {
    \tl_const:cn { c_@@_name_ #1 _en_tl } {#2}
    \tl_const:cn { c_@@_name_ #1 _zh_tl } {#3}
  }
%    \end{macrocode}
% \end{macro}
%
%
% \begin{macro}{\@@_msg_new:nn,
%   \@@_error:n, \@@_error:nn, \@@_error:nx, \@@_error:nnn, \@@_error:nnnn,
%   \@@_warning:n, \@@_warning:nn, \@@_warning:nxx,
%   \@@_info:nx
%}
% å„ç§ä¿¡æ¯å‡½æ•°çš„ç¼©ç•¥å½¢å¼ã€‚
%    \begin{macrocode}
\cs_new:Npn \@@_msg_new:nn { \msg_new:nnn { hustthesis } }
\cs_new:Npn \@@_error:n { \msg_error:nn { hustthesis } }
\cs_new:Npn \@@_error:nn { \msg_error:nnn { hustthesis } }
\cs_new:Npn \@@_error:nx { \msg_error:nnx { hustthesis } }
\cs_new:Npn \@@_error:nnn { \msg_error:nnnn { hustthesis } }
\cs_new:Npn \@@_error:nnnn { \msg_error:nnnnn { hustthesis } }
\cs_new:Npn \@@_warning:n { \msg_warning:nn { hustthesis } }
\cs_new:Npn \@@_warning:nn { \msg_warning:nnn { hustthesis } }
\cs_new:Npn \@@_warning:nxx { \msg_warning:nnxx { hustthesis } }
\cs_new:Npn \@@_info:nx { \msg_info:nnx { hustthesis } }
%    \end{macrocode}
% \end{macro}
%
% \subsubsection{\LaTeXe{} å°è£…}
%
% \begin{macro}[deprecated]{\@@_vspace:N, \@@_vspace:n, \@@_vspace:c}
% ç±»ä¼¼ \LaTeXe{} ä¸­çš„ \tn{vspace*}ã€‚
%    \begin{macrocode}
\cs_new_protected:Npn \@@_vspace:N #1
  {
    \dim_set_eq:NN \l_@@_tmpa_dim \tex_prevdepth:D
    \tex_hrule:D height \c_zero_dim
    \nobreak
    \skip_vertical:N #1
    \skip_vertical:N \c_zero_skip
    \dim_set_eq:NN \tex_prevdepth:D \l_@@_tmpa_dim
  }
\cs_new_protected:Npn \@@_vspace:n #1
  {
    \skip_set:Nn \l_@@_tmpa_skip {#1}
    \@@_vspace:N \l_@@_tmpa_skip
  }
\cs_generate_variant:Nn \@@_vspace:N { c }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}[deprecated]{\@@_hrule:nn}
% ä¸æ”¹å˜ä½ç½®çš„ \tn{hrule}ã€‚
% \begin{arguments}
%    \item çº¿æ®µç²—ç»†ï¼ˆé«˜åº¦ï¼‰
%    \item çº¿æ®µé•¿åº¦ï¼ˆå®½åº¦ï¼‰
% \end{arguments}
%    \begin{macrocode}
\cs_new_protected:Npn \@@_hrule:nn #1#2
  {
    \rule [ -0.5 ex ] { #2 } { #1 }
    \skip_horizontal:n { -#2 }
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_ul_to_wd:nnn}
  % \begin{arguments}
  %    \item ä¸‹åˆ’çº¿ç²—ç»†
  %    \item ä¸‹åˆ’çº¿é•¿åº¦
  %    \item å†…å®¹
  % \end{arguments}
%    \begin{macrocode}
\dim_new:N \l_@@_ul_dim
\cs_new_protected:Npn \@@_ul_to_wd:nnn #1#2#3
  {
    \hbox_overlap_right:n { \rule [ - 0.5 ex ] { #2 } { #1 } }
    \hbox_to_wd:nn { #2 } { \tex_hfil:D #3 \tex_hfil:D }
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_line_spread:N, \@@_line_spread:n}
% è®¾ç½®è¡Œè·ã€‚
% \begin{arguments}
%   \item è¡Œè·å€æ•°ï¼Œ |fp| å˜é‡
% \end{arguments}
%    \begin{macrocode}
\cs_new:Npn \@@_line_spread:N #1
  {
    \tl_set:Nn \baselinestretch { \fp_use:N #1 }
    \selectfont
  }
\cs_new:Npn \@@_line_spread:n #1
  {
    \tl_set:Nn \baselinestretch { #1 }
    \selectfont
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}[deprecated]{\@@_arabic:n}
% ç­‰ä»·äºŽ \LaTeXe{} ä¸­çš„ \tn{arabic}ã€‚
%    \begin{macrocode}
\cs_new:Npn \@@_arabic:n #1
  { \int_to_arabic:v { c@ #1 } }
%    \end{macrocode}
% \end{macro}
%
% \subsection{é€‰é¡¹å¤„ç†}
%
% å®šä¹‰ | hust / option | é”®å€¼ç±»ï¼Œè¯¥é”®å€¼ç±»ä»…å¯åœ¨æ–‡æ¡£ç±»é€‰é¡¹ä¸­ä½¿ç”¨ã€‚
%    \begin{macrocode}
\keys_define:nn { hust / option }
  {
%    \end{macrocode}
%
% \begin{macro}[module=option/]{type}
% è®ºæ–‡ç±»åž‹ã€‚ç›®å‰åˆ†ä¸ºç¡•å£«å­¦ä½è®ºæ–‡~\opt{master} å’Œåšå£«å­¦ä½è®ºæ–‡~\opt{doctor}ï¼Œé»˜è®¤ä¸ºåšå£«å­¦ä½è®ºæ–‡ã€‚
%    \begin{macrocode}
    type .choices:nn =
      { master, doctor }
      { \tl_gset_eq:NN \g_@@_degree_type_tl \l_keys_choice_tl },
    type .value_required:n = true,
    type .initial:n = { doctor },
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}[module=option/]{draft}
% æ˜¯å¦å¯ç”¨è‰ç¨¿æ¨¡å¼ã€‚é»˜è®¤ä¸º \opt{false}ã€‚
%    \begin{macrocode}
    draft .choice:,
    draft / true .code:n =
      {
        \bool_gset_true:N \g_@@_draft_bool
        \clist_gput_right:Nn \g_@@_to_ctex_class_clist { draft }
      },
    draft / false .code:n =
      {
        \bool_gset_false:N \g_@@_draft_bool
      },
    draft .default:n = { true },
    draft .initial:n = { false },
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}[module=option/]{anonymous}
% \changes{v2.0.0}{2025-02-18}{æ”¯æŒç›²å®¡æ¨¡å¼}
% æ˜¯å¦å¯ç”¨ç›²å®¡æ¨¡å¼ã€‚é»˜è®¤ä¸º \opt{false}ï¼Œå³æ˜¾ç¤ºä½œè€…ä¿¡æ¯ã€‚\key[option]{anonymous}
%    \begin{macrocode}
    anonymous .choice:,
    anonymous / true .code:n =
      {
        \bool_gset_true:N \g_@@_anonymous_bool
      },
    anonymous / false .code:n =
      {
        \bool_gset_false:N \g_@@_anonymous_bool
      },
    anonymous .default:n = { true },
    anonymous .initial:n = { false },
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}[module=option/]{anonymous-list}
% åœ¨å¼€å¯ç›²å®¡æ¨¡å¼ä¸‹éœ€è¦éšè—çš„å†…å®¹ã€‚å…¶ä¸­è¿žæŽ¥ç¬¦ï¼ˆ|-|ï¼‰éœ€æ›¿æ¢ä¸ºä¸‹åˆ’çº¿ï¼ˆ|_|ï¼‰ï¼Œæ˜Ÿå·ï¼ˆ|*|ï¼‰éœ€æ›¿æ¢ä¸º|_en|ã€‚
%    \begin{macrocode}
    anonymous-list .clist_gset:N = \g_@@_anonymous_clist,
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}[module=option/]{latin-font, cjk-font}
% ä¸­è‹±æ–‡å­—ä½“é€‰é¡¹ã€‚\opt{fandol} å’Œ \opt{gyre} æ˜¯ç­‰ä»·çš„ã€‚
%    \begin{macrocode}
    latin-font .choices:nn =
      { fandol, gyre, mac, macoffice, win, none, }
      { \tl_gset:Nn \g_@@_font_latin_tl {#1} },
    cjk-font .choices:nn =
      { fandol, founder, mac, macoffice, noto, source, win, none, }
      { \tl_gset:Nn \g_@@_font_cjk_tl {#1} },
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}[module=option/]{fontset}
% ä¸­è‹±æ–‡å­—ä½“é€‰é¡¹ã€‚\opt{fontset} è¿™ä¸ªåç§°å’Œ \pkg{ctex} ä¸­çš„æ˜¯ä¸€è‡´çš„ã€‚
%    \begin{macrocode}
    fontset .choices:nn =
      { fandol, mac, macoffice, win, none, }
      { \keys_set:nn { hust / option } { latin-font = #1, cjk-font = #1 } },
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}[module=option/]{math-font}
% æ•°å­¦å­—ä½“é€‰é¡¹ã€‚
% ç”± \pkg{unicode-math} æŒ‡å®š \XeTeX å’Œ \LuaTeX ä¸‹ä½¿ç”¨çš„æ•°å­¦å­—ä½“ã€‚
%    \begin{macrocode}
    math-font .choices:nn =
      {
        asana, cambria, fira, garamond, lm, libertinus, newcm,
        stix, bonum, dejavu, pagella, schola, termes, xits, none,
      }
      { \tl_gset_eq:NN \g_@@_font_math_tl \l_keys_choice_tl },
    math-font .initial:n = xits,
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}[module=option/]{font-dir}
% ç‹¬ç«‹å­—ä½“æ–‡ä»¶çš„è·¯å¾„ã€‚
%    \begin{macrocode}
    font-dir .code:n =
      {
        \bool_gset_true:N \g_@@_font_dir_bool
        \tl_gset_eq:NN \g_@@_font_dir_tl \l_keys_value_tl
      },
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}[module=option/]{config}
% è‡ªå®šä¹‰é…ç½®æ–‡ä»¶åã€‚
%    \begin{macrocode}
    config .tl_gset:N = \g_@@_config_tl,
%    \end{macrocode}
% \end{macro}
%
% å°†æœªçŸ¥é€‰é¡¹ä¼&nbsp;ç»™ \cls{ctexbook} æ–‡æ¡£ç±»ã€‚
%    \begin{macrocode}
    unknown .code:n =
      { \clist_gput_right:No \g_@@_to_ctex_class_clist { \CurrentOption } }
  }
%    \end{macrocode}
%
% \begin{macro}[module=option/, int]{option/}
% å°†æ–‡æ¡£ç±»é€‰é¡¹ä¼&nbsp;ç»™ |hust / option|ã€‚
%    \begin{macrocode}
\ProcessKeyOptions [ hust / option ]
%    \end{macrocode}
% \end{macro}
%
% \subsection{å¸¸é‡è½½å…¥}
%
% è½½å…¥å¸¸é‡å®šä¹‰æ–‡ä»¶ã€‚
%    \begin{macrocode}
\tl_if_empty:NTF \g_@@_config_tl
  {
    \tl_if_eq:NnT \g_@@_degree_type_tl { master }
      { \file_input:n { hustthesis-m.def } }
    \tl_if_eq:NnT \g_@@_degree_type_tl { doctor }
      { \file_input:n { hustthesis-d.def } }
  }
  {
    \@@_msg_new:nn { load-config-file }
      { You~ are~ loading~ config~ file~ "#1". }
    \@@_info:n { load-config-file }
    \file_input:V { \g_@@_config_tl }
  }
%    \end{macrocode}
%
% \subsection{å®åŒ…è½½å…¥}
%
% \sout{å¯¹ä¸æ”¯æŒç²—ä½“æ–œä½“çš„å­—ä½“è¿›è¡Œå…¼å®¹å¤„ç†ï¼Œä»…é™äºŽ \XeTeX{} å¼•æ“Žã€‚}\\
% \sout{å‚è€ƒè‡ª \url{https://ask.latexstudio.net/ask/question/17464.html}ã€‚}
%    \begin{macrocode}
%\sys_if_engine_xetex:T
%  {
%    \PassOptionsToPackage { AutoFakeBold=4.0 } { xeCJK }
%    \AddToHook { package / ctex / before }
%      {
%        \AddToHook { package / xeCJK / after }
%          {
%            \keys_define:nn { xeCJK / features }
%              {
%                BoldFont .code:n = ,
%                ItalicFont .code:n =,
%              }
%          }
%      }
%    \AddToHook { package / ctex / after }
%      {
%        \keys_define:nn { xeCJK / features }
%          {
%            BoldFont .tl_set:N = \l__xeCJK_font_name_bf_tl ,
%            ItalicFont .tl_set:N = \l__xeCJK_font_name_it_tl,
%          }
%      }
%  }
%    \end{macrocode}
%
% å°†é€‰é¡¹ä¼&nbsp;å…¥ \cls{ctexbook} æ–‡æ¡£ç±»ã€‚
%    \begin{macrocode}
\PassOptionsToClass
  {
    a4paper,
    UTF8,
    scheme = chinese,
    fontset = none,
    oneside,
    heading = true,
    zihao = -4,
    linespread = \c_@@_line_spread_fp,
    \g_@@_to_ctex_class_clist,
  }
  { ctexbook }
\LoadClass { ctexbook }
%    \end{macrocode}
%
% å…¶ä¸­ \pkg{utfsym} å®åŒ…ä¸ä¾èµ–å¤–éƒ¨å­—ä½“ï¼Œä½¿ç”¨ \TikZ{} å®åŒ…ç»˜åˆ¶ |U+2610|:~â˜ï¼Œ|U+2611|:~â˜‘ï¼Œ|U+1F5F9|:~\usym{1F5F9} ç­‰ç¬¦å·ã€‚
%    \begin{macrocode}
\RequirePackage
  {
    amsmath,
    geometry,
    fancyhdr,
    titletoc,
    graphicx,
    multirow,
    longtable,
    caption,
    utfsym,
  }
%    \end{macrocode}
%
% è½½å…¥åŸºäºŽ \clsname{} æ&nbsp;·å¼çš„ \pkg{biblatex} å®åŒ…ã€‚
%    \begin{macrocode}
\RequirePackage[style=hustthesis]{biblatex}
%    \end{macrocode}
%
%
% \section{å…¨å±€æ&nbsp;·å¼}
%
% éšè—ç›²å®¡æ¨¡å¼ä¸‹éœ€è¦éšè—çš„å†…å®¹ã€‚
%    \begin{macrocode}
\clist_map_inline:Nn \g_@@_anonymous_clist
  {
    \tl_gset_eq:cN { g_@@_name_ #1 _tl } \c_empty_tl
  }
%    \end{macrocode}
%
% \subsection{é¡µé¢å¸ƒå±€}
% åˆ©ç”¨ \pkg{geometry} å®åŒ…è®¾ç½®çº¸å¼&nbsp;å¤§å°ã€é¡µé¢è¾¹è·ä»¥åŠé¡µçœ‰é«˜åº¦ã€‚
%    \begin{macrocode}
\geometry
  {
    top = 4.5 cm,
    bottom = 2.8 cm,
    left = 2.8 cm,
    right = 2.8 cm,
    headheight = 30 pt,
  }
%    \end{macrocode}
%
% \subsection{å­—ä½“è®¾ç½®}
%
% ^^A æœ¬å°èŠ‚åˆç‰ˆå®žçŽ°ä¸»è¦æ¥è‡ª \pkg{njuthesis} æ–‡æ¡£ç±»ã€‚
%
% \pkg{fontspec} åŒ…å«äºŽ \pkg{ctex} å®é›†ï¼Œæ—&nbsp;éœ€å¦è¡Œè½½å…¥ã€‚
%
% \subsubsection{æ“ä½œç³»ç»Ÿæ£€æµ‹}
%
% \begin{variable}{\c_@@_path_macoffice_tl}
% mac Office å­—ä½“è·¯å¾„ã€‚
%    \begin{macrocode}
\tl_const:Nn \c_@@_path_macoffice_tl
  { /Applications/Microsoft~ Word.app/Contents/Resources/DFonts/ }
%    \end{macrocode}
% \end{variable}
%
% æ“ä½œç³»ç»Ÿæ£€æµ‹ã€‚ç›¸è¾ƒäºŽ \pkg{ctex} æä¾›çš„ \cs{ctex_detect_platform:}ï¼Œ
% é¢å¤–å¢žåŠ&nbsp;äº†å¯¹ macOS ä¸Š MS Office çš„æ£€æµ‹ã€‚
%    \begin{macrocode}
\sys_if_platform_windows:TF
  { \tl_gset:Nn \g_@@_font_set_tl { win } }
  {
    \ctex_if_platform_macos:TF
      {
        \file_if_exist:nTF { \c_@@_path_macoffice_tl times.ttf }
          { \tl_gset:Nn \g_@@_font_set_tl { macoffice } }
          { \tl_gset:Nn \g_@@_font_set_tl { mac } }
      }
      { \tl_gset:Nn \g_@@_font_set_tl { fandol } }
  }
%    \end{macrocode}
% åˆ¤æ–­ç”¨æˆ·æ˜¯å¦è‡ªå®šä¹‰äº†ä¸­è‹±æ–‡å­—ä½“ã€‚å¦‚æžœå…¶ä¸­ä»»æ„ä¸€ç§æœªè¢«å®šä¹‰ï¼Œ
% åˆ™ä½¿ç”¨ç³»ç»Ÿé¢„è£…å­—ä½“è¦†ç›–å­—ä½“é€‰é¡¹ã€‚
% Windows æˆ– macOS å¤–çš„ç³»ç»Ÿè¢«åˆ¤æ–­ä¸º Linuxï¼Œä¸€å¾‹ä½¿ç”¨è‡ªç”±å­—ä½“ã€‚
%    \begin{macrocode}
\tl_if_empty:NT \g_@@_font_latin_tl
  { \tl_gset_eq:NN \g_@@_font_latin_tl \g_@@_font_set_tl }
\tl_if_empty:NT \g_@@_font_cjk_tl
  { \tl_gset_eq:NN \g_@@_font_cjk_tl \g_@@_font_set_tl }
%    \end{macrocode}
%
%
% \subsubsection{å®šä¹‰è‹±æ–‡å­—åº“}
%
% æŽ¥ä¸‹æ¥é€ä¸ªå®šä¹‰æ‰€éœ€è¦ä½¿ç”¨çš„å­—åº“ã€‚
%
% \begin{macro}{
%   \@@_loadfont_latin:n,
%   \@@_loadfont_latin_win:,
%   \@@_loadfont_latin_mac:,
% }
% Windows ä¸Ž macOS è¥¿æ–‡å­—ä½“çš„åŒºåˆ«ä¸»è¦åœ¨äºŽé»˜è®¤ç­‰å®½å­—ä½“ã€‚
%    \begin{macrocode}
\cs_new:Npn \@@_loadfont_latin:n #1
  {
    \__fontspec_main_setmainfont:nn { } { Times~New~Roman }
    \__fontspec_main_setsansfont:nn { } { Arial }
    \__fontspec_main_setmonofont:nn { Scale = MatchLowercase } {#1}
  }
\cs_new_protected:Npn \@@_loadfont_latin_win:
  { \@@_loadfont_latin:n { Courier~New } }
\cs_new_protected:Npn \@@_loadfont_latin_mac:
  {
    \@@_loadfont_latin:n { Menlo }
%    \end{macrocode}
% æ£€æµ‹ Times New Roman æ˜¯å¦å…·æœ‰å°åž‹å¤§å†™å­—æ¯ï¼ˆsmall capsï¼‰å­—åž‹ã€‚
% è¿™æ˜¯ macOS é¢„è£…çš„å­—ä½“ç‰ˆæœ¬è¾ƒæ—§å¯¼è‡´çš„ã€‚
%    \begin{macrocode}
    \fontspec_if_small_caps:F
      {
        \@@_warning:n { no-small-caps }
        \__fontspec_main_setmainfont:nn
          { \c_@@_name_gyrefeature_clist } { texgyretermes }
      }
  }
\@@_msg_new:nn { no-small-caps }
  {
    I~ am~ using~ TeX~ Gyre~ Termes~ as~ default~ Roman~ font.\\
    This~ is~ because~ the~ "Times~ New~ Roman"~ font~ in~ your~
    system~ does~ not~ embed~ glyphs~ for~ small~ capitals.~
    You~ can~ ignore~ this~ warning~ if~ you~ do~ not~ need~
    \string\textsc.~ For~ more~ information,~
    please~ refer~ to~ section~ 3.2.6~ of~ the~ documentation.
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_loadfont_latin_macoffice:}
% mac Office è¥¿æ–‡å­—ä½“ã€‚
%    \begin{macrocode}
\cs_new_protected:Npn \@@_loadfont_latin_macoffice:
  {
    \__fontspec_main_setmainfont:nn
      { \c_@@_name_macofficefeature_clist } { times }
    \__fontspec_main_setsansfont:nn
      { \c_@@_name_macofficefeature_clist } { arial }
    \__fontspec_main_setmonofont:nn
      { Scale = MatchLowercase } { Menlo }
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{variable}{\c_@@_name_macofficefeature_clist}
% ç”¨äºŽ \pkg{fontspec} çš„ mac Office å­—ä½“ç‰¹æ€§åˆ—è¡¨ã€‚
%    \begin{macrocode}
\clist_const:Nn \c_@@_name_macofficefeature_clist
  {
    Path = \c_@@_path_macoffice_tl,
    Extension = .ttf,
    UprightFont = *,
    BoldFont = *bd,
    ItalicFont = *i,
    BoldItalicFont = *bi,
  }
%    \end{macrocode}
% \end{variable}
%
% \begin{macro}{\@@_loadfont_latin_gyre:}
% å¼€æºçš„ \TeX Gyre è¥¿æ–‡å­—ä½“ã€‚
%    \begin{macrocode}
\cs_new_protected:Npn \@@_loadfont_latin_gyre:
  {
    \__fontspec_main_setmainfont:nn
      { \c_@@_name_gyrefeature_clist } { texgyretermes }
    \__fontspec_main_setsansfont:nn
      { \c_@@_name_gyrefeature_clist } { texgyreheros }
    \__fontspec_main_setmonofont:nn
      {
        \c_@@_name_gyrefeature_clist,
        Scale = MatchLowercase,
        Ligatures = CommonOff,
      }
      { texgyrecursor }
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_loadfont_latin_fandol:}
% ä¸ºå…¼å®¹ \pkg{ctex} åšå‡ºçš„åç§°æ”¹å˜ã€‚
%    \begin{macrocode}
\cs_new_eq:NN \@@_loadfont_latin_fandol: \@@_loadfont_latin_gyre:
%    \end{macrocode}
% \end{macro}
%
% \begin{variable}{\c_@@_name_gyrefeature_clist}
% ç”¨äºŽ \pkg{fontspec} çš„ \TeX Gyre å­—ä½“ç‰¹æ€§åˆ—è¡¨ã€‚
%    \begin{macrocode}
\clist_const:Nn \c_@@_name_gyrefeature_clist
  {
    Extension = .otf,
    UprightFont = *-regular,
    BoldFont = *-bold,
    ItalicFont = *-italic,
    BoldItalicFont = *-bolditalic,
  }
%    \end{macrocode}
% \end{variable}
%
%
% \subsubsection{å®šä¹‰ä¸­æ–‡å­—åº“}
%
% \begin{macro}{\@@_hide_no_script_msg:}
% éšè— |does not contain script "CJK"| è­¦å‘Šã€‚
%    \begin{macrocode}
\cs_new:Npn \@@_hide_no_script_msg:
  { \msg_redirect_name:nnn { fontspec } { no-script } { info } }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_loadfont_cjk_win:N, \@@_loadfont_cjk_win:}
% Windows ä¸­æ–‡å­—ä½“ã€‚
%    \begin{macrocode}
\cs_new:Npn \@@_loadfont_cjk_win:N #1
  {
    \setCJKmainfont { SimSun } [ #1, ItalicFont = KaiTi ]
    \setCJKsansfont { SimHei } [#1]
    \setCJKmonofont { FangSong } [#1]
    \setCJKfamilyfont { zhsong } { SimSun } [#1]
    \setCJKfamilyfont { zhhei } { SimHei } [#1]
    \setCJKfamilyfont { zhfs } { FangSong } [#1]
    \setCJKfamilyfont { zhkai } { KaiTi } [#1]
    \@@_define_stzhongs:nn { STZhongsong } {#1}
  }
\cs_new:Npn \@@_loadfont_cjk_win:
  { \@@_loadfont_cjk_win:N \c_@@_name_fakebold_tl }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_loadfont_cjk_mac:}
% macOS å­—ä½“ã€‚
% ^^A TODO: ä¿®å¤ macOS å­—ä½“æ”¯æŒï¼Œå®žçŽ°å¼€ç®±å³ç”¨ã€‚
%    \begin{macrocode}
\cs_new_protected:Npn \@@_loadfont_cjk_mac:
  {
    \@@_hide_no_script_msg:
    \setCJKmainfont { Songti~SC~Light }
      [
        BoldFont = Songti~SC~Bold,
        ItalicFont = Kaiti~SC,
        BoldItalicFont = Kaiti~SC~Bold,
      ]
    \setCJKsansfont { Heiti~SC~Light } [ BoldFont = Heiti~SC~Medium ]
    \setCJKmonofont { STFangsong }
    \setCJKfamilyfont { zhsong } { Songti~SC~Light } [ BoldFont = Songti~SC~Bold ]
    \setCJKfamilyfont { zhhei } { Heiti~SC~Light } [ BoldFont = Heiti~SC~Medium ]
    \setCJKfamilyfont { zhfs } { STFangsong }
    \setCJKfamilyfont { zhkai } { Kaiti~SC } [ BoldFont = Kaiti~SC~Bold ]
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_loadfont_cjk_macoffice:n, \@@_loadfont_cjk_macoffice:}
% mac Office ä¸­æ–‡å­—ä½“ã€‚
%    \begin{macrocode}
\cs_new:Npn \@@_loadfont_cjk_macoffice:n #1
  {
    \setCJKmainfont { Simsun.ttc } [ ItalicFont = Kaiti.ttf, #1 ]
    \setCJKsansfont { SimHei.ttf } [#1]
    \setCJKmonofont { Fangsong.ttf } [#1]
    \setCJKfamilyfont { zhsong } { Simsun.ttc } [#1]
    \setCJKfamilyfont { zhhei } { SimHei.ttf } [#1]
    \setCJKfamilyfont { zhfs } { Fangsong.ttf } [#1]
    \setCJKfamilyfont { zhkai } { Kaiti.ttf } [#1]
    \@@_define_stzhongs:nn { \c__hust_path_macoffice_tl STZHONGS.ttf } {#1}
  }
\cs_new:Npn \@@_loadfont_cjk_macoffice:
  {
    \@@_loadfont_cjk_macoffice:n
      { Path = \c_@@_path_macoffice_tl, \c_@@_name_fakebold_tl }
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_loadfont_cjk_fandol:}
% Fandol å­—ä½“ã€‚
%    \begin{macrocode}
\cs_new_protected:Npn \@@_loadfont_cjk_fandol:
  {
    \@@_hide_no_script_msg:
    \setCJKmainfont { FandolSong-Regular }
      [
        Extension = .otf,
        BoldFont = FandolSong-Bold,
        ItalicFont = FandolKai-Regular,
      ]
    \setCJKsansfont { FandolHei-Regular }
      [
        Extension = .otf,
        BoldFont = FandolHei-Bold,
      ]
    \setCJKmonofont { FandolFang-Regular }
      [ Extension = .otf ]
    \setCJKfamilyfont { zhsong } { FandolSong-Regular }
      [
        Extension = .otf,
        BoldFont  = FandolSong-Bold
      ]
    \setCJKfamilyfont { zhhei } { FandolHei-Regular }
      [
        Extension = .otf,
        BoldFont = FandolHei-Bold,
      ]
    \setCJKfamilyfont { zhfs } { FandolFang-Regular }
      [ Extension = .otf ]
    \setCJKfamilyfont { zhkai } { FandolKai-Regular }
      [ Extension = .otf, \c_@@_name_fakebold_tl ]
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_loadfont_cjk_founder:}
% æ–¹æ­£å­—åº“ï¼ˆç®€ç¹æ‰©å±•ï¼‰
%    \begin{macrocode}
\cs_new_protected:Npn \@@_loadfont_cjk_founder:
  {
%    \end{macrocode}
% è°ƒæ•´æ–¹æ­£å­—ä½“æ‹¬å·ä½ç½®ã€‚
% \footnote{\XeTeX çš„è°ƒæ•´æ–¹æ³•æ¥è‡ª \url{https://www.zhihu.com/question/46241367/answer/101660183}ã€‚}
%    \begin{macrocode}
    \sys_if_engine_xetex:T
      { \xeCJKEditPunctStyle { quanjiao } { optimize-kerning = true } }
    \sys_if_engine_luatex:T
      { \defaultCJKfontfeatures { JFM = { zh_CN / { quanjiao, fzpr } } } }
    \setCJKmainfont { FZShuSong-Z01 }
      [ BoldFont = FZXiaoBiaoSong-B05, ItalicFont = FZKai-Z03 ]
    \setCJKsansfont { FZXiHeiI-Z08 } [ BoldFont = FZHei-B01 ]
    \setCJKmonofont { FZFangSong-Z02 }
    \setCJKfamilyfont { zhsong } { FZShuSong-Z01 }
      [ BoldFont = FZXiaoBiaoSong-B05 ]
    \setCJKfamilyfont { zhhei } { FZHei-B01 }
      [ \c_@@_name_fakebold_tl ]
    \setCJKfamilyfont { zhkai } { FZKai-Z03 }
      [ \c_@@_name_fakebold_tl ]
    \setCJKfamilyfont { zhfs } { FZFangSong-Z02 }
    \defaultCJKfontfeatures { }
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_loadfont_cjk_noto:}
% Noto æ€æºå­—ä½“ã€‚
%    \begin{macrocode}
\cs_new_protected:Npn \@@_loadfont_cjk_noto:
  {
    \setCJKmainfont [ \c_@@_name_notofeature_clist ]
      { NotoSerifCJKsc }
    \setCJKsansfont [ \c_@@_name_notofeature_clist ]
      { NotoSansCJKsc  }
    \setCJKmonofont { Noto~Sans~Mono~CJK~SC }
    \setCJKfamilyfont { zhsong } { Noto~Serif~CJK~SC }
    \setCJKfamilyfont { zhhei } { Noto~Sans~CJK~SC }
    \setCJKfamilyfont { zhfs } { FZFangSong-Z02 }
    \setCJKfamilyfont { zhkai } { FZKai-Z03 }
      [ \c_@@_name_fakebold_tl ]
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_loadfont_cjk_source:}
%    \begin{macrocode}
\cs_new_protected:Npn \@@_loadfont_cjk_source:
  {
    \setCJKmainfont [ \c_@@_name_notofeature_clist ]
      { SourceHanSerifSC }
    \setCJKsansfont [ \c_@@_name_notofeature_clist ]
      { SourceHanSansSC  }
    \setCJKmonofont { FZFangSong-Z02 }
    \setCJKfamilyfont { zhsong } { Source~Han~Serif~SC }
    \setCJKfamilyfont { zhhei } { Source~Han~Sans~SC }
    \setCJKfamilyfont { zhfs } { FZFangSong-Z02 }
    \setCJKfamilyfont { zhkai } { FZKai-Z03 }
      [ \c_@@_name_fakebold_tl ]
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{variable}{\c_@@_name_fakebold_tl}
%    \begin{macrocode}
\tl_const:Nn \c_@@_name_fakebold_tl { AutoFakeBold = 2.17 }
%    \end{macrocode}
% \end{variable}
%
% \begin{variable}{\c_@@_name_notofeature_clist}
% ç”¨äºŽ \pkg{fontspec} çš„æ€æºå­—ä½“ç‰¹æ€§åˆ—è¡¨ã€‚
%    \begin{macrocode}
\clist_const:Nn \c_@@_name_notofeature_clist
  {
    Extension = .otf,
    UprightFont = *-Regular,
    BoldFont = *-Bold,
    ItalicFont = *-Regular,
    BoldItalicFont = *-Bold,
    ItalicFeatures = FakeSlant,
    BoldItalicFeatures = FakeSlant,
  }
%    \end{macrocode}
% \end{variable}
%
% \begin{variable}{\l_@@_name_stzhongsopts_tl}
% åŽæ–‡ä¸­å®‹çš„å­—ä½“ç‰¹æ€§åˆ—è¡¨ï¼Œé»˜è®¤ä¸ºä»…ä½¿ç”¨ä¼ªç²—ä½“ã€‚
%    \begin{macrocode}
\tl_new:N \l_@@_name_stzhongsopts_tl
\tl_set_eq:NN \l_@@_name_stzhongsopts_tl \c_@@_name_fakebold_tl
%    \end{macrocode}
% \end{variable}
%
% \begin{macro}{\@@_define_stzhongs:nn}
% ä¸­æ–‡å°é¢é¢å¤–éœ€è¦çš„åŽæ–‡ä¸­å®‹ã€‚
%    \begin{macrocode}
\tl_new:N \l_@@_name_stzhongsfile_tl
\cs_new:Npn \@@_define_stzhongs:nn #1#2
  {
    \tl_set:Nn \l_@@_name_stzhongsfile_tl {#1}
    \tl_set:Nn \l_@@_name_stzhongsopts_tl {#2}
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_loadfont_stzhongs:n}
% \begin{macro}{\@@_loadfont_stzhongs:V, \@@_loadfont_stzhongs:, \@@_stzhongs:}
% ç&nbsp;”ç©¶ç”Ÿå°é¢é¢å¤–éœ€è¦çš„åŽæ–‡ä¸­å®‹ã€‚
%    \begin{macrocode}
\cs_new:Npn \@@_loadfont_stzhongs:
  {
    \@@_loadfont_stzhongs:V \l_@@_name_stzhongsfile_tl
  }
\cs_new_protected:Npn \@@_loadfont_stzhongs:n #1
  {
    \fontspec_font_if_exist:nTF { #1 }
      {
        \newCJKfontfamily \@@_stzhongs: { #1 }
          [ \l_@@_name_stzhongsopts_tl ]
      }
      {
        \bool_if:NTF \g_@@_font_dir_bool
          {
            \newCJKfontfamily \@@_stzhongs: { #1 }
              [ Path = \g_@@_font_dir_tl, \c_@@_name_fakebold_tl ]
          }
          {
            \cs_set_eq:NN \@@_stzhongs: \rmfamily
            \@@_warning:n { missing-stzhongs }
          }
      }
  }
\@@_msg_new:nn { missing-stzhongs }
  {
    "STZHONGS.TTF"~ is~ not~ found~ in~ your~ system.\\
    The~ font~ is~ normally~ distributed~ with~ MS~ Windows.~
    I~ have~ used~ songti~ for~ substitution.
  }
\cs_generate_variant:Nn \@@_loadfont_stzhongs:n { V }
%    \end{macrocode}
% \end{macro}
% \end{macro}
%
%
% \subsubsection{å®šä¹‰æ•°å­¦å­—åº“}
%
% \begin{macro}{\@@_define_math_font:nn}
% æ‰¹é‡å®šä¹‰æ•°å­¦å­—ä½“é…ç½®ã€‚
%    \begin{macrocode}
\cs_new:Npn \@@_define_math_font:nn #1#2
  {
    \cs_new:cpn { @@_loadfont_math_ #1 : }
      { \__um_setmathfont:nn { } {#2} }
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}
% {
%   \@@_loadfont_math_asana:,
%   \@@_loadfont_math_fira:,
%   \@@_loadfont_math_garamond:,
%   \@@_loadfont_math_lm:,
%   \@@_loadfont_math_libertinus:,
%   \@@_loadfont_math_stix:,
%   \@@_loadfont_math_bonum:,
%   \@@_loadfont_math_dejavu:,
%   \@@_loadfont_math_pagella:,
%   \@@_loadfont_math_schola:,
%   \@@_loadfont_math_termes:,
% }
% æ‰¹é‡å®šä¹‰è‹¥å¹²æ•°å­¦å­—ä½“çš„è½½å…¥å‘½ä»¤ã€‚
%    \begin{macrocode}
\clist_map_inline:nn
  {
    { asana } { Asana-Math.otf },
    { fira } { FiraMath-Regular.otf },
    { garamond } { Garamond-Math.otf },
    { lm } { latinmodern-math.otf },
    { libertinus } { LibertinusMath-Regular.otf },
    { stix } { STIXMath-Regular.otf },
    { bonum } { texgyrebonum-math.otf },
    { dejavu } { texgyredejavu-math.otf },
    { pagella } { texgyrepagella-math.otf },
    { schola } { texgyreschola-math.otf },
    { termes } { texgyretermes-math.otf },
  }
  { \@@_define_math_font:nn #1 }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_loadfont_math_cambria:}
% Cambria Math å­—ä½“é…ç½®ã€‚
%    \begin{macrocode}
\cs_new:Npn \@@_loadfont_math_cambria:
  {
    \bool_if:NTF \g_@@_font_dir_bool
      {
        \__um_setmathfont:nn
          { Path = \g_@@_font_dir_tl/, FontIndex = 1 }
          { cambria.ttc }
      }
      { \__um_setmathfont:nn { } { Cambria~Math } }
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_loadfont_math_xits:}
% XITS Math å­—ä½“ã€‚
%    \begin{macrocode}
\cs_new:Npn \@@_loadfont_math_xits:
  {
    \bool_if:NTF \g_@@_opt_math_int_bool
      { \tl_set:Nn \l_@@_tmpa_tl { 8 } }
      { \tl_clear:N \l_@@_tmpa_tl }
    \__um_setmathfont:nn
      {
        Extension = .otf,
        StylisticSet = \l_@@_tmpa_tl,
        BoldFont = XITSMath-Bold,
      }
      { XITSMath-Regular }
    \__um_setmathfont:nn
      {
        Extension = .otf,
        StylisticSet = 1,
        range = {cal, bfcal},
      }
      { XITSMath-Regular }
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_loadfont_math_newcm:}
% New Computer Modern Math å­—ä½“ã€‚
%    \begin{macrocode}
\cs_new:Npn \@@_loadfont_math_newcm:
  {
    \bool_if:NTF \g_@@_opt_math_int_bool
      { \tl_set:Nn \l_@@_tmpa_tl { 2 } }
      { \tl_clear:N \l_@@_tmpa_tl }
    \__um_setmathfont:nn
      {
        Extension = .otf,
        StylisticSet = \l_@@_tmpa_tl,
      }
      { NewCMMath-Book }
    \__um_setmathfont:nn
      {
        Extension = .otf,
        StylisticSet = 1,
        range = {scr,bfscr},
      }
      { NewCMMath-Book }
    \__fontspec_main_setmathrm:nn
      {
        Extension = .otf,
        UprightFont = *-Book,
        BoldFont = *-Bold,
        ItalicFont = *-BookItalic,
        BoldItalicFont = *-BoldItalic,
      }
      { NewCM10 }
    \__fontspec_main_setmathsf:nn
      {
        Extension = .otf,
        UprightFont = *-Book,
        BoldFont = *-Bold,
        ItalicFont = *-BookOblique,
        BoldItalicFont = *-BoldOblique,
      }
      { NewCMSans10 }
    \__fontspec_main_setmathtt:nn
      {
        Extension = .otf,
        UprightFont = *-Book,
        ItalicFont = *-BookItalic,
        BoldFont = *-Bold,
        BoldItalicFont = *-BoldOblique,
      }
      { NewCMMono10 }
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_loadfont_math_none:}
% ä¸è¿›è¡Œæ•°å­¦å­—ä½“é…ç½®ã€‚
%    \begin{macrocode}
\cs_set_eq:NN \@@_loadfont_math_none: \tex_relax:D
%    \end{macrocode}
% \end{macro}
%
%
% \subsubsection{è½½å…¥æŒ‡å®šå­—åº“}
%
% \begin{macro}{\@@_loadfont:}
% è½½å…¥å­—ä½“å‘½ä»¤ã€‚
%    \begin{macrocode}
\cs_new_protected:Npn \@@_loadfont:
  {
    \use:c { @@_loadfont_latin_ \g_@@_font_latin_tl : }
    \use:c { @@_loadfont_cjk_ \g_@@_font_cjk_tl : }
%    \end{macrocode}
% è‡ªè¡Œå®šä¹‰ \pkg{ctex} ä¸­çš„å››ç±»å­—ä½“å‘½ä»¤ã€‚
%    \begin{macrocode}
    \NewDocumentCommand \songti { } { \CJKfamily { zhsong } }
    \NewDocumentCommand \heiti { } { \CJKfamily { zhhei } }
    \NewDocumentCommand \fangsong { } { \CJKfamily { zhfs } }
    \NewDocumentCommand \kaishu { } { \CJKfamily { zhkai } }
  }
%    \end{macrocode}
% \end{macro}
%
% è½½å…¥è®¾ç½®çš„å­—ä½“ã€‚^^A ä¸ºäº†å¸æ”¶å¯¼è¨€åŒºçš„è®¾ç½®ï¼Œæ”¾åœ¨å…¶åŽè½½å…¥ã€‚
%    \begin{macrocode}
% \BeforeBeginEnvironment { document } { \@@_loadfont: }
\@@_loadfont:
%    \end{macrocode}
%
% å°†åŽæ–‡ä¸­å®‹æ”¾åœ¨æ–‡æ¡£ç±»æœ€åŽè½½å…¥ã€‚
%    \begin{macrocode}
\ctex_at_end_preamble:n { \@@_loadfont_stzhongs: }
%    \end{macrocode}
%
% \subsection{é¡µçœ‰é¡µè„š}
%
% æ¸…é™¤é»˜è®¤é¡µçœ‰é¡µè„šæ&nbsp;¼å¼ã€‚
%    \begin{macrocode}
\fancyhf {}
%    \end{macrocode}
%
% è®¾ç½®é¡µçœ‰é¡µè„šé¢œè‰²ã€‚
% \changes{v2.0.0}{2025-02-21}{ä½¿ç”¨ \pkg{l3color}ï¼Œä¸å†ä¾èµ– \pkg{xcolor}}
%    \begin{macrocode}
\color_set:nn { headfoot } { red }
% \providecolor { headfoot } { rgb } { 1, 0, 0 }
%    \end{macrocode}
%
% \begin{macro}{\@@_draw_hf_hline:n}
% ç»˜åˆ¶é¡µçœ‰é¡µè„šæ¨ªçº¿ã€‚
% \begin{arguments}
%   \item é¡µçœ‰é¡µè„šçº¿çš„é«˜åº¦ï¼ˆç²—ç»†ï¼‰
% \end{arguments}
%    \begin{macrocode}
\cs_new_protected:Npn \@@_draw_hf_hline:n #1
  {
    { \color_select:n { headfoot } \tex_hrule:D height #1 }
  }
%    \end{macrocode}
% \end{macro}
%
% \sout{è®¾ç½®é¡µçœ‰æ&nbsp;¼å¼ã€‚ä»…åœ¨éžç›²å®¡æ¨¡å¼~\key{anonymous} ä¸‹æ˜¾ç¤ºå­¦æ&nbsp;¡åç§°ã€‚}
%    \begin{macrocode}
%\bool_if:NF \g_@@_anonymous_bool
%  {
    \chead
      {
        \zihao{3} \ziju{0.75} \bfseries \kaishu
        \color_group_begin:
        \color_select:n { headfoot }
        \c_@@_header_tl
        \color_group_end:
      }
%  }
\tl_set:Nn { \headrulewidth } { 1 pt }
\tl_set:Nn { \headrule }
  {
    \skip_vertical:n { 3 pt }
    \@@_draw_hf_hline:n \headrulewidth
    \skip_vertical:n \headrulewidth
    \@@_draw_hf_hline:n \headrulewidth
  }
%    \end{macrocode}
%
% è®¾ç½®é¡µè„šæ&nbsp;¼å¼ã€‚
%    \begin{macrocode}
\cfoot { \zihao{-5} \thepage }
\tl_set:Nn { \footrulewidth } { 0.5 pt }
\tl_set:Nn { \footrule }
  {
    \@@_draw_hf_hline:n \footrulewidth
    \skip_vertical:n { 3 pt }
  }
%    \end{macrocode}
%
% \pkg{ctex} å®åŒ…ä½¿ç”¨ |heading| é€‰é¡¹åŽï¼Œä¼šæŠŠé¡µé¢æ&nbsp;¼å¼è®¾ç½®ä¸º |headings|ã€‚
% å›&nbsp;æ­¤å¿…é¡»åœ¨ \pkg{ctex} è°ƒç”¨ä¹‹åŽé‡æ–°è®¾ç½® \tn{pagestyle} ä¸º |fancy|ã€‚
%    \begin{macrocode}
\pagestyle { fancy }
%    \end{macrocode}
%
%
% \section{å°é¢æ‰‰é¡µæ&nbsp;·å¼}
%
% å®šä¹‰ä¸­è‹±æ–‡å°é¢ï¼Œç­”è¾©å§”å‘˜ä¼šé¡µï¼Œå£°æ˜Žé¡µæ&nbsp;·å¼ï¼Œå³åœ¨æ­£æ–‡å‰ä¸å«æœ‰é¡µçœ‰é¡µè„šçš„ç‰¹æ®Šé¡µé¢æ&nbsp;·å¼ã€‚
%
% \subsection{ä¿¡æ¯å½•å…¥}
%
% \begin{variable}{
%   \g_@@_info_title_tl,
%   \g_@@_info_degree_tl,
%   \g_@@_info_author_tl,
%   \g_@@_info_major_tl,
%   \g_@@_info_supervisor_tl,
%   \g_@@_info_date_tl,
%   \g_@@_info_clc_tl,
%   \g_@@_info_student_id_tl,
%   \g_@@_info_school_id_tl,
%   \g_@@_info_secret_tl,
% }
% å£°æ˜Žä¸­æ–‡å°é¢ä¿¡æ¯ã€‚
%    \begin{macrocode}
\tl_new:N \g_@@_info_title_tl
\tl_new:N \g_@@_info_degree_type_tl
\tl_new:N \g_@@_info_author_tl
\tl_new:N \g_@@_info_major_tl
\tl_new:N \g_@@_info_supervisor_tl
\tl_new:N \g_@@_info_date_tl
\tl_new:N \g_@@_info_clc_tl
\tl_new:N \g_@@_info_student_id_tl
\tl_new:N \g_@@_info_school_id_tl
\tl_new:N \g_@@_info_secret_tl
%    \end{macrocode}
% \end{variable}
%
% \begin{variable}{
%   \g_@@_info_title_en_tl,
%   \g_@@_info_author_en_tl,
%   \g_@@_info_major_en_tl,
%   \g_@@_info_supervisor_en_tl,
%   \g_@@_info_date_en_tl,
%   \g_@@_info_degree_en_tl,
% }
% å£°æ˜Žè‹±æ–‡å°é¢ä¿¡æ¯ã€‚
%    \begin{macrocode}
\tl_new:N \g_@@_info_title_en_tl
\tl_new:N \g_@@_info_author_en_tl
\tl_new:N \g_@@_info_major_en_tl
\tl_new:N \g_@@_info_supervisor_en_tl
\tl_new:N \g_@@_info_date_en_tl
\tl_new:N \g_@@_info_degree_en_tl
%    \end{macrocode}
% \end{variable}
%
% \begin{macro}{\g_@@_info_committee_seq}
% å£°æ˜Žç­”è¾©å§”å‘˜ä¼šæˆå‘˜åˆ—è¡¨ã€‚
%    \begin{macrocode}
\seq_new:N \g_@@_info_committee_seq
%    \end{macrocode}
% \end{macro}
%
% \begin{variable}{\l_@@_info_title_sanitized_tl,\l_@@_info_title_en_sanitized_tl}
% å¤„ç†åŽçš„è®ºæ–‡æ&nbsp;‡é¢˜ã€‚
%    \begin{macrocode}
\tl_new:N \l_@@_info_title_sanitized_tl
\tl_new:N \l_@@_info_title_en_sanitized_tl
%    \end{macrocode}
% \end{variable}
%
% \begin{macro}[do-not-index={\1, \2}]{\@@_set_title:nn}
% è®¾ç½®è®ºæ–‡æ&nbsp;‡é¢˜ï¼Œå¹¶åˆ&nbsp;é™¤å…¶ä¸­çš„ |\\| å’Œæ±‰å­—é—´çš„ç©ºæ&nbsp;¼ã€‚
%    \begin{macrocode}
\cs_new_protected:Npn \@@_set_title:nn #1#2
  {
    \tl_gset:cn { g_@@_info_ #1 _tl } { #2 }
    \tl_set:cn { l_@@_info_ #1 _sanitized_tl } { #2 }
    \tl_replace_all:cnn { l_@@_info_ #1 _sanitized_tl } { \\ } { ~ }
    \regex_replace_all:nnc
      { \s+ } { \ }
      { l_@@_info_ #1 _sanitized_tl }
    \regex_replace_all:nnc
      { ([\x{4e00}-\x{9fff}]) \s+ ([\x{4e00}-\x{9fff}]) } { \1 \2 }
      { l_@@_info_ #1 _sanitized_tl }
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_set_date:n}
% è®¾ç½®è®ºæ–‡æäº¤æ—¥æœŸã€‚
%    \begin{macrocode}
\cs_new:Npn \@@_set_date:n #1
  {
    \@@_set_date_aux:w #1 \q_stop
  }
\cs_new_protected:Npn \@@_set_date_aux:w #1 - #2 - #3 \q_stop
  {
    \tl_gset:Nn \g_@@_info_date_tl { {#1} å¹´ {#2} æœˆ {#3} æ—¥ }
    \tl_gset:Nn \g_@@_info_date_en_tl
      { \clist_item:Nn \c_@@_month_clist {#2},~ {#1} }
  }
\clist_const:Nn \c_@@_month_clist
  {
    January, February, March, April, May, June,
    July, August, September, October, November, December,
  }
%    \end{macrocode}
% \end{macro}
%
% å®šä¹‰ |hust/info| é”®å€¼ç±»ã€‚
%    \begin{macrocode}
\keys_define:nn { hust / info }
  {
%    \end{macrocode}
%
% \begin{macro}[module=info/]{info/title, info/title*}
% è®ºæ–‡é¢˜ç›®ã€‚ä»¥ä¸‹å¸¦æ˜Ÿå·çš„é¡¹ç›®å‡è¡¨ç¤ºç›¸åº”çš„è‹±æ–‡å­—æ®µã€‚
%    \begin{macrocode}
    title .tl_gset:N = \g_@@_info_title_tl,
    title* .tl_gset:N = \g_@@_info_title_en_tl,
%    title .code:n = { \@@_set_title:nn { title } { #1 } },
%    title* .code:n = { \@@_set_title:nn { title_en } { #1 } },
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}[module=info/]{info/degree, info/degree*}
% å­¦ä½ç±»åž‹ï¼ˆä¸­æ–‡ï¼‰æˆ–å­¦ç§‘ï¼ˆè‹±æ–‡ï¼‰ã€‚
% ä¸­æ–‡ç±»åž‹~\key[info]{degree} åˆ†ä¸ºå­¦æœ¯åž‹~\opt{academic}ï¼Œå’Œä¸“ä¸šåž‹~\opt{professional}ï¼›
% è‹±æ–‡å­¦ç§‘~\key[info]{degree*}\footnote{ä¸ºä¿æŒå‘½åä¸€è‡´æ€§ï¼Œå­¦ç§‘ degree discipline åœ¨æ­¤å¤„ä»ä½¿ç”¨é”®å |degree*|} åŒ…æ‹¬æ–‡å­¦~\opt{Arts}ï¼Œç†å­¦~\opt{Science}ï¼Œæ•™è‚²å­¦~\opt{Education}ï¼Œå·¥å­¦~\opt{Engineering}ï¼Œæ³•å­¦~\opt{Laws}ï¼ŒåŒ»å­¦~\opt{Medicine}ï¼Œä»¥åŠå…¶ä»–~\opt{XXX}ã€‚
%    \begin{macrocode}
    degree .choices:nn =
      { academic, professional }
      {
        \tl_gset_eq:NN \g_@@_info_degree_tl \l_keys_choice_tl
      },
    degree .default:n = { academic },
    degree* .tl_gset:N = \g_@@_info_degree_en_tl,
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}[module=info/]{info/author, info/author*}
% å­¦ä½ç”³è¯·äººå§“åã€‚
%    \begin{macrocode}
    author .tl_gset:N = \g_@@_info_author_tl,
    author* .tl_gset:N = \g_@@_info_author_en_tl,
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}[module=info/]{info/major, info/major*}
% ä¸“ä¸šåç§°ã€‚
%    \begin{macrocode}
    major .tl_gset:N = \g_@@_info_major_tl,
    major* .tl_gset:N = \g_@@_info_major_en_tl,
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}[module=info/]{info/supervisor, info/supervisor*}
% æŒ‡å¯¼è€å¸ˆã€‚
%    \begin{macrocode}
    supervisor .tl_gset:N = \g_@@_info_supervisor_tl,
    supervisor* .tl_gset:N = \g_@@_info_supervisor_en_tl,
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}[module=info/]{info/date}
% è®ºæ–‡æäº¤æ—¥æœŸã€‚
%    \begin{macrocode}
    date .code:n = { \@@_set_date:n { #1 } },
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}[module=info/]{info/clc}
% ä¸­å›¾åˆ†ç±»å·ã€‚
%    \begin{macrocode}
    clc .tl_gset:N = \g_@@_info_clc_tl,
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}[module=info/]{info/student-id, info/school-id}
% å­¦å·å’Œå­¦æ&nbsp;¡ä»£ç&nbsp;ã€‚
%    \begin{macrocode}
    student-id .tl_gset:N = \g_@@_info_student_id_tl,
    school-id .tl_gset:N = \g_@@_info_school_id_tl,
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}[module=info/]{info/secret}
% å¯†çº§ã€‚
%    \begin{macrocode}
    secret .tl_gset:N = \g_@@_info_secret_tl,
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}[module=info/]{info/committee}
% ç­”è¾©å§”å‘˜ä¼šæˆå‘˜åˆ—è¡¨ã€‚
%    \begin{macrocode}
    committee .code:n =
      {
        \seq_gset_from_clist:Nn \g_@@_info_committee_seq { #1 }
      },
%    \end{macrocode}
% \end{macro}
%
%    \begin{macrocode}
  }
%    \end{macrocode}
%
% \subsubsection{å®šä¹‰å†…éƒ¨å‡½æ•°}
%
% \begin{macro}{\@@_spread_box:nn, \@@_spread_box:no}
% åˆ†æ•£å¯¹é½çš„æ°´å¹³ç›’å­ã€‚
% \begin{arguments}
%   \item å®½åº¦
%   \item å†…å®¹
% \end{arguments}
% åˆ©ç”¨ \cs{tl_map_inline:nn} åœ¨å­—ç¬¦é—´æ’å…¥ \tn{hfil}ï¼›ç´§éšå…¶åŽçš„ \tn{unskip}
% å°†ä¼šåŽ»æŽ‰æœ€åŽä¸€ä¸ª \tn{hfil}ã€‚è§ \url{https://tex.stackexchange.com/q/169689}ã€‚
%    \begin{macrocode}
\cs_new_protected:Npn \@@_spread_box:nn #1#2
  {
    \mode_leave_vertical:
    \hbox_to_wd:nn {#1} { \tl_map_inline:nn {#2} { ##1 \hfil } \unskip }
  }
\cs_generate_variant:Nn \@@_spread_box:nn { no }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_center_box:nn, \@@_center_box:Vn}
% å±…ä¸­å¯¹é½çš„æ°´å¹³ç›’å­ã€‚
%    \begin{macrocode}
\cs_new_protected:Npn \@@_center_box:nn #1#2
  {
    \mode_leave_vertical:
    \hbox_to_wd:nn {#1} { \tex_hfil:D #2 \tex_hfil:D }
  }
\cs_generate_variant:Nn \@@_center_box:nn { Vn }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_fixed_width_box:nn}
% é™å®½ç›’å­ï¼ˆå…è®¸æ¢è¡Œï¼‰ã€‚
%    \begin{macrocode}
\cs_new:Npn \@@_fixed_width_box:nn #1#2
  { \parbox {#1} {#2} }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_fixed_width_center_box:nn}
% å±…ä¸­å¯¹é½çš„é™å®½ç›’å­ï¼ˆå…è®¸æ¢è¡Œï¼‰ã€‚
%    \begin{macrocode}
\cs_new:Npn \@@_fixed_width_center_box:nn #1#2
  { \parbox {#1} { \centering #2 } }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_get_text_width:Nn, \@@_get_text_width:NV}
% èŽ·å–æ–‡æœ¬å®½åº¦ï¼Œå¹¶å­˜å…¥ |dim| åž‹å˜é‡ã€‚
% \begin{arguments}
%   \item |dim| åž‹å˜é‡
%   \item å†…å®¹
% \end{arguments}
%    \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}[deprecated]{\@@_blank_underline:n}
% ä¸‹åˆ’çº¿å&nbsp;ä½ç¬¦ã€‚|#1|: é•¿åº¦ã€‚
%    \begin{macrocode}
\cs_new:Npn \@@_blank_underline:n #1
  { \rule [ -0.5 ex ] {#1} { 0.4 pt } }
%    \end{macrocode}
% \end{macro}
%
% \subsection{å°é¢æ¨¡æ¿}
%
% \begin{macro}[int, module=component/]{component/}
% å°é¢ç»„ä»¶ã€‚
% \begin{arguments}
%   \item[\opt{content}] ç»„ä»¶ä¸»ä½“å†…å®¹
%   \item[\opt{format}] ç»„ä»¶å­—ä½“/æ®µè½æ&nbsp;¼å¼
%   \item[\opt{height}] ç»„ä»¶å›ºå®šé«˜åº¦ï¼Œä¸è®¾ç½®åˆ™è‡ªåŠ¨è®¡ç®—ã€‚ä¸»è¦ç”¨äºŽè¡Œæ•°ä¸ç¡®å®šï¼Œéœ€è¦å›ºå®šé«˜åº¦çš„æƒ…å†µ
%   \item[\opt{top-lines}] é¡¶éƒ¨ç©ºå‡ºçš„è¡Œæ•°ï¼ŒæŒ‰ç…§è®¾å®šçš„æ®µè½æ&nbsp;¼å¼è®¡ç®—
%   \item[\opt{top-skip}] é¡¶éƒ¨é—´è·ï¼ˆå»ºè®®ä¼˜å…ˆé…ç½®åº•éƒ¨é—´è·ï¼Œé¡¶éƒ¨é—´è·ä»…åœ¨ç‰¹æ®Šæƒ…å†µä½¿ç”¨ï¼‰
%   \item[\opt{bottom-skip}] åº•éƒ¨é—´è·
%   \item[\opt{bottom-lines}] åº•éƒ¨ç©ºå‡ºçš„è¡Œæ•°ï¼ŒæŒ‰ç…§è®¾å®šçš„æ®µè½æ&nbsp;¼å¼è®¡ç®—
%   \item[\opt{align}] å¯¹é½æ–¹å¼ï¼Œå¯é€‰å€¼ä¸ºé&nbsp;å·¦å¯¹é½~\opt{left}ï¼Œé&nbsp;å³å¯¹é½~\opt{right}ï¼Œå±…ä¸­å¯¹é½~\opt{center}ï¼Œä»¥åŠä¸¤ç«¯å¯¹é½~\opt{justify}ã€‚é»˜è®¤ä¸ºå±…ä¸­å¯¹é½
% \end{arguments}
%    \begin{macrocode}
\NewTemplateType { hust / component } { 0 }
\DeclareTemplateInterface { hust / component } { plain } { 0 }
{
  content : tokenlist = \c_empty_tl,
  format : tokenlist = \c_empty_tl,
  width: skip = \c_zero_skip,
  height: skip = \c_zero_skip,
  top-lines : integer = \c_zero_int,
  top-skip : skip = \c_zero_skip,
  bottom-skip : skip = \c_zero_skip,
  bottom-lines : integer = \c_zero_int,
  align : choice { left, right, center, justify } = center,
}
\DeclareTemplateCode { hust / component } { plain } { 0 }
{
  content = \l_@@_component_content_tl,
  format = \l_@@_component_format_tl,
  width = \l_@@_component_width_skip,
  height = \l_@@_component_height_skip,
  top-lines = \l_@@_component_top_lines_int,
  top-skip = \l_@@_component_top_skip,
  bottom-skip = \l_@@_component_bottom_skip,
  bottom-lines = \l_@@_component_bottom_lines_int,
  align =
    {
      left =
        \cs_set_eq:NN \l_@@_component_align: \raggedright,
      right =
        \cs_set_eq:NN \l_@@_component_align: \raggedleft,
      center =
        \cs_set_eq:NN \l_@@_component_align: \centering,
      justify =
        \cs_set_eq:NN \l_@@_component_align: \prg_do_nothing:,
    }
}
{
  \AssignTemplateKeys
  \l_@@_component_format_tl
  \int_step_inline:nn { \l_@@_component_top_lines_int }
    {
      \mode_leave_vertical:
      \tex_par:D
    }
  \dim_compare:nNnTF { \l_@@_component_height_skip } &gt; { \c_zero_skip }
    {
      \box_clear_new:N \l_@@_component_box
      \vbox_set_to_ht:Nnn \l_@@_component_box { \l_@@_component_height_skip }
        {
          \skip_vertical:N \l_@@_component_top_skip
          \l_@@_component_align:
          \l_@@_component_content_tl
          \tex_vfill:D
        }
      \box_use:N \l_@@_component_box
    }
    {
      \skip_vertical:N \l_@@_component_top_skip
      \l_@@_component_align:
      \l_@@_component_content_tl
      \tex_par:D
    }
  \int_step_inline:nn { \l_@@_component_bottom_lines_int }
    {
      \mode_leave_vertical:
      \tex_par:D
    }
  \skip_vertical:N \l_@@_component_bottom_skip
  \skip_vertical:N \c_zero_skip
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}[int, module=hust/page]{page/}
% é¡µé¢æ¨¡æ¿ã€‚
% \begin{arguments}
%   \item[\opt{prefix}] ç»„ä»¶å…±ç”¨å‰ç¼€
%   \item[\opt{components}] ç»„ä»¶åˆ—è¡¨
%   \item[\opt{style}] é¡µé¢æ&nbsp;·å¼ ï¼ˆå¯ä½¿ç”¨ \tn{thispagestyle} é…ç½®ï¼‰
%   \item[\opt{format}] é¡µé¢å­—ä½“/æ®µè½æ&nbsp;¼å¼
%   \item[\opt{top-skip}] é¡¶éƒ¨é—´è·
% \end{arguments}
%    \begin{macrocode}
\NewTemplateType { hust / page } { 0 }
\DeclareTemplateInterface { hust / page } { title } { 0 }
  {
    prefix : tokenlist,
    components : commalist,
    style : tokenlist = empty,
    format : tokenlist = \linespread { } \selectfont,
    top-skip : skip = \c_zero_skip,
  }
\DeclareTemplateCode { hust / page } { title } { 0 }
  {
    prefix = \l_@@_page_prefix_tl,
    components = \l_@@_page_components_clist,
    style = \l_@@_page_style_tl,
    format = \l_@@_page_format_tl,
    top-skip = \l_@@_page_top_skip,
  }
  {
    \AssignTemplateKeys
    \skip_vertical:N \l_@@_page_top_skip
    \group_begin:
      \exp_args:No \thispagestyle { \l_@@_page_style_tl }
      \l_@@_page_format_tl
      \clist_map_inline:Nn \l_@@_page_components_clist
        {
          \group_begin:
          \UseInstance { hust / component } { \l_@@_page_prefix_tl / ##1 }
          \group_end:
        }
    \group_end:
    \clearpage
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{
%   \@@_declare_component_instance:nnn,
%   \@@_declare_page_instance:nn,
% }
% å£°æ˜Žæ¨¡æ¿å®žä¾‹çš„è¾…åŠ©å‡½æ•°ã€‚
%    \begin{macrocode}
\cs_new_protected:Npn \@@_declare_component_instance:nnn #1#2#3
  { \DeclareInstance { hust / component } { #1/#2 } { plain } {#3} }
\cs_new_protected:Npn \@@_declare_page_instance:nn #1#2
  {
    \DeclareInstance { hust / page } {#1} { title }
    {
      prefix = #1,
      #2,
    }
  }
%    \end{macrocode}
% \end{macro}
%
% \subsection{å°é¢ç»„ä»¶}
%
% \subsubsection{ä¸­æ–‡å°é¢}
%
% \begin{macro}[int, module=component/]{title zh/identifiers}
% åˆ†ç±»å·ï¼Œå­¦å·ï¼Œå­¦æ&nbsp;¡ä»£ç&nbsp;ï¼Œå¯†çº§ã€‚
%    \begin{macrocode}
\@@_declare_component_instance:nnn { title zh } { identifiers }
  {
    content =
      {
        \@@_title_zh_ids_aux:nn { 6em } { clc } % 3 em
        \skip_horizontal:n { \linewidth - 19em }
        \@@_title_zh_ids_aux:nn { 8em } { student_id } % 4 em
        \tex_par:D
        \@@_title_zh_ids_aux:nn { 5em } { school_id } % 4 em
        \skip_horizontal:n { \linewidth - 19em }
        \@@_title_zh_ids_aux:nn { 8em } { secret } % 4 em
      },
    format =
      {
        \zihao{-4} \bfseries \rmfamily \songti
        \@@_line_spread:n { 1.5 }
      },
    bottom-skip = 2 cm,
  }
\cs_new:Npn \@@_title_zh_ids_aux:nn #1#2
  {
    \tl_use:c { c_@@_name_ #2 _tl }
    \@@_ul_to_wd:nnn { 1 pt } { #1 }
      { \tl_use:c { g_@@_info_ #2 _tl } }
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}[int, module=hust/component/]{title zh/logo}
% æ&nbsp;¡åå›¾ç‰‡ã€‚
%    \begin{macrocode}
\@@_declare_component_instance:nnn { title zh } { logo }
  {
    content =
      {
        \includegraphics [ height = 1.4 cm ] { hust-title.pdf }
      },
    bottom-skip = 0.5 cm,
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}[int, module=hust/component/]{title zh/type}
% å­¦ä½çº§åˆ«ã€‚
%    \begin{macrocode}
\__ctex_save_font_size:nn { a } { 45 bp } % å¤§åˆå·
\@@_declare_component_instance:nnn { title zh } { type }
  {
    content = { \c_@@_name_type_zh_tl },
    format = { \zihao { a } \bfseries \songti \ziju { 0.1 } },
    bottom-skip = 0.5 cm,
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}[int, module=hust/component/]{title zh/degree}
% å­¦ä½ç±»åž‹ã€‚
%    \begin{macrocode}
\@@_declare_component_instance:nnn { title zh } { degree }
  {
    content =
      {
        ï¼ˆ
        \c_@@_name_academic_zh_tl
        \tl_if_eq:NnTF \g_@@_info_degree_tl { academic }
          { \c_@@_checkbox_tl }
          { \c_@@_emptybox_tl }
        \skip_horizontal:n { 2.5 em }
        \c_@@_name_professional_zh_tl
        \tl_if_eq:NnTF \g_@@_info_degree_tl { professional }
          { \c_@@_checkbox_tl }
          { \c_@@_emptybox_tl }
        ï¼‰
      },
    format = { \zihao { -3 } \c_@@_name_degree_font_tl },
    bottom-skip = 1.5 cm,
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}[int, module=hust/component/]{title zh/title}
% è®ºæ–‡é¢˜ç›®ã€‚
%    \begin{macrocode}
\@@_declare_component_instance:nnn { title zh } { title }
  {
    content = { \g_@@_info_title_tl },
    format =
      {
        \zihao { 1 } \bfseries \songti
        \@@_line_spread:n { 1.5 }
      },
    height = 4.8 cm,
    bottom-skip = 1 cm,
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}[int, module=hust/component/]{title zh/info}
% ä¿¡æ¯è¡¨æ&nbsp;¼ã€‚
%    \begin{macrocode}
\@@_declare_component_instance:nnn { title zh } { info }
  {
    content =
      {
        \tl_set:Nn \arraystretch { 2 }
        \begin{tabular}{p{5em}@{ï¼š\hspace{1em}}l}
          \c_@@_name_author_zh_tl &amp; \g_@@_info_author_tl \\
          \c_@@_name_major_zh_tl &amp; \g_@@_info_major_tl \\
          \c_@@_name_supervisor_zh_tl &amp; \g_@@_info_supervisor_tl \\
          \c_@@_name_date_tl &amp; \g_@@_info_date_tl \\
        \end{tabular}
      },
    format = { \zihao { -3 } \bfseries \rmfamily \songti },
    bottom-skip = 30 pt,
  }
%    \end{macrocode}
% \end{macro}
%
% \subsubsection{è‹±æ–‡å°é¢}
%
% \begin{macro}[int, module=hust/component/]{title en/degree}
% å­¦ä½çº§åˆ«å’Œå­¦ç§‘ã€‚
%    \begin{macrocode}
\@@_declare_component_instance:nnn { title en } { degree }
  {
    content =
      {
        \c_@@_name_type_en_tl
        \tl_if_eq:NnTF \g_@@_info_degree_tl { academic }
          { \c_@@_name_academic_en_tl }
          { \c_@@_name_professional_en_tl }
        \g_@@_info_degree_en_tl
      },
    format =
      {
        \zihao { -3 } \bfseries \rmfamily
        \@@_line_spread:n { 1.5 }
      },
    bottom-skip = 5.5 cm,
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}[int, module=hust/component/]{title en/title}
% è®ºæ–‡é¢˜ç›®ã€‚
%    \begin{macrocode}
\@@_declare_component_instance:nnn { title en } { title }
  {
    content = { \g_@@_info_title_en_tl },
    format =
      {
        \zihao { -2 } \bfseries \rmfamily
        \@@_line_spread:n { 1.5 }
      },
    height = 3 cm,
    bottom-skip = 3 cm,
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}[int, module=hust/component/]{title en/info}
% ä¿¡æ¯è¡¨æ&nbsp;¼ã€‚
%    \begin{macrocode}
\@@_declare_component_instance:nnn { title en } { info }
  {
    content =
      {
        \begin{tabular}{l@{\hspace{0.5em}:\hspace{0.5em}}l}
          \c_@@_name_author_en_tl &amp; \g_@@_info_author_en_tl \\
          \c_@@_name_major_en_tl &amp; \g_@@_info_major_en_tl \\
          \c_@@_name_supervisor_en_tl &amp; \g_@@_info_supervisor_en_tl \\
        \end{tabular}
      },
    format =
      {
        \zihao { -3 } \bfseries \rmfamily
        \@@_line_spread:n { 1.5 }
      },
    bottom-skip = 4 cm,
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}[int, module=hust/component/]{title en/address}
% å­¦æ&nbsp;¡åç§°å’Œåœ°å€ã€‚
%    \begin{macrocode}
\@@_declare_component_instance:nnn { title en } { address }
  {
    content = { \c_@@_address_tl },
    format =
      {
        \zihao { -3 } \bfseries \rmfamily
        \@@_line_spread:n { 1.5 }
      },
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}[int, module=hust/component/]{title en/date}
%    \begin{macrocode}
\@@_declare_component_instance:nnn { title en } { date }
  {
    content = { \tl_use:N \g_@@_info_date_en_tl },
    format =
      {
        \zihao { -3 } \bfseries \rmfamily
        \@@_line_spread:n { 1.5 }
      },
  }
%    \end{macrocode}
% \end{macro}
%
% \subsubsection{ç­”è¾©å§”å‘˜ä¼šé¡µ}
%
% \begin{macro}[int, module=hust/component/]{committee/title}
% ç­”è¾©å§”å‘˜ä¼šæ&nbsp;‡é¢˜ã€‚
%    \begin{macrocode}
\@@_declare_component_instance:nnn { committee } { title }
  {
    content = { \c_@@_name_committee_tl },
    format =
      {
        \zihao { 3 } \bfseries \sffamily
        \@@_line_spread:n { 1.5 }
      },
    bottom-lines = 1,
  }
\tl_const:Nn \c_@@_name_committee_tl { ç­”è¾©å§”å‘˜ä¼š }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}[int, module=hust/component/]{committee/members}
% ç­”è¾©å§”å‘˜ä¼šæˆå‘˜åˆ—è¡¨ã€‚
%    \begin{macrocode}
\@@_declare_component_instance:nnn { committee } { members }
  {
    content =
      {
        \tl_set:Nn \arraystretch { 1.5 }
        \begin{tabular}
          { |c|c|c|c| }
          \hline
          \c_@@_committee_header_tl \\
          \hline
          \int_const:Nn \l_@@_info_committee_count_int
            { \seq_count:N \g_@@_info_committee_seq }
          \seq_map_indexed_inline:Nn \g_@@_info_committee_seq
            {
              \int_case:nnF { #1 }
                {
                  { 1 }
                    {
                      \clist_item:Nn \c_@@_committee_role_clist { 1 }
                      &amp; #2 \\ \hline
                    }
                  { 2 }
                    {
                      \multirow
                        { \int_eval:n { \l_@@_info_committee_count_int - 1 } }
                        { * }
                        { \clist_item:Nn \c_@@_committee_role_clist { 2 } }
                      &amp; #2 \\ \cline{2-4}
                    }
                  { \l_@@_info_committee_count_int }
                    { &amp; #2 }
                }
                { &amp; #2 \\ \cline{2-4} }
            }
            \\ \hline
        \end{tabular}
      },
    format =
      {
        \zihao { 4 } \sffamily
        \@@_line_spread:n { 1.5 }
      },
    top-lines = 1,
  }
\tl_const:Nn \c_@@_committee_header_tl
  { \makebox[3em]{} &amp; \makebox[4em][c]{å§“å} &amp; \makebox[4em][c]{èŒç§°} &amp; \makebox[12em][c]{å•ä½} }
\clist_const:Nn \c_@@_committee_role_clist
  { ä¸»å¸­, å§”å‘˜, }
\tl_new:N \l_@@_committee_member_tl
%    \end{macrocode}
% \end{macro}
%
% \subsubsection{å£°æ˜Žé¡µ}
%
% \begin{macro}[int, module=hust/component/]{decl/orig title}
% ç‹¬åˆ›æ€§å£°æ˜Žæ&nbsp;‡é¢˜ã€‚
%    \begin{macrocode}
\@@_declare_component_instance:nnn { decl } { orig title }
  {
    content = { \c_@@_orig_decl_title_tl },
    format =
      {
        \zihao { 3 } \bfseries \heiti
      },
      bottom-lines = 1,
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}[int, module=hust/component/]{decl/orig text}
% ç‹¬åˆ›æ€§å£°æ˜Žæ­£æ–‡ã€‚
%    \begin{macrocode}
\@@_declare_component_instance:nnn { decl } { orig text }
  {
    content = { \c_@@_orig_decl_text_tl },
    align = justify,
    bottom-lines = 1,
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}[int, module=hust/component/]{decl/orig sign}
% ç‹¬åˆ›æ€§å£°æ˜Žç­¾åã€‚
%    \begin{macrocode}
\@@_declare_component_instance:nnn { decl } { orig sign }
  {
    content =
      {
        \clist_map_inline:Nn \c_@@_orig_decl_sign_clist
          {
            #1 \\
          }
      },
    align = right,
    bottom-lines = 3,
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}[int, module=hust/component/]{decl/auth title}
% å­¦ä½è®ºæ–‡ç‰ˆæƒä½¿ç”¨æŽˆæƒä¹¦æ&nbsp;‡é¢˜ã€‚
%    \begin{macrocode}
\@@_declare_component_instance:nnn { decl } { auth title }
  {
    content = { \c_@@_auth_decl_title_tl },
    format =
      {
        \zihao { 3 } \bfseries \heiti
      },
    top-lines = 1,
    bottom-lines = 1,
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}[int, module=hust/component/]{decl/auth text}
% å­¦ä½è®ºæ–‡ç‰ˆæƒä½¿ç”¨æŽˆæƒä¹¦æ­£æ–‡ã€‚
%    \begin{macrocode}
\@@_declare_component_instance:nnn { decl } { auth text }
  {
    content = { \c_@@_auth_decl_text_tl },
    align = justify,
    bottom-skip = 0.5 cm,
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}[int, module=hust/component/]{decl/auth secr}
% å­¦ä½è®ºæ–‡ä¿å¯†ä½¿ç”¨ä¿å¯†é€‰é¡¹ã€‚
%    \begin{macrocode}
\@@_declare_component_instance:nnn { decl } { auth secr }
  {
    content =
      {
        \mode_leave_vertical:
        \hbox_overlap_right:n
          { \clist_item:Nn \c_@@_auth_decl_secr_clist { 1 } }
        \skip_vertical:n { -1.2 cm }
        \skip_horizontal:n { 6 em }
        \clist_item:Nn \c_@@_auth_decl_secr_clist { 2 }
        \tex_par:D
        \skip_horizontal:n { 6 em }
        \clist_item:Nn \c_@@_auth_decl_secr_clist { 3 }
        \tex_par:D
        \clist_item:Nn \c_@@_auth_decl_secr_clist { 4 }
      },
    align = justify,
    bottom-lines = 1,
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}[int, module=hust/component/]{decl/auth sign}
%    \begin{macrocode}
\@@_declare_component_instance:nnn { decl } { auth sign }
  {
    content =
      {
        \clist_map_inline:Nn \c_@@_auth_decl_sign_clist
          {
            #1
            \tex_par:D
          }
      },
    align = justify,
  }
%    \end{macrocode}
% \end{macro}
%
% \subsection{ç»˜åˆ¶å°é¢}
%
% \begin{macro}{\makezhtitle}
% ä¸­æ–‡æ&nbsp;‡é¢˜é¡µã€‚
%    \begin{macrocode}
\@@_declare_page_instance:nn { title zh }
  {
    components = { identifiers, logo, type, degree, title, info, },
  }
\DeclareDocumentCommand \makezhtitle { }
  {
    \UseInstance { hust / page } { title zh }
  }
%    \end{macrocode}
% \end{macro}
%

% \begin{macro}{\makeentitle}
% è‹±æ–‡æ&nbsp;‡é¢˜é¡µã€‚
%    \begin{macrocode}
\@@_declare_page_instance:nn { title en }
  {
    components = { degree, title, info, address, date, },
  }
\DeclareDocumentCommand \makeentitle { }
  {
    \UseInstance { hust / page } { title en }
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\makecommittee}
% ç­”è¾©å§”å‘˜ä¼šé¡µã€‚
%    \begin{macrocode}
\@@_declare_page_instance:nn { committee }
  {
    components = { title, members, },
  }
\DeclareDocumentCommand \makecommittee { }
  {
    \UseInstance { hust / page } { committee }
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\makedecl}
% å£°æ˜Žé¡µã€‚
%    \begin{macrocode}
\@@_declare_page_instance:nn { decl }
  {
    components =
      {
        orig title, orig text, orig sign,
        auth title, auth text, auth secr, auth sign,
      },
    format =
      {
        \zihao { -4 } \rmfamily
        \@@_line_spread:n { 1.5 }
      }
  }
\DeclareDocumentCommand \makedecl { }
  {
    \UseInstance { hust / page } { decl }
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\maketitle}
% å°é¢ã€‚
%    \begin{macrocode}
\DeclareDocumentCommand \maketitle { }
  {
    \makezhtitle
    \tl_if_eq:NnT \g_@@_degree_type_tl { doctor }
      { \makecommittee }
    \makeentitle
    \makedecl
  }
%    \end{macrocode}
% \end{macro}
%
%
% \section{å‰æ–‡æ&nbsp;·å¼}
%
% å®šä¹‰ä»Žæ‘˜è¦åˆ°ç›®å½•çš„æ&nbsp;·å¼ï¼Œå³æœ‰é¡µçœ‰é¡µè„šï¼Œå«æœ‰å¤§å†™ç½—é©¬æ•°å­—é¡µç&nbsp;é¡µçš„æ&nbsp;·å¼ã€‚
%
% \begin{macro}{\frontmatter}
%    \begin{macrocode}
\@@_appto_cmd:Nn \frontmatter
  {
    \pagestyle { fancy }
    \pagenumbering { Roman }
    \@@_toc_chapter_frontmatter:
  }
%    \end{macrocode}
% \end{macro}
%
% \subsection{æ‘˜è¦æ&nbsp;·å¼}
%
% \begin{environment}{abstract, abstract*}
% æ‘˜è¦çŽ¯å¢ƒã€‚
%    \begin{macrocode}
\NewDocumentEnvironment { abstract } { }
  {
    \chapter**{\c_@@_name_abstract_zh_tl}
  }
  { }
\NewDocumentEnvironment { abstract* } { }
  {
    \chapter**{\c_@@_name_abstract_en_tl}
  }
  { }
%    \end{macrocode}
% \end{environment}
%
% \begin{macro}{\keywords, \keywords*}
% å…³é”®è¯å‘½ä»¤ã€‚
%    \begin{macrocode}
\NewDocumentCommand \keywords { s }
  {
    \IfBooleanTF { #1 }
      { \@@_keywords:nw { en } }
      { \@@_keywords:nw { zh } }
  }
\cs_new_nopar:Npn \@@_keywords:nw #1 #2
  {
    \zihao{-4} \rmfamily
    \tex_par:D
    \skip_horizontal:n \c_zero_skip
    \tex_par:D
    \tex_noindent:D
    \group_begin:
      \bfseries \heiti
      \tl_use:c { c_@@_name_keywords_ #1 _tl }
    \group_end:
    \c_space_tl
    #2
  }
%    \end{macrocode}
% \end{macro}
%
% \subsection{ç›®å½•æ&nbsp;·å¼}
%
%    \begin{macrocode}
\tl_set:Nn \contentsname { ç›®\hspace{1em}å½• }
%    \end{macrocode}
%
% è®¾ç½®ç›®å½•ç«&nbsp;èŠ‚æ˜¾ç¤ºæ·±åº¦ã€‚
%    \begin{macrocode}
\keys_set:nn { ctex }
  {
    tocdepth = section,
  }
%    \end{macrocode}
%
% è®¾ç½®ç›®å½•é¡¹å³è¾¹è·ã€‚
%    \begin{macrocode}
\contentsmargin { 0 pt }
%    \end{macrocode}
%
% \begin{macro}{\@@_toc_format:nnnn}
% è®¾ç½®ç›®å½•é¡¹æ&nbsp;¼å¼ã€‚
% \begin{arguments}
%   \item ç«&nbsp;èŠ‚ç±»åž‹
%   \item ç¼–å·ä¸Žç«&nbsp;èŠ‚åç§°é—´è·
%   \item ç«&nbsp;èŠ‚åç§°æ&nbsp;·å¼
%   \item ç«&nbsp;èŠ‚é¡µç&nbsp;æ&nbsp;¼å¼ï¼ˆ|\thecontentspage|è¡¨ç¤ºé¡µç&nbsp;ï¼‰
% \end{arguments}
%    \begin{macrocode}
\cs_new_protected:Npn \@@_toc_format:nnnn #1#2#3#4
  {
    \titlecontents
      { #1 }
      [ 0 pt ]
      { #3 }
      { \thecontentslabel \hspace{#2} #3 }
      { #3 }
      { #4 }
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\ddotfill}
% å®žçŽ°æ›´å¯†çš„è™šçº¿ã€‚è¯¥å‘½ä»¤ä»…å¯ä½¿ç”¨ \LaTeXe å‘½ä»¤å®žçŽ°ã€‚
%    \begin{macrocode}
\cs_new:Npn \ddotfill
  {
    \leavevmode \leaders \hbox to .22em {\hss .\hss } \hfill \kern 0pt
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{
%  \@@_toc_chapter_frontmatter:
%  \@@_toc_chapter_mainmatter:
%  \@@_toc_chapter_backmatter:
% }
% è®¾ç½®ç«&nbsp;çš„ä¸‰ç§æ&nbsp;·å¼ï¼Œåˆ†åˆ«æ˜¯åœ¨å‰æ–‡éƒ¨åˆ†æœ‰è™šçº¿ï¼Œä¸å¸¦æ‹¬å·é¡µç&nbsp;çš„æ&nbsp;¼å¼ï¼›
% æ­£æ–‡æ—&nbsp;è™šçº¿ï¼Œå¸¦æ‹¬å·é¡µç&nbsp;çš„æ&nbsp;¼å¼ï¼›
% ä»¥åŠé™„å½•éƒ¨åˆ†æœ‰è™šçº¿ï¼Œå¸¦æ‹¬å·é¡µç&nbsp;çš„æ&nbsp;¼å¼ã€‚
%    \begin{macrocode}
\cs_new_protected:Npn \@@_toc_chapter_frontmatter:
  {
    \@@_toc_format:nnnn
      { chapter }
      { 1 em}
      { \zihao{4} \bfseries \rmfamily \heiti }
      { \mdseries \ddotfill \thecontentspage }
    }
\cs_new_protected:Npn \@@_toc_chapter_mainmatter:
  {
    \@@_toc_format:nnnn
      { chapter }
      { 1 em }
      { \zihao{4} \bfseries \rmfamily \heiti }
      { \mdseries \hfill (\thecontentspage) }
  }
\cs_new_protected:Npn \@@_toc_chapter_backmatter:
  {
    \@@_toc_format:nnnn
      { chapter }
      { 1 em }
      { \zihao{4} \bfseries \rmfamily \heiti }
      { \mdseries \ddotfill (\thecontentspage) }
  }
%    \end{macrocode}
% \end{macro}
%
% è®¾ç½®èŠ‚çš„æ&nbsp;·å¼ã€‚
%    \begin{macrocode}
\@@_toc_format:nnnn
  { section }
  { 2 em }
  { \zihao{4} \rmfamily }
  { \ddotfill (\thecontentspage) }
%    \end{macrocode}
%
% \section{æ­£æ–‡æ&nbsp;·å¼}
%
%    \begin{macrocode}
\@@_appto_cmd:Nn \mainmatter
  {
    \pagestyle { fancy }
    \pagenumbering { arabic }
    \@@_toc_chapter_mainmatter:
  }
%    \end{macrocode}
%
% \subsection{ç«&nbsp;èŠ‚æ&nbsp;·å¼}
%
%    \begin{macrocode}
\keys_set:nn { ctex }
  {
%    \end{macrocode}
% è®¾ç½®ç«&nbsp;ï¼ˆchapterï¼‰ã€èŠ‚ï¼ˆsectionï¼‰ä¸Žå°èŠ‚ï¼ˆsub-sectionï¼‰æ&nbsp;‡é¢˜æ&nbsp;·å¼ã€‚

%    \begin{macrocode}
    chapter =
      {
        format = \zihao{3} \bfseries \rmfamily \heiti \centering \linespread{1.5},
        name = {},
        beforeskip = 15.5 bp,
        afterskip = 14 bp + \CTEX@chapter@lofskip,
        number = \arabic{ chapter },
        pagestyle = fancy,
        fixskip = true,
      },
    section =
      {
        format = \zihao{4} \bfseries \rmfamily \heiti \raggedright,
        numberformat = \rmfamily,
        beforeskip = 10 bp,
        afterskip = 7 bp,
      },
    subsection =
      {
        format = \zihao{-4} \bfseries \rmfamily \heiti \raggedright,
        numberformat = \rmfamily,
        beforeskip = 7 bp,
        afterskip = 4 bp,
      }
  }
%    \end{macrocode}
%
% \begin{macro}{\chapter, \chapter*, \chapter**}
% å¯¹å¸¦æœ‰æ˜Ÿå·çš„ç«&nbsp;èŠ‚æŒ‡ä»¤è¡¥ä¸ï¼Œä½¿å¾—å…¶èƒ½å¤Ÿåœ¨ç›®å½•ä¸­æ˜¾ç¤ºã€‚
%    \begin{macrocode}
\cs_set_eq:NN \@@_chapter:D \chapter
\RenewDocumentCommand \chapter { s s o m }
  {
    \IfNoValueTF{#3}
      {
        \IfBooleanTF{#1}
          {
            \@@_chapter:D*{#4}
            \IfBooleanT{#2}
              {  \CTEX@addtocline{chapter}{#4} }
          }
          { \@@_chapter:D{#4} }
      }
      {
        \IfBooleanTF{#1}
          {
            \@@_chapter:D*{#4}
            \IfBooleanT{#2}
              {  \CTEX@addtocline{chapter}{#3} }
          }
          { \@@_chapter:D[#3]{#4} }

      }
  }
%    \end{macrocode}
% \end{macro}
%
% \section{åŽæ–‡æ&nbsp;·å¼}
%
% \begin{macro}{\backmatter}
%    \begin{macrocode}
\@@_appto_cmd:Nn \backmatter
  {
    \@@_toc_chapter_backmatter:
  }
%    \end{macrocode}
% \end{macro}
%
%
% \subsection{è‡´è°¢é¡µ}
%
% \begin{environment}{acknowledgements}
%    \begin{macrocode}
\NewDocumentEnvironment { acknowledgements } { }
  {
    \chapter**{è‡´\hspace{1em}è°¢}
  }
  { }
%    \end{macrocode}
% \end{environment}
%
% \subsection{å‚è€ƒæ–‡çŒ®}
%
% \begin{macro}{\printbibliography}
% åœ¨ä½¿ç”¨ \tn{printbibliography} çš„åŒæ—¶æ·»åŠ&nbsp;ç›®å½•é¡¹ã€‚
%    \begin{macrocode}
\cs_if_exist:NT \printbibliography
  {
    \defbibheading{bibliography}[\refname]{%
      \chapter**{#1}%
    }
}
%    \end{macrocode}
% \end{macro}
%
% \section{é™„å½•æ&nbsp;·å¼}
%
%    \begin{macrocode}
\@@_appto_cmd:Nn \appendix
  {
  }
%    \end{macrocode}
%
%    \begin{macrocode}
\keys_set:nn { ctex / appendix }
  {
    number = \arabic{chapter},
  }
%    \end{macrocode}
%
% \subsection{ç­”è¾©å§”å‘˜ä¼šå†³è®®}
%
% \subsection{æˆæžœè®ºæ–‡å¯¹åº”å…³ç³»}
%
% \subsection{ä¸­è‹±æ–‡ç¼©å†™å¯¹ç…§è¡¨}
%
% \subsection{ç¨‹åºä»£ç&nbsp;æ&nbsp;·å¼}
%
% \section{æ–‡æ¡£ç±»åŽå¤„ç†}
%
% \section{ç”¨æˆ·æŽ¥å£}
%
% \begin{macro}[module=info/]{info/}
% \begin{macro}[module=style/]{style/}
% å®šä¹‰å…ƒï¼ˆmetaï¼‰é”®å€¼å¯¹ã€‚
%    \begin{macrocode}
\keys_define:nn { hust }
  {
    info .meta:nn = { hust / info } {#1},
    style .meta:nn = { hust / style } {#1}
  }
%    \end{macrocode}
% \end{macro}
% \end{macro}
%
% æ–‡æ¡£ç±»åˆå§‹è®¾ç½®ã€‚å­¦æ&nbsp;¡ä»£ç&nbsp;é»˜è®¤ä¸º \opt{10487}ã€‚
%    \begin{macrocode}
\keys_set_known:nn { hust }
  {
    info =
      {
        degree = { academic },
        secret = ,
        school-id = { 10487 },
        date =
          {
            \int_use:N \c_sys_year_int -
            \int_use:N \c_sys_month_int -
            \int_use:N \c_sys_day_int
          },
        anonymous-list =
          {
            author, student_id, supervisor,
            author_en, supervisor_en,
          },
        committee =
          {
            { &amp;~&amp;~ },
            { &amp;~&amp;~ },
            { &amp;~&amp;~ },
            { &amp;~&amp;~ },
            { &amp;~&amp;~ },
            { &amp;~&amp;~ },
            { &amp;~&amp;~ },
          }
      }
  }
%    \end{macrocode}
%
% \begin{macro}{\hustsetup}
% ç”¨æˆ·è®¾ç½®æŽ¥å£ã€‚
% \changes{v2.0.0}{2025-02-11}{å®žçŽ°ç»Ÿä¸€ç”¨æˆ·æŽ¥å£é…ç½®é€‰é¡¹}
%    \begin{macrocode}
\NewDocumentCommand \hustsetup { m }
  { \keys_set:nn { hust } {#1} }
%    \end{macrocode}
% \end{macro}
%
%    \begin{macrocode}
%&lt;/class&gt;
%    \end{macrocode}
%
% \section{å¸¸é‡å®šä¹‰}
%
%    \begin{macrocode}
%&lt;*def-m|def-d&gt;
%    \end{macrocode}
%
% \subsection{å…¨å±€å¸¸é‡}
%
% \begin{variable}{\c_@@_name_school_zh_tl, \c_@@_name_school_en_tl}
% å­¦æ&nbsp;¡åç§°ã€‚
%    \begin{macrocode}
\tl_const:Nn \c_@@_name_school_zh_tl { åŽä¸­ç§‘æŠ€å¤§å­¦ }
\tl_const:Nn \c_@@_name_school_en_tl { Huazhong~ University~ of~ Science~
  and~ Technology }
%    \end{macrocode}
% \end{variable}
%
% å¸¸ç”¨æ&nbsp;‡ç‚¹ç¬¦å·ï¼Œè§è¡¨~\ref{tab:punctuations}ï¼Œå®šä¹‰ä¸º |\c_@@_ #1 _tl|ã€‚
%    \begin{macrocode}
\clist_map_inline:nn
  {
    { ideo_comma       } { ^^^^3001 },
    { ideo_full_stop   } { ^^^^3002 },
    { fwid_comma       } { ^^^^ff0c },
    { fwid_full_stop   } { ^^^^ff0e },
    { fwid_colon       } { ^^^^ff1a },
    { fwid_semicolon   } { ^^^^ff1b },
    { fwid_left_paren  } { ^^^^ff08 },
    { fwid_right_paren } { ^^^^ff09 }
  }
  { \@@_define_punct:nn #1 }
%    \end{macrocode}
%
% \begin{table}[ht]
%   \caption{å¸¸ç”¨æ&nbsp;‡ç‚¹ç¬¦å·}
%   \label{tab:punctuations}
%   \centering
%   \begin{tabular}{cccc}
%     \toprule
%       \textbf{ä¸­æ–‡åç§°} &amp;
%       \textbf{è‹±æ–‡åç§°} &amp;
%       \textbf{ç¬¦å·} &amp;
%       \textbf{Unicode ç&nbsp;ä½} \\
%     \midrule
%       ä¸­æ–‡é¡¿å·     &amp; Ideographic comma           &amp; ^^^^3001 &amp; U+3001 \\
%       ä¸­æ–‡å¥å·     &amp; Ideographic full stop       &amp; ^^^^3002 &amp; U+3002 \\
%       ä¸­æ–‡é€—å·     &amp; Fullwidth comma             &amp; ^^^^ff0c &amp; U+FF0C \\
%       å…¨è§’è¥¿æ–‡å¥ç‚¹ &amp; Fullwidth full stop         &amp; ^^^^ff0e &amp; U+FF0E \\
%       ä¸­æ–‡å†’å·     &amp; Fullwidth colon             &amp; ^^^^ff1a &amp; U+FF1A \\
%       ä¸­æ–‡åˆ†å·     &amp; Fullwidth semicolon         &amp; ^^^^ff1b &amp; U+FF1B \\
%       ä¸­æ–‡å·¦åœ†æ‹¬å· &amp; Fullwidth left parenthesis  &amp; ^^^^ff08 &amp; U+FF08 \\
%       ä¸­æ–‡å³åœ†æ‹¬å· &amp; Fullwidth right parenthesis &amp; ^^^^ff09 &amp; U+FF09 \\
%     \bottomrule
%   \end{tabular}
% \end{table}
%
% \begin{variable}{\c_@@_line_spread_fp}
% è®¾ç½®è¡Œè·å€æ•°1.5å€ã€‚
%    \begin{macrocode}
\fp_const:Nn \c_@@_line_spread_fp { 1.5 }
%    \end{macrocode}
% \end{variable}
%
% \begin{variable}{\c_@@_emptybox_tl, \c_@@_checkbox_tl}
%    \begin{macrocode}
\tl_const:Nn \c_@@_emptybox_tl { \usym{2610} }
\tl_const:Nn \c_@@_checkbox_tl { \usym{2611} }
%    \end{macrocode}
% \end{variable}
%
% \subsection{å°é¢é¡µå¸¸é‡}
% \begin{variable}{
%   \c_@@_name_degree_font_tl,
%   \c_@@_name_professional_tl,
%   \c_@@_name_date_tl,
%   \c_@@_name_clc_tl,
%   \c_@@_name_student_id_tl,
%   \c_@@_name_school_id_tl,
%   \c_@@_name_secret_tl,
%   \c_@@_school_id_tl,
% }
% ä¸­æ–‡å°é¢é¡µå¸¸é‡ã€‚
%    \begin{macrocode}
\clist_map_inline:nn
  {
%&lt;def-m&gt;    { degree_font } { \bfseries \songti },
%&lt;def-d&gt;    { degree_font } { \heiti },
    { date } { ç­”\hfill è¾©\hfill æ—¥\hfill æœŸ },
    { clc } { åˆ†ç±»å· },
    { student_id } { å­¦å· },
    { school_id } { å­¦æ&nbsp;¡ä»£ç&nbsp; },
    { secret } { å¯†çº§ },
  }
  { \@@_define_name:nn #1 }
\tl_const:Nn \c_@@_school_id_tl { 10487 }
%    \end{macrocode}
% \end{variable}
%
% \begin{variable}{
%   \c_@@_address_tl
% }
% è‹±æ–‡å°é¢é¡µå¸¸é‡ã€‚
%    \begin{macrocode}
\tl_const:Nn \c_@@_address_tl
  {
    Huazhong~ University~ of~ Science~ and~ Technology\\
    Wuhan~ 430074,~ P.~ R.~ China
  }
%    \end{macrocode}
% \end{variable}
%
% \begin{variable}{
%   \c_@@_name_type_en_tl,
%   \c_@@_name_type_zh_tl,
%   \c_@@_name_academic_en_tl,
%   \c_@@_name_academic_zh_tl,
%   \c_@@_name_professional_en_tl,
%   \c_@@_name_professional_zh_tl,
%   \c_@@_name_author_en_tl,
%   \c_@@_name_author_zh_tl,
%   \c_@@_name_major_en_tl,
%   \c_@@_name_major_zh_tl,
%   \c_@@_name_supervisor_en_tl,
%   \c_@@_name_supervisor_zh_tl,
% }
% ä¸­è‹±æ–‡é¡µå…±ç”¨å¸¸é‡ã€‚
%    \begin{macrocode}
\clist_map_inline:nn
  {
    { type }
      { A~ Dissertation~ Submitted~ in~ Partial~ Fulfillment~ of~
%&lt;def-m&gt;      the~
%&lt;def-d&gt;      The~
      Requirements~ for~ }
%&lt;def-m&gt;      { ç¡•å£«å­¦ä½è®ºæ–‡ },
%&lt;def-d&gt;      { åšå£«å­¦ä½è®ºæ–‡ },
%&lt;*def-m&gt;
    { academic } { the~ Master~ Degree~ in } { å­¦æœ¯åž‹ },
    { professional } { the~ Professional~ Master~ Degree~ in }  { ä¸“ä¸šåž‹ },
    { author } { Candidate } { å­¦\hfill ä½\hfill ç”³\hfill è¯·\hfill äºº },
%&lt;/def-m&gt;
%&lt;*def-d&gt;
    { academic } { The~ Degree~ of~ Doctor~ of } { å­¦æœ¯åž‹ },
    { professional } { The~ Degree~ of~ Doctor~ of } { ä¸“ä¸šåž‹ }, % no diff in English
    { author } { Ph.D.~ Candidate } { å­¦\hfill ä½\hfill ç”³\hfill è¯·\hfill äºº },
%&lt;/def-d&gt;
    { major } { Major } { å­¦\hfill ç§‘\hfill ä¸“\hfill ä¸š },
    { supervisor } { Supervisor } { æŒ‡\hfill å¯¼\hfill è€\hfill å¸ˆ },
  }
  { \@@_define_name:nnn #1 }
%    \end{macrocode}
% \end{variable}
%
% \subsection{å£°æ˜Žé¡µå¸¸é‡}
%
% \begin{variable}{\c_@@_orig_decl_title_tl, \c_@@_orig_decl_text_tl}
% ç‹¬åˆ›æ€§å£°æ˜Žã€‚
%    \begin{macrocode}
\tl_const:Nn \c_@@_orig_decl_title_tl { ç‹¬åˆ›æ€§å£°æ˜Ž }
\tl_const:Nn \c_@@_orig_decl_text_tl
  {
    æœ¬äººå£°æ˜Žæ‰€å‘ˆäº¤çš„å­¦ä½è®ºæ–‡æ˜¯æˆ‘ä¸ªäººåœ¨å¯¼å¸ˆæŒ‡å¯¼ä¸‹è¿›è¡Œçš„ç&nbsp;”ç©¶å·¥ä½œåŠå–å¾—çš„ç&nbsp;”
    ç©¶æˆæžœã€‚å°½æˆ‘æ‰€çŸ¥ï¼Œé™¤æ–‡ä¸­å·²ç»æ&nbsp;‡æ˜Žå¼•ç”¨çš„å†…å®¹å¤–ï¼Œæœ¬è®ºæ–‡ä¸åŒ…å«ä»»ä½•å…¶ä»–ä¸ªäººæˆ–
    é›†ä½“å·²ç»å‘è¡¨æˆ–æ’°å†™è¿‡çš„ç&nbsp;”ç©¶æˆæžœã€‚å¯¹æœ¬æ–‡çš„ç&nbsp;”ç©¶åšå‡ºè´¡çŒ®çš„ä¸ªäººå’Œé›†ä½“ï¼Œå‡å·²åœ¨
    æ–‡ä¸­ä»¥æ˜Žç¡®æ–¹å¼æ&nbsp;‡æ˜Žã€‚æœ¬äººå®Œå…¨æ„è¯†åˆ°æœ¬å£°æ˜Žçš„æ³•å¾‹ç»“æžœç”±æœ¬äººæ‰¿æ‹…ã€‚
  }
%    \end{macrocode}
% \end{variable}
%
% \begin{variable}{\c_@@_orig_decl_sign_clist}
% ç‹¬åˆ›æ€§å£°æ˜Žç­¾åé¡¹ç›®ã€‚
%    \begin{macrocode}
\clist_const:Nn \c_@@_orig_decl_sign_clist
  {
    å­¦ä½è®ºæ–‡ä½œè€…ç­¾åï¼š\hspace{2em}\mbox{},
    æ—¥æœŸï¼š\hspace{2em}å¹´\hspace{1.5em}æœˆ\hspace{1.5em}æ—¥
  }
%    \end{macrocode}
% \end{variable}
%
% \begin{variable}{\c_@@_auth_decl_title_tl, \c_@@_auth_decl_text_tl}
% å­¦ä½è®ºæ–‡ç‰ˆæƒä½¿ç”¨æŽˆæƒä¹¦ã€‚
%    \begin{macrocode}
\tl_const:Nn \c_@@_auth_decl_title_tl { å­¦ä½è®ºæ–‡ç‰ˆæƒä½¿ç”¨æŽˆæƒä¹¦ }
\tl_const:Nn \c_@@_auth_decl_text_tl
  {
    æœ¬å­¦ä½è®ºæ–‡ä½œè€…å®Œå…¨äº†è§£å­¦æ&nbsp;¡æœ‰å…³ä¿ç•™ã€ä½¿ç”¨å­¦ä½è®ºæ–‡çš„è§„å®šï¼Œå³ï¼šå­¦æ&nbsp;¡æœ‰æƒ
    ä¿ç•™å¹¶å‘å›½å®¶æœ‰å…³éƒ¨é—¨æˆ–æœºæž„é€äº¤è®ºæ–‡çš„å¤å°ä»¶å’Œç”µå­ç‰ˆï¼Œå…è®¸è®ºæ–‡è¢«æŸ¥é˜…å’Œå€Ÿé˜…ã€‚
    æœ¬äººæŽˆæƒåŽä¸­ç§‘æŠ€å¤§å­¦å¯ä»¥å°†æœ¬å­¦ä½è®ºæ–‡çš„å…¨éƒ¨æˆ–éƒ¨åˆ†å†…å®¹ç¼–å…¥æœ‰å…³æ•°æ®åº“è¿›è¡Œæ£€
    ç´¢ï¼Œå¯ä»¥é‡‡ç”¨å½±å°ã€ç¼©å°æˆ–æ‰«æç­‰å¤åˆ¶æ‰‹æ®µä¿å­˜å’Œæ±‡ç¼–æœ¬å­¦ä½è®ºæ–‡ã€‚
  }
%    \end{macrocode}
% \end{variable}
%
% \begin{variable}{\c_@@_auth_decl_secr_clist, \c_@@_auth_decl_sign_clist}
% å­¦ä½è®ºæ–‡ç‰ˆæƒä½¿ç”¨æŽˆæƒä¹¦å¡«å†™é¡¹ç›®ï¼šä¿å¯†ä¸Žç­¾åã€‚
%    \begin{macrocode}
\clist_const:Nn \c_@@_auth_decl_secr_clist
  {
    æœ¬è®ºæ–‡å±žäºŽ,
    ä¿\hspace{1em}å¯†â–¡ï¼Œåœ¨\underline{\hspace{3em}}å¹´è§£å¯†åŽé€‚ç”¨æœ¬æŽˆæƒä¹¦ã€‚,
    ä¸ä¿å¯†â–¡ã€‚,
    ï¼ˆè¯·åœ¨ä»¥ä¸Šæ–¹æ¡†å†…æ‰“â€œâˆšâ€ï¼‰
  }
\clist_const:Nn \c_@@_auth_decl_sign_clist
  {
    å­¦ä½è®ºæ–‡ä½œè€…ç­¾åï¼š\hfill{} æŒ‡å¯¼æ•™å¸ˆç­¾åï¼š\hspace*{5em} \mbox{},
    æ—¥æœŸï¼š\hspace*{2em}å¹´\hspace*{1.5em}æœˆ\hspace*{1.5em}æ—¥ \hfill{}
    æ—¥æœŸï¼š\hspace*{2em}å¹´\hspace*{1.5em}æœˆ\hspace*{1.5em}æ—¥\hspace*{1em} \mbox{}
  }
%    \end{macrocode}
% \end{variable}
%
% \subsection{æ‘˜è¦é¡µå¸¸é‡}
% \begin{variable}{
%   \c_@@_name_abstract_zh_tl,
%   \c_@@_name_abstract_en_tl,
%   \c_@@_name_keywords_zh_tl,
%   \c_@@_name_keywords_en_tl,
%   \c_@@_sep_keywords_zh_tl,
%   \c_@@_sep_keywords_en_tl,
% }
%    \begin{macrocode}
\clist_map_inline:nn
  {
    { abstract } { Abstract } { æ‘˜\hspace{1em}è¦ },
    { keywords } { Key~ words: } { å…³é”®è¯ï¼š },
  }
  { \@@_define_name:nnn #1 }
\tl_const:Nn \c_@@_sep_keywords_zh_tl { ï¼› }
\tl_const:Nn \c_@@_sep_keywords_en_tl { , }
%    \end{macrocode}
% \end{variable}
%
% \subsection{æ­£æ–‡å¸¸é‡}
% \begin{variable}{\c_@@_header_tl}
% é¡µçœ‰ã€‚
%    \begin{macrocode}
%&lt;def-m&gt;\tl_const:Nn \c_@@_header_tl { åŽä¸­ç§‘æŠ€å¤§å­¦ç¡•å£«å­¦ä½è®ºæ–‡ }
%&lt;def-d&gt;\tl_const:Nn \c_@@_header_tl { åŽä¸­ç§‘æŠ€å¤§å­¦åšå£«å­¦ä½è®ºæ–‡ }
%    \end{macrocode}
% \end{variable}
%
%    \begin{macrocode}
%&lt;/def-m|def-d&gt;
%    \end{macrocode}

% \section{æ–‡çŒ®æ&nbsp;·å¼}
%
% \changes{v2.0.0}{2025-02-26}{å®žçŽ°åŸºäºŽ\pkg{biblatex}çš„æ–‡çŒ®æ&nbsp;·å¼}
%
% \subsection{æ&nbsp;‡æ³¨æ&nbsp;·å¼}
%
%    \begin{macrocode}
%&lt;*cbx&gt;
%    \end{macrocode}
%
% æ—&nbsp;é¡»ä¿®æ”¹æ&nbsp;‡æ³¨æ&nbsp;·å¼ã€‚
%    \begin{macrocode}
\RequireCitationStyle{gb7714-2015}
%    \end{macrocode}
%
%    \begin{macrocode}
%&lt;/cbx&gt;
%    \end{macrocode}
%
% \subsection{è‘—å½•æ&nbsp;·å¼}
%
%    \begin{macrocode}
%&lt;*bbx&gt;
%    \end{macrocode}
%
% åŸºäºŽ \pkg{biblatex-gb7714-2015} çš„è‘—å½•æ&nbsp;·å¼ã€‚
%    \begin{macrocode}
\RequireBibliographyStyle{gb7714-2015}
%    \end{macrocode}
%
% è®¾ç½® \pkg{biblatex-gb7714-2015} é€šç”¨è‘—å½•æ&nbsp;·å¼é€‰é¡¹ã€‚
%    \begin{macrocode}
\ExecuteBibliographyOptions
  {
    isbn = false,
    url = false,
    doi = false,
    gbnamefmt = givenahead,
    gbtype = false,
    gbpunctin = false,
    maxbibnames = 6,
    minbibnames = 6,
  }
%    \end{macrocode}
%
% åˆ&nbsp;é™¤è‘—å½•é¡¹æœ«å°¾çš„æ&nbsp;‡ç‚¹ç¬¦å·ã€‚
%    \begin{macrocode}
\renewcommand{\finentrypunct}{}
%    \end{macrocode}
%
% \subsubsection{ä¸“è‘—}
%
% è®¾ç½®ä¸“è‘—ç‰ˆæœ¬æ&nbsp;·å¼ï¼Œå¹¶ä½¿ç”¨ \pkg{zhnumber} å°†ä¸­æ–‡ä¸“è‘—çš„é˜¿æ‹‰ä¼¯æ•°å­—ç‰ˆæœ¬å·è‡ªåŠ¨è½¬æ¢ä¸ºä¸­æ–‡æ•°å­—ã€‚
%    \begin{macrocode}
\newcommand\HUST@bib@zhedition[1]{ï¼ˆ#1ï¼‰}
\newcommand\HUST@bib@enedition[1]{(#1)}
\DeclareFieldFormat{edition}{\bibtitlefont%æºæ¥è‡ªbiblatex.DEF
    \testCJKfirst{userd}%
    \iftoggle{ifCJKforgbt}%
      {\ifinteger{#1}
        {%
          \ifnumgreater{#1}{1}{\printtext{
            %#1\str@edition
            \HUST@bib@zhedition{ç¬¬\zhnumber{#1}ç‰ˆ}
          }}{}
        }%
        %{#1\isdot}}%
        {\HUST@bib@zhedition{#1}}
        \addspace
      }%
      {\ifinteger{#1}%
        {\ifnumgreater{#1}{1}{
           %\mkbibordedition{#1}~\bibstring{edition}
           \HUST@bib@enedition{\mkbibordedition{#1}~\bibstring{edition}}
          }{}
        }%
        %{#1\isdot}}%
        {\HUST@bib@enedition{#1}\isdot}
      }
}
\DeclareBibliographyDriver{book}{%æºæ¥è‡ªstandard.bbxæ–‡ä»¶
  \usebibmacro{bibindex}%
  \usebibmacro{begentry}%
  \usebibmacro{author/editor+others/translator+others}%
  \ifnameundef{namea}{}{\setunit{\labelnamepunct}\newblock}%è¿™ä¸€æ®µç”¨äºŽåŽ»é™¤ä½œè€…ä¸å­˜åœ¨æ—¶å¤šå‡ºçš„æ&nbsp;‡ç‚¹
%    \end{macrocode}
% åˆ&nbsp;é™¤ç‰ˆæœ¬å‰çš„æ&nbsp;‡ç‚¹ç¬¦å·ã€‚
%    \begin{macrocode}
  \if false
  \usebibmacro{maintitle+title}%
  \iftoggle{bbx:gbstrict}{}{%
    \newunit
    \printlist{language}%
    \newunit\newblock%
    \usebibmacro{byauthor}%
    \newunit\newblock
  }%
  \usebibmacro{byeditor+others}%
  \newunit
  \fi
  \printfield[titlecase]{title}%
  \printfield{edition}%
  \newunit\newblock%%
  \iftoggle{bbx:gbstrict}{}{%
  \iffieldundef{maintitle}%
  {%\printfield{volume}%
  \printfield{part}}%
  {}%
  \newunit%
  \printfield{volumes}%
  \newunit\newblock%
  \usebibmacro{series+number}}%
  \newunit\newblock%
  %\printfield{note}%
  %\newunit\newblock%
  \usebibmacro{publisher+location+date}%
  %\newunit\newblock %è¿™é‡Œæ&nbsp;‡ç‚¹åŽ»æŽ‰
  \usebibmacro{chapter+pages}%
    \iffieldundef{url}{}{%å½“æ²¡æœ‰ç½‘å€æ—¶ä¹Ÿä¸è¾“å‡º
    \usebibmacro{modifydate}}%å¸¦æ‹¬å·çš„ä¿®æ”¹æˆ–æ›´æ–°æ—¥æœŸï¼Œ
  \usebibmacro{doi+eprint+url}%ä»Žä¸‹é¢ç§»åŠ¨åˆ°ä¸Šé¢æ¥ï¼Œå›&nbsp;ä¸ºgbt2015çš„urléœ€ç›´æŽ¥æ”¾åœ¨é¡µç&nbsp;åŽé¢ã€‚
%    \end{macrocode}
% åˆ&nbsp;é™¤ä¸“è‘—çš„é¡µç&nbsp;ã€‚
%    \begin{macrocode}
  \if false
  \newunit\newblock%
  \printfield{pagetotal}%
  \fi
  \newunit\newblock%
  \iftoggle{bbx:isbn}
    {\printfield{isbn}}
    {}%
  \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}
%
% \subsubsection{æžå‡ºæ–‡çŒ®}
%
% è®¾ç½®åŒ…æ‹¬ä¼šè®®è®ºæ–‡åœ¨å†…çš„æžå‡ºæ–‡çŒ®è‘—å½•æ&nbsp;·å¼ã€‚
% ä¿®æ”¹ Driver: inbook $\rightarrow$ macro: |inbook:parent|
% $\rightarrow$ |publisher+location+date|ã€‚
% å°†ä¼šè®®è®ºæ–‡æžå‡ºæ–‡çŒ®ä¸­çš„ä¼šè®®åœ°å€ï¼ˆå«ä¼šè®®æ—¥æœŸï¼‰åŽé¢çš„å†’å·æ”¹ä¸ºé€—å·ã€‚
%    \begin{macrocode}
\newbibmacro*{HUSTinbook_publisher+location+date}{\bibpubfont%
  \iftoggle{bbx:gbpub}%
    {\testCJKfirst{userd}%
      \ifboolexpr{ test {\iflistundef{location}} and test {\iflistundef{publisher}} }%
        {\iffieldequalstr{entrysubtype}{standard}{}
          {\iftoggle{ifCJKforgbt}{\printtext{\gbleftbracket\str@noaddress}\space :\space\str@nopublisher\gbrightbracket}
              {\printtext{\gbleftbracket S.l.\space :\space s.n.\adddot\gbrightbracket}}}
        }%
        {
          \iflistundef{location}{%\adddot
            \iffieldequalstr{entrysubtype}{standard}{}%%ä»Žgbt7714-2015æ&nbsp;‡å‡†ç¬¬19é¡µçœ‹åˆ°ï¼Œæ&nbsp;‡å‡†å­˜åœ¨å‡ºç‰ˆé¡¹æ—¶è¾“å‡ºï¼Œæ²¡æœ‰æ—¶å®Œå…¨çœç•¥ã€‚
            {\iftoggle{ifCJKforgbt}{\printtext{\gbleftbracket\str@noaddress\gbrightbracket}\addcolon\addspace}%
                {\printtext{\gbleftbracket S.l.\adddot\gbrightbracket}\publocpunct}}
          }%  \bibstring{noaddress}
          {\printlist{location}\publocpunct}%%\addcolon\addspace%
          \iflistundef{publisher}{%
            \iffieldequalstr{entrysubtype}{standard}{}%
            {\iftoggle{ifCJKforgbt}{\printtext{\gbleftbracket\str@nopublisher\gbrightbracket}\setunit{\adddot\addspace}\setunit*{\addcomma\addspace}}%
            {\printtext{\mkbibbrackets{s.n.}}\setunit{\adddot\addspace}\setunit*{\addcomma\addspace}}}}%
            {\printlist{publisher}}
        }%
      \pubdatadelim%\addcomma\addspace%
      \usebibmacro{date}%%\newunit %åŽ»æŽ‰è¿™ä¸ªæ&nbsp;‡ç‚¹
    }%
    {\printlist{location}%
      \iflistundef{publisher}
        {\locnopubdelim}
%    \end{macrocode}
% å§‹ç»ˆä½¿ç”¨é€—å·ã€‚
%    \begin{macrocode}
        %{\setunit*{\publocpunct}}%
        {\locnopubdelim}
      \printlist{publisher}%
      \pubdatadelim%
      \usebibmacro{date}%%\newunit
    }%
}
\renewbibmacro*{inbook:parent}{%
  \usebibmacro{bybookauthor}%
    \ifnameundef{bookauthor}{%
    \ifnameundef{editor}{}{\newunit}%
    }{\newunit}%æ›¿æ¢ä¸‹ä¸€å¥
    %\newunit\newblock
  \iffieldundef{series}{}
    {\usebibmacro{series+number}\setunit{\addcolon\addspace}}%ä¸ºå¤„ç†ä¸€äº›å­˜åœ¨seriesçš„æƒ…å†µè€Œå¢žåŠ&nbsp;
    \usebibmacro{maintitle+booktitle}%
  \iffieldundef{volume}{}{\setunit{\addcolon\addspace}\printfield{volume}}%
  \iffieldundef{number}{}{\setunit{\addcolon\addspace}\printfield{number}}%å¢žåŠ&nbsp;å·å’Œå†Œä¿¡æ¯
    \newunit\newblock%
  %  \usebibmacro{byeditor+others}%
  %  \newunit\newblock
    \printfield{edition}%
    \newunit
    \iftoggle{bbx:gbstrict}{}{%
  %  \iffieldundef{maintitle}
  %    {\printfield{volume}%
  %     \printfield{part}}
  %    {}%
  %  \newunit
  %  \printfield{volumes}%
  %  \newunit\newblock
  %  \usebibmacro{series+number}
    }%
    \newunit\newblock
    %\printfield{note}%
    %\newunit\newblock
%    \end{macrocode}
% ç”±äºŽ |publisher+location+date| åœ¨ä¸åªè¿™é‡Œä½¿ç”¨ï¼Œ
% å›&nbsp;æ­¤å°†å…¶ç§»æ¤åˆ°å® |HUSTinbook_publisher+location+date| ä¸­ã€‚
%    \begin{macrocode}
    %\usebibmacro{publisher+location+date}
    \usebibmacro{HUSTinbook_publisher+location+date}%
}
%    \end{macrocode}
%
% \subsubsection{æœŸåˆŠ}
%
% æš‚æ—¶æ²¡å‘çŽ°éœ€è¦ä¿®æ”¹çš„ã€‚
%
% \subsubsection{ä¸“åˆ©}
%
% è®¾ç½®ä¸“åˆ©è‘—å½•æ&nbsp;·å¼ã€‚
%    \begin{macrocode}
\DeclareFieldFormat[book]{title}{#1}
\renewbibmacro*{patenttitle}{%åŽŸè¾“å‡ºæ¥è‡ªbiblatex.defæ–‡ä»¶
  \ifboolexpr{%
    test{\iffieldundef{title}}%
    and%
    test{\iffieldundef{subtitle}}%
  }%
  {}%
  { \printtext[title]{\bibtitlefont%
      \printfield[titlecase]{title}%
      \newunit
      \ifboolexpr{test {\iffieldundef{subtitle}}}%è¿™é‡Œå¢žåŠ&nbsp;äº†å¯¹å­æ&nbsp;‡é¢˜çš„åˆ¤æ–­ï¼Œè§£å†³ä¸åˆ¤æ–­å¤šä¸€ä¸ªç‚¹çš„é—®é¢˜
        {}%
        {\setunit{\subtitlepunct}\printfield[titlecase]{subtitle}}%
      \iffieldundef{titleaddon}{}%åˆ¤æ–­ä¸€ä¸‹titleaddonï¼Œå¦åˆ™ç›´æŽ¥åŠ&nbsp;å¯èƒ½å¤šä¸€ä¸ªç©ºæ&nbsp;¼
        {\setunit{\subtitlepunct}\printfield{titleaddon}}%
%    \end{macrocode}
% ä¿®æ”¹æ&nbsp;‡é¢˜åŽé¢æ&nbsp;‡ç‚¹ï¼›å°†åœ°ç‚¹ï¼Œä¸“åˆ©å·ç§»æ¤åˆ°æ&nbsp;‡é¢˜ä¸­ï¼›å¹¶å¼ºåˆ¶æ˜¾ç¤º GB/T 7714-2015 ä¸­çš„æ–‡çŒ®ç±»åž‹ï¼ˆ|[P]|ï¼‰ã€‚
%    \begin{macrocode}
      \if false
      \setunit{\subtitlepunct}\printfield{number}%å†™ä¸“åˆ©å·
      \iftoggle{bbx:gbtype}{\printfield[gbtypeflag]{usera}}{}%
      %\iffieldundef{booktitle}{\newunit}{}%å½“titleæ˜¯æžå‡ºæ—¶ï¼Œä¸è¦æ&nbsp;‡ç‚¹
      %\newunit
      \fi
      \iflistundef{location}
        {}
        %{\setunit*{\addspace}%
        {\setunit*{\subtitlepunct}
        \printtext{%[parens]
          \printlist[][-\value{listtotal}]{location}}}%
      \setunit{\addcomma\space}\printfield{number}%å†™ä¸“åˆ©å·
      \setunit{\addspace}\printfield[gbtypeflag]{usera}
    }%
  }%
  \setunit{\subtitlepunct}%
}
\DeclareBibliographyDriver{patent}{%æºæ¥è‡ªstandard.BBX
  \usebibmacro{bibindex}%
  \usebibmacro{begentry}%
  \usebibmacro{author}%
  \ifnameundef{author}{}{\setunit{\labelnamepunct}\newblock}%è¿™ä¸€æ®µç”¨äºŽåŽ»é™¤ä½œè€…ä¸å­˜åœ¨æ—¶å¤šå‡ºçš„æ&nbsp;‡ç‚¹
  %\usebibmacro{title}%
  \usebibmacro{patenttitle}%ç»™å‡ºä¸“åˆ©ä¸“ç”¨çš„æ&nbsp;‡é¢˜è¾“å‡º
  \iftoggle{bbx:gbstrict}{}{%
    \newunit%
    \printlist{language}%
    \newunit\newblock
    \usebibmacro{byauthor}
  }%
  \newunit\newblock
%    \end{macrocode}
% ä»¥ä¸‹éƒ¨åˆ†ï¼ŒæŠ‘æˆ–ç§»é™¤ï¼ŒæŠ‘æˆ–ç§»è‡³æ&nbsp;‡é¢˜å— |patenttitle| ä¸­ã€‚
%    \begin{macrocode}
  \if false
  \printfield{type}%
  \setunit*{\addspace}%
  %\printfield{number}%å·²æ”¾åˆ°patenttitleä¸­å¤„ç†
  \iflistundef{location}
    {}
    {\setunit*{\addspace}%
    \printtext{%[parens]
      \printlist[][-\value{listtotal}]{location}}}%
  \newunit\newblock
  \usebibmacro{byholder}%
  \newunit\newblock
  \fi
  \printfield{note}%
  \newunit\newblock
%    \end{macrocode}
% æ—¥æœŸåªæ˜¾ç¤ºåˆ°å¹´ã€‚
%    \begin{macrocode}
  %\usebibmacro{newsdate}%
  \usebibmacro{date}%
  %\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}
%
% \subsubsection{å­¦ä½è®ºæ–‡}
%
% è¦†ç›–åŽŸ |manual| çš„åˆ«åã€‚
%    \begin{macrocode}
\DeclareBibliographyDriver{thesis}{%
  \usebibmacro{bibindex}%
  \usebibmacro{begentry}%
  \usebibmacro{author/editor+others/translator+others}%
  \ifnameundef{namea}{}{\setunit{\labelnamepunct}\newblock}%è¿™ä¸€æ®µç”¨äºŽåŽ»é™¤ä½œè€…ä¸å­˜åœ¨æ—¶å¤šå‡ºçš„æ&nbsp;‡ç‚¹
%    \end{macrocode}
% å¢žåŠ&nbsp;å­¦ä½è®ºæ–‡ç±»åž‹çš„æ˜¾ç¤ºã€‚
%    \begin{macrocode}
  %\usebibmacro{title}%
  \printfield[titlecase]{title}%
  \printfield[gbtypeflag]{type}
  \iftoggle{bbx:gbstrict}{}{%
  \newunit%
  \printlist{language}%
  \newunit\newblock
  \usebibmacro{byauthor}}%
  \newunit\newblock
  \usebibmacro{byeditor+others}%å¢žåŠ&nbsp;çš„è¯‘è€…ä¿¡æ¯
  \newunit\newblock
  \iftoggle{bbx:gbfieldtype}{%
    \printfield{type}%
    \setunit*{\addspace}}{}%
  \printfield{number}%
  \newunit\newblock
  \printfield{version}%
  \newunit
  \printfield{note}%
  \newunit\newblock
  \usebibmacro{institution+location+date}%
  %\newunit\newblock
  \usebibmacro{chapter+pages}%
  \iffieldundef{url}{}{%å½“æ²¡æœ‰ç½‘å€æ—¶ä¹Ÿä¸è¾“å‡ºä¿®æ”¹æˆ–æ›´æ–°æ—¥æœŸ
    \usebibmacro{modifydate}}%ä¿®æ”¹æˆ–æ›´æ–°æ—¥æœŸä¸ºå¸¦æ‹¬å·çš„æ—¶é—´
  \usebibmacro{doi+eprint+url}%
  \newunit
  \printfield{pagetotal}%
  \newunit\newblock
  \iftoggle{bbx:isbn}
    {\printfield{isrn}}
    {}%
  \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{macrocode}
%&lt;/bbx&gt;
%    \end{macrocode}
%
% \section{æ–‡æ¡£æ&nbsp;·å¼}
%
% ^^A æœ¬å°èŠ‚åˆç‰ˆå®žçŽ°ä¸»è¦æ¥è‡ª \pkg{fduthesis} æ–‡æ¡£ç±»ã€‚
%
%    \begin{macrocode}
%&lt;*doc-sty&gt;
%&lt;@@=hustdoc&gt;
\RequirePackage
  {
    ulem,
    xcolor-material,
    zref-base,
    listings,
  }
%    \end{macrocode}
%
% \subsection{å†…éƒ¨å‡½æ•°}
%
% \begin{macro}{\@@_patch_cmd:Nnn, \@@_preto_cmd:Nn, \@@_appto_cmd:Nn}
% è¡¥ä¸å·¥å…·ã€‚
%    \begin{macrocode}
\cs_new_protected:Npn \@@_patch_cmd:Nnn #1#2#3
  {
    \ctex_patch_cmd_once:NnnnTF #1 { } {#2} {#3}
      { } { \ctex_patch_failure:N #1 }
  }
\cs_new_protected:Npn \@@_preto_cmd:Nn #1#2
  {
    \ctex_preto_cmd:NnnTF #1 { } {#2}
      { } { \ctex_patch_failure:N #1 }
  }
\cs_new_protected:Npn \@@_appto_cmd:Nn #1#2
  {
    \ctex_appto_cmd:NnnTF #1 { } {#2}
      { } { \ctex_patch_failure:N #1 }
  }
%    \end{macrocode}
% \end{macro}
%
% \subsection{\cls{l3doc} è¡¥ä¸}
%
%    \begin{macrocode}
%&lt;@@=codedoc&gt;
%    \end{macrocode}
%
% \begin{macro}{\@@_typeset_functions:}
% å‡å°‘å±•å¼€æ&nbsp;‡è®°ï¼ˆç”¨æ¥è¡¨æ˜Žä¸­è‹±æ–‡æ¨¡æ¿ä¸­çš„ä¸åŒç”¨æ³•ï¼‰å‰çš„ç©ºæ&nbsp;¼ã€‚
%    \begin{macrocode}
\__hustdoc_patch_cmd:Nnn \@@_typeset_expandability:
  { &amp; } { &amp; \skip_horizontal:n { -0.5em } }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_typeset_functions:, \@@_macro_init:,
%   \@@_macro_dump:}
% å·¦ä¾§è¾¹æ³¨çš„å‡½æ•°åˆ—è¡¨é‡‡ç”¨å•å€è¡Œè·ã€‚
%    \begin{macrocode}
\__hustdoc_preto_cmd:Nn \@@_typeset_functions:
  { \MacroFont }
\__hustdoc_patch_cmd:Nnn \@@_macro_init:
  { \hbox:n } { \MacroFont \hbox:n }
\__hustdoc_patch_cmd:Nnn \@@_macro_dump:
  { \hbox_unpack_drop:N } { \MacroFont \hbox_unpack_drop:N }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_macro_typeset_one:nN}
% åœ¨ \env{macro} çŽ¯å¢ƒçš„ä¾§è¾¹æ&nbsp;ä¸­ï¼Œ\cls{l3doc} æ&nbsp;¹æ®å‘½ä»¤çš„é•¿çŸ­ï¼Œåˆ†åˆ«ç”¨
% æ™®é€šå­—ä½“å’Œç´§ç¼©å­—ä½“è¾“å‡ºã€‚ç„¶è€Œå¾ˆé•¿çš„å‘½ä»¤è¿˜æ˜¯ä¼šè¶…å‡ºé¡µè¾¹ã€‚è¿™é‡Œç”¨ç¼©æ”¾
% ç›’å­çš„æ‰‹æ®µä½¿å¾—é•¿å‘½ä»¤ä¹Ÿå¯æ­£å¸¸æ˜¾ç¤ºã€‚
%    \begin{macrocode}
\cs_set_protected:Npn \@@_macro_typeset_one:nN #1#2
  {
    \vbox_set:Nn \l_@@_macro_box
      {
        \MacroFont
        \vbox_unpack_drop:N \l_@@_macro_box
        \hbox_set:Nn \l_tmpa_box
          { \@@_print_macroname:nN {#1} #2 }
%    \end{macrocode}
% \tn{marginparwidth} å’Œ \tn{marginparsep} åˆ†åˆ«æ˜¯è¾¹æ³¨çš„å®½åº¦åŠå…¶åˆ°ç‰ˆå¿ƒçš„è·ç¦»ï¼Œ
% \tn{labelsep} åˆ™æ˜¯ç¼–å·ç›’å­å³ç«¯ä¸Žæ¡ç›®é¦–è¡Œæ–‡æœ¬ä¹‹é—´çš„è·ç¦»ã€‚
%    \begin{macrocode}
        \dim_set:Nn \l_tmpa_dim
          { \marginparwidth - \labelsep - \marginparsep }
        \dim_compare:nNnT { \box_wd:N \l_tmpa_box } &gt; \l_tmpa_dim
          {
            \box_resize_to_wd_and_ht:Nnn \l_tmpa_box
              { \l_tmpa_dim } { \box_ht:N \l_tmpa_box }
          }
        \hbox_overlap_left:n
          {
            \box_use:N \l_tmpa_box
            \skip_horizontal:n { \marginparsep - \labelsep }
          }
      }
    \int_incr:N \l_@@_macro_int
  }
%    \end{macrocode}
% \end{macro}
%
% \subsection{æ–‡æ¡£å±‚å‘½ä»¤}
%&lt;@@=hustdoc&gt;
%
% \begin{macro}[no-user-doc]{\key}
% ç”¨äºŽåœ¨æ–‡æ¡£ä¸­è¾“å‡ºè‡ªå®šä¹‰ç´¢å¼•çš„å‘½ä»¤ï¼Œä¸»è¦ç”¨äºŽé”®å€¼å¯¹çš„é”®çš„ç´¢å¼•ã€‚ä»…å½“ç´¢å¼•é¡¹çš„çˆ¶åˆ†ç±»ä¸º |option| æ—¶ï¼Œå³ç”¨äºŽæ–‡æ¡£ç±»é€‰é¡¹æ—¶ï¼Œéšè—çˆ¶åˆ†ç±»ã€‚
%  \begin{arguments}
%    \item åœ¨ç´¢å¼•ä¸­æ˜¾ç¤ºé¡¹çš„çˆ¶åˆ†ç±»ï¼Œé»˜è®¤ä¸º \opt{option}ã€‚
%    \item å‘½ä»¤æœ¬ä½“ã€‚
%  \end{arguments}
%    \begin{macrocode}
\DeclareDocumentCommand \key { O{option} m }
  {
    \tl_if_eq:nnTF { #1 } { option }
      { \cmd[module=#1/]{#2} }
      { \cmd[module=#1/]{#1/#2} }
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}[no-user-doc]{\opt}
% è¾“å‡ºé”®å€¼å¯¹çš„å€¼ã€‚
%    \begin{macrocode}
\DeclareDocumentCommand \opt { s m }
  { \IfBooleanTF {#1} { \texttt{\bfseries \upshape #2} } { \texttt{\upshape #2} } }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}[no-user-doc]{\expstar, \rexpstar}
%    \begin{macrocode}
\newcommand\expstar{$\star$}
\newcommand\rexpstar{\ding{73}}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}[int]{\TeX, \LaTeX, \LaTeXe,
%   \pdfTeX, \pdfLaTeX, \XeTeX, \XeLaTeX, \LuaTeX, \LuaLaTeX,
%   \AmSLaTeX, \TeXLive, \MiKTeX, \BibTeX, \biber, \TikZ
% }
% \TeX{} ç›¸å…³æ&nbsp;‡å¿—ã€‚
%    \begin{macrocode}
\def\TeX{\hologo{TeX}}
\def\LaTeX{\hologo{LaTeX}}
\def\LaTeXe{\hologo{LaTeXe}}
\def\pdfTeX{\hologo{pdfTeX}}
\def\pdfLaTeX{\hologo{pdfLaTeX}}
\def\XeTeX{\hologo{XeTeX}}
\def\XeLaTeX{\hologo{XeLaTeX}}
\def\LuaTeX{\hologo{LuaTeX}}
\def\LuaLaTeX{\hologo{LuaLaTeX}}
\def\AmSLaTeX{\hologo{AmSLaTeX}}
\def\TeXLive{\TeX\ Live}
\def\MiKTeX{\hologo{MiKTeX}}
\def\BibTeX{\hologo{BibTeX}}
\def\biber{\hologo{biber}}
%    \end{macrocode}
% è¯¥å®šä¹‰æ¥è‡ª \file{pgfmanual-en-macros.tex}ã€‚
%    \begin{macrocode}
\def\TikZ{Ti\emph{k}Z}
%    \end{macrocode}
% \end{macro}
%
% \subsection{æ–‡æ¡£æ&nbsp;·å¼}
%
% \begin{environment}{bashecode, latexcode}
%    \begin{macrocode}
\lstdefinestyle{style@base}
  {
    basewidth = 0.5 em,
    gobble = 3,
    lineskip = 3 pt,
    frame = l,
    framerule = 1 pt,
    framesep = 0 pt,
    xleftmargin = 2 em,
    xrightmargin = 3 em,
    escapeinside = {(*}{*)},
    breaklines = true,
    basicstyle = \small\ttfamily,
    keywordstyle = \bfseries\color{purple},
    commentstyle = \itshape\color{white!50!gray},
    stringstyle = \color{red},
    backgroundcolor = \color{white!95!gray}
  }
\lstdefinestyle{style@bash}
  {
    style = style@base,
    rulecolor = \color{pink},
    language = bash,
    alsoletter = {-},
    emphstyle = \color{green}
  }
\lstdefinestyle{style@latex}
  {
    style = style@base,
    rulecolor = \color{blue},
    language = [LaTeX]TeX,
    alsoletter = {*, -, .},
    texcsstyle = *\color{purple},
    emphstyle = [1]\color{orange},
    emphstyle = [2]\color{green},
    emphstyle = [3]\bfseries\color{yellow}
  }
\lstnewenvironment{bashecode}[1][]{%
  \lstset{style=style@bash, #1}}{}
\lstnewenvironment{latexcode}[1][]{%
  \lstset{style=style@latex, #1}}{}
%    \end{macrocode}
% \end{environment}
%
% \subsection{\env{macrocode}çŽ¯å¢ƒ}
%
% \subsubsection{ä»£ç&nbsp;è¡Œå¤„ç†}
%
% \begin{macro}[int]{\xmacro@code,\sxmacro@code}
% é‡æ–°å®žçŽ° \env{macrocode} ä¸Ž \env{macrocode*} çŽ¯å¢ƒçš„æ&nbsp;¸å¿ƒåŠŸèƒ½ï¼Œå°†å¯¹ä»£ç&nbsp;é€è¡Œ
% å¤„ç†ã€‚åŽè€…ä¼šå°†ç©ºæ&nbsp;¼æ˜¾ç¤ºä¸ºâ€œ\verb*| |â€ã€‚
%    \begin{macrocode}
\cs_set_protected_nopar:Npn \xmacro@code
  { \@@_marco_code:w }
\cs_set_protected_nopar:Npn \sxmacro@code
  {
    \fontspec_print_visible_spaces:
    \xmacro@code
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_marco_code:w}
%    \begin{macrocode}
\cs_new_protected_nopar:Npn \@@_marco_code:w
  {
%    \end{macrocode}
% æ&nbsp;¹æ® \tn{codeline@index} æ˜¯å¦ä¸º |true| é€‰æ‹©æ˜¯å¦æ˜¾ç¤ºè¡Œå·ã€‚
%    \begin{macrocode}
    \ifcodeline@index
      \@@_marco_code_every_par:n { \@@_code_line_no: }
    \else:
      \@@_marco_code_every_par:n { }
    \fi:
%    \end{macrocode}
% è®¾ç½®ä»£ç&nbsp;æ®µç»“æŸæ&nbsp;‡è®°ä¸ºâ€œ\verb*|%    \end{macrocode}^^M|â€ã€‚
%    \begin{macrocode}
    \@@_make_finish_tag:x { \@currenvir }
%    \end{macrocode}
% å¼€å§‹ \env{macrocode}ã€‚
%    \begin{macrocode}
    \@@_macro_code_start:w
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_marco_code_every_par:n}
% åœ¨æ¯æ®µä¹‹å‰æ’å…¥å†…å®¹ã€‚è¿™é‡Œæ¯æ®µå³ç›¸å½“äºŽæ¯è¡Œã€‚
%    \begin{macrocode}
\cs_new_protected:Npn \@@_marco_code_every_par:n #1
  {
    \everypar
      {
        \everypar {#1}
        \if@inlabel
          \global \@inlabelfalse \@noparlistfalse
          \llap { \box \@labels \hskip \leftskip }
        \fi
        #1
      }
  }
%    \end{macrocode}
% \end{macro}
%
% è®¾ç½® \tn{endlinechar} ä¸º $-1$ï¼Œè¡¨ç¤ºè¡Œæœ«ä¸æ’å…¥ä»»ä½•å­—ç¬¦ï¼ˆå®žé™…ä¸Šç›¸å½“äºŽåœ¨è¡Œå°¾
% æ’å…¥æ³¨é‡Šç¬¦ |%|ï¼‰ã€‚
%    \begin{macrocode}
\group_begin:
  \int_set:Nn \tex_endlinechar:D { -1 }
%    \end{macrocode}
%
% \begin{variable}{\c_@@_active_space_tl}
% æ´»åŠ¨å­—ç¬¦ç±»çš„ç©ºæ&nbsp;¼ï¼ˆASCII ç&nbsp;ä¸º 32ï¼‰ã€‚
%    \begin{macrocode}
  \use:n
    {
      \char_set_catcode_active:n { 32 }
      \tl_const:Nn \c_@@_active_space_tl
    }
    { }
\group_end:
%    \end{macrocode}
% \end{variable}
%
% ASCII ç&nbsp; 13 æ˜¯å›žè½¦ç¬¦ |^^M|ã€‚å°†å…¶è®¾ç½®ä¸ºæ´»åŠ¨å­—ç¬¦ã€‚
%    \begin{macrocode}
\group_begin:
  \char_set_catcode_active:n { 13 }
%    \end{macrocode}
%
% \begin{macro}{\@@_make_finish_tag:n,\@@_make_finish_tag:x}
% \env{macrocode} ç»“å°¾æ&nbsp;‡è®°ã€‚å±•å¼€åŽå˜æˆâ€œ\verb*|%    \end{#1}^^M|â€ã€‚
%    \begin{macrocode}
  \cs_new_protected:Npx \@@_make_finish_tag:n #1
    {
      \tl_set:Nn \exp_not:N \l_@@_macro_code_finish_tl
        {
          \c_percent_str
          \prg_replicate:nn { 4 }
            { \exp_not:o { \c_@@_active_space_tl } }
          \exp_not:o { \active@escape@char } end
          \c_left_brace_str #1 \c_right_brace_str
          \exp_not:N ^^M
        }
    }
  \cs_generate_variant:Nn \@@_make_finish_tag:n { x }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_macro_code_start:w}
% å¼€å§‹ä»£ç&nbsp;çŽ¯å¢ƒã€‚æ­¤å‘½ä»¤ä¸»è¦æ˜¯ä¸ºäº†é˜²æ­¢ |\begin{macrocode}| åŽå‡ºçŽ°å¤šä½™çš„ç©ºè¡Œã€‚
%    \begin{macrocode}
  \cs_new_protected:Npn \@@_macro_code_start:w #1
    {
      \str_if_eq:nnTF {#1} { ^^M }
        { \@@_macro_code_read_line:w }
        { \@@_macro_code_read_line:w #1 }
    }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_macro_code_read_line:w}
% é€è¡Œè¯»å–ä»£ç&nbsp;ï¼Œå¹¶è¿žåŒè¡Œå°¾å›žè½¦ç¬¦ä¸€å¹¶å­˜å…¥ \cs{l_@@_macro_code_line_tl}ã€‚å¦‚æžœè¯¥è¡Œ
% ä¸Žç»“æŸæ&nbsp;‡è®°â€œ\verb*|%    \end{macrocode}^^M|â€ç›¸åŒï¼Œåˆ™ç»“æŸæ­¤ \env{macrocode}ï¼›
% å¦åˆ™ç»§ç»­å¤„ç†è¯¥è¡Œä»£ç&nbsp;ã€‚
%    \begin{macrocode}
  \cs_new_protected:Npn \@@_macro_code_read_line:w #1 ^^M
    {
      \tl_set:Nn \l_@@_macro_code_line_tl { #1 ^^M }
      \tl_if_eq:NNTF
        \l_@@_macro_code_line_tl \l_@@_macro_code_finish_tl
        { \exp_args:Nx \end { \@currenvir } }
        {
          \@@_macro_code_process_line:
          \@@_macro_code_read_line:w
        }
    }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_swap_cr:,\@@_swap_cr_aux:w}
% æŠŠ \cs{l_@@_macro_code_line_tl} ä¸­çš„å›žè½¦ç¬¦ |^^M| æŒªåˆ°å¤–é¢ã€‚
%    \begin{macrocode}
  \cs_new_protected:Npn \@@_swap_cr:
    {
      \exp_after:wN
        \@@_swap_cr_aux:w \l_@@_macro_code_line_tl
    }
  \cs_new_protected:Npn \@@_swap_cr_aux:w #1 ^^M
    {
      \group_insert_after:N ^^M
      \tl_set:Nn \l_@@_macro_code_line_tl {#1}
    }
%    \end{macrocode}
% \end{macro}
%
% \begin{variable}{\c_@@_active_cr_tl}
% æ´»åŠ¨å­—ç¬¦ç±»çš„å›žè½¦ç¬¦ã€‚
%    \begin{macrocode}
  \tl_const:Nn \c_@@_active_cr_tl { ^^M }
\group_end:
%    \end{macrocode}
% \end{variable}
%
% \begin{variable}{\l_@@_macro_code_line_tl,
%   \l_@@_macro_code_finish_tl,
%   \g_@@_macro_code_verbatim_stop_tl}
% åˆ†åˆ«ç”¨æ¥å­˜å‚¨ä»£ç&nbsp;è¡Œã€\env{macrocode} ç»“æŸæ&nbsp;‡è®°ä»¥åŠæŠ„å½•åœæ­¢æ&nbsp;‡è®°ã€‚
%    \begin{macrocode}
\tl_new:N \l_@@_macro_code_line_tl
\tl_new:N \l_@@_macro_code_finish_tl
\tl_new:N \g_@@_macro_code_verbatim_stop_tl
%    \end{macrocode}
% \end{variable}
%
% \begin{macro}{\@@_process_normal_line:}
% æ™®é€šä»£ç&nbsp;è¡Œæ&nbsp;¹æ®å¼€å¤´å­—ç¬¦åˆ†åˆ«å¤„ç†ã€‚
%    \begin{macrocode}
\cs_new_protected_nopar:Npn \@@_process_normal_line:
  {
    \str_case_e:nnF
      { \str_head:N \l_@@_macro_code_line_tl }
      {
%    \end{macrocode}
% ä»¥ |%| å¼€å¤´çš„è¡Œå…ˆç”± \cs{tl_tail:N} åŽ»æŽ‰ |%|ï¼Œä¹‹åŽå†æ£€æŸ¥ |&lt;|ã€‚
%    \begin{macrocode}
        { \c_percent_str }
        {
          \@@_check_angle:x
            { \tl_tail:N \l_@@_macro_code_line_tl }
        }
%    \end{macrocode}
% ä»¥ |#| å¼€å¤´çš„è¡ŒæŒ‰æ³¨é‡Šçš„æ&nbsp;¼å¼è¾“å‡ºã€‚
%    \begin{macrocode}
        { \c_hash_str }
        { \@@_output_comment_line: }
      }
%    \end{macrocode}
% å…¶ä½™æ­£å¸¸è¾“å‡ºã€‚
%    \begin{macrocode}
      { \@@_output_line: }
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_process_verbatim_line:}
% å¤„ç†æŠ„å½•ä»£ç&nbsp;è¡Œï¼ˆä¸æ£€æŸ¥ |%| ä¸Ž |&lt;|ï¼‰ã€‚
%    \begin{macrocode}
\cs_new_protected_nopar:Npn \@@_process_verbatim_line:
  {
%    \end{macrocode}
% å°†è¯¥è¡Œä¸ŽæŠ„å½•åœæ­¢æ&nbsp;‡è®°è¿›è¡Œæ¯”è¾ƒã€‚
%    \begin{macrocode}
    \tl_if_eq:NNTF \l_@@_macro_code_line_tl
        \g_@@_macro_code_verbatim_stop_tl
%    \end{macrocode}
% è‹¥ç›¸åŒï¼Œåˆ™ç»“æŸæŠ„å½•çŽ¯å¢ƒï¼Œæ¸…ç©ºæŠ„å½•åœæ­¢æ&nbsp;‡è®°ï¼Œå¹¶è¾“å‡ºè¯¥æ&nbsp;‡è®°ï¼›
%    \begin{macrocode}
      {
        \tl_gclear:N \g_@@_macro_code_verbatim_stop_tl
        \cs_gset_eq:NN \@@_macro_code_process_line:
          \@@_process_normal_line:
        \@@_output_module:nn
          { \color { verb@guard } }
          {
            \@@_swap_cr:
            \@@_module_pop:n { \l_@@_macro_code_line_tl }
          }
      }
%    \end{macrocode}
% å¦åˆ™ç›´æŽ¥è¾“å‡ºæŠ„å½•ä»£ç&nbsp;ã€‚
%    \begin{macrocode}
      { \tl_use:N \l_@@_macro_code_line_tl }
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_macro_code_process_line:}
% å¤„ç†ä»£ç&nbsp;è¡Œã€‚è¯¥å‘½ä»¤çš„ä½œç”¨å¦‚ä¸‹ï¼š
% \begin{itemize}
%   \item æ­£å¸¸æƒ…å†µä¸‹ï¼Œç­‰åŒäºŽ \cs{@@_process_normal_line:}ï¼›
%   \item åœ¨ \cs{DontCheckModules} ä¹‹åŽï¼Œç­‰ä»·äºŽ \cs{@@_output_line:}ï¼Œ
%     å³ä¸æ£€æŸ¥æ¨¡å—æ&nbsp;‡è®°ï¼Œç›´æŽ¥è¾“å‡ºï¼›
%   \item åœ¨æŠ„å½•çŽ¯å¢ƒä¸­ï¼Œç­‰ä»·äºŽ \cs{@@_process_verbatim_line:}ï¼Œ
%     æ­¤æ—¶å°†ä¸å†ç‰¹æ®Šå¤„ç†ä»¥ |%| å¼€å¤´çš„ä»£ç&nbsp;è¡Œã€‚
% \end{itemize}
%    \begin{macrocode}
\cs_new_eq:NN \@@_macro_code_process_line:
  \@@_process_normal_line:
%    \end{macrocode}
% \end{macro}
%
% \subsubsection{æ¨¡å—æ&nbsp;‡è®°å¤„ç†}
%
% \begin{macro}[int]{\CheckModules, \DontCheckModules}
% é€‰æ‹©æ˜¯å¦æ£€æŸ¥æ¨¡å—æ&nbsp;‡è®°ã€‚è¿™ä¸¤ä¸ªå‘½ä»¤åœ¨ \pkg{doc} å®åŒ…ä¸­å·²æœ‰å®šä¹‰ï¼Œæ­¤å¤„é‡æ–°å£°æ˜Žã€‚
%    \begin{macrocode}
\DeclareDocumentCommand \CheckModules { }
  {
    \cs_set_eq:NN \@@_macro_code_process_line:
      \@@_process_normal_line:
  }
\DeclareDocumentCommand \DontCheckModules { }
  {
    \cs_set_eq:NN \@@_macro_code_process_line:
      \@@_output_line:
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_check_angle:n,\@@_check_angle:x}
% æ£€æŸ¥ç¬¬ä¸€ä¸ªå­—ç¬¦æ˜¯å¦æ˜¯ |&lt;|ã€‚è‹¥æ˜¯ï¼Œåˆ™æ£€æŸ¥æ¨¡å—ï¼›å¦åˆ™ç«‹åˆ»è¾“å‡ºæ”¹è¡Œã€‚
% è¯¥å‡½æ•°çš„å‚æ•°ä¸å¸¦ |%|ã€‚
%    \begin{macrocode}
\cs_new_protected:Npn \@@_check_angle:n #1
  {
    \str_if_eq:eeTF { \str_head:n {#1} } { &lt; }
      { \@@_check_module:x { \tl_tail:n {#1} } }
      { \@@_output_comment_line: }
  }
\cs_generate_variant:Nn \@@_check_angle:n { x }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_check_module:n,\@@_check_module:x}
% æ£€æŸ¥ç´§è·Ÿ |&lt;| ä¹‹åŽçš„å­—ç¬¦ã€‚å…±æœ‰å››ç§æƒ…å†µï¼š
% \begin{itemize}
%   \item |*|ï¼šæ¨¡å—å¼€å§‹ï¼ˆ|%&lt;*|\meta{module}|&gt;|ï¼‰ï¼›
%   \item |/|ï¼šæ¨¡å—ç»“æŸï¼ˆ|%&lt;/|\meta{module}|&gt;|ï¼‰ï¼›
%   \item |@|ï¼šåå­—ç©ºé—´ï¼ˆ|%&lt;@@=|\meta{namespace}|&gt;|ï¼‰ï¼›
%   \item |&lt;|ï¼šæŠ„å½•çŽ¯å¢ƒå¼€å§‹ï¼ˆ|%&lt;&lt;|\meta{end-tag}ï¼‰ã€‚
% \end{itemize}
% è‹¥ä¸æ˜¯è¿™å‡&nbsp;ç§æƒ…å†µï¼Œåˆ™ä¸ºå•ç‹¬ä¸€è¡Œçš„ç‹¬ç«‹æ¨¡å—ï¼ˆ|%&lt;|\meta{module}|&gt;|ï¼‰ã€‚
%    \begin{macrocode}
\cs_new_protected:Npn \@@_check_module:n #1
  {
    \str_case_e:nnF { \str_head:n {#1} }
      {
        { * } { \@@_module_star:w }
        { / } { \@@_module_slash:w }
        { @ } { \@@_module_at:w }
        { &lt; } { \@@_module_verb:w }
      }
      { \@@_module_pm:w }
%    \end{macrocode}
% å‚æ•° |#1| å°†è¢«ä¸Šé¢å‡&nbsp;ä¸ª |:w| åž‹å‡½æ•°åƒæŽ‰ã€‚
%    \begin{macrocode}
    #1 \q_stop
  }
\cs_generate_variant:Nn \@@_check_module:n { x }
%    \end{macrocode}
% \end{macro}
%
% è®¾ç½® |&gt;| ä¸ºæ´»åŠ¨å­—ç¬¦ã€‚
%    \begin{macrocode}
\group_begin:
  \char_set_catcode_active:N \&gt;
%    \end{macrocode}
%
% \begin{macro}{\@@_module_star:w}
% æ¨¡å—å¼€å§‹æ&nbsp;‡è®°ã€‚
% \begin{arguments}
%   \item |*|\meta{module}
%   \item ä¹‹åŽçš„ä»£ç&nbsp;
% \end{arguments}
%    \begin{macrocode}
  \cs_new_protected:Npn \@@_module_star:w #1 &gt; #2 \q_stop
    {
%    \end{macrocode}
% ä¸´æ—¶å˜é‡ \cs{l_@@_tmpa_tl} ä¿å­˜ |&lt;*|\meta{module}|&gt;| ä¹‹åŽçš„éƒ¨åˆ†ï¼Œå³çœŸå®žä»£ç&nbsp;ã€‚
%    \begin{macrocode}
      \tl_set:Nn \l_@@_tmpa_tl {#2}
%    \end{macrocode}
% åˆ¤æ–­è¯¥è¡Œæ˜¯å¦ä¸ºç©ºï¼ˆåªå«ä¸€ä¸ªå›žè½¦ç¬¦ |^^M|ï¼‰ã€‚
%    \begin{macrocode}
      \tl_if_eq:NNTF \l_@@_tmpa_tl \c_@@_active_cr_tl
%    \end{macrocode}
% è‹¥æ˜¯ï¼Œåˆ™å°† |&lt;|\meta{module}|&gt;| æ”¾åœ¨è¡Œå·çš„å³ä¾§ï¼›
%    \begin{macrocode}
        {
          \@@_output_module:nn
            { \@@_star_color: }
            {
              \@@_module_push:n
                { \@@_module_angle:n {#1} }
            }
        }
%    \end{macrocode}
% å¦åˆ™æ”¾åœ¨å·¦ä¾§ï¼Œå¹¶è¾“å‡ºç›¸åº”ä»£ç&nbsp;ã€‚
%    \begin{macrocode}
        {
          \@@_output_module_left:nn
            { \@@_star_color: }
            {
              \@@_module_push:n
                { \@@_module_angle:n {#1} }
            }
        }
      \@@_output_line:n {#2}
    }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_module_slash:w}
% æ¨¡å—ç»“æŸæ&nbsp;‡è®°ã€‚ç»“æž„ä¸Ž \cs{@@_module_star:w} ç›¸åŒã€‚
% \begin{arguments}
%   \item |/|\meta{module}
%   \item ä¹‹åŽçš„ä»£ç&nbsp;
% \end{arguments}
%    \begin{macrocode}
  \cs_new_protected:Npn \@@_module_slash:w #1 &gt; #2 \q_stop
    {
      \tl_set:Nn \l_@@_tmpa_tl {#2}
      \tl_if_eq:NNTF \l_@@_tmpa_tl \c_@@_active_cr_tl
        {
          \@@_output_module:nn
            { \@@_slash_color: }
            {
              \@@_module_pop:n
                { \@@_module_angle:n {#1} }
            }
        }
        {
          \@@_output_module_left:nn
            { \@@_slash_color: }
            {
              \@@_module_pop:n
                { \@@_module_angle:n {#1} }
            }
        }
      \@@_output_line:n {#2}
    }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_module_at:w}
% åå­—ç©ºé—´ã€‚
% \begin{arguments}
%   \item åå­—ç©ºé—´çš„åç§°ï¼ˆä¸å« |@@=|ï¼‰
%   \item ä¹‹åŽçš„ä»£ç&nbsp;
% \end{arguments}
%    \begin{macrocode}
  \cs_new_protected:Npn \@@_module_at:w @ @ = #1 &gt; #2 \q_stop
    {
      \@@_output_module:nn
        { \color { at@guard } }
        { \@@_module_angle:n { @ @ = #1 } }
%    \end{macrocode}
% è®¾ç½®åå­—ç©ºé—´ä¸º |#1|ã€‚\cls{l3doc} ä¸­å°†åå­—ç©ºé—´ç§°ä¸ºâ€œæ¨¡å—â€ï¼ˆmoduleï¼‰ï¼Œ
% æ³¨æ„ä¸è¦æ··æ·†ã€‚
%    \begin{macrocode}
      \tl_gset:Nn \g__codedoc_module_name_tl {#1}
      \@@_output_line:n {#2}
    }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_module_verb:w}
% æŠ„å½•å¼€å§‹ã€‚|#1|: |&lt;|\meta{end-tag}ï¼Œåªæœ‰ä¸€ä¸ª |&lt;|ã€‚\meta{end-tag} çš„æœ€åŽä¼š
% å¸¦æœ‰ä¸€ä¸ªå›žè½¦ç¬¦ |^^M|ã€‚
%    \begin{macrocode}
  \cs_new_protected:Npn \@@_module_verb:w #1 \q_stop
    {
%    \end{macrocode}
% é‡å®šä¹‰ \cs{@@_macro_code_process_line:}ï¼Œç”¨ä»¥è¾“å‡ºæŠ„å½•è¡Œã€‚
%    \begin{macrocode}
      \cs_gset_eq:NN \@@_macro_code_process_line:
        \@@_process_verbatim_line:
%    \end{macrocode}
% è®¾ç½®æŠ„å½•åœæ­¢æ&nbsp;‡è®°ã€‚ç”¨ \cs{tl_tail:n} åŽ»æŽ‰å¼€å¤´çš„ |&lt;|ã€‚
%    \begin{macrocode}
      \tl_gset:Nx \g_@@_macro_code_verbatim_stop_tl
        { \c_percent_str \tl_tail:n {#1} }
%    \end{macrocode}
% è¾“å‡º |%&lt;&lt;|\meta{end-tag}ã€‚
%    \begin{macrocode}
      \@@_output_module:nn
        { \color { verb@guard } }
        {
          \@@_swap_cr:
          \@@_module_push:n { \l_@@_macro_code_line_tl }
        }
    }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_module_pm:w}
% å¤„ç†å•ç‹¬ä¸€è¡Œçš„æ¨¡å—ã€‚|&lt;|\meta{module}|&gt;| æ”¾åœ¨è¡Œå·çš„å·¦ä¾§ã€‚
% \begin{arguments}
%   \item \meta{module}
%   \item ä¹‹åŽçš„ä»£ç&nbsp;
% \end{arguments}
%    \begin{macrocode}
  \cs_new_protected:Npn \@@_module_pm:w #1 &gt; #2 \q_stop
    {
      \@@_output_module_left:nn
        { \@@_pm_color: }
        { \@@_module_angle:n {#1} }
      \@@_output_line:n {#2}
    }
\group_end:
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_output_line:n,\@@_output_line:}
% è¾“å‡ºä»£ç&nbsp;è¡Œã€‚å‚æ•°å°†è¢«å­˜å…¥ \cs{l_@@_macro_code_line_tl}ï¼Œ
% å†ç”±ä¸å¸¦å‚æ•°çš„ç‰ˆæœ¬è°ƒç”¨ã€‚
%    \begin{macrocode}
\cs_new_protected:Npn \@@_output_line:n #1
  {
    \tl_set:Nn \l_@@_macro_code_line_tl {#1}
%    \end{macrocode}
% è‹¥ä¸ºç©ºè¡Œï¼ˆåªå«ä¸€ä¸ª |^^M|ï¼‰ï¼Œåˆ™ç›´æŽ¥è¾“å‡ºï¼ˆæ¢è¡Œï¼‰ã€‚
%    \begin{macrocode}
    \tl_if_eq:NNTF
      \l_@@_macro_code_line_tl \c_@@_active_cr_tl
      { \tl_use:N \l_@@_macro_code_line_tl }
      {
%    \end{macrocode}
% æ£€æŸ¥å¼€å¤´æ˜¯å¦ä¸º |%|ï¼Œæ®æ­¤åˆ†åˆ«å¤„ç†ã€‚
%    \begin{macrocode}
        \str_if_eq:eeTF
          { \str_head:N \l_@@_macro_code_line_tl } { \c_percent_str }
          { \@@_output_comment_line: } { \@@_output_line: }
      }
  }
\cs_new_protected_nopar:Npn \@@_output_line:
  {
    \tex_noindent:D
%    \end{macrocode}
% æ­¤å¤„å°†æŠŠ |@@| æ›¿æ¢ä¸ºç›¸åº”çš„åå­—ç©ºé—´ã€‚
%    \begin{macrocode}
    \@@_replace_at_at:N \l_@@_macro_code_line_tl
    \tl_use:N \l_@@_macro_code_line_tl
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_output_comment_line:}
% è¾“å‡ºæ³¨é‡Šä»£ç&nbsp;è¡Œã€‚ç”¨ç°è‰²ã€æ–œä½“æ˜¾ç¤ºã€‚
%    \begin{macrocode}
\cs_new_protected:Npn \@@_output_comment_line:
  {
    \tex_noindent:D
    \group_begin:
      \__hustdoc_swap_cr:
      \color { code@gray } \slshape \@@_output_line:
    \group_end:
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_replace_at_at:N,
%   \@@_replace_at_at_aux:Nn,\@@_replace_at_at_aux:No}
% æŠŠ |@@| æ›¿æ¢ä¸ºç›¸åº”çš„åå­—ç©ºé—´ã€‚å…¶åç§°å­˜æ”¾åœ¨å…¨å±€å˜é‡
% \cs{g__codedoc_module_name_tl} ä¸­ã€‚å®ƒä¸ºç©ºæ—¶ï¼ˆ|%&lt;@@=&gt;|ï¼‰ï¼Œä¸åšæ›¿æ¢ã€‚
%    \begin{macrocode}
\cs_new_protected:Npn \@@_replace_at_at:N #1
  {
    \tl_if_empty:NF \g__codedoc_module_name_tl
      { \@@_replace_at_at_aux:No #1 \g__codedoc_module_name_tl }
  }
\cs_new_protected:Npn \@@_replace_at_at_aux:Nn #1#2
  {
%    \end{macrocode}
% ä»¥ä¸‹ä»£ç&nbsp;åˆ†åˆ«å¯¹åº”ä¸¤ç§åå­—ç©ºé—´çš„æ›¿æ¢ï¼š
% \begin{itemize}
%   \item å†…éƒ¨å˜é‡ï¼š|\|\meta{type}|_@@_|\meta{name} $\to$
%     |\|\meta{type}|__|\meta{namespace}|_|\meta{name}ï¼›
%   \item å†…éƒ¨å‡½æ•°ï¼š|\@@_|\meta{name}â€ $\to$
%     |\__|\meta{namespace}|_|\meta{name}â€ï¼‰ã€‚
% \end{itemize}
%    \begin{macrocode}
    \tl_replace_all:Nnn #1 { _ @ @ } { _ _ #2 }
    \tl_replace_all:Nnn #1 { @ @ } { _ _ #2 }
  }
\cs_generate_variant:Nn \@@_replace_at_at_aux:Nn { No }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_module_push:n,
%   \@@_module_push_aux:nn,\@@_module_push_aux:on}
% å°†æ¨¡å—ååŽ‹å…¥æ&nbsp;ˆä¸­ã€‚æ­¤å¤„çš„æ&nbsp;ˆä¸»è¦ç”¨æ¥å¤„ç†æ¨¡å—åï¼ˆåŒ…æ‹¬æŠ„å½•æ&nbsp;‡è®°ï¼‰ä¹‹é—´çš„è¶…é“¾æŽ¥ã€‚
%    \begin{macrocode}
\cs_new_protected_nopar:Npn \@@_module_push:n
  { \@@_module_push_aux:on { \int_use:N \c@HD@hypercount } }
\cs_new_protected:Npn \@@_module_push_aux:nn #1
  {
    \seq_gpush:Nn \g_@@_module_dest_seq {#1}
    \hypersetup { hidelinks }
    \exp_args:Nx \hdclindex
      { \zref@extractdefault { HD.#1 } { guard@end } { 1 } } { }
  }
\cs_generate_variant:Nn \@@_module_push_aux:nn { on }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_module_pop:n,
%   \@@_module_pop_aux:nn,\@@_module_pop_aux:on}
% å°†æ¨¡å—åé‡Šæ”¾å‡ºæ&nbsp;ˆã€‚
%    \begin{macrocode}
\cs_new_protected_nopar:Npn \@@_module_pop:n
  {
    \seq_gpop:NNTF \g_@@_module_dest_seq \l_@@_tmpa_tl
      { \@@_module_pop_aux:on { \l_@@_tmpa_tl } }
      { \BOOM \use:n }
  }
\cs_new_protected:Npn \@@_module_pop_aux:nn #1
  {
    \zref@labelbylist { HD.#1 } { hustdoc }
    \hypersetup { hidelinks }
    \hdclindex {#1} { }
  }
\cs_generate_variant:Nn \@@_module_pop_aux:nn { on }
%    \end{macrocode}
% \end{macro}
%
% \begin{variable}{\g_@@_module_dest_seq}
% å­˜æ”¾æ¨¡å—åçš„åºåˆ—ï¼ˆæ&nbsp;ˆï¼‰ã€‚
%    \begin{macrocode}
\seq_new:N \g_@@_module_dest_seq
%    \end{macrocode}
% \end{variable}
%
% å¤„ç†è¡Œå·è¶…é“¾æŽ¥ã€‚ä½¿ç”¨ \pkg{zref} å®åŒ…ã€‚
%    \begin{macrocode}
\zref@newlist { hustdoc }
\zref@newprop { guard@end } [ 1 ]
  { \int_eval:n { \c@HD@hypercount - 1 } }
\zref@addprop { hustdoc } { guard@end }
%    \end{macrocode}
%
% \subsubsection{æ&nbsp;¼å¼å¤„ç†}
%
% \begin{macro}[int]{\MacroFont}
% ä»£ç&nbsp;éƒ¨åˆ†çš„å­—ä½“ã€‚
%    \begin{macrocode}
\cs_set_protected:Npn \MacroFont
  {
    \linespread { 1.05 }
    \small \ttfamily \mdseries \upshape
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_output_module:nn,\@@_output_module_left:nn}
% è¾“å‡ºæ¨¡å—åï¼ˆåˆ†è¡Œå†…å’Œè¡Œå·å·¦ä¾§ä¸¤ç§ï¼‰ã€‚
% \begin{arguments}
%   \item é¢œè‰²ç­‰æ&nbsp;·å¼
%   \item æ¨¡å—å
% \end{arguments}
%    \begin{macrocode}
\cs_new_protected:Npn \@@_output_module:nn #1#2
  {
    \tex_noindent:D
    \group_begin:
      #1
      \footnotesize \normalfont \sffamily #2
    \group_end:
  }
\cs_new_protected:Npn \@@_output_module_left:nn #1#2
  {
    \tex_noindent:D
    \hbox_overlap_left:n
      {
        \@@_output_module:nn {#1} {#2}
        \skip_horizontal:n { \leftskip + \smallskipamount }
      }
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_star_color:,\@@_slash_color:,\@@_pm_color:}
% é€‰æ‹©æ¨¡å—æ&nbsp;‡è®°çš„é¢œè‰²ã€‚æ¨¡å—æ&nbsp;‡è®°çš„é¢œè‰²ä¼šæ&nbsp;¹æ®åµŒå¥—å±‚æ¬¡è€Œæ”¹å˜ã€‚
%    \begin{macrocode}
\cs_new_protected_nopar:Npn \@@_star_color:
  {
    \seq_gpop:NNTF \g_@@_star_color_seq \current@color
      { \set@color }
      { \@@_select_color: }
    \seq_gpush:No \g_@@_slash_color_seq { \current@color }
  }
\cs_new_protected_nopar:Npn \@@_slash_color:
  {
    \seq_gpop:NNTF \g_@@_slash_color_seq \current@color
      {
        \set@color
        \seq_gpush:No \g_@@_star_color_seq { \current@color }
      }
% TODO: éœ€è¦æŠ¥é”™ï¼šstar ä¸Ž slash æ²¡æœ‰åŒ¹é…
      { \BOOM }
  }
\cs_new_protected_nopar:Npn \@@_pm_color:
  {
    \seq_get:NNTF \g_@@_star_color_seq \current@color
      { \set@color }
      {
        \@@_select_color:
        \seq_gpush:No \g_@@_star_color_seq { \current@color }
      }
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{variable}{\g_@@_star_color_seq,\g_@@_slash_color_seq}
% å­˜æ”¾æ¨¡å—æ&nbsp;‡è®°é¢œè‰²çš„åºåˆ—ã€‚
%    \begin{macrocode}
\seq_new:N \g_@@_star_color_seq
\seq_new:N \g_@@_slash_color_seq
%    \end{macrocode}
% \end{variable}
%
% \begin{macro}{\@@_select_color:}
% \begin{macro}[int]{guard@series}
% è®¾ç½®æ¨¡å—æ&nbsp;‡è®°çš„è‰²ç³»ã€‚
%    \begin{macrocode}
\cs_new_protected_nopar:Npn \@@_select_color:
  { \color { guard@series!!+ } }
\definecolorseries { guard@series }
  { cmyk } { last } { blue } { purple }
%    \end{macrocode}
% \end{macro}
% \end{macro}
%
% è®¾ç½®è‰²ç³»çš„å¢žé‡å¤§å°ã€‚å¯é€‰å‚æ•° |3| æ„å‘³ç€åŸºè‰²ï¼ˆblueï¼‰ä¸Žæœ«è‰²ï¼ˆpurpleï¼‰ä¹‹é—´å°†è¢«
% ç­‰åˆ†ä¸ºä¸‰ä»½ã€‚è¯¥æ•°å­—æ¯”åµŒå¥—æœ€å¤§æ·±åº¦å° 1ã€‚
%    \begin{macrocode}
\resetcolorseries [ 3 ] { guard@series }
%    \end{macrocode}
%
% \begin{macro}[int]{verb@guard,at@guard,code@gray}
% è®¾ç½®é¢œè‰²ã€‚
%    \begin{macrocode}
\definecolor { verb@guard } { named } { MaterialLime600 }
\definecolor { at@guard } { named } { MaterialPink }
\definecolor { code@gray } { named } { MaterialGrey }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_module_angle:n}
% è¾“å‡ºâ€œ$\langle\cdots\rangle$â€ã€‚
%    \begin{macrocode}
\cs_new_protected:Npn \@@_module_angle:n #1
  { &lt; #1 &gt; }
%   { \textlangle #1 \textrangle }
%   { \ensuremath \langle #1 \ensuremath \rangle }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_code_line_no:}
% è¡Œå·ã€‚è®¾ç½®ä¸ºé˜¿æ‹‰ä¼¯æ•°å­—ã€‚
%    \begin{macrocode}
\cs_new_protected_nopar:Npn \@@_code_line_no:
  {
    \int_gincr:N \c@CodelineNo
    \hbox_overlap_left:n
      {
        \hbox_to_wd:nn
          { \MacroIndent }
          {
            \HD@target
            \tex_hss:D \@@_code_line_no_style:
            \theCodelineNo \enspace
          }
        \tex_kern:D \@totalleftmargin
      }
  }
\tl_set:Nn \theCodelineNo { \arabic { CodelineNo } }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_code_line_no_style:}
% è¡Œå·æ&nbsp;¼å¼ã€‚
%    \begin{macrocode}
\cs_new_protected_nopar:Npn \@@_code_line_no_style:
  { \color { code@gray } \normalfont \sffamily \tiny }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}[int]{\HD@SetMacroIndent}
% è®¾ç½®ä»£ç&nbsp;ç¼©è¿›ï¼ˆè¡Œå·ä¸€æ&nbsp;çš„å®½åº¦ï¼‰ã€‚è¯¥å‘½ä»¤ä¼šå†™è¿› |.aux| è¾…åŠ©æ–‡ä»¶ï¼Œ
% ä»¥ä¾¿åœ¨äºŒæ¬¡ç¼–è¯‘æ—¶ç¡®å®šæœ€å¤§è¡Œå·å®½åº¦ã€‚
%    \begin{macrocode}
\cs_set_protected:Npn \HD@SetMacroIndent #1
  {
    \group_begin:
      \settowidth \MacroIndent
        {
          \@@_code_line_no_style:
          \prg_replicate:nn { \tl_count:n {#1} } { 0 }
          \enspace
        }
      \dim_gset_eq:NN \MacroIndent \MacroIndent
    \group_end:
  }
%    \end{macrocode}
% \end{macro}
%

% \subsection{ä¿®è®¢è®°å½•}
%
% \begin{macro}{\@@_ltx_changes:nnn}
% ä¿å­˜ \pkg{doc} ä¸­ \tn{changes@} çš„å®šä¹‰ã€‚
%    \begin{macrocode}
\cs_new_eq:NN \@@_ltx_changes:nnn \changes@
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}[int]{\changes@}
% é‡å®šä¹‰ \tn{changes@}ï¼Œåœ¨ç‰ˆæœ¬å·ä¸€è¡Œæ˜¾ç¤ºä¿®æ”¹æ—¥æœŸã€‚
%    \begin{macrocode}
\cs_set_protected:Npn \changes@ #1#2
  {
    \@@_save_version_date:nn {#1} {#2}
    \@@_ltx_changes:nnn {#1} {#2}
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{variable}{\g_@@_version_date_prop}
% å­˜æ”¾ç‰ˆæœ¬å·ä¸Žå¯¹åº”çš„ä¿®æ”¹æ—¥æœŸã€‚å…¶ä¸­é”®ä¸ºç‰ˆæœ¬å·ï¼Œå€¼ä¸º |{å¼€å§‹æ—¥æœŸï¼Œç»“æŸæ—¥æœŸ}|ã€‚
% å¼€å§‹æ—¥æœŸä¸Žç»“æŸæ—¥æœŸå¯ä»¥ç›¸åŒã€‚
%    \begin{macrocode}
\prop_new:N \g_@@_version_date_prop
%    \end{macrocode}
% \end{variable}
%
% \begin{macro}{\@@_save_version_date:nn}
% |nn| ç‰ˆæœ¬æœ€ç»ˆå°†è¢« \tn{changes@} è°ƒç”¨ã€‚
% \begin{arguments}
%   \item ç‰ˆæœ¬å·
%   \item æ—¥æœŸ
% \end{arguments}
% å®ƒä»¬åˆ†åˆ«å¯¹åº” \tn{change} çš„å‰ä¸¤ä¸ªå‚æ•°ï¼ˆç¬¬ä¸‰ä¸ªæ˜¯è¯´æ˜Žæ–‡å­—ï¼‰ã€‚
%    \begin{macrocode}
\cs_new_protected:Npn \@@_save_version_date:nn #1#2
  {
    \prop_get:NnNTF \g_@@_version_date_prop
      {#1} \l_@@_tmpa_tl
      {
%    \end{macrocode}
% \cs{l_@@_tmpa_tl} ç›¸å½“äºŽä¸¤ä¸ªå‚æ•°ï¼ˆå¼€å§‹æ—¥æœŸã€ç»“æŸæ—¥æœŸï¼‰ï¼Œå›&nbsp;æ­¤éœ€è¦æå‰å±•å¼€ã€‚
%    \begin{macrocode}
        \exp_after:wN
          \@@_save_version_date_aux:nnnn \l_@@_tmpa_tl
        {#2} {#1}
      }
      { \@@_save_version_date_aux:nnn {#1} {#2} {#2} }
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_save_version_date_aux:nnnn}
% \begin{arguments}
%   \item åŽŸå¼€å§‹æ—¥æœŸ
%   \item åŽŸç»“æŸæ—¥æœŸï¼ˆæ˜¾ç„¶åº”æœ‰ |#1| &lt; |#2|ï¼‰
%   \item æ–°è¯»å…¥çš„æ—¥æœŸ
%   \item ç‰ˆæœ¬å·
% \end{arguments}
% å¦‚æžœ |#3| &lt; |#1|ï¼Œåˆ™è¯»å…¥æ—¥æœŸ |#3|ã€|#2|ï¼›
% å¦‚æžœ |#3| &gt; |#2|ï¼Œåˆ™è¯»å…¥æ—¥æœŸ |#1|ã€|#3|ã€‚
%    \begin{macrocode}
\cs_new_protected:Npn \@@_save_version_date_aux:nnnn #1#2#3#4
  {
    \@@_if_date_later:nnTF {#1} {#3}
      { \@@_save_version_date_aux:nnn {#4} {#3} {#2} }
      {
        \@@_if_date_later:nnT {#3} {#2}
          { \@@_save_version_date_aux:nnn {#4} {#1} {#3} }
      }
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_save_version_date_aux:nnn}
% å°†ç‰ˆæœ¬å·å’Œæ—¥æœŸå­˜å…¥ \cs{g_@@_version_date_prop}ã€‚
% \begin{arguments}
%   \item ç‰ˆæœ¬å·
%   \item å¼€å§‹æ—¥æœŸ
%   \item ç»“æŸæ—¥æœŸ
% \end{arguments}
%    \begin{macrocode}
\cs_new_protected:Npn \@@_save_version_date_aux:nnn #1#2#3
  { \prop_gput:Nnn \g_@@_version_date_prop {#1} { {#2} {#3} } }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}[TF]{\@@_if_date_later:nn}
% \begin{macro}{\@@_parse_date:w}
% æ¯”è¾ƒä¸¤ä¸ªæ—¥æœŸã€‚å¦‚æžœ |#1| åœ¨ |#2| ä¹‹åŽï¼Œåˆ™ä¸º |true|ï¼›åä¹‹ä¸º |false|ã€‚
% æ—¥æœŸçš„æ&nbsp;¼å¼ä¸º |YYYY-MM-DD|ã€‚æ¯”è¾ƒæ–¹æ³•æ˜¯ç›´æŽ¥å°†æ—¥æœŸåŒ–æˆ 8 ä½æ•°å­—ï¼Œ
% æ‰€ä»¥æœˆã€æ—¥å‰çš„ 0 ä¸å¯ä»¥çœç•¥ã€‚
%    \begin{macrocode}
\prg_new_conditional:Npnn \@@_if_date_later:nn #1#2 { TF, T }
  {
    \if_int_compare:w
        \@@_parse_date:w #1 / / / 0 \q_stop &gt;
        \@@_parse_date:w #2 / / / 0 \q_stop \exp_stop_f:
      \prg_return_true:
    \else:
      \prg_return_false:
    \fi:
  }
\cs_new:Npn \@@_parse_date:w #1-#2-#3/ #4 \q_stop
  { #1#2#3 }
%    \end{macrocode}
% \end{macro}
% \end{macro}
%
% \begin{macro}[int]{\CTEX@versionitem}
% ç‰ˆæœ¬æ¡ç›®æ&nbsp;‡ç­¾ã€‚å¦‚æžœç‰ˆæœ¬å·ä¸åœ¨ \cs{g_@@_version_date_prop} é‡Œé¢ï¼Œ
% åˆ™åˆ©ç”¨æœªå®šä¹‰çš„ \cs{BOOM} æŠ¥é”™ã€‚
%    \begin{macrocode}
\cs_new_protected:Npn \CTEX@versionitem #1 \efill
  {
    \@idxitem
    \prop_get:NnNTF \g_@@_version_date_prop
      {#1} \l_@@_tmpa_tl
      {
        \exp_after:wN
          \@@_print_version_date:nnn \l_@@_tmpa_tl
        {#1}
      }
      { \BOOM }
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_print_version_date:nnn}
% è¾“å‡ºç‰ˆæœ¬å·å’Œæ—¥æœŸã€‚å¦‚æžœå¼€å§‹æ—¥æœŸå’Œç»“æŸæ—¥æœŸç›¸åŒï¼Œåˆ™åªè¾“å‡ºä¸€é¡¹ã€‚
% \begin{arguments}
%   \item å¼€å§‹æ—¥æœŸ
%   \item ç»“æŸæ—¥æœŸ
%   \item ç‰ˆæœ¬å·
% \end{arguments}
%    \begin{macrocode}
\cs_new_protected:Npn \@@_print_version_date:nnn #1#2#3
  {
    \noindent
    \Hy@raisedlink { \belowpdfbookmark {#3} { HD.#3 } }
    \textbf {#3} \hfill
    \hbox:n
      {
        \footnotesize
        \str_if_eq:nnTF {#1} {#2}
          { ( #1 ) } { ( #1 \c_space_tl \c_tilde_str \c_space_tl #2 ) }
      }
    \par \nopagebreak
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}[int]{\HDorg@theglossary}
% è¯¥å‘½ä»¤ç”± \pkg{hypdoc} å®åŒ…å®šä¹‰ï¼Œç”¨äºŽå­˜æ”¾æ&nbsp;‡å‡†æ–‡æ¡£ç±» \cls{book} ä¸­å®šä¹‰çš„
% \tn{theindex} å‘½ä»¤ã€‚æ­¤å¤„çš„è¡¥ä¸å°†åœ¨ç‰ˆæœ¬å·ä¸€è¡Œæœ€åŽåŠ&nbsp;ä¸Šä¿®æ”¹æ—¥æœŸã€‚
%    \begin{macrocode}
\ctex_patch_cmd:Nnn \HDorg@theglossary
  { \let \item \@idxitem }
  { \let \item \CTEX@versionitem }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}[int]{\@wrglossary}
% è¯¥å‘½ä»¤ç”± \LaTeXe{} å†…æ&nbsp;¸å®šä¹‰ï¼Œåˆç”± \pkg{hypdoc} å®åŒ…ä½œäº†ä¿®æ”¹ã€‚
% æ­¤å¤„çš„è¡¥ä¸ä½¿å¾—ä¿®è®¢è®°å½•æ¡ç›®çš„é¡µç&nbsp;èƒ½å¤ŸæŒ‡å‘å¯¹åº”è¡Œã€‚
%    \begin{macrocode}
\ctex_patch_cmd:Nnn \@wrglossary
  { hdpindex }
  {
    \ifnum \c@HD@hypercount = \z@
      hdpindex
    \else
      hdclindex { \the \c@HD@hypercount }
    \fi
  }
%    \end{macrocode}
% \end{macro}
%
%    \begin{macrocode}
%&lt;/doc-sty&gt;
%    \end{macrocode}
%
% \end{implementation}
</pre></body></html>