<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
% !TeX encoding = UTF-8
%
% Copyright (C) 2021 - 2024
% by Nanjing University Linux User Group
% &lt;git+nju-lug-email-3104-issue-@yaoge123.cn&gt;
%
% It may be distributed and/or modified under the conditions of the
% LaTeX Project Public License (LPPL), either version 1.3c of this
% license or (at your option) any later version. The latest version
% of this license is in the file
%
%    https://www.latex-project.org/lppl.txt
%
% This work has the LPPL maintenance status `maintained'.
%
% The Current Maintainer of this work is Yu Xiong.
%
% This work consists of the files njuthesis.dtx,
%           and the derived files njuthesis.ins,
%                                 njuthesis.cls,
%                                 njuthesis-doc.cls,
%                                 njuthesis-graduate.def,
%                                 njuthesis-postdoctoral.def,
%                                 njuthesis-undergraduate.def,
%                                 njuthesis.pdf,
%                             and README.md.
%
% -----------------------------------------------------------------------
%
% The development version of the template can be found at
%
%    https://github.com/nju-lug/NJUThesis
%
% for those people who are interested.
%
%&lt;*internal&gt;
\begingroup
  \def\NameOfLaTeXe{LaTeX2e}
\expandafter\endgroup\ifx\NameOfLaTeXe\fmtname\else
\csname fi\endcsname
%&lt;/internal&gt;
%
%&lt;*install&gt;
\input docstrip.tex
\keepsilent
\askforoverwritefalse

\preamble

Copyright (C) 2021 - 2024
by Nanjing University Linux User Group
&lt;git+nju-lug-email-3104-issue-@yaoge123.cn&gt;

This file 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.  The latest version of this
license is in:

  http://www.latex-project.org/lppl.txt

and version 1.3 or later is part of all distributions of LaTeX version
2005/12/01 or later.

To produce the documentation run the original source files ending with
`.dtx' through XeTeX.

\endpreamble

\generate{
  \usedir{tex/latex/njuthesis}
    \file{\jobname.cls}               {\from{\jobname.dtx}{class}}
    \file{\jobname-undergraduate.def} {\from{\jobname.dtx}{def-u}}
    \file{\jobname-graduate.def}      {\from{\jobname.dtx}{def-g}}
    \file{\jobname-postdoctoral.def}  {\from{\jobname.dtx}{def-p}}
    \file{\jobname-doc.cls}           {\from{\jobname.dtx}{doc-cls}}
%&lt;*internal&gt;
  \usedir{source/latex/njuthesis}
    \file{\jobname.ins}               {\from{\jobname.dtx}{install}}
%&lt;/internal&gt;
}

\obeyspaces
\Msg{*************************************************************}
\Msg{*                                                           *}
\Msg{* To finish the installation you have to move the following *}
\Msg{* files into a directory searched by TeX:                   *}
\Msg{*                                                           *}
\Msg{* The recommended directory is TDS:tex/latex/njuthesis      *}
\Msg{*                                                           *}
\Msg{*     njuthesis.cls                                         *}
\Msg{*     njuthesis-doc.cls                                     *}
\Msg{*     njuthesis-graduate.def                                *}
\Msg{*     njuthesis-postdoctoral.def                            *}
\Msg{*     njuthesis-undergraduate.def                           *}
\Msg{*     njuthesis.ins                                         *}
\Msg{*                                                           *}
\Msg{* To produce the documentation, run the file njuthesis.dtx  *}
\Msg{* through XeLaTeX.                                          *}
\Msg{*                                                           *}
\Msg{* Happy TeXing!                                             *}
\Msg{*                                                           *}
\Msg{*************************************************************}

\endbatchfile
%&lt;/install&gt;
%
%&lt;*internal&gt;
\fi
%&lt;/internal&gt;
%
%&lt;class&gt;\NeedsTeXFormat{LaTeX2e}
%&lt;*!(driver|install)&gt;
%&lt;+!driver&gt;\GetIdInfo $Id: njuthesis.dtx 1.4.2 2024-11-08 15:30:00
%&lt;+!driver&gt;  +0800 NJU LUG &lt;git+nju-lug-email-3104-issue-@yaoge123.cn&gt;$
%&lt;class&gt;  {Thesis template for Nanjing University}
%&lt;class&gt;\ProvidesExplClass{njuthesis}
%&lt;def-u&gt;  {Undergraduate definition file for njuthesis}
% ^^A è¯šè€€ç™¾å»¿ï¼Œé›„åˆ›ä¸€æµ
% ^^A å—äº¬å¤§å­¦ä¸€ç™¾äºŒåå‘¨å¹´åŽè¯žé‚€æ‚¨å…±è¥„ç››ä¸¾ï¼
%&lt;def-u&gt;\ProvidesExplFile{njuthesis-undergraduate.def}
%&lt;def-g&gt;  {Graduate definition file for njuthesis}
%&lt;def-g&gt;\ProvidesExplFile{njuthesis-graduate.def}
%&lt;def-p&gt;  {Postdoctoral definition file for njuthesis}
%&lt;def-p&gt;\ProvidesExplFile{njuthesis-postdoctoral.def}
%&lt;doc-cls&gt;  {Documentation style for njuthesis}
%&lt;doc-cls&gt;\ProvidesExplFile{njuthesis-doc.cls}
%&lt;!driver&gt;  {\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription}
%&lt;/!(driver|install)&gt;
%
%&lt;*driver&gt;
\ProvidesFile{njuthesis.dtx}
\PassOptionsToClass{codehigh}{njuthesis-doc}
\documentclass{njuthesis-doc}
\begin{document}
  \DocInput{njuthesis.dtx}
  \PrintChanges
  \PrintIndex
\end{document}
%&lt;/driver&gt;
% \fi
%
% \title{\color{njuviolet}{The \cls{njuthesis} class\\
%   \textbf{å—äº¬å¤§å­¦å­¦ä½è®ºæ–‡æ¨¡æ¿}}}
%
% \author{å—äº¬å¤§å­¦ Linux ç”¨æˆ·ç»„
%   \thanks{E-mail: \href{mailto:git+nju-lug-email-3104-issue-@yaoge123.cn}
%     {git+nju-lug-email-3104-issue-@yaoge123.cn}}}
%
% \date{v1.4.2 \quad 2024-11-08}
%
% \changes{v0.1}{2021/09/04}{å¼€å§‹å¼€å‘ã€‚}
% \changes{v0.2}{2021/09/07}{åˆæ­¥æ­å»ºäº†å¯ç”¨çš„æ¨¡æ¿ã€‚}
% \changes{v0.3}{2021/09/09}{ä½¿ç”¨è‡ªåŠ¨æž„å»ºå·¥å…·è¿›è¡Œæµ‹è¯•ã€‚}
% \changes{v0.4}{2021/09/09}{å°†ä¸ªäººä¿¡æ¯ä½¿ç”¨å†…ç½®å‘½ä»¤è¾“å…¥ã€‚}
% \changes{v0.5}{2021/09/10}{æ–°å¢žäº†å¯¹ç¬¬äºŒå¯¼å¸ˆçš„æ”¯æŒã€‚}
% \changes{v0.6}{2021/09/10}{å°è£…ä¸ªäººä¿¡æ¯}
% \changes{v0.6}{2021/09/10}{å®žçŽ°è‡ªåŠ¨æ‰“åŒ…å‘å¸ƒã€‚}
% \changes{v0.7}{2021/09/11}{å¢žåŠ&nbsp;å¯¹ç&nbsp;”ç©¶ç”Ÿæ¨¡æ¿çš„æ”¯æŒ}
% \changes{v0.7}{2021/09/12}{å°† \cls{njuthesis} å‘å¸ƒåœ¨ CTANã€‚}
% \changes{v0.8}{2021/09/12}{ä¿®å¤å·²çŸ¥é—®é¢˜ï¼Œè¿›è¡Œå…¬å¼€å®£ä¼&nbsp;ã€‚}
% \changes{v0.9}{2021/09/15}{ä½¿ç”¨ DocStrip åˆå¹¶æ¨¡æ¿æ–‡ä»¶ã€‚}
% \changes{v0.9}{2021/09/15}{å¤§å¹…åº¦ä¿®æ”¹å®åç§°ä»¥ç¬¦åˆ \LaTeX3 è§„èŒƒã€‚}
% \changes{v0.9}{2021/09/15}{è¿›ä¸€æ­¥å®Œå–„æ–‡æ¡£ã€‚}
% \changes{v0.10}{2021/09/24}{åˆ&nbsp;é™¤äº†ç”Ÿæˆè‡ªè¿°æ–‡ä»¶çš„ä»£ç&nbsp;ã€‚}
% \changes{v0.12}{2021/11/28}{åˆ&nbsp;é™¤å†…ç½®çš„ \pkg{njuvisual} ä»£ç&nbsp;ã€‚}
% \changes{v0.12}{2021/11/29}{æ›´æ–°äº†è¯´æ˜Žæ–‡æ¡£å°é¢è®¾è®¡ã€‚}
% \changes{v0.12}{2021/11/30}{åŒºåˆ†æµ‹è¯•æ–‡ä»¶å’Œç©ºç™½æ¨¡æ¿ã€‚}
% \changes{v0.12}{2021/12/06}{ä¿®æ”¹äº†è¯´æ˜Žæ–‡æ¡£çš„ä»£ç&nbsp;å‘ˆçŽ°æ&nbsp;·å¼ã€‚}
% \changes{v0.13}{2021/12/12}{ä¼˜åŒ–äº†ç¼–è¯‘é€Ÿåº¦ã€‚}
% \changes{v0.13}{2021/12/15}{é€‚é…2022å±Šæœ¬ç§‘ç”Ÿæ¯•ä¸šæ¯•ä¸šè®ºæ–‡ï¼ˆè®¾è®¡ï¼‰è§„èŒƒã€‚}
% \changes{v0.13}{2021/12/16}{é»˜è®¤ä¸åŠ&nbsp;è½½ \pkg{listings} å®åŒ…ã€‚}
% \changes{v0.14}{2022/01/13}{å°†æœ¬æ¨¡æ¿å†…åµŒå…¥å—å¤§ \TeX{} ç½‘ç«™ã€‚}
% \changes{v0.16}{2022/03/01}{åˆ†ç¦»æœ¬ç§‘ç”Ÿå’Œç&nbsp;”ç©¶ç”Ÿæ¨¡æ¿é…ç½®ã€‚}
% \changes{v0.19}{2022/05/23}{å¯¹ç&nbsp;”ç©¶ç”Ÿæ™®é€šå°é¢è¿›è¡Œè‹¥å¹²ç»†èŠ‚ä¿®æ”¹ã€‚}
% \changes{v0.19}{2022/05/23}{å¯¹å›½å®¶å›¾ä¹¦é¦†å°é¢è¿›è¡Œè‹¥å¹²ç»†èŠ‚ä¿®æ”¹ã€‚}
% \changes{v0.20}{2022/06/08}{æ›´æ­£æœ¬ç§‘ç”Ÿæ¨¡æ¿éƒ¨åˆ†å­—æ&nbsp;·ã€‚}
% \changes{v1.0}{2022/06/29}{ç§»é™¤æ¯•ä¸šè®¾è®¡å°é¢ã€‚}
% \changes{v1.0}{2022/07/05}{æŒ‰ç±»åž‹é‡å‘½åå˜é‡ã€‚}
% \changes{v1.0}{2022/07/23}{æ–°å¢žåšå£«åŽå‡ºç«™æŠ¥å‘Šæ¨¡æ¿ã€‚}
% \changes{v1.0}{2022/07/28}{åœ¨æ‰‹å†Œä¸­ä»¥ä¸åŒé¢œè‰²æŒ‡ç¤ºä¸åŒæ¨¡å—ã€‚}
% \changes{v1.0}{2022/08/02}{åˆ&nbsp;é™¤ \LaTeX åŸºç¡€ç”¨æ³•çš„è¯´æ˜Žã€‚}
% \changes{v1.1}{2023/01/05}{é€‚é…2023å±Šæœ¬ç§‘ç”Ÿæ¯•ä¸šæ¯•ä¸šè®ºæ–‡ï¼ˆè®¾è®¡ï¼‰è§„èŒƒã€‚}
% \changes{v1.1}{2023/01/05}{é€‚é…æ–°ç‰ˆå—å¤§ \LaTeX åœ¨çº¿ç¼–è¾‘å™¨ã€‚}
% \changes{v1.4}{2024/03/11}{æ€»æ˜¯å…¨å±€ä¿®æ”¹å…¨å±€å˜é‡ã€‚}
% \changes{v1.4}{2024/03/18}{å°†å˜é‡ç»Ÿä¸€ä¸º |l| ç±»åž‹ã€‚}
%
% \maketitle
%
% \let\abstractname\relax
% \begin{abstract}
% \cls{njuthesis} æ˜¯åˆ¶ä½œå—äº¬å¤§å­¦æœ¬ç§‘ç”Ÿæ¯•ä¸šè®ºæ–‡ã€ç&nbsp;”ç©¶ç”Ÿå­¦ä½è®ºæ–‡ã€åšå£«åŽå‡ºç«™æŠ¥å‘Šçš„
% \LaTeX æ–‡æ¡£ç±»ã€‚æœ¬æ¨¡æ¿åŸºäºŽæœ¬ç§‘ç”Ÿé™¢çš„è®ºæ–‡æ’°å†™è§„èŒƒåˆ¶ä½œï¼ŒåŒæ—¶å‚è€ƒç&nbsp;”ç©¶ç”Ÿé™¢æä¾›çš„ç¡•å£«ã€
% åšå£«å­¦ä½ææ–™åŒ…ï¼Œç”¨äºŽç”Ÿæˆç¬¦åˆå—äº¬å¤§å­¦æŽ’ç‰ˆè¦æ±‚å’Œç›¸åº”çš„å›½å®¶æ&nbsp;‡å‡†çš„å­¦ä½è®º
% æ–‡ï¼ŒåŠ›æ±‚é€šè¿‡ \LaTeX3 è¯­æ³•å®žçŽ°æ¸…æ™°çš„å®žçŽ°é€»è¾‘ã€è¾ƒé«˜çš„å¯å®šåˆ¶æ€§ä»¥åŠå‹å¥½çš„ç”¨æˆ·æŽ¥å£ã€‚
% \end{abstract}
%
% \begin{abstract}
% The \cls{njuthesis} class is intended for typesetting Nanjing University
% dissertations with \LaTeX, providing support for bachelor, master,
% doctoral theses as well as postdoctoral reports.
% \end{abstract}
%
% \vspace{2cm}
% \def\abstractname{ç‰¹åˆ«å£°æ˜Ž}
% \begin{abstract}
% åœ¨ä½¿ç”¨æœ¬æ¨¡æ¿æ—¶ï¼Œæˆ‘ä»¬é»˜è®¤æ‚¨åŒæ„ä»¥ä¸‹å†…å®¹ï¼š
% \begin{enumerate}
%   \item æœ¬æ¨¡æ¿é€šè¿‡ LPPL 1.3c åè®®å¼€æ”¾æºä»£ç&nbsp;ï¼Œæ‚¨å¯ä»¥éšæ„ä½¿ç”¨ç¼–è¯‘å‡ºçš„ PDF æ–‡ä»¶ã€‚
%   \item æœ¬æ¨¡æ¿ä¸Žå­¦æ&nbsp;¡å®˜æ–¹éƒ¨é—¨å¹¶ä¸å­˜åœ¨åˆä½œå…³ç³»ï¼Œ
%         ä½œè€…ä¸å¯¹ä½¿ç”¨æœ¬æ¨¡æ¿äº§ç”Ÿçš„æ&nbsp;¼å¼å®¡æŸ¥é—®é¢˜è´Ÿè´£ã€‚
%   \item é‡åˆ°æœ¬æ–‡æ¡£æ²¡æœ‰è¦†ç›–çš„é—®é¢˜å±žäºŽæ­£å¸¸æƒ…å†µï¼Œæ¬¢è¿Žæäº¤åé¦ˆæ„è§ã€‚
% \end{enumerate}
%
% æˆ‘ä»¬çš„ \href{https://git.nju.edu.cn/nju-lug/lug-introduction}
%   {Linux ç”¨æˆ·ç»„}å§‹ç»ˆæ¬¢è¿Žæ‚¨çš„åŠ&nbsp;å…¥ï¼
% \end{abstract}
%
% \clearpage
%
%
% \setcounter{tocdepth}{4}
% \tableofcontents
%
% \clearpage
%
%
% \begin{documentation}
%
% \section{æ¨¡æ¿ä»‹ç»}
%
% \cls{njuthesis}ï¼Œå³å—äº¬å¤§å­¦å­¦ä½è®ºæ–‡æ¨¡æ¿ï¼Œæ˜¯ä¸€ä¸ªç”±å—äº¬å¤§å­¦ Linux
% ç”¨æˆ·ç»„ç»´æŠ¤çš„ï¼Œç”¨äºŽå¤„ç†æœ¬æ&nbsp;¡å­¦ç”Ÿæ¯•ä¸šè®ºæ–‡æŽ’ç‰ˆéœ€æ±‚çš„ \LaTeX æ¨¡æ¿ã€‚
%
% æœ¬æ¨¡æ¿ä½¿ç”¨çš„æœ¬ç§‘ç”Ÿæ¯•ä¸šè®ºæ–‡æ¨¡æ¿æ&nbsp;¼å¼ä¾æ®
% ã€Šå…³äºŽå¯åŠ¨å—äº¬å¤§å­¦2024å±Šæœ¬ç§‘æ¯•ä¸šè®ºæ–‡ï¼ˆè®¾è®¡ï¼‰å·¥ä½œçš„é€šçŸ¥ã€‹\cite{nju-bachelor-2024}ï¼Œ
% ç&nbsp;”ç©¶ç”Ÿå­¦ä½è®ºæ–‡æ&nbsp;¼å¼ä¾æ®ç&nbsp;”ç©¶ç”Ÿé™¢æä¾›çš„ææ–™åŒ…\cite{nju-graduate-2023}ã€‚
% åšå£«åŽå‡ºç«™æŠ¥å‘Šæ&nbsp;¼å¼è¦æ±‚ä¸Žåšå£«å­¦ä½è®ºæ–‡ä¸€è‡´\cite{nju-postdoc-2022}ï¼Œ
% å°é¢ã€æ‘˜è¦çš„è®¾è®¡å‚è€ƒäº†éƒ¨åˆ†æ—¢æœ‰æŠ¥å‘Šã€‚
%
%
% \subsection{å¼€å§‹ä¹‹å‰}
% \label{subsec:first-things-first}
%
% åœ¨æœ¬æ–‡æ­£å¼ä»‹ç» \cls{njuthesis} è®ºæ–‡æ¨¡æ¿å‰ï¼Œæ‚¨ä¹Ÿè®¸å¹¶ä¸ç†Ÿæ‚‰ \LaTeX æ¨¡æ¿çš„ä½¿ç”¨æ–¹æ³•ã€‚
% è¯ä¸å¤šè¯´ï¼Œè¯·å…ˆæŒ‰éƒ¨å°±ç­ä½“éªŒä¸€éä¸‹è¿°çš„å·¥ä½œæµç¨‹ï¼š
%
% \bigskip
% \fcolorbox{tpblue}{gray!5}{\parbox{\textwidth-5em}{%
% \hspace{2em}\begin{minipage}[c]{10cm}
% \begin{enumerate}
%   \item è®¿é—® \url{https://tex.nju.edu.cn}
%   \item ç‚¹å‡»\tpbutton{ä½¿ç”¨å—å¤§ç»Ÿä¸€èº«ä»½è®¤è¯ç™»å½•}
%   \item ç‚¹å‡»å³ä¸Šè§’\tpbutton{LaTeX æ¨¡æ¿}ï¼Œé€‰æ‹©\tpbutton{å—äº¬å¤§å­¦å­¦ä½è®ºæ–‡}
%   \item ç‚¹å‡»è¿›å…¥åˆšåˆšæ–°å»ºçš„é¡¹ç›®
% \end{enumerate}
% \end{minipage}}}
%
% \bigskip
% ç¨ç­‰ç‰‡åˆ»ï¼Œæ‚¨ä¼šåœ¨æµè§ˆå™¨å³ä¾§å‘çŽ°ä¸€ä»½æ–°ç”Ÿæˆçš„ç©ºç™½è®ºæ–‡ã€‚
% å¦‚æžœå®ƒçš„æ•ˆæžœä»¤æ‚¨æ»¡æ„ï¼Œä¸å¦¨ä»¥ \file{njuthesis-sample.tex} ä¸ºåŸºç¡€å¼€å§‹å†™ä½œã€‚
%
% \subparagraph{æˆ‘ä¸€å®šè¦ä½“éªŒä¸Šè¿°æµç¨‹å—ï¼Ÿ}
% æ˜¯ï¼Œä½†ä¹Ÿä¸ä¸€å®šã€‚æœ‰äººåšæŒè®¤ä¸ºåº”è¯¥åšä¸€äº›\emph{ç›´è§‚ã€æ¸…æ™°ã€æœ‰æ‰‹å°±è¡Œã€ä¸€
% æ¡è·¯èµ°åˆ°åº•}çš„æ•™ç¨‹ï¼Œè€Œä¸æ˜¯\emph{é•¿ç¯‡ç´¯ç‰çš„ç²¾ç»†ä»‹ç»}ï¼Œå…¶æ&nbsp;¸å¿ƒè®ºæ®åœ¨äºŽï¼š
% çŽ°ä»£äººç±»æ€»ä½“ä¸Šéœ€è¦å¿«é€Ÿå–å¾—æˆå°±æ„Ÿï¼Œè€Œä¸”å¤§éƒ¨åˆ†å¯èƒ½ç”¨åˆ°æœ¬æ¨¡æ¿çš„åŒå­¦ä¸
% ä¼šå…·å¤‡å¿…è¦çš„åŸºç¡€çŸ¥è¯†ã€‚åé©³çš„è§‚ç‚¹åœ¨äºŽè¿‡åˆ†ç®€å•çš„å®žéªŒæ€»æ˜¯æµªè´¹æ—¶é—´çš„ï¼Œ
% å°¤å…¶æ˜¯åœ¨æ‚¨å¯èƒ½æ—©å·²æŽŒæ¡åŸºæœ¬ç”¨æ³•çš„æƒ…å†µä¸‹ã€‚ä½†ï¼Œä¸è®ºå¦‚ä½•ï¼Œè¿™ç•ªæ“ä½œæ€»ä¼š
% ä½¿æ‚¨é¢„è§ˆåˆ° \cls{njuthesis} è®ºæ–‡æ¨¡æ¿çš„å®žé™…æ&nbsp;·å¼ã€‚
%
% \subparagraph{æˆ‘å¹¶æ²¡æœ‰è§åˆ°ç†æƒ³çš„ç»“æžœã€‚}
% å…·ä½“æ˜¯å“ªé‡Œä¸æ»¡æ„ï¼Ÿå¦‚æžœæ˜¯\emph{æ&nbsp;·å¼å­˜åœ¨åå·®}ï¼Œè¯·è”ç³»æ¨¡æ¿çš„ä½œè€…ï¼›å¦‚æžœ
% \emph{ä¸èƒ½è®¿é—®å‰æ–‡æåˆ°çš„åœ¨çº¿ç¼–è¯‘ç½‘ç«™}ï¼Œè¯·è€ƒè™‘æ£€æŸ¥ç½‘ç»œè¿žæŽ¥ï¼Œä¾æ¬¡å’¨è¯¢
% æœ¬æ&nbsp;¡\href{https://itsc.nju.edu.cn}{ä¿¡æ¯åŒ–ç®¡ç†å»ºè®¾æœåŠ¡ä¸­å¿ƒ}å’Œè¯¥ç½‘ç«™
% çš„ç»´æŠ¤è€…\href{mailto:my@yaoge123.cn}{å§šèˆ¸è€å¸ˆ}ï¼›å¦‚æžœ\emph{æŠ¥é”™}ï¼Œè¯·
% ç‚¹å‡»å·¦ä¸Šè§’çš„èœå•æŒ‰é’®ï¼ŒæŸ¥çœ‹ç¼–è¯‘å™¨æ˜¯å¦æ˜¾ç¤ºä¸º |XeLaTeX|ï¼›
% å†å¦‚æžœ\emph{è¿˜æœ‰å…¶ä»–åŽŸå›&nbsp;}ï¼Œé€šè¿‡è¿™å‡&nbsp;åˆ†é’Ÿçš„å®žéªŒæˆ‘ä»¬ä¹Ÿå¯ä»¥å¾—åˆ°ä¸€ä¸ªæžå…¶
% æœ‰ç›Šçš„ç»“è®ºï¼š\emph{ä¹Ÿè®¸ Word æ¨¡æ¿æ›´åŠ&nbsp;é€‚åˆæ‚¨}ã€‚è¿™å¯ä»¥èŠ‚çœä¸‹ç†Ÿæ‚‰
% \TeX{} æŽ’ç‰ˆè½¯ä»¶ä½¿ç”¨æ–¹æ³•æ‰€éœ€çš„å¯è§‚æ—¶é—´ã€‚
%
% \subparagraph{ä½†æˆ‘ä¾ç„¶å¯¹ \LaTeX ä¸€æ—&nbsp;æ‰€çŸ¥ï¼}
% è¿™æ„å‘³ç€æ‚¨çœŸçš„å¾—èŠ±äº›æ—¶é—´åœ¨\emph{é•¿ç¯‡ç´¯ç‰çš„ç²¾ç»†ä»‹ç»}ä¸Šã€‚
% å¦‚æžœæ‚¨å·²ç»ä¸‹å®šå†³å¿ƒï¼Œè¯·æŽ¥ç€å‘åŽé˜…è¯»ï¼Œæœ‰éœ€è¦æ—¶å–„ç”¨æœç´¢å¼•æ“Žã€‚
%
%
% \subsection{åŽ†å²æ²¿é©}
%
% åå‡&nbsp;å¹´æ¥ï¼Œå¤šä½çƒ­å¿ƒæ&nbsp;¡å‹å‘å¸ƒè¿‡è‡ªå·±ç¼–å†™çš„æ¨¡æ¿ï¼Œåœ¨ GitHub ç½‘ç«™ä¸Šå¯è€ƒçš„åŒ…æ‹¬ï¼š
% \begin{enumerate}
%   \item æ¨æ–‡åšï¼ˆ\href{http://yangwenbo.com/}{@solrex}ï¼‰çš„
%        njuthesisï¼ˆ2010 - 2018ï¼‰ \cite{wenboyang2013}
%   \item \href{https://github.com/fireblue}{@fireblue} åŸºäºŽæ¨æ–‡åšæ¨¡æ¿çš„
%        NJUThesisï¼ˆ2013ï¼‰\cite{fireblue2013}
%   \item \href{https://github.com/wenhai-zheng}{@wenhai-zheng} çš„
%        NJUThesisï¼ˆ2013ï¼‰\cite{wenhai-zheng2013}
%   \item æ›¹å¢žä¹ï¼ˆ\href{https://github.com/ZLCao}{@ZLCao}ï¼‰çš„
%        NJUBachelorï¼ˆ2013 - 2016ï¼‰\cite{zenglecao2013}
%   \item èƒ¡æµ·æ˜Ÿï¼ˆ\href{http://haixing-hu.github.io/}{@Haixing-Hu}ï¼‰çš„
%        NJU-Thesisï¼ˆ2013 - 2018ï¼‰\cite{haixinghu2013}
%   \item å¼&nbsp;æ¥šç©ï¼ˆ\href{https://github.com/zhangchuheng123}{@zhangchuheng123}ï¼‰
%        åŸºäºŽèƒ¡æµ·æ˜Ÿæ¨¡æ¿çš„ NJUThesisï¼ˆ2016ï¼‰\cite{chuhengzhang2016}
%   \item è’‹ç‚Žå²©ï¼ˆ\href{http://ics.nju.edu.cn/~jyy/}{@jiangyy}ï¼‰çš„
%        njuthesisï¼ˆ2017 - 2019ï¼‰\cite{yanyanjiang2017}
%   \item \href{https://github.com/njuHan}{@njuHan} åŸºäºŽèƒ¡æµ·æ˜Ÿæ¨¡æ¿çš„
%        NJU-Thesisï¼ˆ2018 - 2021ï¼‰
%   \item é¥¶å®‰é€¸ï¼ˆ\href{https://anyirao.com/}{@AnyiRao}ï¼‰åŸºäºŽå¼&nbsp;æ¥šç©æ¨¡æ¿çš„
%        NJU Thesis 2018ï¼ˆ2018ï¼‰\cite{anyirao2018}
%   \item èµµæ‡¿æ™¨ï¼ˆ\href{https://fengchendian.github.io/about.html}
%        {@FengChendian}ï¼‰åŸºäºŽé¥¶å®‰é€¸æ¨¡æ¿çš„
%        NJU Thesis 2021ï¼ˆ2021ï¼‰\cite{yichenzhao2021}
% \end{enumerate}
% è‡³äºŽä¸å¹¸è€Œæœªè¿›è¡Œä»£ç&nbsp;ç‰ˆæœ¬ç®¡ç†çš„ï¼Œç”šè‡³äºŽè¯´ä»¥åŽ‹ç¼©åŒ…å½¢å¼æµä¼&nbsp;äºŽå„äººç¡¬ç›˜ä¸­çš„ï¼Œå°±æ›´ä¸å¯è®¡æ•°äº†ã€‚
%
% ä¸Žå…¶è®©ä¸€åƒä¸ªå­¦ç”Ÿåšä¸€åƒç§ä¸åŒçš„æ¨¡æ¿ï¼Œä¸å¦‚æœ‰äººç‰µèµ·å¤´æ¥ï¼Œé›†ä¸­åŠ›é‡åŠžå¤§äº‹ã€‚å›&nbsp;æ­¤ï¼Œå—
% äº¬å¤§å­¦ Linux User Group çš„æœ‰å¿—ä¹‹å£«åœ¨2021å¹´æš‘æœŸè”åˆèµ·æ¥ï¼Œå‚è€ƒä»¥ä¸Šçš„çŽ°æˆæ¨¡æ¿ï¼Œå…¼
% é¡¾å‹æ&nbsp;¡ \cls{fduthesis}\cite{fduthesis}ã€\textsc{THuThesis}\cite{thuthesis} ç­‰
% ä¼˜ç§€é¡¹ç›®ï¼Œæž„å»ºäº†è¿™ä¸€å…¨æ–°æ¨¡æ¿ï¼ŒåŠ›æ±‚é€šè¿‡ \LaTeX3 è¯­æ³•å’Œæ¸…æ™°çš„æŽ¥å£å®žçŽ°è‰¯
% å¥½çš„æ˜“ç”¨æ€§å’Œå¯ç»´æŠ¤æ€§ã€‚
%
% ç›®å‰ï¼Œæœ¬æ¨¡æ¿çš„ä¸»è¦ç»´æŠ¤è€…åŒ…æ‹¬ï¼š
% \begin{itemize}
%   ^^A \item èµµæ‡¿æ™¨
%   \item ç†Šç…œ
%   ^^A \item é©¬ç•…
% \end{itemize}
%
%
% \subsection{å¿«é€Ÿä¸Šæ‰‹}
%
% \LaTeX å¹¶ä¸æ˜¯ä¸€ç§é›¶é—¨æ§›çš„è¯­è¨€ï¼Œäº¦ä¸æ˜¯å—äº¬å¤§å­¦å­¦ç”Ÿçš„å¿…å¤‡æŠ€èƒ½ã€‚æœ‰åŒå­¦å¬
% åˆ°â€œ\emph{ç»™æ¯•ä¸šè®ºæ–‡äº¤å·®ä¹Ÿå¾—å†™ä»£ç&nbsp;}â€è¿™ç§äº‹æƒ…å°±å¤´ç–¼ï¼Œå®žåœ¨æ˜¯æˆ‘ä»¬ä¸æ„¿æ„è§åˆ°è€Œå¿…é¡»
% è¦é¢å¯¹çš„æƒ…å†µã€‚ç›®å‰ï¼Œä¸­æ–‡äº’è”ç½‘ä¸Šçš„ \LaTeX å†™ä½œæ•™ç¨‹å¯è°“æ±—ç‰›å……æ&nbsp;‹ï¼Œç„¶è€Œ
% å¦‚ä½•å¿«é€Ÿå‡†ç¡®æ‰¾åˆ°æ‰€éœ€è¦çš„ç”¨æ³•ï¼Œå°¤å…¶æ˜¯ \LaTeX3 çš„æ–°æŽ¥å£ï¼Œéœ€è¦ä¸€å®šçš„æ—¶é—´
% æˆ–è€…è‰¯å¥½çš„è‹±æ–‡é˜…è¯»èƒ½åŠ›ã€‚åœ¨æœ¬æ–‡æ¡£çš„å†™ä½œä¸­ï¼Œæˆ‘ä»¬æ—&nbsp;åŠ›ä»Žç›˜å¤å¼€å¤©è¾Ÿåœ°å¼€å§‹ä»Žå¤´æž„å»ºæ‚¨
% çš„ç›¸å…³çŸ¥è¯†ä½“ç³»ï¼Œåªèƒ½\emph{å°½åŠ›åšåˆ°æœ‰æ±‚å¿…åº”}ï¼Œåœ¨éœ€è¦çš„åœ°æ–¹é¡ºå¸¦æä¸€å˜´ï¼Œä»¥æœŸä½¿æ‚¨
% å°‘èµ°ç‚¹å¼¯è·¯ã€‚
%
% å¦‚æžœæ‚¨å¸Œæœ›åœ¨ä½¿ç”¨æœ¬æ¨¡æ¿å‰äº†è§£ä¸€äº›å…³äºŽè¿™ä¸ªæŽ’ç‰ˆè½¯ä»¶çš„åŸºç¡€çŸ¥è¯†ï¼Œåœ¨æ­¤å°è¯•åˆ—ä¸¾ä¸€äº›æœ‰
% æ‰€å¸®åŠ©çš„èµ„æ–™ï¼š
% \begin{description}
%   \item[\textit{lshort}] è‘—åçš„ä»‹ç»æ–‡æ¡£ï¼Œå·²è¢«è¯‘ä¸ºå¤šç§è¯­è¨€ï¼Œ
%                          æŽ¨èé€šè¯»å…¶ä¸­æ–‡ç‰ˆ\cite{lshort-zh-cn}ã€‚
%   \item[ã€Š\LaTeX å…¥é—¨ã€‹] åˆ˜æµ·æ´‹è‘—\cite{åˆ˜æµ·æ´‹2013latexå…¥é—¨}ã€‚
% \end{description}
%
%
% \subsection{å…³äºŽæœ¬è¯´æ˜Žæ‰‹å†Œ}
%
% æœ¬æ¨¡æ¿é€šè¿‡ \textsc{DocStrip} è¿›è¡Œç»´æŠ¤ï¼Œå®žé™…ä¸Šæ˜¯ä¸€ç§\emph{æ–‡å­¦ç¼–ç¨‹}ã€‚æ–‡å­¦ç¼–ç¨‹çš„
% æœ¬ä½“æ˜¯é‚£äº›ç”¨æ¥è¯´æ˜Žçš„æ–‡å­—ï¼ŒæŒ‰å†™ä¹¦å†™æ–‡ç«&nbsp;çš„æ–¹å¼ç»„ç»‡ã€‚\file{njuthesis.dtx} åŒ…å«
% \cls{njuthesis} æ–‡æ¡£ç±»çš„æ‰€æœ‰ä¿¡æ¯ã€‚å‰åŠéƒ¨åˆ†ä¸ºæ¨¡æ¿è¯´æ˜Žï¼Œå³å„ç§å¸¸ç”¨å‘½ä»¤ä¸Žå¿…è¦çš„ä½¿
% ç”¨æ–¹æ³•ï¼›åŽåŠéƒ¨åˆ†ä¸ºä»£ç&nbsp;å®žçŽ°ï¼Œä¸ºå¸¦æœ‰è¯¦ç»†æ³¨é‡Šçš„ \TeX{} æºä»£ç&nbsp;ã€‚åŽè€…é…åˆé™„
% å½•ï¼Œä¸ºæœ‰æ„äº†è§£æœ¬æ¨¡æ¿å®žçŽ°ç»†èŠ‚çš„åŒå­¦æä¾›å¿…è¦æŒ‡å¼•ã€‚
%
% ä¸‹æ–‡ä¸­å°†å‡ºçŽ°è‹¥å¹²ç‰¹æ®Šæ&nbsp;¼å¼ï¼Œç”¨æ¥æŒ‡ç¤ºä»£ç&nbsp;ç»„ä»¶ã€‚è­¬å¦‚ï¼Œæ—&nbsp;è¡¬çº¿å­—ä½“çš„
% \pkg{pkg-example} ä¸ºå®åŒ…åï¼Œç­‰å®½å­—ä½“çš„ \file{file-example.xxx} ä¸ºæ–‡ä»¶åï¼Œç­‰å®½
% å­—ä½“çš„ \opt{opt-example} ä¸ºé€‰é¡¹åï¼Œç­‰å®½å­—ä½“çš„ \env{env-example} ä¸ºéœ€è¦
%  |\begin{}|å’Œ|\end{}|çš„çŽ¯å¢ƒåï¼Œç­‰ã€‚æœ¬æ‰‹å†Œæä¾›çš„ä»£ç&nbsp;ç¤ºä¾‹ä¸­ï¼Œå·¦ä¾§è¾¹çº¿å‘ˆçŽ°å—å¤§æ&nbsp;‡
% å‡†æ´‹çº¢è‰² {\color{njumagenta}$\blacksquare$} çš„å±žäºŽç»ˆç«¯å‘½ä»¤ï¼Œå‘ˆå—å¤§æ&nbsp;‡å‡†è“è‰²
% {\color{njublue}$\blacksquare$} çš„å±žäºŽ \LaTeX æºä»£ç&nbsp;ã€‚
%
%
% \subsection{è®¸å¯è¯´æ˜Ž}
%
% \file{njuthesis.dtx} æ–‡ä»¶ä»¥åŠç”±å…¶ç›´æŽ¥äº§ç”Ÿçš„æ‰€æœ‰æ–‡ä»¶è¢«ç§°ä¸º
% \cls{njuthesis} æ–‡æ¡£ç±»ï¼Œæˆ–è€…åœ¨æœ¬æ–‡ä¸­ç®€ç§°ä¸ºæœ¬æ¨¡æ¿ã€‚
%
% \subparagraph{ç‰ˆæƒä¿¡æ¯}
%   æœ¬æ¨¡æ¿ä¹‹ç‰ˆæƒéš¶å±žäºŽ Â© 2021 - 2023 å—äº¬å¤§å­¦ Linux ç”¨æˆ·ç»„ã€‚
%
% \subparagraph{å‘å¸ƒå’Œä¿®æ”¹}
%   æœ¬æ¨¡æ¿çš„å‘å¸ƒå’Œï¼ˆæˆ–ï¼‰ä¿®æ”¹éµå®ˆ LaTeX Project Public Licenseï¼ˆç‰ˆæœ¬ 1.3c æˆ–æ›´é«˜ï¼‰
% çš„æ¡æ¬¾ã€‚è¯¥è®¸å¯è¯çš„æœ€æ–°ç‰ˆæœ¬ä½äºŽ \url{http://www.latex-project.org/lppl.txt}ï¼Œ
% 1.3c åŠæ›´æ–°çš„ç‰ˆæœ¬éšé™„äºŽ 2003/12/01 ç‰ˆæœ¬ä»¥åŽçš„æ‰€æœ‰ \LaTeX å‘è¡Œç‰ˆã€‚
%
% \subparagraph{è”ç³»ä½œè€…}
%   å¦‚æžœæ‚¨åœ¨ä½¿ç”¨æœ€æ–°ç‰ˆæ¨¡æ¿æ—¶å‘çŽ°äº†ä»»ä½•é—®é¢˜ï¼ŒæŠ‘æˆ–æœ‰æ„å‘å‚ä¸Žæœ¬æ¨¡æ¿çš„ç»´æŠ¤ï¼Œ
% è¯·é€šè¿‡ \href{https://github.com/nju-lug/NJUThesis/issues}{GitHub Issue}
% æˆ–è€… QQ ç¾¤èŠ\footnote{ç¾¤å·æ˜¯ 991559926ã€‚}è”ç³» NJU LUGã€‚
%
%
% \section{å®‰è£…}
% \label{sec:setup}
% æœ¬èŠ‚ä¸»è¦ä»‹ç»æœ¬å®åŒ…çš„èŽ·å–ã€å®‰è£…ä»¥åŠç¼–è¯‘æ–¹å¼ã€‚
%
% \subsection{èŽ·å–æ¨¡æ¿}
%
% \cls{njuthesis} ç›®å‰å¤„äºŽç§¯æžçš„ç»´æŠ¤ä¸­ï¼Œä¸»è¦å¯é€šè¿‡ä»¥ä¸‹ä¸‰ç§é€”å¾„èŽ·å–æ¨¡æ¿æ–‡ä»¶ï¼š
%
% \subparagraph{CTAN}
% \href{https://ctan.org/}{CTAN}\footnote{The Comprehensive \TeX{}
% Archive Network} æ˜¯æ‰€æœ‰ \TeX{} ç›¸å…³ææ–™çš„ä¸­æž¢ã€‚
% æœ¬æ¨¡æ¿çš„ CTAN é¡µé¢
% \footnote{\href{https://ctan.org/pkg/njuthesis}{\cls{njuthesis}} å·²ç»äºŽ2021å¹´9
% æœˆ12æ—¥å‘å¸ƒåœ¨ CTANï¼Œç”¨äºŽç»˜åˆ¶å—å¤§å›¾æ&nbsp;‡çš„
% \href{https://ctan.org/pkg/njuvisual}{\pkg{njuvisual}} ä¹Ÿå·²äºŽåŒå¹´11æœˆ28æ—¥å‘
% å¸ƒï¼Œä¸¤è€…å·²è¢« \TeX{} Live å’Œ \MiKTeX æ”¶å½•ã€‚}ä¸Šæä¾›åŸºæœ¬çš„ä»‹ç»ä¿¡æ¯ï¼Œå¯ä»¥ä¸‹è½½
% è¯´æ˜Žæ–‡æ¡£ï¼ˆæœ¬æ–‡æ¡£ï¼‰å’Œå®åŒ…æºä»£ç&nbsp;ã€‚å½“ç„¶ï¼Œä½¿ç”¨è¿™ä¸€æ¥æºæ—¶å¹¶ä¸éœ€è¦æŽ¥è§¦åŽè€…ï¼Œè¯·å‚è€ƒ
% \ref{subsubsec:standard-installation} çš„æ&nbsp;‡å‡†å®‰è£…æ–¹æ³•ã€‚
%
% \subparagraph{GitHub ä»“åº“}
% æœ€æ–°å¼€å‘è¿›åº¦ä¼šæäº¤åœ¨æœ¬é¡¹ç›®çš„
% \href{https://github.com/nju-lug/NJUThesis}{Githubä»“åº“}ã€‚ä»“åº“å†…ä»…åŒ…å«æºä»£ç&nbsp;ã€
% ç©ºç™½æ¨¡æ¿åŠæµ‹è¯•æ–‡ä»¶ï¼Œä¸å¯ç›´æŽ¥ç”¨äºŽå†™ä½œã€‚è¿™äº›æ–‡ä»¶å¯¹åº”çš„ä½¿ç”¨æ–¹æ³•è¯·å‚è€ƒ
% \ref{subsubsec:on-the-fly-installation}ã€‚å¦‚æžœç”±äºŽç½‘ç»œåŽŸå›&nbsp;ä¸ä¾¿è®¿é—®ä¸»ä»“åº“ï¼Œä¹Ÿå¯
% ä»¥ä»Ž \href{https://git.nju.edu.cn/nju-lug/nju-latex-templates/njuthesis}
% {NJU Git åŒæ­¥é•œåƒ}èŽ·å–é¡¹ç›®å·¥ç¨‹æ–‡ä»¶ã€‚
%
% \subparagraph{GitHub Releases}
% æœ¬æ¨¡æ¿ä¸å®šæœŸå°†å·²æœ‰çš„æ–°åŠŸèƒ½å’Œé—®é¢˜ä¿®å¤æ‰“åŒ…ä¸ºæ–°çš„æ­£å¼å‘è¡Œç‰ˆï¼Œèµ‹ä»¥æ›´æ”¹åŽçš„ç‰ˆæœ¬å·ï¼Œ
% å‘å¸ƒåœ¨ \href{https://github.com/nju-lug/NJUThesis/releases/latest}{Github
% Releases é¡µé¢}ã€‚å¦‚æžœç”±äºŽç½‘ç»œåŽŸå›&nbsp;ä¸ä¾¿è®¿é—®ä¸»ä»“åº“ï¼Œä¹Ÿå¯ä»¥ä»Ž\ignorespaces
% \href{https://mirror.nju.edu.cn/github-release/nju-lug/NJUThesis/LatestRelease/}
% {å—äº¬å¤§å­¦é•œåƒç«™ä¸‹è½½é¡µé¢}èŽ·å–ã€‚å¯ä¾›ä¸‹è½½çš„æ–‡ä»¶åŒ…æ‹¬ä¸‹åˆ—ä¸‰ç§ï¼š
%   \begin{description}
%     \item[\file{njuthesis-v*.pdf}] æ¨¡æ¿è¯´æ˜Žæ–‡æ¡£ï¼ˆæœ¬æ–‡æ¡£ï¼‰ã€‚
%     \item[\file{njuthesis-user-v*.zip}] äº¤ä»˜ç»™ç”¨æˆ·çš„å®Œæ•´æ¨¡æ¿åŒ…ï¼Œ
%          åŒ…æ‹¬æ&nbsp;¼å¼æ–‡ä»¶å’ŒèŒƒæœ¬æ–‡æ¡£ï¼Œå¯åœ¨è§£åŽ‹åŽç”¨äºŽæœ¬åœ°ç¼–è¯‘ï¼Œ
%          ä¹Ÿå¯ç›´æŽ¥ä¸Šä¼&nbsp;è‡³åœ¨çº¿ç¼–è¯‘ç½‘ç«™ã€‚
%     \item[\file{njuthesis-ctan-v*.zip}] äº¤ä»˜ç»™ CTAN çš„æºä»£ç&nbsp;åŒ…ï¼Œ
%          æ™®é€šç”¨æˆ·è¯·å¿½ç•¥ã€‚
%   \end{description}
%
%
% \subsubsection{æ–‡ä»¶æž„æˆ}
%
% æœ¬æ¨¡æ¿ç”±æ•°é‡ä¼—å¤šçš„æ–‡ä»¶ç»„æˆï¼Œ\emph{æ‰€æœ‰å¯èƒ½é‡åˆ°çš„}æ–‡ä»¶å¦‚è¡¨
% \ref{tab:njuthesis-files} æ‰€ç¤ºã€‚
%
% \begin{table}[ht]
%   \centering
%   \begin{talltblr}[
%       caption = {\cls{njuthesis}æ–‡ä»¶æž„æˆ},
%       label = {tab:njuthesis-files},
%       note{a} = {ä»…ä¾›å¼€å‘ä½¿ç”¨ï¼Œå¹¶ä¸ä¼šåœ¨å‘å¸ƒç‰ˆæœ¬ä¸­å‡ºçŽ°ã€‚}
%     ] { row{1} = {font=\bfseries}, colspec = {ll} }
%     \toprule
%     åç§°                               &amp; è¯´æ˜Ž                             \\
%     \midrule
%     \file{.vscode}                     &amp; Visual Studio Code é…ç½®æ–‡ä»¶      \\
%     \file{CHANGELOG.md}                &amp; ä¿®è®¢è®°å½•                         \\
%     \file{latexmkrc}                   &amp; \pkg{latexmk} é…ç½®æ–‡ä»¶           \\
%     \file{LICENSE}                     &amp; è®¸å¯è¯                           \\
%     \file{njuthesis.cls}               &amp; æ¨¡æ¿æ–‡æ¡£ç±»                       \\
%     \file{njuthesis.dtx}\TblrNote{a}   &amp; æ–‡æ¡£ç±»æºä»£ç&nbsp;                     \\
%     \file{njuthesis.ins}\TblrNote{a}   &amp; æ–‡æ¡£ç±»å®‰è£…è„šæœ¬                   \\
%     \file{njuthesis.pdf}               &amp; ç”¨æˆ·æ‰‹å†Œï¼ˆæœ¬æ–‡æ¡£ï¼‰               \\
%     \file{njuthesis-doc.cls}           &amp; ç”¨æˆ·æ‰‹å†Œæ&nbsp;·å¼                     \\
%     \file{njuthesis-sample.bib}        &amp; ç¤ºä¾‹å‚è€ƒæ–‡çŒ®åˆ—è¡¨                 \\
%     \file{njuthesis-sample.tex}        &amp; ç¤ºä¾‹æ–‡æ¡£ï¼Œä¸å¦¨ä»¥æ­¤ä¸ºåŸºç¡€æ’°å†™è®ºæ–‡ \\
%     \file{njuthesis-graduate.def}      &amp; ç&nbsp;”ç©¶ç”Ÿå‚æ•°é…ç½®æ–‡ä»¶               \\
%     \file{njuthesis-postdoctoral.def}  &amp; åšå£«åŽå‚æ•°é…ç½®æ–‡ä»¶               \\
%     \file{njuthesis-undergraduate.def} &amp; æœ¬ç§‘ç”Ÿå‚æ•°é…ç½®æ–‡ä»¶               \\
%     \file{README.md}                   &amp; è‡ªè¿°æ–‡ä»¶                         \\
%     \bottomrule
%   \end{talltblr}
% \end{table}
%
%
% \subsection{æœ¬åœ°å®‰è£…}
%
% \subsubsection{æ&nbsp;‡å‡†å®‰è£…}
% \label{subsubsec:standard-installation}
%
% æˆ‘ä»¬\emph{å§‹ç»ˆå»ºè®®}ä½¿ç”¨å®åŒ…ç®¡ç†å™¨å°† \cls{njuthesis} å®‰è£…åˆ°æ‚¨çš„ \TeX ç³»
% ç»Ÿã€‚æ‚¨å¯ä»¥é€šè¿‡ \TL~Manager æˆ–è€… \MiKTeX~Console ç­‰å›¾å½¢åŒ–åŒ…ç®¡ç†å™¨ç›´æŽ¥æœ
% ç´¢å¹¶å®‰è£… \cls{njuthesis} ï¼ˆåŠå…¶ä¾èµ–çš„ \pkg{njuvisual}ï¼‰æœ€æ–°çš„
% ç¨³å®šç‰ˆã€‚åŒæ—¶ï¼Œæ‚¨ä¹Ÿå¯ä»¥ä½¿ç”¨ç»ˆç«¯å‘½ä»¤ã€‚ä¾‹å¦‚ï¼Œå‡è®¾æ‚¨ä½¿ç”¨çš„æ˜¯ \TLï¼Œ
% é”®å…¥ä¸‹è¿° \pkg{tlmgr} çš„å‘½ä»¤ï¼ˆå¾ˆå¯èƒ½éœ€è¦ç®¡ç†å‘˜æƒé™ï¼‰ï¼š
% \begin{shellexample}[morekeywords={tlmgr},emph={install}]
%   tlmgr install njuthesis njuvisual
% \end{shellexample}
% å³å¯å®Œæˆå®‰è£…ï¼Œæ—&nbsp;éœ€é¢å¤–å‡†å¤‡ \file{.cls} æ–‡ä»¶ã€‚
%
% å¦ä¸€æ–¹é¢ï¼ŒCTAN ä¾èµ–å¼€å‘è€…æ‰‹åŠ¨ä¸Šä¼&nbsp;æ›´æ–°ï¼Œç‰ˆæœ¬æ›´æ–°å…·æœ‰æ»žåŽæ€§ã€‚å¦‚æžœä½¿ç”¨æ—¶é‡åˆ°äº†é—®
% é¢˜ï¼Œä¸å¦¨ä½¿ç”¨ä¸‹ä¸€å°èŠ‚çš„\emph{å³æ—¶å®‰è£…æ–¹æ³•}ä¼˜å…ˆè½½å…¥è¾ƒæ–°çš„æ&nbsp;¼å¼æ–‡ä»¶ã€‚
%
% {\color{red}|[!]|} å¦‚æžœæ‚¨å…·å¤‡ç›¸å…³ç»éªŒ\footnote{è­¬å¦‚ç†Ÿæ‚‰å‘½ä»¤è¡Œæ“ä½œã€ä½¿ç”¨çš„æ˜¯ \TL
% å‘è¡Œç‰ˆç­‰ã€‚}ï¼Œå¯ä»¥åœ¨ä¸‹è½½ä»“åº“å†…å…¨éƒ¨æ–‡ä»¶åŽï¼ŒäºŽè¯¥ç›®å½•ä¸‹è¿è¡Œ
% \begin{shellexample}[morekeywords={l3build},emph={install}]
%   l3build install
% \end{shellexample}
% æ¥å®‰è£…æœ¬æ¨¡æ¿çš„æœ€æ–°ç‰ˆã€‚
%
%
% \subsubsection{å³æ—¶å®‰è£…}
% \label{subsubsec:on-the-fly-installation}
%
% åœ¨æŸäº›æƒ…å†µä¸‹ï¼ˆä¾‹å¦‚éœ€è¦ä¸Šä¼&nbsp;è‡³åœ¨çº¿ç¼–è¯‘å¹³å°ã€æ–°ç‰ˆæœ¬æä¾›äº†æ€¥éœ€çš„é”™è¯¯ä¿®å¤ï¼‰ï¼Œæ‚¨å¯èƒ½
% éœ€è¦ç‹¬ç«‹çš„ \file{.cls} æ&nbsp;¼å¼æ–‡ä»¶ã€‚æ­¤æ—¶è¯·å‰å¾€å‰è¿°çš„ Releases é¡µé¢ä¸‹è½½
% \emph{å®Œæ•´æ¨¡æ¿åŒ…}ã€‚
%
% å¯¹äºŽå¸Œæœ›ä½¿ç”¨ä¸»ä»“åº“ä¸­ç‰ˆæœ¬çš„ç”¨æˆ·ï¼Œæœ¬æ¨¡æ¿ä¹Ÿæä¾›äº†æ‰å¹³åŒ–å®‰è£…è„šæœ¬ï¼Œç”¨äºŽé‡Šæ”¾ä¾›ç¼–è¯‘çš„
% ç©ºç™½æ¨¡æ¿å’Œæ&nbsp;¼å¼æ–‡ä»¶ã€‚Windows ç”¨æˆ·è¯·ç›´æŽ¥åŒå‡»æ‰“å¼€ \file{install-win.bat}ï¼›å…¶ä»–å¹³
% å°ï¼ˆåŒ…æ‹¬ macOS å’Œ Linuxï¼‰ç”¨æˆ·è¯·åœ¨æ­¤ç›®å½•ä¸‹è¿è¡Œ
% \begin{shellexample}[morekeywords={bash}]
%   bash install-unix.sh
% \end{shellexample}
% è¯¥è„šæœ¬ä¼šç”Ÿæˆä¸€ä¸ª \file{mythesis/} ç›®å½•ä»¥ä¾¿ä»Žå¤´å†™ä½œï¼Œä»“åº“å†…é™¤æ­¤æ–‡ä»¶å¤¹ä»¥å¤–çš„å†…å®¹
% éƒ½å¯ä»¥å°½æƒ…åˆ&nbsp;é™¤ã€‚
%
% {\color{red}|[!]|} è¯·æ³¨æ„ï¼Œå¦‚æžœä»…ä»…æ˜¯å¸Œæœ›ä½¿ç”¨è¿™ä¸ªæ¨¡æ¿æ’°å†™è®ºæ–‡ï¼Œè¯·æ—&nbsp;è®ºå¦‚ä½•éƒ½ä¸
% è¦ä»Žæ‰‹åŠ¨ç¼–è¯‘ \file{source} æ–‡ä»¶å¤¹ä¸‹çš„æºä»£ç&nbsp;å¼€å§‹ï¼Œè¿™æ&nbsp;·åšåªä¼šæµªè´¹ç”Ÿå‘½ä¸­å®è´µçš„æ•°
% åˆ†é’Ÿæ—¶é—´ã€‚å¦‚æžœé‡åˆ°äº†é—®é¢˜ï¼Œè¯·å‰å¾€ GitHub ä»“åº“æå‡º issueã€‚æˆ‘ä»¬åªæŽ¨èå¸Œæœ›å‚ä¸Žå¼€å‘
% çš„åŒå­¦æŽ¥è§¦ \file{.dtx} æ–‡ä»¶ã€‚
%
%
% \subsection{æœ¬åœ°ç¼–è¯‘}
% \label{subsec:localcompile}
%
% æœ¬åœ°ç¼–è¯‘çš„å®‰è£…è¿‡ç¨‹åˆ†ä¸ºä¸¤ä¸ªé˜¶æ®µï¼šå®‰è£… \TeX å‘è¡Œç‰ˆä»¥åŠé…ç½®
% ç¼–è¾‘å™¨ã€‚å‰è€…æä¾›äº†å¯ä»¥è¢«å‘½ä»¤è¡Œç»ˆç«¯è°ƒç”¨çš„ç¼–è¯‘ç¨‹åºï¼Œ
% åŽè€…åˆ™æä¾›äº†è¯­æ³•é«˜äº®ã€è‡ªåŠ¨ç¼–è¯‘ç­‰äººæ€§åŒ–åŠŸèƒ½ã€‚
%
% \subsubsection{å®‰è£… \TeX{} å‘è¡Œç‰ˆ}
%
% é¦–å…ˆéœ€è¦ä¸‹è½½å¹¶å®‰è£… \TeX{} è½¯ä»¶å‘è¡Œç‰ˆï¼Œå…¶ä¸­åŒ…æ‹¬å¼•æ“Žã€å®åŒ…ã€å­—ä½“ã€æ–‡æ¡£ç­‰ã€‚
% å„æ“ä½œç³»ç»Ÿé€‚ç”¨æƒ…å†µè¯·å‚è€ƒè¡¨~\ref {tab:texdistribution}ã€‚ç¬¬ä¸€æ¬¡
% ç¼–è¯‘å‰è¯·åŠ¡å¿…é€šè¿‡ \MiKTeX~Consoleã€\TL~Manager ç­‰å›¾å½¢åŒ–ç¨‹åºæˆ–
% \pkg{tlmgr} \emph{æ‰‹åŠ¨æ›´æ–°å…¨éƒ¨å®åŒ…}ä»¥é¿å…æ½œåœ¨çš„å…¼å®¹æ€§é—®é¢˜ã€‚
% \begin{table}[ht]
%   \centering
%   \caption{\TeX è½¯ä»¶å‘è¡Œç‰ˆä¸€è§ˆ}
%   \label{tab:texdistribution}
%   \begin{tabular}{cccc}
%     \toprule
%     \TeX    &amp; Windows   &amp; macOS     &amp; Linux     \\
%     \midrule
%     \TL     &amp; $\bullet$ &amp;           &amp; $\bullet$ \\
%     \MacTeX &amp;           &amp; $\bullet$ &amp;           \\
%     \MiKTeX &amp; $\bullet$ &amp; $\bullet$ &amp; $\bullet$ \\
%     \bottomrule
%   \end{tabular}
% \end{table}
%
% ä»¥ä¸‹æ˜¯ä¸€äº›å€¼å¾—æ³¨æ„çš„è¦ç‚¹ï¼š
% \begin{itemize}
%   \item å¯ä»¥å‚ç…§è¿™ä»½\emph{æ‰‹æŠŠæ‰‹çš„æ•™ç¨‹}\cite{install-latex-guide-zh-cn}ã€‚
%   \item æ&nbsp;¡å›­ç½‘çŽ¯å¢ƒä¸­è®¿é—®\ignorespaces
%         \href{https://mirror.nju.edu.cn/download/TeX%20æŽ’ç‰ˆç³»ç»Ÿ}
%         {å—äº¬å¤§å­¦å¼€æºè½¯ä»¶é•œåƒç«™}å¯ä»¥èŽ·å¾—æœ€ä½³çš„ä¸‹è½½ä½“éªŒã€‚
%   \item ä½¿ç”¨æœ€æ–°çš„å‘è¡Œç‰ˆï¼Œå³ç‰ˆæœ¬å·ä¸º2022æˆ–è€…22ã€‚
%   \item å¯¹äºŽ Windows å’Œ macOS ç”¨æˆ·ï¼Œæ›´æŽ¨èè½»é‡åŒ–çš„ \MiKTeX å¥—ä»¶ã€‚
% ^^A   \item Linux ç”¨æˆ·è¯·å°½å¯èƒ½ä¸‹è½½ full ç‰ˆæœ¬ï¼Œå¦‚ |texlive-full|ã€‚
% ^^A         æ¢è¨€ä¹‹ï¼Œä¸‹è½½æœ€å¤§çš„è½¯ä»¶åŒ…ã€‚
%   \item å¯¹äºŽä¸€éƒ¨åˆ†ç”¨åˆ°æ–°ç‰ˆæœ¬ç‰¹æ€§çš„å®åŒ…ï¼Œ\cls{njuthesis} å†…ç½®äº†ç‰ˆæœ¬æ£€æŸ¥
%         \footnote{è­¬å¦‚é‡åˆ° l3 è¿‡æ—¶é—®é¢˜è¯·è¿è¡Œ |tlmgr update l3packages|ã€‚}
%         ï¼Œè¯·ç¡®è®¤å„å®åŒ…å·²å‡çº§è‡³æœ€æ–°ç‰ˆã€‚
% \end{itemize}
%
%
% \subsubsection{é…ç½®ç¼–è¾‘å™¨}
% \changes{v0.11}{2021/11/23}{æä¾› TeXstudio é…ç½®æ–‡ä»¶ã€‚}
%
% é…ç½®å®Œç¼–è¯‘å™¨åŽï¼Œè¿˜éœ€è¦ä¸€ä¸ª\emph{æ–‡æœ¬ç¼–è¾‘å™¨}æ¥å®Œæˆ \file{.tex} æ–‡ä»¶å†…å®¹çš„å†™ä½œã€‚
%
% å…³äºŽå…·ä½“ä½¿ç”¨å“ªä¸€ç§ï¼Œè‡³ä»Šä»æœ‰ç›¸å½“ä¸€éƒ¨åˆ†äººè®¤ä¸ºWindowsè‡ªå¸¦çš„\emph{è®°äº‹æœ¬}æ˜¯
% æœ€å¥½çš„æ–‡æœ¬ç¼–è¾‘å™¨ã€‚ä½†å¯¹äºŽæœ¬é¡¹ç›®è€Œè¨€ï¼Œåœ¨æ­¤è¯šå¿ƒè¯šæ„åœ°æŽ¨èæ‚¨ä½¿ç”¨\emph{æ›´çŽ°ä»£
% æ›´ç¾Žè§‚æ›´å¤šåŠŸèƒ½}çš„ç¼–è¾‘å™¨ï¼Œè­¬å¦‚\emph{å®‰è£…äº† \LaTeX Workshop æ’ä»¶çš„
% \href{https://code.visualstudio.com/}{Visual Studio Code}}ã€‚æ‚¨ä¹Ÿå¯ä»¥æ&nbsp;¹æ®
% ä¸ªäººçš„å–œå¥½éšæ„ä½¿ç”¨ TeXworksã€TeXstudio ç­‰ç¼–è¾‘å™¨ï¼Œé¡ºæ‰‹å°±è¡Œã€‚
%
% \cls{njuthesis} ä¸ºä¸€äº›å¸¸è§ç¼–è¾‘å™¨æä¾›äº†é…ç½®æ–‡ä»¶ï¼Œå¦‚
% \begin{description}
%   \item[Visual Studio Code] æœ¬æ¨¡æ¿åœ¨ \file{.vscode/} ä¸­æä¾›ä¸€ä»½
%        \LaTeX Workshop æ’ä»¶çš„ç®€æ˜“é…ç½®ï¼Œåœ¨æ‰“å¼€æ–‡ä»¶å¤¹åŽå°†è‡ªåŠ¨å¯¼å…¥ï¼Œ
%        å¯ä»¥çœç•¥åˆå§‹é…ç½®æ­¥éª¤ç›´æŽ¥ä½¿ç”¨ã€‚
%   \item[TeXstudio] æœ¬æ¨¡æ¿æä¾› \file{conf.txsprofile}ï¼Œå¯ä»¥ä½¿ç”¨å¿«æ·é”®
%        |alt+O+P| å¯¼å…¥é…ç½®æ–‡ä»¶ã€‚ä¸ºäº†ç®€åŒ–æµç¨‹\footnote{å½“ç„¶ï¼Œä¹Ÿå¯ä»¥è®¾ç½®
%        ä¸ºä½¿ç”¨ \XeLaTeX ç¼–è¯‘ï¼Œç„¶åŽæŒ‰ç…§ \ref{subsubsec:compileseq}
%        å†…å®¹ä½¿ç”¨å¿«æ·é”® |F8| æ‰‹åŠ¨ç¼–è¯‘å‚è€ƒæ–‡çŒ®ã€‚}ï¼Œè¯¥é…ç½®æ–‡ä»¶ä½¿ç”¨
%        \pkg{latexmk}ï¼Œç¬¬ä¸€æ¬¡ç¼–è¯‘å‰è¯·å‚è€ƒä¸‹ä¸€èŠ‚å†…å®¹å®‰è£… Perlã€‚
% \end{description}
%
%
% \subsubsection{ç¼–è¯‘é¡ºåº}
% \label{subsubsec:compileseq}
% \TeX æœ¬èº«æ˜¯å‘½ä»¤è¡Œç¨‹åºï¼Œé€šè¿‡ä¸åŒçš„å‘½ä»¤è°ƒç”¨æ‰€éœ€çš„ç¼–è¯‘å¼•æ“Žï¼Œ
% ç¼–è¾‘å™¨æä¾›çš„å¿«æ·æŒ‰é’®å®žé™…åªæ˜¯åšäº†åŒ…è£…ã€‚ä¸ºäº†ä¾¿äºŽæŽ’æŸ¥è¿è¡Œé”™è¯¯ï¼Œ
% ä»¥ä¸‹é€šè¿‡å…·ä½“ç»ˆç«¯å‘½ä»¤ç®€è¦æè¿°ç¼–è¯‘è¿‡ç¨‹ã€‚
%
% ç¼–è¯‘æœ¬æ¨¡æ¿çš„è¿‡ç¨‹å¯ä»¥æ¦‚æ‹¬ä¸ºä¸‹è¿°æ­¥éª¤ï¼š
% \begin{enumerate}
%   \item ç”Ÿæˆåˆå§‹æ–‡æ¡£
%   \item ç”Ÿæˆå‚è€ƒæ–‡çŒ®ä¿¡æ¯
%   \item ç”Ÿæˆé¡µç&nbsp;ã€ç¼–å·ã€ç›®å½•
%   \item å°†å‚è€ƒæ–‡çŒ®åˆ—è¡¨é¡µæ’å…¥ç›®å½•
% \end{enumerate}
% æ€»è®¡éœ€è¦ç¼–è¯‘å››æ¬¡ã€‚\emph{å‡è®¾å³å°†ä½¿ç”¨çš„ä¸»æ–‡ä»¶åä¸º
% \file{njuthesis-sample.tex}}ï¼Œåº”é‡‡ç”¨ä»¥ä¸‹å‘½ä»¤é¡ºåºè¿›è¡Œç¼–è¯‘ï¼Œ
% ä»¥ç”Ÿæˆå†…å®¹æ­£ç¡®çš„ \file{njuthesis-sample.pdf}ã€‚è¾“å‡ºçš„ PDF
% æ–‡æ¡£ä½äºŽåŒä¸€ç›®å½•ä¸‹ã€‚è¯¥ç›®å½•ä¸‹åŒæ—¶ä¼šç”Ÿæˆè‹¥å¹²ä¸­é—´æ–‡ä»¶ã€‚
%
% ç¼–è¯‘å‘½ä»¤å…·ä½“ä¸ºå¼•æ“Žåç§°åŠ&nbsp;ä¸»æ–‡ä»¶åï¼Œåœ¨ç¼–è¯‘ \file{.tex} æ–‡ä»¶æ—¶ï¼Œ
% æ–‡ä»¶æ‰©å±•åå¯ä»¥çœç•¥ä¸å†™ã€‚çŽ°é˜¶æ®µ \cls{njuthesis} ä»…æ”¯æŒ \XeTeX
% ä¸Ž \LuaTeX å¼•æ“Žï¼Œä»¥åŠ \biber æ–‡çŒ®å·¥å…·ã€‚è¯·æ³¨æ„ï¼Œå‡&nbsp;ç§å‘½ä»¤çš„è¾“å‡ºæ–‡ä»¶
% åŸºæœ¬ç›¸åŒï¼Œå¯ä»¥ä»»å–ä¸€ç§ï¼›ä½†å¦‚æžœæ‚¨ä¸æ¸…æ¥šè¿™ä¸¤ç§ç¼–è¯‘å¼•æ“Žçš„åŒºåˆ«ï¼Œ
% æˆ–è€…å¯¹å¤šæ­¥ç¼–è¯‘æ„Ÿåˆ°å›°æƒ‘ï¼Œæˆ‘ä»¬å»ºè®®ä¼˜å…ˆä½¿ç”¨ |latexmk -xelatex|ã€‚
%
%
% \subparagraph{ä½¿ç”¨ \XeLaTeX}
% æ&nbsp;‡å‡†çš„ \XeTeX å¼•æ“Žå››æ­¥ç¼–è¯‘æ–¹æ³•ã€‚
%
% \begin{shellexample}[morekeywords={xelatex,biber}]
%   xelatex njuthesis-sample
%   biber njuthesis-sample
%   xelatex njuthesis-sample
%   xelatex njuthesis-sample
% \end{shellexample}
%
%
% \subparagraph{ä½¿ç”¨ \LuaLaTeX}
% æ&nbsp;‡å‡†çš„ \LuaTeX å¼•æ“Žå››æ­¥ç¼–è¯‘æ–¹æ³•ã€‚
%
% \begin{shellexample}[morekeywords={lualatex,biber}]
%   lualatex njuthesis-sample
%   biber njuthesis-sample
%   lualatex njuthesis-sample
%   lualatex njuthesis-sample
% \end{shellexample}
%
%
% \subparagraph{ä½¿ç”¨ \pkg{latexmk}}
% \pkg{latexmk}\cite{latexmk} æ˜¯ä¸€ä¸ªåŸºäºŽ Perl è„šæœ¬çš„è‡ªåŠ¨ç¼–è¯‘å·¥å…·ï¼Œ
% å®—æ—¨æ˜¯é€šè¿‡å•ä¸€å‘½ä»¤ç®€åŒ–ä¸Šè¿°çš„å¤šæ¬¡ç¼–è¯‘æµç¨‹ã€‚
% åœ¨ä½¿ç”¨è¯¥å‘½ä»¤å‰ï¼Œè¯·ç¡®ä¿å®‰è£…äº†ä»¥ä¸‹è½¯ä»¶ï¼š
% \begin{description}
%   \item[Perl] ä¸€èˆ¬é¢„è£…äºŽ macOS å’Œ Linuxï¼Œè€Œ Windows ç”¨æˆ·éœ€è¦å•ç‹¬å®‰è£…
%        \href{https://strawberryperl.com/}{Strawberry Perl}ã€‚
%   \item[\normalfont\pkg{latexmk}] å¦‚æžœç»ˆç«¯æ‰¾ä¸åˆ° |latexmk| å‘½ä»¤ï¼Œéœ€ä½¿ç”¨åŒ…ç®¡ç†å™¨å•ç‹¬å®‰è£…ã€‚
% \end{description}
%
% è¯¥å‘½ä»¤çš„ä½¿ç”¨æ–¹æ³•ä¸º
% \begin{shellexample}[morekeywords={latexmk}]
%   latexmk njuthesis-sample
% \end{shellexample}
% ç›´æŽ¥è¿è¡Œä¼šè°ƒç”¨ \pdfLaTeX å¼•æ“Žå¯¼è‡´æŠ¥é”™ã€‚
% å¦‚éœ€æŒ‡å®šç¼–è¯‘å¼•æ“Žï¼Œå¯ä»¥åŠ&nbsp;å…¥ |-xelatex| æˆ– |-lualatex| å‚æ•°ã€‚
% ä¾‹å¦‚ï¼ŒæŒ‡å®š \XeLaTeX çš„å‘½ä»¤ä¸º
% \begin{shellexample}[morekeywords={latexmk},emph={-xelatex}]
%   latexmk -xelatex njuthesis-sample
% \end{shellexample}
%
% æ­¤å¤–ï¼Œå¯ä»¥é€‰æ‹©ä½¿ç”¨ä»¥ä¸‹å‘½ä»¤æ¸…ç†ç¼–è¯‘ç”Ÿæˆçš„ä¸´æ—¶æ–‡ä»¶ã€‚
% \begin{shellexample}[morekeywords={latexmk},emph={-c}]
%   latexmk -c
% \end{shellexample}
%
%
% \subsection{åœ¨çº¿ç¼–è¯‘}
% \label{subsec:onlinecompile}
%
% ç›¸ä¿¡æ‚¨åœ¨æŽ¥è§¦äº†æœ¬åœ°ç¼–è¯‘ä»¥åŽï¼Œå¾ˆå¿«å°±ä¼šæ„è¯†åˆ°ä¸€äº›ååˆ†æ˜¾ç„¶çš„äº‹å®žï¼Œè­¬å¦‚ \TeX ç¼–è¯‘å™¨
% å®‰è£…è¿‡ç¨‹è¾ƒä¸ºæ¼«é•¿\footnote{å›&nbsp;æ­¤å¯¹äºŽ Windows æŽ¨è \MiKTeXã€‚}ï¼Œå&nbsp;ç”¨ç©ºé—´è¿‡å¤§
% \footnote{äº‹å®žä¸Šï¼Œå¯ä»¥é€šè¿‡ |scheme-infraonly| æ¨¡å¼å®‰è£… \TLï¼ŒéšåŽåˆ©ç”¨ \pkg{tlmgr}
% å®‰è£…ä¾èµ–å®åŒ…ï¼Œè¿™ä»½å®åŒ…åˆ—è¡¨å¯ä»¥åœ¨ Git ä»“åº“çš„ \file{.github/workflows/build.yml}
% æ‰¾åˆ°ã€‚}ï¼Œè€Œä¸”åœ¨ä¸€éƒ¨åˆ†å¤„ç†å™¨æ€§èƒ½ä¸ä½³çš„ç”µè„‘ä¸Šéœ€è¦è¾ƒé•¿ç¼–è¯‘æ—¶é—´\footnote{å‡ºäºŽæ–‡ä»¶ IO
% é€Ÿåº¦çš„å·®å¼‚ï¼ŒåŒä¸€ä¸ªæ¨¡æ¿åœ¨ Linux ç¼–è¯‘å¯ä»¥ç›¸å¯¹ Windows èŠ‚çœçº¦ä¸€åŠè€—æ—¶ã€‚}ã€‚
% æ‹’ç»æŽ¥å—è¿™äº›éº»çƒ¦çš„åŒå­¦å¯ä»¥å°è¯•æœ¬èŠ‚ä»‹ç»çš„åœ¨çº¿ç¼–è¯‘æ–¹æ³•ã€‚
%
% {\color{red}|[!]|} ä½¿ç”¨åœ¨çº¿ç¼–è¾‘å™¨æ—¶è¯·è°¨æ…Žå¤‡ä»½æ‚¨çš„å¿ƒè¡€ç»“æ™¶ã€‚
%
% \subsubsection{å—å¤§ \TeX å¹³å°ç®€ä»‹}
% \changes{v0.2}{2021/09/07}{æ·»åŠ&nbsp;å¯¹å—å¤§ \TeX çš„æ”¯æŒã€‚}
%
% å½“å‰çš„\href{https://tex.nju.edu.cn}{å—å¤§ \TeX} åŸºäºŽ
% \href{https://www.texpage.com}{TeXPage} æä¾›çš„æœåŠ¡ï¼Œ
% æ˜¯ \href{https://sci.nju.edu.cn/}{eScience ä¸­å¿ƒ}ä¸ºå—å¤§åœ¨æ&nbsp;¡å¸ˆç”Ÿæä¾›çš„
% å…è´¹ \LaTeX åœ¨çº¿ç¼–è¾‘å™¨ï¼Œé¦–æ¬¡ä½¿ç”¨æ—¶éœ€å‡­ç»Ÿä¸€èº«ä»½è®¤è¯æ¿€æ´»è´¦å·ã€‚
%
%
% \subsubsection{æ“ä½œæ­¥éª¤}
%
% æœ¬è¯´æ˜Žæ‰‹å†Œå¼€å¤´çš„ \ref{subsec:first-things-first} å³å‘ˆçŽ°äº†ç½‘ç«™å†…åµŒçš„
% \cls{njuthesis} æ¨¡æ¿çš„ä½¿ç”¨æ–¹æ³•ã€‚
% å¦‚æžœç½‘ç«™æ›´æ–°ä¸åŠæ—¶ï¼Œä¹Ÿå¯ä»¥æŒ‰å¦‚ä¸‹æ­¥éª¤æ‰‹åŠ¨ä¸Šä¼&nbsp;åŒ…å«æ¨¡æ¿çš„åŽ‹ç¼©åŒ…ã€‚
%
% \begin{enumerate}
%   \item ç™»å½•\href{https://tex.nju.edu.cn}{å—å¤§ \TeX ç½‘ç«™}
%   \item ä¸Šä¼&nbsp;~\ref{subsubsec:on-the-fly-installation}~èŠ‚å¾—åˆ°çš„åŽ‹ç¼©æ–‡ä»¶ã€‚
%   \item åœ¨é¡¹ç›®é¡µé¢å·¦ä¸Šè§’çš„\tpbutton{è®¾ç½®}ä¸­ï¼Œç¡®è®¤ç¼–è¯‘å™¨ä¸º |XeLaTeX| æˆ–è€… |LuaLaTeX|
%   \item ä»¿ç…§ \file{njuthesis-sample.tex} ç¼–å†™è®ºæ–‡
%   \item ç‚¹å‡»å³ä¸Šè§’\tpbutton{ç¼–è¯‘}æŒ‰é’®è¿›è¡Œç¼–è¯‘å’Œé¢„è§ˆ
% \end{enumerate}
%
%
% \subsection{ç‰ˆæœ¬å‡çº§}
%
% æœ¬æ¨¡æ¿ä»åœ¨å¼€å‘ä¸­ï¼Œå°†ä¸æ–­å‘å¸ƒæ–°ç‰ˆæœ¬ï¼Œæ‚¨å¯èƒ½éœ€è¦ä¸å®šæœŸè¿›è¡Œæ›´æ–°ä»¥å¾—åˆ°
% å¯¹äºŽå·²çŸ¥é—®é¢˜çš„ä¿®å¤è¡¥ä¸ã€‚æ¯ä¸ªç‰ˆæœ¬çš„æ›´æ–°å†…å®¹è®°å½•äºŽ Git ä»“åº“ä¸­çš„
% \file{CHANGELOG.md}ã€‚é™¤éžç‰¹åˆ«æåˆ°é€‰é¡¹å˜åŒ–ï¼Œå‡çº§æ—¶ä¸€èˆ¬æ—&nbsp;éœ€æ›´æ”¹ \file{.tex}
% æ–‡ä»¶å†…å®¹\footnote{åœ¨ç¡®å®žå‘ç”Ÿäº†æŽ¥å£å˜åŠ¨ï¼Œä¾‹å¦‚é€‰é¡¹åç§°å‘ç”Ÿäº†æ›´æ”¹ï¼Œ
% ä¸€ç§ç¨³å¦¥åšæ³•æ˜¯å°†è®ºæ–‡å†…å®¹è¿ç§»è‡³æ–°ç‰ˆçš„ \file{njuthesis-sample.tex}ã€‚}ã€‚
% åŸºäºŽå®‰è£…å’Œç¼–è¯‘æ–¹å¼çš„å·®å¼‚ï¼Œå¯ä»¥æŒ‰ç…§å½“å‰å·¥ä½œæ–‡ä»¶å¤¹å†…æ˜¯å¦æœ‰ \file{.cls}
% æ–‡ä»¶åˆ†åˆ«è¿›è¡Œæ›´æ–°æ“ä½œã€‚
%
% \subparagraph{æœ‰}
% ä¸‹è½½ \file{njuthesis-user-v*.zip}ï¼Œä½¿ç”¨å…¶ä¸­æ–°ç‰ˆçš„ \file{.cls}ã€\file{.def}
% æ–‡ä»¶è¦†ç›–æ—§ç‰ˆæœ¬ã€‚
%
% \subparagraph{æ²¡æœ‰}
% å¦‚æžœä½¿ç”¨çš„æ˜¯å—å¤§ \TeXï¼Œæ›´æ–°å†…ç½®æ¨¡æ¿æ—¶ä¼šè¿›è¡Œå…¬å‘Šï¼Œä¸€èˆ¬ä¸ºä¸Šä¼&nbsp; CTAN
% åŽä¸€å‘¨å†…ã€‚å¦‚æžœæ˜¯æœ¬åœ°å®‰è£…ï¼Œè¯·ç›´æŽ¥ä½¿ç”¨åŒ…ç®¡ç†å™¨è¿›è¡Œæ›´æ–°ï¼š
% \begin{shellexample}[morekeywords={tlmgr},emph={update}]
%   tlmgr update --all
% \end{shellexample}
%
%
% \section{ä½¿ç”¨æ–¹æ³•}
%
% \subsection{æ&nbsp;‡å‡†ç»“æž„}
%
% å…¸åž‹çš„ \cls{njuthesis} ä¸»æ–‡ä»¶ç»“æž„åº”è¯¥å¦‚ä¸‹æ‰€ç¤ºï¼š
%
% \begin{latexexample}[moretexcs={\njusetup,\tableofcontents,
%   \maketitle,\mainmatter,\chapter,\printbibliography},emph={[1]document}]
%   \documentclass{njuthesis}
%   \njusetup{}
%   \begin{document}
%   \maketitle
%   \tableofcontents
%   \mainmatter
%   \chapter{æ¬¢è¿Ž}
%   ä½¿ç”¨ \LaTeX{}ï¼
%   \printbibliography
%   \end{document}
% \end{latexexample}
%
% å¦‚æžœæ‚¨å°è¯•ç¼–è¯‘ä¸Šé¢çš„ä»£ç&nbsp;ï¼Œä¼šå‘çŽ°è‡ªå·±å¾—åˆ°äº†ä¸€ä¸ª5é¡µçš„ PDF æ–‡æ¡£ï¼Œ
% æ˜¯ä¸€ä»½ç©ºç™½çš„æœ¬ç§‘ç”Ÿè®ºæ–‡ã€‚å½“ç„¶ï¼Œè¿™ä¸ªæ–‡æ¡£å®žé™…ä¸Šæ²¡æœ‰ä»»ä½•å†…å®¹ï¼Œ
% æŽ¥ä¸‹æ¥çš„éƒ¨åˆ†ä¼šä»‹ç»å…·ä½“å¡«å†™å†…å®¹çš„æ–¹æ³•ã€‚
%
%
% \subsection{æ¨¡æ¿é€‰é¡¹}
%
% æ¨¡æ¿é€‰é¡¹ä½äºŽ \tn{documentclass} åŽçš„æ–¹æ‹¬å·å†…ï¼Œç”¨äºŽæŒ‡å®šæ¨¡æ¿çš„è¡Œä¸ºã€‚
% ä¸‹æ–‡ä¸­å°–æ‹¬å·å†…åˆ—å‡ºäº†è‹¥å¹²ä¸ªå…è®¸çš„é€‰é¡¹ï¼Œå…¶ä¸­åŠ&nbsp;ç²—çš„ä¸ºé»˜è®¤é€‰é¡¹ï¼ˆç¼ºçœå€¼ï¼‰ã€‚
%
% \subsubsection{å­¦ä½ä¿¡æ¯}
% \begin{function}[added=2021-09-07,updated=2022-07-23]{type}
%   \begin{syntax}
%     \OPT{type} = &lt;(bachelor)|master|doctor|postdoc&gt;
%   \end{syntax}
% é€‰æ‹©æ¯•ä¸šè®ºæ–‡æ¨¡æ¿ç±»åž‹ï¼Œè¿™å°†å†³å®šæ¨¡æ¿æ•´ä½“çš„å¤–è§‚ã€‚å¯é€‰å€¼åˆ†åˆ«ä¸º
% å­¦å£«ï¼ˆæœ¬ç§‘ç”Ÿï¼‰ã€ç¡•å£«ç&nbsp;”ç©¶ç”Ÿã€åšå£«ç&nbsp;”ç©¶ç”Ÿå’Œåšå£«åŽï¼Œé»˜è®¤ä¸ºå­¦å£«ã€‚
% \end{function}
%
% \begin{function}[added=2021-09-07,updated=2022-07-01]{degree}
%   \begin{syntax}
%     \OPT{degree} = &lt;(academic)|professional&gt;
%   \end{syntax}
% é€‰æ‹©ç&nbsp;”ç©¶ç”Ÿçš„å­¦ä½ç±»åž‹ã€‚å¯é€‰å€¼åˆ†åˆ«å­¦æœ¯åž‹å’Œä¸“ä¸šåž‹ï¼Œé»˜è®¤ä¸ºå­¦æœ¯åž‹ã€‚
% \end{function}
%
%
% \subsubsection{ç‰¹æ®Šé¡µé¢}
%
% \begin{function}[added=2021-09-07,updated=2022-07-05]{nl-cover}
%   \begin{syntax}
%     \OPT{nl-cover} = &lt;\TFF&gt;
%   \end{syntax}
% æ˜¯å¦ä½¿ç”¨å›½å®¶å›¾ä¹¦é¦†å°é¢ï¼Œé»˜è®¤å…³é—­ã€‚
% \end{function}
%
% é€šè¿‡æ­¤é¡¹å¯ç”¨å›½å®¶å›¾ä¹¦é¦†å°é¢\emph{æ›¿æ¢}æ™®é€šå°é¢ã€‚
% ç”±äºŽæœ¬ç§‘ç”Ÿé™¢æ–‡ä»¶ä¸­å¹¶æœªæåŠç›¸å…³è§„å®šï¼Œæ•…æœ¬é€‰é¡¹ä»…å¯¹äºŽç&nbsp;”ç©¶ç”Ÿæœ‰æ•ˆã€‚
%
% \begin{function}[updated=2022-01-06]{decl-page}
%   \begin{syntax}
%     \OPT{decl-page} = &lt;\TFF&gt;
%   \end{syntax}
% æ˜¯å¦éœ€è¦è‡ªåŠ¨ç”Ÿæˆå£°æ˜Žé¡µé¢ï¼Œé»˜è®¤å…³é—­ã€‚
% \end{function}
%
% é€šè¿‡æ­¤é¡¹ï¼Œå¯¹äºŽæœ¬ç§‘ç”Ÿæ¨¡æ¿å¯åœ¨å°é¢åŽæ·»åŠ&nbsp;çš„è¯šä¿¡æ‰¿è¯ºä¹¦ï¼Œå¯¹äºŽç&nbsp;”ç©¶ç”Ÿæ¨¡æ¿å¯åœ¨
% å°é¢åŽæ·»åŠ&nbsp;åŽŸåˆ›æ€§å£°æ˜Ž\footnote{å…¶ä¸­çš„æ‰“å‹¾ç¬¦å·ä¾èµ– \pkg{unicode-math}ã€‚}ï¼Œ
% å¹¶ä¸”åœ¨æœ€åŽä¸€é¡µæ·»åŠ&nbsp;å­¦ä½è®ºæ–‡å‡ºç‰ˆæŽˆæƒä¹¦ã€‚
%
% å¯¹äºŽéœ€è¦æ‰‹åŠ¨æ’å…¥æ‰¿è¯ºä¹¦æ‰«æé¡µçš„æƒ…å†µï¼Œå¯ä»¥åœ¨å¯¼è¨€åŒºè½½å…¥ \pkg{pdfpages} å®åŒ…
% \cite{pdfpages}ï¼Œå¹¶åœ¨æ‰€éœ€ä½ç½®ä½¿ç”¨è¯¥å®åŒ…æä¾›çš„ \tn{includepdf} å‘½ä»¤ã€‚
% ä¾‹å¦‚ï¼Œå¯ä»¥ç”¨å¦‚ä¸‹æ‰€ç¤ºçš„å‘½ä»¤æ’å…¥æ‰«æä»¶çš„ç¬¬ä¸€é¡µï¼Œå¹¶æ’å…¥ç´§éšçš„ä¸€ä¸ªç©ºç™½é¡µã€‚
% \begin{latexexample}[moretexcs={\includepdf},emph={[2]pages}]
%   \includepdf[pages={1,{}}]{scanned.pdf}
%   % \setcounter{page}{1} % ä½¿æ‰«æé¡µä¸å&nbsp;ç”¨é¡µç&nbsp;
% \end{latexexample}
%
%
% \subsubsection{é¡µé¢æ¨¡å¼}
%
% \begin{function}[added=2022-01-14]{oneside,twoside}
%   \begin{syntax}
%     &lt;\OPT{oneside}|(\OPT{twoside})&gt;
%   \end{syntax}
% å¼€å¯å•é¢æˆ–åŒé¢æ¨¡å¼ï¼Œé»˜è®¤ä¸ºåŒé¢æ¨¡å¼ã€‚
% \end{function}
%
% æœ¬é€‰é¡¹ç»§æ‰¿è‡ª \LaTeXe \cls{book} æ&nbsp;‡å‡†æ–‡æ¡£ç±»ã€‚
% å•åŒé¢é€‰é¡¹ä¸ºå…¨å±€é€‰é¡¹ï¼Œå¼€å¯åŽä¼šæ”¹å˜é¡µç&nbsp;ç¼–å·ï¼Œä»¥åŠéƒ¨åˆ†å®åŒ…çš„è¡Œä¸ºã€‚
% åœ¨å•é¢æ¨¡å¼ä¸‹ï¼Œé¡µé¢æ˜¯è¿žç»­çš„ï¼Œä¸ä¼šäº§ç”Ÿç©ºç™½é¡µï¼›åœ¨åŒé¢æ¨¡å¼ä¸‹ï¼Œ
% æ–°çš„ä¸€ç«&nbsp;ä»¥åŠå°é¢ã€æ‘˜è¦ã€å‚è€ƒæ–‡çŒ®è¡¨ç­‰ç‰¹æ®Šé¡µé¢éƒ½ä¼šä»Žå¥‡æ•°é¡µå¼€å§‹ï¼Œ
% åœ¨å¥‡æ•°é¡µç»“æŸçš„å†…å®¹åŽä¼šè¡¥ä¸Šä¸€é¡µç©ºé¡µï¼Œæ›´é€‚åˆå°åˆ·è¾“å‡ºã€‚
%
% \begin{function}[added=2021-12-15,updated=2024-03-19]{draft}
%   \begin{syntax}
%      &lt;\OPT{draft}&gt;
%   \end{syntax}
% æ˜¯å¦å¼€å¯è‰ç¨¿æ¨¡å¼ï¼Œé»˜è®¤å…³é—­ã€‚
% \end{function}
%
% æœ¬é€‰é¡¹ç»§æ‰¿è‡ª \LaTeXe \cls{book} æ&nbsp;‡å‡†æ–‡æ¡£ç±»ã€‚
% è‰ç¨¿æ¨¡å¼ä¸ºå…¨å±€é€‰é¡¹ï¼Œå¯ç”¨è¿™ä¸€é€‰é¡¹å°†äº§ç”Ÿä»¥ä¸‹æ•´ä½“å½±å“ï¼š
% \begin{itemize}
%   \item ç¦ç”¨å°é¢çš„ç»˜åˆ¶ï¼ˆåŒ…æ‹¬æ‰¿è¯ºå’Œå£°æ˜Žï¼‰
%   \item æ˜¾ç¤ºé¡µé¢æ–‡å­—èŒƒå›´è¾¹æ¡†ä»¥åŠé¡µçœ‰é¡µè„šçº¿
%   \item åœ¨è¶…å‡ºå®½åº¦çš„å†…å®¹å³ä¾§æ·»åŠ&nbsp;é»‘è‰²æ–¹å—æ&nbsp;‡è®°
%   \item ä¸å†æ¸²æŸ“å›¾ç‰‡ï¼Œä½¿ç”¨å«æœ‰å›¾ç‰‡è·¯å¾„çš„ç©ºç™½ç›’å­å&nbsp;ä½
%   \item ä¸å†æ¸²æŸ“è¶…é“¾æŽ¥åŠç”Ÿæˆ PDF ä¹¦ç­¾
% \end{itemize}
% è‰ç¨¿æ¨¡å¼æœ‰åŠ©äºŽæå‡ç¼–è¯‘é€Ÿåº¦ä»¥åŠæ£€æŸ¥æ&nbsp;¼å¼é—®é¢˜ï¼Œå»ºè®®åœ¨å®šç¨¿å‰å§‹ç»ˆå¼€å¯ã€‚
%
% å¯ç”¨è¿™ä¸€é€‰é¡¹ä¹Ÿä¼šæ”¹å˜ç‰¹å®šå®åŒ…çš„è¡Œä¸ºï¼Œè­¬å¦‚åœ¨è‰ç¨¿æ¨¡å¼ä¸‹ \pkg{listings}
% å®åŒ…çš„ä»£ç&nbsp;çŽ¯å¢ƒä¸ä¼šæ˜¾ç¤ºå†…å®¹ï¼Œå…·ä½“æ•ˆæžœéœ€è¦å‚ç…§å„ä¸ªå®åŒ…çš„è¯´æ˜Žæ–‡æ¡£ã€‚
% å¦‚éœ€æŠµæ¶ˆè‰ç¨¿æ¨¡å¼çš„å½±å“ï¼Œè¯·ä½¿ç”¨ \opt{final} é€‰é¡¹è½½å…¥ç›¸å…³å®åŒ…ã€‚
%
% \begin{function}[added=2022-04-19,updated=2024-04-19]{anonymous}
%   \begin{syntax}
%      &lt;\OPT{anonymous}&gt;
%   \end{syntax}
% æ˜¯å¦å¼€å¯ç›²å®¡æ¨¡å¼ã€‚
% \end{function}
%
% ç›²å®¡æ¨¡å¼ä¼šæŠ¹é™¤è®ºæ–‡ä¸­çš„å­¦æ&nbsp;¡å’Œä¸ªäººä¿¡æ¯ï¼Œæ•ˆæžœåŒ…æ‹¬ï¼š
% \begin{itemize}
%   \item ä½œè€…ã€å¯¼å¸ˆå§“åç”¨ $\times\times\times$ ä»£æ›¿
%   \item ä¸æ˜¾ç¤ºå­¦å·ï¼Œä½†ä¿ç•™å¹´çº§
%   \item ä¸æ˜¾ç¤ºå£°æ˜Žé¡µ
%   \item è‡´è°¢é¡µä»…æ˜¾ç¤ºä¹¦ç­¾
%   \item æˆæžœåˆ—è¡¨ä»…æ˜¾ç¤ºåˆŠåå’Œå¹´ä»½
% \end{itemize}
%
% å¦‚æžœä½&nbsp;æƒ³ä½¿ç”¨æ›´ä¸¥æ&nbsp;¼çš„æ¨¡å¼ï¼Œå¯ä»¥å‚è€ƒ \ref{subsec:njusetup}~èŠ‚çš„è¯­æ³•å¡«å†™ä¸‹é¢çš„é€‰é¡¹ã€‚
%
% \begin{function}[added=2024-04-19]{anonymous-mode/no-nju}
%   \begin{syntax}
%      \OPT{no-nju} = &lt;\TFF&gt;
%   \end{syntax}
% æ˜¯å¦éšè—å­¦æ&nbsp;¡ä¿¡æ¯ã€‚é»˜è®¤å…³é—­ã€‚å¼€å¯åŽä¼šéšè—æ&nbsp;¡åã€æ&nbsp;¡å¾½å’Œå­¦æ&nbsp;¡ä»£ç&nbsp;ã€‚
% \end{function}
%
%
% \subsubsection{å¯é€‰å®åŒ…}
% \label{subsubsec:optional-pkg}
%
% \begin{function}[added=2022-08-03]{
%   biblatex,
%   cleveref,
%   ntheorem,
%   enumitem,
%   footmisc,
%   unicode-math}
%   \begin{syntax}
%     \OPT{biblatex}     = &lt;\TTF&gt;
%     \OPT{cleveref}     = &lt;\TTF&gt;
%     \OPT{ntheorem}     = &lt;\TTF&gt;
%     \OPT{enumitem}     = &lt;\TTF&gt;
%     \OPT{footmisc}     = &lt;\TTF&gt;
%     \OPT{unicode-math} = &lt;\TTF&gt;
%   \end{syntax}
% æ˜¯å¦é»˜è®¤è½½å…¥æŸäº›å®åŒ…ï¼Œé»˜è®¤å‡æ˜¯ã€‚é€‰é¡¹åå’Œå®åŒ…åæ˜¯ä¸€è‡´çš„ã€‚
% \end{function}
%
% \begin{function}[added=2022-08-03]{minimal}
%   \begin{syntax}
%     &lt;\OPT{minimal}&gt;
%   \end{syntax}
% æœ€å°åŒ–æ¨¡å¼ï¼Œç¦ç”¨æ‰€æœ‰ä¸Šè¿°å®åŒ…ã€‚
% \end{function}
%
% æœ¬æ¨¡æ¿å†…ç½®äº†ä¸€ç³»åˆ—å®åŒ…ä»¥è¿›è¡ŒåŠŸèƒ½æ‰©å±•ã€‚è¿™äº›å®åŒ…ä¸ºï¼š
% \begin{description}
%   \item[\normalfont\pkg{biblatex}] å¤æ‚å‚è€ƒæ–‡çŒ®æ•°æ®çš„å¤„ç†ã€‚
%   \item[\normalfont\pkg{cleveref}] æŒ‰æ¥æºç±»åž‹è‡ªåŠ¨å¤„ç†å¼•ç”¨æ&nbsp;‡ç­¾ã€‚
%   \item[\normalfont\pkg{ntheorem}] å®šç†ç±»çŽ¯å¢ƒå®šåˆ¶ã€‚
%   \item[\normalfont\pkg{enumitem}] åˆ—è¡¨çŽ¯å¢ƒæ&nbsp;·å¼å®šåˆ¶ã€‚
%   \item[\normalfont\pkg{footmisc}] è„šæ³¨æ&nbsp;·å¼å®šåˆ¶ã€‚
%   \item[\normalfont\pkg{unicode-math}] æ”¯æŒ Unicode æ•°å­¦å­—ä½“ã€‚
% \end{description}
%
% åœ¨æŸäº›æƒ…å†µä¸‹ï¼Œè¿™äº›å®åŒ…ä¼šä¸Žæ—§æœ‰çš„ç»éªŒæ–¹æ³•å†²çªï¼Œå¯ä»¥ä½¿ç”¨ä¸Šè¿°é€‰é¡¹åœ¨æ¨¡æ¿
% ä¸­ç¦ç”¨è¿™äº›å®åŒ…ï¼Œä»Žè€Œæ‰‹åŠ¨é…ç½®ç›¸å…³åŠŸèƒ½ã€‚
%
% \subsubsection{é…ç½®æ–‡ä»¶}
%
% \begin{function}[added=2022-02-23]{config}
%   \begin{syntax}
%     \OPT{config} = \Arg{æ–‡ä»¶}
%   \end{syntax}
% é…ç½®æ–‡ä»¶è·¯å¾„ã€‚
% \end{function}
%
% æœ¬é€‰é¡¹å¯ç”¨äºŽè½½å…¥é¢å¤–çš„ç”¨æˆ·é…ç½®æ–‡ä»¶ã€‚è¯¥æ–‡ä»¶æ”¯æŒ \LaTeX3 è¯­æ³•ã€‚
%
%
% \subsubsection{æŒ‡å®šå­—ä½“}
%
% å­¦æ&nbsp;¡è®ºæ–‡æ&nbsp;¼å¼è¦æ±‚ä½¿ç”¨çš„å­—ä½“ä¸€èˆ¬å·²ç»é¢„è£…åœ¨å„ä¸ªæ“ä½œç³»ç»Ÿï¼Œ
% æœ¬æ¨¡æ¿é’ˆå¯¹ä¸åŒå¹³å°è¿›è¡Œäº†è‡ªåŠ¨æ£€æµ‹é€‚é…ï¼Œå¯ä»¥å¼€ç®±å³ç”¨ã€‚
% å¦‚æžœå¸Œæœ›æ›´æ”¹æœ¬æ¨¡æ¿ä½¿ç”¨çš„å­—ä½“ï¼Œè¯·å¡«å†™ä»¥ä¸‹é€‰é¡¹ä»¥è¦†ç›–é»˜è®¤è®¾ç½®ã€‚
%
% \begin{function}[added=2023-12-15]{fontset}
%   \begin{syntax}
%     \OPT{fontset} = &lt;win|macoffice|mac|fandol|none&gt;
%   \end{syntax}
% æ‰‹åŠ¨æŒ‡å®šå­—ä½“åº“ã€‚
% \end{function}
%
% \opt{fontset} è¿™ä¸ªé€‰é¡¹åç»§æ‰¿è‡ª \pkg{ctex}ï¼Œç›¸å½“äºŽåœ¨æœ¬æ¨¡æ¿ä¸­åˆ†åˆ«å¡«å†™ä»¥ä¸‹ä¸¤é¡¹ã€‚
%
% \begin{function}[added=2021-09-07,updated=2021-12-18]{cjk-font,latin-font}
%   \begin{syntax}
%     \OPT{cjk-font} = &lt;win|mac|fandol|founder|noto|source|none&gt;
%     \OPT{latin-font} = &lt;win|mac|gyre|none&gt;
%   \end{syntax}
% æ›´ç²¾ç»†çš„å­—ä½“åº“è®¾å®šã€‚
% \end{function}
%
% æ&nbsp;¹æ®å­¦æ&nbsp;¡è®ºæ–‡æ&nbsp;¼å¼çš„è¦æ±‚ï¼Œæœ¬æ¨¡æ¿ä½¿ç”¨çš„ä¸­æ–‡å­—ä½“ä¸»è¦æœ‰{\songti å®‹ä½“}ã€
% {\heiti é»‘ä½“}ã€{\kaishu æ¥·ä½“}ã€{\fangsong ä»¿å®‹}å››ç§ï¼›
% è¥¿æ–‡å­—ä½“ä¸»è¦æœ‰è¡¬çº¿ä½“ï¼ˆ\textup{serif}ï¼‰ã€æ—&nbsp;è¡¬çº¿ä½“ï¼ˆ\textsf{sans-serif}ï¼‰
% å’Œç­‰å®½å­—ä½“ï¼ˆ\texttt{monospace}ï¼‰ä¸‰ç§ã€‚
% åœ¨ç”Ÿæˆè®ºæ–‡æ—¶ï¼Œéœ€è¦å°†æ¯ä¸€ç§å­—ä½“ï¼ˆå®‹ä½“ã€æ¥·ä½“ï¼‰ä¸Žä¸€ç§å­—åº“ï¼ˆæ“ä½œç³»ç»Ÿä¸­çš„
% \file{.ttf} æ–‡ä»¶ï¼‰ç›¸å¯¹åº”ã€‚ç”±äºŽä¸åŒæ“ä½œç³»ç»Ÿè‡ªå¸¦çš„å­—åº“ä¸åŒï¼Œ
% åœ¨ä¸åŒçš„æ“ä½œç³»ç»Ÿä¸Šä½¿ç”¨åŒä¸€å¥—é…ç½®ä¼šå¯¼è‡´ç¼ºå­—ã€ç¼–è¯‘å‡ºé”™ç­‰åŽæžœã€‚
% å›&nbsp;æ­¤ï¼Œæœ¬æ¨¡æ¿å¯¹äºŽä¸­æ–‡å­—ä½“å’Œè¥¿æ–‡å­—ä½“éƒ½æä¾›äº†å¤šç§å­—ä½“é…ç½®ã€‚
%
% è‹¥è¦æ‰‹åŠ¨é€‰æ‹©å­—ä½“ï¼Œåˆ™éœ€å°†å­—ä½“è®¾ç½®ä¸º \opt{none}ï¼Œå†é€šè¿‡ \pkg{fontspec}
% å®åŒ…æˆ– \pkg{ctex} å®åŒ…ä¸­ç»™å‡ºçš„å‘½ä»¤æ¥å®žçŽ°ã€‚
%
% \begin{function}[added=2022-07-02]{font-path}
%   \begin{syntax}
%     font-path = \Arg{æ–‡ä»¶å¤¹}
%   \end{syntax}
% å­—ä½“æ–‡ä»¶ç›®å½•ã€‚
% \end{function}
%
% æ¨¡æ¿ç”¨åˆ°çš„éƒ¨åˆ†å­—ä½“å¯èƒ½å°šæœªå®‰è£…åœ¨æ“ä½œç³»ç»Ÿï¼Œå¯ä»¥ä½¿ç”¨æ­¤é€‰é¡¹æ‰‹åŠ¨æŒ‡å®šæœç´¢è·¯å¾„ã€‚
% ä¾‹å¦‚ï¼Œç&nbsp;”ç©¶ç”Ÿæ¨¡æ¿å°é¢ä¸Šä½¿ç”¨åˆ°äº†åŽæ–‡ä¸­å®‹ï¼Œè¯¥å­—ä½“é»˜è®¤åªå­˜åœ¨äºŽ
% \opt{win} å’Œ \opt{macoffice} å¯¹åº”çš„ç³»ç»Ÿé…ç½®ï¼Œ
% åœ¨å…¶ä»–å¹³å°ç¼–è¯‘éœ€ä½¿ç”¨æ­¤é€‰é¡¹æ‰‹åŠ¨æŒ‡å‘ \file{STZHONGS.TTF}ã€‚
%
% \paragraph{ä¸­æ–‡}
%
% æœ¬æ¨¡æ¿æä¾›çš„ä¸­æ–‡å­—ä½“é…ç½®å¦‚è¡¨ \ref{tab:cjk-fontset} æ‰€ç¤ºã€‚
% åœ¨ä¸æŒ‡å®šå­—ä½“é…ç½®çš„æƒ…å†µä¸‹ï¼Œæœ¬æ¨¡æ¿é»˜è®¤ä½¿ç”¨ä¸Žæ“ä½œç³»ç»Ÿç›¸å¯¹åº”çš„å­—ä½“é…ç½®
% ï¼ˆè§è¡¨ä¸­å‰å››è¡Œï¼Œåœ¨è£…æœ‰ MS Office çš„ macOS ä¸Šä¼˜å…ˆä½¿ç”¨ Office å­—ä½“åº“ã€‚
% Windows å’Œ macOS ä»¥å¤–çš„ç³»ç»Ÿé‡‡ç”¨
% \href{https://www.ctan.org/pkg/fandol}{Fandol} é…ç½®ï¼‰ã€‚
% æ­¤å¤–ï¼Œæˆ‘ä»¬ä¹Ÿå•ç‹¬æä¾›äº†\href{https://www.foundertype.com}
% {æ–¹æ­£}å’Œ\href{https://github.com/adobe-fonts}{æ€æº}ä¸¤å¥—ä¸­æ–‡å­—ä½“é…ç½®ã€‚
%
% \begin{table}[!htbp]
%   \def\FD{http://www.foundertype.com/index.php/FontInfo/index/id/1}
%   \def\MN{https://mirrors.nju.edu.cn/adobe-fonts/source-han-}
%   \def\OT{/OTF/SimplifiedChinese/}
%   \def\FZ#1#2{\href{\FD #1}{æ–¹æ­£ #2}}
%   \def\SC#1#2{\href{\MN #1\OT}{æ€æº #2 ä½“}}
%   \centering
%   \begin{talltblr}[
%     caption = {ä¸­æ–‡å­—ä½“é…ç½®},
%     label = {tab:cjk-fontset},
%     note{a} = {è¯·ä¸‹è½½ç®€ç¹æ‰©å±•ï¼ˆå³ GBK ç¼–ç&nbsp;ï¼‰ç‰ˆæœ¬},
%     note{b} = {ä½¿ç”¨\href{\FD164}{æ–¹æ­£å°æ&nbsp;‡å®‹}ä½œä¸ºæ–¹æ­£ä¹¦å®‹çš„ç²—ä½“},
%     note{c} = {ä½¿ç”¨\href{\FD131}{æ–¹æ­£é»‘ä½“}ä½œä¸ºæ–¹æ­£ç»†é»‘ä¸€çš„ç²—ä½“},
%     note{d} = {åœ¨éƒ¨åˆ†æ“ä½œç³»ç»Ÿä¸­å¯èƒ½å·²ç»é¢„è£… Google Noto å­—ä½“ã€‚
%       è€ƒè™‘åˆ°èŽ·å–å­—ä½“çš„éš¾æ˜“ç¨‹åº¦ï¼Œå•ç‹¬å®‰è£…æ—¶å»ºè®®é‡‡ç”¨ Adobe Source Han å­—ä½“
%       è¡¨ç¤ºæ€æºå­—ä½“ï¼Œè¯·ä¸‹è½½ Simplified Chineseï¼ˆå³åŽç¼€åä¸º SCï¼‰çš„ç‰ˆæœ¬},
%     note{e} = {æ€æºå­—ä½“å¹¶ä¸åŒ…å«æ¥·ä¹¦å’Œä»¿å®‹ï¼Œè€Œ Adobe
%       æ¥·ä½“å’Œä»¿å®‹éš¾ä»¥ç›´æŽ¥ä¸‹è½½ï¼Œå›&nbsp;æ­¤ä½¿ç”¨æ–¹æ­£å­—ä½“ä»£æ›¿} ]
%     { cell{2}{2-5} = {white!70!njuyellow},
%       cell{3}{2-5} = {white!70!njuyellow},
%       cell{5-8}{4} = {white!70!njuyellow},
%       colspec = {ccccc} }
%   \toprule
%     é…ç½®åç§°         &amp; å®‹ä½“             &amp; é»‘ä½“               &amp; æ¥·ä¹¦          &amp; ä»¿å®‹          \\
%   \midrule
%     \opt{win}        &amp; ä¸­æ˜“å®‹ä½“         &amp; ä¸­æ˜“é»‘ä½“           &amp; ä¸­æ˜“æ¥·ä½“      &amp; ä¸­æ˜“ä»¿å®‹      \\
%     \opt{macoffice}  &amp; ä¸­æ˜“å®‹ä½“         &amp; ä¸­æ˜“é»‘ä½“           &amp; ä¸­æ˜“æ¥·ä½“      &amp; ä¸­æ˜“ä»¿å®‹      \\
%     \opt{mac}        &amp; åŽæ–‡å®‹ä½“         &amp; åŽæ–‡é»‘ä½“           &amp; åŽæ–‡æ¥·ä½“      &amp; åŽæ–‡ä»¿å®‹      \\
%     \opt{fandol}     &amp; Fandol å®‹ä½“      &amp; Fandol é»‘ä½“        &amp; Fandol æ¥·ä½“   &amp; Fandol ä»¿å®‹   \\
%     \opt{founder}\TA &amp; \FZ{51}{ä¹¦å®‹}\TB &amp; \FZ{61}{ç»†é»‘ä¸€}\TC &amp; \FZ{37}{æ¥·ä½“} &amp; \FZ{28}{ä»¿å®‹} \\
%     \opt{noto}   \TD &amp; æ€æºå®‹ä½“         &amp; æ€æºé»‘ä½“           &amp; æ–¹æ­£æ¥·ä½“\TE   &amp; æ–¹æ­£ä»¿å®‹\TE   \\
%     \opt{source} \TD &amp; \SC{serif}{å®‹}   &amp; \SC{sans}{é»‘}      &amp; æ–¹æ­£æ¥·ä½“\TE   &amp; æ–¹æ­£ä»¿å®‹\TE   \\
%   \bottomrule
%   \end{talltblr}
% \end{table}
%
% ç”±äºŽå„æ“ä½œç³»ç»Ÿå¯¹è‡ªå¸¦å­—ä½“çš„æ”¯æŒç¨‹åº¦ä¸åŒï¼Œæœ¬æ¨¡æ¿å¯¹ä¸åŒå­—ä½“åŠ&nbsp;ç²—çš„æ–¹å¼
% æœ‰æ‰€å·®åˆ«ï¼Œè¡¨ \ref{tab:cjk-fontset} ä¸­ï¼Œé»„è‰²åº•è‰²çš„å­—ä½“é‡‡ç”¨ç®—æ³•åŠ&nbsp;ç²—ã€‚
% é™¤æ­¤ä»¥å¤–ï¼Œå„ç§å­—ä½“åœ¨è®¾è®¡ä¸Šä¹Ÿå­˜åœ¨å·®å¼‚ï¼Œå›&nbsp;æ­¤æœ¬æ¨¡æ¿åœ¨ä¸åŒæ“ä½œç³»ç»Ÿä¸‹ç¼–
% è¯‘çš„ç»“æžœå¯èƒ½å­˜åœ¨ç»†å¾®ä¸åŒï¼Œä½¿ç”¨æ—¶è¯·æ³¨æ„ã€‚è‹¥æƒ³è¦èŽ·å¾—ä¸Ž Word ç‰ˆæœ¬æ¨¡æ¿
% æœ€ä¸ºè´´è¿‘çš„ä½“éªŒï¼Œå¯ä»¥é€šè¿‡æ‰‹åŠ¨å®‰è£… Windows è‡ªå¸¦çš„ä¸­æ˜“å®‹ä½“ã€ä¸­æ˜“é»‘ä½“ã€
% ä¸­æ˜“æ¥·ä½“å’Œä¸­æ˜“ä»¿å®‹ï¼Œå¹¶è®¾ç½®ä½¿ç”¨ Windows å­—ä½“æ¥å®žçŽ°ã€‚
%
% \paragraph{è¥¿æ–‡}
%
% æœ¬æ¨¡æ¿æä¾›çš„è¥¿æ–‡å­—ä½“é…ç½®å¦‚è¡¨ \ref{tab:latin-fontset} æ‰€ç¤ºã€‚
% åœ¨ä¸æŒ‡å®šå­—ä½“é…ç½®çš„æƒ…å†µä¸‹ï¼Œæœ¬æ¨¡æ¿é»˜è®¤ä½¿ç”¨ä¸Žæ“ä½œç³»ç»Ÿç›¸å¯¹åº”çš„
% å­—ä½“é…ç½®ã€‚Windows å’Œ macOS ä»¥å¤–çš„ç³»ç»Ÿé‡‡ç”¨ \opt{gyre} é…ç½®ã€‚
%
% \begin{table}[!htbp]
%   \def\TG#1{TG~#1~\TA}
%   \centering
%   \begin{talltblr} [
%       caption = {è¥¿æ–‡å­—ä½“é…ç½®},
%       label   = {tab:latin-fontset},
%       note{a} = {TG è¡¨ç¤º \href{http://www.gust.org.pl/projects/e-foundry/tex-gyre}{\TeX~Gyre}ã€‚} ]
%     { colspec = {cccc} }
%     \toprule
%       é…ç½®åç§°         &amp; è¡¬çº¿ä½“          &amp; æ—&nbsp;è¡¬çº¿ä½“   &amp; ç­‰å®½å­—ä½“    \\
%     \midrule
%       \opt{win}        &amp; Times~New~Roman &amp; Arial      &amp; Courier~New \\
%       \opt{macoffice}  &amp; Times~New~Roman &amp; Arial      &amp; Menlo       \\
%       \opt{mac}        &amp; Times~New~Roman &amp; Arial      &amp; Menlo       \\
%       \opt{gyre}       &amp; \TG{Termes}     &amp; \TG{Heros} &amp; \TG{Cursor} \\
%     \bottomrule
%   \end{talltblr}
% \end{table}
%
% macOS ç”¨æˆ·éœ€è¦é¢å¤–æ³¨æ„çš„æ˜¯ï¼Œç³»ç»Ÿå†…ç½®çš„ Times New Roman å¹¶æ²¡æœ‰ smcp
% è¿™ä¸€ç‰¹æ€§ï¼Œæ‰€ä»¥ \tn{textsc} å‘½ä»¤æ—&nbsp;æ³•äº§ç”Ÿæ­£ç¡®çš„å°åž‹å¤§å†™å­—æ¯å­—åž‹ï¼Œå¯¼è‡´
% ç&nbsp;”ç©¶ç”Ÿæ¨¡æ¿è‹±æ–‡å°é¢çš„éƒ¨åˆ†å†…å®¹ä¸èƒ½æ­£ç¡®æ˜¾ç¤ºã€‚å¦å¤–ï¼ŒmacOS ä¸­çš„ Times å­—ä½“
% ä¹Ÿä¸åŒ…å« smcp ç‰¹æ€§ã€‚
% ç›¸åº”çš„è§£å†³åŠžæ³•æ˜¯æ‹·è´ä¸€ä»½ Windows é¢„è£…çš„ Times New Roman
% \footnote{Times New Romanï¼ˆæˆ– TimesNewRomanPSMTï¼‰åœ¨ Windows å’Œ macOS
% ä¸‹çš„åŒºåˆ«åœ¨äºŽç‰ˆæœ¬ã€‚æ&nbsp;¹æ®æˆ‘ä»¬çš„æµ‹è¯•ï¼ŒWindows 10 ä¸‹è¯¥å­—ä½“çš„ç‰ˆæœ¬ä¸º 7.00ï¼Œ
% è€Œ macOS Monterey ä¸‹è¯¥å­—ä½“çš„ç‰ˆæœ¬ä¸º 5.01.3xã€‚è¿™æ˜¾ç„¶æ˜¯è‹¹æžœçš„é—®é¢˜ã€‚}ï¼Œ
% æˆ–è€…ä½¿ç”¨ \TeX{} Live å†…ç½®çš„ \TeX{} Gyre Termes å­—ä½“
% \footnote{\TeX{} Gyre Termes å¯ä»¥è§†ä½œ Times New Roman çš„é‡åˆ¶ç‰ˆï¼Œä¸¤è€…çš„
% è§†è§‰æ„Ÿå—æ˜¯ä¸€è‡´çš„ã€‚}ï¼Œè¿™ä¸¤ä¸ªå­—ä½“éƒ½å…·å¤‡ smcp ç‰¹æ€§ã€‚
% æœ¬æ¨¡æ¿åœ¨æ£€æµ‹åˆ° Times New Roman ä¸åŒ…å« smcp ç‰¹æ€§æ—¶ï¼Œä¼šæŠ›å‡ºè­¦å‘Šå¹¶ä½¿ç”¨
% \TeX{} Gyre Termes å­—ä½“è¿›è¡Œæ›¿æ¢ã€‚
%
% \paragraph{æ•°å­¦}
%
% \begin{function}[added=2022-07-02]{math-font}
%   \begin{syntax}
%     \OPT{math-font} = &lt;asana|cambria|fira|garamond|lm|...|termes|(xits)|none&gt;
%   \end{syntax}
% è®¾ç½®æ•°å­¦å­—ä½“ã€‚å®Œæ•´åˆ—è¡¨è§è¡¨ {tab:math-fontset}ã€‚
% \end{function}
%
% æœ¬æ¨¡æ¿é»˜è®¤é‡‡ç”¨ \pkg{unicode-math} å®åŒ…é…ç½®æ•°å­¦æ¨¡å¼ä¸‹ä½¿ç”¨çš„å­—ä½“ã€‚
% ä¸ŽåŽŸç”Ÿ \LaTeX{} æœ€æŽ¥è¿‘çš„å­—ä½“å¯¹åº” \opt{lm}ï¼ŒMS Word é¢„è£…çš„å­—ä½“å¯¹åº” \opt{cambria}ã€‚
%
% \begin{table}[!htbp]
%   \def\NCM{New Computer Modern}
%   \centering
%   \begin{talltblr} [
%       caption = {æ•°å­¦å­—ä½“é…ç½®},
%       label   = {tab:math-fontset},
%       note{a} = {TG è¡¨ç¤º \href{http://www.gust.org.pl/projects/e-foundry/tex-gyre}{\TeX~Gyre}ã€‚},
%       note{b} = {ç²—ä½“ä½¿ç”¨ XITS Math Boldã€‚} ]
%     { colspec = {ccl} }
%   \toprule
%     é…ç½®åç§°          &amp; å­—ä½“åç§°            &amp; æè¿°                       \\
%   \midrule
%     \opt{asana}       &amp; Asana Math          &amp;                            \\
%     \opt{cambria}     &amp; Cambria Math        &amp; å¾®è½¯ Office é¢„è£…çš„æ•°å­¦å­—ä½“ \\
%     \opt{fira}        &amp; Fira Math           &amp; æ—&nbsp;è¡¬çº¿æ•°å­¦å­—ä½“ï¼ŒFira é£Žæ&nbsp;¼  \\
%     \opt{garamond}    &amp; Garamond Math       &amp; Garamond é£Žæ&nbsp;¼              \\
%     \opt{lm}          &amp; Latin Modern Math   &amp; Computer Modern é£Žæ&nbsp;¼       \\
%     \opt{libertinus}  &amp; Libertinus Math     &amp;                            \\
%     \opt{newcm}       &amp; \NCM~Math           &amp; Computer Modern é£Žæ&nbsp;¼       \\
%     \opt{stix}        &amp; STIX Math           &amp; Times é£Žæ&nbsp;¼                 \\
%     \opt{bonum}       &amp; TG Bonum Math   \TA &amp;                            \\
%     \opt{dejavu}      &amp; TG DejaVu Math  \TA &amp; DejaVu é£Žæ&nbsp;¼                \\
%     \opt{pagella}     &amp; TG Pagella Math \TA &amp; Palatino é£Žæ&nbsp;¼              \\
%     \opt{schola}      &amp; TG Schola Math  \TA &amp;                            \\
%     \opt{termes}      &amp; TG Termes Math  \TA &amp; Times é£Žæ&nbsp;¼                 \\
%     \opt{xits}        &amp; XITS Math       \TB &amp; åŸºäºŽ STIXï¼ŒTimes é£Žæ&nbsp;¼      \\
%   \bottomrule
%   \end{talltblr}
% \end{table}
%
% \paragraph{æŽˆæƒ}
%
% æœ¬èŠ‚æåŠçš„å­—åº“ä¸­ï¼Œä¸­æ–‡å­—åº“åªæœ‰æ–¹æ­£ä¹¦å®‹ã€æ–¹æ­£é»‘ä½“ã€æ–¹æ­£æ¥·ä½“ã€æ–¹æ­£ä»¿å®‹ã€
% ä¸¤ç§æ€æºå­—ä½“å’Œå››ç§Fandolå­—ä½“èƒ½å¤Ÿ\emph{å…è´¹å•†ç”¨}ï¼›
% è‹±æ–‡å­—åº“ä¸­åªæœ‰ Times New Romanã€XITS å’Œä¸‰ç§ \TeX~Gyreå­—ä½“èƒ½å¤Ÿ\emph{å…è´¹å•†ç”¨}ã€‚
% å›&nbsp;æ­¤ï¼Œè‹¥éœ€è¦å°†æœ¬æ¨¡æ¿ç”¨äºŽå•†ä¸šç›¸å…³çš„æ´»åŠ¨ï¼Œè¯·å’¨è¯¢ä¸“ä¸šäººå£«ã€‚
%
%
% \subsection{è®¾ç½®æŽ¥å£}
% \label{subsec:njusetup}
%
% \begin{function}[added=2021-09-10,updated=2022-08-01]{\njusetup}
%   \begin{syntax}
%     \tn{njusetup}\oarg{é”®è·¯å¾„}\marg{è®¾ç½®é¡¹}
%   \end{syntax}
% \cls{njuthesis} æ–‡æ¡£ç±»çš„é€šç”¨è®¾ç½®å‘½ä»¤ï¼Œæä¾›è‡ªå®šä¹‰æŽ¥å£ã€‚
% \end{function}
%
% æ&nbsp;¹æ®å¯é€‰å‚æ•°å¡«å†™æ–¹å¼ä¸åŒï¼Œ\tn{njusetup} å…±æœ‰å››ç§ç­‰æ•ˆçš„ä½¿ç”¨æ–¹å¼ï¼Œ
% å¯ä»¥æ&nbsp;¹æ®å®žé™…æƒ…å†µè¿›è¡Œçµæ´»é€‰æ‹©ã€‚
%
% åœ¨é”®è·¯å¾„ç•™ç©ºæ—¶ï¼Œä¸ºæœ€åŸºç¡€çš„ç”¨æ³•ã€‚æ­¤æ—¶è®¾ç½®é¡¹çš„å‚æ•°æ˜¯ä¸€ä¸ªä½¿ç”¨
% \emph{è‹±æ–‡åŠè§’é€—å·}åˆ†éš”çš„é”®å€¼åˆ—è¡¨ï¼Œé€šå¸¸å½¢å¦‚ \meta{key}|=|\meta{value}ã€‚
%
% \begin{latexexample}[moretexcs={\njusetup},emph={[2]info,bib},
%   emph={[3]title,author,resource}]
%   \njusetup{
%       info/title   = {å¥‡æ–‡},
%       info/author  = {ä½šå},
%       bib/resource = {ref1.bib, ref2.bib}
%     }
% \end{latexexample}
%
% ä»¥ä¸Šä¸ºæœ€åŸºç¡€çš„å¡«å†™æ–¹æ³•ï¼Œå¯ä»¥åˆ†ç»„ä¸ºï¼š
%
% \begin{latexexample}[moretexcs={\njusetup},emph={[2]info,bib},
%   emph={[3]title,author,resource}]
%   \njusetup{
%       info = {
%           title    = {å¥‡æ–‡},
%           author   = {ä½šå}
%         },
%       bib = {
%           resource = {ref1.bib, ref2.bib},
%         }
%     }
% \end{latexexample}
%
% åœ¨é”®è·¯å¾„å¡«å…¥æ¨¡å—ï¼ˆç±»ï¼‰æ—¶ï¼Œåªèƒ½è®¾å®šå½“å‰æ¨¡å—ä¸‹çš„é€‰é¡¹ã€‚æ­¤æ—¶å‚æ•°æ˜¯é”®å€¼åˆ—è¡¨ã€‚
%
% \begin{latexexample}[moretexcs={\njusetup},emph={[2]info,bib},
%   emph={[3]title,author,resource}]
%   \njusetup[info]{
%       title    = {å¥‡æ–‡},
%       author   = {ä½šå}
%     }
%   \njusetup[bib]{
%       resource = {ref1.bib, ref2.bib}
%     }
% \end{latexexample}
%
% åœ¨é”®è·¯å¾„å¡«å…¥å…·ä½“é€‰é¡¹åç§°æ—¶ï¼Œåªèƒ½è®¾å®šè¯¥é€‰é¡¹çš„å€¼ã€‚
%
% \begin{latexexample}[moretexcs={\njusetup},emph={[2]info,bib},
%   emph={[3]title,author,resource}]
%   \njusetup[info/title]{å¥‡æ–‡}
%   \njusetup[info/author]{ä½šå}
%   \njusetup[bib/resource]{ref1.bib, ref2.bib}
% \end{latexexample}
%
%
% \subsection{ä¸ªäººä¿¡æ¯}
%
% |info| ç±»ç”¨äºŽè®¾ç½®ä¸ªäººä¿¡æ¯ã€‚
% ä»¥ä¸‹ä¸ºå…¨éƒ¨çš„ä¸ªäººä¿¡æ¯å‚æ•°ï¼Œå…¶ä¸­å¸¦æœ‰æ˜Ÿå·çš„ä¸ºå¯¹åº”çš„è‹±æ–‡å­—æ®µã€‚
%
% \begin{function}[updated=2022-01-14]{info/title,info/title*}
%   \begin{syntax}
%     \OPT{title}  = \Arg{æ&nbsp;‡é¢˜}
%     \OPT{title*} = \Arg{è‹±æ–‡æ&nbsp;‡é¢˜}
%   \end{syntax}
% é¢˜ç›®ã€‚ç”±äºŽå°é¢ä¸Šæä¾›ç»™ä¸­æ–‡é¢˜ç›®çš„æ¨ªçº¿é•¿åº¦æœ‰é™\footnote{å•è¡Œæœ€é•¿çº¦ä¸º15
% ä¸ªæ±‰å­—ï¼Œå»ºè®®æ€»é•¿åº¦ä¸è¶…è¿‡45å­—ï¼Œå½“ç„¶ä½&nbsp;ä¹Ÿå¯ä»¥å¯¹ç…§ \ref{subsubsec:modify-length}
% èŠ‚ä¿®æ”¹æ¨ªçº¿é•¿åº¦ã€‚}ï¼Œæœ¬æ¨¡æ¿é»˜è®¤ä¼šè‡ªåŠ¨å¯¹æ&nbsp;‡é¢˜è¿›è¡Œæ¢è¡Œã€‚
% å¦‚æžœéœ€è¦æ‰‹åŠ¨æŒ‡å®šæ¢è¡Œä½ç‚¹ï¼Œè¯·ä½¿ç”¨æ¢è¡ŒæŽ§åˆ¶ç¬¦ï¼ˆ |\\| ï¼‰ã€‚
% \end{function}
%
% ç»˜åˆ¶å°é¢åŠæ‘˜è¦ä¸­çš„æ&nbsp;‡é¢˜æ¶‰åŠæ–­è¡Œå¤„ç†ï¼Œæ—&nbsp;æ³•å¯¹ç©ºå­—ç¬¦ä¸²äº§ç”Ÿæ­£ç¡®ç»“æžœã€‚
% å›&nbsp;è€Œåœ¨æ‰‹åŠ¨å°†æ&nbsp;‡é¢˜è®¾ç½®ä¸ºç©ºæ—¶ï¼Œæœ¬æ¨¡æ¿å°†æŠ›å‡ºå¦‚ä¸‹é”™è¯¯ï¼š
% \begin{shellexample}[deletekeywords={in}]
%   ! Package njuthesis Error: The title should not be left blank.
%   (njuthesis)                Please check whether you have fill in both
%   (njuthesis)                Chinese and English titles.
% \end{shellexample}
%
% \begin{function}[updated=2021-10-01]{info/keywords,info/keywords*}
%   \begin{syntax}
%     \OPT{keywords}  = \Arg{å…³é”®è¯}
%     \OPT{keywords*} = \Arg{è‹±æ–‡å…³é”®è¯}
%   \end{syntax}
% å…³é”®è¯åˆ—è¡¨ã€‚å…³é”®è¯ä¹‹é—´éœ€è¦ä½¿ç”¨è‹±æ–‡åŠè§’é€—å·éš”å¼€ï¼Œ
% å«æœ‰ç©ºæ&nbsp;¼çš„å…³é”®å­—éœ€è¦ä½¿ç”¨èŠ±æ‹¬å·åŒ…è£¹ä»¥é¿å…æ­§ä¹‰ã€‚å¯ä»¥å‚ç…§ä¸‹æ–¹çš„å¡«å†™ç¤ºä¾‹ã€‚
% \end{function}
%
% \begin{function}[updated=2021-10-01]{info/grade}
%   \begin{syntax}
%     \OPT{grade} = \Arg{20XX}
%   \end{syntax}
% å¹´çº§ï¼ŒæŽ¨èæ&nbsp;¼å¼ä¸ºâ€œ20XXâ€ã€‚
% \end{function}
%
% \begin{function}[updated=2021-10-01]{info/student-id}
%   \begin{syntax}
%     \OPT{student-id} = \Arg{å­¦å·æˆ–å·¥å·}
%   \end{syntax}
% å­¦å·æˆ–å·¥å·ã€‚å—äº¬å¤§å­¦æœ¬ç§‘ç”Ÿä¸º9ä½æ•°å­—å­¦å·ï¼Œ
% ç&nbsp;”ç©¶ç”Ÿä¸ºä¸¤ä½å¤§å†™å­—æ¯æ&nbsp;‡è¯†åŠ&nbsp;ä¸Šæ•°å­—ç»„æˆçš„å­¦å·ï¼ˆ2022çº§æ”¹ä¸ºçº¯æ•°å­—ï¼‰ã€‚
% \end{function}
%
% \begin{function}[updated=2021-10-01]{info/author,info/author*}
%   \begin{syntax}
%     \OPT{author}  = \Arg{ä½&nbsp;çš„åå­—}
%     \OPT{author*} = \Arg{å§“åæ‹¼éŸ³}
%   \end{syntax}
% å§“åã€‚
% \end{function}
%
% \begin{function}[updated=2021-10-01]{info/department,info/department*}
%   \begin{syntax}
%     \OPT{department}  = \Arg{é™¢ç³»}
%     \OPT{department*} = \Arg{é™¢ç³»}
%   \end{syntax}
% é™¢ç³»ã€‚
% \end{function}
%
% \begin{function}[updated=2023-12-05]{info/major,info/major*}
%   \begin{syntax}
%     \OPT{major}  = \Arg{ä¸“ä¸š}
%     \OPT{major}  = \Arg{å°é¢ä¸“ä¸š, æ‘˜è¦ä¸“ä¸š}
%     \OPT{major*} = \Arg{ä¸“ä¸š}
%   \end{syntax}
% ä¸“ä¸šã€‚ç&nbsp;”ç©¶ç”Ÿçš„ä¸“ä¸šåž‹å­¦ä½å°é¢ä¸Šï¼Œâ€œä¸“ä¸šå­¦ä½ç±»åˆ«(é¢†åŸŸ)â€ä¸€æ&nbsp;çš„
% å¡«å†™å†…å®¹å¯èƒ½ä¸Žæ‘˜è¦é¡µä¸ä¸€è‡´ï¼Œå¯ä»¥ä½¿ç”¨åŠè§’é€—å·åˆ†éš”ä¸¤ä¸ªå€¼ã€‚
% \end{function}
%
% \begin{function}[updated=2021-10-01]{info/field,info/field*}
%   \begin{syntax}
%     \OPT{field}  = \Arg{æ–¹å‘}
%     \OPT{field*} = \Arg{æ–¹å‘}
%   \end{syntax}
% ç&nbsp;”ç©¶é¢†åŸŸã€‚åªæœ‰ç&nbsp;”ç©¶ç”Ÿå­˜åœ¨ç&nbsp;”ç©¶é¢†åŸŸçš„è¯´æ³•ï¼Œæœ¬ç§‘ç”Ÿæ—&nbsp;éœ€å¡«å†™ã€‚
% \end{function}
%
% \begin{function}[updated=2022-01-12]{info/supervisor,info/supervisor*}
%   \begin{syntax}
%     \OPT{supervisor}  = \Arg{å¯¼å¸ˆå§“å,èŒç§°}
%     \OPT{supervisor*} = \Arg{å¯¼å¸ˆè‹±æ–‡å…¨ç§°}
%   \end{syntax}
% å¯¼å¸ˆå…¨ç§°ã€‚è¯·ä½¿ç”¨é€—å·ï¼ˆ |,| ï¼‰åˆ†éš”å¯¼å¸ˆçš„ä¸­æ–‡å§“åä¸ŽèŒç§°ï¼Œè‹±æ–‡ååˆ™ä¸éœ€æ·»åŠ&nbsp;é€—å·ã€‚
% \end{function}
%
% \begin{function}[updated=2021-01-12]{info/supervisor-ii,info/supervisor-ii*}
%   \begin{syntax}
%     \OPT{supervisor-ii}  = \Arg{ç¬¬äºŒå¯¼å¸ˆå§“å,èŒç§°}
%     \OPT{supervisor-ii*} = \Arg{ç¬¬äºŒå¯¼å¸ˆè‹±æ–‡å…¨ç§°}
%   \end{syntax}
% ç¬¬äºŒå¯¼å¸ˆå…¨ç§°ã€‚æ—&nbsp;ç¬¬äºŒå¯¼å¸ˆæ—¶ä¸å¡«å³å¯ã€‚
% \end{function}
%
% \begin{function}[updated=2022-01-14]{info/submit-date}
%   \begin{syntax}
%     \OPT{submit-date} = \Arg{yyyy-mm-dd}
%   \end{syntax}
% æäº¤æ—¥æœŸã€‚ä¸­è‹±æ–‡æ—¥æœŸçŽ°åœ¨å¯ä»¥ç”± ISO æ—¥æœŸæ&nbsp;¼å¼\cite{gb-t-7408-2005}
% çš„å­—ç¬¦ä¸²ç»Ÿä¸€ç”Ÿæˆã€‚å¦‚æžœåœ¨ç­‰å·åŽç•™ç©ºï¼Œåˆ™åŽŸæœ¬ä¸­æ–‡æ—¥æœŸå¤„ä½¿ç”¨ç©ºç™½çš„å¹´æœˆæ—¥å­—æ&nbsp;·ï¼›
% å¦‚æžœä¸æ·»åŠ&nbsp;æ­¤è®¾ç½®é¡¹ï¼Œåˆ™è‡ªåŠ¨ä½¿ç”¨ç¼–è¯‘å½“å¤©æ—¥æœŸã€‚
% \end{function}
%
% \begin{function}[updated=2022-01-14]{info/defend-date}
%   \begin{syntax}
%     \OPT{defend-date} = \Arg{yyyy-mm-dd}
%   \end{syntax}
% ç­”è¾©æ—¥æœŸï¼Œåªå¯¹ç&nbsp;”ç©¶ç”Ÿæœ‰æ•ˆï¼Œè¦æ±‚åŒæäº¤æ—¥æœŸã€‚
% \end{function}
%
% \begin{function}[updated=2022-05-23]{info/confer-date}
%   \begin{syntax}
%     \OPT{confer-date} = \Arg{yyyy-mm-dd}
%   \end{syntax}
% å­¦ä½æŽˆäºˆæ—¥æœŸï¼Œåªç”¨äºŽå›½å®¶å›¾ä¹¦é¦†å°é¢ï¼Œè¦æ±‚åŒæäº¤æ—¥æœŸã€‚
% \end{function}
%
% \begin{function}[updated=2022-05-23]{info/bottom-date}
%   \begin{syntax}
%     \OPT{bottom-date} = \Arg{yyyy-mm-dd}
%   \end{syntax}
% åº•éƒ¨æ—¥æœŸï¼Œåªç”¨äºŽå›½å®¶å›¾ä¹¦é¦†å°é¢ï¼Œè¦æ±‚åŒæäº¤æ—¥æœŸã€‚
% \end{function}
%
% \begin{function}[updated=2022-05-27]{info/chairman,info/reviewer}
%   \begin{syntax}
%     \OPT{chairman} = \Arg{ç­”è¾©ä¸»å¸­å§“åèŒç§°}
%     \OPT{reviewer} = \Arg{ç­”è¾©è¯„å§”å§“åèŒç§°}
%   \end{syntax}
% ç­”è¾©å§”å‘˜ä¼šä¿¡æ¯ï¼Œåˆ†åˆ«ä¸ºè¯„å®¡å§”å‘˜ä¼šä¸»å¸­åŠæˆå‘˜çš„å§“ååŠ&nbsp;èŒç§°ï¼Œåªå¯¹ç&nbsp;”ç©¶ç”Ÿæœ‰æ•ˆã€‚
% è¯„å®¡æˆå‘˜åå•ä»¥é€—å·åˆ†éš”çš„åˆ—è¡¨å½¢å¼å­˜å‚¨ï¼Œå¡«å†™æ–¹æ³•åŒå…³é”®è¯ã€‚
% å¦‚æžœæ˜¯ç›²å®¡ï¼Œå¡«å…¥â€œç›²å®¡â€äºŒå­—å³å¯ã€‚
% \end{function}
%
% \begin{function}[updated=2021-10-01]{info/clc,info/udc}
%   \begin{syntax}
%     \OPT{clc} = \Arg{ä¸­å›½å›¾ä¹¦åˆ†ç±»å·}
%     \OPT{udc} = \Arg{å›½é™…å›¾ä¹¦åˆ†ç±»å·}
%   \end{syntax}
% ç&nbsp;”ç©¶ç”Ÿå­¦ä½è®ºæ–‡å°é¢ä¸Šçš„\href{http://www.ztflh.com/}{ä¸­å›½å›¾ä¹¦åˆ†ç±»å·}å’Œ\ignorespaces
% \href{http://www.udcsummary.info/php/index.php?lang=chi&amp;pr=Y}{å›½é™…å›¾ä¹¦åˆ†ç±»å·}ã€‚
% \end{function}
%
% \begin{function}[updated=2021-10-01]{info/secret-level}
%   \begin{syntax}
%     \OPT{secret-level} = \Arg{å¯†çº§}
%   \end{syntax}
% ç&nbsp;”ç©¶ç”Ÿå­¦ä½è®ºæ–‡å°é¢ä¸Šçš„å¯†çº§ã€‚
% \end{function}
%
% \begin{function}[updated=2021-10-01]{info/supervisor-contact}
%   \begin{syntax}
%     \OPT{supervisor-contact} = \Arg{å¯¼å¸ˆè”ç³»æ–¹å¼}
%   \end{syntax}
% å›½å®¶å›¾ä¹¦é¦†å°é¢ä¸Šçš„å¯¼å¸ˆè”ç³»æ–¹å¼ã€‚
% \end{function}
%
% \begin{function}[added=2023-04-29]{info/school-code}
%   \begin{syntax}
%     \OPT{school-code} = \Arg{10284}
%   \end{syntax}
% ç&nbsp;”ç©¶ç”Ÿå­¦ä½è®ºæ–‡å°é¢ä¸Šçš„å­¦æ&nbsp;¡ä»£ç&nbsp;ã€‚\CJKsout{ä½&nbsp;ä¸ä¼šçœŸçš„æƒ³æ”¹è¿™ä¸ªå§ï¼Ÿ}
% \end{function}
%
% \begin{function}[added=2023-04-24]{info/degree,info/degree*}
%   \begin{syntax}
%     \OPT{degree}  = \Arg{ä¸­æ–‡å­¦ä½å}
%     \OPT{degree*} = \Arg{è‹±æ–‡å­¦ä½å}
%   \end{syntax}
% ç&nbsp;”ç©¶ç”Ÿå›½å®¶å›¾ä¹¦é¦†å°é¢è‹±æ–‡å°é¢ä¸Šçš„å­¦ä½åç§°ã€‚é»˜è®¤ä¼šç”±æ¨¡æ¿é€šè¿‡ \opt{degree}
% å’Œ \opt{type} æ–‡æ¡£ç±»é€‰é¡¹ç”Ÿæˆï¼Œä¹Ÿå¯ä»¥ç”±æœ¬é€‰é¡¹è‡ªå®šä¹‰åç§°ã€‚
% \end{function}
%
%
% \subsubsection{è¾“å…¥ç¤ºèŒƒ}
%
% æœ¬ç§‘ç”Ÿå¯ä»¥å‚è€ƒå¦‚ä¸‹èŒƒä¾‹è¾“å…¥ä¸ªäººä¿¡æ¯ã€‚æ³¨æ„ä¸èƒ½æœ‰ç©ºè¡Œã€‚
%
% \begin{latexexample}[moretexcs={\njusetup},emph={[2]info},emph={[3]title,title*,
%   keywords,keywords*,grade,student-id,author,author*,department,department*,
%   major,major*,supervisor,supervisor*,submit-date}]
%   \njusetup[info]{
%       title        = {ç¬¬ä¸€è¡Œæ&nbsp;‡é¢˜\\ç¬¬äºŒè¡Œæ&nbsp;‡é¢˜},
%       title*       = {My Awesome Work},
%       keywords     = {æˆ‘,å°±æ˜¯,å……æ•°çš„,å…³é”®è¯},
%       keywords*    = {Dummy, Keywords, Here, {it is}},
%       grade        = {2018},
%       student-id   = {189114514},
%       author       = {å‘¨ç…œåŽ},
%       author*      = {Zhou Yuhua},
%       department   = {åŒ–å­¦åŒ–å·¥å­¦é™¢},
%       department*  = {School of Chemistry and Chemical Engineering},
%       major        = {åŒ–å­¦},
%       major*       = {Chemistry},
%       supervisor   = {æŽæˆæ®¿,æ•™æŽˆ},
%       supervisor*  = {Professor Li Chengdian},
%       submit-date  = {2021-09-12}
%   }
% \end{latexexample}
%
% ç&nbsp;”ç©¶ç”Ÿå¯ä»¥å‚è€ƒå¦‚ä¸‹åˆ—è¡¨è¾“å…¥ä¸ªäººä¿¡æ¯
%
% \begin{latexexample}[moretexcs={\njusetup},emph={[2]info},emph={[3]title,title*,
%   keywords,keywords*,grade,student-id,author,author*,department,department*,
%   major,major*,field,field*,supervisor,supervisor*,submit-date,defend-date,email}]
%   \njusetup[info]{
%       title        = {ç¬¬ä¸€è¡Œæ&nbsp;‡é¢˜\\ç¬¬äºŒè¡Œæ&nbsp;‡é¢˜\\ç¬¬ä¸‰è¡Œæ&nbsp;‡é¢˜},
%       title*       = {My Awesome Work},
%       keywords     = {æˆ‘,å°±æ˜¯,å……æ•°çš„,å…³é”®è¯},
%       keywords*    = {Dummy,Keywords,Here,{it is}},
%       grade        = {2018},
%       student-id   = {DZ18114514},
%       author       = {å‘¨ç…œåŽ},
%       author*      = {Zhou Yuhua},
%       department   = {åŒ–å­¦åŒ–å·¥å­¦é™¢},
%       department*  = {School of Chemistry and Chemical Engineering},
%       major        = {åŒ–å­¦},
%       major*       = {Chemistry},
%       field        = {ç‰©ç†åŒ–å­¦},
%       field*       = {Physical Chemistry},
%       supervisor   = {æŽæˆæ®¿,æ•™æŽˆ},
%       supervisor*  = {Professor Li Chengdian},
%       submit-date  = {2021-09-12},
%       defend-date  = {2022-01-15},
%       clc          = {0175.2},
%       udc          = {004.72},
%       secret-level = {å…¬å¼€},
%       chairman     = {å¼&nbsp;~æ•™æŽˆ},
%       reviewer     = {çŽ‹~æ•™æŽˆ,èµµ~å‰¯æ•™æŽˆ,æŽ~åŠ©ç†ç&nbsp;”ç©¶å‘˜},
%       email        = {git+nju-lug-email-3104-issue-@yaoge123.cn}
%   }
% \end{latexexample}
%
% å¦‚æžœéœ€è¦å›½å®¶å›¾ä¹¦é¦†å°é¢ï¼Œè¿˜éœ€è¦åŠ&nbsp;å…¥å¦‚ä¸‹ä¿¡æ¯
%
% \begin{latexexample}[moretexcs={\njusetup},emph={[2]info},emph={[3]confer-date,
%   bottom-date,chairman,reviewer,clc,secret-level,udc,supervisor-contact}]
%   \njusetup[info]{
%       confer-date  = {2022-05-20},
%       bottom-date  = {2022-05-21},
%       supervisor-contact = {åŒ–å­¦åŒ–å·¥å­¦é™¢ ä»™æž—å¤§é“ 163 å· 210046}
%   }
% \end{latexexample}
%
% åšå£«åŽå¯ä»¥å‚è€ƒå¦‚ä¸‹èŒƒä¾‹è¾“å…¥ä¸ªäººä¿¡æ¯ã€‚
%
% \begin{latexexample}[moretexcs={\njusetup},emph={[2]info},emph={[3]title,title*,
%   keywords,keywords*,student-id,author,department,major,supervisor,submit-date}]
%   \njusetup[info]{
%       title        = {ç¬¬ä¸€è¡Œæ&nbsp;‡é¢˜\\ç¬¬äºŒè¡Œæ&nbsp;‡é¢˜},
%       title*       = {My Awesome Work},
%       keywords     = {æˆ‘,å°±æ˜¯,å……æ•°çš„,å…³é”®è¯},
%       keywords*    = {Dummy, Keywords, Here, {it is}},
%       student-id   = {189114514},
%       author       = {å‘¨ç…œåŽ},
%       department   = {åŒ–å­¦åŒ–å·¥å­¦é™¢},
%       major        = {åŒ–å­¦},
%       supervisor   = {æŽæˆæ®¿,æ•™æŽˆ},
%       submit-date  = {2021-09-12}
%   }
% \end{latexexample}
%
%
% \subsection{ç¼–å†™æ­£æ–‡}
%
% ä¸Žå¯¼è¨€åŒºç›¸å¯¹çš„æ˜¯æ­£æ–‡ï¼Œä½äºŽ \env{document} çŽ¯å¢ƒå†…ã€‚
%
% \begin{function}{\mainmatter}
%   \tn{mainmatter} æ&nbsp;‡å¿—ç€æ­£æ–‡çš„å¼€å§‹ï¼Œä½¿ç”¨é˜¿æ‹‰ä¼¯æ•°å­—é‡æ–°è¿›è¡Œé¡µç&nbsp;ç¼–å·ï¼Œ
%   å¹¶è®¾ç½®é¡µçœ‰é¡µè„šæ&nbsp;¼å¼ã€‚
% \end{function}
%
% \begin{function}{\chaptermark,\sectionmark}
%   \begin{syntax}
%     \tn{chapter}\oarg{ç”¨åœ¨é¡µçœ‰çš„ç«&nbsp;æ&nbsp;‡é¢˜}\marg{å®Œæ•´çš„ç«&nbsp;æ&nbsp;‡é¢˜}
%     \tn{sectionmark}\marg{ç”¨åœ¨ç›®å½•ä¸­çš„ç«&nbsp;æ&nbsp;‡é¢˜}
%     \tn{section}\oarg{ç”¨åœ¨é¡µçœ‰çš„ç«&nbsp;æ&nbsp;‡é¢˜}\marg{å®Œæ•´çš„èŠ‚æ&nbsp;‡é¢˜}
%     \tn{sectionmark}\marg{ç”¨åœ¨ç›®å½•èŠ‚æ&nbsp;‡é¢˜}
%   \end{syntax}
% å¦‚æžœé¡µçœ‰å†…å®¹å‘ç”Ÿäº†å†²çªï¼Œå¯ä½¿ç”¨è¿™ä¸¤ä¸ªå‘½ä»¤ç»†åŒ–å®šåˆ¶ã€‚
% \end{function}
%
%
% \subsubsection{é¡µé¢}
%
% åœ¨æœ¬æ¨¡æ¿é¢„å®šä¹‰çš„é¡µé¢æ&nbsp;·å¼ä¸­ï¼šæœ¬ç§‘ç”Ÿä½¿ç”¨ \opt{plain} æ&nbsp;·å¼ï¼Œæ—&nbsp;é¡µçœ‰ï¼Œ
% é¡µé¢ç¼–å·ä½¿ç”¨äº”å·ç½—é©¬ä½“ï¼Œå±…ä¸­ä½äºŽé¡µè„šï¼›ç&nbsp;”ç©¶ç”Ÿä½¿ç”¨ \opt{headings} æ&nbsp;·å¼ï¼Œ
% é¡µçœ‰ä½¿ç”¨äº”å·æ¥·ä½“ï¼ŒåŒ…æ‹¬ç«&nbsp;åï¼ˆå¥‡æ•°é¡µå³ä¾§ï¼‰å’ŒèŠ‚åï¼ˆå¶æ•°é¡µå·¦ä¾§ï¼‰ï¼Œ
% é¡µé¢ç¼–å·ä½¿ç”¨äº”å·ç½—é©¬ä½“ï¼Œå±…ä¸­ä½äºŽé¡µè„šã€‚åœ¨å•é¢æ¨¡å¼ä¸‹ï¼Œé¡µçœ‰ä¼šåŒæ—¶æ˜¾ç¤ºç«&nbsp;èŠ‚åã€‚
%
% è€ƒè™‘åˆ°å„ä¸ªé™¢ç³»å¯¹äºŽé¡µçœ‰å†…å®¹çš„è§„å®šå¹¶ä¸ä¸€è‡´ï¼Œæœ¬æ¨¡æ¿æä¾›äº†è‹¥å¹²ä¸ªè‡ªå®šä¹‰é€‰é¡¹ã€‚
%
% \begin{function}{header/content,header/content*,footer/content,footer/content*}
%   \begin{syntax}
%     \OPT{content}  = \{\Arg{ä½ç½®}\Arg{å†…å®¹},\Arg{ä½ç½®}\Arg{å†…å®¹},...\}
%     \OPT{content*} = \{\Arg{ä½ç½®}\Arg{å†…å®¹},\Arg{ä½ç½®}\Arg{å†…å®¹},...\}
%   \end{syntax}
% é¡µçœ‰é¡µè„šçš„æ&nbsp;¼å¼ä¸Žå†…å®¹è®¾ç½®ã€‚å¸¦æœ‰æ˜Ÿå·çš„è®¾ç½®é¡¹ä¾›å•é¢æ¨¡å¼ä¸‹ä½¿ç”¨ã€‚
% \end{function}
%
% é¡µçœ‰é¡µè„šçš„å†…å®¹è®¾ç½®æ˜¯ä¸€ä¸ªé€—å·åˆ†éš”çš„åˆ—è¡¨ï¼Œå®žé™…ä¸Šæ˜¯ \tn{fancyhead} å’Œ
% \tn{fancyfoot} å‘½ä»¤çš„é€‰é¡¹ã€‚å‰ä¸€ä¸ªèŠ±æ‹¬å·å†…ä¸ºå¤§å†™å­—æ¯æŒ‡å®šçš„ä½ç½®é€‰é¡¹ï¼Œ
% å¯ä½¿ç”¨å·¦ï¼ˆ\opt{L}ï¼‰ã€ä¸­ï¼ˆ\opt{C}ï¼‰ã€å³ï¼ˆ\opt{R}ï¼‰ã€‚
% åŒé¢æ¨¡å¼ä¸‹å¯é¢å¤–æŒ‡å®šå‡ºçŽ°åœ¨å¥‡æ•°é¡µï¼ˆ\opt{O}ï¼‰è¿˜æ˜¯å¶æ•°é¡µï¼ˆ\opt{E}ï¼‰ã€‚
% è¯¦ç»†è¯´æ˜Žè¯·å‚è€ƒ \pkg{fancyhdr} çš„æ‰‹å†Œã€‚
%
% æŽ¥ä¸‹æ¥å±•ç¤ºäº†ä¸€ä¸ªæ‰‹åŠ¨è®¾ç½®é¡µçœ‰å†…å®¹çš„ä¾‹å­ã€‚è¿™é‡Œæˆ‘ä»¬æ¸…ç©ºäº†é¡µè„šï¼Œ
% å¹¶å°†é¡µçœ‰æ&nbsp;¼å¼è®¾ç½®æˆäº”å·é»‘ä½“ï¼Œå¥‡æ•°é¡µå·¦ä¾§ä¸ºèŠ‚åï¼Œå³ä¾§ä¸ºé¡µç&nbsp;ï¼Œ
% å¶æ•°é¡µå·¦ä¾§ä¸ºé¡µç&nbsp;ï¼Œå³ä¾§ä¸ºç«&nbsp;åã€‚
% \begin{latexexample}[moretexcs={\njusetup,\sffamily,\njusetformat},
%   emph={[2]header,footer},emph={[3]content}]
%   \njusetup[header/content]{
%       { OR } { \thepage }, { OL } { \rightmark },
%       { EL } { \thepage }, { ER } { \leftmark  }
%   },
%   \njusetup[footer/content]{}
%   \njusetformat{header}{\small\sffamily}
% \end{latexexample}
%
%
% \subsubsection{å­—å½¢}
%
% æœ¬æ¨¡æ¿ç»§æ‰¿ \pkg{ctex} å®é›†æä¾›çš„å­—å½¢å­—å·è®¾ç½®ï¼Œä»¥å¤‡ä¸æ—¶ä¹‹éœ€ã€‚æ¢å¥è¯è¯´ï¼Œ
% é™¤éžä½&nbsp;æœ‰åè¶³çš„æŠŠæ¡ï¼Œè®¤ä¸ºæŸå¤„å­—ä½“äº§ç”Ÿäº†åå·®\footnote{åœ¨æ­¤æƒ…å†µä¸‹ä¹Ÿåº”å½“
% ç›´æŽ¥åˆ°æ¨¡æ¿çš„ GitHub ä»“åº“åé¦ˆã€‚}ï¼Œå¦åˆ™æ—&nbsp;éœ€åŠ¨ç”¨è¿™äº›å‘½ä»¤å¤„ç†æ&nbsp;·å¼é—®é¢˜ã€‚
%
% \begin{function}[added=2021-09-22]{\njuline}
%   \begin{syntax}
%     \tn{njuline}\Arg{æ–‡å­—}
%   \end{syntax}
% ä¸ºäº†é¿å…åŽŸç”Ÿ \tn{uline} å‘½ä»¤åœ¨ä¸­æ–‡çŽ¯å¢ƒä¸‹ä¸èƒ½æ­£å¸¸æ¢è¡Œçš„é—®é¢˜ï¼Œ
% æœ¬æ¨¡æ¿ä½¿ç”¨ \tn{njuline} ä½œä¸ºæ›¿ä»£æ–¹æ¡ˆï¼Œåˆ†åˆ«å¯¹ \XeLaTeX çš„
% \pkg{xeCJKfntef} åŒ…å’Œ \LuaLaTeX çš„ \pkg{lua-ul}
% åŒ…ä¸­çš„ä¸‹åˆ’çº¿å‘½ä»¤è¿›è¡Œäº†åŒ…è£…ã€‚
% \end{function}
%
% \subsubsection{åˆ—è¡¨}
%
% æ¨¡æ¿é»˜è®¤è½½å…¥ \pkg{enumitem} å®åŒ…ï¼Œå¯¹ä¸‰ä¸ªå¸¸ç”¨åˆ—è¡¨çŽ¯å¢ƒå†…çš„æ¡ç›®é—´è·è¿›è¡ŒåŽ‹ç¼©ã€‚
% å¯ä»¥é€šè¿‡ç¬¬ \ref{subsubsec:optional-pkg} èŠ‚æä¾›çš„é€‰é¡¹ç¦ç”¨è¯¥å®åŒ…ã€‚
%
% \subsubsection{å›¾è¡¨}
%
% \begin{function}[added=2022-08-06]{image/path}
%   \begin{syntax}
%     \OPT{path} = \{\marg{è·¯å¾„1},\marg{è·¯å¾„2},...\}
%   \end{syntax}
% å›¾ç‰‡æœç´¢è·¯å¾„ï¼Œç­‰æ•ˆäºŽ \tn{graphicspath}ã€‚è¿™ä¸ªé€‰é¡¹ä»…èƒ½è®¾ç½®ä¸€æ¬¡ã€‚
% \end{function}
%
% å›¾è¡¨çš„æ&nbsp;‡é¢˜ä¾èµ– \pkg{caption} åŒ…è¿›è¡Œå®šåˆ¶ã€‚æŒ‰ç…§ä¹&nbsp;æƒ¯ï¼Œå›¾ç‰‡çš„æ&nbsp;‡é¢˜åœ¨åº•éƒ¨ï¼Œ
% è¡¨æ&nbsp;¼çš„æ&nbsp;‡é¢˜åœ¨é¡¶éƒ¨ï¼Œè¿™æ˜¯é€šè¿‡ \tn{caption} å‘½ä»¤å’Œç”Ÿæˆå›¾è¡¨å‘½ä»¤çš„ç›¸å¯¹ä½ç½®å†³å®šçš„ã€‚
% \footnote{å½“ç„¶äº†ï¼Œæˆ‘ä»¬å¯ä»¥ç”¨ \pkg{float}  æˆ–è€… \pkg{floatrow} åŒ…æ¥å¼ºåˆ¶æ&nbsp;‡é¢˜ä½ç½®ï¼Œ
% ä½† \url{https://tex.stackexchange.com/q/130825} è¡¨æ˜Žå¦‚æ—&nbsp;å¿…è¦å‹¿å¢žå®žä½“ã€‚}
%
% \begin{minipage}{.5\textwidth}
% \begin{latexexample}[moretexcs={\centering,\includegraphics,\caption,\label},
%   emph={[1]figure}]
%   \begin{figure}[htbp]
%     \centering
%     \includegraphics[
%       width=.6\textwidth]{foo.pdf}
%     \caption{Figure example}
%     \label{fig:foo}
%   \end{figure}
% \end{latexexample}
% \end{minipage}
% \begin{minipage}{.5\textwidth}
% \begin{latexexample}[moretexcs={\centering,\caption,\label},
%   emph={[1]table,tabular}]
%   \begin{table}[htbp]
%     \centering
%     \caption{Table example}
%     \label{tab:foo}
%     \begin{tabular}{cc}
%       a &amp; b \\
%     \end{tabular}
%   \end{table}
% \end{latexexample}
% \end{minipage}
%
% \subsubsection{è„šæ³¨}
%
% \begin{function}[added=2022-05-01,updated=2022-10-16]{footnote/style}
%   \begin{syntax}
%     \OPT{style} = &lt;(plain)|pifont|circled|circled*&gt;
%   \end{syntax}
% è®¾ç½®è„šæ³¨ç¼–å·æ&nbsp;·å¼ã€‚é»˜è®¤ä¸ºæ™®é€šæ•°å­—ï¼›ä½¿ç”¨ \opt{pifont} å¯ä¿®æ”¹ä¸ºå¸¦åœˆæ•°å­—ï¼Œ
% ç”±äºŽå­—ä½“åŒ…å«çš„å­—ç¬¦æ•°é‡æœ‰é™ï¼Œå•é¡µä¸å»ºè®®è¶…è¿‡10æ¡è„šæ³¨ï¼›ä½¿ç”¨ \opt{circled} æˆ– \opt{circled*}
% é€‰é¡¹åŒæ&nbsp;·å¯ä¿®æ”¹ä¸ºå¸¦åœˆæ•°å­—ï¼Œä¸”ä¸å—å•é¡µè„šæ³¨æ•°é‡çš„é™åˆ¶ï¼Œå¸¦æ˜Ÿå·çš„é€‰é¡¹ä¸ºé»‘åº•ç™½å­—ï¼ˆé˜´æ–‡ï¼‰ã€‚
% \footnote{æ­¤åŠŸèƒ½ä¾èµ–çš„ \pkg{circledtext} å®åŒ…äºŽ 2022 å¹´ 4 æœˆå‘å¸ƒï¼Œå¯èƒ½éœ€è¦æ‰‹åŠ¨å®‰è£…ã€‚}
% \end{function}
%
% \begin{function}[added=2022-10-16]{footnote/circledtext-option}
%   \begin{syntax}
%     \OPT{circledtext-option} = \meta{é€‰é¡¹åˆ—è¡¨}
%   \end{syntax}
% \opt{circled} æˆ– \opt{circled*} é€‰é¡¹çš„å¸¦åœˆæ•°å­—ç¼–å·ä½¿ç”¨ \pkg{circledtext}
% å®åŒ…ç»˜åˆ¶ï¼Œå¯ä½¿ç”¨æœ¬é€‰é¡¹è½½å…¥æ›´å¤šå®šåˆ¶è®¾ç½®ï¼Œè¯¦è§å…¶æ‰‹å†Œã€‚
% \end{function}
%
% \begin{function}[added=2022-10-16]{footnote/hang}
%   \begin{syntax}
%     \OPT{hang} = \TTF
%   \end{syntax}
% æ˜¯å¦è¿›è¡Œæ‚¬æŒ‚ç¼©è¿›ã€‚é»˜è®¤ä¸ºæ˜¯ï¼Œç¼©è¿›å®½åº¦ä¸º \qty{1.5}{em}ã€‚
% \end{function}
%
% è„šæ³¨æ&nbsp;·å¼çš„è°ƒæ•´ä¾èµ– \pkg{footmisc}ã€‚å¦‚æžœå¸Œæœ›ä½¿ç”¨ \LaTeX çš„é»˜è®¤æ&nbsp;·å¼ï¼Œ
% å¯ä»¥é€šè¿‡ç¬¬ \ref{subsubsec:optional-pkg} èŠ‚æä¾›çš„é€‰é¡¹ç¦ç”¨è¯¥å®åŒ…ã€‚
%
% \subsubsection{æ•°å­¦ç¬¦å·}
%
% ^^A \url{https://www.caam.rice.edu/~heinken/latex/symbols.pdf}
% ^^A http://mirrors.ctan.org/macros/unicodetex/latex/unicode-math/unimath-symbols.pdf
% æ¨¡æ¿ä½¿ç”¨ \pkg{unicode-math} å®åŒ…é…ç½®æ•°å­¦å­—ä½“ï¼Œè¯¥æ–¹æ¡ˆç›®å‰ä¸å…¼å®¹
% ä¼&nbsp;ç»Ÿçš„ \pkg{amsfonts}ã€\pkg{amssymb}ã€\pkg{bm}
% \footnote{\url{https://tex.stackexchange.com/q/528831/}}
% ã€\pkg{upgreek} ç­‰å®åŒ…ã€‚éœ€è¦ä½¿ç”¨æ–°æ–¹æ¡ˆæä¾›çš„ç›¸åº”å‘½ä»¤ã€‚
% ä¾‹å¦‚ï¼ŒåŠ&nbsp;ç²—æ•°å­¦ç¬¦å·çš„å‘½ä»¤ä¸º \tn{symbf}ã€‚
% æ›´å¤šç»†èŠ‚è¯·æŸ¥é˜… \pkg{unicode-math} æ‰‹å†Œã€‚
%
% å¦‚æžœæ‚¨å¯¹æ­¤å¹¶ä¸ç†Ÿæ‚‰ï¼Œä¹Ÿå¯ä»¥é€šè¿‡ç¬¬ \ref{subsubsec:optional-pkg}
% èŠ‚æä¾›çš„é€‰é¡¹ç¦ç”¨è¯¥å®åŒ…ã€‚\footnote{ç¦ç”¨åŽæœ¬èŠ‚æä¾›çš„è®¾ç½®å‡ä¸ä¼šç”Ÿæ•ˆã€‚}
%
% ä¸­æ–‡è®ºæ–‡çš„æ•°å­¦ç¬¦å·é»˜è®¤éµå¾ª GB/T 3102--93ã€Šç‰©ç†ç§‘å­¦å’ŒæŠ€æœ¯ä¸­
% ä½¿ç”¨çš„æ•°å­¦ç¬¦å·ã€‹\cite{gb-3102-93}ï¼Œè¯¥æ&nbsp;‡å‡†å‚ç…§é‡‡çº³ ISO 31-11:1992ï¼Œ
% \footnote{ç›®å‰å·²æ›´æ–°ä¸º ISO 80000-2:2019ã€‚}ï¼Œ
% ä½†æ˜¯ä¸Ž \TeX{} é»˜è®¤çš„ç¾Žå›½æ•°å­¦å­¦ä¼šï¼ˆAMSï¼‰çš„ä¹&nbsp;æƒ¯æœ‰è®¸å¤šå·®å¼‚ã€‚
%
% \begin{function}[added=2022-07-31]{math/style}
%   \begin{syntax}
%     \OPT{style} = &lt;TeX|ISO|(GB)&gt;
%   \end{syntax}
% æ•°å­¦ç¬¦å·é£Žæ&nbsp;¼ã€‚
% \end{function}
%
% é»˜è®¤çš„å›½æ&nbsp;‡é£Žæ&nbsp;¼ \opt{GB} ç›¸å½“äºŽåœ¨å¯¼è¨€åŒºè®¾ç½®äº†
% \begin{latexexample}[moretexcs={\njusetup},emph={[2]math},
%   emph={[3]integral,integral-limits,less-than-or-equal,
%   math-ellipsis,partial,real-part,vector,uppercase-greek}]
%   \njusetup[math]{
%       integral           = upright,
%       integral-limits    = false,
%       less-than-or-equal = slanted,
%       math-ellipsis      = centered,
%       partial            = upright,
%       real-part          = roman,
%       vector             = boldfont,
%       uppercase-greek    = italic
%   }
% \end{latexexample}
%
% ç”¨æˆ·ä¹Ÿå¯ä»¥é€é¡¹ä¿®æ”¹æ•°å­¦æ&nbsp;·å¼ã€‚
%
% \begin{function}[added=2022-07-31]{math/integral}
%   \begin{syntax}
%     \OPT{integral} = &lt;upright|slanted&gt;
%   \end{syntax}
% ç§¯åˆ†å·çš„æ­£/æ–œä½“ã€‚
% è¯¥é€‰é¡¹éœ€è¦å­—ä½“çš„æ”¯æŒï¼Œç›®å‰ä»…é™ \opt{xits}ã€\opt{newcm}ã€‚
% \end{function}
%
% \begin{function}[added=2022-07-31]{math/integral-limits}
%   \begin{syntax}
%     \OPT{integral-limits} = &lt;\TF&gt;
%   \end{syntax}
% ç§¯åˆ†å·ä¸Šä¸‹é™çš„ä½ç½®ï¼Œå¯é€‰ï¼š\opt{true}ï¼ˆåœ¨ä¸Šä¸‹ï¼‰ã€\opt{false}ï¼ˆåœ¨å³ä¾§ï¼‰ã€‚
% è¿™ä¸ªè®¾ç½®åªå½±å“è¡Œé—´å…¬å¼ï¼Œè¡Œå†…å…¬å¼ç»Ÿä¸€å±…å³ä¾§ï¼Œä¸å—å½±å“ã€‚
% \end{function}
%
% \begin{function}[added=2022-07-31]{math/less-than-or-equal}
%   \begin{syntax}
%     \OPT{less-than-or-equal} = &lt;slanted|horizontal&gt;
%   \end{syntax}
% å°äºŽç­‰äºŽå·å’Œå¤§äºŽç­‰äºŽå·çš„å­—å½¢ã€‚
% è¿™å°†æŽ§åˆ¶ \tn{le}ã€\tn{ge}ã€\tn{leq} å’Œ \tn{geq} çš„ç¬¦å·æ˜¯
% â€œ$\leqslant$ã€$\geqslant$â€è¿˜æ˜¯â€œ$\leq$ã€$\geq$â€ã€‚
% \end{function}
%
% \begin{function}[added=2022-07-31]{math/math-ellipsis}
%   \begin{syntax}
%     \OPT{math-ellipsis} = &lt;centered|lower&gt;
%   \end{syntax}
% çœç•¥å· \tn{dots} çš„æ&nbsp;·å¼ï¼Œå¯é€‰ï¼š\opt{centered}ï¼ˆæŒ‰ç…§ä¸­æ–‡çš„ä¹&nbsp;æƒ¯å›ºå®šå±…ä¸­ï¼‰ã€
% \opt{lower}ï¼ˆå–å†³äºŽå‰åŽç¬¦å·çš„ä½ç½®ï¼‰ã€‚
% å…¶ä»–çš„çœç•¥å·å‘½ä»¤å¦‚ \tn{lots}ã€\tn{cdots} åˆ™ä¸å—å½±å“ã€‚
% \end{function}
%
% \begin{function}[added=2022-07-31]{math/partial}
%   \begin{syntax}
%     \OPT{partial} = &lt;upright|italic&gt;
%   \end{syntax}
% åå¾®åˆ†ç¬¦å·çš„æ­£/æ–œä½“ã€‚
% \end{function}
%
% \begin{function}[added=2022-07-31]{math/real-part}
%   \begin{syntax}
%     \OPT{real-part} = &lt;roman|fraktur&gt;
%   \end{syntax}
% å®žéƒ¨ \tn{Re} å’Œè™šéƒ¨ \tn{Im} çš„å­—ä½“ã€‚
% \end{function}
%
% \begin{function}[added=2022-07-31]{math/vector}
%   \begin{syntax}
%     \OPT{vector} = &lt;boldfont|arrow&gt;
%   \end{syntax}
% å‘é‡çš„è¡¨ç¤ºæ–¹æ³•ï¼Œå¯é€‰ç²—æ–œä½“æˆ–ç®­å¤´ã€‚
% \end{function}
%
% \begin{function}[added=2022-07-31]{math/uppercase-greek}
%   \begin{syntax}
%     \OPT{uppercase-greek} = &lt;upright|italic&gt;
%   \end{syntax}
% å¤§å†™å¸Œè…Šå­—æ¯çš„æ­£/æ–œä½“ã€‚
% æœ‰é™å¢žé‡ç¬¦å· $\increment x$ å›ºå®šä½¿ç”¨æ­£ä½“ï¼ŒæŽ¨èä½¿ç”¨ \tn{increment} è¡¨ç¤ºã€‚
% \end{function}
%
% æœ¬æ¨¡æ¿çš„è®¾ç½®å¹¶ä¸èƒ½è¦†ç›–æ‰€æœ‰ç¬¦å·ï¼Œä¸€äº›éœ€è¦å†™ä½œæ—¶æ‰‹åŠ¨å¤„ç†çš„è¦ç‚¹åŒ…æ‹¬ï¼š
% \begin{itemize}
%   \item æ•°å­¦å¸¸æ•°å’Œç‰¹æ®Šå‡½æ•°åç”¨æ­£ä½“ï¼Œå¦‚
%   \begin{itemize}
%     \item $\uppi$ ä½¿ç”¨ |$\uppi$|
%     \item $\symup{i}$ ä½¿ç”¨ |$\symup{i}$|
%     \item $\symup{e}$ ä½¿ç”¨ |$\symup{e}$|
%   \end{itemize}
%   \item å¾®åˆ†å·ä½¿ç”¨æ­£ä½“ï¼Œå¦‚
%   \begin{itemize}
%     \item $\mathrm{d} \varphi / \mathrm{d} t$
%           ä½¿ç”¨ |$\mathrm{d} \varphi / \mathrm{d} t$|
%   \end{itemize}
% \end{itemize}
%
% \subsubsection{å®šç†çŽ¯å¢ƒ}
%
% æ¨¡æ¿ä½¿ç”¨ \pkg{ntheorem} å®åŒ…é…ç½®å®šç†ç±»çŽ¯å¢ƒï¼Œæä¾›äº†ä¸€ç³»åˆ—é€‰é¡¹ã€‚
% æ‚¨ä¹Ÿå¯ä»¥é€šè¿‡ç¬¬ \ref{subsubsec:optional-pkg} èŠ‚æä¾›çš„é€‰é¡¹ç¦ç”¨è¯¥å®åŒ…ã€‚
% \footnote{ç¦ç”¨åŽæœ¬èŠ‚æä¾›çš„è®¾ç½®å‡ä¸ä¼šç”Ÿæ•ˆã€‚}
%
% ä»¥ä¸‹é€‰é¡¹ç”¨äºŽå®šä¹‰å®šç†ç±»çŽ¯å¢ƒçš„æ&nbsp;·å¼ã€‚
%
% \begin{function}[added=2022-04-21]{theorem/style}
%   \begin{syntax}
%     \OPT{style} = &lt;(plain)|break|change|margin|empty|...&gt;
%   \end{syntax}
% å®šç†åŸºæœ¬æ&nbsp;·å¼ã€‚ç­‰æ•ˆäºŽ \tn{theoremstyle}\marg{æ&nbsp;·å¼åç§°}ã€‚
% \end{function}
%
% \begin{function}[added=2022-04-21]{theorem/header-font}
%   \begin{syntax}
%     \OPT{header-font} = \meta{å¤´éƒ¨å­—ä½“æ&nbsp;¼å¼}
%   \end{syntax}
% å®šç†å¤´éƒ¨å­—ä½“æ&nbsp;¼å¼ã€‚ç­‰æ•ˆäºŽ \tn{theoremheaderfont}\marg{æ&nbsp;¼å¼}ã€‚
% \end{function}
%
% \begin{function}[added=2022-04-21]{theorem/body-font}
%   \begin{syntax}
%     \OPT{body-font} = \meta{å†…éƒ¨å­—ä½“æ&nbsp;¼å¼}
%   \end{syntax}
% å®šç†å†…éƒ¨å­—ä½“æ&nbsp;¼å¼ã€‚ç­‰æ•ˆäºŽ \tn{theorembodyfont}\marg{æ&nbsp;¼å¼}ã€‚
% \end{function}
%
% \begin{function}[added=2022-04-21]{theorem/qed-symbol}
%   \begin{syntax}
%     \OPT{qed-symbol} = \meta{è¯æ¯•ç¬¦å·}
%   \end{syntax}
% è¯æ¯•ç¬¦å·ã€‚ç­‰æ•ˆäºŽ \tn{theoremsymbol}\marg{ç¬¦å·}ã€‚é»˜è®¤ä¸ºç©ºå¿ƒæ–¹å—ï¼ˆ\mdlgwhtsquareï¼‰ã€‚
% ç¦ç”¨ \pkg{unicode-math} æ—¶ä¸ºå®žå¿ƒé»‘è‰²æ–¹å—ï¼ˆ\rule{1ex}{1ex}ï¼‰ã€‚
% \end{function}
%
% \begin{function}[added=2022-04-21]{theorem/counter}
%   \begin{syntax}
%     \OPT{counter} = &lt;part|(chapter)|section|...&gt;
%   \end{syntax}
% å®šç†è®¡æ•°å™¨èŒƒå›´ã€‚
% \end{function}
%
% \begin{function}[added=2023-05-07]{theorem/share-counter}
%   \begin{syntax}
%     \OPT{share-counter} = &lt;\TFF&gt;
%   \end{syntax}
% æ˜¯å¦å…±äº«è®¡æ•°å™¨ã€‚
% \end{function}
%
% æ¨¡æ¿çš„é»˜è®¤è®¾ç½®ç­‰æ•ˆäºŽ
%
% \begin{latexexample}[moretexcs={\njusetup,\bfseries,\itshape,\mdlgwhtsquare},
%   emph={[2]theorem},emph={[3]style,header-font,body-font,qed-symbol,counter}]
%   \njusetup[theorem]{
%       style         = plain,
%       header-font   = \normalfont \bfseries ,
%       body-font     = \itshape ,
%       qed-symbol    = \ensuremath { \mdlgwhtsquare },
%       counter       = chapter,
%       share-counter = false
%   }
% \end{latexexample}
%
% ä»¥ä¸‹é€‰é¡¹ç”¨äºŽåˆ›å»ºå®šç†ç±»çŽ¯å¢ƒã€‚
%
% \begin{function}[added=2022-08-05]{theorem/type}
%   \begin{syntax}
%     \OPT{type} = \{\marg{çŽ¯å¢ƒå,ç±»åž‹æ&nbsp;‡è¯†} \marg{å¤´åç§°},...\}
%   \end{syntax}
% éœ€è¦å®šä¹‰çš„å®šç†ç±»åž‹åˆ—è¡¨ã€‚åœ¨å¯é€‰çš„ \meta{ç±»åž‹æ&nbsp;‡è¯†} ä¸­ï¼Œå«æœ‰\emph{æ˜Ÿå·}è¡¨ç¤º
% éœ€è¦ç¼–å·ï¼Œå«æœ‰\emph{åŠ&nbsp;å·}éœ€è¦è¯æ¯•ç¬¦å·ã€‚è¯¥é€‰é¡¹å­˜å‚¨çš„æ˜¯ç”¨æ¥å®šä¹‰çŽ¯å¢ƒçš„å‚æ•°ï¼Œ
% è€Œ\emph{ä¸ä¼šç›´æŽ¥åˆ›å»ºçŽ¯å¢ƒ}ï¼Œä¸”æ¯æ¬¡è°ƒç”¨éƒ½ä¼šè¦†ç›–å‰é¢å®šä¹‰çš„çŽ¯å¢ƒåˆ—è¡¨ã€‚
% \end{function}
%
% \opt{theorem/type} åˆå§‹å®šä¹‰çš„çŽ¯å¢ƒåˆ—è¡¨å¦‚è¡¨~\ref{tab:mathenv} æ‰€ç¤ºã€‚
% è¿™äº›çŽ¯å¢ƒå¹¶æ²¡æœ‰é¢„å…ˆåˆ›å»ºï¼Œä½¿ç”¨æ–¹æ³•è§ä¸‹é¢çš„ä¾‹å­ã€‚
%
% \begin{table}[htbp]
%   \centering
%   \begin{talltblr} [
%       caption = {é¢„ç½®çš„æ•°å­¦å®šç†çŽ¯å¢ƒ},
%       label   = {tab:mathenv},
%       note{a} = {è¯æ˜ŽçŽ¯å¢ƒè¾ƒä¸ºç‰¹æ®Šï¼Œä¸ç¼–å·ä¸”ä¼šåœ¨ç»“å°¾æ·»åŠ&nbsp;è¯æ¯•ç¬¦å·ã€‚} ]
%     { colspec = {cc|cc} }
%     \toprule
%       æ&nbsp;‡ç­¾       &amp; åç§°     &amp; æ&nbsp;‡ç­¾       &amp; åç§°     \\
%     \midrule
%       axiom      &amp; å…¬ç†     &amp; lemma      &amp; å¼•ç†     \\
%       corollary  &amp; æŽ¨è®º     &amp; proof \TA  &amp; è¯æ˜Ž     \\
%       definition &amp; å®šä¹‰     &amp; theorem    &amp; å®šç†     \\
%       example    &amp; ä¾‹       &amp;            &amp;          \\
%     \bottomrule
%   \end{talltblr}
% \end{table}
%
% \begin{function}[added=2022-08-05]{theorem/define}
%   \begin{syntax}
%      &lt;\OPT{define}&gt;
%   \end{syntax}
% åˆ›å»ºå®šç†çŽ¯å¢ƒã€‚
% \end{function}
%
% \opt{theorem/define} å¹¶æ²¡æœ‰å‚æ•°ã€‚è¿™ä¸ªé€‰é¡¹åœ¨è°ƒç”¨åŽä¼šè¯»å–
% \opt{theorem/type} ä¿å­˜çš„åˆ—è¡¨ä»¥åŠå‰æ–¹çš„æ&nbsp;·å¼è®¾ç½®å¹¶åˆ›å»ºç›¸åº”çŽ¯å¢ƒã€‚
% è¿™ä¹Ÿå°±æ„å‘³ç€è¯¥é€‰é¡¹åœ¨ \opt{theorem/type} ä¸ºç©ºæ—¶ä¼šæŠ¥é”™ã€‚
%
% åœ¨ä¸‹é¢è¿™ä¸ªä¾‹å­ä¸­ï¼Œæˆ‘ä»¬å…ˆåˆ›å»ºäº†é¢„ç½®çš„ä¸ƒç§çŽ¯å¢ƒã€‚é™¤äº†æ—&nbsp;ç¼–å·çš„
% \env{proof}ï¼Œå…¶ä½™å…­ç§å…±ç”¨ä¸€ä¸ªè®¡æ•°å™¨ã€‚éšåŽæˆ‘ä»¬å°†å®šç†å†…éƒ¨æ–‡å­—å­—ä½“æ”¹ä¸º
% å®‹ä½“ï¼Œå®šä¹‰äº† \env{exercise} å’Œ \env{solution} ä¸¤ç§å®šç†çŽ¯å¢ƒï¼ŒåŽè€…æ²¡æœ‰ç¼–å·ã€‚
%
% \begin{latexexample}[moretexcs={\njusetup,\normalfont},
%   emph={[2]theorem},emph={[3]share-counter,define,body-font,type}]
%   \njusetup[theorem]{
%       share-counter = true ,
%       define ,
%       body-font   = \normalfont ,
%       type        = {
%           { {exercise} {ä¹&nbsp;é¢˜} },
%           { {solution,*} {è§£} }
%       },
%       define
%   }
% \end{latexexample}
%
%
% \subsubsection{ç¼–å·}
%
% \begin{function}[added=2022-07-31]{label-sep/figure,label-sep/table,label-sep/equation}
%   \begin{syntax}
%     \OPT{figure}   = \meta{ç¬¦å·}
%     \OPT{table}    = \meta{ç¬¦å·}
%     \OPT{equation} = \meta{ç¬¦å·}
%   \end{syntax}
% å›¾ç‰‡ã€è¡¨æ&nbsp;¼ã€å…¬å¼ç¼–å·ä¸­çš„è¿žæŽ¥ç¬¦æ&nbsp;·å¼ï¼Œé»˜è®¤ä¸ºçŸ­æ¨ªçº¿ï¼ˆen dashï¼‰ã€‚
% \end{function}
%
%
% \subsection{å‚è€ƒæ–‡çŒ®}
%
% æœ¬æ¨¡æ¿é»˜è®¤è½½å…¥ \pkg{biblatex} å®åŒ…ï¼Œä½¿ç”¨ \hologo{biber} ä½œä¸ºåŽç«¯ï¼Œ
% é€šè¿‡ \pkg{biblatex-gb7714-2015}\cite{biblatex-gb7714-2015} å®žçŽ°
% GB/T 7714--2015 \cite{gb-t-7714-2015} è§„å®šçš„å‚è€ƒæ–‡çŒ®è‘—å½•è§„åˆ™å›½å®¶æ&nbsp;‡å‡†ã€‚
% éœ€è¦ä½¿ç”¨ |biber| å‘½ä»¤ç¼–è¯‘æ‰ä¼šæ˜¾ç¤ºæ­£ç¡®çš„æ¡ç›®åºå·ï¼Œè¯¦æƒ…è¯·å‚ç…§ç¬¬
% \ref{subsubsec:compileseq} èŠ‚ã€‚æœ¬èŠ‚æä¾›çš„æ‰€æœ‰é€‰é¡¹å‡åŸºäºŽæ­¤æ–¹æ¡ˆã€‚
%
% å‡ºäºŽç®€åŒ–å‘½ä»¤çš„è€ƒè™‘ï¼Œæœ¬æ¨¡æ¿å¹¶ä¸è®¡åˆ’æ”¯æŒ \hologo{BibTeX}ï¼Œä½†æ‚¨å¯ä»¥é€šè¿‡ç¬¬
% \ref{subsubsec:optional-pkg} èŠ‚æä¾›çš„é€‰é¡¹ç¦ç”¨é»˜è®¤çš„å‚è€ƒæ–‡çŒ®å·¥å…·ï¼Œ
% è‡ªè¡Œåˆ©ç”¨ \pkg{gbt7714} ç­‰å®åŒ…å®Œæˆå‚è€ƒæ–‡çŒ®æ&nbsp;·å¼çš„é…ç½®ã€‚
%
% \subsubsection{é€‰é¡¹}
%
% \begin{function}[added=2021-12-19]{bib/style}
%   \begin{syntax}
%     \OPT{style} = &lt;(numeric)|author-year|\meta{è‡ªå®šä¹‰æ&nbsp;·å¼}&gt;
%   \end{syntax}
% å‚è€ƒæ–‡çŒ®æ&nbsp;·å¼ã€‚å¯é€‰é¡ºåºç¼–ç&nbsp;åˆ¶ \opt{numeric} å’Œè‘—è€…-å‡ºç‰ˆå¹´åˆ¶ \opt{author-year}ï¼Œ
% æˆ–è‡ªè¡Œå¡«å…¥ä»»æ„å…¶ä»– \pkg{biblatex} æ&nbsp;·å¼ã€‚é»˜è®¤ä¸ºé¡ºåºç¼–ç&nbsp;åˆ¶ã€‚
% \end{function}
%
% å‚è€ƒæ–‡çŒ®æ&nbsp;·å¼æ˜¯ä¸€ä¸ªæ•´ä½“çš„è®¾ç½®ï¼Œä¼šå¯¹æ­£æ–‡ä¸­å¼•ç”¨çš„æ–‡çŒ®çš„æ&nbsp;‡æ³¨æ–¹æ³•å’Œ
% å‚è€ƒæ–‡çŒ®è¡¨çš„è¾“å‡ºæ&nbsp;¼å¼äº§ç”Ÿå½±å“ã€‚æ&nbsp;¹æ®å›½å®¶è§„å®š\cite{gb-t-7714-2015}ï¼Œ
% å¯ä»¥æŒ‰ç…§å‚è€ƒæ–‡çŒ®è¡¨çš„ç»„ç»‡æ–¹å¼åˆ†ä¸ºä»¥ä¸‹ä¸¤ç§æ&nbsp;·å¼ï¼š
% \begin{description}
%   \item[é¡ºåºç¼–ç&nbsp;åˆ¶] é¡ºåºç¼–ç&nbsp;åˆ¶æ˜¯æŒ‰æ­£æ–‡ä¸­å¼•ç”¨çš„æ–‡çŒ®å‡ºçŽ°çš„å…ˆåŽé¡ºåºè¿žç»­
%                     ç¼–ç&nbsp;ï¼Œå°†åºå·ç½®äºŽæ–¹æ‹¬å·ä¸­ã€‚å‚è€ƒæ–‡çŒ®è¡¨é‡‡ç”¨é¡ºåºç¼–ç&nbsp;
%                     åˆ¶ç»„ç»‡æ—¶ï¼Œå„ç¯‡æ–‡çŒ®åº”æŒ‰æ­£æ–‡éƒ¨åˆ†æ&nbsp;‡æ³¨çš„åºå·ä¾æ¬¡åˆ—å‡ºã€‚
%   \item[è‘—è€…-å‡ºç‰ˆå¹´åˆ¶] æ­£æ–‡å¼•ç”¨çš„æ–‡çŒ®é‡‡ç”¨è‘—è€…-å‡ºç‰ˆå¹´åˆ¶æ—¶ï¼Œå„ç¯‡æ–‡çŒ®çš„
%                        æ&nbsp;‡æ³¨å†…å®¹ç”±è‘—è€…å§“æ°ä¸Žå‡ºç‰ˆå¹´æž„æˆï¼Œå¹¶ç½®äºŽ"()"å†…ã€‚
%                        å‚è€ƒæ–‡çŒ®è¡¨é‡‡ç”¨è‘—è€…-å‡ºç‰ˆå¹´åˆ¶ç»„ç»‡æ—¶ï¼Œå„ç¯‡æ–‡çŒ®é¦–
%                        å…ˆæŒ‰æ–‡ç§é›†ä¸­ï¼Œç„¶åŽæŒ‰è‘—è€…å­—é¡ºå’Œå‡ºç‰ˆå¹´æŽ’åˆ—ã€‚
% \end{description}
%
% å¯¹äºŽæœ¬ç§‘ç”Ÿè€Œè¨€ï¼Œå­¦æ&nbsp;¡è§„å®šæ–‡ä»¶è¡¨æ˜Žå‚è€ƒæ–‡çŒ®è¡¨åº”å½“â€œç”¨æ•°å­—åŠ&nbsp;æ–¹æ‹¬å·
% è¡¨ç¤ºâ€\cite{nju-bachelor-2023}ï¼Œç¬¦åˆé¡ºåºç¼–ç&nbsp;åˆ¶çš„æ&nbsp;¼å¼ï¼Œä¿æŒé»˜è®¤è®¾ç½®å³å¯ã€‚
%
% \begin{function}[added=2022-02-15]{bib/option}
%   \begin{syntax}
%     \OPT{option} = \meta{é€‰é¡¹åˆ—è¡¨}
%   \end{syntax}
% å¾…ä¼&nbsp;å…¥ \pkg{biblatex} å®åŒ…çš„é¢å¤–é€‰é¡¹åˆ—è¡¨ã€‚
% \end{function}
%
% æœ¬æ¨¡æ¿ä¸­ \pkg{biblatex} å¹¶ä¸æ˜¯æ˜¾å¼è½½å…¥çš„ã€‚
% å¦‚éœ€åœ¨å…¶åŸºç¡€ä¸Šè¿›è¡Œä¸€äº›å®šåˆ¶ï¼Œå¯ä½¿ç”¨æœ¬è®¾ç½®é¡¹è½½å…¥å®åŒ…é€‰é¡¹\cite{biblatex}ã€‚
%
% \begin{function}[added=2021-12-19]{bib/resource}
%   \begin{syntax}
%     \OPT{resource} = \Arg{æ–‡ä»¶}
%   \end{syntax}
% å‚è€ƒæ–‡çŒ®æ•°æ®æºã€‚ç±»ä¼¼äºŽ \tn{addbibresource} å‘½ä»¤ï¼Œä½†å¯ä»¥ä½¿ç”¨é€—å·åˆ†éš”çš„
% åˆ—è¡¨å½¢å¼ã€‚å¿…é¡»ä½¿ç”¨å¸¦æ‰©å±•åï¼ˆ\file{.bib}ï¼‰çš„å®Œæ•´æ–‡ä»¶åã€‚
% \end{function}
%
% \begin{function}{\addbibresource}
%   \begin{syntax}
%     \tn{addbibresource}\Arg{æ–‡ä»¶}
%   \end{syntax}
% æ·»åŠ&nbsp;å‚è€ƒæ–‡çŒ®æºæ–‡ä»¶ã€‚ä¸ºäº†ä¸Ž \pkg{biblatex} è¿›è¡Œå…¼å®¹ï¼Œä¹Ÿå¯ä½¿ç”¨æœ¬å‘½ä»¤
% æ·»åŠ&nbsp;æ•°æ®æºã€‚æœ¬å‘½ä»¤ä¸æ”¯æŒé€—å·åˆ†éš”å¤šä¸ªæ–‡ä»¶çš„å½¢å¼ï¼Œå¦‚æžœå¸Œæœ›é¢å¤–æ·»åŠ&nbsp;å‚
% è€ƒæ–‡çŒ®åˆ—è¡¨ï¼Œéœ€è¦åœ¨å¯¼è¨€åŒºä¸­å¤šæ¬¡è°ƒç”¨ã€‚
% \end{function}
%
% å¯ä»¥å‚è€ƒå¦‚ä¸‹èŒƒä¾‹è¿›è¡Œå‚è€ƒæ–‡çŒ®è®¾ç½®ã€‚
% å…¶ä¸­ \opt{bib/option} çš„å†…å®¹æ—¨åœ¨å…³é—­éƒ¨åˆ†ä¸éœ€æ˜¾ç¤ºçš„æ–‡çŒ®ä¿¡æ¯ï¼Œ
% å¹¶é‡‡å–ä»…é¦–å­—æ¯å¤§å†™çš„ä½œè€…å§“åæ&nbsp;¼å¼ï¼Œå¯æ&nbsp;¹æ®éœ€è¦ä½¿ç”¨ã€‚
% \begin{latexexample}[moretexcs={\njusetup},emph={[2]bib},
%   emph={[3]style,resource,option}]
%   \njusetup[bib]{
%       style    = author-year,
%       resource = {njuthesis-sample.bib}ï¼Œ
%       option   = {
%           doi       = false,
%           isbn      = false,
%           url       = false,
%           eprint    = false,
%           gbnamefmt = lowercase
%       }
%   }
% \end{latexexample}
%
%
% \subsubsection{å‚è€ƒæ–‡çŒ®è¡¨}
%
% \begin{function}{\printbibliography}
% ç”Ÿæˆå‚è€ƒæ–‡çŒ®è¡¨ã€‚
% \end{function}
%
% æ˜¾ç„¶åªæœ‰è¢«å¼•ç”¨è¿‡çš„æ¡ç›®æ‰ä¼šè¢«è¾“å‡ºè‡³å‚è€ƒæ–‡çŒ®è¡¨ã€‚
%
% å‡å¦‚éœ€è¦åœ¨æ¯ç«&nbsp;æœ«å°¾é™„ä¸Šå•ç‹¬çš„å‚è€ƒæ–‡çŒ®è¡¨ï¼Œå¯¼è¨€åŒºæ·»åŠ&nbsp;ä»¥ä¸‹è®¾ç½®ï¼Œ
% å¹¶åœ¨æ¯ç«&nbsp;åŽä½¿ç”¨ \tn{printbibliography} å³å¯ã€‚
% \begin{latexexample}[moretexcs={\njusetup},emph={[2]bib},emph={[3]option}]
%   \njusetup[bib/option]{refsection = chapter}
% \end{latexexample}
%
% å¦‚æžœå¼€å¯äº†è‰ç¨¿æ¨¡å¼ï¼Œæ‚¨å¯èƒ½ä¼šæ³¨æ„åˆ°éƒ¨åˆ†æ¡ç›®å­˜åœ¨è¶…å®½çš„é—®é¢˜ã€‚å¯¹æ­¤ï¼Œ
% éœ€è¦å°† \pkg{biblatex-gb7714-2015} å®åŒ…æ‰‹åŠ¨æ›´æ–°è‡³ 2022-04-16 ä»¥åŽçš„ç‰ˆæœ¬ã€‚
% æ­¤å¤–ï¼Œç”±äºŽ \TeX{} é¢„ç½®çš„æ–­è¯ä½ç½®æ˜¯æœ‰é™çš„ï¼Œä¸èƒ½è¦†ç›–å­¦æœ¯ä¸Šä½¿ç”¨çš„å¤æ‚è¯æ±‡ï¼Œ
% æ‚¨ä¹Ÿå¯ä»¥è‡ªè¡Œåœ¨ \file{.bib} æ–‡ä»¶ä¸­è®¾ç½®æ–­è¡Œç‚¹ï¼Œä¾‹å¦‚å¯ä»¥å°† graphene
% ä¸€è¯ä¿®æ”¹ä¸º graph|\-|eneã€‚
%
% \subsubsection{æ­£æ–‡å¼•ç”¨}
%
% \begin{function}{\cite}
%   \begin{syntax}
%     \tn{cite}\marg{æ–‡çŒ®}
%     \tn{cite}\oarg{é¡µç&nbsp;}\marg{æ–‡çŒ®}
%   \end{syntax}
% åœ¨æ­£æ–‡ä¸­å¼•ç”¨å‚è€ƒæ–‡çŒ®ã€‚
% \end{function}
%
% å¼•ç”¨å‘½ä»¤ \tn{cite} å«æœ‰å¤šä¸ªå˜ä½“ï¼Œä»¥ä¾¿ä½¿ç”¨æ–‡çŒ®æ¡ç›®ä¸­ä¸åŒçš„ä¿¡æ¯åŸŸã€‚
% åœ¨ä¸¤ç§å‚è€ƒæ–‡çŒ®æ&nbsp;·å¼ä¸‹ï¼Œè¿™äº›å‘½ä»¤çš„è¡Œä¸ºå…·ä½“å­˜åœ¨ä¸€äº›å·®å¼‚ï¼Œ
% è¯¦è§è¡¨ \ref{tab:numeric-style} å’Œè¡¨ \ref{tab:author-year-style}ã€‚
%
% \begin{table}[ht]
%   \centering
%   \begin{talltblr} [
%       caption = {é¡ºåºç¼–ç&nbsp;åˆ¶ä¸‹çš„å¼•ç”¨æ&nbsp;·å¼},
%       label   = {tab:numeric-style} ]
%     { colspec = {cll} }
%     \toprule
%       å¼•ç”¨æ–¹å¼ &amp; å‘½ä»¤               &amp;  æŽ’ç‰ˆæ•ˆæžœ                  \\
%     \midrule
%       å•ç¯‡æ–‡çŒ® &amp; \tn{cite}          &amp; ä¸Šæ&nbsp;‡å¯è®¾ç½®é¡µç&nbsp;             \\
%       å•ç¯‡æ–‡çŒ® &amp; \tn{parencite}     &amp; éžä¸Šæ&nbsp;‡å¯è®¾ç½®é¡µç&nbsp;           \\
%       å¤šç¯‡æ–‡çŒ® &amp; \tn{cite}          &amp; ä¸Šæ&nbsp;‡ï¼Œé€—å·éš”å¼€æˆ–çŸ­æ¨ªçº¿è¿žæŽ¥ \\
%       æ&nbsp;‡æ³¨é¡µç&nbsp; &amp; \tn{pagescite}     &amp; ä¸Šæ&nbsp;‡åŠ&nbsp;è‡ªåŠ¨é¡µç&nbsp;             \\
%       æ&nbsp;‡æ³¨ä½œè€… &amp; \tn{textcite}      &amp; ä½œè€…ä¸ºä¸»è¯­åŠ&nbsp;éžä¸Šæ&nbsp;‡ç¼–å·     \\
%       æ&nbsp;‡æ³¨ä½œè€… &amp; \tn{authornumcite} &amp; ä½œè€…ä¸ºä¸»è¯­åŠ&nbsp;ä¸Šæ&nbsp;‡ç¼–å·       \\
%       å®Œæ•´è„šæ³¨ &amp; \tn{footfullcite}  &amp; è„šæ³¨æ–¹å¼                   \\
%     \bottomrule
%   \end{talltblr}
% \end{table}
%
% \begin{table}[ht]
%   \centering
%   \begin{talltblr} [
%       caption = {è‘—è€…-å‡ºç‰ˆå¹´åˆ¶ä¸‹çš„å¼•ç”¨æ&nbsp;·å¼},
%       label   = {tab:author-year-style},
%       note{a} = {åœ¨æ­¤æ&nbsp;·å¼ä¸‹ \tn{parencite} æ•ˆæžœç­‰åŒäºŽ \tn{cite}ã€‚} ]
%     { colspec = {cll} }
%     \toprule
%       å¼•ç”¨æ–¹å¼       &amp; å‘½ä»¤               &amp; æŽ’ç‰ˆæ•ˆæžœ                       \\
%     \midrule
%       å•ç¯‡æ–‡çŒ®       &amp; \tn{cite} \TA      &amp; ä½œè€…åŠ&nbsp;å¹´ä»½ç”¨æ‹¬å·åŒ…å›´å¯è®¾ç½®é¡µç&nbsp; \\
%       å¤šç¯‡æ–‡çŒ®       &amp; \tn{cite}          &amp; åˆ†å·éš”å¼€                       \\
%       æ&nbsp;‡æ³¨é¡µç&nbsp;       &amp; \tn{pagescite}     &amp; ä½œè€…åŠ&nbsp;å¹´ä»½ç”¨æ‹¬å·åŒ…å›´è‡ªåŠ¨é¡µç&nbsp;   \\
%       æ&nbsp;‡æ³¨å¹´ä»½       &amp; \tn{yearcite}      &amp; ç”¨æ‹¬å·åŒ…å›´çš„å¹´ä»½               \\
%       æ&nbsp;‡æ³¨å¹´ä»½ã€é¡µç&nbsp; &amp; \tn{yearpagescite} &amp; æä¾›å¹´ä»½ç”¨æ‹¬å·åŒ…å›´è‡ªåŠ¨é¡µç&nbsp;     \\
%       æ&nbsp;‡æ³¨ä½œè€…       &amp; \tn{textcite}      &amp; ä½œè€…ä¸ºä¸»è¯­åŠ&nbsp;åŠ&nbsp;æ‹¬å·åŒ…å›´å¹´ä»½     \\
%       å®Œæ•´è„šæ³¨       &amp; \tn{footfullcite}  &amp; è„šæ³¨æ–¹å¼                       \\
%     \bottomrule
%   \end{talltblr}
% \end{table}
%
%
% \subsubsection{æ–‡çŒ®ç®¡ç†}
%
% å‚è€ƒæ–‡çŒ®æ•°æ®æºç†åº”æ˜¯é€šè¿‡æ–‡çŒ®ç®¡ç†è½¯ä»¶å¯¼å‡ºçš„ï¼Œè€Œä¸æ˜¯é€æ¡æ‰‹åŠ¨å¡«å†™çš„ã€‚
%
% \subparagraph{ä½¿ç”¨ EndNote}
%
% å—äº¬å¤§å­¦ä¿¡æ¯åŒ–å»ºè®¾ç®¡ç†æœåŠ¡ä¸­å¿ƒå·²è´­ä¹°
% \href{https://itsc.nju.edu.cn/EndNote/list.htm}{EndNote}
% ä¾›å…¨æ&nbsp;¡å¸ˆç”Ÿå…è´¹ä½¿ç”¨ï¼Œæœ€æ–°ç‰ˆä¸º EndNote 20ã€‚
%
% \subparagraph{ä½¿ç”¨ JabRef}
%
% \href{https://www.jabref.org/}{JabRef} æ˜¯ä¸€æ¬¾å¼€æºã€è·¨å¹³å°çš„æ–‡çŒ®ç®¡ç†è½¯ä»¶ã€‚
% JabRef æä¾›äº†å¯¹ \hologo{BibTeX} å’Œ \pkg{biblatex} çš„åŽŸç”Ÿæ”¯æŒï¼Œ
% èƒ½å¤Ÿç›´æŽ¥ç®¡ç† \file{.bib} æ–‡ä»¶ï¼Œ è¿˜å¯ä»¥å‘ TeXstudio ç­‰å¤–éƒ¨è½¯ä»¶æŽ¨é€å¼•ç”¨å‘½ä»¤ã€‚
%
% \subparagraph{ä½¿ç”¨ Zotero}
%
% \href{https://www.zotero.org/}{Zotero} ä¹Ÿæ˜¯ä¸€æ¬¾å¼€æºã€è·¨å¹³å°çš„æ–‡çŒ®ç®¡ç†è½¯ä»¶ã€‚
% Zotero æ›´ä¸ºé€šç”¨ï¼Œå…¶åŠŸèƒ½å¯ä»¥é€šè¿‡ \href{https://github.com/l0o0/jasminum}{Jasminum}ã€
% \href{https://github.com/retorquere/zotero-better-bibtex}{Better BibTeX}ã€
% \href{https://github.com/bwiernik/zotero-shortdoi}{DOI Manager} ç­‰ç¬¬ä¸‰æ–¹æ’ä»¶ï¼Œ
% ä»¥åŠ Zotero Connector æµè§ˆå™¨æ’ä»¶è¿›è¡Œå¢žå¼ºã€‚
%
%
% \subsection{ç‰¹æ®Šé¡µé¢}
%
% æœ¬æ¨¡æ¿ä¹Ÿé¢„å®šä¹‰äº†ä¸€ç³»åˆ—ç”¨äºŽç”Ÿæˆæ‰€éœ€çš„ç‰¹æ®Šé¡µé¢çš„å‘½ä»¤ä¸ŽçŽ¯å¢ƒã€‚
%
%
% \subsubsection{å°é¢}
%
% \begin{function}{\maketitle}
% ç”Ÿæˆå°é¢ã€‚
% \end{function}
%
% æœ¬ç§‘ç”Ÿæ¨¡æ¿ä»…ä¼šç”Ÿæˆä¸­æ–‡å°é¢ï¼›ç&nbsp;”ç©¶ç”Ÿæ¨¡æ¿ä¼šç”Ÿæˆä¸­è‹±æ–‡å°é¢ã€‚
% å¦‚æžœé€‰æ‹©äº† \opt{nl-cover}ï¼Œ\emph{ä»…ä»…}ä¼šç”Ÿæˆç&nbsp;”ç©¶ç”Ÿçš„å›½å®¶å›¾ä¹¦é¦†å°é¢ã€‚
% å¦‚æžœé€‰æ‹©äº† \opt{decl-page}ï¼Œä¼šåœ¨å°é¢åŽç”Ÿæˆæœ¬ç§‘ç”Ÿçš„è¯šä¿¡æ‰¿è¯ºä¹¦æˆ–ç&nbsp;”ç©¶ç”Ÿçš„
% åŽŸåˆ›æ€§å£°æ˜Žã€‚åœ¨å¯ç”¨è‰ç¨¿æ¨¡å¼åŽå°é¢ç»˜åˆ¶å°†è¢«ç¦ç”¨ã€‚
%
% \paragraph{å°é¢å›¾ç‰‡}
%
% \begin{function}[added=2021-12-23,updated=2022-08-06]{
%   image/nju-emblem,image/nju-name}
%   \begin{syntax}
%     \OPT{nju-emblem} = \Arg{æ–‡ä»¶}
%     \OPT{nju-name}   = \Arg{æ–‡ä»¶}
%   \end{syntax}
% æ&nbsp;¡åã€æ&nbsp;¡å¾½å›¾ç‰‡æ–‡ä»¶è·¯å¾„ã€‚
% \end{function}
%
% é€šè¿‡ä»¥ä¸Šé€‰é¡¹å¯ä»¥ä½¿ç”¨å¤–ç½®çš„æ&nbsp;¡å¾½å’Œæ&nbsp;¡åå›¾ç‰‡ï¼Œä¸¤ä¸ªé€‰é¡¹\emph{ä»»ä¸€ç•™ç©º}åˆ™ä¸ä¼šç”Ÿæ•ˆã€‚
% æœ¬æ¨¡æ¿å°é¢ä¸­æ&nbsp;¡å¾½åŠæ&nbsp;¡åçš„ç»˜åˆ¶é»˜è®¤ä¾èµ– \pkg{njuvisual} å®åŒ…æä¾›çš„ \tikzlogo
% çŸ¢é‡æ›²çº¿ï¼Œè€—æ—¶è¾ƒé•¿ï¼Œåœ¨æ›¿æ¢ä¸ºå¤–ç½®å›¾ç‰‡åŽå¯èŠ‚çœçº¦1ç§’çš„ç¼–è¯‘æ—¶é•¿ã€‚
%
%
% \subsubsection{æ‘˜è¦é¡µ}
% \changes{v0.11}{2021/10/01}{ç®€åŒ–äº†æ‘˜è¦çš„ç¼–å†™æ–¹å¼ã€‚}
%
% \DescribeEnv{abstract}
% \DescribeEnv{abstract*}
% æ‘˜è¦ã€‚å¸¦æ˜Ÿå·çš„çŽ¯å¢ƒä¼šç”Ÿæˆè‹±æ–‡æ‘˜è¦ã€‚
%
% \begin{latexexample}[emph={[1]abstract,abstract*}]
%   \begin{abstract}
%       æˆ‘çš„ä¸­æ–‡æ‘˜è¦
%   \end{abstract}
%
%   \begin{abstract*}
%       Abstract in English
%   \end{abstract*}
% \end{latexexample}
%
% \begin{function}[added=2022-02-04,updated=2022-07-31]{abstract/toc-entry}
%   \begin{syntax}
%     \OPT{toc-entry} = &lt;\TTF&gt;
%   \end{syntax}
% æ˜¯å¦å°†æ‘˜è¦æ¡ç›®æ’å…¥ç›®å½•ï¼Œé»˜è®¤å¼€å¯ã€‚
% å…³é—­æ­¤é€‰é¡¹åŽæ‘˜è¦é¡µå°†ä¸ä¼šå‡ºçŽ°åœ¨ç›®å½•ä¸­ï¼Œä»…ä¿ç•™å…¶ PDF ä¹¦ç­¾ã€‚
% \end{function}
%
% \begin{function}[added=2023-04-23]{abstract/underline}
%   \begin{syntax}
%     \OPT{underline} = &lt;\TTF&gt;
%   \end{syntax}
% é€‰æ‹©ç&nbsp;”ç©¶ç”Ÿè‹±æ–‡æ‘˜è¦æ¡ç›®å†…å®¹æ˜¯å¦éœ€è¦ä¸‹åˆ’çº¿ã€‚é»˜è®¤æ·»åŠ&nbsp;ã€‚
% \end{function}
%
% \begin{function}[added=2022-03-26,updated=2022-07-31]{abstract/title-style}
%   \begin{syntax}
%     \OPT{title-style} = &lt;(strict)|centered|natural&gt;
%   \end{syntax}
% é€‰æ‹©ç&nbsp;”ç©¶ç”Ÿæ‘˜è¦æ&nbsp;‡é¢˜æ&nbsp;·å¼ã€‚
% é»˜è®¤ä¸ºä¸¥æ&nbsp;¼æ¨¡å¼ï¼ˆ\opt{strict}ï¼‰ï¼Œå³å®Œå…¨æ¨¡ä»¿ææ–™åŒ…è¦æ±‚ã€‚
% \end{function}
%
% ææ–™åŒ…ä¸­çš„ Word ç©ºç™½æ¨¡æ¿ä»…æœ‰ä¸¤è¡Œç©ºç™½ä¸‹åˆ’çº¿ã€‚
% æ&nbsp;¹æ®å¡«å†™ä¹&nbsp;æƒ¯çš„ä¸åŒï¼Œæ¨¡æ¿é¢„ç½®äº†ä¸‰ç§æ&nbsp;·å¼ï¼š
% \begin{itemize}
%   \item \opt{strict}ï¼Œåœ¨ä¸¤è¡Œç©ºç™½ä¸‹åˆ’çº¿ä¸Šå·¦å¯¹é½å¡«å†™æ&nbsp;‡é¢˜ã€‚
%         å¦‚æžœè¯¥æ&nbsp;‡é¢˜ä¸è¶³ä¸€è¡Œï¼Œåˆ™ç¬¬äºŒè¡Œä¸‹åˆ’çº¿ç•™ç©ºï¼›
%         å¦‚æžœé•¿åº¦è¶…å‡ºä¸¤è¡Œï¼Œåˆ™å‘åŽå»¶ä¼¸å¹¶æŠ›å‡ºä¸€ä¸ªè­¦å‘Šä¿¡æ¯ã€‚
%   \item \opt{centered}ï¼Œå°†ä¸¥æ&nbsp;¼æ¨¡å¼çš„å·¦å¯¹é½æ”¹ä¸ºå±…ä¸­ã€‚
%   \item \opt{natural}ï¼Œä»…å±…ä¸­æ&nbsp;‡é¢˜ï¼Œä¸åšè¡Œæ•°æ£€æŸ¥ã€‚
%         æœ¬æ¨¡å¼æ›´é€‚åˆè¾ƒçŸ­çš„é¢˜ç›®ã€‚
% \end{itemize}
%
% \subsubsection{å‰è¨€é¡µ}
%
% \DescribeEnv{preface}
% ä½¿ç”¨ \env{preface} çŽ¯å¢ƒå®šä¹‰ã€‚
%
% \begin{latexexample}[emph={[1]preface,flushright}]
%   \begin{preface}
%       æˆ‘çš„å‰è¨€
%       \vspace{1cm}
%       \begin{flushright}
%       æˆ‘çš„åå­—\\
%       æ—¶é—´åœ°ç‚¹
%       \end{flushright}
%   \end{preface}
% \end{latexexample}
%
%
% \subsubsection{ç›®å½•é¡µ}
%
% \begin{function}{\tableofcontents,\listoffigures,\listoftables}
% åˆ†åˆ«ç”Ÿæˆç›®å½•ã€å›¾ç‰‡ç›®å½•å’Œè¡¨æ&nbsp;¼ç›®å½•ã€‚
% \end{function}
%
% \begin{function}[added=2022-08-08]{tableofcontents/dotline}
%   \begin{syntax}
%     \OPT{dotline} = &lt;chapter|(section)&gt;
%   \end{syntax}
% ç›®å½•ä¸­çš„å¼•å¯¼çº¿è®¾ç½®ã€‚é€‰æ‹© \opt{chapter} ä¼šä¸ºç«&nbsp;æ&nbsp;‡é¢˜åŽæ·»åŠ&nbsp;å¼•å¯¼çº¿ã€‚
% \end{function}
%
% \begin{function}[added=2022-02-04,updated=2022-07-31]{
%   tableofcontents/toc-entry,listoffigures/toc-entry,
%   listoftables/toc-entry}
%   \begin{syntax}
%     \OPT{toc-entry} = &lt;\TTF&gt;
%   \end{syntax}
% æ˜¯å¦åœ¨ç›®å½•ä¸­æ˜¾ç¤ºç›®å½•è‡ªèº«çš„æ¡ç›®ï¼Œé»˜è®¤å¼€å¯ã€‚å…³é—­åŽç›®å½•ã€
% æ’å›¾ç›®å½•å’Œè¡¨æ&nbsp;¼ç›®å½•å°†ä¸ä¼šå‡ºçŽ°åœ¨ç›®å½•ä¸­ï¼Œä»…ä¿ç•™å…¶ PDF ä¹¦ç­¾ã€‚
% æ³¨æ„ï¼Œè™½ç„¶åç§°ä¸€æ&nbsp;·ï¼Œä½†è¿™å…¶å®žæ˜¯å¯¹åº”ä¸‰ç§ç›®å½•çš„ä¸‰ä¸ªé€‰é¡¹ã€‚
% \end{function}
%
% å¦‚æžœä»…éœ€è¦ç¦ç”¨æ’å›¾ç›®å½•å’Œè¡¨æ&nbsp;¼ç›®å½•çš„æ¡ç›®ï¼Œå¯ä»¥è¿™æ&nbsp;·è®¾ç½®
% \begin{latexexample}[moretexcs={\njusetup},emph={[3]toc-entry},
%   emph={[2]tableofcontents,listoffigures,listoftables}]
%   \njusetup{
%       tableofcontents/toc-entry = true, % ä»…ä½œå±•ç¤ºï¼Œæ—&nbsp;éœ€æ‰‹åŠ¨å¯ç”¨
%       listoffigures/toc-entry   = false,
%       listoftables/toc-entry    = false
%   }
% \end{latexexample}
%
% ç›®å½•é¡µçš„æ&nbsp;‡é¢˜åç§°ä¸€èˆ¬æ—&nbsp;éœ€ä¿®æ”¹\footnote{å°½ç®¡æ&nbsp;¹æ®ã€Šå­¦ä½è®ºæ–‡ç¼–å†™è§„åˆ™ã€‹å›½å®¶æ&nbsp;‡å‡†
% \cite{gb-t-7713.1-2006}ï¼Œå­¦ä½è®ºæ–‡ä¸­ç†åº”ä½¿ç”¨â€œç›®æ¬¡â€è¿™ä¸€åç§°æ¥æŒ‡ä»£ç¯‡ç›®çš„åˆ—è¡¨ï¼Œ
% æˆ‘ä»¬ä»ç„¶å»ºè®®éµä»Žå­¦æ&nbsp;¡ç»™å‡ºçš„èŒƒä¾‹ã€‚}ã€‚å¦‚æœ‰éœ€æ±‚ï¼Œè¯·å‚è€ƒ \ref{subsubsec:edit-text} èŠ‚ã€‚
%
% \subsubsection{ç¬¦å·è¡¨}
%
% \DescribeEnv{notation}
% \DescribeEnv{notation*}
% ç¬¦å·è¡¨ï¼Œæˆ–è€…ç§°ä¸ºæœ¯è¯­è¡¨ã€ç¼©ç•¥è¯å¯¹ç…§è¡¨ã€‚å¸¦æœ‰æ˜Ÿå·çš„ç¬¦å·è¡¨çŽ¯å¢ƒä¸ä¼šæ’å…¥ç›®å½•ã€‚
% \begin{syntax}
%   \tn{begin}\{notation\}\oarg{è¯´æ˜Žå®½åº¦}\oarg{ç¬¦å·å®½åº¦}
%   \quad\tn{item}\oarg{ç¬¦å·} \meta{è¯´æ˜Ž}
%   \tn{end}\{notation\}
% \end{syntax}
%
%
% \subsubsection{è‡´è°¢é¡µ}
%
% \DescribeEnv{acknowledgement}
% ä½¿ç”¨ \env{acknowledgement} çŽ¯å¢ƒç”Ÿæˆè‡´è°¢é¡µï¼Œé™„å¸¦æœ‰ç›¸åº”ç›®å½•æ¡ç›®ã€‚
% åœ¨å¼€å¯ç›²å®¡æ¨¡å¼æ—¶ï¼Œä»…æ˜¾ç¤ºè¯¥ç›®å½•æ¡ç›®ã€‚
%
% \begin{latexexample}[emph={[1]acknowledgement}]
%   \begin{acknowledgement}
%       æ„Ÿè°¢NJU LUG
%   \end{acknowledgement}
% \end{latexexample}
%
%
% \subsubsection{é™„å½•é¡µ}
%
% \begin{function}{\appendix}
% é™„å½•æ”¾åœ¨æœ¬å‘½ä»¤åŽï¼Œä»¥è‹±æ–‡å­—æ¯è¿›è¡Œç¼–å·ï¼Œç¼–å†™æ–¹å¼åŒæ­£æ–‡ã€‚
% \end{function}
%
%
% \subsubsection{æˆæžœåˆ—è¡¨}
%
% \begin{function}[added=2021-09-29,updated=2021-12-20]{\njupaperlist}
%   \begin{syntax}
%     \tn{njupaperlist}\oarg{æ&nbsp;‡é¢˜}\marg{æ–‡çŒ®}
%   \end{syntax}
% æˆæžœåˆ—è¡¨ï¼Œç”Ÿæˆä¸€ä¸ªåˆ—ä¸¾æ–‡çŒ®æ¡ç›®çš„æ—&nbsp;ç¼–å·èŠ‚ã€‚å¯é€‰å‚æ•°ä¸ºæ&nbsp;‡é¢˜ï¼Œ
% é»˜è®¤ä¸ºâ€œå‘è¡¨æ–‡ç«&nbsp;ç›®å½•â€ã€‚\Arg{æ–‡çŒ®} çš„å¡«å†™æ–¹å¼åŒ \tn{cite}ï¼Œ
% å¤šä¸ªæ–‡çŒ®éœ€è¦ä½¿ç”¨è‹±æ–‡åŠè§’é€—å·éš”å¼€ã€‚
% \end{function}
%
% ä¸€ä¸ªç®€å•çš„ä¾‹å­å¦‚ä¸‹æ‰€ç¤ºï¼š
% \begin{latexexample}[moretexcs={\njuchapter,\njupaperlist}]
%   \njuchapter{æ”»è¯»åšå£«å­¦ä½æœŸé—´ç&nbsp;”ç©¶æˆæžœ}
%   \njupaperlist[æ”»è¯»åšå£«å­¦ä½æœŸé—´å‘è¡¨çš„å­¦æœ¯è®ºæ–‡]{
%     Nemec1997-209-214,Chiani1998-2998-3008,Chiani1998a}
% \end{latexexample}
%
% ä¸ºäº†ä¾¿äºŽè¯†åˆ«ï¼Œæˆæžœåˆ—è¡¨ä¸­é»˜è®¤å¯¹å‘è¡¨å¹´ä»½è¿›è¡ŒåŠ&nbsp;ç²—å¤„ç†ã€‚è€Œå¯¹ä½œè€…å§“åçš„å¤„ç†è¾ƒä¸ºå¤æ‚ã€‚
% åˆ©ç”¨ \pkg{biblatex} çš„æ•°æ®æ³¨è§£æœºåˆ¶å¯ä»¥å®žçŽ°å¯¹ç‰¹å®šæ–‡çŒ®ä¿¡æ¯çš„æ&nbsp;·å¼ä¿®æ”¹
% \footnote{\url{https://blog.csdn.net/xenonhu/article/details/120853247}}ï¼Œ
% åœ¨æ­¤å¯ä»¥ç”¨æ¥å®žçŽ°æŒ‡å®šä½œè€…å§“åçš„çªå‡ºã€‚ç»è¿‡æ³¨è§£åŽçš„ä¸€åˆ™å‚è€ƒæ–‡çŒ®æ¡ç›®å¦‚ä¸‹æ‰€ç¤ºï¼š
% \begin{latexexample}[emph={[1]@inproceedings},emph={[2]author}]
%   @inproceedings{Nemec1997-209-214,
%     title = {Force control of redundant robots},
%     author = {B Nemec and Zhao, Mou Mou},
%     author+an = {2=thesisauthor},
%     booktitle = {Processings of Symposium on Robot Control},
%     shortbooktitle = {(PSRC)},
%     pages = {209-214},
%     country = {Nantes France},
%     year = {1997}
%   }
% \end{latexexample}
% å…¶ä¸­ |author+an| æä¾›äº†æ³¨è§£çš„æ&nbsp;‡è®°ï¼Œæ&nbsp;¼å¼ä¸º \meta{åºå·}|=|\meta{æ&nbsp;‡ç­¾}ï¼Œ
% ä»¥ä¸Šæ¡ç›®ä¸­å³æ˜¯å°†ç¬¬äºŒåä½œè€…åŠ&nbsp;å…¥äº†æŒ‡å®šè®ºæ–‡ä½œè€…çš„æ³¨è§£ã€‚\tn{njupaperlist}
% ä¼šè¯†åˆ« |thesisauthor| æ&nbsp;‡ç­¾ï¼Œä¸ºå…¶æŒ‡ä»£çš„ä½œè€…å§“åè¿›è¡ŒåŠ&nbsp;ç²—ä¸‹åˆ’çº¿å¤„ç†ã€‚
%
% é™¤æ‰‹åŠ¨è¿›è¡Œæ&nbsp;‡è®°ä»¥å¤–ï¼Œä»¥ä¸‹ä¹Ÿæä¾›ä¸€ç§è‡ªåŠ¨åŒ–å¤„ç†åŠžæ³•ã€‚
% ä¸‹è½½ \href{https://github.com/hushidong/biblatex-map}{bibmap}
% å…¨éƒ¨æ–‡ä»¶åŽï¼Œä¿®æ”¹ä¸»ç›®å½•ä¸‹çš„ \file{bibmapaddauthoran.py} ä¸­ |fieldsource|
% ä¸ºéœ€è¦åŒ¹é…çš„å§“åï¼Œå°†éœ€è¦è¿›è¡Œæ&nbsp;‡è®°çš„ \file{.bib} æ–‡ä»¶æ‹·è´è‡³æœ¬ç›®å½•
% ï¼ˆæ­¤å¤„ä½¿ç”¨ \file{test.bib} è¿›è¡Œç¤ºèŒƒï¼‰ï¼Œè¿è¡Œä»¥ä¸‹å‘½ä»¤ç”Ÿæˆçš„å‚è€ƒæ–‡çŒ®æ•°æ®æº
% å³å¯è¢«æˆæžœåˆ—è¡¨è¯†åˆ«åŠ&nbsp;ç²—ã€‚
%
% \begin{shellexample}[morekeywords={python},deletekeywords={test}]
%   python bibmap.py test.bib -m bibmapaddauthoran.py
% \end{shellexample}
%
%
% \subsection{é¢å¤–å®šåˆ¶}
%
% åœ¨ç&nbsp;”ç©¶ç”Ÿé™¢æ¾æ•£çš„è§„å®šä¸‹ï¼Œæœ¬æ¨¡æ¿ä»…èƒ½æä¾›ä¸€ä¸ªå¤§ä½“é€‚ç”¨çš„æ¡†æž¶ï¼Œ
% åŠ¿å¿…éœ€è¦ä¸ºç”¨æˆ·ä¿®æ”¹ç•™å‡ºç©ºé—´ã€‚è¿™ä¸€èŠ‚å°†æä¾›ä¸€äº›å®šåˆ¶æ–¹æ³•ã€‚
%
% \subsubsection{å›ºå®šæ–‡æœ¬}
% \label{subsubsec:edit-text}
%
% \begin{function}{\njusetname,\njusetname*,\njusettext,\njusettext*}
%   \begin{syntax}
%     \tn{njusetname}\marg{åç§°}\oarg{å˜ä½“}\marg{å†…å®¹}
%     \tn{njusetname*}\marg{åç§°}\oarg{å˜ä½“}\marg{å†…å®¹}
%     \tn{njusettext}\marg{åç§°}\oarg{å˜ä½“}\marg{å†…å®¹}
%     \tn{njusettext*}\marg{åç§°}\oarg{å˜ä½“}\marg{å†…å®¹}
%   \end{syntax}
% ä¿®æ”¹å›ºå®šæ–‡æœ¬å†…å®¹ï¼Œå¸¦æ˜Ÿå·çš„å‘½ä»¤è¡¨ç¤ºä¿®æ”¹å¯¹åº”çš„è‹±æ–‡å­—æ®µã€‚
% åç§°å¯¹åº”çš„é»˜è®¤å†…å®¹å¯ä»¥å‚è§ \ref{subsubsec:constant-name} ä¸Ž
% \ref{subsubsec:constant-text} èŠ‚ã€‚
% \end{function}
%
% è­¬å¦‚ï¼Œä¿®æ”¹ç›®å½•æ&nbsp;‡é¢˜åç§°ï¼Œç¤ºä¾‹å¦‚ä¸‹ï¼š

% \begin{latexexample}[moretexcs={\njusetname}]
%   \njusetname{listoffigures}{æ’å›¾æ¸…å•}
%   \njusetname{listoftables}{è¡¨æ&nbsp;¼æ¸…å•}
% \end{latexexample}
%
% å°†è‹±æ–‡æ‘˜è¦é¡µçš„å°æ&nbsp;‡é¢˜ä¿®æ”¹ä¸ºä»…é¦–å­—æ¯å¤§å†™çš„æ&nbsp;·å¼ï¼Œç¤ºä¾‹å¦‚ä¸‹ï¼š
%
% \begin{latexexample}[moretexcs={\njusetname*}]
%   \njusetname*{abstract}[b]{Abstract}
% \end{latexexample}
%
% \subsubsection{é•¿åº¦å€¼}
% \label{subsubsec:modify-length}
%
% \begin{function}{\njusetlength,\njusetlength*}
%   \begin{syntax}
%     \tn{njusetlength}\marg{åç§°}\marg{é•¿åº¦}
%     \tn{njusetlength*}\marg{åç§°}\marg{é•¿åº¦}
%   \end{syntax}
% ä¿®æ”¹é•¿åº¦å€¼ï¼Œé»˜è®¤ä¸ºä¿®æ”¹å›ºå®šé•¿åº¦ï¼ˆ|dim| ç±»åž‹ï¼‰ï¼Œ
% å¸¦æ˜Ÿå·çš„å‘½ä»¤è¡¨ç¤ºä¿®æ”¹å¼¹æ€§é•¿åº¦ï¼ˆ|skip| ç±»åž‹ï¼Œç›®å‰æœªæ¶‰åŠï¼‰ã€‚
% é»˜è®¤é•¿åº¦å€¼å¯ä»¥å‚è§ \ref{subsubsec:constant-length} èŠ‚ã€‚
% \end{function}
%
% è­¬å¦‚ï¼Œå°†å°é¢é¡µå¡«å†™ä¸ªäººä¿¡æ¯çš„æ¨ªçº¿åŠ&nbsp;é•¿ï¼Œç¤ºä¾‹å¦‚ä¸‹ï¼š
%
% \begin{latexexample}[moretexcs={\njusetlength}]
%   \njusetlength{crulewd}{330pt}
% \end{latexexample}
%
% \subsubsection{æ&nbsp;·å¼}
% \label{subsubsec:modify-format}
%
% \begin{function}{\njusetformat}
%   \begin{syntax}
%     \tn{njusetformat}\marg{åç§°}\marg{æ&nbsp;·å¼}
%   \end{syntax}
% ä¿®æ”¹æ&nbsp;·å¼ã€‚æ‰€æœ‰å¯ä»¥ä¿®æ”¹çš„é»˜è®¤æ&nbsp;·å¼å‚è§ \ref{subsubsec:constant-format} èŠ‚ã€‚
% \end{function}
%
% è­¬å¦‚ï¼Œå°†ç«&nbsp;æ&nbsp;‡é¢˜å­—å·åŠ&nbsp;å¤§åˆ°å°äºŒå·ï¼Œç¤ºä¾‹å¦‚ä¸‹ï¼š
%
% \begin{latexexample}[moretexcs={\njusetformat,\zihao}]
%   \njusetformat{chapter}{\zihao{-2}\sffamily\centering}
% \end{latexexample}
%
% ä¿®æ”¹è¡¨æ&nbsp;¼å†…å®¹çš„å­—ä½“ï¼š
%
% \begin{latexexample}[moretexcs={\njusetformat,\zihao,\bfseries}]
%   \njusetformat{tabular}{\zihao{-4}\bfseries}
% \end{latexexample}
%
%
% \subsection{è§†è§‰è¯†åˆ«ç³»ç»Ÿ}
%
% è§†è§‰è¯†åˆ«ç³»ç»Ÿ \pkg{njuvisual} çŽ°å·²è¢«åˆ†ç¦»ä¸ºç‹¬ç«‹å®åŒ…\cite{njuvisual}ï¼Œ
% åŸºæœ¬ä½¿ç”¨æ–¹æ³•ä¸¾ä¾‹å¦‚ä¸‹ï¼š
% \begin{latexexample}[moretexcs={\njuemblem,\njuname,\njuname*}]
%   \njuemblem{!}{3cm}                           % ç”Ÿæˆé«˜ 3cm çš„ç´«è‰²æ&nbsp;¡å¾½
%   \njuname{4cm}{!}                             % ç”Ÿæˆå®½ 4cm çš„ç´«è‰²ä¸­æ–‡æ&nbsp;¡å
%   \njuname*{4cm}{!}                            % ç”Ÿæˆå®½ 4cm çš„ç´«è‰²è‹±æ–‡æ&nbsp;¡å
%   \njuemblem[black]{!}{3cm}                    % é»‘è‰²çš„æ&nbsp;¡å¾½
%   \njuemblem[department=dii]{!}{4cm}           % ç´«è‰²åŒ¡é™¢å¾½æ&nbsp;‡
%   \njuemblem[department=cs,color=blue]{!}{3cm} % çº¯è“è‰²è®¡ç§‘å¾½æ&nbsp;‡
% \end{latexexample}
%
% æœ¬å®åŒ…çš„è¯¦ç»†ä½¿ç”¨æ–¹æ³•è¯·å‚è€ƒå…¶ä½¿ç”¨æ‰‹å†Œã€‚
%
%
% \section{å®åŒ…ä¾èµ–}
%
% åœ¨ä»»ä½•æƒ…å†µä¸‹ï¼Œæœ¬æ¨¡æ¿éƒ½ä¼š\emph{æ˜¾å¼}è°ƒç”¨ä»¥ä¸‹å®åŒ…ï¼ˆæˆ–æ–‡æ¡£ç±»ï¼‰ï¼š
% \begin{itemize}
%   \item \pkg{xtemplate} å’Œ \pkg{l3keys2e}ï¼Œç”¨äºŽæ‰©å±• \LaTeX3 ç¼–ç¨‹çŽ¯å¢ƒã€‚
%         å®ƒä»¬å±žäºŽ \pkg{l3packages} å®é›†ã€‚
%   \item \cls{ctexbook}ï¼Œæä¾›ä¸­æ–‡æŽ’ç‰ˆçš„é€šç”¨æ¡†æž¶ã€‚å±žäºŽ C\TeX
%         å®é›† \cite{CTeX}ã€‚
%   \item \pkg{amsmath}ï¼Œå¯¹ \LaTeX{} çš„æ•°å­¦æŽ’ç‰ˆåŠŸèƒ½è¿›è¡Œäº†å…¨é¢æ‰©å±•ã€‚
%         å±žäºŽ \hologo{AmSLaTeX} å¥—ä»¶ã€‚
%   \item \pkg{geometry}ï¼Œç”¨äºŽè°ƒæ•´é¡µé¢å°ºå¯¸ã€‚
%   \item \pkg{setspace}ï¼Œè°ƒæ•´è¡Œè·ã€‚
%   \item \pkg{fancyhdr}ï¼Œå¤„ç†é¡µçœ‰é¡µè„šã€‚
%   \item \pkg{graphicx}ï¼Œæä¾›å›¾å½¢æ’å…¥çš„æŽ¥å£ã€‚
%   \item \pkg{booktabs}ï¼Œç»˜åˆ¶ä¸‰çº¿è¡¨ã€‚
%   \item \pkg{caption}ï¼Œç”¨äºŽè®¾ç½®é¢˜æ³¨ã€‚
%   \item \pkg{hyperref}ï¼Œæä¾›äº¤å‰å¼•ç”¨ã€è¶…é“¾æŽ¥ã€ç”µå­ä¹¦ç­¾ç­‰åŠŸèƒ½ã€‚
% \end{itemize}
%
% ä»¥ä¸‹å®åŒ…å¯ä»¥åœ¨æ–‡æ¡£ç±»é€‰é¡¹ä¸­ç¦ç”¨ï¼š
% \begin{itemize}
%   \item \pkg{ntheorem}ï¼Œæä¾›å®šç†ç±»çŽ¯å¢ƒæ”¯æŒã€‚
%   \item \pkg{unicode-math}ï¼Œè´Ÿè´£å¤„ç† Unicode ç¼–ç&nbsp;çš„ OpenType æ•°å­¦å­—ä½“ã€‚
%   \item \pkg{footmisc}ï¼Œå¤„ç†è„šæ³¨ã€‚
%   \item \pkg{enumitem}ï¼Œè°ƒæ•´åˆ—è¡¨çŽ¯å¢ƒã€‚
%   \item \pkg{cleveref}ï¼Œç”¨äºŽè‡ªåŠ¨ç”Ÿæˆå¼•ç”¨æ&nbsp;‡ç­¾ã€‚
%   \item \pkg{biblatex} å’Œ \pkg{biblatex-gb7714-2015}ï¼Œç”¨äºŽç”Ÿæˆå›½æ&nbsp;‡ä¸‹çš„å‚è€ƒæ–‡çŒ®æ&nbsp;·å¼ã€‚
% \end{itemize}
%
% åœ¨å¼€å¯æŸäº›é€‰é¡¹æ—¶ï¼Œæœ¬æ¨¡æ¿ä¹Ÿä¼šè°ƒç”¨ä»¥ä¸‹å®åŒ…ï¼š
% \begin{itemize}
%   \item \pkg{fandol}ã€\pkg{tex-gyre}ã€\pkg{tex-gyre-math}ã€\pkg{xits} ç­‰ï¼Œ
%         æä¾›è‡ªç”±å­—ä½“ã€‚
%   \item \pkg{emptypage}ï¼Œåœ¨åŒé¢æ¨¡å¼ä¸‹æ¸…ç©ºç©ºç™½é¡µçš„é¡µçœ‰ã€é¡µè„šå’Œé¡µç&nbsp;ã€‚
%   \item \pkg{circledtext} å’Œ \pkg{l3experimental}ï¼Œç”¨äºŽåœ¨ \opt{footnote/circled}
%         å’Œ \opt{footnote/circled*} é€‰é¡¹ä¸‹ç”Ÿæˆè„šæ³¨åœˆç&nbsp;ã€‚
%   \item \pkg{pifont}ï¼Œç”¨äºŽåœ¨ \opt{footnote/pifont} é€‰é¡¹ä¸‹ç”Ÿæˆè„šæ³¨åœˆç&nbsp;ã€‚
%   \item \pkg{tikz} å’Œ \pkg{njuvisual}ï¼Œç”¨äºŽç»˜åˆ¶å°é¢çš„æ&nbsp;¡åæ&nbsp;¡å¾½ã€‚
%   \item \pkg{tabularray}ï¼Œç”¨äºŽç»˜åˆ¶ç&nbsp;”ç©¶ç”Ÿçš„å‡ºç‰ˆæŽˆæƒä¹¦ä¿¡æ¯è¡¨æ&nbsp;¼ã€‚
%   \item \pkg{xeCJKfntef} æˆ– \pkg{lua-ul}ï¼Œç”¨äºŽåœ¨å¯¹åº”å¼•æ“Žä¸‹ç»˜åˆ¶ä¸‹åˆ’çº¿ã€‚
% \end{itemize}
%
% ä¸‹åˆ—å®åŒ…ä¼šä¸Žæœ¬æ¨¡æ¿çš„é»˜è®¤é…ç½®äº§ç”Ÿå†²çªï¼Œæˆ–è€…ä¸èƒ½å‘æŒ¥é¢„æœŸä½œç”¨ï¼š
% \begin{itemize}
%   \item \pkg{natbib} å’Œ \pkg{gbt7714} ç­‰ \hologo{BibTeX} ç›¸å…³çš„å‚è€ƒæ–‡çŒ®å®åŒ…ã€‚
%   \item \pkg{bm} ç­‰ä½¿ç”¨ä¼&nbsp;ç»Ÿæ•°å­¦å­—ä½“é…ç½®æ–¹æ¡ˆçš„å®åŒ…ã€‚
%   \item \pkg{babel} åœ¨ç›´æŽ¥ä½¿ç”¨æ—¶ä¼šè¦†ç›–é»˜è®¤çš„ä¸­æ–‡åç§°è®¾ç½®ã€‚
%   \item \pkg{microtype} åœ¨ \XeTeX å’Œ \LuaTeX ä¸‹æ”¯æŒæœ‰é™ã€‚
% \end{itemize}
%
%
% \begin{thebibliography}{99}
%
% \newcommand\urlprefix{\newline\hspace*{\fill}}
% \let\OldUrl=\url
% \renewcommand\url[2][]{{\small\textit{#1}~\OldUrl{#2}}}
% \newcommand\CTANurl[2][]{{^^A
%   \small\textit{#1}~\href{http://mirror.ctan.org/#2}{\texttt{CTAN://#2}}}}
%
% \subsection*{ä¹¦ç±}
%
% \bibitem{lshort}
% \textsc{Oetiker T}, \textsc{Partl H}, \textsc{Hyna I}, et al.
% \newblock \textit{The Not So Short Introduction to \hologo{LaTeXe}: Or \hologo{LaTeXe} in 139 minutes} [EB/OL].
% \newblock version 6.4,
% \newblock (2021-03-09)
% \urlprefix\url{https://ctan.org/pkg/lshort-english}
% \urlprefix\CTANurl[æ–‡æ¡£ï¼š]{info/lshort/english/lshort.pdf}
%
% \bibitem{lshort-zh-cn}
% \textsc{Oetiker T}, \textsc{Partl H}, \textsc{Hyna I}, et al.
% \newblock \textit{ä¸€ä»½ï¼ˆä¸å¤ªï¼‰ç®€çŸ­çš„ \hologo{LaTeXe} ä»‹ç»: æˆ– 111 åˆ†é’Ÿäº†è§£ \hologo{LaTeXe}} [EB/OL].
% \newblock \CTeX{} å¼€å‘å°ç»„, è¯‘.
% \newblock åŽŸç‰ˆç‰ˆæœ¬ version 6.4, ä¸­æ–‡ç‰ˆæœ¬ version 6.03,
% \newblock (2021-11-21)
% \urlprefix\url{https://ctan.org/pkg/lshort-zh-cn}
% \urlprefix\CTANurl[æ–‡æ¡£ï¼š]{info/lshort/chinese/lshort-zh-cn.pdf}
%
% \bibitem{install-latex-guide-zh-cn}
% çŽ‹ç„¶.
% \newblock \textit{ä¸€ä»½ç®€çŸ­çš„å…³äºŽ \LaTeX å®‰è£…çš„ä»‹ç»} [EB/OL].
% \newblock version 2022.10.1,
% \newblock (2022-10-01)
% \urlprefix\url{https://ctan.org/pkg/install-latex-guide-zh-cn}
% \urlprefix\CTANurl[æ–‡æ¡£ï¼š]{info/install-latex-guide-zh-cn/install-latex-guide-zh-cn.pdf}
%
% \bibitem{åˆ˜æµ·æ´‹2013latexå…¥é—¨}
% åˆ˜æµ·æ´‹.
% \newblock \textit{\LaTeX å…¥é—¨} [M].
% \newblock åŒ—äº¬: ç”µå­å·¥ä¸šå‡ºç‰ˆç¤¾, 2013
%
%
% \subsection*{æ&nbsp;‡å‡†ã€è§„èŒƒ}
%
% \bibitem{gb-3100-93}
% å…¨å›½ä¿¡æ¯ä¸Žæ–‡çŒ®æ&nbsp;‡å‡†åŒ–æŠ€æœ¯å§”å‘˜ä¼š.
% \newblock \textit{å›½é™…å•ä½åˆ¶åŠå…¶åº”ç”¨: GB 3100--93} [S].
% \newblock åŒ—äº¬: ä¸­å›½æ&nbsp;‡å‡†å‡ºç‰ˆç¤¾, 1993
%
% \bibitem{gb-3101-93}
% å…¨å›½ä¿¡æ¯ä¸Žæ–‡çŒ®æ&nbsp;‡å‡†åŒ–æŠ€æœ¯å§”å‘˜ä¼š.
% \newblock \textit{æœ‰å…³é‡ã€å•ä½å’Œç¬¦å·çš„ä¸€èˆ¬åŽŸåˆ™: GB 3101--93} [S].
% \newblock åŒ—äº¬: ä¸­å›½æ&nbsp;‡å‡†å‡ºç‰ˆç¤¾, 1993
%
% \bibitem{gb-3102-93}
% å…¨å›½ä¿¡æ¯ä¸Žæ–‡çŒ®æ&nbsp;‡å‡†åŒ–æŠ€æœ¯å§”å‘˜ä¼š.
% \newblock \textit{ç‰©ç†ç§‘å­¦å’ŒæŠ€æœ¯ä¸­ä½¿ç”¨çš„æ•°å­¦ç¬¦å·: GB/T 3102--93} [S].
% \newblock åŒ—äº¬: ä¸­å›½æ&nbsp;‡å‡†å‡ºç‰ˆç¤¾, 1993
%
% \bibitem{gb-t-7408-2005}
% å…¨å›½ä¿¡æ¯ä¸Žæ–‡çŒ®æ&nbsp;‡å‡†åŒ–æŠ€æœ¯å§”å‘˜ä¼š.
% \newblock \textit{æ•°æ®å…ƒå’Œäº¤æ¢æ&nbsp;¼å¼\quad ä¿¡æ¯äº¤æ¢~ æ—¥æœŸå’Œæ—¶é—´è¡¨ç¤ºæ³•: GB/T 7408--2005} [S].
% \newblock åŒ—äº¬: ä¸­å›½æ&nbsp;‡å‡†å‡ºç‰ˆç¤¾, 2005
%
% \bibitem{gb-t-7713.1-2006}
% å…¨å›½ä¿¡æ¯ä¸Žæ–‡çŒ®æ&nbsp;‡å‡†åŒ–æŠ€æœ¯å§”å‘˜ä¼š.
% \newblock \textit{å­¦ä½è®ºæ–‡ç¼–å†™è§„åˆ™: GB/T 7713.1--2006} [S].
% \newblock åŒ—äº¬: ä¸­å›½æ&nbsp;‡å‡†å‡ºç‰ˆç¤¾, 2006
%
% \bibitem{gb-t-7714-2015}
% å…¨å›½ä¿¡æ¯ä¸Žæ–‡çŒ®æ&nbsp;‡å‡†åŒ–æŠ€æœ¯å§”å‘˜ä¼š.
% \newblock \textit{ä¿¡æ¯ä¸Žæ–‡çŒ®\quad å‚è€ƒæ–‡çŒ®è‘—å½•è§„åˆ™: GB/T 7714--2015} [S].
% \newblock åŒ—äº¬: ä¸­å›½æ&nbsp;‡å‡†å‡ºç‰ˆç¤¾, 2015
%
% \bibitem{nju-bachelor-2024}
% å—äº¬å¤§å­¦æœ¬ç§‘ç”Ÿé™¢.
% \newblock \textit{å…³äºŽå¯åŠ¨å—äº¬å¤§å­¦2024å±Šæœ¬ç§‘æ¯•ä¸šè®ºæ–‡ï¼ˆè®¾è®¡ï¼‰å·¥ä½œçš„é€šçŸ¥} [EB/OL].
% \newblock (2023-12-19)
% \urlprefix\url{https://jw.nju.edu.cn/db/23/c26263a645923/page.htm}
%
% \bibitem{nju-graduate-2023}
% å—äº¬å¤§å­¦ç&nbsp;”ç©¶ç”Ÿé™¢.
% \newblock \textit{å…³äºŽå¼€å±•å…­æœˆä»½å­¦ä½ç”³è¯·ã€å®¡æ&nbsp;¸å·¥ä½œçš„é€šçŸ¥} [EB/OL].
% \newblock (2023-04-26)
% \urlprefix\url{https://grawww.nju.edu.cn/63/a9/c905a615337/page.htm}
%
% \bibitem{nju-postdoc-2022}
% å—äº¬å¤§å­¦äººåŠ›èµ„æºå¤„.
% \newblock \textit{åšå£«åŽå‡ºç«™ç”³è¯·} [EB/OL].
% \newblock (2022-07-27)
% \urlprefix\url{https://hr.nju.edu.cn/6334/list.htm}
%
%
% \subsection*{å®åŒ…}
%
% \bibitem{biblatex}
% \textsc{Lehman P}, \textsc{Wright J}, \textsc{Boruvka A}, \textsc{Kime P}.
% \newblock \textit{Sophisticated Bibliographies in \LaTeX} [EB/OL].
% \newblock version 3.17,
% \newblock (2022-02-02)
% \urlprefix\url{https://ctan.org/pkg/biblatex}
% \urlprefix\CTANurl[æ–‡æ¡£ï¼š]{macros/latex/contrib/biblatex/doc/biblatex.pdf}
%
% \bibitem{biblatex-gb7714-2015}
% èƒ¡æŒ¯éœ‡.
% \newblock \textit{ç¬¦åˆ GB/T 7714-2015 æ&nbsp;‡å‡†çš„ biblatex å‚è€ƒæ–‡çŒ®æ&nbsp;·å¼} [EB/OL].
% \newblock version 1.1j,
% \newblock (2022-08-29)
% \urlprefix\url{https://ctan.org/pkg/biblatex-gb7714-2015}
% \urlprefix\CTANurl[æ–‡æ¡£ï¼š]{biblatex-contrib/biblatex-gb7714-2015/biblatex-gb7714-2015.pdf}
%
% \bibitem{CTeX}
% \textsc{CTEX.ORG}.
% \newblock \textit{\CTeX{} å®é›†æ‰‹å†Œ} [EB/OL].
% \newblock version 2.5.8,
% \newblock (2021-12-12)
% \urlprefix\url{https://ctan.org/pkg/ctex}
% \urlprefix\CTANurl[æ–‡æ¡£åŠæºä»£ç&nbsp;ï¼š]{language/chinese/ctex/ctex.pdf}
%
% \bibitem{circledtext}
% è€¿æ¥&nbsp;.
% \newblock \textit{Create circled text} [EB/OL].
% \newblock version 1.1.0,
% \newblock (2022-04-28)
% \urlprefix\url{https://ctan.org/pkg/circledtext}
% \urlprefix\CTANurl[æ–‡æ¡£ï¼š]{macros/latex/contrib/circledtext/circledtext.pdf}
%
% \bibitem{latexmk}
% \textsc{Collins J}.
% \newblock \textit{Fully automated \LaTeX document generation} [EB/OL].
% \newblock version 4.76,
% \newblock (2021-11-20)
% \urlprefix\url{https://www.ctan.org/pkg/latexmk}
% \urlprefix\CTANurl[æ–‡æ¡£ï¼š]{support/latexmk/latexmk.pdf}
%
% \bibitem{listings}
% \textsc{Heinz C}, \textsc{Moses B}, \textsc{Hoffmann J}.
% \newblock \textit{Typeset source code listings using \LaTeX} [EB/OL].
% \newblock version 1.8d,
% \newblock (2020-03-24)
% \urlprefix\url{https://www.ctan.org/pkg/listings}
% \urlprefix\CTANurl[æ–‡æ¡£ï¼š]{macros/latex/contrib/listings/listings.pdf}
%
% \bibitem{njuvisual}
% \textsc{Xiong Y}.
% \newblock \textit{Display logos related to Nanjing University} [EB/OL].
% \newblock version 0.2.1,
% \newblock (2022-01-09)
% \urlprefix\url{https://ctan.org/pkg/njuvisual}
% \urlprefix\CTANurl[æ–‡æ¡£ï¼š]{macros/latex/contrib/njuvisual/njuvisual.pdf}
%
% \bibitem{pdfpages}
% \textsc{Matthias A}.
% \newblock \textit{Include PDF documents in \LaTeX} [EB/OL].
% \newblock version 0.5v,
% \newblock (2022-05-22)
% \urlprefix\url{https://www.ctan.org/pkg/pdfpages}
% \urlprefix\CTANurl[æ–‡æ¡£ï¼š]{macros/latex/contrib/pdfpages/pdfpages.pdf}
%
% \bibitem{siunitx}
% \textsc{Wright J}.
% \newblock \textit{A comprehensive (SI) units package} [EB/OL].
% \newblock version 3.1.0,
% \newblock (2022-04-25)
% \urlprefix\url{https://www.ctan.org/pkg/siunitx}
% \urlprefix\CTANurl[æ–‡æ¡£ï¼š]{macros/latex/contrib/siunitx/siunitx.pdf}
%
% \bibitem{tabularray}
% \textsc{Jianrui Lyu}.
% \newblock \textit{Typeset tabulars and arrays with \LaTeX3} [EB/OL].
% \newblock version 2021Q,
% \newblock (2021-12-01)
% \urlprefix\url{https://ctan.org/pkg/tabularray}
% \urlprefix\CTANurl[æ–‡æ¡£ï¼š]{macros/latex/contrib/tabularray/tabularray.pdf}
%
%
% \subsection*{æ¨¡æ¿}
%
% \bibitem{fduthesis}
% æ›¾ç¥¥ä¸œ.
% \newblock \textit{fduthesis: å¤æ—¦å¤§å­¦è®ºæ–‡æ¨¡æ¿} [EB/OL].
% \newblock version 0.7e,
% \newblock (2020-08-30)
% \urlprefix\url{https://ctan.org/pkg/fduthesis}
% \urlprefix\CTANurl[æ–‡æ¡£åŠæºä»£ç&nbsp;ï¼š]{macros/latex/contrib/fduthesis/fduthesis.pdf}
%
% \bibitem{thuthesis}
% æ¸…åŽå¤§å­¦ TUNA åä¼š.
% \newblock \textit{\textsc{ThuThesis}ï¼šæ¸…åŽå¤§å­¦å­¦ä½è®ºæ–‡æ¨¡æ¿} [EB/OL].
% \newblock version 7.2.3,
% \newblock (2021-05-31)
% \urlprefix\url{https://ctan.org/pkg/thuthesis}
% \urlprefix\CTANurl[æ–‡æ¡£åŠæºä»£ç&nbsp;ï¼š]{macros/latex/contrib/thuthesis/thuthesis.pdf}
%
%
% \emph{ä»¥ä¸‹æ¨¡ç‰ˆçŽ°å·²åœæ­¢æ›´æ–°ã€‚}
%
% \bibitem{wenboyang2013}
% æ¨æ–‡åš.
% \newblock \textit{å—äº¬å¤§å­¦å­¦ä½è®ºæ–‡ \LaTeX æ¨¡æ¿} [EB/OL].
% \newblock (2018-06-23)
% \urlprefix\url{https://github.com/solrex/njuthesis}
%
% \bibitem{fireblue2013}
% \textsc{fireblue}.
% \newblock \textit{å—äº¬å¤§å­¦å­¦ä½è®ºæ–‡ \LaTeX æ¨¡æ¿} [EB/OL].
% \newblock (2013-04-13)
% \urlprefix\url{https://github.com/fireblue/NJUThesis}
%
% \bibitem{wenhai-zheng2013}
% \textsc{wenhai-zheng}.
% \newblock \textit{å—äº¬å¤§å­¦æœ¬ç§‘æ¯•ä¸šè®ºæ–‡ \LaTeX æ¨¡æ¿} [EB/OL].
% \newblock (2013-08-12)
% \urlprefix\url{https://github.com/wenhai-zheng/NJUThesis}
%
% \bibitem{zenglecao2013}
% æ›¹å¢žä¹.
% \newblock \textit{å—äº¬å¤§å­¦æœ¬ç§‘æ¯•ä¸šè®ºæ–‡ï¼ˆè®¾è®¡ï¼‰ \LaTeX æ¨¡æ¿} [EB/OL].
% \newblock (2019-06-26)
% \urlprefix\url{https://github.com/ZLCao/NJUBachelor}
%
% \bibitem{haixinghu2013}
% èƒ¡æµ·æ˜Ÿ.
% \newblock \textit{å—äº¬å¤§å­¦å­¦ä½è®ºæ–‡ \XeLaTeX æ¨¡æ¿} [EB/OL].
% \newblock (2018-08-08)
% \urlprefix\url{https://github.com/Haixing-Hu/nju-thesis}
%
% \bibitem{chuhengzhang2016}
% å¼&nbsp;æ¥šç©.
% \newblock \textit{å—äº¬å¤§å­¦æœ¬ç§‘ç”Ÿæ¯•ä¸šè®ºæ–‡ \LaTeX æ¨¡æ¿} [EB/OL].
% \newblock (2016-06-01)
% \urlprefix\url{https://github.com/zhangchuheng123/NJUThesis}
%
% \bibitem{yanyanjiang2017}
% è’‹ç‚Žå²©.
% \newblock \textit{å—äº¬å¤§å­¦å±±å¯¨ \hologo{LyX} ç&nbsp;”ç©¶ç”Ÿæ¯•ä¸šè®ºæ–‡æ¨¡æ¿} [EB/OL].
% \newblock (2019-01-16)
% \urlprefix\url{https://github.com/jiangyy/njuthesis}
%
% \bibitem{njuHan2018}
% \textsc{njuHan}.
% \newblock \textit{å—äº¬å¤§å­¦å­¦ä½è®ºæ–‡(æœ¬ç§‘/ç¡•å£«/åšå£«)ï¼Œæ¯•ä¸šè®ºæ–‡ \LaTeX æ¨¡æ¿} [EB/OL].
% \newblock (2021-06-15)
% \urlprefix\url{https://github.com/njuHan/njuthesis-nju-thesis-template}
%
% \bibitem{anyirao2018}
% é¥¶å®‰é€¸.
% \newblock \textit{å—äº¬å¤§å­¦æœ¬ç§‘ç”Ÿæ¯•ä¸šè®ºæ–‡ \LaTeX æ¨¡æ¿ 2018 æ–°ç‰ˆ} [EB/OL].
% \newblock (2018-06-24)
% \urlprefix\url{https://github.com/AnyiRao/NJUThesis2018}
%
% \bibitem{yichenzhao2021}
% èµµæ‡¿æ™¨.
% \newblock \textit{å—äº¬å¤§å­¦æœ¬ç§‘ç”Ÿæ¯•ä¸šè®ºæ–‡ \LaTeX æ¨¡æ¿ï¼ˆ2021ç‰ˆï¼‰} [EB/OL].
% \newblock (2021-09-23)
% \urlprefix\url{https://github.com/FengChendian/NJUThesis2021}
%
%
% \end{thebibliography}
%
%
% \end{documentation}
% \clearpage
%
% \begin{implementation}
%
% \section{ä»£ç&nbsp;å®žçŽ°}
% \changes{v0.10}{2021/09/26}{å¯¹ä»£ç&nbsp;å®žçŽ°éƒ¨åˆ†è¿›è¡Œäº†æ•´ç†ã€‚}
%
% æœ¬æ¨¡æ¿ä½¿ç”¨ \LaTeX3 è¯­æ³•ç¼–å†™ï¼Œä¾èµ– \pkg{expl3} çŽ¯å¢ƒï¼Œ
% å¹¶éœ€è°ƒç”¨ \pkg{l3packages} ä¸­çš„ç›¸å…³å®åŒ…ã€‚
%
% ä»¥ä¸‹ä»£ç&nbsp;ä¸­æœ‰ä¸€äº›å½¢å¦‚\sgrd{class}çš„æ&nbsp;‡è®°ï¼Œ è¿™æ˜¯ \pkg{DocStrip} ä¸­çš„
% â€œguardâ€ï¼Œç”¨æ¥é€‰æ‹©æ€§åœ°æå–æ–‡ä»¶ã€‚â€œ|*|â€å’Œâ€œ|/|â€åˆ†åˆ«è¡¨ç¤ºè¯¥éƒ¨åˆ†çš„å¼€å§‹å’Œç»“
% æŸã€‚ä¸å«â€œ|*|â€å’Œâ€œ|/|â€çš„ guard å‡ºçŽ°åœ¨è¡Œå·å·¦ä¾§ï¼Œå®ƒä»¬ç”¨æ¥ç¡®å®šå•ç‹¬ä¸€è¡Œä»£
% ç&nbsp;çš„å½’å±žã€‚è¿™äº› guard çš„é¢œè‰²ä¸ä¸€ï¼Œç”¨ä»¥æ˜Žç¡®åˆ†ç±»å…³ç³»ã€‚
%
% ä¸‹æ–‡ä¸­ï¼Œæœ¬ç§‘ç”Ÿæ¨¡æ¿é…ç½®å¯¹åº”\pgrd{u}ï¼Œç”¨äºŽç”Ÿæˆ
% \file{njuthesis-undergraduate.def}ï¼›ç&nbsp;”ç©¶ç”Ÿæ¨¡æ¿é…ç½®å¯¹åº”\pgrd{g}ï¼Œ
% ç”¨äºŽç”Ÿæˆ \file{njuthesis-graduate.def}ï¼›åšå£«åŽæ¨¡æ¿é…ç½®å¯¹åº”\pgrd{p}ï¼Œ
% ç”¨äºŽç”Ÿæˆ \file{njuthesis-postdoctoral.def}ã€‚
%
% å¦æœ‰è‹¥å¹²åŒ…å« \textsf{@@} çš„ guardï¼Œç”¨ä»¥è¡¨ç¤ºåç©ºé—´ï¼ˆæ¨¡å—ï¼‰ã€‚
% åœ¨åˆ&nbsp;é™¤æ³¨é‡Šç”Ÿæˆæ&nbsp;¼å¼æ–‡ä»¶æ—¶ï¼Œæºä»£ç&nbsp;å˜é‡åç§°ä¸­çš„ \textsf{@@} ä¼šè¢«ç­‰å·åŽçš„å­—æ®µæ›¿æ¢ï¼Œ
% è­¬å¦‚åœ¨æœ¬æ¨¡æ¿ä¸»ä½“éƒ¨åˆ†ä¸­\grd{@@=nju}ã€‚
%
% \subsection{å‡†å¤‡}
%
%    \begin{macrocode}
%&lt;*class&gt;
%&lt;@@=nju&gt;
%    \end{macrocode}
%
% \changes{v0.11}{2021/10/23}{æ·»åŠ&nbsp;äº†è‹¥å¹²çŽ¯å¢ƒæ£€æŸ¥ä¸Žè­¦å‘Šä¿¡æ¯ã€‚}
% \changes{v0.12}{2021/12/03}{æ”¾å®½å¯¹äºŽ \pkg{l3packages} çš„ç‰ˆæœ¬è¦æ±‚ã€‚}
% æ£€æŸ¥ \LaTeX3 ç¼–ç¨‹çŽ¯å¢ƒã€‚
%    \begin{macrocode}
\RequirePackage { xtemplate, l3keys2e }
\msg_new:nnn { njuthesis } { l3-too-old }
  {
    Package~ "#1"~ is~ too~ old. \\
    Please~ update~ an~ up-to-date~ version~ of~ the~
    bundles~ "l3kernel"~ and~ "l3packages"~ using~
    your~ TeX~ package~ manager~ or~ from~ CTAN.
  }
\clist_map_inline:nn { xtemplate, l3keys2e }
  {
    \@ifpackagelater {#1} { 2020/10/01 }
      { } { \msg_error:nnn { njuthesis } { l3-too-old } {#1} }
  }
%    \end{macrocode}
%
% \changes{v1.3}{2023/11/14}{å…¼å®¹æ–°ç‰ˆ \LaTeX3 çš„ |e| åž‹å±•å¼€å˜åŒ–ã€‚}
% å…¼å®¹æ–°ç‰ˆ L3 ç‰¹æ€§ã€‚å¦è§ \url{https://github.com/CTeX-org/ctex-kit/pull/678}ã€‚
%    \begin{macrocode}
\@ifpackagelater { expl3 } { 2023/10/10 } { }
  {
    \cs_generate_variant:Nn \tl_set:Nn        { Ne }
    \cs_generate_variant:Nn \tl_gset:Nn       { Ne }
    \cs_generate_variant:Nn \tl_const:Nn      { Ne }
    \cs_generate_variant:Nn \tl_gput_right:Nn { Ne }
  }
%    \end{macrocode}
%
% ç›®å‰ \cls{njuthesis} ä»…æ”¯æŒ \XeTeX å’Œ \LuaTeXã€‚
%    \begin{macrocode}
\msg_new:nnn { njuthesis } { unsupported-engine }
  {
    The~ njuthesis~ class~ requires~ either~
    XeTeX~ or~ LuaTeX. \\
    "#1"~ is~ not~ supported~ at~ present.~
    You~ must~ change~ your~ typesetting~ engine~
    to~ "xelatex"~ or~ "lualatex".
  }
\bool_lazy_or:nnF
  { \sys_if_engine_xetex_p:  }
  { \sys_if_engine_luatex_p: }
  { \msg_fatal:nne { njuthesis } { unsupported-engine } { \c_sys_engine_str } }
%    \end{macrocode}
%
%
% \subsection{å®šä¹‰å˜é‡}
%
% æœ¬æ¨¡æ¿çš„å˜é‡åç§°é€šå¼ä¸º \cs[no-index]{\meta{ä½œç”¨åŸŸ}_@@_\meta{æ—}_\meta{æè¿°}_\meta{ç±»åž‹}}
% ï¼ˆå‡ºçŽ°åœ¨æºä»£ç&nbsp;ä¸­ï¼‰æˆ– \cs[no-index,replace=false]{\meta{ä½œç”¨åŸŸ}_@@_\meta{æ—}_\meta{æè¿°}_\meta{ç±»åž‹}}
% ï¼ˆå‡ºçŽ°åœ¨æ–‡æ¡£ä¸­ï¼‰ã€‚ä½œç”¨åŸŸä¸ºå•ä¸ªå­—æ¯ï¼Œ|l| ä»£è¡¨å±€éƒ¨å˜é‡ï¼Œ|g| ä»£è¡¨å…¨å±€å˜é‡ï¼Œ|c| ä»£è¡¨å¸¸
% é‡ã€‚æœ€åŽä¸€ä¸ªä¸‹åˆ’çº¿åŽçš„å†…å®¹æŒ‡ç¤ºå…¶ç±»åž‹ï¼Œä½†å¼•æ“Žä¸ä¼šæ&nbsp;¹æ®åç§°æ£€æŸ¥å˜é‡ç±»åž‹ã€‚
%
% \begin{variable}{
%   \l_@@_tmpa_box,\l_@@_tmpb_box,\l_@@_tmpc_box,\l_@@_tmp_clist,
%   \l_@@_tmpa_dim,\l_@@_tmpb_dim,\l_@@_tmpa_int,\l_@@_tmpb_int,
%   \l_@@_tmp_skip,\l_@@_tmpa_tl,\l_@@_tmpb_tl}
% ä¸´æ—¶å˜é‡ã€‚
%    \begin{macrocode}
\box_new:N   \l_@@_tmpa_box
\box_new:N   \l_@@_tmpb_box
\box_new:N   \l_@@_tmpc_box
\clist_new:N \l_@@_tmp_clist
\dim_new:N   \l_@@_tmpa_dim
\dim_new:N   \l_@@_tmpb_dim
\int_new:N   \l_@@_tmpa_int
\int_new:N   \l_@@_tmpb_int
\skip_new:N  \l_@@_tmp_skip
\tl_new:N    \l_@@_tmpa_tl
\tl_new:N    \l_@@_tmpb_tl
%    \end{macrocode}
% \end{variable}
%
% \begin{variable}{\g_@@_info_type_int}
% ç”¨äºŽå­˜å‚¨è®ºæ–‡ç±»åž‹çš„å˜é‡ã€‚
%    \begin{macrocode}
\int_new:N \g_@@_info_type_int
%    \end{macrocode}
% \end{variable}
%
% \begin{variable}{\g_@@_opt_academic_bool}
% ç”¨äºŽåˆ¤æ–­å­¦æœ¯åž‹æˆ–ä¸“ä¸šåž‹å­¦ä½çš„å˜é‡ã€‚
%    \begin{macrocode}
\bool_new:N \g_@@_opt_academic_bool
%    \end{macrocode}
% \end{variable}
%
% \begin{variable}{\g_@@_opt_draft_bool}
% ç”¨äºŽåˆ¤æ–­è‰ç¨¿æ¨¡å¼çš„å˜é‡ã€‚
%    \begin{macrocode}
\bool_new:N        \g_@@_opt_draft_bool
\bool_gset_false:N \g_@@_opt_draft_bool
%    \end{macrocode}
% \end{variable}
%
% \begin{variable}{\g_@@_opt_supvii_bool}
% å®šä¹‰ç”¨äºŽåˆ¤æ–­æ˜¯å¦æœ‰ç¬¬äºŒå¯¼å¸ˆçš„å˜é‡ã€‚
%    \begin{macrocode}
\bool_new:N \g_@@_opt_supvii_bool
%    \end{macrocode}
% \end{variable}
%
% \begin{variable}{
%   \g_@@_info_supvfull_tl,
%   \g_@@_info_supvfull_en_tl}
% ç”¨äºŽå­˜å‚¨å¯¼å¸ˆå§“ååŠ&nbsp;èŒç§°çš„å˜é‡ã€‚
%    \begin{macrocode}
\tl_new:N \g_@@_info_supvfull_tl
\tl_new:N \g_@@_info_supvfull_en_tl
%    \end{macrocode}
% \end{variable}
%
% \begin{variable}{
%   \g_@@_info_major_tl,
%   \g_@@_info_majorc_tl}
% ç”¨äºŽå­˜å‚¨ä¸“ä¸šåç§°çš„å˜é‡ã€‚
%    \begin{macrocode}
\tl_new:N \g_@@_info_major_tl
\tl_new:N \g_@@_info_majorc_tl
%    \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_path_tl}
% å­˜å‚¨å­—ä½“è·¯å¾„çš„å…¨å±€å˜é‡ã€‚
%    \begin{macrocode}
\tl_new:N \g_@@_font_path_tl
%    \end{macrocode}
% \end{variable}
%
% \begin{variable}{\g_@@_font_path_bool}
% æ˜¯å¦ä½¿ç”¨ç‹¬ç«‹çš„å­—ä½“æ–‡ä»¶ã€‚
%    \begin{macrocode}
\bool_new:N \g_@@_font_path_bool
%    \end{macrocode}
% \end{variable}
%
% \begin{variable}{\g_@@_config_tl}
% ä¿å­˜é…ç½®æ–‡ä»¶åç§°ã€‚é»˜è®¤ä¸ºç©ºã€‚
%    \begin{macrocode}
\tl_new:N \g_@@_config_tl
%    \end{macrocode}
% \end{variable}
%
% \begin{variable}{\c_@@_name_today_tl}
% ç¼–è¯‘å½“å¤©æ—¥æœŸï¼Œæ&nbsp;¼å¼ä¸º |yyyy-mm-dd|ã€‚
%    \begin{macrocode}
\tl_const:Ne \c_@@_name_today_tl
  {
    \int_to_arabic:n { \c_sys_year_int  } -
    \int_to_arabic:n { \c_sys_month_int } -
    \int_to_arabic:n { \c_sys_day_int   }
  }
%    \end{macrocode}
% \end{variable}
%
% \begin{variable}{\c_@@_name_type_clist,\c_@@_name_type_en_clist}
% è®ºæ–‡ç±»åž‹ä¸Žå­¦ä½ç±»åž‹ã€‚
%    \begin{macrocode}
\clist_const:Nn \c_@@_name_type_clist
  { å­¦å£«, ç¡•å£«, åšå£« }
\clist_const:Nn \c_@@_name_type_en_clist
  { Bachelor, Master, Doctor~of~Philosophy }
%    \end{macrocode}
% \end{variable}
%
% \begin{variable}{\c_@@_name_month_en_clist}
% è‹±æ–‡æœˆä»½åç§°ã€‚
%    \begin{macrocode}
\clist_const:Nn \c_@@_name_month_en_clist
  {
    January, February, March, April, May, June,
    July, August, September, October, November, December
  }
%    \end{macrocode}
% \end{variable}
%
% \changes{v1.1}{2023/03/07}{ç›²å®¡æ¨¡å¼ä¸‹éšè—å¹´çº§å’Œå­¦æ&nbsp;¡åç§°ã€‚}
% \begin{variable}{\c_@@_name_anon_clist,\c_@@_name_anon_en_clist}
% ç›²å®¡æ¨¡å¼ä¸‹ä¸æ˜¾ç¤ºçš„ä¸ªäººä¿¡æ¯é”®åã€‚
%    \begin{macrocode}
\clist_const:Nn \c_@@_name_anon_clist
  {
    author, chairman, email, student-id, reviewer,
    supervisor-contact, supervisor, supervisor-ii
  }
\clist_const:Nn \c_@@_name_anon_en_clist
  { author, supervisor, supervisor-ii }
%    \end{macrocode}
% \end{variable}
%
%
% \subsection{å†…éƒ¨å‡½æ•°}
%
% \begin{macro}{\@@_null:}
% ç­‰ä»·äºŽ \LaTeXe{} ä¸­çš„ \tn{null}ã€‚
%    \begin{macrocode}
\cs_new:Nn \@@_null: { \hbox:n { } }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_space:,\@@_quad:,\@@_qquad:}
% ç­‰ä»·äºŽ \LaTeXe{} ä¸­çš„ \tn{quad} å’Œ \tn{qquad}ã€‚
%    \begin{macrocode}
\cs_new:Nn \@@_space: { \skip_horizontal:n { .5 em } }
\cs_new:Nn \@@_quad:  { \skip_horizontal:n {  1 em } }
% \cs_new:Nn \@@_qquad: { \skip_horizontal:n {  2 em } }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_vskip:,\@@_hskip:}
% ç”Ÿæˆä¸€ä¸ªè¾ƒå°çš„ skipã€‚
%    \begin{macrocode}
\cs_new:Nn \@@_vskip: { \skip_vertical:N   \l_@@_vsep_dim }
\cs_new:Nn \@@_hskip: { \skip_horizontal:N \l_@@_hsep_dim }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_vskip:N}
% ç±»ä¼¼äºŽ \LaTeXe ä¸­çš„ \tn{vspace*}
% \footnote{\url{https://tex.stackexchange.com/a/30065/251992}}ï¼Œ
% ä»Žä¸Šä¸€ä¸ªé¡µé¢å…ƒç´&nbsp;åº•éƒ¨å¼€å§‹ç”Ÿæˆ |skip|ã€‚
%    \begin{macrocode}
\cs_set_protected:Npn \@@_vskip:N #1
  {
    \tex_hrule:D \@height \c_zero_dim \scan_stop:
    \tex_penalty:D \@M
    \skip_vertical:N #1
    \skip_vertical:N \c_zero_dim
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_define_name:nn,\@@_define_name:nnn}
% ç”¨æ¥å®šä¹‰é»˜è®¤åç§°çš„è¾…åŠ©å‡½æ•°ã€‚
%    \begin{macrocode}
\cs_new:Npn \@@_define_name:nn #1
  {
    \tl_new:c  { l_@@_name_ #1    _tl }
    \tl_set:cn { l_@@_name_ #1    _tl }
  }
\cs_new:Npn \@@_define_name:nnn #1#2#3
  {
    \@@_define_name:nn { #1     } {#2}
    \@@_define_name:nn { #1 _en } {#3}
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_define_fmt:nn}
% ç”¨æ¥å®šä¹‰é»˜è®¤æ&nbsp;·å¼çš„è¾…åŠ©å‡½æ•°ã€‚
%    \begin{macrocode}
\cs_new:Npn \@@_define_fmt:nn #1 { \tl_set:cn { l_@@_fmt_ #1 _tl } }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_define_dim:nn,\@@_define_skip:nn}
% ç”¨æ¥å®šä¹‰é»˜è®¤é—´è·çš„è¾…åŠ©å‡½æ•°ã€‚
%    \begin{macrocode}
\cs_new:Npn \@@_define_dim:nn  #1
  {
    \dim_new:c   { l_@@_ #1 _dim  }
    \dim_set:cn  { l_@@_ #1 _dim  }
  }
\cs_new:Npn \@@_define_skip:nn #1
  {
    \skip_new:c  { l_@@_ #1 _skip }
    \skip_set:cn { l_@@_ #1 _skip }
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_info:n,\@@_name:n,\@@_fmt:n}
% æ&nbsp;¹æ®å˜é‡åè°ƒç”¨åç§°ã€å†…å®¹æˆ–æ&nbsp;¼å¼ä¿¡æ¯ã€‚
%    \begin{macrocode}
\cs_new:Npn \@@_info:n #1 { \tl_use:c { g_@@_info_ #1 _tl } }
\cs_new:Npn \@@_name:n #1 { \tl_use:c { l_@@_name_ #1 _tl } }
\cs_new:Npn \@@_fmt:n  #1 { \tl_use:c { l_@@_fmt_  #1 _tl } }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_name:nn}
% æ&nbsp;¹æ®å˜é‡åè°ƒç”¨åç§°ä¿¡æ¯ï¼Œå¯è°ƒæ•´å­—ç¬¦æ&nbsp;¼å¼
%    \begin{macrocode}
\cs_new:Npn \@@_name:nn #1#2
  { \group_begin: \@@_fmt:n {#1} \@@_name:n {#2} \group_end: }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_fontsize:nn,\@@_fontsize:nnn}
% ç”¨äºŽè®¾ç½®å­—å·çš„è¾…åŠ©å‡½æ•°ã€‚\pkg{ctex} é»˜è®¤ä½¿ç”¨çš„è¡Œè·å€æ•°æ˜¯ 1.2ï¼Œæˆ‘ä»¬åœ¨è¿™é‡Œé‡æ–°è®¡ç®—
% \tn{baselineskip}ï¼ŒæŠ›å¼ƒ \cs{l__ctex_font_size_tl} ä¸­çš„ç¬¬äºŒä¸ªå€¼ã€‚
%    \begin{macrocode}
\cs_new:Npn \@@_fontsize:nn #1#2
  { \fontsize {#1} {#2} \selectfont }
\cs_new:Npn \@@_fontsize:nnn #1#2#3
  { \@@_fontsize:nn {#1} { \fp_to_decimal:n { #3 * #1 } } }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_zihao:nn,\@@_zihao:n}
% è®¾ç½®å­—å·ï¼Œç±»ä¼¼äºŽ \cs{ctex_zihao:n}ã€‚
% \begin{arguments}
%   \item è¡Œè·å€æ•°
%   \item å­—å·å€¼ï¼ŒåŒ \tn{zihao}
% \end{arguments}
%    \begin{macrocode}
\cs_new:Npn \@@_zihao:nn #1#2
  {
    \prop_get:NnNTF \c__ctex_font_size_prop {#2} \l__ctex_font_size_tl
      { \exp_after:wN \@@_fontsize:nnn \l__ctex_font_size_tl {#1} }
      { \msg_error:nnn { ctex } { fontsize } {#2} }
  }
%    \end{macrocode}
% é»˜è®¤è¡Œè·å€æ•°ä¸º 1.3ã€‚
%    \begin{macrocode}
\cs_new:Npn \@@_zihao:n { \@@_zihao:nn { 1.3 } }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\cs_new:Npo}
% \begin{macro}{\@@_set_ccglue:n}
% è°ƒæ•´é—´è·ã€‚ç”±äºŽæ¶‰åŠè½½å…¥ \cls{ctexbook} åŽæ‰èƒ½ç”Ÿæ•ˆçš„ \pkg{xeCJK} æˆ– \pkg{luatexja}
% çš„å†…éƒ¨å‘½ä»¤ï¼Œæˆ‘ä»¬åªå±•å¼€ä¸€æ¬¡å®Œæˆå¼•æ“Žåˆ¤æ–­ï¼Œè€Œä¸ç”¨ |x| åž‹å…¨éƒ¨å±•å¼€ã€‚
%    \begin{macrocode}
\cs_generate_variant:Nn \cs_new:Npn { Npo }
\cs_new:Npo \@@_set_ccglue:n #1
  {
    \sys_if_engine_xetex:TF
      { \skip_set:Nn \l__ctex_ccglue_skip {#1} }
      { \ltjsetparameter { kanjiskip = {#1} } }
  }
%    \end{macrocode}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\@@_box_ulined:NN,\@@_box_ulined:Nc}
% å¸¦æœ‰ä¸‹åˆ’çº¿çš„æ°´å¹³ç›’å­ã€‚
% \begin{arguments}
%   \item å®½åº¦ï¼Œ|dim| åž‹å˜é‡
%   \item å†…å®¹ï¼Œå¯å¸¦æœ‰æ&nbsp;¼å¼
% \end{arguments}
%    \begin{macrocode}
\cs_new_protected:Npn \@@_box_ulined:NN #1#2
  {
    \mode_leave_vertical:
    \rule [ \l_@@_ruledpi_dim ] {#1} { \l_@@_rulehti_dim }
    \skip_horizontal:n { -#1 }
    \hbox_to_wd:nn {#1} { \tex_hfil:D #2 \tex_hfil:D }
  }
\cs_generate_variant:Nn \@@_box_ulined:NN { Nc }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_box_ulined_info:Nn}
% ä»¥ä¸Šç›’å­åªç”¨æ¥æ‰“å° \cs[no-index]{g_@@_info_\meta{æè¿°}_tl} å˜é‡ã€‚
%    \begin{macrocode}
\cs_new_protected:Npn \@@_box_ulined_info:Nn #1#2
  { \@@_box_ulined:Nc #1 { g_@@_info_ #2 _tl } }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_box_spread:NNNn}
% \changes{v0.19}{2022/05/16}{å¯¹è¶…å‡ºç›’å­å®½åº¦çš„æ–‡å­—è¿›è¡Œæ°´å¹³åŽ‹ç¼©ã€‚}
% åˆ†æ•£å¯¹é½çš„æ°´å¹³ç›’å­ï¼Œæ‹‰ä¼¸ç®—æ³•æ¥è‡ª \cls{fduthesis}ã€‚
% åœ¨æ–‡å­—å®½åº¦å°äºŽç»™å®šå®½åº¦æ—¶ï¼Œåœ¨å­—ç¬¦ä¸­é—´å¡«è¡¥ \tn{hfil} ä»¥å¢žå¤§å­—è·ã€‚
% åœ¨æ–‡å­—å®½åº¦è¶…å‡ºé™åˆ¶æ—¶ï¼Œè¿›è¡Œæ•´ä½“æ°´å¹³åŽ‹ç¼©ã€‚
% \begin{arguments}
%   \item ä¸´æ—¶ |dim| åž‹å˜é‡
%   \item å®½åº¦ï¼Œ|dim| åž‹å˜é‡
%   \item æ&nbsp;¼å¼
%   \item å†…å®¹ï¼Œä¸å¯å¸¦æœ‰æ&nbsp;¼å¼
% \end{arguments}
%    \begin{macrocode}
\cs_new_protected:Npn \@@_box_spread:NNNn #1#2#3#4
  {
    \mode_leave_vertical:
    \@@_get_width:Nn #1 { #3 #4 }
    \hbox_to_wd:nn {#2}
      {
        \dim_compare:nTF { #1 &gt; #2 }
          {
            \tex_hfil:D \scalebox
              { \dim_to_decimal_in_unit:nn {#2} {#1} }
              [ 1.0 ] { #3 #4 } \tex_hfil:D
          }
          { #3 \tl_map_inline:nn {#4} { ##1 \tex_hfil:D } \tex_unskip:D }
      }
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_box_spread:NNn,\@@_box_spread:NNv,\@@_box_spread:NNe}
%    \begin{macrocode}
\cs_new:Npn \@@_box_spread:NNn { \@@_box_spread:NNNn \l_@@_tmp_skip }
\cs_generate_variant:Nn \@@_box_spread:NNn { NNv }
\cs_generate_variant:Nn \@@_box_spread:NNn { NNe }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_box_spread_name:Nn,\@@_box_spread_name:NNn}
% ä»¥ä¸Šç›’å­åªç”¨æ¥æ‰“å° \cs[no-index]{l_@@_name_\meta{æè¿°}_tl} å˜é‡ã€‚
%    \begin{macrocode}
\cs_new_protected:Npn \@@_box_spread_name:Nn #1#2
  { \@@_box_spread:NNv #1 \c_empty_tl { l_@@_name_ #2 _tl } }
\cs_new_protected:Npn \@@_box_spread_name:NNn #1#2#3
  { \@@_box_spread:NNv #1 #2 { l_@@_name_ #3 _tl } }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_box_center:Nn}
% å±…ä¸­å¯¹é½çš„æ°´å¹³ç›’å­ã€‚
%    \begin{macrocode}
\cs_new_protected:Npn \@@_box_center:Nn #1#2
  {
    \mode_leave_vertical:
    \hbox_to_wd:nn {#1} { \tex_hfil:D #2 \tex_hfil:D }
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_box_multiline:NNNNn}
% å¤šè¡Œå›ºå®šé•¿åº¦çš„ä¸‹åˆ’çº¿å†…å®¹ã€‚
% \begin{arguments}
%   \item ç”¨äºŽå­˜å‚¨æ¡ç›®æ•°é‡çš„ |int| åž‹å˜é‡
%   \item ç”¨äºŽå­˜å‚¨æ¡ç›®å†…å®¹çš„ |tl| åž‹å˜é‡
%   \item å†…å®¹ï¼Œ|clist| åž‹å˜é‡
%   \item å®½åº¦ï¼Œ|dim| åž‹å˜é‡
%   \item æ¡ç›®æ•°é‡
% \end{arguments}
% é»˜è®¤ç»˜åˆ¶ 4 æ¡ä¸‹åˆ’çº¿ã€‚åœ¨è¯„é˜…è€…äººæ•°è¶…è¿‡ 4 äººæ—¶æ·»åŠ&nbsp;é¢å¤–çš„æ¡ç›®ã€‚
%    \begin{macrocode}
\cs_new_protected:Npn \@@_box_multiline:NNNNn #1#2#3#4#5
  {
    \int_set:Nn #1 { \int_max:nn { \clist_count:N #3 } {#5} }
    \int_step_inline:nn {#1}
      {
%    \end{macrocode}
% \changes{v1.1}{2022/11/29}{ä¿®å¤ç©ºè¿”å›žå€¼åœ¨å›½å®¶å›¾ä¹¦é¦†å°é¢å¼•å‘çš„æ­»å¾ªçŽ¯ã€‚}
% é˜²æ­¢ç©ºçš„è¿”å›žå€¼å¼•å‘æ­»å¾ªçŽ¯ã€‚
%    \begin{macrocode}
        \clist_gpop:NNF #3 #2 { \tl_set_eq:NN #2 \c_empty_tl }
        \@@_box_ulined:NN #4 #2 \tex_par:D
      }
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_box_multiline:NNn}
%    \begin{macrocode}
\cs_new:Npn \@@_box_multiline:NNn
  { \@@_box_multiline:NNNNn \l_@@_tmpa_int \l_@@_tmpa_tl }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_uline:n}
% æŒ‡å®šå®½åº¦çš„ä¸‹åˆ’çº¿ã€‚
% \begin{arguments}
%   \item å®½åº¦ï¼Œ|dim| åž‹å˜é‡
% \end{arguments}
%    \begin{macrocode}
\cs_new_protected:Npn \@@_uline:n #1
  {
    \mode_leave_vertical:
    \rule [ \l_@@_ruledpi_dim ] {#1} { \l_@@_rulehti_dim }
    \skip_horizontal:n { -#1 }
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_uuline:N}
% æŒ‡å®šå®½åº¦çš„åŒå±‚ä¸‹åˆ’çº¿ã€‚
% \begin{arguments}
%   \item å®½åº¦ï¼Œ|dim| åž‹å˜é‡
% \end{arguments}
%    \begin{macrocode}
\cs_new_protected:Npn \@@_uuline:N #1
  {
    \mode_leave_vertical:
    \rule [ \l_@@_ruledpii_dim  ] {#1} { \l_@@_rulehtii_dim }
    \skip_horizontal:n { -#1 }
    \rule [ \l_@@_ruledpiii_dim ] {#1} { \l_@@_rulehtii_dim }
    \skip_horizontal:n { -#1 }
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_get_width:Nn,\@@_get_width:NV,\@@_get_width:Nv}
% ^^A æ¥è‡ª fduthesis
% èŽ·å–æ–‡æœ¬å®½åº¦ã€‚
% \begin{arguments}
%   \item å­˜å‚¨å®½åº¦çš„ |dim| åž‹å˜é‡
%   \item æ–‡æœ¬
% \end{arguments}
% å°†å†…å®¹æ”¾å…¥ \tn{hbox} åŽè¯»å–å…¶å®½åº¦ï¼Œå­˜å…¥ |dim| åž‹å˜é‡ã€‚
%    \begin{macrocode}
\cs_new:Npn \@@_get_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_width:Nn { NV }
\cs_generate_variant:Nn \@@_get_width:Nn { Nv }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_get_max_width:NN}
% ^^A æ¥è‡ª fduthesisï¼Œè°ƒæ•´äº†å®žçŽ°æ–¹æ³•
% èŽ·å–å¤šä¸ªæ–‡æœ¬ä¸­çš„æœ€å¤§å®½åº¦ï¼Œå¹¶å­˜å…¥ |dim| åž‹å˜é‡ã€‚
% æœ¬æ¨¡æ¿ä¸­æ­¤å‡½æ•°ä»…ç”¨äºŽå¤„ç† |info| ç±»åž‹æ–‡æœ¬å˜é‡ï¼Œ
% å‡ºçŽ°åœ¨åšå£«åŽæ¨¡æ¿å°é¢ä¿¡æ¯è¡¨ã€‚
% \begin{arguments}
%   \item |dim| åž‹å˜é‡
%   \item æ–‡æœ¬ |clist|
% \end{arguments}
% å½“ \cs{l_@@_tmp_clist} éžç©ºæ—¶ï¼Œå¼¹å‡ºæœ€åŽä¸€ä¸ªå…ƒç´&nbsp;èµ‹ç»™ \cs{l_@@_tmpa_tl}ï¼Œ
% èŽ·å–å…¶é•¿åº¦åŽä¸Ž |#1| è¿›è¡Œæ¯”è¾ƒï¼ŒäºŒè€…ä¸­è¾ƒå¤§çš„é‚£ä¸€ä¸ªå°†æˆä¸º |#1| çš„æ–°å€¼ã€‚
% ä¸æ–­å¾ªçŽ¯ï¼Œç›´è‡³ \cs{l_@@_tmp_clist} ä¸ºç©ºã€‚
%    \begin{macrocode}
\cs_new:Npn \@@_get_max_width:NN #1#2
  {
    \clist_map_inline:Nn #2
      {
        \@@_get_width:Nv \l_@@_tmpa_dim { g_@@_info_ ##1 _tl }
        \dim_gset:Nn #1 { \dim_max:nn {#1} { \l_@@_tmpa_dim } }
      }
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_get_width_print:Nn,\@@_get_width_print:Nv,
%   \@@_get_width_print:Ne}
% æ¨ªè·¨æ•´é¡µçš„ä¸‹åˆ’çº¿ã€‚
% \begin{arguments}
%   \item å®½åº¦ï¼Œ|dim| åž‹å˜é‡
%   \item æ–‡æœ¬
% \end{arguments}
% å…ˆä½¿ç”¨ \cs{@@_get_width:Nn} èŽ·å–æ–‡æœ¬å†…å®¹åˆ°å³è¾¹è·çš„å®½åº¦ï¼Œ
% è¯¥å®½åº¦å­˜å‚¨åœ¨è°ƒç”¨çš„ |dim| åž‹å˜é‡ä¸­ã€‚éšåŽè¾“å‡ºæ–‡æœ¬å†…å®¹ã€‚
%    \begin{macrocode}
\cs_new_protected:Npn \@@_get_width_print:Nn #1#2
  {
    \@@_get_width:Nn #1 {#2}
    \dim_set:Nn #1 { \textwidth - #1 } #2
  }
\cs_generate_variant:Nn \@@_get_width_print:Nn { Nv }
\cs_generate_variant:Nn \@@_get_width_print:Nn { Ne }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_uline_entry:Nn}
% ç”Ÿæˆå&nbsp;æ•´é¡µå®½åº¦çš„ä¸‹åˆ’çº¿æ¡ç›®ã€‚
% \begin{arguments}
%   \item å®½åº¦ï¼Œ|dim| åž‹å˜é‡
%   \item æ–‡æœ¬
% \end{arguments}
%    \begin{macrocode}
\cs_new_protected:Npn \@@_uline_entry:Nn #1#2
  {
    \@@_get_width_print:Nv #1 { l_@@_name_ #2 _tl }
    \@@_box_ulined_info:Nn #1 {#2}
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_uline_bientry:Nn}
% ç”Ÿæˆå&nbsp;åŠé¡µå®½åº¦çš„ä¸‹åˆ’çº¿æ¡ç›®ã€‚
% \begin{arguments}
%   \item å®½åº¦ï¼Œ|dim| åž‹å˜é‡
%   \item æ–‡æœ¬
% \end{arguments}
%    \begin{macrocode}
\cs_new_protected:Npn \@@_uline_bientry:Nn #1#2
  {
    \@@_get_width_print:Nv #1 { l_@@_name_ #2 _tl }
    \dim_sub:Nn #1 { \textwidth / 2 }
    \@@_box_ulined_info:Nn #1 {#2}
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_date:www,\@@_date_en:www}
% å°†å½¢å¦‚ |yyyy-mm-dd| çš„ ISO æ—¥æœŸæ&nbsp;¼å¼å­—ç¬¦ä¸²è½¬åŒ–ä¸ºæ—¥æœŸè¡¨ç¤ºã€‚
% è¯¥æ&nbsp;¼å¼ç¬¦åˆå›½é™…æ&nbsp;‡å‡† ISO 8601 ä»¥åŠå›½å†…æ&nbsp;‡å‡† GB/T 7408--2005
% ã€Šæ•°æ®å…ƒå’Œäº¤æ¢æ&nbsp;¼å¼ ä¿¡æ¯äº¤æ¢ æ—¥æœŸå’Œæ—¶é—´è¡¨ç¤ºæ³•ã€‹ã€‚
% \begin{arguments}
%   \item å¹´ä»½
%   \item æœˆä»½
%   \item æ—¥æœŸ
% \end{arguments}
% ä¸­æ–‡æ—¥æœŸå­—æ&nbsp;·é€šè¿‡å°è£… \pkg{zhnumber} çš„å†…éƒ¨å‡½æ•°å®žçŽ°ï¼Œé»˜è®¤ä½¿ç”¨é˜¿æ‹‰ä¼¯æ•°å­—è¡¨ç¤ºï¼Œ
% å¯ä»¥é€šè¿‡è¯¥å®åŒ…æä¾›çš„ |\zhnumsetup{time=Chinese}| æ¥ä½¿ç”¨ä¸­æ–‡æ•°å­—ï¼›
% è‹±æ–‡æ—¥æœŸå­—æ&nbsp;·ç”¨äºŽç&nbsp;”ç©¶ç”Ÿè‹±æ–‡å°é¢ï¼Œæ&nbsp;¼å¼ä¸º \meta{æœˆä»½ç¼©å†™}~\meta{æ—¥},~\meta{å¹´}ã€‚
% å…¶ä¸­ï¼Œå˜é‡ç±»åž‹ |w| è¡¨æ˜Žå‚æ•°ç¬¦åˆç‰¹å®šè¯­æ³•æ&nbsp;¼å¼ï¼Œå…¶å‚æ•°å¿…é¡»ç»è¿‡å®Œå…¨å±•å¼€ã€‚
%    \begin{macrocode}
\cs_new:Npn \@@_date:www    #1-#2-#3 \q_stop
  { \__zhnum_date_aux:nnn {#1} {#2} {#3} }
\cs_new:Npn \@@_date_en:www #1-#2-#3 \q_stop
  { \clist_item:Nn \c_@@_name_month_en_clist {#2} ~#3 , ~#1  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_date:nn}
%    \begin{macrocode}
\cs_new:Npn \@@_date:nn { \@@_date:nnn { } }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_date:nnn}
% \changes{v0.20}{2022/05/24}{å¯åœ¨æ—¥æœŸé¡¹ç•™ç©ºä»¥ä½¿ç”¨ç©ºç™½çš„å¹´æœˆæ—¥å­—æ&nbsp;·ã€‚}
% ç”¨äºŽæ—¥æœŸæ&nbsp;¼å¼è½¬åŒ–çš„è¾…åŠ©å‘½ä»¤ã€‚åœ¨ä¼&nbsp;å…¥çš„å­—ç¬¦ä¸²ä¸ºç©ºæ—¶ç”Ÿæˆç©ºç™½å­—æ&nbsp;·ã€‚
%    \begin{macrocode}
\cs_new:Npn \@@_date:nnn #1#2#3
  {
    \tl_gset:cx { g_@@_info_ #2 date #1 _tl }
      {
        \tl_if_empty:nTF {#3}
          { \@@_name:n { blankdate #1 } }
          { \use:c { @@_date #1 :www } #3 \q_stop }
      }
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_at_begin_document:n}
% å°è£… \LaTeX{} çš„é’©å­ç®¡ç†æœºåˆ¶ï¼Œç­‰æ•ˆäºŽ \tn{AtBeginDocument}ã€‚
%    \begin{macrocode}
\cs_new_protected:Npn \@@_at_begin_document:n #1
  { \hook_gput_next_code:nn { begin document } {#1} }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_cs_clear:N}
% æ¸…ç©ºå‘½ä»¤ã€‚
%    \begin{macrocode}
\cs_new:Npn \@@_cs_clear:N #1 { \cs_set_eq:NN #1 \tex_relax:D }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_msg:nn}
% ç®€åŒ–æç¤ºä¿¡æ¯çš„åˆ›å»ºã€‚
%    \begin{macrocode}
\cs_new:Npn \@@_msg:nn { \msg_new:nnn { njuthesis } }
%    \end{macrocode}
% \end{macro}
%
% \subsubsection{å°é¢ç›¸å…³}
% \changes{v0.16}{2022/03/10}{å°†å°é¢å’Œæ‘˜è¦å†…éƒ¨å‡½æ•°å®šä¹‰ç§»åŠ¨åˆ°å‰éƒ¨ã€‚}
%
% \begin{macro}{\@@_loop_until:nnn}
% ç­‰æ•ˆäºŽ plain \TeX çš„ \tn{loop} å¾ªçŽ¯ï¼ŒåŽŸå§‹ç»“æž„ä¸º\\
% \tn{loop}\meta{å¾ªçŽ¯ä½“1}\meta{ç»ˆæ­¢æ¡ä»¶}\meta{å¾ªçŽ¯ä½“2}\tn{repeat}ã€‚
% \begin{arguments}
%   \item |bool| è¡¨è¾¾å¼
%   \item å¾ªçŽ¯ä½“1
%   \item å¾ªçŽ¯ä½“2
% \end{arguments}
% ä¸¤ä¸ªä»£ç&nbsp;å—äº¤æ›¿æ‰§è¡Œï¼Œå¦‚æžœåœ¨\meta{å¾ªçŽ¯ä½“1}ç»“æŸåŽæ»¡è¶³æ¡ä»¶ï¼Œåˆ™é€€å‡ºå¾ªçŽ¯ã€‚
%    \begin{macrocode}
\cs_new:Npn \@@_loop_until:nnn #1#2#3
  { #2 \bool_if:nF {#1} { #3 \@@_loop_until:nnn {#1} {#2} {#3} } }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_breakpar_loop:n}
% \changes{v1.0}{2022/08/01}{ä½¿ç”¨ \LaTeX3 è¯­æ³•é‡æž„ä¸‹åˆ’çº¿æ–­è¡Œç®—æ³•ã€‚}
% å¸¦ä¸‹åˆ’çº¿çš„è‡ªç„¶æ–­è¡Œç®—æ³•ã€‚
% \begin{arguments}
%   \item å¾ªçŽ¯ä½“2çš„é¢å¤–è¯­å¥
% \end{arguments}
%    \begin{macrocode}
\cs_new:Npn \@@_breakpar_loop:n #1
  {
    \dim_set:Nn \l_@@_tmpa_dim
      { - \tex_prevdepth:D - \l_@@_ruledpi_dim - \l_@@_rulehti_dim }
    \hbox_gset:Nn \l_@@_tmpc_box { }
    \@@_loop_until:nnn { \box_if_empty_p:N \l_@@_tmpb_box }
      {
        \box_gset_to_last:N \l_@@_tmpb_box
        \tex_unskip:D \tex_unpenalty:D
      }
      {
        \hbox_gset:Nn \l_@@_tmpc_box
          {
            \vbox_top:n
              {
                \box_use_drop:N \l_@@_tmpb_box
                \__kernel_kern:n { \l_@@_tmpa_dim }
                \tex_hrule:D
              }
            \tex_penalty:D
            \l_@@_tmpa_box
            \hbox_unpack_drop:N \l_@@_tmpc_box
          }
        #1
      }
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_breakpar_print:nn}
% æ‰“å°å¸¦ä¸‹åˆ’çº¿çš„è‡ªç„¶æ–­è¡Œç®—æ³•ç»“æžœã€‚
%    \begin{macrocode}
\cs_new:Npn \@@_breakpar_print:nn #1#2
  {
    \group_begin:
      \tex_noindent:D #1
      \hbox_unpack_drop:N \l_@@_tmpc_box #2
      \tex_par:D
    \group_end:
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_uline_title:}
% \changes{v0.17}{2022/04/09}{ä¼˜åŒ–å°é¢æ&nbsp;‡é¢˜çš„æ–­è¡Œæ–¹å¼ã€‚}
% å¤šè¡Œå¸¦ä¸‹åˆ’çº¿æ&nbsp;‡é¢˜ã€‚ä½¿ç”¨ \TeX åŽŸç”Ÿæ–­è¡Œç®—æ³•å®žçŽ°ã€‚
%    \begin{macrocode}
\cs_new_protected:Npn \@@_uline_title:
  {
    \vbox_set:Nn \l_@@_tmpa_box
      {
        \skip_set:Nn \tex_leftskip:D { .5 em plus 1 fill }
        \skip_set_eq:NN \tex_rightskip:D \tex_leftskip:D
        \g_@@_info_title_tl \tex_par:D
%    \end{macrocode}
% ä½¿ç”¨å¾ªçŽ¯å¯»æ‰¾æ–­è¡Œç‚¹ï¼Œå­˜å…¥å·²è¢«æ¸…ç©ºçš„ 3 å·ç›’å­ã€‚
%    \begin{macrocode}
        \@@_breakpar_loop:n { }
      }
%    \end{macrocode}
% è¾“å‡ºç»˜åˆ¶å¥½çš„æ&nbsp;‡é¢˜ã€‚
%    \begin{macrocode}
    \@@_breakpar_print:nn { } { }
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_cover_entry_title:NNNN,\@@_cover_entry_title:NNN}
% ç”Ÿæˆæ™®é€šå°é¢é¡µçš„æ&nbsp;‡é¢˜æ¡ç›®ï¼ŒåŒ…æ‹¬æ&nbsp;‡ç­¾å’Œæ&nbsp;‡é¢˜æœ¬èº«ã€‚
% \begin{arguments}
%   \item åˆ†éš”ç¬¦
%   \item åç§°ç›’å­å®½åº¦ï¼Œ|dim| åž‹å˜é‡
%   \item å†…å®¹ç›’å­å®½åº¦ï¼Œ|dim| åž‹å˜é‡
%   \item æ&nbsp;‡ç­¾æ&nbsp;¼å¼
% \end{arguments}
%    \begin{macrocode}
\cs_new_protected:Npn \@@_cover_entry_title:NNNN #1#2#3#4
  {
    \tl_if_empty:NT \g_@@_info_title_tl
      { \msg_error:nn { njuthesis } { missing-title } }
    \@@_box_spread_name:NNn #2 #4 { title }
    \mode_leave_vertical: #1
%    \end{macrocode}
% è¿™é‡Œéœ€è¦å­˜å‚¨ \tn{prevdepth} çš„å€¼ï¼Œä»¥ä½¿ \tn{parbox} åŽè¡Œè·æ­£ç¡®ã€‚
% \footnote{\url{https://tex.stackexchange.com/q/34971/}}
%    \begin{macrocode}
    \parbox [ t ] {#3}
      {
        \l_@@_fmt_covertitle_tl \@@_uline_title:
        \dim_gset_eq:NN \l_@@_tmpa_dim \tex_prevdepth:D
      }
    \tex_par:D
    \dim_set_eq:NN \tex_prevdepth:D \l_@@_tmpa_dim
  }
\cs_new:Npn \@@_cover_entry_title:NNN { \@@_cover_entry_title:NNNN \@@_hskip: }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_cover_entry:NNNNn,\@@_cover_entry:NNNn}
% ç”Ÿæˆå•é¡¹ä¿¡æ¯æ¡ç›®ã€‚
% \begin{arguments}
%   \item åˆ†éš”ç¬¦
%   \item åç§°ç›’å­å®½åº¦ï¼Œ|dim| åž‹å˜é‡
%   \item å†…å®¹ç›’å­å®½åº¦ï¼Œ|dim| åž‹å˜é‡
%   \item æ&nbsp;‡ç­¾æ&nbsp;¼å¼
%   \item æ¡ç›®åç§°
% \end{arguments}
%    \begin{macrocode}
\cs_new_protected:Npn \@@_cover_entry:NNNNn #1#2#3#4#5
  {
    \@@_box_spread_name:NNn #2 #4 {#5} #1
    \@@_box_ulined_info:Nn  #3    {#5} \tex_par:D
  }
\cs_new:Npn \@@_cover_entry:NNNn { \@@_cover_entry:NNNNn \@@_hskip: }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_cover_entry:NNNnn}
% ç”Ÿæˆä¸¤é¡¹ä¿¡æ¯æ¡ç›®ï¼Œä»…ç”¨äºŽæœ¬ç§‘ç”Ÿå°é¢ã€‚
% \begin{arguments}
%   \item åç§°ç›’å­å®½åº¦ï¼Œ|dim| åž‹å˜é‡
%   \item å†…å®¹ç›’å­å®½åº¦ï¼Œ|dim| åž‹å˜é‡
%   \item æ&nbsp;‡ç­¾æ&nbsp;¼å¼
%   \item å·¦ä¾§æ¡ç›®åç§°
%   \item å³ä¾§æ¡ç›®åç§°
% \end{arguments}
%    \begin{macrocode}
\cs_new_protected:Npn \@@_cover_entry:NNNnn #1#2#3#4#5
  {
    \@@_box_spread_name:NNn #1 #3 {#4} \@@_hskip:
    \@@_box_ulined_info:Nn  #2    {#4} \@@_hskip:
    \@@_box_spread_name:NNn #1 #3 {#5} \@@_hskip:
    \@@_box_ulined_info:Nn  #2    {#5} \tex_par:D
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_cover_entry_supv:NNNn}
% ç”Ÿæˆä¸¤é¡¹å¯¼å¸ˆä¿¡æ¯æ¡ç›®ï¼Œä»…ç”¨äºŽæœ¬ç§‘ç”Ÿå°é¢ã€‚
% \begin{arguments}
%   \item é•¿å†…å®¹ç›’å­å®½åº¦ï¼Œ|dim| åž‹å˜é‡
%   \item çŸ­å†…å®¹ç›’å­å®½åº¦ï¼Œ|dim| åž‹å˜é‡
%   \item æ&nbsp;‡ç­¾æ&nbsp;¼å¼
%   \item æ¡ç›®åç§°
% \end{arguments}
% |clist| æœ€åŽä¸€ä¸ªå…ƒç´&nbsp;ä¸ºç©ºæ—¶å¼¹å‡ºçš„æ˜¯æ—&nbsp;æ³•å±•å¼€çš„ \cs{q_novalue_tl}ï¼Œ
% éœ€è¦ç®€å•å¤„ç†ä»¥ä½¿ç”¨åˆ†æ•£å¯¹é½çš„ç›’å­ã€‚
%    \begin{macrocode}
\cs_new_protected:Npn \@@_cover_entry_supv:NNNn #1#2#3#4
  {
    \tl_set:Nn \l_@@_tmpa_tl
      { \clist_item:cn { g_@@_info_ #4 _clist } { 1 } }
    \tl_set:Nn \l_@@_tmpb_tl
      { \clist_item:cn { g_@@_info_ #4 _clist } { 2 } }
    \@@_box_spread_name:NNn #1 #3 {#4}        \@@_hskip:
    \@@_box_ulined:NN #2 \l_@@_tmpa_tl        \@@_hskip:
    \@@_box_spread_name:NNn #1 #3 { supvtitle } \@@_hskip:
    \@@_box_ulined:NN #2 \l_@@_tmpb_tl        \tex_par:D
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_emblem:N,\@@_name:N}
% å°è£…å›¾ç‰‡ç»˜åˆ¶å‘½ä»¤ï¼Œå‚æ•°ä¸ºå›¾ç‰‡å®½åº¦ã€‚
% æ­¤æ—¶ \tn{njuemblem}ã€\tn{njuname} å’Œç›¸å…³é•¿åº¦éƒ½æ˜¯æ²¡æœ‰å®šä¹‰çš„ã€‚
%    \begin{macrocode}
\cs_new_protected:Npn \@@_emblem:N #1
  { \njuemblem [ \l_@@_fmt_emblemcolor_tl ] {#1} { ! } }
\cs_new_protected:Npn \@@_name:N   #1
  { \njuname   [ \l_@@_fmt_namecolor_tl   ] {#1} { ! } }
%    \end{macrocode}
% \end{macro}
%
% \subsubsection{æ‘˜è¦ç›¸å…³}
%
% \begin{macro}{\@@_abs_bookmark:nn,\@@_abs_bookmark:Vn}
% \changes{v0.14}{2021/12/21}{å°†æ‘˜è¦æ’å…¥ç›®å½•ã€‚}
% ç”Ÿæˆæ‘˜è¦çš„ç›®å½•æ¡ç›®ã€‚
%    \begin{macrocode}
\cs_new_protected:Npn \@@_abs_bookmark:nn #1#2
  {
    \phantomsection
    \@@_bookmark:Nnn \g_@@_abs_showentry_bool {#1} {#2}
    \@@_chapter_header:n {#1}
  }
\cs_generate_variant:Nn \@@_abs_bookmark:nn { Vn }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_abs_title:N}
% æ‘˜è¦æ&nbsp;‡é¢˜åŒå±‚ä¸‹åˆ’çº¿æ&nbsp;¼å¼ã€‚
% \begin{arguments}
%   \item å®½åº¦ï¼Œ|dim| åž‹å˜é‡
% \end{arguments}
%    \begin{macrocode}
\cs_new_protected:Npn \@@_abs_title:N #1
  {
    \@@_get_width:NV \l_@@_tmpa_dim #1
    \@@_uuline:N     \l_@@_tmpa_dim #1
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_uline_list:NNn,\@@_uline_list:NNe}
% \changes{v0.16}{2022/03/25}{ä½¿ç”¨åŽŸç”Ÿæ–­è¡Œç®—æ³•å¤„ç†æ‘˜è¦é¡µæ&nbsp;‡é¢˜ã€‚}
% ç”¨äºŽç&nbsp;”ç©¶ç”Ÿæ‘˜è¦é¡µé¢çš„å¤šè¡Œæ&nbsp;‡é¢˜ã€‚
% \begin{arguments}
%   \item å†…å®¹
%   \item å·¦è¾¹è·
%   \item æ&nbsp;‡ç­¾
% \end{arguments}
% è¿™é‡Œè½¬åŒ–äº†ä½¿ç”¨ plain \TeX{} è¯­æ³•å®žçŽ°çš„çš„æ–­è¡Œç®—æ³•ã€‚
% \footnote{\url{https://tex.stackexchange.com/q/637861/}ï¼Œå¯¹å…¶è¯­æ³•çš„ç®€è¦ä»‹ç»å¯ä»¥å‚è€ƒ
% \href{http://petr.olsak.net/ftp/olsak/optex/tex-nutshell.pdf}{\file{tex-nutshell.pdf}}ã€‚}
%    \begin{macrocode}
\cs_new_protected:Npn \@@_uline_list:NNn #1#2#3
  {
    \vbox_set:Nn \l_@@_tmpa_box
      {
        \@@_get_width:Nn \tex_hangindent:D {#3}
        \int_set:Nn \tex_hangafter:D { -1 }
        \skip_set_eq:NN \tex_leftskip:D #2
        \skip_set_eq:NN \tex_rightskip:D \tex_leftskip:D
        \tex_noindent:D #1 \tex_par:D
%    \end{macrocode}
% ä½¿ç”¨å¾ªçŽ¯å¯»æ‰¾æ–­è¡Œç‚¹ï¼Œå­˜å…¥å·²è¢«æ¸…ç©ºçš„ 3 å·ç›’å­ï¼ŒåŒæ—¶ç»Ÿè®¡è¡Œæ•°ã€‚
%    \begin{macrocode}
        \int_gzero:N \l_@@_tmpa_int
        \@@_breakpar_loop:n { \int_gincr:N \l_@@_tmpa_int }
      }
      \@@_breakpar_print:nn {#3}
        {
%    \end{macrocode}
% åœ¨ä½¿ç”¨è‡ªç„¶æ–­è¡Œç®—æ³•åŽï¼Œç&nbsp;”ç©¶ç”Ÿçš„æ‘˜è¦æ&nbsp;‡é¢˜å¯é€‰æ‹© \opt{strict}
% æˆ–è€… \opt{natural} æ¨¡å¼ã€‚å‰è€…ä¼šä¸ºå°‘äºŽä¸¤è¡Œçš„æ&nbsp;‡é¢˜è¡¥é½ä¸‹åˆ’çº¿ï¼Œ
% å¹¶å¯¹å¤šäºŽä¸‰è¡Œçš„æ&nbsp;‡é¢˜ç”Ÿæˆè­¦å‘Šä¿¡æ¯ã€‚è¿™é‡Œé€šè¿‡è¡Œæ•°å¤„ç†è¾¹ç•Œæ¡ä»¶ï¼Œ
% åŒ…æ‹¬æ&nbsp;‡é¢˜æœªå¡«å†™ã€æ&nbsp;‡é¢˜åªæœ‰ä¸€è¡Œï¼Œä»¥åŠæ&nbsp;‡é¢˜è¿‡é•¿çš„æƒ…å†µã€‚
%    \begin{macrocode}
        \bool_if:NT \g_@@_abs_title_strict_bool
          {
            \int_case:nnF { \l_@@_tmpa_int }
              {
                { 0 } { \msg_error:nn { njuthesis } { missing-title } }
                { 1 } { \@@_uline:n { \textwidth } }
                { 2 } { }
              }
              { \msg_warning:nn { njuthesis } { abs-title-too-long } }
            \tex_par:D
          }
      }
  }
\cs_generate_variant:Nn \@@_uline_list:NNn { NNe }
%    \end{macrocode}
% \end{macro}
%
%
% \subsection{é¡µé¢å¯¹è±¡}
% \changes{v0.15}{2022/01/24}{ä½¿ç”¨ \pkg{xtemplate} é‡æž„å°é¢ã€‚}
%
% æœ¬æ¨¡æ¿ä½¿ç”¨ \pkg{xtemplate} æä¾›çš„é¢å‘å¯¹è±¡æ–¹æ³•ç®€åŒ–å°é¢å’Œæ‘˜è¦çš„ç»˜åˆ¶è¿‡ç¨‹ã€‚
%
% ä»¥ä¸‹åˆ†åˆ«ä»Žé¡µé¢å…ƒç´&nbsp;ï¼ˆelementï¼‰å’Œé¡µé¢æ•´ä½“ï¼ˆpageï¼‰çš„å±‚æ¬¡è¿›è¡Œäº†æŠ½è±¡ã€‚
% å½“æˆ‘ä»¬æŠŠé¡µé¢éƒ¨ä»¶è€ƒè™‘ä¸ºä¸€ä¸ªå¯¹è±¡æ—¶ï¼Œå®ƒå¤©ç„¶åœ°åªå…·å¤‡æœ‰é™æ•°é‡çš„å±žæ€§ï¼š
% å†…å®¹ã€æ&nbsp;¼å¼ã€è¾¹è·ã€å¯¹é½æ–¹å¼ç­‰ã€‚è€Œå…·ä½“çš„é¡µé¢æ˜¯è¿™äº›å¯¹è±¡çš„å®žä¾‹çš„é›†åˆï¼Œ
% é™„åŠ&nbsp;è¾¹è·ã€è¡Œè·ç­‰å±žæ€§ï¼Œåˆ›å»ºé¡µé¢åªéœ€ä¼&nbsp;å…¥ä¸€ä¸ªåˆ—è¡¨è°ƒç”¨å„ä¸ª Instance
% å³å¯ã€‚é€šè¿‡ \pkg{xtemplate} æä¾›çš„åŠŸèƒ½ï¼Œæˆ‘ä»¬å¯ä»¥æ&nbsp;¹æ®è¿™äº›å±žæ€§åˆ›å»ºæ¨¡æ¿
% ï¼ˆtemplateï¼‰ï¼Œè¿›è€Œèƒ½å¤§é‡æž„å»ºå…·æœ‰\emph{ç›¸ä¼¼è¡Œä¸º}çš„å®žä¾‹ï¼ˆinstanceï¼‰ã€‚
% è¿™ç§åšæ³•èƒ½å……åˆ†åˆ†ç¦»å†…å®¹å’Œæ&nbsp;·å¼ï¼Œæžå¤§ä¼˜åŒ–ä»£ç&nbsp;çš„å¯è¯»æ€§ã€‚
%
% å£°æ˜Žå¯¹è±¡ç±»åž‹ã€‚æ­¤ç±»å¯¹è±¡ä¸éœ€è¦å‚æ•°ã€‚
%    \begin{macrocode}
\DeclareObjectType { nju } { \c_zero_int }
%    \end{macrocode}
%
% \subsubsection{å…ƒç´&nbsp;æ¨¡æ¿}
% \changes{v1.0}{2022/08/02}{ä¿®æ­£å…ƒç´&nbsp;å¯¹è±¡çš„åº•éƒ¨é—´è·è®¾ç½®ã€‚}
%
%    \begin{macrocode}
%&lt;@@=njuelem&gt;
%    \end{macrocode}
%
% \begin{macro}{\@@_align:}
% å£°æ˜Žå…ƒç´&nbsp;æ¨¡æ¿æŽ¥å£ã€‚
% å…ƒç´&nbsp;æ˜¯ä¸€ä¸ªé¡µé¢çš„åŸºæœ¬ç»„æˆå•ä½ï¼ŒåŒ…æ‹¬æ–‡æ®µã€å›¾ç‰‡ç­‰ç­‰ã€‚
% ä¸€ä¸ªæŠ½è±¡çš„å…ƒç´&nbsp;åº”å½“å…·å¤‡ä»¥ä¸‹å±žæ€§ï¼š
% \begin{description}
%   \item[\opt{content}] å†…å®¹ï¼Œå³å‰¥ç¦»æ&nbsp;·å¼çš„å…ƒç´&nbsp;æœ¬èº«
%   \item[\opt{format}] æ&nbsp;¼å¼ï¼Œä¾‹å¦‚å­—å·ã€å­—ä½“
%   \item[\opt{bottom-skip}] ä¸‹é—´è·ï¼Œå³ä¸Žä¸‹ä¸€ä¸ªå…ƒç´&nbsp;çš„è·ç¦»
%   \item[\opt{align}] å¯¹é½æ–¹å¼ï¼ŒåŒ…æ‹¬å·¦å¯¹é½ã€å³å¯¹é½ã€å±…ä¸­ã€æ­£å¸¸æ®µè½
% \end{description}
%    \begin{macrocode}
\DeclareTemplateInterface { nju } { element } { \c_zero_int }
  {
    content     : tokenlist = \c_empty_tl,
    format      : tokenlist = \c_empty_tl,
    bottom-skip : skip      = \c_zero_skip,
    align       : choice { l, r, c, n } = c
  }
%    \end{macrocode}
%
% å£°æ˜Žå…ƒç´&nbsp;æ¨¡æ¿ä»£ç&nbsp;ã€‚æ¶‰åŠçš„å˜é‡å°†è¢«è‡ªåŠ¨åˆ›å»ºã€‚
%    \begin{macrocode}
\DeclareTemplateCode { nju } { element } { \c_zero_int }
  {
    content     = \l_@@_content_tl,
    format      = \l_@@_format_tl,
    bottom-skip = \l_@@_bottom_skip,
    align =
      {
        l = { \cs_set_eq:NN \@@_align: \raggedright },
        r = { \cs_set_eq:NN \@@_align: \raggedleft  },
        c = { \cs_set_eq:NN \@@_align: \centering   },
        n = { \cs_set:Nn    \@@_align: { }          }
      }
  }
  {
    \AssignTemplateKeys
    \group_begin:
      \@@_align:
      \l_@@_format_tl \l_@@_content_tl \tex_par:D
    \group_end:
    \__nju_vskip:N \l_@@_bottom_skip
  }
%    \end{macrocode}
% \end{macro}
%
% \subsubsection{é¡µé¢æ¨¡æ¿}
% \changes{v1.0}{2022/07/27}{ä¸ºé¡µé¢æ¨¡æ¿æ·»åŠ&nbsp;ä¹¦ç­¾é€‰é¡¹ã€‚}
%
%    \begin{macrocode}
%&lt;@@=njupage&gt;
%    \end{macrocode}
%
% \begin{macro}{\exp_args:NVV}
%    \begin{macrocode}
\exp_args_generate:n { NVV }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_bookmark:nn}
% å£°æ˜Žé¡µé¢æ¨¡æ¿æŽ¥å£ã€‚
% é¡µé¢æ˜¯å…ƒç´&nbsp;çš„é›†åˆã€‚ä¸€ä¸ªæŠ½è±¡çš„é¡µé¢åº”å½“å…·å¤‡ä»¥ä¸‹å±žæ€§ï¼š
% \begin{description}
%   \item[\opt{element}] åŒ…å«çš„å…ƒç´&nbsp;ï¼Œè¿™é‡Œä½¿ç”¨çš„æ˜¯åç§°åˆ—è¡¨
%   \item[\opt{prefix}] å…ƒç´&nbsp;åç§°å‰ç¼€
%   \item[\opt{format}] æ&nbsp;¼å¼ï¼Œä¾‹å¦‚è¡Œè·
%   \item[\opt{top-skip}] ä¸Šé—´è·ï¼Œå³ä¸Žé¡µé¢é¡¶éƒ¨çš„è·ç¦»
%   \item[\opt{bottom-skip}] ä¸‹é—´è·ï¼Œå³ä¸Žé¡µé¢åº•éƒ¨çš„è·ç¦»
%   \item[\opt{bm-text}] PDF ä¹¦ç­¾åç§°
%   \item[\opt{bm-name}] PDF ä¹¦ç­¾é”šç‚¹å
%   \item[\opt{bookmark}] æ·»åŠ&nbsp;ä¹¦ç­¾çš„ç±»åž‹ï¼Œåˆ†åˆ«ä¸ºç›®å½•æ¡ç›®ã€ä»… PDF ä¹¦ç­¾ã€ä¸æ˜¾ç¤ºã€‚
% \end{description}
%    \begin{macrocode}
\DeclareTemplateInterface { nju } { page } { \c_zero_int }
  {
    element     : commalist = \c_empty_clist,
    prefix      : tokenlist = \c_empty_tl,
    format      : tokenlist = \c_empty_tl,
    top-skip    : skip      = \c_zero_skip,
    bottom-skip : skip      = \c_zero_skip,
    bm-text     : tokenlist = \c_empty_tl,
    bm-name     : tokenlist = \c_empty_tl,
    bookmark    : choice { toc, pdf, none } = none
  }
%    \end{macrocode}
%
% å£°æ˜Žé¡µé¢æ¨¡æ¿ä»£ç&nbsp;ã€‚
%    \begin{macrocode}
\DeclareTemplateCode { nju } { page } { \c_zero_int }
  {
    element     = \l_@@_element_clist,
    prefix      = \l_@@_prefix_tl,
    format      = \l_@@_format_tl,
    top-skip    = \l_@@_top_skip,
    bottom-skip = \l_@@_bottom_skip,
    bm-text     = \l_@@_bm_text_tl,
    bm-name     = \l_@@_bm_name_tl,
    bookmark    =
      {
        toc  = { \cs_set_eq:NN \@@_bookmark:nn \__nju_bookmark_toc:nn },
        pdf  = { \cs_set_eq:NN \@@_bookmark:nn \__nju_bookmark_pdf:nn },
        none = { \cs_set:Nn    \@@_bookmark:nn { } }
      }
  }
  {
    \AssignTemplateKeys
    \clearpage
    \thispagestyle { empty }
%    \end{macrocode}
% ç”±äºŽèµ·å§‹ä½ç½®æ²¡æœ‰å†…å®¹ï¼Œ\tn{vspace*} ä¼šä½¿ç¬¬ä¸€ä¸ªå…ƒç´&nbsp;çš„ä½ç½®ä¸Žä¸Šè¾¹è·æœ‰ä¸€å®šè·ç¦»ã€‚
%    \begin{macrocode}
    \__nju_vskip:N \l_@@_top_skip
    \exp_args:NVV \@@_bookmark:nn
      \l_@@_bm_text_tl \l_@@_bm_name_tl
    \group_begin:
      \l_@@_format_tl
      \clist_map_inline:Nn \l_@@_element_clist
        { \UseInstance { nju } { \l_@@_prefix_tl ##1 } }
    \group_end:
    \__nju_vskip:N \l_@@_bottom_skip
  }
%    \end{macrocode}
% \end{macro}
%
% \subsubsection{å¤–éƒ¨æŽ¥å£}
%
% \begin{macro}{\@@_declare_element:nn,\@@_declare_page:nn}
% å°è£… \pkg{xtemplate} æä¾›çš„å‡½æ•°ï¼Œç®€åŒ–åˆ›å»ºå®žä¾‹çš„è¿‡ç¨‹ã€‚
% \begin{arguments}
%   \item å®žä¾‹åç§°
%   \item å‚æ•°åˆ—è¡¨
% \end{arguments}
%    \begin{macrocode}
%&lt;@@=nju&gt;
\cs_new:Npn \@@_declare_element:nn #1#2
  { \DeclareInstance { nju } {#1} { element } {#2} }
\cs_new:Npn \@@_declare_page:nn    #1#2
  { \DeclareInstance { nju } {#1} { page    } {#2} }
%    \end{macrocode}
% \end{macro}
%
%
% \subsection{æç¤ºä¿¡æ¯}
% \changes{v1.1}{2022/12/03}{æ•´ç†æç¤ºä¿¡æ¯ã€‚}
%
% æœ¬èŠ‚é›†ä¸­å®šä¹‰æ¨¡æ¿ä¸­çš„é”™è¯¯ä¿¡æ¯ã€‚
%    \begin{macrocode}
\@@_msg:nn { abs-title-too-long }
  {
    Your~ title~ seems~ too~ long~ to~ fit~ in~ two~ lines.\\
    I~ have~ drawn~ additional~ lines~ to~ contain~ it,~
    which~ will~ probably~ make~ your~ abstract~ page~
    look~ slightly~ different~ from~ the~ standard.~
    You~ can~ use~ the~ "abstract/title-style"~ key~
    to~ disable~ this~ message.
  }
\@@_msg:nn { empty-theorem-type }
  {
    Empty~ theorem~ list~ to~ define.\\
    The~ key~ "theorem/type"~ should~ not~ be~ left~ empty.
  }
\@@_msg:nn { load-config  }
  { I~ am~ loading~ config~ file~ "#1". }
\@@_msg:nn { missing-image }
  {
    You~ have~ not~ selected~ local~ files~
    for~ emblem~ and~ name~ images.\\
    It~ seems~ that~ you~ haven't~ fill~ in~ both~
    "image/nju-emblem"~ and~ "image/nju-name",~ therefore~
    I~ am~ using~ the~ package~ "njuvisual"~ instead,~
    which~ may~ slow~ down~ the~ compilation.
  }
\@@_msg:nn { missing-ntheorem }
  {
    "ntheorem"~ package~ not~ detected.\\
    The~ functionality~ of~ built-in~ theorem~ settings~
    requires~ loading~ the~ class~ with~ "ntheorem"~ option~
    set~ to~ "true".
  }
\@@_msg:nn { missing-symbol }
  {
    \string\mdwhtsquare\ and~ \string\checkmark\ are~ not~
    contained~ in~ the~ standard~ amsmath~ package.~ You~
    should~ redefine~ them~ with~ other~ packages~ loaded~
    to~ properly~ generate~ the~ declaration~ page.
  }
\@@_msg:nn { missing-title }
  {
    Thesis~ title~ should~ not~ be~ left~ blank.\\
    Please~ check~ whether~ you~ have~ fill~ in~
    both Chinese~ and~ English~ titles.
  }
\@@_msg: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.
  }
\@@_msg:nn { package-too-old }
  {
    Package~ "#1"~ is~ too~ old.\\
    The~ "njuthesis"~ class only~ supports~ "#1"~ with~
    a~ version~ higher~ than~ v#2.~
    Please~ update~ an~ up-to-date~ version~ of~ it~
    using~ your~ TeX~ package~ manager~ or~ from~ CTAN.
  }
\@@_msg:nn { package-conflict }
  {
    The~ "#2"~ package~ is~ incompatible~ with~ "#1".\\
    I~ have~ loaded~ "#1"~ by~ default.~ Maybe~ You~ should~
    refer~ to~ section~ 4~ of~ the~ documentation.
  }
\@@_msg: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.
  }
%    \end{macrocode}
%
%
% \subsection{æ¨¡æ¿é€‰é¡¹}
% \changes{v0.11}{2021/11/15}{è¿›è¡Œäº†æ•ˆçŽ‡ä¼˜åŒ–ã€‚}
%
% \begin{macro}{\@@_pass_option:nn}
% å°è£… \LaTeXe{} ä¼&nbsp;å‚å‡½æ•°ã€‚æ³¨æ„å‚æ•°é¡ºåºæœ‰å˜åŒ–ã€‚
%    \begin{macrocode}
\cs_new:Npn \@@_pass_option:nn #1#2 { \PassOptionsToClass {#2} {#1} }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_pass_option:n,\@@_pass_option:V,\@@_pass_option:e}
%    \begin{macrocode}
\cs_new:Npn \@@_pass_option:n { \@@_pass_option:nn { ctexbook } }
\cs_generate_variant:Nn \@@_pass_option:n { V }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_pass_option:}
%    \begin{macrocode}
\cs_new:Npn \@@_pass_option: { \@@_pass_option:V \l_keys_key_str }
%    \end{macrocode}
% \end{macro}
%
%    \begin{macrocode}
\keys_define:nn { nju }
  {
%    \end{macrocode}
%
% \begin{macro}{type}
% \changes{v1.0}{2022/06/30}{ä¿®æ”¹ç±»åž‹é€‰é¡¹ã€‚}
% å­¦ä½ï¼Œé»˜è®¤ä¸ºå­¦å£«ã€‚
%    \begin{macrocode}
    type               .choices:nn = { bachelor, master, doctor, postdoc }
      { \int_gset_eq:NN \g_@@_info_type_int \l_keys_choice_int },
    type               .initial:n  = bachelor,
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{degree}
% \changes{v1.0}{2022/06/30}{ä¿®æ”¹å­¦ä½é€‰é¡¹ã€‚}
% ç&nbsp;”ç©¶ç”Ÿçš„å­¦ä½ç±»åž‹ï¼Œé»˜è®¤ä¸ºå­¦æœ¯å­¦ä½ã€‚
%    \begin{macrocode}
    degree              .choice:,
    degree / academic     .code:n  =
      { \bool_gset_true:N  \g_@@_opt_academic_bool },
    degree / professional .code:n  =
      { \bool_gset_false:N \g_@@_opt_academic_bool },
    degree             .initial:n  = academic,
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{nl-cover,\g_@@_opt_nlcover_bool}
% æ˜¯å¦éœ€è¦å›½å®¶å›¾ä¹¦é¦†å°é¢ã€‚æœ¬é€‰é¡¹ä»…ç”¨äºŽç&nbsp;”ç©¶ç”Ÿæ¨¡æ¿ï¼Œé»˜è®¤å…³é—­ã€‚
% \footnote{nl ä»£è¡¨ National Libraryã€‚}
%    \begin{macrocode}
    nl-cover         .bool_gset:N  = \g_@@_opt_nlcover_bool,
    nl-cover           .initial:n  = false,
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{decl-page,\g_@@_opt_decl_bool}
% \changes{v0.13}{2021/12/15}{æ–°å¢žè¯šä¿¡æ‰¿è¯ºä¹¦é€‰é¡¹ã€‚}
% \changes{v0.14}{2022/01/06}{ä¿®æ”¹é€‰é¡¹åç§°ã€‚}
% æ˜¯å¦éœ€è¦è¯šä¿¡æ‰¿è¯ºä¹¦æˆ–åŽŸåˆ›æ€§å£°æ˜Žï¼ˆé»˜è®¤å…³é—­ï¼‰ã€‚
% \footnote{åŽŸåˆ›æ€§å£°æ˜Žçš„è‹±æ–‡ç¿»è¯‘ä¸º Declaration of Originalityï¼Œ
% ä¸ºäº†ä½¿é€‰é¡¹è¡¨ä¹‰æ›´æ¸…æ™°åŒæ—¶ç¼©å‡åç§°é•¿åº¦ï¼Œå°†å…¶ä¿®æ”¹ä¸ºâ€œå£°æ˜Žé¡µâ€è¿™ä¸€åç§°ã€‚}
%    \begin{macrocode}
    decl-page        .bool_gset:N  = \g_@@_opt_decl_bool,
    decl-page          .initial:n  = false,
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{draft}
% \changes{v0.13}{2021/12/15}{æ–°å¢žè‰ç¨¿æ¨¡å¼é€‰é¡¹ã€‚}
% \changes{v1.4}{2024/03/19}{è‰ç¨¿æ¨¡å¼é€‰é¡¹ä¸æŽ¥å—ä¼&nbsp;å…¥å€¼ã€‚}
% æ˜¯å¦å¼€å¯è‰ç¨¿æ¨¡å¼ï¼ˆé»˜è®¤å…³é—­ï¼‰ã€‚
%    \begin{macrocode}
    draft      .value_forbidden:n  = true,
    draft                 .code:n  =
      {
        \bool_gset_true:N \g_@@_opt_draft_bool
        \@@_pass_option:
      },
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{oneside,twoside}
% \changes{v0.14}{2022/01/14}{æ–°å¢žå•åŒé¢æ¨¡å¼é€‰é¡¹ã€‚}
% å•åŒé¢æ¨¡å¼ï¼ˆé»˜è®¤ä¸ºåŒé¢ï¼‰ã€‚
%    \begin{macrocode}
    oneside    .value_forbidden:n  = true,
    twoside    .value_forbidden:n  = true,
    oneside               .code:n  =
      {
        \bool_gset_false:N \g_@@_opt_twoside_bool
        \tl_gset:Nn \g_@@_name_pagemode_tl { oneside }
        \@@_pass_option:
      },
    twoside               .code:n  =
      {
        \bool_gset_true:N  \g_@@_opt_twoside_bool
        \tl_gset:Nn \g_@@_name_pagemode_tl { twoside }
        \@@_pass_option:
      },
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{anonymous}
% \changes{v0.18}{2022/04/19}{æ–°å¢žç›²å®¡æ¨¡å¼é€‰é¡¹ã€‚}
% \changes{v1.0}{2022/07/05}{é‡å‘½åç›²å®¡æ¨¡å¼é€‰é¡¹ã€‚}
% \changes{v1.4}{2024/04/19}{ç›²å®¡æ¨¡å¼é€‰é¡¹ä¸æŽ¥å—ä¼&nbsp;å…¥å€¼ã€‚}
% \begin{macro}{\g_@@_opt_anon_bool}
% ç›²å®¡æ¨¡å¼ã€‚
%    \begin{macrocode}
    anonymous  .value_forbidden:n  = true,
    anonymous        .bool_gset:N  = \g_@@_opt_anon_bool,
    anonymous          .initial:n  = false,
%    \end{macrocode}
% \end{macro}
% \end{macro}
%
% \begin{macro}{latin-font,cjk-font}
% \changes{v0.14}{2021/12/12}{ç®€åŒ–å­—ä½“é€‰é¡¹åç§°ã€‚}
% ä¸­è‹±æ–‡å­—ä½“é€‰é¡¹ã€‚\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}{latin-font,cjk-font}
% \changes{v1.4}{2023/12/15}{å¢žåŠ&nbsp;ç»Ÿä¸€çš„å­—ä½“é€‰é¡¹åç§°ã€‚}
% ä¸­è‹±æ–‡å­—ä½“é€‰é¡¹ã€‚\opt{fontset} è¿™ä¸ªåç§°å’Œ \pkg{ctex} æ˜¯ä¸€è‡´çš„ã€‚
%    \begin{macrocode}
    fontset            .choices:nn =
      { fandol, mac, macoffice, win, none }
      { \keys_set:nn { nju } { latin-font = #1, cjk-font = #1 } },
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{math-font}
% \changes{v1.0}{2022/07/02}{å¢žåŠ&nbsp;æ•°å­¦å­—åº“é€‰æ‹©åŠŸèƒ½ã€‚}
% æ•°å­¦å­—ä½“é€‰é¡¹ã€‚
% ç”± \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}{font-path}
% ç‹¬ç«‹å­—ä½“æ–‡ä»¶çš„è·¯å¾„ã€‚
%    \begin{macrocode}
    font-path             .code:n  =
      {
        \bool_gset_true:N \g_@@_font_path_bool
        \tl_gset_eq:NN \g_@@_font_path_tl \l_keys_value_tl
      },
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{zihao}
% \changes{v1.0}{2022/07/04}{æ–°å¢žå­—å·é€‰é¡¹ã€‚}
% \begin{macro}{\g_@@_opt_zihao_tl}
% å­—å·ã€‚é»˜è®¤ä¸ºå°å››å·ã€‚
%    \begin{macrocode}
    zihao                 .code:n  =
      { \@@_pass_option:n { zihao      = #1 } },
    zihao              .initial:n  = -4,
%    \end{macrocode}
% \end{macro}
% \end{macro}
%
% \begin{macro}{linespread}
% \changes{v1.0}{2022/07/04}{æ–°å¢žè¡Œè·é€‰é¡¹ã€‚}
% \begin{macro}{\g_@@_opt_linespread_tl}
% è¡Œè·ã€‚\LaTeX é»˜è®¤1.2è¡Œè·ï¼ŒMS Word é»˜è®¤è¡Œè·æ˜¯1.3ï¼Œè¦æ±‚1.5å€
% Word è¡Œè·ï¼Œæ•…é»˜è®¤å€¼ä¸º $1.5\times\frac{1.3}{1.2} = 1.625$ã€‚
% æ›´è¯¦ç»†çš„è¯´æ˜Žè¯·å‚è€ƒ \pkg{zhlineskip} å®åŒ…æ–‡æ¡£ã€‚
%    \begin{macrocode}
    linespread            .code:n  =
      { \@@_pass_option:n { linespread = #1 } },
    linespread         .initial:n  = 1.625,
%    \end{macrocode}
% \end{macro}
% \end{macro}
%
% \begin{macro}{config,\g_@@_config_clist}
% \changes{v0.16}{2022/02/23}{æ–°å¢ž \opt{config} é€‰é¡¹ã€‚}
% é…ç½®æ–‡ä»¶è·¯å¾„ã€‚
%    \begin{macrocode}
    config          .clist_gset:N  = \g_@@_config_clist
  }
%    \end{macrocode}
% \end{macro}
%
% åˆå§‹åŒ–ä¸ºåŒé¡µæ¨¡å¼ã€‚
%    \begin{macrocode}
\keys_set:nn { nju } { twoside }
%    \end{macrocode}
%
% \begin{macro}{\g_@@_name_optional_pkg_clist}
%    \begin{macrocode}
\clist_new:N \g_@@_name_optional_pkg_clist
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_define_pkg_keys:nnn}
% \begin{arguments}
%   \item å®åŒ…å
%   \item ç®€å†™åç§°ï¼Œä¸€èˆ¬ä¸ºå®åŒ…ä½¿ç”¨çš„åç©ºé—´
%   \item æ˜¯å¦é»˜è®¤è½½å…¥
% \end{arguments}
% å®šä¹‰æ˜¯å¦è½½å…¥å®åŒ…çš„çš„æ–‡æ¡£ç±»é€‰é¡¹ï¼Œä»¥åŠç›¸åº”çš„è½½å…¥å‘½ä»¤ã€‚
%    \begin{macrocode}
\cs_new_protected:Npn \@@_define_pkg_keys:nnn #1#2#3
  {
    \keys_define:nn { nju }
      {
        #1 .bool_gset:c = { g_@@_opt_load_ #2 _bool },
        #1   .initial:n = #3
      }
    \cs_new_protected:cpn { @@_loadpkg_ #2 : }
      {
        \bool_if:cT { g_@@_opt_load_ #2 _bool }
          { \RequirePackage {#1} }
      }
    \clist_gput_right:Nn \g_@@_name_optional_pkg_clist {#1}
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{
%   biblatex,
%   cleveref,
%   enumitem,
%   footmisc,
%   ntheorem,
%   unicode-math,
%   \g_@@_opt_load_blx_bool,
%   \g_@@_opt_load_cref_bool,
%   \g_@@_opt_load_nthm_bool,
%   \g_@@_opt_load_enit_bool,
%   \g_@@_opt_load_fm_bool,
%   \g_@@_opt_load_um_bool,
%   \@@_loadpkg_blx:,
%   \@@_loadpkg_cref:,
%   \@@_loadpkg_enit:,
%   \@@_loadpkg_fm:,
%   \@@_loadpkg_nthm:,
%   \@@_loadpkg_um:}
%    \begin{macrocode}
\clist_map_inline:nn
  {
    { biblatex       } { blx   } { true  },
    { cleveref       } { cref  } { true  },
    { ntheorem       } { nthm  } { true  },
    { enumitem       } { enit  } { true  },
    { footmisc       } { fm    } { true  },
    { unicode-math   } { um    } { true  }
  }
  { \@@_define_pkg_keys:nnn #1 }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{minimal}
% \changes{v1.0}{2022/08/03}{æ–°å¢žæœ€å°åŒ–è½½å…¥å®åŒ…é€‰é¡¹ã€‚}
% æœ€å°åŒ–æ¨¡å¼ï¼Œä¸è½½å…¥è¿›è¡ŒåŠŸèƒ½æ‹“å±•çš„é¢å¤–å®åŒ…ã€‚
%    \begin{macrocode}
\keys_define:nn { nju }
  {
    minimal .value_forbidden:n = true,
    minimal            .code:n =
      {
        \clist_map_inline:Nn \g_@@_name_optional_pkg_clist
          { \keys_set:nn { nju } { ##1 = false } }
        \keys_set:nn { nju } { math-font = none }
      }
  }
%    \end{macrocode}
% \end{macro}
%
% èŽ·å–è¾“å…¥çš„æ–‡æ¡£ç±»é€‰é¡¹ã€‚
%    \begin{macrocode}
\ProcessKeysOptions { nju }
%    \end{macrocode}
%
%
% \subsection{ç”¨æˆ·æŽ¥å£}
%
% \begin{macro}{abstract, anonymous-mode, bib, image, footer,
%   footnote, header, info, label-sep, listoffigures, listoftables,
%   math, style, theorem, tableofcontents}
% å®šä¹‰æ¨¡å—åçš„å…ƒï¼ˆmetaï¼‰é”®å€¼å¯¹ã€‚
%    \begin{macrocode}
\clist_map_inline:nn
  {
    abstract, anonymous-mode, bib, image, footer, footnote,
    header, info, label-sep, listoffigures, listoftables,
    math, style, theorem, tableofcontents
  }
  { \keys_define:nn { nju } { #1 .meta:nn = { nju / #1 } {##1} } }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_keys_set:nn}
%
%    \begin{macrocode}
\cs_new_eq:NN \@@_keys_set:nn \keys_set:nn
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_keys_set_anon:nn}
% \changes{v1.1}{2022/09/26}{ä½¿ç”¨ \cs{keys_set_filter:nnn} é‡æž„ç›²å®¡æ¨¡å¼ã€‚}
% åœ¨å¼€å¯ç›²å®¡æ¨¡å¼æ—¶ï¼Œå±è”½è¢«ç¼–å…¥ \opt{anonymous} åˆ†ç»„çš„é”®å€¼å¯¹è¾“å…¥ã€‚
%    \begin{macrocode}
\cs_new:Npn \@@_keys_set_anon:nn #1#2
  { \keys_set_filter:nnn {#1} { anonymous } {#2} }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\njusetup}
% \changes{v0.6}{2021/09/10}{æ”¹ç”¨é”®å€¼å¯¹è¾“å…¥ä¿¡æ¯ã€‚}
% \changes{v1.0}{2022/08/01}{å¢žåŠ&nbsp;è¾“å…¥é”®è·¯å¾„çš„å¯é€‰å‚æ•°ã€‚}
% å®šä¹‰è®¾ç½®æŽ¥å£ã€‚
% \begin{arguments}
%   \item å¯é€‰çš„é”®è·¯å¾„
%   \item è®¾ç½®é¡¹
% \end{arguments}
% \cls{njuthesis} çš„é”®å€¼å¯¹è®¾ç½®ä¸€å…±ä¸‰å±‚ï¼šæœ€å¤–å±‚ä¸ºæŒ‡ç¤ºåç©ºé—´çš„
% \opt{nju}ï¼Œç¬¬äºŒå±‚ä¸ºä¸Šæ–¹è®¾å®šçš„æ¨¡å—åç§°ï¼Œæœ€å†…å±‚ä¸ºå…·ä½“è®¾ç½®é¡¹ã€‚
% åœ¨è·¯å¾„ç•™ç©ºæ—¶ï¼Œæœ¬æŽ¥å£ä»…ä½¿ç”¨æœ€å¤–å±‚åç©ºé—´ï¼Œå‘ä¸‹å…¼å®¹æ—§ç‰ˆè®¾ç½®ï¼›
% åœ¨è·¯å¾„å¡«å…¥æ¨¡å—åæ—¶ï¼Œç¬¬äºŒä¸ªå‚æ•°ä¸ºé”®å€¼å¯¹ç±»åž‹ï¼Œå¯ä»¥å‡å°‘ä¸€å±‚ç¼©è¿›ï¼›
% åœ¨è·¯å¾„å¡«å…¥å®Œæ•´è®¾ç½®é¡¹æ—¶ï¼Œç¬¬äºŒä¸ªå‚æ•°ä¸ºå…·ä½“çš„å€¼ã€‚
%    \begin{macrocode}
\NewDocumentCommand \njusetup { o m }
  {
    \tl_if_novalue:nTF {#1}
      { \@@_keys_set:nn { nju } {#2} }
      {
        \tl_if_in:nnTF {#1} { / }
          { \@@_keys_set:nn { nju } { #1 = {#2} } }
          { \@@_keys_set:nn { nju  /  #1 } {#2}   }
      }
  }
%    \end{macrocode}
% \end{macro}
% \tn{njusetup} ä»…èƒ½åœ¨å¯¼è¨€åŒºä½¿ç”¨ã€‚
%    \begin{macrocode}
\@onlypreamble \njusetup
%    \end{macrocode}
%
% \begin{macro}{\njusetformat}
% \changes{v0.17}{2022/04/09}{æä¾›ä¿®æ”¹é»˜è®¤æ&nbsp;·å¼çš„æŽ¥å£ã€‚}
% \changes{v0.19}{2022/05/11}{æä¾›é»˜è®¤é¡µé¢æ&nbsp;·å¼çš„ä¿®æ”¹æ–¹å¼ã€‚}
% \changes{v0.20}{2022/05/25}{æä¾›é¡µçœ‰é¡µè„šæ&nbsp;·å¼çš„ä¿®æ”¹æ–¹å¼ã€‚}
% \changes{v0.20}{2022/05/25}{æä¾›å†…ç½®æ&nbsp;¡åæ&nbsp;¡å¾½é¢œè‰²çš„ä¿®æ”¹æ–¹å¼ã€‚}
% å®šä¹‰ä¿®æ”¹é»˜è®¤æ&nbsp;·å¼çš„æŽ¥å£ã€‚
%    \begin{macrocode}
\NewDocumentCommand \njusetformat { m m }
  { \@@_define_fmt:nn {#1} {#2} }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\njusetlength,\njusetlength*}
% \changes{v0.17}{2022/04/09}{æä¾›ä¿®æ”¹é•¿åº¦å€¼çš„æŽ¥å£ã€‚}
% \changes{v0.18}{2022/04/20}{ç»Ÿä¸€ç®¡ç†æ&nbsp;¡åæ&nbsp;¡å¾½å°ºå¯¸ã€‚}
% å®šä¹‰ä¿®æ”¹é•¿åº¦å€¼çš„æŽ¥å£ã€‚å¯é€‰æ˜Ÿå·è¡¨ç¤ºä¿®æ”¹å¼¹æ€§é•¿åº¦ã€‚
%    \begin{macrocode}
\NewDocumentCommand \njusetlength { s m m }
  {
    \bool_if:nTF {#1}
      { \skip_gset:cn { l_@@_ #2 _skip } {#3} }
      { \dim_gset:cn  { l_@@_ #2 _dim  } {#3} }
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\njusetname,\njusetname*,\njusettext,\njusettext*}
% \changes{v0.17}{2022/04/01}{æä¾›ä¿®æ”¹å›ºå®šæ–‡æœ¬çš„æŽ¥å£ã€‚}
% \changes{v1.1}{2022/12/12}{ä¿®å¤ \tn{njusetname} å’Œ \tn{njusettext} çš„å¯é€‰å‚æ•°é—®é¢˜ã€‚}
% å®šä¹‰ä¿®æ”¹å›ºå®šæ–‡æœ¬çš„æŽ¥å£ã€‚
%    \begin{macrocode}
\NewDocumentCommand \njusetname { s m O{} m }
  { \@@_set_tokenlist:nnnnn {#1} {#2} {#3} {#4} { name } }
\NewDocumentCommand \njusettext { s m O{} m }
  { \@@_set_tokenlist:nnnnn {#1} {#2} {#3} {#4} { text } }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_set_tokenlist:nnnnn}
% ç”¨äºŽä¿®æ”¹åç§°ã€æ–‡å­—å¸¸é‡çš„è¾…åŠ©å‡½æ•°ã€‚
% \begin{arguments}
%   \item æ˜¯å¦å«æœ‰å¯é€‰æ˜Ÿå·ï¼Œä¼&nbsp;å…¥ |bool| åž‹å˜é‡
%   \item è¢«ä¿®æ”¹å˜é‡åç§°
%   \item å¯é€‰çš„å˜ä½“ï¼Œç”¨å­—æ¯æ&nbsp;‡è®°
%   \item ä¿®æ”¹åŽçš„å†…å®¹
%   \item ç±»åˆ«ï¼Œname æˆ–è€… text
% \end{arguments}
%    \begin{macrocode}
\cs_new_protected:Npn \@@_set_tokenlist:nnnnn #1#2#3#4#5
  {
    \bool_if:nTF {#1}
      { \tl_set_eq:NN \l_@@_tmpb_tl \l_@@_name_suffix_en_tl }
      { \tl_clear:N   \l_@@_tmpb_tl }
    \tl_gset:cn { l_@@_ #5 _ #2 #3 \l_@@_tmpb_tl _tl } {#4}
  }
%    \end{macrocode}
% \end{macro}
%
%
% \subsection{å¤–éƒ¨å®åŒ…}
%
% \subsubsection{é»˜è®¤é€‰é¡¹}
%
% \changes{v0.12}{2021/12/07}{é‡æ–°ç»„ç»‡å®åŒ…è½½å…¥é¡ºåºã€‚}
% å°†é€‰é¡¹ä¼&nbsp;å…¥ \cls{ctexbook} æ–‡æ¡£ç±»ã€‚
%    \begin{macrocode}
\@@_pass_option:n
  {
    a4paper,
    UTF8,
    scheme = chinese,
%    \end{macrocode}
% é»˜è®¤ä¸è½½å…¥ä»»ä½•å­—ä½“ï¼Œä¾›æœ¬æ¨¡æ¿è‡ªè¡Œè®¾ç½®ã€‚
%    \begin{macrocode}
    fontset    = none
  }
%    \end{macrocode}
%
% ä¼&nbsp;å…¥å„å®åŒ…é€‰é¡¹ã€‚
%    \begin{macrocode}
\clist_map_inline:nn
  {
%    \end{macrocode}
% éšè— |does not contain script "CJK"| è­¦å‘Šã€‚
%    \begin{macrocode}
%     { quiet   } { xeCJK    },
    { no-math } { fontspec },
    { perpage } { footmisc },
    { capitalise, nameinlink, noabbrev } { cleveref },
%    \end{macrocode}
% \pkg{ntheorem} ä¾èµ– \pkg{amsthm} å’Œ \pkg{thmmarks} å®žçŽ° QED ç¬¦å·ç­‰åŠŸèƒ½ã€‚
%    \begin{macrocode}
    { amsmath, thmmarks, noconfig      } { ntheorem }
  }
  { \PassOptionsToPackage #1 }
%    \end{macrocode}
%
% \subsubsection{è½½å…¥æ–‡æ¡£ç±»}
%
% ä½¿ç”¨\pkg{ctexbook}ä½œä¸ºåŸºç¡€æ–‡æ¡£ç±»ã€‚
%    \begin{macrocode}
\LoadClass { ctexbook } [ 2018/04/01 ]
%    \end{macrocode}
%
% \subsubsection{è½½å…¥å®åŒ…}
%
% \changes{v0.14}{2021/12/21}{ç§»é™¤ \pkg{hologo}ã€‚}
% \changes{v0.15}{2022/01/17}{ç§»é™¤ \pkg{url}ã€‚}
% \changes{v0.13}{2021/12/13}{ä½¿ç”¨ \pkg{ntheorem} åˆ›å»ºå®šç†çŽ¯å¢ƒï¼Œ
%   ç§»é™¤ \pkg{amsthm} å’Œ \pkg{thmtools}ã€‚}
% \changes{v0.16}{2022/03/19}{ä¸æ˜¾å¼è½½å…¥ \pkg{amsmath}ã€‚}
% \changes{v0.18}{2022/04/20}{ä¸å¼ºåˆ¶è½½å…¥ \pkg{ntheorem}ã€‚}
% \changes{v1.0}{2022/07/03}{ç§»é™¤ \pkg{mathtools}ã€‚}
% \changes{v1.0}{2022/08/03}{é€‰æ‹©æ€§è½½å…¥ \pkg{ntheorem}ã€‚}
%
%    \begin{macrocode}
\@@_loadpkg_enit:
\@@_loadpkg_fm:
%    \end{macrocode}
% ä¸ºä¿è¯ \pkg{cleveref} åœ¨ \pkg{unicode-math}
% ç¼ºå¤±çš„æƒ…å†µä¸‹ä¹Ÿèƒ½æ­£å¸¸å·¥ä½œï¼Œè½½å…¥äº† \pkg{amsmath}ã€‚
%    \begin{macrocode}
\bool_if:NTF \g_@@_opt_load_um_bool
  { \RequirePackage { unicode-math } }
  {
    \RequirePackage { amsmath }
    \bool_if:NT \g_@@_opt_decl_bool
      {
        \msg_warning:nn { njuthesis } { missing-symbol }
        \cs_new:Npn \mdwhtsquare { }
        \cs_new:Npn \checkmark { }
      }
  }
%    \end{macrocode}
%
% è½½å…¥å„ç§å®åŒ…ã€‚
%    \begin{macrocode}
\RequirePackage
  {
    geometry,
    fancyhdr,
    setspace,
%    \end{macrocode}
% \changes{v0.14}{2021/12/21}{ç§»é™¤å†…ç½®çš„ \pkg{multirow}ã€\pkg{subcaption}
%   å’Œ \pkg{wrapfig}ã€‚}
% å›¾ç‰‡ä¸Žè¡¨æ&nbsp;¼ã€‚
%    \begin{macrocode}
    booktabs,
    caption,
    graphicx,
  }
\@@_loadpkg_nthm:
%    \end{macrocode}
% \pkg{hyperref} è¦†å†™äº†å¤§é‡å‘½ä»¤ï¼Œå›&nbsp;æ­¤éœ€è¦åœ¨å…¶ä»–åŒ…æœ€åŽè½½å…¥ã€‚
%    \begin{macrocode}
\RequirePackage { hyperref }
%    \end{macrocode}
%
% \changes{v1.3}{2024/01/16}{è°ƒæ•´ \pkg{cleveref} åˆ° \pkg{ntheorem} åŽè½½å…¥ã€‚}
% \pkg{cleveref} éœ€è¦åœ¨ \pkg{ntheorem} å’Œ \pkg{hyperref} åŽè½½å…¥ã€‚
%    \begin{macrocode}
\@@_loadpkg_cref:
%    \end{macrocode}
%
% åœ¨åŒé¢æ¨¡å¼ä¸‹ï¼Œä½¿ç”¨ \pkg{emptypage} æ¸…é™¤ç©ºç™½é¡µçš„é¡µçœ‰ã€é¡µè„šå’Œé¡µç&nbsp;ã€‚
%    \begin{macrocode}
\bool_if:NT \g_@@_opt_twoside_bool { \RequirePackage { emptypage } }
%    \end{macrocode}
%
% \changes{v0.13}{2021/12/13}{ç§»é™¤ä¼šä¸Ž \pkg{ntheorem} å†²çªçš„ \pkg{microtype}ã€‚}
% \begin{macro}{\njuline}
% é’ˆå¯¹ç¼–è¯‘å¼•æ“Žï¼Œä½¿ç”¨ä¸åŒçš„å®åŒ…æž„å»ºå¯ä»¥å¯¹ä¸­æ–‡æ­£å¸¸æ¢è¡Œçš„ä¸‹åˆ’çº¿å‘½ä»¤ã€‚
%    \begin{macrocode}
\sys_if_engine_xetex:T
  {
    \RequirePackage { xeCJKfntef }
    \cs_new_eq:NN \njuline \CJKunderline
  }
%    \end{macrocode}
% \pkg{lua-ul} ä¸­éœ€è¦åœ¨ç»“å°¾ä½¿ç”¨ \tn{null} ä¿æŠ¤å°¾éƒ¨ç©ºç™½ã€‚
%    \begin{macrocode}
\sys_if_engine_luatex:T
  {
    \RequirePackage { lua-ul }
    \NewDocumentCommand \njuline { m } { \underLine {#1} \@@_null: }
  }
%&lt;/class&gt;
%    \end{macrocode}
% \end{macro}
%
% ä½¿ç”¨ \pkg{tabularray} ç»˜åˆ¶ç&nbsp;”ç©¶ç”Ÿçš„å‡ºç‰ˆæŽˆæƒä¹¦ã€‚
%    \begin{macrocode}
%&lt;def-g&gt;\bool_if:NT \g_@@_opt_decl_bool { \RequirePackage { tabularray } }
%    \end{macrocode}
%
% \subsubsection{æ£€æŸ¥å®åŒ…}
%
% \begin{macro}{\@@_check_pkg_version:nnn}
% æ£€æŸ¥å®åŒ…ç‰ˆæœ¬æ˜¯å¦è¿‡æ—¶ã€‚
%    \begin{macrocode}
%&lt;*class&gt;
\cs_new:Npn \@@_check_pkg_version:nnn #1#2#3
  {
    \@ifpackagelater {#1} {#2}
      { } { \msg_error:nnnn { njuthesis } { package-too-old } {#1} {#3} }
  }
%    \end{macrocode}
% \end{macro}
%
% æ£€æŸ¥ç»˜åˆ¶ä¸‹åˆ’çº¿æ‰€éœ€çš„ \pkg{luatexja} åŒ…ç‰ˆæœ¬ã€‚è¯¥å®åŒ…åœ¨ 2021-09-18 çš„æ›´æ–°
% è§£å†³äº†ä¸‹åˆ’çº¿ä¸­æ–­é—®é¢˜ï¼Œç„¶è€Œåœ¨ 2021-10-24 çš„æ›´æ–°æ‰æä¾›äº†æ­£ç¡®çš„å†…åµŒæ—¥æœŸã€‚
%    \begin{macrocode}
\sys_if_engine_luatex:T
  { \@@_check_pkg_version:nnn { luatexja } { 2021/10/24 } { 20211024.0 } }
%    \end{macrocode}
%
% \changes{v0.18}{2022/04/28}{å¢žåŠ&nbsp;å®åŒ…å†²çªæ£€æŸ¥ã€‚}
% \changes{v1.0}{2022/08/03}{ç§»é™¤ \pkg{filehook}ï¼Œæ”¹ç”¨ \pkg{ctex} å†…ç½®çš„å®åŒ…é’©å­ã€‚}
%
% \begin{macro}{\@@_check_pkg_conflict:nn}
% æ£€æŸ¥ç”¨æˆ·è½½å…¥çš„å®åŒ…æ˜¯å¦ä¼šä¸Žé¢„ç½®å®åŒ…å‘ç”Ÿå†²çªã€‚
% \begin{arguments}
%   \item æ¨¡æ¿è½½å…¥çš„å®åŒ…
%   \item äº§ç”Ÿå†²çªçš„å®åŒ…
% \end{arguments}
%    \begin{macrocode}
\cs_new:Npn \@@_check_pkg_conflict:nn #1#2
  {
    \ctex_at_begin_package:nn {#2}
      { \msg_warning:nnnn { njuthesis } { package-conflict } {#1} {#2} }
  }
%    \end{macrocode}
% \end{macro}
%
% æ£€æŸ¥æ•°å­¦å®åŒ…å†²çªã€‚
%    \begin{macrocode}
\bool_if:NT \g_@@_opt_load_um_bool
  {
    \clist_map_inline:nn
      {
        amscd, amsfonts, amssymb, bbm, bm, eucal,
        eufrak, mathrsfs, newtxmath, upgreek
      }
      { \@@_check_pkg_conflict:nn { unicode-math } {#1} }
  }
%    \end{macrocode}
%
% \subsection{é…ç½®æ–‡ä»¶}
%
% \cls{njuthesis} åŒ…å«ä¸‰å¥—åŒºåˆ«è¾ƒå¤§çš„æ¨¡æ¿é…ç½®ï¼Œåˆ†åˆ«é€‚ç”¨äºŽ\emph{æœ¬ç§‘ç”Ÿ}ã€
% \emph{ç&nbsp;”ç©¶ç”Ÿ}å’Œ\emph{åšå£«åŽ}ã€‚å‡ºäºŽå®šä¹‰çš„ç®€æ´èµ·è§ï¼Œæœ¬æ¨¡æ¿å°†å…¶ä¸åŒä¹‹å¤„
% æ‹†åˆ†ä¸ºå•ç‹¬çš„å‚æ•°é…ç½®æ–‡ä»¶ï¼Œç¼–è¯‘è¿‡ç¨‹ä¸­å°†ä¼šæ&nbsp;¹æ®å¯¼è¨€åŒºè®¾ç½®çš„ç±»åž‹é€‰é¡¹ï¼Œè½½
% å…¥å¯¹åº”é»˜è®¤é…ç½®ã€‚æ³¨æ„ï¼Œå°½ç®¡åœ¨æ‰‹å†Œä¸­å°é¢ã€æ‘˜è¦ã€å¸¸é‡ç­‰çš„ä»£ç&nbsp;å®žçŽ°ä½äºŽé&nbsp;
% åŽéƒ¨åˆ†ï¼Œæ‹†åˆ†åŽå®žé™…ä¸Šæ˜¯åœ¨æ­¤å¤„è½½å…¥è¿è¡Œçš„ï¼ŒåŠ¡å¿…è¦æ³¨æ„å¤„ç†çš„é€»è¾‘é¡ºåºã€‚
%    \begin{macrocode}
\exp_args:Ne \file_input:n
  {
    njuthesis-
    \int_case:nn { \g_@@_info_type_int }
      {
        { 1 } { undergraduate }
        { 2 } { graduate      }
        { 3 } { graduate      }
        { 4 } { postdoctoral  }
      }
    .def
  }
%    \end{macrocode}
%
% è½½å…¥ç”¨æˆ·è®¾ç½®ï¼Œå¯ç”¨äºŽå¯¹æ¨¡æ¿åšé¢å¤–ä¿®æ”¹ã€‚
%    \begin{macrocode}
\clist_map_inline:Nn \g_@@_config_clist
  {
    \msg_info:nnn { njuthesis } { load-config } {#1}
    \file_input:n {#1}
  }
%    \end{macrocode}
%
%
% \subsection{ä¸ªäººä¿¡æ¯}
% \changes{v0.11}{2021/10/01}{å°†ä¸ªäººä¿¡æ¯å˜é‡åæ”¹ä¸ºå°å†™å­—æ¯åŠ&nbsp;è¿žå­—ç¬¦çš„å½¢å¼ã€‚}
% \changes{v0.15}{2022/01/22}{å°†ä¸ªäººä¿¡æ¯è®¾ç½®ç§»åˆ°è½½å…¥å®åŒ…åŽã€‚}
%
%    \begin{macrocode}
\keys_define:nn { nju / info }
  {
%    \end{macrocode}
%
% \begin{macro}{info/title,info/title*}
% \changes{v0.13}{2021/12/12}{ç®€åŒ–å¤šè¡Œæ&nbsp;‡é¢˜çš„è¾“å…¥æ–¹å¼ã€‚}
% \changes{v0.14}{2022/01/14}{å°†æ&nbsp;‡é¢˜æ–­è¡ŒæŽ§åˆ¶ç¬¦ä¿®æ”¹ä¸º |\\|ã€‚}
% é¢˜ç›®ã€‚ä¸­æ–‡é¢˜ç›®å¯ä½¿ç”¨ |\\| æ‰‹åŠ¨æ–­è¡Œã€‚ä»¥ä¸‹æ&nbsp;‡æ³¨æ˜Ÿå·ï¼ˆ|*|ï¼‰çš„çš†ä¸ºå¯¹åº”çš„è‹±æ–‡å­—æ®µã€‚
%    \begin{macrocode}
    title              .tl_gset:N = \g_@@_info_title_tl             ,
    title              .initial:n = { ç©º }                            ,
    title*             .tl_gset:N = \g_@@_info_title_en_tl          ,
    title*             .initial:n = { Empty }                         ,
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{info/keywords,info/keywords*}
% \changes{v0.11}{2021/10/01}{ä¿®æ”¹äº†æ·»åŠ&nbsp;å…³é”®è¯çš„æ–¹å¼ã€‚}
% å…³é”®è¯åˆ—è¡¨ã€‚
%    \begin{macrocode}
    keywords        .clist_gset:N = \g_@@_info_keywords_clist       ,
    keywords*       .clist_gset:N = \g_@@_info_keywords_en_clist    ,
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{info/grade,info/student-id,info/author,info/author*}
% å¹´çº§ã€å­¦å·ã€å§“åã€‚
%    \begin{macrocode}
    grade              .tl_gset:N = \g_@@_info_grade_tl             ,
    student-id         .tl_gset:N = \g_@@_info_id_tl                ,
    author             .tl_gset:N = \g_@@_info_author_tl            ,
    author*            .tl_gset:N = \g_@@_info_author_en_tl         ,
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{info/department,info/department*,
%   info/major*,info/field,info/field*}
% é™¢ç³»ã€ä¸“ä¸šã€æ–¹å‘ã€‚
%    \begin{macrocode}
    department         .tl_gset:N = \g_@@_info_dept_tl              ,
    department*        .tl_gset:N = \g_@@_info_dept_en_tl           ,
    major*             .tl_gset:N = \g_@@_info_major_en_tl          ,
    field              .tl_gset:N = \g_@@_info_field_tl             ,
    field*             .tl_gset:N = \g_@@_info_field_en_tl          ,
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{info/major}
% \changes{v1.3}{2023/05/11}{ä¸“ä¸šåž‹ç&nbsp;”ç©¶ç”Ÿå°é¢å¯é¢å¤–ä¿®æ”¹ä¸“ä¸šåç§°ã€‚}
% \changes{v1.3}{2023/12/05}{è°ƒæ•´ä¸“ä¸šåž‹å­¦ä½çš„å¡«å†™æ–¹å¼ã€‚}
% ä¸“ä¸šã€‚ç&nbsp;”ç©¶ç”Ÿä¸“ä¸šåž‹å­¦ä½å¯ä»¥å–å°é¢å’Œæ‘˜è¦çš„ä¸¤ä¸ªå€¼ï¼Œæ­¤å¤–éƒ½å–ç¬¬ä¸€ä¸ªå€¼ã€‚
%    \begin{macrocode}
    major                 .code:n =
      {
        \bool_if:NTF \g_@@_opt_academic_bool
          {
            \clist_pop:NN  \l_keys_value_tl \l_@@_tmpa_tl
            \tl_gset_eq:NN \g_@@_info_major_tl \l_@@_tmpa_tl
          }
          {
            \clist_pop:NN  \l_keys_value_tl \l_@@_tmpa_tl
            \tl_gset_eq:NN \g_@@_info_majorc_tl \l_@@_tmpa_tl
            \clist_pop:NNTF \l_keys_value_tl \l_@@_tmpa_tl
              { \tl_gset_eq:NN \g_@@_info_major_tl \l_@@_tmpa_tl }
              { \tl_gset_eq:NN \g_@@_info_major_tl \g_@@_info_majorc_tl }
          }
      },
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{info/supervisor,info/supervisor*}
% \changes{v0.13}{2021/12/11}{ä¿®æ”¹äº†å¯¼å¸ˆé€‰é¡¹çš„å˜é‡åç§°ã€‚}
% \changes{v0.14}{2022/01/12}{ç²¾ç®€å¯¼å¸ˆä¿¡æ¯é€‰é¡¹ã€‚}
% å¯¼å¸ˆä¿¡æ¯ã€‚ä¸­æ–‡å¯¼å¸ˆå…¨ç§°ä½¿ç”¨ |clist| å­˜å‚¨ï¼Œä¾¿äºŽåœ¨æœ¬ç§‘ç”Ÿå°é¢ä¸­è¿›è¡Œåˆ†å‰²ã€‚
%    \begin{macrocode}
    supervisor      .clist_gset:N = \g_@@_info_supv_clist           ,
    supervisor*        .tl_gset:N = \g_@@_info_supv_en_tl           ,
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{info/supervisor-ii,info/supervisor-ii*}
% ç¬¬äºŒå¯¼å¸ˆä¿¡æ¯ã€‚
%    \begin{macrocode}
    supervisor-ii   .clist_gset:N = \g_@@_info_supvii_clist         ,
    supervisor-ii*     .tl_gset:N = \g_@@_info_supvii_en_tl         ,
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{info/chairman,info/reviewer}
% ç­”è¾©å§”å‘˜ä¼šä¿¡æ¯ã€‚
%    \begin{macrocode}
    chairman           .tl_gset:N = \g_@@_info_chairman_tl          ,
    reviewer        .clist_gset:N = \g_@@_info_reviewer_clist       ,
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{info/clc,info/udc}
% åˆ†ç±»å·ã€‚
%    \begin{macrocode}
    clc                .tl_gset:N = \g_@@_info_clc_tl               ,
    udc                .tl_gset:N = \g_@@_info_udc_tl               ,
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{info/secret-level}
% å¯†çº§ã€‚
%    \begin{macrocode}
    secret-level       .tl_gset:N = \g_@@_info_secretlv_tl          ,
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{info/supervisor-contact}
% å¯¼å¸ˆè”ç³»æ–¹å¼ã€‚
%    \begin{macrocode}
    supervisor-contact .tl_gset:N = \g_@@_info_supvcont_tl          ,
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{info/email}
% \changes{v0.14}{2022/01/12}{æ–°å¢žç”µé‚®åœ°å€è®¾ç½®é¡¹ã€‚}
% ç”¨äºŽå­¦ä½è®ºæ–‡å‡ºç‰ˆæŽˆæƒä¹¦çš„ç”µå­é‚®ä»¶åœ°å€ã€‚
%    \begin{macrocode}
    email              .tl_gset:N = \g_@@_info_email_tl             ,
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{info/school-code}
% \changes{v1.2}{2023/04/27}{æ–°å¢žå­¦æ&nbsp;¡ä»£ç&nbsp;è®¾ç½®é¡¹ã€‚}
% å­¦æ&nbsp;¡ä»£ç&nbsp;ã€‚
%    \begin{macrocode}
    school-code        .tl_gset:N = \g_@@_info_code_tl              ,
    school-code        .initial:n = { 10284 }                       ,
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{info/degree,info/degree*}
% \changes{v1.2}{2023/04/24}{æ–°å¢žå­¦ä½åç§°è®¾ç½®é¡¹ã€‚}
% è¦†ç›–é¢„å®šä¹‰çš„å­¦ä½å­—æ®µã€‚
%    \begin{macrocode}
    degree             .tl_gset:N = \g_@@_info_degree_tl            ,
    degree*            .tl_gset:N = \g_@@_info_degree_en_tl         ,
%    \end{macrocode}
% \end{macro}
%
% æäº¤æ—¥æœŸï¼Œåˆå§‹å€¼ä¸ºç¼–è¯‘å½“å¤©æ—¥æœŸã€‚
%    \begin{macrocode}
  }
%    \end{macrocode}
%
% \changes{v1.3}{2023/05/18}{æ—¥æœŸå­—æ®µç›´æŽ¥åœ¨è¾“å…¥é”®å€¼æ—¶å¤„ç†ã€‚}
%
% \begin{macro}{info/submit-date}
% \changes{v0.14}{2022/01/14}{ç²¾ç®€æäº¤æ—¥æœŸé€‰é¡¹ã€‚}
% \begin{macro}{info/defend-date}
% \changes{v0.14}{2022/01/14}{ç²¾ç®€ç­”è¾©æ—¥æœŸé€‰é¡¹ã€‚}
% \begin{macro}{info/confer-date}
% \changes{v0.19}{2022/05/23}{æ–°å¢žå›½å®¶å›¾ä¹¦é¦†å°é¢çš„å­¦ä½æŽˆäºˆæ—¥æœŸè®¾ç½®é¡¹ã€‚}
% \begin{macro}{info/bottom-date}
% \changes{v0.19}{2022/05/23}{æ–°å¢žå›½å®¶å›¾ä¹¦é¦†å°é¢çš„åº•éƒ¨æ—¥æœŸè®¾ç½®é¡¹ã€‚}
% \begin{variable}{\g_@@_info_submitdate_tl,\g_@@_info_defenddate_tl,
%   \g_@@_info_bottomdate_tl,\g_@@_info_conferdate_tl}
% æ—¥æœŸã€‚
%    \begin{macrocode}
\clist_map_inline:nn { submit, defend, confer, bottom }
  {
    \keys_define:nn { nju / info }
      {
        #1-date    .code:n = \@@_date:nn {#1} {##1},
        #1-date .initial:V = \c_@@_name_today_tl
      }
  }
%    \end{macrocode}
% \end{variable}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
%
% å°†æŒ‡å®šä¿¡æ¯é¡¹å½’å…¥ \opt{anonymous} ç»„ï¼Œä»¥åœ¨ç›²å®¡æ¨¡å¼ä¸‹é€‰æ‹©æ€§å±è”½ã€‚
%    \begin{macrocode}
\clist_map_inline:Nn \c_@@_name_anon_clist
  { \keys_define:nn { nju / info } { #1   .groups:n = { anonymous } } }
\clist_map_inline:Nn \c_@@_name_anon_en_clist
  { \keys_define:nn { nju / info } { #1 * .groups:n = { anonymous } } }
%    \end{macrocode}
%
% \changes{v0.15}{2022/01/22}{æ­£ç¡®å¤„ç†åŒå¯¼å¸ˆä¿¡æ¯ã€‚}
% \changes{v1.1}{2022/11/04}{ä¿®å¤ç&nbsp;”ç©¶ç”Ÿæ¨¡æ¿å°é¢çš„å¯¼å¸ˆä¿¡æ¯å±…ä¸­é—®é¢˜ã€‚}
% åœ¨å¯¼è¨€åŒºå½•å…¥ç”¨æˆ·ä¿¡æ¯åŽè¿›è¡Œå˜é‡è®¾ç½®ã€‚æ­¤å¤„ä½¿ç”¨åˆ°äº† \pkg{ctex} æä¾›çš„å‘½ä»¤ï¼Œ
% åº”å½“ä½äºŽè½½å…¥æ–‡æ¡£ç±»ä¹‹åŽã€‚
%    \begin{macrocode}
\@@_at_begin_document:n
  {
%    \end{macrocode}
% æ‹¼åˆåŒå¯¼å¸ˆçš„å§“åå’ŒèŒç§°ã€‚
%    \begin{macrocode}
    \tl_gset:Ne \g_@@_info_supvfull_tl
      { \clist_use:Nn \g_@@_info_supv_clist { \@@_quad: } }
    \clist_if_empty:NF \g_@@_info_supvii_clist
      {
        \bool_gset_true:N \g_@@_opt_supvii_bool
        \tl_gput_right:Ne \g_@@_info_supvfull_tl
          { \@@_quad: \clist_use:Nn \g_@@_info_supvii_clist { \@@_quad: } }
      }
    \tl_gset_eq:NN \g_@@_info_supvfull_en_tl \g_@@_info_supv_en_tl
    \tl_if_empty:NF \g_@@_info_supvii_en_tl
      {
        \tl_gput_right:Ne \g_@@_info_supvfull_en_tl
          { \@@_quad: \g_@@_info_supvii_en_tl }
      }
  }
%&lt;/class&gt;
%    \end{macrocode}
%
% \begin{variable}{\g_@@_info_submitdate_en_tl}
% ç&nbsp;”ç©¶ç”Ÿå°é¢é¢å¤–éœ€è¦è‹±æ–‡æ—¥æœŸã€‚
%    \begin{macrocode}
%&lt;*def-g&gt;
\cs_set:Npn \@@_date:nn #1#2
  { \@@_date:nnn { } {#1} {#2} \@@_date:nnn { _en } {#1} {#2} }
%    \end{macrocode}
% \end{variable}
%
% \begin{variable}{\g_@@_info_confer_tl}
%    \begin{macrocode}
\tl_new:N  \g_@@_info_confer_tl
\tl_gset:Nn \g_@@_info_confer_tl
  {
    \textbf { \l_@@_name_nju_tl } \hfil
    \g_@@_info_conferdate_tl
  }
%    \end{macrocode}
% \end{variable}
%
% \changes{v0.16}{2022/03/06}{æ­£ç¡®å¤„ç†å­¦ä½å’Œç±»åž‹ä¿¡æ¯ã€‚}
% è®¾ç½®å­¦ä½ä¿¡æ¯ã€‚è¯¥è®¾ç½®éœ€è¦æ”¾åœ¨ \tn{ProcessKeysOptions} å‘½ä»¤åŽè¿›è¡Œã€‚
%
% \begin{variable}{\g_@@_info_type_tl}
% æ–‡æ¡£ç±»åž‹å­—æ&nbsp;·ã€‚
%    \begin{macrocode}
\tl_new:N  \g_@@_info_type_tl
\tl_gset:Ne \g_@@_info_type_tl
  { \clist_item:Nn \c_@@_name_type_clist { \g_@@_info_type_int } }
%    \end{macrocode}
% \end{variable}
%
% \begin{variable}{\g_@@_info_degree_tl}
% å­¦ä½ç±»åž‹å­—æ&nbsp;·ã€‚
%    \begin{macrocode}
\tl_new:N     \g_@@_info_degree_tl
\tl_gset_eq:NN \g_@@_info_degree_tl \g_@@_info_type_tl
\bool_if:NF \g_@@_opt_academic_bool
  { \tl_gput_right:Nn \g_@@_info_degree_tl { ä¸“ä¸š } }
%    \end{macrocode}
% \end{variable}
%
% \begin{variable}{\g_@@_info_degree_en_tl}
% è‹±æ–‡çš„å­¦ä½å­—æ&nbsp;·ã€‚
%    \begin{macrocode}
\tl_new:N  \g_@@_info_degree_en_tl
\tl_gset:Ne \g_@@_info_degree_en_tl
  { \clist_item:Nn \c_@@_name_type_en_clist { \g_@@_info_type_int } }
%&lt;/def-g&gt;
%    \end{macrocode}
% \end{variable}
%
%
% \subsection{å­—ä½“è®¾ç½®}
%
% \pkg{fontspec} åŒ…å«äºŽ \pkg{ctex} å®é›†ï¼Œæ—&nbsp;éœ€å¦è¡Œè½½å…¥ã€‚
%
% \subsubsection{æ“ä½œç³»ç»Ÿæ£€æµ‹}
%
% \begin{variable}{\c_@@_path_macoffice_tl}
% mac Office å­—ä½“è·¯å¾„ã€‚
%    \begin{macrocode}
%&lt;*class&gt;
\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}
% \changes{v1.1}{2022/12/03}{æ·»åŠ&nbsp;å¯¹ Times New Roman çš„ smcp ç‰¹æ€§çš„æ£€æµ‹ã€‚}
% æ£€æµ‹ Times New Roman æ˜¯å¦å…·æœ‰å°åž‹å¤§å†™å­—æ¯ï¼ˆsmall capsï¼‰å­—åž‹ã€‚
% è¿™æ˜¯ macOS é¢„è£…çš„å­—ä½“ç‰ˆæœ¬è¾ƒæ—§å¯¼è‡´çš„ã€‚
%    \begin{macrocode}
    \fontspec_if_small_caps:F
      {
        \msg_warning:nn { njuthesis } { no-small-caps }
        \__fontspec_main_setmainfont:nn
          { \c_@@_name_gyrefeature_clist } { texgyretermes }
      }
  }
%    \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 { 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:}
% \changes{v0.14}{2021/12/20}{å¢žåŠ&nbsp; Adobe Source Han ä½œä¸ºæ€æºå­—ä½“ã€‚}
% Source Han æ€æºå­—ä½“ã€‚
%    \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}
% \changes{v1.2}{2023/04/30}{åœ¨ç&nbsp;”ç©¶ç”Ÿæ¨¡æ¿è½½å…¥åŽæ–‡ä¸­å®‹ã€‚}
% \changes{v1.3}{2023/10/09}{å¯ä»¥æ‰‹åŠ¨æŒ‡å®šåŽæ–‡ä¸­å®‹æ–‡ä»¶ä½ç½®ã€‚}
% ç&nbsp;”ç©¶ç”Ÿå°é¢é¢å¤–éœ€è¦çš„åŽæ–‡ä¸­å®‹ã€‚
%    \begin{macrocode}
\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}
% \changes{v1.2}{2023/04/30}{åœ¨ç&nbsp;”ç©¶ç”Ÿæ¨¡æ¿è½½å…¥åŽæ–‡ä¸­å®‹ã€‚}
% \changes{v1.3}{2023/10/09}{å¯ä»¥æ‰‹åŠ¨æŒ‡å®šåŽæ–‡ä¸­å®‹æ–‡ä»¶ä½ç½®ã€‚}
% \changes{v1.4}{2024/04/03}{è°ƒæ•´è½½å…¥åŽæ–‡ä¸­å®‹æ–‡ä»¶çš„é€»è¾‘ã€‚}
% \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_path_bool
              {
            \newCJKfontfamily \@@_stzhongs: {#1}
              [ Path = \g_@@_font_path_tl, \c_@@_name_fakebold_tl ]
              }
              {
                \cs_set_eq:NN \@@_stzhongs: \rmfamily
                \msg_warning:nn { njuthesis } { missing-stzhongs }
              }
          }
      }
\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_path_bool
      {
        \__um_setmathfont:nn
          { Path = \g_@@_font_path_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_clear:N \@@_loadfont_math_none:
%    \end{macrocode}
% \end{macro}
%
%
% \subsubsection{è½½å…¥æŒ‡å®šå­—åº“}
% \changes{v0.10}{2021/09/28}{ä¿®æ­£äº†æ•°å­¦å­—ä½“ã€‚}
%
% \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}
% \begin{macro}{\bigger}
% é‡å®šä¹‰å­—å·å‘½ä»¤ã€‚
%    \begin{macrocode}
    \NewDocumentCommand \bigger   { } { \ctex_zihao:n { 4   } }
  }
%    \end{macrocode}
% \end{macro}
% \end{macro}
%
% è½½å…¥è®¾ç½®çš„å­—ä½“ã€‚^^A ä¸ºäº†å¸æ”¶å¯¼è¨€åŒºçš„è®¾ç½®ï¼Œæ”¾åœ¨å…¶åŽè½½å…¥ã€‚
%    \begin{macrocode}
% \BeforeBeginEnvironment { document } { \@@_loadfont: }
\@@_loadfont:
%&lt;/class&gt;
%    \end{macrocode}
%
% åªæœ‰ç&nbsp;”ç©¶ç”Ÿæ¨¡æ¿éœ€è¦åŽæ–‡ä¸­å®‹ã€‚æˆ‘ä»¬æŠŠå®ƒæ”¾åœ¨æ–‡æ¡£ç±»æœ€åŽè½½å…¥ã€‚
%    \begin{macrocode}
%&lt;def-g&gt;\ctex_at_end_preamble:n { \@@_loadfont_stzhongs: }
%    \end{macrocode}
%
%
% \subsection{é¡µé¢å¸ƒå±€}
%
% \subsubsection{é¡µè¾¹è·}
%
% ä½¿ç”¨\pkg{geometry}è®¾ç½®é¡µè¾¹è·ã€‚
%    \begin{macrocode}
%&lt;*class&gt;
\geometry
  {
    vmargin    = 2.54 cm,
    hmargin    = 3.18 cm,
    headheight = 15 pt
  }
%    \end{macrocode}
%
% è‰ç¨¿æ¨¡å¼ä¸‹æ˜¾ç¤ºé¡µé¢æ–‡å­—èŒƒå›´è¾¹ç•Œä»¥åŠé¡µçœ‰ã€é¡µè„šçº¿ã€‚
%    \begin{macrocode}
\bool_if:NT \g_@@_opt_draft_bool { \geometry { showframe } }
%    \end{macrocode}
%
%
% \subsubsection{é¡µçœ‰é¡µè„š}
% \changes{v1.0}{2022/07/01}{åˆ&nbsp;é™¤ |header/format| å’Œ |footer/format|ã€‚}
% \changes{v1.0}{2022/08/01}{é¡µçœ‰æŽ¥å£æ›´åä¸º \opt{header} ç±»ã€‚}
% \changes{v1.0}{2022/08/01}{é¡µè„šæŽ¥å£æ›´åä¸º \opt{footer} ç±»ã€‚}
%
% æä¾›è®¾ç½®é¡µçœ‰é¡µè„šçš„ç”¨æˆ·æŽ¥å£ã€‚åœ¨ \tn{fancyhead} çš„å¯é€‰å‚æ•°ä¸­ï¼Œ
% \opt{E} å’Œ \opt{O} åˆ†åˆ«è¡¨ç¤ºåœ¨å¶æ•°é¡µï¼ˆevenï¼‰å’Œå¥‡æ•°é¡µï¼ˆoddï¼‰ï¼Œ
% è€Œ \opt{L}ã€\opt{R} å’Œ \opt{C} åˆ™åˆ†åˆ«è¡¨ç¤ºå·¦ï¼ˆleftï¼‰ã€å³
% ï¼ˆrightï¼‰å’Œä¸­é—´ï¼ˆcenterï¼‰ã€‚æŒ‰ç…§é€šå¸¸çš„æŽ’ç‰ˆè§„åˆ™ï¼Œåœ¨åŒé¢æ¨¡å¼ä¸‹ï¼Œ
% å¶æ•°é¡µçš„ä¸­é—´é¡µçœ‰æ–‡å­—åœ¨å·¦ï¼Œå¥‡æ•°é¡µåˆ™åœ¨å³ã€‚å•é¢æ¨¡å¼ä¸‹ï¼Œå·¦å³é¡µçœ‰éƒ½è¦æ˜¾ç¤ºã€‚
%    \begin{macrocode}
\keys_define:nn { nju / header }
  {
%    \end{macrocode}
%
% \begin{macro}{header/content,header/content*}
% \changes{v0.16}{2022/03/18}{å¯æ‰‹åŠ¨æŒ‡å®šé¡µçœ‰å†…å®¹ã€‚}
% é¡µçœ‰å†…å®¹ï¼Œåˆ†åˆ«å¯¹åº”åŒé¢æ¨¡å¼å’Œå•é¢æ¨¡å¼ã€‚
% ä¸ºäº†ä¾¿äºŽæŒ‡å®šå¤æ‚çš„é¡µçœ‰æ&nbsp;·å¼ï¼Œè¿™é‡Œç”¨ |clist| å­˜å‚¨ä½ç½®å’Œå†…å®¹ä¿¡æ¯ã€‚
%    \begin{macrocode}
    content  .clist_gset:N = \g_@@_header_twoside_clist,
    content* .clist_gset:N = \g_@@_header_oneside_clist,
    content     .initial:n =
      { { EL } { \leftmark  }, { OR } { \rightmark } },
    content*    .initial:n =
      { {  L } { \leftmark  }, {  R } { \rightmark } }
%    \end{macrocode}
% \end{macro}
%
%    \begin{macrocode}
  }
\keys_define:nn { nju / footer }
  {
%    \end{macrocode}
% \begin{macro}{footer/content,footer/content*}
% \changes{v0.16}{2022/03/18}{å¯æ‰‹åŠ¨æŒ‡å®šé¡µè„šå†…å®¹ã€‚}
% é¡µè„šå†…å®¹ï¼ŒåŒé¡µçœ‰ã€‚
%    \begin{macrocode}
    content  .clist_gset:N = \g_@@_footer_twoside_clist,
    content* .clist_gset:N = \g_@@_footer_oneside_clist,
    content     .initial:n = { { C } { \thepage } },
    content*    .initial:n = { { C } { \thepage } }
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\g_@@_header_clist,\g_@@_footer_clist}
% å­˜å‚¨é¡µçœ‰é¡µè„šå†…å®¹ã€‚
%    \begin{macrocode}
\clist_new:N \g_@@_header_clist
\clist_new:N \g_@@_footer_clist
%    \end{macrocode}
% \end{macro}
%
% åœ¨å¯¼è¨€åŒºæœ«å°¾ç¡®å®šé¡µçœ‰é¡µè„šå†…å®¹ã€‚
%    \begin{macrocode}
\ctex_at_end_preamble:n
  {
    \clist_gset_eq:Nc \g_@@_header_clist
      { g_@@_header_ \g_@@_name_pagemode_tl _clist }
    \clist_gset_eq:Nc \g_@@_footer_clist
      { g_@@_footer_ \g_@@_name_pagemode_tl _clist }
  }
%    \end{macrocode}
%
% \begin{macro}{\@@_header:nn,\@@_footer:nn}
% å¯¹ \pkg{fancyhdr} çš„å‘½ä»¤è¿›è¡ŒåŒ…è£…ï¼Œä¾¿äºŽè®¾ç½®é¡µçœ‰é¡µè„šã€‚
%    \begin{macrocode}
\cs_new_protected:Npn \@@_header:nn #1#2
  { \fancyhead [#1] { \l_@@_fmt_header_tl \nouppercase {#2} } }
\cs_new_protected:Npn \@@_footer:nn #1#2
  { \fancyfoot [#1] { \l_@@_fmt_footer_tl \nouppercase {#2} } }
%    \end{macrocode}
% \end{macro}
%
% é‡å®šä¹‰ \pkg{fancyhdr} çš„ \opt{plain} æ&nbsp;·å¼ï¼Œå³æœ¬ç§‘ç”Ÿæ­£æ–‡å’Œéƒ¨åˆ†ç‰¹æ®Šé¡µé¢ä½¿ç”¨çš„
% é¡µçœ‰é¡µè„šæ&nbsp;·å¼ã€‚é¡µçœ‰æ—&nbsp;å†…å®¹ï¼›é¡µè„šä¸ºå±…ä¸­çš„é¡µç&nbsp;ï¼Œä½¿ç”¨äº”å·æ–°ç½—é©¬ä½“æ•°å­—ã€‚
% æ&nbsp;‡è®°é¡µçœ‰é¡µè„šæ¨ªçº¿å®½åº¦çš„å˜é‡å¹¶ä¸å±žäºŽ |dim| ç±»åž‹ï¼Œä½†æ˜¯é‡‡å–äº†è¯¥ç±»åž‹çš„æ&nbsp;¼å¼ã€‚
%    \begin{macrocode}
\fancypagestyle { plain }
  {
    \fancyhf { }
    \clist_map_inline:Nn \g_@@_footer_clist { \@@_footer:nn ##1 }
    \tl_set:Nn \headrulewidth { \c_zero_dim }
    \tl_set:Nn \footrulewidth { \c_zero_dim }
  }
%    \end{macrocode}
%
% \changes{v0.15}{2022/01/17}{ä¿®å¤å•é¡µæ¨¡å¼çš„é¡µçœ‰é—®é¢˜ã€‚}
% ä»¥ \opt{plain} æ&nbsp;·å¼ä¸ºåŸºç¡€çš„ \opt{headings} æ&nbsp;·å¼ï¼Œç”¨äºŽç&nbsp;”ç©¶ç”Ÿæ¨¡æ¿ã€‚
%    \begin{macrocode}
\fancypagestyle { headings }
  {
    \fancyhf { }
    \clist_if_empty:NTF \g_@@_header_clist
      {
        \tl_set:Nn \headrulewidth { \c_zero_dim }
      }
      {
        \tl_set:Nn \headrulewidth { 0.4 pt }
        \dim_set:Nn \headheight { 20 pt }
        \clist_map_inline:Nn \g_@@_header_clist
          { \@@_header:nn ##1 }
      }
    \clist_map_inline:Nn \g_@@_footer_clist { \@@_footer:nn ##1 }
    \tl_set:Nn \footrulewidth { \c_zero_dim }
  }
%    \end{macrocode}
%
% \begin{macro}{\frontmatter}
% é‡å®šä¹‰ \tn{frontmatter}ï¼Œè®¾ç½®å‰è¨€åŒºé»˜è®¤çš„é¡µçœ‰é¡µè„šä»¥åŠé¡µç&nbsp;æ&nbsp;·å¼ã€‚
%    \begin{macrocode}
\RenewDocumentCommand \frontmatter { }
  {
    \cleardoublepage
    \exp_args:NV \pagestyle \l_@@_fmt_pagestyle_tl
    \pagenumbering { Roman }
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\mainmatter}
% \changes{v0.12}{2021/12/03}{ä¿®å¤äº†æ‘˜è¦é¡µå­—ä½“æ&nbsp;¼å¼æ³„æ¼åˆ°æ­£æ–‡çš„é—®é¢˜ã€‚}
% \changes{v0.12}{2021/12/03}{ä¿®å¤äº†é¡µçœ‰ä¸Šé•¿æ&nbsp;‡é¢˜é‡å&nbsp;çš„é—®é¢˜ã€‚}
% é‡å®šä¹‰ \tn{mainmatter}ï¼Œåœ¨è®ºæ–‡ä¸»ä½“éƒ¨åˆ†è½½å…¥é¡µé¢æ&nbsp;·å¼è®¾ç½®ï¼Œ
% ä½¿ç”¨é˜¿æ‹‰ä¼¯æ•°å­—é‡æ–°è¿›è¡Œé¡µç&nbsp;ç¼–å·ã€‚
%    \begin{macrocode}
\RenewDocumentCommand \mainmatter { }
  {
    \cleardoublepage
    \exp_args:NV \pagestyle \l_@@_fmt_pagestyle_tl
    \pagenumbering { arabic }
    \normalfont \normalsize
  }
%    \end{macrocode}
% \end{macro}
%
% \changes{v0.16}{2022/03/18}{ç&nbsp;”ç©¶ç”Ÿæ¨¡æ¿çš„ç›®å½•ã€æ‘˜è¦ç­‰é¡µé¢ä¹Ÿæ˜¾ç¤ºé¡µçœ‰ã€‚}
% åœ¨æ–‡æ¡£èµ·å§‹ä½ç½®è®¾ç½®é»˜è®¤é¡µé¢æ&nbsp;·å¼ã€‚
%    \begin{macrocode}
\AtBeginEnvironment { document }
  {
    \exp_args:NV \pagestyle \l_@@_fmt_pagestyle_tl
    \pagenumbering { Roman }
  }
%    \end{macrocode}
%
%
% \subsection{ç«&nbsp;èŠ‚æ&nbsp;‡é¢˜æ&nbsp;¼å¼}
%
% \begin{macro}{\@@_bookmark_toc:n,\@@_bookmark_toc:V}
% ä¸ºæ—&nbsp;ç¼–å·ç«&nbsp;æ·»åŠ&nbsp;ç›®å½•æ¡ç›®ï¼Œéœ€æ‰‹åŠ¨æŒ‡å®šæ&nbsp;¼å¼ä¸ºå››å·ã€ä¸åŠ&nbsp;ç²—ã€é»‘ä½“ã€‚
%    \begin{macrocode}
\cs_new:Npn \@@_bookmark_toc:n #1
  { \addcontentsline { toc } { chapter } { \l_@@_fmt_chapterintoc_tl #1 } }
\cs_generate_variant:Nn \@@_bookmark_toc:n { V }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_bookmark_toc:nn}
% ä¸ºäº†ä¿æŒå½¢å¼ä¸€è‡´ï¼Œè¿›è¡Œå°è£…ã€‚
%    \begin{macrocode}
\cs_new:Npn \@@_bookmark_toc:nn #1#2
  { \phantomsection \_@@_bookmark_toc:n {#1} }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_bookmark_pdf_nosec:nn,\@@_bookmark_pdf:nn}
% å°è£… \pkg{hyperref} çš„ PDF ä¹¦ç­¾å‘½ä»¤ã€‚
%    \begin{macrocode}
\cs_new:Npn \@@_bookmark_pdf_nosec:nn { \pdfbookmark [0] }
\cs_new:Npn \@@_bookmark_pdf:nn
  { \phantomsection \@@_bookmark_pdf_nosec:nn }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_bookmark:Nnn}
% ä¹¦ç­¾ã€‚
%    \begin{macrocode}
\cs_new:Npn \@@_bookmark:Nnn #1#2#3
  {
    \bool_if:NTF #1
      { \_@@_bookmark_toc:n        {#2}        }
      { \_@@_bookmark_pdf_nosec:nn {#2} {#3} }
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_chapter:Nnn,\@@_chapter:cnn,\@@_chapter:n,\@@_chapter:V}
% å«æœ‰ç›®å½•å’Œ PDF æ&nbsp;‡ç­¾çš„æ—&nbsp;ç¼–å·ç«&nbsp;ã€‚
%    \begin{macrocode}
\cs_new:Npn \@@_chapter:Nnn #1#2#3
  {
    \chapter *           {#2}
    \@@_bookmark:Nnn #1  {#2} {#3}
    \@@_chapter_header:n {#2}
  }
\cs_new:Npn \@@_chapter:n #1
  { \@@_chapter:Nnn \c_true_bool {#1} { } }
\cs_generate_variant:Nn \@@_chapter:Nnn { cnn }
\cs_generate_variant:Nn \@@_chapter:n   { V   }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_chapter_header:n}
% å•é¡µæ¨¡å¼ä¸‹ï¼Œç›®å½•ã€æ‘˜è¦ã€ç¬¦å·è¡¨ç­‰ç‰¹æ®Šé¡µé¢çš„é¡µçœ‰ä¸­é—´ä¸ºç›¸åº”æ&nbsp;‡é¢˜ï¼Œå·¦å³ä¸ºç©ºã€‚è¿™é‡Œé€š
% è¿‡å±…ä¸­çš„ \tn{leftmark} å®žçŽ°ã€‚
%    \begin{macrocode}
\cs_new_protected:Npn \@@_chapter_header:n #1
  {
    \bool_if:NTF \g_@@_opt_twoside_bool
      { \markboth {#1} {#1} }
      { \markboth { \hfill #1 \hfill } { } }
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\njuchapter}
% å°è£…æ—&nbsp;ç¼–å·ç«&nbsp;çŽ¯å¢ƒï¼Œä¾›ç”¨æˆ·åœ¨æ­£æ–‡ä¸­ä½¿ç”¨ã€‚
%    \begin{macrocode}
\NewDocumentCommand \njuchapter { m } { \@@_chapter:n {#1} }
%    \end{macrocode}
% \end{macro}
%
% |\keys_set:nn{ctex}| å®žé™…ç›¸å½“äºŽ \tn{ctexset}ã€‚
%    \begin{macrocode}
\keys_set:nn { ctex }
  {
    chapter        / beforeskip = \l_@@_chapterbefore_dim,
    chapter        / afterskip  = \l_@@_chapterafter_dim,
    chapter        / format     = \l_@@_fmt_chapter_tl,
    section        / format     = \l_@@_fmt_section_tl,
    subsection     / format     = \l_@@_fmt_subsection_tl,
    subsubsection  / format     = \l_@@_fmt_subsubsection_tl,
    paragraph      / format     = \l_@@_fmt_paragraph_tl,
    subparagraph   / format     = \l_@@_fmt_subparagraph_tl,
%    \end{macrocode}
%
%
% \subsection{ç›®å½•æ&nbsp;¼å¼}
% \changes{v0.13}{2021/12/09}{ç§»é™¤ \pkg{tocloft}ï¼Œç”¨ \pkg{ctex} ä¿®æ”¹ç›®å½•æ&nbsp;·å¼ã€‚}
%
% è®¾ç½®ç›®å½•æ&nbsp;‡é¢˜é»˜è®¤åç§°ã€‚
%    \begin{macrocode}
    contentsname   = \l_@@_name_tableofcontents_tl,
    listfigurename = \l_@@_name_listoffigures_tl,
    listtablename  = \l_@@_name_listoftables_tl,
%    \end{macrocode}
% è®¾ç½®ç›®å½•ä¸­ç«&nbsp;æ&nbsp;‡é¢˜çš„æ&nbsp;·å¼ã€‚
%    \begin{macrocode}
    chapter / tocline = \l_@@_fmt_chapterintoc_tl \CTEXnumberline {#1} #2
  }
%    \end{macrocode}
%
% \changes{v1.0}{2022/08/01}{æ•´åˆç›®å½•è®¾ç½®é¡¹ã€‚}
% \begin{macro}{\@@_make_toc:nn,\@@_make_toc:Vn}
% é€šè¿‡ group å†…ä¿®æ”¹æ&nbsp;‡é¢˜è®¾ç½®ï¼Œå°†ç›®å½•é¡µæ&nbsp;‡é¢˜æ&nbsp;¼å¼å•ç‹¬è®¾ç½®ä¸ºä¸‰å·ç²—å®‹ä½“ã€‚
% ç›®å½•è‡ªèº«ä¸å‡ºçŽ°åœ¨ç›®å½•ä¸­æ—¶éœ€ç‰¹åˆ«å¤„ç†ã€‚å‚è€ƒ
% \url{https://tex.stackexchange.com/a/1821}ã€‚
%    \begin{macrocode}
\cs_new_protected:Npn \@@_make_toc:nn #1#2
  {
    \group_begin:
      \keys_set:nn { ctex }
        { chapter/format = \l_@@_fmt_toctitle_tl }
      \@@_chapter:cnn { g_@@_ #2 _showentry_bool } {#1} {#2}
    \group_end:
    \@starttoc {#2}
  }
\cs_generate_variant:Nn \@@_make_toc:nn { vn }
%    \end{macrocode}
% \end{macro}
%
% \changes{v0.15}{2022/02/04}{å¯é€‰æ‹©ç›®å½•è‡ªèº«æ˜¯å¦å‡ºçŽ°åœ¨ç›®å½•ä¸­ã€‚}
% \begin{macro}{\@@_define_toc_cmd:nnn}
% é‡å®šä¹‰ç›®å½•å‘½ä»¤ï¼Œä¿®æ”¹æ&nbsp;‡é¢˜æ&nbsp;¼å¼å¹¶æ’å…¥ä¹¦ç­¾ã€‚
%    \begin{macrocode}
\cs_new_protected:Npn \@@_define_toc_cmd:nnn #1#2#3
  {
    \keys_define:nn { nju / #1 }
      {
        toc-entry .bool_gset:c = { g_@@_ #3 _showentry_bool },
        toc-entry   .initial:n = true
      }
    \exp_args:Nc \RenewDocumentCommand {#1} { }
      { \@@_make_toc:vn { #2 name } {#3} }
  }
%    \end{macrocode}
% \end{macro}
%
% \changes{v1.4}{2024/11/08}{ç›®å½•é€‰é¡¹ä¸å†ä¼šå½±å“æ’å›¾æ¸…å•å’Œè¡¨æ&nbsp;¼æ¸…å•ã€‚}
%
% \begin{macro}{
%   \tableofcontents,\listoffigures,\listoftables,
%   tableofcontents/toc-entry,
%   listoffigures/toc-entry,
%   listoftables/toc-entry,
%   \g_@@_toc_showentry_bool,
%   \g_@@_lof_showentry_bool,
%   \g_@@_lot_showentry_bool}
%    \begin{macrocode}
\clist_map_inline:nn
  {
    { tableofcontents } { contents   } { toc },
    { listoffigures   } { listfigure } { lof },
    { listoftables    } { listtable  } { lot }
  }
  { \@@_define_toc_cmd:nnn #1 }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{tableofcontents/dotline}
% \changes{v1.0}{2022/08/08}{å¯é€‰æ‹©æ˜¯å¦ä¸ºç›®å½•ä¸­çš„ç«&nbsp;åæ·»åŠ&nbsp;å¼•å¯¼çº¿ã€‚}
% ä¿®æ”¹ \cls{book} æ–‡æ¡£ç±»ä¸­çš„å‘½ä»¤ä»¥æ·»åŠ&nbsp;å¼•å¯¼çº¿ã€‚
%    \begin{macrocode}
\keys_define:nn { nju / tableofcontents }
  {
    dotline         .choice:,
    dotline / chapter .code:n =
      {
        \cs_set_protected_nopar:Npn \l@chapter
          {
            \skip_vertical:N 1.0 em \@plus \p@ \scan_stop:
            \@dottedtocline { \z@ } { \z@ } { 1.5 em }
          }
      },
    dotline / section .code:n = { }
  }
%    \end{macrocode}
% \end{macro}
%
%
% \subsection{å‚è€ƒæ–‡çŒ®}
%
% \begin{variable}{\g_@@_blx_option_clist}
% å­˜å‚¨ä¼&nbsp;å…¥ \pkg{biblatex} çš„é€‰é¡¹åˆ—è¡¨ã€‚
%    \begin{macrocode}
\clist_new:N \g_@@_blx_option_clist
%    \end{macrocode}
% \end{variable}
%
% \begin{variable}{\g_@@_blx_resource_clist}
% å­˜å‚¨å‚è€ƒæ–‡çŒ®æ•°æ®æºåˆ—è¡¨ã€‚
%    \begin{macrocode}
\clist_new:N \g_@@_blx_resource_clist
%    \end{macrocode}
% \end{variable}
%
%    \begin{macrocode}
\keys_define:nn { nju / bib }
  {
%    \end{macrocode}
%
% \begin{macro}{bib/style}
% \changes{v0.14}{2021/12/19}{æä¾›é€‰æ‹©å‚è€ƒæ–‡çŒ®æ&nbsp;·å¼çš„æŽ¥å£ã€‚}
% \changes{v0.15}{2022/02/11}{å¯ä½¿ç”¨å›½æ&nbsp;‡ä»¥å¤–çš„æ–‡çŒ®æ&nbsp;·å¼ã€‚}
% å‚è€ƒæ–‡çŒ®æ&nbsp;·å¼ã€‚å›½å®¶æ&nbsp;‡å‡†ä¸ºé¡ºåºç¼–ç&nbsp;åˆ¶ \opt{numeric} å’Œè‘—è€…-å‡ºç‰ˆå¹´åˆ¶
% \opt{author-year}ï¼Œåˆ†åˆ«å¯¹åº” \pkg{biblatex} çš„ \opt{gb7714-2015}
% å’Œ \opt{gb7714-2015ay} æ&nbsp;·å¼ã€‚å…¶ä½™æ&nbsp;·å¼ä¸€å¾‹è§†ä½œ \opt{unknown}ã€‚ç”¨æˆ·
% é€‰å–çš„æ&nbsp;·å¼ä¼šè¢«åŠ&nbsp;å…¥é€‰é¡¹åˆ—è¡¨ä¸­ï¼Œä»¥å¾…ä¼&nbsp;è¿› \pkg{biblatex} å®åŒ…ã€‚
%    \begin{macrocode}
    style             .choice:,
    style / numeric     .code:n =
      {
        \clist_gput_right:Nn \g_@@_blx_option_clist
          { style = gb7714-2015      }
      },
    style / author-year .code:n =
      {
        \clist_gput_right:Nn \g_@@_blx_option_clist
          { style = gb7714-2015ay    }
      },
    style / unknown     .code:n =
      { \clist_gput_right:Nn \g_@@_blx_option_clist { style = #1 } },
    style            .initial:n = numeric,
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{bib/option}
% \changes{v0.15}{2022/02/15}{æä¾›ä¼&nbsp;å…¥ \pkg{biblatex} å®åŒ…é€‰é¡¹çš„æŽ¥å£ã€‚}
% å¾…ä¼&nbsp;å…¥ \pkg{biblatex} çš„é¢å¤–å®åŒ…é€‰é¡¹ï¼Œä»¥åˆ—è¡¨å½¢å¼å‚¨å­˜ã€‚
% æ›´ä¸ºå¸¸è§çš„å‚è€ƒæ–‡çŒ®æ&nbsp;·å¼è®¾ç½®å·²ç”± \opt{bib/style} æä¾›ï¼Œ
% ä¸¤è€…ä¸­åŽä¼&nbsp;å…¥çš„è®¾ç½®ä¼šè¦†ç›–å·²æœ‰çš„è®¾å®šã€‚æœ¬è®¾ç½®é¡¹ç­‰æ•ˆäºŽåœ¨å¯¼è¨€åŒºä½¿ç”¨
% |\PassoptionsToPackage{|\meta{key}|=|\meta{value}|}{biblatex}| å‘½ä»¤ã€‚
%    \begin{macrocode}
    option              .code:n =
      { \clist_gput_right:NV \g_@@_blx_option_clist \l_keys_value_tl },
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{bib/resource}
% \changes{v0.14}{2021/12/19}{æä¾›æ‰¹é‡å¯¼å…¥å‚è€ƒæ–‡çŒ®æ•°æ®æºçš„æŽ¥å£ã€‚}
% å‚è€ƒæ–‡çŒ®æ•°æ®æºï¼Œä»¥åˆ—è¡¨å½¢å¼å‚¨å­˜ã€‚
%    \begin{macrocode}
    resource            .code:n =
      { \clist_gput_right:NV \g_@@_blx_resource_clist \l_keys_value_tl },
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\addbibresource}
% ä¸ºäº†å¸æ”¶ç”¨æˆ·åœ¨å¯¼è¨€åŒºè®¾ç½®çš„é€‰é¡¹ï¼Œ\pkg{biblatex} å®åŒ…è¢«è®¾ç½®åœ¨å¯¼è¨€åŒºæœ«å°¾æ‰ä¼šè½½
% å…¥ã€‚æ­¤å¤„å•ç‹¬å®šä¹‰äº†å¯ä»¥åœ¨å¯¼è¨€åŒºä½¿ç”¨çš„ \tn{addbibresource} å‘½ä»¤ï¼Œç”¨äºŽå…¼å®¹ä¼&nbsp;ç»Ÿçš„
% æ·»åŠ&nbsp;å‚è€ƒæ–‡çŒ®æ•°æ®æºçš„æ–¹æ³•ã€‚
%    \begin{macrocode}
\bool_if:NT \g_@@_opt_load_blx_bool
  {
    \NewDocumentCommand \addbibresource { m }
      { \clist_gput_right:Nn \g_@@_blx_resource_clist {#1} }
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_blx_pre_setup:}
% è½½å…¥ \pkg{biblatex} å®åŒ…å‰ï¼Œå¿…é¡»ç¦ç”¨è‡ªè¡Œå®šä¹‰çš„ \tn{addbibresource}
% å‘½ä»¤ï¼Œå¹¶ä¼&nbsp;å…¥ç”¨æˆ·è®¾ç½®çš„é€‰é¡¹ã€‚
%    \begin{macrocode}
\cs_new_protected:Npn \@@_blx_pre_setup:
  {
    \cs_undefine:N \addbibresource
    \clist_gput_right:Nn \g_@@_blx_option_clist { backend = biber }
    \exp_args:NV \PassOptionsToPackage \g_@@_blx_option_clist { biblatex }
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_blx_post_setup:}
% \pkg{biblatex} å®åŒ…è½½å…¥åŽçš„è®¾ç½®ã€‚
%    \begin{macrocode}
\cs_new_protected:Npn \@@_blx_post_setup:
  {
%    \end{macrocode}
% \changes{v0.12}{2021/12/06}{è®¾ç½®è¾“å‡ºå‚è€ƒæ–‡çŒ®çš„é»˜è®¤é€‰é¡¹ã€‚}
% \changes{v0.15}{2022/02/17}{å¯åœ¨æ¯ç«&nbsp;åŽé™„ä¸Šå‚è€ƒæ–‡çŒ®è¡¨ã€‚}
% ä¿®æ”¹å‚è€ƒæ–‡çŒ®çš„å¤´éƒ¨æ&nbsp;·å¼ï¼Œè‡ªåŠ¨æ·»åŠ&nbsp;ç›®å½•æ¡ç›®ã€‚é»˜è®¤ä¸º |chapter| çº§åˆ«ã€‚
% å¦‚æžœéœ€è¦åœ¨æ¯ç«&nbsp;åŽé™„ä¸Šä¸€ä¸ªå‚è€ƒæ–‡çŒ®è¡¨ï¼Œå³å¯¹ \pkg{biblatex} ä¼&nbsp;å…¥äº†
%  |refsection = chapter| é€‰é¡¹ï¼Œåˆ™é»˜è®¤ä¸º |section| çº§åˆ«ã€‚
%    \begin{macrocode}
    \defbibheading { njubibintoc } [ \bibname ] { \@@_chapter:n {##1} }
    \tl_if_eq:NnTF \blx@refsecreset@level { 2 }
      { \DeclarePrintbibliographyDefaults { heading = subbibintoc } }
      { \DeclarePrintbibliographyDefaults { heading = njubibintoc } }
%    \end{macrocode}
% ä¼&nbsp;å…¥å‚è€ƒæ–‡çŒ®æºæ–‡ä»¶ï¼Œæ­¤æ—¶å¯æ­£å¸¸ä½¿ç”¨ \tn{addbibresource} å‘½ä»¤ã€‚
%    \begin{macrocode}
    \clist_map_inline:Nn \g_@@_blx_resource_clist { \addbibresource {##1} }
  }
%    \end{macrocode}
% \end{macro}
%
% ä½¿ç”¨ \pkg{etoolbox} æä¾›çš„ \tn{BeforeBeginEnvironment}ï¼Œåœ¨ \env{document} çŽ¯å¢ƒ
% å¼€å§‹çš„é’©å­å‰è½½å…¥ \pkg{biblatex} å¹¶è¿›è¡Œç›¸å…³è®¾ç½®ã€‚
%    \begin{macrocode}
\bool_if:NT \g_@@_opt_load_blx_bool
  {
    \BeforeBeginEnvironment { document }
      {
        \@@_blx_pre_setup:
        \RequirePackage { biblatex }
        \@@_blx_post_setup:
      }
  }
%    \end{macrocode}
%
%
% \subsection{å¼•ç”¨}
%
% \changes{v1.4}{2024/03/06}{å°†å¯èƒ½éœ€è¦è¦†ç›–çš„ \pkg{hyperref} è®¾ç½®ç§»åŠ¨åˆ°å¯¼è¨€åŒºå‰ã€‚}
%    \begin{macrocode}
\hypersetup
  {
    bookmarksnumbered = true,
    psdextra          = true,
    unicode           = true,
    hidelinks
  }
%    \end{macrocode}
% \changes{v0.17}{2022/04/09}{PDF ä¹¦ç­¾ä¸­ä¸ç”Ÿæˆé¢å¤–ç©ºæ&nbsp;¼ã€‚}
% å¿½ç•¥ PDF å­—ç¬¦ä¸²ä¸­çš„ç‰¹å®šå‘½ä»¤ï¼Œä»Žè€ŒæŠ‘åˆ¶ \pkg{hyperref} è­¦å‘Šã€‚
%    \begin{macrocode}
\pdfstringdefDisableCommands
  {
    \clist_map_inline:nn
      { \\, \quad, \qquad, \bigger }
      { \@@_cs_clear:N #1 }
    \cs_set_eq:NN \zihao \use_none:n
  }
%    \end{macrocode}
% åœ¨å¯¼è¨€åŒºæœ«å°¾è¿›è¡Œ \pkg{hyperref} è®¾ç½®ã€‚å¡«å†™ PDF å…ƒä¿¡æ¯ã€‚
% \changes{v0.11}{2021/10/01}{å†™å…¥ PDF å…ƒæ•°æ®ã€‚}
%    \begin{macrocode}
\ctex_at_end_preamble:n
  {
    \hypersetup
      {
        pdftitle    = \g_@@_info_title_tl,
        pdfauthor   = \g_@@_info_author_tl,
        pdfkeywords = \g_@@_info_keywords_clist,
        pdfcreator  = \l_@@_name_pdfcreator_tl
      }
  }
%    \end{macrocode}
%
% \begin{macro}{\@@_cref_name:n}
% ç”¨äºŽä¿®æ”¹ \pkg{cleveref} çš„æ&nbsp;‡ç­¾åç§°çš„è¾…åŠ©å‡½æ•°ã€‚
% \begin{arguments}
%   \item æ&nbsp;‡ç­¾å
% \end{arguments}
%    \begin{macrocode}
\cs_new:Npn \@@_cref_name:n #1
  { \crefname {#1} { \@@_name:n {#1} } { \@@_name:n {#1} } }
%    \end{macrocode}
% \end{macro}
%
% ä¿®æ”¹ \pkg{cleveref} çš„æ&nbsp;‡ç­¾æ&nbsp;¼å¼ã€‚é»˜è®¤åœ¨åç§°åŽé¢æ·»åŠ&nbsp;ç©ºæ&nbsp;¼ï¼Œåˆ&nbsp;é™¤å…¬å¼ç¼–å·çš„æ‹¬å·ã€‚
%    \begin{macrocode}
\bool_if:NT \g_@@_opt_load_cref_bool
  {
    \crefdefaultlabelformat { #2#1#3\, }
    \crefformat { equation      } { å…¬å¼~#2#1#3~   }
    \crefformat { chapter       } { ç¬¬#2#1#3ç«&nbsp;     }
    \crefformat { section       } { ç¬¬~#2#1#3~èŠ‚   }
    \crefformat { subsection    } { ç¬¬~#2#1#3~å°èŠ‚ }
    \crefformat { subsubsection } { ç¬¬~#2#1#3~å°èŠ‚ }
%    \end{macrocode}
% ä¿®æ”¹ \pkg{cleveref} çš„æ&nbsp;‡ç­¾åç§°ã€‚
%    \begin{macrocode}
    \clist_map_inline:nn { figure, table, appendix }
      { \@@_cref_name:n {#1} }
  }
%    \end{macrocode}
%
%
% \subsection{è„šæ³¨}
% \changes{v0.18}{2022/05/01}{æä¾›è„šæ³¨è®¾ç½®é¡¹ã€‚}
% ^^A å€Ÿé‰´ fduthesis
%
% \begin{variable}{\g_@@_fn_ctext_option_clist}
% å­˜å‚¨ä¼&nbsp;å…¥ \pkg{circledtext} å®åŒ…çš„é€‰é¡¹åˆ—è¡¨ã€‚
% ç”±äºŽå½“å‰ç‰ˆæœ¬æ”¾åœ¨ç¼–å·ä½ç½®çš„å¸¦åœˆæ•°å­—æ—&nbsp;æ³•æ­£ç¡®ç¼©æ”¾ï¼Œè¿™é‡Œæ‰‹åŠ¨æŒ‡å®šäº†å­—ä½“å¤§å°ã€‚
%    \begin{macrocode}
\clist_gset:Nn \g_@@_fn_ctext_option_clist { charf = \scriptsize }
%    \end{macrocode}
% \end{variable}
%
%    \begin{macrocode}
\keys_define:nn { nju / footnote }
  {
%    \end{macrocode}
% \begin{macro}{footnote/style}
% \changes{v1.1}{2022/10/16}{å¢žåŠ&nbsp; \opt{circled} å’Œ \opt{circled*} é€‰é¡¹ã€‚}
% è„šæ³¨ç¼–å·çš„æ&nbsp;·å¼ã€‚
%    \begin{macrocode}
    style .choices:nn = { plain, pifont, circled, circled* }
      {
        \int_case:nnF { \l_keys_choice_int }
          {
%    \end{macrocode}
% \opt{pifont} ç±»åž‹ï¼Œç”¨ä½œå¯¹æ—§å‘è¡Œç‰ˆçš„å…¼å®¹é€‰é¡¹ã€‚
%    \begin{macrocode}
            { 2 }
              {
                \RequirePackage { pifont }
                \cs_set_eq:NN \@@_fn_number:N \@@_fn_number_pifont:N
              }
%    \end{macrocode}
% \opt{circled} ç±»åž‹ï¼Œå¸¦æ˜Ÿå·çš„ç‰ˆæœ¬ä¸ºé˜´æ–‡ï¼Œéœ€å¼•å…¥ \pkg{circledtext} å®åŒ…ã€‚
%    \begin{macrocode}
            { 3 }
              {
                \RequirePackage { circledtext }
                \cs_set:Npn \@@_fn_number:N
                  { \@@_fn_number_circled:NV \c_false_bool }
              }
            { 4 }
              {
                \RequirePackage { circledtext }
                \cs_set:Npn \@@_fn_number:N
                  { \@@_fn_number_circled:NV \c_true_bool }
              }
          }
%    \end{macrocode}
% \opt{plain} æˆ–æœªçŸ¥ç±»åž‹ç›´æŽ¥ä½¿ç”¨è®¡æ•°å™¨çš„å€¼ã€‚
%    \begin{macrocode}
          { \cs_set_eq:NN \@@_fn_number:N \int_use:N }
      },
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{footnote/circledtext-option}
% \changes{v1.1}{2022/10/16}{å°†ç”Ÿæˆè„šæ³¨åœˆç&nbsp;çš„ \pkg{pifont} æ›¿æ¢ä¸º \pkg{circledtext}ã€‚}
% \pkg{circledtext} å®åŒ…é€‰é¡¹ã€‚
%    \begin{macrocode}
    circledtext-option .code:n =
      { \clist_gput_right:Nn \g_@@_fn_ctext_option_clist {#1} },
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{footnote/hang}
% \changes{v1.1}{2022/10/16}{æ–°å¢žæ‚¬æŒ‚ç¼©è¿›é€‰é¡¹ã€‚}
% æ˜¯å¦æ‚¬æŒ‚ç¼©è¿›ã€‚
%    \begin{macrocode}
    hang             .choice:,
    hang / true        .code:n =
      {
        \cs_set:Npn \@@_fn_hang:
          {
            \int_set:Nn \tex_hangafter:D { 1 }
            \dim_set_eq:NN \tex_hangindent:D \l_@@_fnhang_dim
          }
      },
    hang / false       .code:n = { \@@_cs_clear:N \@@_fn_hang: },
    hang            .initial:n = true
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_fn_number_pifont:N}
% \opt{pifont} é€‰é¡¹æä¾›çš„å¸¦åœˆæ•°å­—ã€‚
%    \begin{macrocode}
\cs_new:Npn \@@_fn_number_pifont:N #1 { \ding { \int_eval:n { 171 + #1 } } }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_fn_number_circled:Nn,\@@_fn_number_circled:NV}
% \opt{circled} é€‰é¡¹æä¾›çš„å¸¦åœˆæ•°å­—ã€‚
%    \begin{macrocode}
\cs_generate_variant:Nn \__circledtext_handle:nn { Vn }
\cs_new_protected:Npn \@@_fn_number_circled:Nn #1#2
  {
    \group_begin:
      \bool_set_eq:NN \l__circledtext_negative_bool #1
      \__circledtext_handle:Vn \g_@@_fn_ctext_option_clist {#2}
    \group_end:
  }
\cs_generate_variant:Nn \@@_fn_number_circled:Nn { NV }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_fn_number:N}
% è„šæ³¨ç¼–å·ã€‚é»˜è®¤ä½¿ç”¨è®¡æ•°å™¨ |footnote| çš„å€¼ã€‚
%    \begin{macrocode}
\cs_new_eq:NN \@@_fn_number:N \int_use:N
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\thefootnote}
% é‡å®šä¹‰è„šæ³¨ç¼–å·ã€‚
%    \begin{macrocode}
\bool_if:NT \g_@@_opt_load_fm_bool
  {
    \cs_set:Npn \thefootnote { \@@_fn_number:N \c@footnote }
%    \end{macrocode}
% \end{macro}
%
% \subsubsection{æ•´ä½“æ&nbsp;·å¼}
%
% \begin{macro}[int]{\@makefntext}
% é‡å®šä¹‰å†…éƒ¨è„šæ³¨æ–‡å­—å‘½ä»¤ï¼Œä½¿è„šæ³¨ç¼–å·ä¸ä½¿ç”¨ä¸Šæ&nbsp;‡ï¼Œå®½åº¦ä¸º \qty{1.5}{em}
% \footnote{\url{http://tex.stackexchange.com/q/19844},
% \url{https://www.zhihu.com/question/53030087}}ï¼Œ
% å¹¶è‡ªè¡Œå®žçŽ°æ‚¬æŒ‚ç¼©è¿›ã€‚æ³¨æ„è¿™ä¸ªæ“ä½œä¼šä½¿ \pkg{footmisc} å®åŒ…å†…å»ºçš„ \opt{hang} é€‰é¡¹å¤±æ•ˆã€‚
%    \begin{macrocode}
    \cs_set:Npn \@makefntext #1
      {
        \mode_leave_vertical:
        \hbox_to_wd:nn { \l_@@_fnhang_dim } { \@thefnmark \tex_hfil:D }
        \tex_penalty:D \@M
        \@@_fn_hang:
        #1
      }
  }
%    \end{macrocode}
% \end{macro}
%
%
% \subsection{å›¾ç‰‡è¡¨æ&nbsp;¼}
%
% \begin{macro}{image/path}
% \changes{v1.0}{2022/08/06}{æä¾›å›¾ç‰‡è·¯å¾„è®¾ç½®ã€‚}
% å¤–ç½®å›¾ç‰‡è·¯å¾„ï¼Œç­‰æ•ˆäºŽ \tn{graphicspath}ã€‚
%    \begin{macrocode}
\keys_define:nn { nju / image } { path .code:n = { \graphicspath {#1} } }
%    \end{macrocode}
% \end{macro}
%
% è®¾ç½®é»˜è®¤å›¾ç‰‡æ‰©å±•åï¼Œå…è®¸åœ¨ä¸é”®å…¥æ‰©å±•åæ—¶è‡ªåŠ¨è¿›è¡Œè¡¥å…¨ã€‚
%    \begin{macrocode}
\DeclareGraphicsExtensions { .pdf, .eps, .jpg, .png }
%    \end{macrocode}
%
% \changes{v0.16}{2022/03/11}{è¡¨æ&nbsp;¼å†…å­—ä½“è®¾ä¸ºäº”å·ã€‚}
% \changes{v1.0}{2022/08/06}{å…¼å®¹ \pkg{tabularray} è®¾ç½®ã€‚}
% \changes{v1.4}{2024/03/06}{è°ƒæ•´ \pkg{tabularray} è®¾ç½®ã€‚}
% è¡¨æ&nbsp;¼é»˜è®¤å±…ä¸­ï¼Œå­—å·è®¾ç½®ä¸ºäº”å·ã€‚^^A  https://www.zhihu.com/question/366803177/answer/977853129
%    \begin{macrocode}
\BeforeBeginEnvironment { tabular } { \centering \l_@@_fmt_tabular_tl }
\ctex_at_end_package:nn { tabularray }
  {
%    \end{macrocode}
% ç­‰æ•ˆäºŽ \tn{UseTblrLibrary}ã€\tn{SetTblrInner} ä¸Ž \tn{SetTblrOuter}ã€‚
%    \begin{macrocode}
    \__tblr_use_lib_booktabs:
    \tl_set:Nn \l_@@_tmpb_tl
      { , abovesep = 4 pt, stretch  = 0.8, cells = { font = \l_@@_fmt_tabular_tl } }
    \tl_put_right:NV \l__tblr_default_tblr_inner_tl     \l_@@_tmpb_tl
    \tl_put_right:NV \l__tblr_default_talltblr_inner_tl \l_@@_tmpb_tl
    \tl_put_right:NV \l__tblr_default_longtblr_inner_tl \l_@@_tmpb_tl
%    \end{macrocode}
% ä¸ºäº†å’Œæ&nbsp;‡å‡†æ–‡æ¡£ç±»ä¸­çš„é—´è·ä¸€è‡´ï¼Œæ–‡æ¡£ä»‹ç»çš„å€¼ä¸º \qty{10}{pt}ï¼Œå®žé™…æ˜¯ \qty{12.63}{pt}ã€‚
%    \begin{macrocode}
    \tl_put_right:Nn \l__tblr_default_talltblr_outer_tl { , headsep = 12.63 pt }
    \tl_put_right:Nn \l__tblr_default_longtblr_outer_tl { , headsep = 12.63 pt }
%    \end{macrocode}
% å¤„ç† \env{talltblr} è¡¨æ³¨çš„é™å®½é—®é¢˜ã€‚
% \footnote{\url{https://github.com/lvjr/tabularray/issues/255}}
%    \begin{macrocode}
    \DefTblrTemplate { caption-tag } { default }
      { \l_@@_name_table_tl \hspace { 0.25em } \thetable }
    \DefTblrTemplate { caption-sep } { default } { \quad }
    \DefTblrTemplate { firsthead   } { caption }
      {
        \makebox [ \tablewidth ]
          { \parbox { \columnwidth } { \UseTblrTemplate {caption} {normal} } }
      }
    \SetTblrTemplate { firsthead   } { caption }
    \SetTblrStyle { caption } { font = \normalfont \bfseries \small }
    \SetTblrStyle { note    } { font = \normalfont \footnotesize    }
    \SetTblrStyle { remark  } { font = \normalfont \footnotesize    }
  }
%    \end{macrocode}
%
% \changes{v0.12}{2021/12/06}{åˆ&nbsp;é™¤äº†å¯èƒ½å¯¼è‡´å†²çªçš„ \pkg{floatrow}ã€‚}
% \changes{v0.18}{2022/05/08}{å›¾è¡¨æ&nbsp;‡é¢˜ä½¿ç”¨ç²—ä½“ã€‚}
% \changes{v1.4}{2024/05/07}{å›¾è¡¨æ&nbsp;‡é¢˜åŒºåˆ†å•è¡Œå¤šè¡Œè®¾ç½®ã€‚}
% å›¾è¡¨æ&nbsp;‡é¢˜æ&nbsp;·å¼ã€‚æ–‡å­—è®¾ç½®ä¸ºäº”å·å®‹ä½“ï¼Œæ&nbsp;‡ç­¾è®¾ç½®ä¸ºç²—ä½“ï¼Œé—´éš”ä¸€ä¸ªå…¨è§’ç©ºæ&nbsp;¼ã€‚
% æˆ‘ä»¬åœ¨è¿™é‡ŒæŒ‡å®šäº†é•¿åº¦ä¸æ»¡ä¸€è¡Œçš„æ&nbsp;‡é¢˜ä½¿ç”¨å±…ä¸­å¯¹é½ï¼Œè¶…è¿‡ä¸€è¡Œçš„æŒ‰æ­£å¸¸æ®µè½
% æ–¹å¼å»¶ä¼¸è‡³æ–‡å­—åŒºåŸŸå®½åº¦ã€‚
%    \begin{macrocode}
\DeclareCaptionStyle { njucap }
  [ justification = centering ]
  {
    justification = justified,
    font          = {small, bf},
    labelsep      = quad
  }
%    \end{macrocode}
% \changes{v1.4}{2024/05/07}{è½¯æ€§è§„å®šæ&nbsp;‡é¢˜å’Œå›¾è¡¨æœ¬èº«çš„ä½ç½®å…³ç³»ã€‚}
% \pkg{caption} æä¾›çš„æŽ¥å£è½¯æ€§è§„å®šäº†æ&nbsp;‡é¢˜å’Œå›¾è¡¨æœ¬èº«çš„\emph{ä½ç½®å…³ç³»}ï¼Œ
% è€Œå¹¶ä¸ä¼šå¼ºåˆ¶æ”¹å˜æ&nbsp;‡é¢˜ä½ç½®ã€‚
%    \begin{macrocode}
\captionsetup [ figure ] { position = below, style = njucap }
\captionsetup [ table  ] { position = above, style = njucap }
%    \end{macrocode}
%
% \begin{macro}{\ctex_patch_cmd:cnv}
%    \begin{macrocode}
\cs_generate_variant:Nn \ctex_patch_cmd:Nnn { cnv }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{label-sep/figure,label-sep/table,label-sep/equation}
% \changes{v1.0}{2022/07/31}{æ·»åŠ&nbsp;ç¼–å·è¿žæŽ¥ç¬¦è®¾ç½®é¡¹ã€‚}
% ä¿®æ”¹å›¾ç‰‡ã€è¡¨æ&nbsp;¼ã€å…¬å¼ç¼–å·ä¸­çš„è¿žæŽ¥ç¬¦ã€‚
% \footnote{\url{https://tex.stackexchange.com/q/61756/}}
%    \begin{macrocode}
\clist_map_inline:nn { figure, table, equation }
  {
    \keys_define:nn { nju / label-sep }
      {
        #1 .tl_gset:c = { g_@@_sep_ #1 _tl },
%    \end{macrocode}
% æ&nbsp;¹æ®æœ¬ç§‘ç”Ÿæ’°å†™è§„èŒƒçš„å»ºè®®ï¼Œé»˜è®¤è¿žæŽ¥ç¬¦ä¸ºçŸ­æ¨ªçº¿ï¼ˆen dashï¼‰ã€‚
%    \begin{macrocode}
        #1 .initial:n = { - }
      }
    \@@_at_begin_document:n
      { \ctex_patch_cmd:cnv { the #1 } {.} { g_@@_sep_ #1 _tl } }
  }
%    \end{macrocode}
% \end{macro}
%
%
% \subsection{åˆ—è¡¨çŽ¯å¢ƒ}
% \changes{v0.12}{2021/12/07}{åˆ&nbsp;é™¤äº† \pkg{enumitem} çš„éƒ¨åˆ†åˆ—è¡¨çŽ¯å¢ƒè®¾ç½®ã€‚}
%
% ç¼©å‡åˆ—è¡¨çŽ¯å¢ƒçš„æ¡ç›®é—´è·ã€‚
%    \begin{macrocode}
\bool_if:NT \g_@@_opt_load_enit_bool { \setlist { noitemsep } }
%    \end{macrocode}
%
%
% \subsection{å®šç†çŽ¯å¢ƒ}
% \changes{v0.18}{2022/04/21}{æ–°å¢žå®šç†çŽ¯å¢ƒçš„è‹¥å¹²å®šåˆ¶é¡¹ã€‚}
%
% \begin{macro}{\c_@@_name_qed_tl}
% è¯æ¯•ç¬¦å·ä½¿ç”¨ \tn{mdlgwhtsquare} ç»˜åˆ¶ï¼Œå¯¹åº”äºŽ |U+25A1| å­—ç¬¦ã€‚
% \footnote{\url{https://tex.stackexchange.com/q/567135/}}
% å¦‚æžœ \pkg{unicode-math} æœªè½½å…¥ï¼Œåˆ™ä½¿ç”¨é»‘è‰²æ–¹å—ä»£æ›¿ã€‚
%    \begin{macrocode}
\bool_if:NTF \g_@@_opt_load_um_bool
  { \tl_const:Nn \c_@@_name_qed_tl { \ensuremath { \mdlgwhtsquare    } } }
  { \tl_const:Nn \c_@@_name_qed_tl { \ensuremath { \rule {1ex} {1ex} } } }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\l_@@_thm_share_tl}
% å­˜å‚¨å…±äº«çš„è®¡æ•°å™¨åç§°ã€‚
%    \begin{macrocode}
\tl_new:N \l_@@_thm_share_tl
%    \end{macrocode}
% \end{macro}
%
%    \begin{macrocode}
\keys_define:nn { nju / theorem }
  {
%    \end{macrocode}
% \begin{macro}{theorem/style,theorem/header-font,theorem/body-font,
%   theorem/qed-symbol,theorem/counter}
% å®šä¹‰ |nju/theorem| é”®å€¼ç±»ã€‚^^A è¿™æ˜¯å¦ä¹Ÿå¯ä»¥æŠ½è±¡åˆ° xtemplateï¼Ÿ
% ç›®å‰è¿™å¥—é€‰é¡¹åªé€‚ç”¨äºŽæ¨¡æ¿é¢„å®šä¹‰çš„è‹¥å¹²ç§å®šç†çŽ¯å¢ƒã€‚
%    \begin{macrocode}
    style           .tl_set:N = \l_@@_thm_style_tl,
    header-font     .tl_set:N = \l_@@_thm_header_font_tl,
    body-font       .tl_set:N = \l_@@_thm_body_font_tl,
    qed-symbol      .tl_set:N = \l_@@_thm_qed_symbol_tl,
    counter         .tl_set:N = \l_@@_thm_counter_tl,
%    \end{macrocode}
% å®šç†çŽ¯å¢ƒçš„ç¼ºçœå€¼ã€‚
%    \begin{macrocode}
    style          .initial:n = plain,
    header-font    .initial:n = \normalfont \bfseries,
    body-font      .initial:n = \itshape,
    qed-symbol     .initial:V = \c_@@_name_qed_tl,
    counter        .initial:n = chapter,
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{theorem/type}
% å®šä¹‰å®šç†ç±»çŽ¯å¢ƒã€‚
%    \begin{macrocode}
    type        .clist_gset:N = \g_@@_thm_type_clist,
    type           .initial:n =
      {
        { axiom      } { å…¬ç† },
        { corollary  } { æŽ¨è®º },
        { definition } { å®šä¹‰ },
        { example    } { ä¾‹   },
        { lemma      } { å¼•ç† },
        { proof, *+  } { è¯æ˜Ž },
        { theorem    } { å®šç† }
      },
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{theorem/share-counter}
% \changes{v1.3}{2023/05/07}{æ‰¹é‡åˆ›å»ºå®šç†ç±»çŽ¯å¢ƒæ—¶å¯ä»¥å…±äº«è®¡æ•°å™¨ã€‚}
% æ˜¯å¦åœ¨åˆ†ç»„å†…ä½¿ç”¨åŒä¸€è®¡æ•°å™¨ã€‚
%    \begin{macrocode}
    share-counter .bool_set:N = \l_@@_thm_share_bool,
    share-counter  .initial:n = false,
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{theorem/define}
% åˆ›å»ºå®šç†ç±»çŽ¯å¢ƒã€‚
%    \begin{macrocode}
    define .value_forbidden:n = true,
    define            .code:n =
      {
        \clist_if_empty:NT \g_@@_thm_type_clist
          { \msg_error:nn { njuthesis } { empty-theorem-type } }
        \tl_clear:N \l_@@_thm_share_tl
        \clist_map_inline:Nn \g_@@_thm_type_clist
          { \@@_thm_define:Nnn \l_@@_thm_share_tl ##1 }
      }
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_thm_define:Nnn}
% é…ç½®å®šç†çŽ¯å¢ƒã€‚
% \begin{arguments}
%   \item å…±äº«çš„è®¡æ•°å™¨åç§°ï¼Œ|tl| åž‹å˜é‡
%   \item çŽ¯å¢ƒåä¸Žç±»åž‹æ&nbsp;‡è¯†ï¼Œ|clist| åž‹å˜é‡
%   \item å®šç†å¤´åç§°
% \end{arguments}
%    \begin{macrocode}
\cs_new:Npn \@@_thm_define:Nnn
  { \@@_thm_define:NNNNnn \l_@@_tmp_clist \l_@@_tmpa_tl \l_@@_tmpb_tl }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_thm_define:NNNNnn}
%    \begin{macrocode}
\cs_new:Npn \@@_thm_define:NNNNnn #1#2#3#4#5#6
  {
    \bool_if:NF \g_@@_opt_load_nthm_bool
      { \msg_error:nn { njuthesis } { missing-ntheorem } }
    \exp_args:NV \theoremstyle      \l_@@_thm_style_tl
    \exp_args:NV \theoremheaderfont \l_@@_thm_header_font_tl
    \exp_args:NV \theorembodyfont   \l_@@_thm_body_font_tl
%    \end{macrocode}
% æ‹†åˆ†çŽ¯å¢ƒåä¸Žç±»åž‹æ&nbsp;‡è¯†ã€‚è¿™é‡Œæ˜¯è€ƒè™‘åˆ°æ&nbsp;‡è¯†ç¬¦ä¸ä¸€å®šå‡ºçŽ°åœ¨çŽ¯å¢ƒåä¸­ï¼Œ
% å…¸åž‹å¦‚ \env{proof} çŽ¯å¢ƒé»˜è®¤æ—&nbsp;ç¼–å·ä½†ä¹Ÿä¸å«æ˜Ÿå·ã€‚
%    \begin{macrocode}
    \clist_set:Nn #1 {#5}
    \clist_pop:NN #1 #2
    \clist_pop:NN #1 #3
%    \end{macrocode}
% åˆ¤æ–­æ˜¯å¦éœ€è¦è¯æ¯•ç¬¦å·æˆ–ç¼–å·ã€‚
%    \begin{macrocode}
    \tl_if_in:NnT  #3 { + }
      { \exp_args:NV \theoremsymbol \l_@@_thm_qed_symbol_tl }
    \tl_if_in:NnTF #3 { * }
      { \@@_thm_new:VVVn #2 \c_novalue_tl        #4 {#6} }
      { \@@_thm_new:VVVn #2 \l_@@_thm_counter_tl #4 {#6} }
%    \end{macrocode}
% å­˜å‚¨å…±äº«çš„è®¡æ•°å™¨ã€‚
%    \begin{macrocode}
    \bool_if:NT \l_@@_thm_share_bool
      {
        \tl_gset_eq:NN #4 #2
        \bool_gset_false:N \l_@@_thm_share_bool
      }
%    \end{macrocode}
% è®¾ç½® \pkg{cleveref} å¼•ç”¨åã€‚
%    \begin{macrocode}
    \bool_if:NT \g_@@_opt_load_cref_bool
      { \exp_args:NV \crefname #2 {#6} {#6} }
%    \end{macrocode}
% æ¸…é™¤ä¿å­˜çš„è¯æ¯•ç¬¦å·ã€‚
%    \begin{macrocode}
    \theoremsymbol { }
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_thm_new:nnnn,\@@_thm_new:VVVn}
% åŒ…è£… \tn{newtheorem} ä»¥ä¾¿å±•å¼€è¾“å…¥çš„å˜é‡ã€‚æ&nbsp;¹æ® \file{interface3.pdf}
% æ‰‹å†Œ 5.3 èŠ‚æœ€åŽä¸€æ®µå»ºè®®çš„å±•å¼€é¡ºåºï¼Œè¿™é‡Œå°† |V| åž‹å‚æ•°æ”¾åœ¨é&nbsp;å‰çš„ä½ç½®ã€‚
% \begin{arguments}
%   \item çŽ¯å¢ƒå
%   \item è®¡æ•°å™¨å
%   \item å¤´åç§°
% \end{arguments}
% æ&nbsp;¹æ®çŽ¯å¢ƒç»“æŸå‘½ä»¤æ˜¯å¦å­˜åœ¨å¯ä»¥åˆ¤æ–­è¯¥çŽ¯å¢ƒæ˜¯å¦æœ‰å®šä¹‰ï¼Œ
% ç›¸åº”åœ°å¯ä»¥åˆ©ç”¨å±€éƒ¨å®šä¹‰åˆ‡æ¢å®šä¹‰å’Œé‡å®šä¹‰çŽ¯å¢ƒçš„å‘½ä»¤ã€‚
%    \begin{macrocode}
\cs_new_protected:Npn \@@_thm_new:nnnn #1#2#3#4
  {
    \group_begin:
      \cs_if_exist:cT { end #1 }
        { \cs_set_eq:NN \newtheorem \renewtheorem }
      \tl_if_novalue:nTF {#2}
        { \newtheorem * {#1} {#4} }
        {
          \tl_if_empty:nTF {#3}
            { \newtheorem {#1}      {#4} [#2] }
            { \newtheorem {#1} [#3] {#4}      }
        }
    \group_end:
  }
\cs_generate_variant:Nn \@@_thm_new:nnnn { VVVn }
%    \end{macrocode}
% \end{macro}
%
%
% \subsection{å…¬å¼æ&nbsp;·å¼}
% \changes{v1.0}{2022/07/31}{æ–°å¢žè‹¥å¹²å…¬å¼æ&nbsp;·å¼è®¾ç½®ã€‚}
%
% \begin{variable}{
%   \g_@@_opt_math_re_bool,
%   \g_@@_opt_math_int_bool,
%   \g_@@_opt_math_leq_bool,
%   \g_@@_opt_math_vec_bool}
% ç”¨äºŽä»¥ä¸‹è‹¥å¹²é€‰é¡¹çš„ |bool| å˜é‡ã€‚
%    \begin{macrocode}
\bool_new:N \g_@@_opt_math_re_bool
\bool_new:N \g_@@_opt_math_int_bool
\bool_new:N \g_@@_opt_math_leq_bool
\bool_new:N \g_@@_opt_math_vec_bool
%    \end{macrocode}
% \end{variable}
%
% \begin{variable}{\l_@@_name_integral_tl}
% ä¿å­˜ \pkg{unicode-math} å†…ç½®çš„æ‰€æœ‰ç§¯åˆ†å·å‘½ä»¤ã€‚
%    \begin{macrocode}
\bool_if:NTF \g_@@_opt_load_um_bool
  { \tl_set_eq:NN \l_@@_name_integral_tl \l__um_nolimits_tl }
  { \tl_set_eq:NN \l_@@_name_integral_tl \c_empty_tl        }
%    \end{macrocode}
% \end{variable}
%
% \begin{macro}{\@@_um_setup:n}
% å°è£… \tn{unimathsetup}ã€‚
%    \begin{macrocode}
\bool_if:NTF \g_@@_opt_load_um_bool
  { \cs_new:Npn   \@@_um_setup:n #1 { \keys_set:nn { unicode-math } {#1} } }
  { \cs_new_eq:NN \@@_um_setup:n \use_none:n }
%    \end{macrocode}
% \end{macro}
%
% ^^A é€‰é¡¹åç§°æ¥è‡ª thuthesis
%    \begin{macrocode}
\keys_define:nn { nju / math }
  {
%    \end{macrocode}
% \begin{macro}{math/integral}
% ç§¯åˆ†å·æ&nbsp;·å¼ï¼Œç›´ç«‹æˆ–å€¾æ–œã€‚
%    \begin{macrocode}
    integral                      .choice:,
    integral / upright              .code:n  =
      { \bool_gset_true:N  \g_@@_opt_math_int_bool },
    integral / slanted              .code:n  =
      { \bool_gset_false:N \g_@@_opt_math_int_bool },
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{math/integral-limits}
% ç§¯åˆ†å·ä¸Šä¸‹é™çš„ä½ç½®ï¼Œåœ¨ä¸Šä¸‹æˆ–åœ¨å³ä¾§ã€‚
% ä¸¤ä¸ªé€‰é¡¹åˆ†åˆ«ç›¸å½“äºŽ \tn{removenolimits} å’Œ \tn{addnolimits}ã€‚
%    \begin{macrocode}
    integral-limits               .choice:,
    integral-limits / true          .code:n  =
      { \tl_clear:N   \l__um_nolimits_tl },
    integral-limits / false         .code:n  =
      { \tl_set_eq:NN \l__um_nolimits_tl \l_@@_name_integral_tl },
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{math/less-than-or-equal}
% å°äºŽç­‰äºŽå·å’Œå¤§äºŽç­‰äºŽå·çš„æ¨ªçº¿æ&nbsp;·å¼ï¼Œå€¾æ–œæˆ–æ°´å¹³ã€‚
%    \begin{macrocode}
    less-than-or-equal            .choice:,
    less-than-or-equal / slanted    .code:n  =
      { \bool_gset_true:N  \g_@@_opt_math_leq_bool },
    less-than-or-equal / horizontal .code:n  =
      { \bool_gset_false:N \g_@@_opt_math_leq_bool },
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{math/math-ellipsis}
% çœç•¥å·çš„æ&nbsp;·å¼ï¼Œå±…ä¸­æˆ–åº•éƒ¨ã€‚
%    \begin{macrocode}
    math-ellipsis                 .choice:,
    math-ellipsis / centered        .code:n  =
      {
        \DeclareRobustCommand \mathellipsis
          { \mathinner { \unicodecdots    } }
      },
    math-ellipsis / lower           .code:n  =
      {
        \DeclareRobustCommand \mathellipsis
          { \mathinner { \unicodeellipsis } }
      },
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{math/partial}
% åå¾®åˆ†å·æ&nbsp;·å¼ï¼Œæ­£ä½“æˆ–æ–œä½“ã€‚
%    \begin{macrocode}
    partial                      .choices:nn =
      { upright, italic } { \@@_um_setup:n { partial = #1 } },
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{math/real-part}
% å®žéƒ¨å’Œè™šéƒ¨ç¬¦å·çš„æ&nbsp;·å¼ï¼Œç½—é©¬ä½“æˆ–èŠ±ä½“ã€‚
%    \begin{macrocode}
    real-part                     .choice:,
    real-part / roman               .code:n  =
      { \bool_set_true:N  \g_@@_opt_math_re_bool },
    real-part / fraktur             .code:n  =
      { \bool_set_false:N \g_@@_opt_math_re_bool },
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{math/vector}
% å‘é‡ç¬¦å·æ&nbsp;·å¼ï¼Œç²—æ–œä½“æˆ–ç®­å¤´ã€‚
%    \begin{macrocode}
    vector                        .choice:,
    vector / boldfont               .code:n  =
      { \bool_gset_true:N  \g_@@_opt_math_vec_bool },
    vector / arrow                  .code:n  =
      { \bool_gset_false:N \g_@@_opt_math_vec_bool },
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{math/uppercase-greek}
% å¤§å†™å¸Œè…Šå­—æ¯çš„æ&nbsp;·å¼ï¼Œæ­£ä½“æˆ–æ–œä½“ã€‚
%    \begin{macrocode}
    uppercase-greek               .choice:,
    uppercase-greek / upright       .code:n  =
      { \@@_um_setup:n { math-style = ISO } },
    uppercase-greek / italic        .code:n  =
      { \@@_um_setup:n { math-style = TeX } },
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{math/style}
% æ•´ä½“æ&nbsp;·å¼ã€‚
%    \begin{macrocode}
    style                         .choice:,
    style / TeX                     .code:n  =
      {
        \keys_set:nn { nju / math }
          {
            integral           = slanted,
            integral-limits    = false,
            less-than-or-equal = horizontal,
            math-ellipsis      = centered,
            partial            = italic,
            real-part          = fraktur,
            vector             = arrow,
            uppercase-greek    = upright
          }
        \@@_um_setup:n { bold-style = TeX }
      },
    style / ISO                     .code:n  =
      {
        \keys_set:nn { nju / math }
          {
            integral           = upright,
            integral-limits    = true,
            less-than-or-equal = horizontal,
            math-ellipsis      = lower,
            partial            = upright,
            real-part          = roman,
            vector             = arrow,
            uppercase-greek    = italic
          }
        \@@_um_setup:n { bold-style = ISO }
      },
    style / GB                      .code:n  =
      {
        \keys_set:nn { nju / math }
          {
            integral           = upright,
            integral-limits    = false,
            less-than-or-equal = slanted,
            math-ellipsis      = centered,
            partial            = upright,
            real-part          = roman,
            vector             = boldfont,
            uppercase-greek    = italic
          }
        \@@_um_setup:n { bold-style = ISO }
      },
    style                        .initial:n  = GB
  }
%    \end{macrocode}
% \end{macro}
%
% \changes{v1.3}{2023/05/22}{ç¦ç”¨ \pkg{unicode-math} æ—¶ä¸é…ç½®æ•°å­¦å­—ä½“ã€‚}
% åœ¨ |\begin{document}| å¤„è½½å…¥å­—ä½“ä»¥å…¼å®¹ \pkg{mathtools}ï¼Œ
% å¹¶è®¾ç½®å°äºŽç­‰äºŽå·å’Œå®žéƒ¨ç¬¦å·ç­‰çš„æ&nbsp;·å¼ã€‚
%    \begin{macrocode}
\bool_if:NT \g_@@_opt_load_um_bool
  {
    \@@_at_begin_document:n
      {
        \use:c { @@_loadfont_math_ \g_@@_font_math_tl : }
        \bool_if:NT \g_@@_opt_math_leq_bool
          {
            \cs_set_eq:NN \le  \leqslant
            \cs_set_eq:NN \ge  \geqslant
            \cs_set_eq:NN \leq \leqslant
            \cs_set_eq:NN \geq \geqslant
          }
        \bool_if:NT \g_@@_opt_math_re_bool
          {
            \cs_set:Npn \Re { \operatorname { Re } }
            \cs_set:Npn \Im { \operatorname { Im } }
          }
        \bool_if:NT \g_@@_opt_math_vec_bool
          { \cs_set_eq:NN \vec \symbf }
      }
  }
%&lt;/class&gt;
%    \end{macrocode}
%
%
% \subsection{å°é¢}
%
% \subsubsection{ç»˜åˆ¶éƒ¨ä»¶}
% \changes{v0.16}{2022/03/01}{å°†å°é¢éƒ¨ä»¶åˆ†ç¦»åˆ° \file{.def} æ–‡ä»¶ã€‚}
%
% \paragraph{æœ¬ç§‘ç”Ÿ}
%
% \subparagraph{å°é¢}
%
% \begin{macro}{u/cover/emblem-img}
% \changes{v1.1}{2023/01/15}{æœ¬ç§‘ç”Ÿæ¨¡æ¿å°é¢æ&nbsp;¡å¾½å±…ä¸­ã€‚}
% \changes{v1.2}{2023/05/02}{æ›´æ­£æœ¬ç§‘ç”Ÿæ¨¡æ¿å°é¢å­—ä½“å’Œè¡Œè·ã€‚}
% æœ¬ç§‘ç”Ÿå°é¢æ&nbsp;¡å¾½å›¾ç‰‡å®žä¾‹ã€‚
%    \begin{macrocode}
%&lt;*def-u&gt;
\@@_declare_element:nn { u / cover / emblem-img }
  {
    content     = \@@_emblem:N \l_@@_emblemwd_dim,
    bottom-skip = 1.2 cm
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{u/cover/name-img}
% æœ¬ç§‘ç”Ÿå°é¢æ&nbsp;¡åå›¾ç‰‡å®žä¾‹ã€‚
%    \begin{macrocode}
\@@_declare_element:nn { u / cover / name-img }
  {
    content     = \@@_name:N \l_@@_namewd_dim,
    bottom-skip = 1 cm,
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{u/cover/title}
% æœ¬ç§‘ç”Ÿå°é¢æ&nbsp;‡é¢˜å®žä¾‹ã€‚
%    \begin{macrocode}
\@@_declare_element:nn { u / cover / title }
  {
    content     = \@@_name:n { type },
    format      = \zihao { 1 } \bfseries \@@_set_ccglue:n { .5 em },
    bottom-skip = 0 cm plus 1 fill
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{u/cover/info}
% \changes{v1.3}{2023/05/25}{å°†æœ¬ç§‘ç”Ÿå°é¢ä¿¡æ¯æ¢å¤è‡³ v1.1 çš„å®‹ä½“æ&nbsp;¼å¼ã€‚}
% æœ¬ç§‘ç”Ÿå°é¢ä¿¡æ¯æ&nbsp;å®žä¾‹ã€‚
%    \begin{macrocode}
\@@_declare_element:nn { u / cover / info }
  {
    content = \@@_u_cover_info:,
    format  = \zihao { 3 }
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_u_cover_info:NNNN}
% æœ¬ç§‘ç”Ÿå°é¢ä¿¡æ¯æ&nbsp;ã€‚
% \begin{arguments}
%   \item åç§°ç›’å­å®½åº¦ï¼Œ|dim| åž‹å˜é‡
%   \item é•¿å†…å®¹ç›’å­å®½åº¦ï¼Œ|dim| åž‹å˜é‡
%   \item é—´éš”å®½åº¦ï¼Œ|dim| åž‹å˜é‡
%   \item æ&nbsp;‡ç­¾æ&nbsp;¼å¼
% \end{arguments}
%    \begin{macrocode}
\cs_new_protected:Npn \@@_u_cover_info:NNNN #1#2#3#4
  {
    \@@_cover_entry:NNNn #1 #2 #4 { dept  }
    \@@_cover_entry:NNNn #1 #2 #4 { major }
    \@@_cover_entry_title:NNN #1 #2 #4
%    \end{macrocode}
% çŸ­å†…å®¹ç›’å­çš„é•¿åº¦å€¼æ˜¯é€šè¿‡è®¡ç®—å¾—åˆ°çš„ã€‚|dim| åž‹å˜é‡çš„ä¹˜é™¤éœ€è¦é‡‡å–
% \cs{dim_ratio:nn} æä¾›çš„å½¢å¼ã€‚
%    \begin{macrocode}
    \dim_set:Nn \l_@@_tmpb_dim { #2 * 1/2 - #1 * 1/2 - #3 }
    \@@_cover_entry:NNNnn #1 \l_@@_tmpb_dim #4 { grade } { id }
    \@@_cover_entry:NNNn #1 #2 #4 { author }
    \@@_cover_entry_supv:NNNn #1 \l_@@_tmpb_dim #4 { supv }
    \bool_if:NT \g_@@_opt_supvii_bool
      { \@@_cover_entry_supv:NNNn #1 \l_@@_tmpb_dim #4 { supvii } }
    \@@_cover_entry:NNNn #1 #2 #4 { submitdate }
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_u_cover_info:}
%    \begin{macrocode}
\cs_new:Npn \@@_u_cover_info:
  {
    \@@_u_cover_info:NNNN \l_@@_clabelwd_dim \l_@@_crulewd_dim
      \l_@@_hsep_dim \kaishu
  }
%    \end{macrocode}
% \end{macro}
%
% \subparagraph{è¯šä¿¡æ‰¿è¯ºä¹¦}
% \changes{v1.2}{2023/05/02}{æ›´æ­£æœ¬ç§‘ç”Ÿæ¨¡æ¿æ‰¿è¯ºä¹¦è¡Œè·ã€‚}
%
% \begin{macro}{u/decl/orig/emblem}
% æœ¬ç§‘ç”Ÿè¯šä¿¡æ‰¿è¯ºä¹¦æ&nbsp;¡å¾½å®žä¾‹ã€‚
%    \begin{macrocode}
\@@_declare_element:nn { u / decl / orig / emblem }
  {
    content     = \@@_emblem:N \l_@@_emblemwdi_dim,
    bottom-skip = 30 pt
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{u/decl/orig/title}
% æœ¬ç§‘ç”Ÿè¯šä¿¡æ‰¿è¯ºä¹¦æ&nbsp;‡é¢˜å®žä¾‹ã€‚
% Word æ¨¡æ¿ä¸­çš„è¡Œè·æ˜¯å›ºå®šå€¼ \qty{36}{bp}ï¼Œè¿™é‡Œéœ€è¦é™¤ä»¥ 1.625 çš„ \tn{linespread}ã€‚
%    \begin{macrocode}
\@@_declare_element:nn { u / decl / orig / title }
  {
    content     = \l_@@_name_origdecl_tl,
    format      = \sffamily \@@_fontsize:nn { 24 bp } { 22.15 bp } \bfseries,
    bottom-skip = 50 pt
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{u/decl/orig/text}
% æœ¬ç§‘ç”Ÿè¯šä¿¡æ‰¿è¯ºä¹¦æ–‡æœ¬å®žä¾‹ã€‚
%    \begin{macrocode}
\@@_declare_element:nn { u / decl / orig / text }
  {
    content     = \l_@@_text_origdecl_tl,
    format      = \@@_zihao:nn { 1.9 } { -3 },
    align       = n,
    bottom-skip = 2.7 cm
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{u/decl/orig/sign}
% æœ¬ç§‘ç”Ÿè¯šä¿¡æ‰¿è¯ºä¹¦ç­¾ååŒºå®žä¾‹ã€‚
%    \begin{macrocode}
\@@_declare_element:nn { u / decl / orig / sign }
  {
    content = \@@_decl_sign:,
    format  = \zihao { -3 } \sffamily,
    align   = r
  }
%&lt;/def-u&gt;
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_decl_sign:}
% é€šç”¨çš„æ‰¿è¯ºä¹¦ç­¾ååŒºã€‚
%    \begin{macrocode}
%&lt;*(def-u|def-g)&gt;
\cs_new_protected:Npn \@@_decl_sign:
  {
%&lt;def-u&gt;    \clist_map_inline:nn { origsign, id, date }
%&lt;def-g&gt;    \clist_map_inline:nn { origsign,     date }
      { \tex_par:D \@@_name:n {##1} ï¼š \hbox_to_wd:nn { 6 em } { } }
  }
%&lt;/(def-u|def-g)&gt;
%    \end{macrocode}
% \end{macro}
%
% \paragraph{ç&nbsp;”ç©¶ç”Ÿ}
% \changes{v1.0}{2022/06/30}{è°ƒæ•´ç&nbsp;”ç©¶ç”Ÿå°é¢å¸ƒå±€ã€‚}
% \changes{v1.2}{2023/05/01}{æ›´æ–°2023å¹´æ–°ç‰ˆç&nbsp;”ç©¶ç”Ÿå­¦ä½è®ºæ–‡å°é¢å¸ƒå±€ã€‚}
%
% \subparagraph{æ­£é¢} åŒ…æ‹¬æ&nbsp;¡åã€æ&nbsp;¡å¾½ã€æ&nbsp;‡é¢˜ã€ä¿¡æ¯æ&nbsp;ã€‚
%
% \begin{macro}{g/cover-front/top}
% ç&nbsp;”ç©¶ç”Ÿå°é¢é¡¶éƒ¨ä¿¡æ¯å®žä¾‹ã€‚
% å›&nbsp;ä¸ºæˆ‘ä»¬è®¾ç½®äº†å…¨å±€çš„ |linespread=1.625|ï¼Œæ­¤å¤„å•å€è¡Œè·å¯¹åº”çš„å€æ•°ä¸º $1.3/1.2$ã€‚
%    \begin{macrocode}
%&lt;*def-g&gt;
\@@_declare_element:nn { g / cover-front / top }
  {
    content     =
      \skip_vertical:n { -9 bp } \skip_horizontal:n { -.5 cm }
      \vbox:n { \@@_g_cover_top: },
    format      = \normalfont \@@_zihao:nn { 1.083 } { -5 },
    bottom-skip = 20 pt,
    align       = l
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{g/cover-front/emblem-img}
% ç&nbsp;”ç©¶ç”Ÿå°é¢æ&nbsp;¡å¾½å›¾ç‰‡å®žä¾‹ã€‚
%    \begin{macrocode}
\@@_declare_element:nn { g / cover-front / emblem-img }
  {
    content     = \@@_emblem:N \l_@@_emblemwd_dim,
    bottom-skip = .47 cm
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{g/cover-front/name-img}
% ç&nbsp;”ç©¶ç”Ÿå°é¢æ&nbsp;¡åå›¾ç‰‡å®žä¾‹ã€‚
%    \begin{macrocode}
\@@_declare_element:nn { g / cover-front / name-img }
  {
    content     = \@@_name:N \l_@@_namewd_dim,
    bottom-skip = 2.25 cm
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{g/cover-front/type}
% ç&nbsp;”ç©¶ç”Ÿå°é¢æ&nbsp;‡é¢˜å®žä¾‹ã€‚
%    \begin{macrocode}
\@@_declare_element:nn { g / cover-front / type }
  {
    content     = \@@_info:n { type } \@@_name:n { type },
    format      =
      \@@_fontsize:nn { 28 bp } { 28 bp } \@@_stzhongs: \bfseries
      \@@_set_ccglue:n { .5 em },
    bottom-skip = 20 pt plus 1 fill
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{g/cover-front/info}
% ç&nbsp;”ç©¶å°é¢ä¿¡æ¯æ&nbsp;å®žä¾‹ã€‚
%    \begin{macrocode}
\@@_declare_element:nn { g / cover-front / info }
  {
    content     = \@@_g_cover_info:,
    bottom-skip = 20 pt plus 1 fill
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{g/cover-front/date}
% ç&nbsp;”ç©¶å°é¢æ—¥æœŸå®žä¾‹ã€‚
%    \begin{macrocode}
\@@_declare_element:nn { g / cover-front / date }
  {
    content     = \g_@@_info_submitdate_tl,
    bottom-skip = 2.2 cm
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_g_cover_top:}
% \changes{v1.2}{2023/05/03}{æ&nbsp;¹æ®å­¦å·é•¿åº¦ç¡®å®šç&nbsp;”ç©¶ç”Ÿå°é¢é¡¶éƒ¨çš„ä¸‹åˆ’çº¿é•¿åº¦ã€‚}
% ç&nbsp;”ç©¶ç”Ÿå°é¢é¡¶éƒ¨ä¿¡æ¯æ&nbsp;ã€‚
%    \begin{macrocode}
\cs_new_protected:Npn \@@_g_cover_top:
  {
    \dim_set:Nn \l_@@_tmpa_dim { 4 em }
    \@@_get_width:NV \l_@@_tmpb_dim \g_@@_info_id_tl
    \clist_map_inline:nn { code, clc, secretlv, udc, id }
      {
        \@@_cover_entry:NNNNn \l_@@_name_colon_tl \l_@@_tmpa_dim
          \l_@@_tmpb_dim \tex_relax:D {##1}
      }
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_g_cover_info:NNNNN}
% ç&nbsp;”ç©¶ç”Ÿå°é¢ä¸­éƒ¨ä¿¡æ¯æ&nbsp;ã€‚
%    \begin{macrocode}
\cs_new_protected:Npn \@@_g_cover_info:NNNNN #1#2#3#4#5
  {
    \bool_if:NTF \g_@@_opt_academic_bool
      { \clist_set:Nn #1 { author, major,  field, supvfull } }
      { \clist_set:Nn #1 { author, majorc, field, supvfull } }
    \@@_cover_entry_title:NNNN #2 #3 #4 #5
    \clist_map_inline:Nn #1
      { \@@_cover_entry:NNNNn #2 #3 #4 #5 {##1} }
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_g_cover_info:}
%    \begin{macrocode}
\cs_new:Npn \@@_g_cover_info:
  {
    \tl_set:Nn \l_@@_tmpa_tl { \skip_horizontal:n { .7 cm } }
    \@@_g_cover_info:NNNNN \l_@@_tmp_clist \l_@@_tmpa_tl
      \l_@@_clabelwd_dim \l_@@_crulewd_dim \l_@@_fmt_coverlabel_tl
  }
%    \end{macrocode}
% \end{macro}
%
% \subparagraph{èƒŒé¢}
%
% \begin{macro}{g/cover-back/info}
% ç&nbsp;”ç©¶ç”Ÿå°é¢èƒŒé¢ä¿¡æ¯å®žä¾‹ã€‚
%    \begin{macrocode}
\@@_declare_element:nn { g / cover-back / info }
  {
    content     = \@@_g_cover_back:,
    bottom-skip = 8.1 cm
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{g/cover-back/sign}
% ç&nbsp;”ç©¶ç”Ÿå°é¢èƒŒé¢ä¿¡æ¯å®žä¾‹ã€‚
%    \begin{macrocode}
\@@_declare_element:nn { g / cover-back / sign }
  {
    content = \@@_g_cover_sign:,
    align   = l
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_cover_back_g:NNN,\@@_cover_back_g:}
% ç&nbsp;”ç©¶ç”Ÿå°é¢èƒŒé¢ä¿¡æ¯ã€‚
% \begin{arguments}
%   \item åç§°ç›’å­å®½åº¦ï¼Œ|dim| åž‹å˜é‡
%   \item å†…å®¹ç›’å­å®½åº¦ï¼Œ|dim| åž‹å˜é‡
%   \item æ&nbsp;‡ç­¾æ&nbsp;¼å¼
% \end{arguments}
%    \begin{macrocode}
\cs_new_protected:Npn \@@_g_cover_back:NNN #1#2#3
  {
    \@@_cover_entry:NNNNn \c_empty_tl #1 #2 #3 { chairman }
    \tex_par:D
    \@@_box_spread_name:NNn #1 #3 { reviewer }
    \parbox [ t ] {#2}
      {
        \@@_box_multiline:NNn \g_@@_info_reviewer_clist #2 { 5 }
        \dim_gset_eq:NN \l_@@_tmpa_dim \tex_prevdepth:D
      }
    \tex_par:D
    \dim_set_eq:NN \tex_prevdepth:D \l_@@_tmpa_dim
    \@@_box_spread_name:NNn #1 #3 { defend date }
    \@@_box_center:Nn #2 { \@@_info:n { defend date } }
  }
\cs_new:Npn \@@_g_cover_back:
  {
    \@@_g_cover_back:NNN \l_@@_clabelwdi_dim
      \l_@@_crulewdi_dim \l_@@_fmt_coverlabel_tl
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_cover_sign_g:NNN,\@@_cover_sign_g:}
% ç&nbsp;”ç©¶ç”Ÿå°é¢èƒŒé¢ä¿¡æ¯ã€‚
% \begin{arguments}
%   \item åç§°ç›’å­å®½åº¦ï¼Œ|dim| åž‹å˜é‡
%   \item æ&nbsp;‡ç­¾æ&nbsp;¼å¼
%   \item åˆ†éš”ç¬¦
% \end{arguments}
%    \begin{macrocode}
\cs_new_protected:Npn \@@_g_cover_sign:NNN #1#2#3
  {
    \@@_box_spread_name:NNn #1 #2 { sign a } #3 \tex_par:D
    \@@_box_spread_name:NNn #1 #2 { sign b } #3
  }
\cs_new:Npn \@@_g_cover_sign:
  {
    \@@_g_cover_sign:NNN \l_@@_clabelwdii_dim
      \l_@@_fmt_coverlabel_tl \l_@@_name_colon_tl
  }
%    \end{macrocode}
% \end{macro}
%
% \subparagraph{è‹±æ–‡å°é¢} åŒ…æ‹¬æ&nbsp;‡é¢˜ã€é¡¶éƒ¨ã€ä¸­éƒ¨ã€æ&nbsp;¡å¾½ã€åº•éƒ¨ã€‚
% \changes{v1.3}{2023/08/21}{ä¿®å¤è‹±æ–‡æ&nbsp;‡é¢˜è¶…é•¿å¼•å‘çš„é¡µé¢å…ƒç´&nbsp;æ··ä¹±ã€‚}
%
% \begin{macro}{g/cover-en/title}
% ç&nbsp;”ç©¶ç”Ÿè‹±æ–‡å°é¢æ&nbsp;‡é¢˜å®žä¾‹ã€‚
%    \begin{macrocode}
\@@_declare_element:nn { g / cover-en / title }
  {
    content     = \g_@@_info_title_en_tl,
    format      = \bf \sffamily \zihao { 2 },
    bottom-skip = 1 cm plus 1 fil minus .5 cm
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{g/cover-en/top}
% ç&nbsp;”ç©¶ç”Ÿè‹±æ–‡å°é¢é¡¶éƒ¨ä¿¡æ¯å®žä¾‹ã€‚
%    \begin{macrocode}
\@@_declare_element:nn { g / cover-en / top }
  {
    content      =
      { by }
      \skip_vertical:N \c_zero_skip
      \textbf { \sffamily \g_@@_info_author_en_tl }
      \skip_vertical:n { .5 cm minus .5 cm }
      { Supervised~ by }
      \skip_vertical:N \c_zero_skip
      \textsf { \g_@@_info_supv_en_tl
        \tex_par:D \g_@@_info_supvii_en_tl },
    format      = \zihao { 4 },
    bottom-skip = 1 cm plus 1 fil minus .5 cm
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{g/cover-en/middle}
% ç&nbsp;”ç©¶ç”Ÿè‹±æ–‡å°é¢ä¸­éƒ¨ä¿¡æ¯å®žä¾‹ã€‚
%    \begin{macrocode}
\@@_declare_element:nn { g / cover-en / middle }
  {
    content     =
      \l_@@_text_cover_en_tl \@@_vskip:
      \group_begin: \scshape \g_@@_info_degree_en_tl \group_end:
      \@@_vskip: { in } \@@_vskip: \g_@@_info_major_en_tl,
    bottom-skip = .5 cm plus 1 fil
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{g/cover-en/emblem-img}
% ç&nbsp;”ç©¶ç”Ÿè‹±æ–‡å°é¢æ&nbsp;¡å¾½å›¾ç‰‡å®žä¾‹ã€‚
%    \begin{macrocode}
\@@_declare_element:nn { g / cover-en / emblem-img }
  {
    content     = \@@_emblem:N \l_@@_emblemwdii_dim,
    bottom-skip = 1 cm minus .5 cm
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{g/cover-en/bottom}
% ç&nbsp;”ç©¶ç”Ÿè‹±æ–‡å°é¢åº•éƒ¨ä¿¡æ¯å®žä¾‹ã€‚
%    \begin{macrocode}
\@@_declare_element:nn { g / cover-en / bottom }
  {
    content =
      \g_@@_info_dept_en_tl \skip_vertical:N \c_zero_skip
      \l_@@_name_nju_en_tl  \skip_vertical:n { 1 cm }
      \g_@@_info_submitdate_en_tl
  }
%    \end{macrocode}
% \end{macro}
%
% \subparagraph{å›½å®¶å›¾ä¹¦é¦†å°é¢} åŒ…æ‹¬é¡¶éƒ¨ã€é¢˜åã€æ&nbsp;‡é¢˜ã€ä¸­éƒ¨ã€åº•éƒ¨ã€æ—¥æœŸã€‚
%
% \begin{macro}{cover-nl/top}
% å›½å®¶å›¾ä¹¦é¦†å°é¢é¡¶éƒ¨ä¿¡æ¯å®žä¾‹ã€‚
%    \begin{macrocode}
\@@_declare_element:nn { cover-nl / top }
  {
    content     = \@@_cover_top_nl:,
    bottom-skip = 2 cm
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{cover-nl/name}
% å›½å®¶å›¾ä¹¦é¦†å°é¢æ&nbsp;‡é¢˜åç§°å®žä¾‹ã€‚
%    \begin{macrocode}
\@@_declare_element:nn { cover-nl / name }
  {
    content     =
      \dim_set:Nn \l_@@_tmpa_dim { 6 em }
      \@@_box_spread_name:Nn \l_@@_tmpa_dim { titleb },
    format      = \zihao { -0 },
    bottom-skip = 0 pt plus 1 fil
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{cover-nl/title}
% å›½å®¶å›¾ä¹¦é¦†å°é¢æ&nbsp;‡é¢˜å®žä¾‹ã€‚
%    \begin{macrocode}
\@@_declare_element:nn { cover-nl / title }
  {
    content     = \@@_cover_title_nl:,
    format      = \zihao { 1 },
    bottom-skip = 0 pt plus 1 fil
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{cover-nl/middle}
% å›½å®¶å›¾ä¹¦é¦†å°é¢ä¸­éƒ¨ä¿¡æ¯å®žä¾‹ã€‚
%    \begin{macrocode}
\@@_declare_element:nn { cover-nl / middle }
  {
    content     = \@@_cover_info_nl:,
    format      = \zihao { 4 },
    bottom-skip = 0 pt plus 1.2 fil
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{cover-nl/bottom}
% å›½å®¶å›¾ä¹¦é¦†å°é¢åº•éƒ¨ä¿¡æ¯å®žä¾‹ã€‚
%    \begin{macrocode}
\@@_declare_element:nn { cover-nl / bottom }
  {
    content     = \@@_cover_bottom_nl:,
    bottom-skip = 1 cm,
    align       = r
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{cover-nl/date}
% å›½å®¶å›¾ä¹¦é¦†å°é¢åº•éƒ¨æ—¥æœŸå®žä¾‹ã€‚
%    \begin{macrocode}
\@@_declare_element:nn { cover-nl / date }
  {
    content = \g_@@_info_bottomdate_tl,
    format  = \kaishu \zihao { 3 }
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_cover_top_nl:,\@@_cover_top_nl:NN}
% å›½å®¶å›¾ä¹¦é¦†å°é¢é¡¶éƒ¨ä¿¡æ¯ã€‚
%    \begin{macrocode}
\cs_new:Npn \@@_cover_top_nl:
  { \@@_cover_top_nl:NN \l_@@_tmpa_dim \l_@@_tmpb_dim }
\cs_new_protected:Npn \@@_cover_top_nl:NN #1#2
  {
    \dim_set:Nn               #1 { 38.6 pt  }
    \dim_set:Nn               #2 { 109  pt  }
    \@@_box_spread_name:Nn #1 { clc      } \@@_hskip:
    \@@_box_ulined_info:Nn #2 { clc      } \tex_hfill:D
    \@@_box_spread_name:Nn #1 { secretlv } \@@_hskip:
    \@@_box_ulined_info:Nn #2 { secretlv } \tex_par:D
    \@@_box_spread_name:Nn #1 { udc      } \@@_hskip:
    \@@_box_ulined_info:Nn #2 { udc      } \tex_hfill:D
    \@@_null:
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_cover_title_nl:}
% å›½å®¶å›¾ä¹¦é¦†å°é¢æ&nbsp;‡é¢˜ã€‚
%    \begin{macrocode}
\cs_new_protected:Npn \@@_cover_title_nl:
  {
    \parbox [ b ] { 15 em } { \@@_uline_title: } \tex_par:D
    \skip_vertical:n { - 0.5 cm }
    { \zihao { 4 } \l_@@_name_subtitle_tl }
    \skip_vertical:N \c_zero_skip
    \dim_set:Nn \l_@@_tmpa_dim { 4.5 em }
    \@@_box_ulined_info:Nn \l_@@_tmpa_dim { author }
    \skip_vertical:n { - 0.5 cm }
    { \zihao { 4 } { ( } \l_@@_name_author_tl { ) } }
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_cover_info_nl:}
% \changes{v0.17}{2022/04/09}{ä¼˜åŒ–å›½å®¶å›¾ä¹¦é¦†å°é¢å¯¼å¸ˆè”ç³»æ–¹å¼çš„è¾“å‡ºæ&nbsp;¼å¼ã€‚}
% \changes{v0.19}{2022/05/23}{è¡¥å……å›½å®¶å›¾ä¹¦é¦†å°é¢çš„å­¦ä½æŽˆäºˆå•ä½å’Œæ—¥æœŸã€‚}
% å›½å®¶å›¾ä¹¦é¦†å°é¢ä¿¡æ¯æ&nbsp;ã€‚
%    \begin{macrocode}
\cs_new_protected:Npn \@@_cover_info_nl:
  {
    \tl_set:Ne \l_@@_tmpa_tl
      {
        \clist_use:Nn \g_@@_info_supv_clist   { ~ }
        \clist_use:Nn \g_@@_info_supvii_clist { ~ }
        \@@_hskip: \g_@@_info_supvcont_tl
      }
    \skip_set:Nn \l_@@_tmp_skip { .5 em plus 1 fill }
    \@@_uline_list:NNn \l_@@_tmpa_tl \l_@@_tmp_skip
      { \l_@@_name_supvinfo_tl }
%    \end{macrocode}
% ä¸´æ—¶æ›¿æ¢æ˜¾ç¤ºçš„åç§°å­—æ&nbsp;·ã€‚
%    \begin{macrocode}
    \group_begin:
      \tl_set_eq:NN \l_@@_name_major_tl \l_@@_name_majorb_tl
      \@@_uline_bientry:Nn \l_@@_tmpa_dim { degree   }
      \@@_uline_bientry:Nn \l_@@_tmpa_dim { major    }
      \tex_par:D
    \group_end:
    \@@_uline_bientry:Nn \l_@@_tmpa_dim { submitdate }
    \@@_uline_bientry:Nn \l_@@_tmpa_dim { defenddate }
    \tex_par:D
    \@@_uline_entry:Nn   \l_@@_tmpa_dim { confer     }
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_cover_bottom_nl:}
% \changes{v0.19}{2022/05/20}{å°†å›½å®¶å›¾ä¹¦é¦†å°é¢çš„è¯„å®¡å§”å‘˜ä¼šäººæ•°åˆ†ç¦»ä¸ºå•ç‹¬å‚æ•°ã€‚}
% \changes{v0.20}{2022/05/27}{è‡ªåŠ¨è¯†åˆ«è¯„å®¡å§”å‘˜ä¼šäººæ•°ã€‚}
% å›½å®¶å›¾ä¹¦é¦†å°é¢åº•éƒ¨ä¿¡æ¯ã€‚
%    \begin{macrocode}
\cs_new_protected:Npn \@@_cover_bottom_nl:
  {
    \dim_set:Nn \l_@@_tmpa_dim { 9 em }
    \@@_name:n { chairman } \@@_name:n { colon } \@@_hskip:
    \@@_box_ulined_info:Nn \l_@@_tmpa_dim { chairman } \tex_par:D
    \@@_name:n { reviewer } \@@_name:n { colon } \@@_hskip:
    \@@_box_multiline:NNn \g_@@_info_reviewer_clist \l_@@_tmpa_dim { 4 }
  }
%    \end{macrocode}
% \end{macro}
%
% \subparagraph{åŽŸåˆ›æ€§å£°æ˜Ž}
%
% \begin{macro}{g/decl/orig/title}
% ç&nbsp;”ç©¶ç”ŸåŽŸåˆ›æ€§å£°æ˜Žæ&nbsp;‡é¢˜å®žä¾‹ã€‚
%    \begin{macrocode}
\@@_declare_element:nn { g / decl / orig / title }
  {
    content     = \l_@@_name_origdecl_tl,
    format      = \l_@@_fmt_chapter_tl,
    bottom-skip = \l_@@_chapterafter_dim
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{g/decl/orig/text}
% ç&nbsp;”ç©¶ç”ŸåŽŸåˆ›æ€§å£°æ˜Žæ–‡æœ¬å®žä¾‹ã€‚
%    \begin{macrocode}
\@@_declare_element:nn { g / decl / orig / text }
  {
    content     = \l_@@_text_origdecl_tl,
    align       = n,
    bottom-skip = 0 pt plus 1 fil
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{g/decl/orig/sign}
% ç&nbsp;”ç©¶ç”ŸåŽŸåˆ›æ€§å£°æ˜Žç­¾ååŒºå®žä¾‹ã€‚
%    \begin{macrocode}
\@@_declare_element:nn { g / decl / orig / sign }
  {
    content  = \@@_decl_sign:,
    align    = r
  }
%    \end{macrocode}
% \end{macro}
%
% \subparagraph{å‡ºç‰ˆæŽˆæƒä¹¦}
%
% \begin{macro}{g/decl/auth/title}
% ç&nbsp;”ç©¶ç”Ÿå‡ºç‰ˆæŽˆæƒä¹¦æ&nbsp;‡é¢˜å®žä¾‹ã€‚
%    \begin{macrocode}
\@@_declare_element:nn { g / decl / auth / title }
  {
    content     = \l_@@_name_authdecl_tl,
    format      = \l_@@_fmt_chapter_tl,
    bottom-skip = \l_@@_chapterafter_dim
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{g/decl/auth/text}
% ç&nbsp;”ç©¶ç”Ÿå‡ºç‰ˆæŽˆæƒä¹¦æ–‡æœ¬å®žä¾‹ã€‚
%    \begin{macrocode}
\@@_declare_element:nn { g / decl / auth / text }
  {
    content     = \l_@@_text_authdecl_tl,
    align       = n,
    bottom-skip = 2 cm
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{g/decl/auth/sign}
% ç&nbsp;”ç©¶ç”Ÿå‡ºç‰ˆæŽˆæƒä¹¦ç­¾ååŒºå®žä¾‹ã€‚
%    \begin{macrocode}
\@@_declare_element:nn { g / decl / auth / sign }
  {
    content     = \@@_g_decl_auth_sign:,
    align       = r,
    bottom-skip = 0 pt plus 1 fill
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{g/decl/auth/info}
% ç&nbsp;”ç©¶ç”Ÿå‡ºç‰ˆæŽˆæƒä¹¦ä¿¡æ¯è¡¨æ&nbsp;¼å®žä¾‹ã€‚
%    \begin{macrocode}
\@@_declare_element:nn { g / decl / auth / info }
  {
    content     = \@@_g_decl_auth_info:,
    format      = \zihao { 5 } ,
    align       = l,
    bottom-skip = 2 cm
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{g/decl/auth/date}
% ç&nbsp;”ç©¶ç”Ÿå‡ºç‰ˆæŽˆæƒä¹¦ä¿å¯†ä¿¡æ¯å®žä¾‹ã€‚
%    \begin{macrocode}
\@@_declare_element:nn { g / decl / auth / date }
  {
    content     = \@@_g_decl_auth_secretlv:,
    format      = \zihao { 5 } ,
    align       = l
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_degree_checkbox:nn}
% \changes{v1.3}{2023/06/04}{ä¿®å¤ç&nbsp;”ç©¶ç”Ÿå‡ºç‰ˆæŽˆæƒä¹¦çš„æ‰“å‹¾æœºåˆ¶ã€‚}
% ä¿¡æ¯æ&nbsp;çš„å­¦ä½å¤é€‰æ¡†ã€‚æ‰“å‹¾ç¬¦å·å¯¹åº” |U+2713|ã€‚
%    \begin{macrocode}
\cs_new_protected:Npn \@@_degree_checkbox:nn #1#2
  {
    \bool_lazy_and:nnTF
      { #1 \g_@@_opt_academic_bool }
      { \int_compare_p:n { \g_@@_info_type_int = #2 } }
      {
        \makebox [ 0   pt ] [l] { \ensuremath { \mdwhtsquare } }
        \hspace  { 0.1 em }       \ensuremath { \checkmark   }
      }
      { \ensuremath { \mdwhtsquare } }
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_g_decl_auth_info:}
% ä¿¡æ¯æ&nbsp;å†…å®¹ã€‚
%    \begin{macrocode}
\cs_new_protected:Npn \@@_g_decl_auth_info:
  {
    \begin{tblr}
      {
        hlines, vlines, hspan=minimal,
        cells      = { font = \normalsize },
        colspec    = { c X[c] c X[c] c X[c] },
        cell{1}{2} = {c=5}{m}, cell{3}{2} = {c=5}{m},
        cell{4}{2} = {c=5}{m}, cell{5}{2} = {c=5}{m}
      }
      \l_@@_name_titlec_tl  &amp; \g_@@_info_title_tl \\
      \l_@@_name_ida_tl     &amp; \g_@@_info_id_tl    &amp;
      \l_@@_name_depta_tl   &amp; \g_@@_info_dept_tl  &amp;
      \l_@@_name_year_tl    &amp;
        \tl_range:Nnn \g_@@_info_submitdate_tl {1} {4} \\
      \l_@@_name_degreea_tl &amp;
        {
          \@@_degree_checkbox:nn {   } { 2 } å­¦æœ¯å­¦ä½ç¡•å£« \qquad
          \@@_degree_checkbox:nn { ! } { 2 } ä¸“ä¸šå­¦ä½ç¡•å£« \\
          \@@_degree_checkbox:nn {   } { 3 } å­¦æœ¯å­¦ä½åšå£« \qquad
          \@@_degree_checkbox:nn { ! } { 3 } ä¸“ä¸šå­¦ä½åšå£«
        } \\
      \l_@@_name_email_tl   &amp; \g_@@_info_email_tl \\
      \l_@@_name_supvb_tl   &amp;
        \clist_item:Nn \g_@@_info_supv_clist { 1 }
        \bool_if:NT \g_@@_opt_supvii_bool
          { \@@_quad: \clist_item:Nn \g_@@_info_supvii_clist { 1 } } \\
    \end{tblr}
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_g_decl_auth_sign:}
% ç­¾ååŒºå†…å®¹ã€‚
%    \begin{macrocode}
\cs_new_protected:Npn \@@_g_decl_auth_sign:
  { \l_@@_name_authsign_tl \tex_par:D \l_@@_name_blankdatea_tl }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_g_decl_auth_secretlv:}
% ä¿å¯†ä¿¡æ¯å†…å®¹ã€‚
%    \begin{macrocode}
\cs_new_protected:Npn \@@_g_decl_auth_secretlv:
  {
    \l_@@_name_secretstatus_tl \tex_par:D
    \ensuremath { \mdwhtsquare } \l_@@_name_secretfree_tl \tex_par:D
    \ensuremath { \mdwhtsquare } \l_@@_name_secretdate_tl
  }
%&lt;/def-g&gt;
%    \end{macrocode}
% \end{macro}
%
% \paragraph{åšå£«åŽ}
%
% \begin{macro}{p/cover/name-img}
% åšå£«åŽå°é¢æ&nbsp;¡åå›¾ç‰‡å®žä¾‹ã€‚
%    \begin{macrocode}
%&lt;*def-p&gt;
\@@_declare_element:nn { p / cover / name-img }
  {
    content     = \@@_name:N \l_@@_namewd_dim,
    bottom-skip = 40 pt
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{p/cover/report}
% åšå£«åŽå°é¢æŠ¥å‘Šå­—æ&nbsp;·å®žä¾‹ã€‚
%    \begin{macrocode}
\@@_declare_element:nn { p / cover / report }
  {
    content     = \l_@@_name_report_tl,
    format      = \zihao { 0 } \sffamily,
    bottom-skip = 40 pt plus 1.5 fil
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{p/cover/title}
% åšå£«åŽå°é¢æŠ¥å‘Šæ&nbsp;‡é¢˜å®žä¾‹ã€‚
%    \begin{macrocode}
\@@_declare_element:nn { p / cover / title }
  {
    content     =
      \l_@@_name_title_tl
      \l_@@_name_colon_tl
      \g_@@_info_title_tl,
    format      = \zihao { 4 },
    bottom-skip = 80 pt
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{p/cover/info}
% åšå£«åŽå°é¢ä¿¡æ¯æ&nbsp;å®žä¾‹ã€‚
%    \begin{macrocode}
\@@_declare_element:nn { p / cover / info }
  {
    content     = \@@_p_cover_info:,
    format      = \zihao { -4 },
    bottom-skip = 0 pt
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_p_cover_info:,\@@_p_cover_info:NN}
% åšå£«åŽå°é¢ä¿¡æ¯æ&nbsp;ã€‚
% \begin{arguments}
%   \item åç§°ç›’å­å®½åº¦ï¼Œ|dim| åž‹å˜é‡
%   \item æ&nbsp;‡ç­¾æ&nbsp;¼å¼
% \end{arguments}
%    \begin{macrocode}
\cs_new:Npn \@@_p_cover_info:
  { \@@_p_cover_info:NN \l_@@_clabelwd_dim \l_@@_fmt_coverlabel_tl }
\cs_new_protected:Npn \@@_p_cover_info:NN #1#2
  {
    \clist_set:Nn \l_@@_tmp_clist
      { author, supvfull, dept, id, major, submitdate }
%    \end{macrocode}
% è®¾ç½®ä¿¡æ¯æ&nbsp;å³ä¾§å®½åº¦ã€‚è¯»å–å„å­—æ®µï¼Œå¹¶å°†æœ€å®½è€…çš„å®½åº¦èµ‹ç»™
% \cs{l_@@_tmpb_dim}ã€‚
%    \begin{macrocode}
    \@@_get_max_width:NN \l_@@_tmpb_dim \l_@@_tmp_clist
%    \end{macrocode}
% ç”¨å¾ªçŽ¯è¾“å‡ºå„å­—æ®µã€‚
%    \begin{macrocode}
    \clist_map_inline:Nn \l_@@_tmp_clist
      {
        \@@_box_spread_name:NNn #1 #2 {##1}
        \l_@@_name_colon_tl
        \@@_box_center:Nn \l_@@_tmpb_dim { \@@_info:n {##1} }
        \tex_par:D
      }
  }
%    \end{macrocode}
% \end{macro}
%
% \subparagraph{åŽŸåˆ›æ€§å£°æ˜Žå’Œå‡ºç‰ˆæŽˆæƒä¹¦}
%
% \begin{macro}{p/decl/orig/title}
% åŽŸåˆ›æ€§å£°æ˜Žæ&nbsp;‡é¢˜å®žä¾‹ã€‚^^A è¿™ä¸ªå®žä¾‹ä¸Žç&nbsp;”ç©¶ç”Ÿçš„å®Œå…¨ä¸€æ&nbsp;·
%    \begin{macrocode}
\@@_declare_element:nn { p / decl / orig / title }
  {
    content     = \l_@@_name_origdecl_tl,
    format      = \l_@@_fmt_chapter_tl,
    bottom-skip = \l_@@_chapterafter_dim
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{p/decl/orig/text}
% åŽŸåˆ›æ€§å£°æ˜Žæ–‡æœ¬å®žä¾‹ã€‚
%    \begin{macrocode}
\@@_declare_element:nn { p / decl / orig / text }
  {
    content     = \l_@@_text_origdecl_tl,
    align       = n,
    bottom-skip = 2 cm
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{p/decl/orig/sign}
% åŽŸåˆ›æ€§å£°æ˜Žç­¾ååŒºå®žä¾‹ã€‚
%    \begin{macrocode}
\@@_declare_element:nn { p / decl / orig / sign }
  {
    content     = \@@_p_decl_sign:nn { origsign } { date },
    bottom-skip = 0 pt plus 1 fill
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{p/decl/auth/title}
% å‡ºç‰ˆæŽˆæƒä¹¦æ&nbsp;‡é¢˜å®žä¾‹ã€‚^^A è¿™ä¸ªå®žä¾‹ä¸Žç&nbsp;”ç©¶ç”Ÿçš„å®Œå…¨ä¸€æ&nbsp;·
%    \begin{macrocode}
\@@_declare_element:nn { p / decl / auth / title }
  {
    content     = \l_@@_name_authdecl_tl,
    format      = \l_@@_fmt_chapter_tl,
    bottom-skip = \l_@@_chapterafter_dim
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{p/decl/auth/text}
% å‡ºç‰ˆæŽˆæƒä¹¦æ–‡æœ¬å®žä¾‹ã€‚
%    \begin{macrocode}
\@@_declare_element:nn { p / decl / auth / text }
  {
    content     = \l_@@_text_authdecl_tl,
    align       = n,
    bottom-skip = 2 cm
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{p/decl/auth/sign}
% å‡ºç‰ˆæŽˆæƒä¹¦ç­¾ååŒºå®žä¾‹ã€‚
%    \begin{macrocode}
\@@_declare_element:nn { p / decl / auth / sign }
  {
    content     =
      \@@_p_decl_sign:nn { authsign   } { date }
      \@@_p_decl_sign:nn { authsigna } { date },
    bottom-skip = 0 pt plus 1 fill
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_p_decl_sign:nn}
% åŽŸåˆ›æ€§å£°æ˜Žç­¾ååŒºå†…å®¹ã€‚
%    \begin{macrocode}
\cs_new_protected:Npn \@@_p_decl_sign:nn #1#2
  {
    \@@_name:n {#1} \l_@@_name_colon_tl \tex_hfill:D
    \@@_name:n {#2} \l_@@_name_colon_tl
    \skip_horizontal:n { 160 pt } \@@_null: \@@_vskip:
  }
%&lt;/def-p&gt;
%    \end{macrocode}
% \end{macro}
%
%
% \subsubsection{ç»˜åˆ¶å°é¢}
% \changes{v0.13}{2021/12/10}{ä½¿ç”¨ \LaTeX3 è¯­æ³•é‡æž„æœ¬ç§‘ç”Ÿå°é¢ã€‚}
% \changes{v0.13}{2021/12/11}{ä½¿ç”¨ \LaTeX3 è¯­æ³•é‡æž„ç&nbsp;”ç©¶ç”Ÿå°é¢ã€‚}
% \changes{v0.13}{2021/12/12}{ä½¿ç”¨ \LaTeX3 è¯­æ³•é‡æž„å›½å®¶å›¾ä¹¦é¦†å°é¢ã€‚}
% \changes{v0.15}{2022/01/25}{å°†å°é¢é¡µé¢å°è£…ä¸ºå¯¹è±¡ã€‚}
%
% å®šä¹‰å°é¢é¡µé¢çš„å…·ä½“é…ç½®å‚æ•°ã€‚
%
% \begin{macro}{cover-u}
% é»˜è®¤æœ¬ç§‘ç”Ÿå°é¢å®žä¾‹ã€‚
%    \begin{macrocode}
%&lt;*def-u&gt;
\@@_declare_page:nn { cover-u }
  {
    element     = { emblem-img, name-img, title, info },
    prefix      = u / cover /,
    top-skip    = -.3 cm,
    bottom-skip = 0 pt plus 1 fill
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{origdecl-u}
% é»˜è®¤è¯šä¿¡æ‰¿è¯ºä¹¦å®žä¾‹ã€‚
%    \begin{macrocode}
\@@_declare_page:nn { origdecl-u }
  {
    element     = { emblem, title, text, sign },
    prefix      = u / decl / orig /,
    bottom-skip = 0 pt plus 1 fil
  }
%&lt;/def-u&gt;
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{cover-g-front}
% é»˜è®¤ç&nbsp;”ç©¶ç”Ÿæ™®é€šå°é¢æ­£é¢å®žä¾‹ã€‚
%    \begin{macrocode}
%&lt;*def-g&gt;
\@@_declare_page:nn { cover-g-front }
  {
    element  = { top, emblem-img, name-img, type, info, date },
    prefix   = g / cover-front /,
    format   = \zihao { 3 } \kaishu,
    top-skip = 0 pt
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{cover-g-back}
% é»˜è®¤ç&nbsp;”ç©¶ç”Ÿæ™®é€šå°é¢èƒŒé¢å®žä¾‹ã€‚
%    \begin{macrocode}
\@@_declare_page:nn { cover-g-back }
  {
    element  = { info, sign },
    prefix   = g / cover-back /,
    format   = \zihao { 3 } \kaishu,
    top-skip = 5.3 cm
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{cover-g-en}
% é»˜è®¤ç&nbsp;”ç©¶ç”Ÿè‹±æ–‡å°é¢å®žä¾‹ã€‚
%    \begin{macrocode}
\@@_declare_page:nn { cover-g-en }
  {
    element  = { title, top, middle, emblem-img, bottom },
    prefix   = g / cover-en /,
    format   = \linespread { 1.3 },
    top-skip = 0 pt plus 1.2 fil
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{cover-nl}
% é»˜è®¤å›½å®¶å›¾ä¹¦é¦†å°é¢å®žä¾‹ã€‚
%    \begin{macrocode}
\@@_declare_page:nn { cover-nl }
  {
    element = { top, name, title, middle, bottom, date },
    prefix  = cover-nl /,
    format  = \kaishu
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{origdecl-g}
% é»˜è®¤åŽŸåˆ›æ€§å£°æ˜Žå®žä¾‹ã€‚
%    \begin{macrocode}
\@@_declare_page:nn { origdecl-g }
  {
    element     = { title, text, sign },
    prefix      = g / decl / orig /,
    top-skip    = \l_@@_chapterbefore_dim,
    bottom-skip = 0 pt plus 1 fil,
    bm-text     = \l_@@_name_origdecl_tl,
    bm-name     = origdecl
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{authdecl-g}
% é»˜è®¤å‡ºç‰ˆæŽˆæƒä¹¦å®žä¾‹ã€‚
%    \begin{macrocode}
\@@_declare_page:nn { authdecl-g }
  {
    element     = { title, text, sign, info, date },
    prefix      = g / decl / auth /,
    top-skip    = \l_@@_chapterbefore_dim,
    bottom-skip = 0.5 cm plus 1.5 fill,
    bm-text     = \l_@@_name_authdecl_tl,
    bm-name     = authdecl,
    bookmark    = toc
  }
%&lt;/def-g&gt;
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{cover-p}
% é»˜è®¤åšå£«åŽå°é¢å®žä¾‹ã€‚
%    \begin{macrocode}
%&lt;*def-p&gt;
\@@_declare_page:nn { cover-p }
  {
    element     = { name-img, report, title, info },
    prefix      = p / cover /,
    format      = \bfseries,
    top-skip    = 100 pt
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{authdecl-p}
% é»˜è®¤å‡ºç‰ˆæŽˆæƒä¹¦å®žä¾‹ã€‚
%    \begin{macrocode}
\@@_declare_page:nn { authdecl-p }
  {
    element     =
      {
        orig/title, orig/text, orig/sign,
        auth/title, auth/text, auth/sign
      },
    prefix      = p / decl /,
    bm-text     = å£°æ˜Žé¡µ,
    bm-name     = decl,
    top-skip    = \l_@@_chapterbefore_dim,
    bottom-skip = 0 pt
  }
%&lt;/def-p&gt;
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_make_cover:}
% \changes{v1.3}{2023/05/24}{ä¿®å¤éžç&nbsp;”ç©¶ç”Ÿç±»åž‹æ—¶è°ƒç”¨ \opt{nl-cover} é€‰é¡¹çš„é”™è¯¯ã€‚}
% è°ƒç”¨å®žä¾‹ç”Ÿæˆå°é¢ã€‚
%    \begin{macrocode}
%&lt;*(def-u|def-g|def-p)&gt;
\cs_new_protected:Npn \@@_make_cover:
  {
%&lt;def-u&gt;    \UseInstance { nju } { cover-u }
%&lt;def-p&gt;    \UseInstance { nju } { cover-p }
%    \end{macrocode}
% å¦‚æžœåœ¨ç&nbsp;”ç©¶ç”Ÿæ¨¡æ¿ä¸­é€‰æ‹©äº† \opt{nlcover}ï¼Œå°±ç”Ÿæˆç”¨äºŽç”³è¯·å­¦ä½çš„å›½å®¶å›¾ä¹¦é¦†å°é¢ï¼Œ
% åä¹‹ç”Ÿæˆæ™®é€šå°é¢ã€‚
%    \begin{macrocode}
%&lt;*def-g&gt;
\bool_if:NTF \g_@@_opt_nlcover_bool
  { \UseInstance { nju } { cover-nl } }
  {
    \UseInstance { nju } { cover-g-front }
    \UseInstance { nju } { cover-g-back  }
    \UseInstance { nju } { cover-g-en    }
  }
%&lt;/def-g&gt;
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_make_decl_i:}
% \changes{v0.13}{2021/12/15}{åŠ&nbsp;å…¥æœ¬ç§‘ç”Ÿçš„è¯šä¿¡æ‰¿è¯ºä¹¦ã€‚}
% \changes{v0.19}{2022/05/22}{è·Ÿè¿›æ–°ç‰ˆæœ¬ç§‘ç”Ÿè¯šä¿¡æ‰¿è¯ºä¹¦æ&nbsp;·å¼ã€‚}
% ä½äºŽå°é¢åŽçš„æ‰¿è¯ºä¹¦é¡µé¢ã€‚
% ç”Ÿæˆæœ¬ç§‘ç”Ÿçš„è¯šä¿¡æ‰¿è¯ºä¹¦æˆ–ç&nbsp;”ç©¶ç”Ÿçš„å­¦ä½è®ºæ–‡åŽŸåˆ›æ€§å£°æ˜Žã€‚
%    \begin{macrocode}
\cs_new_protected:Npn \@@_make_decl_i:
  {
    \cleardoublepage
%&lt;def-u&gt;    \UseInstance { nju } { origdecl-u }
%&lt;def-g&gt;    \UseInstance { nju } { origdecl-g }
%&lt;def-p&gt;    \UseInstance { nju } { authdecl-p }
    \cleardoublepage
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_make_decl_ii:}
% \changes{v0.17}{2022/04/04}{åŠ&nbsp;å…¥ç&nbsp;”ç©¶ç”Ÿçš„å­¦ä½è®ºæ–‡å‡ºç‰ˆæŽˆæƒä¹¦ã€‚}
% ä½äºŽå°åº•çš„æ‰¿è¯ºä¹¦é¡µé¢ã€‚ç”Ÿæˆç&nbsp;”ç©¶ç”Ÿçš„å­¦ä½è®ºæ–‡å‡ºç‰ˆæŽˆæƒä¹¦ã€‚
%    \begin{macrocode}
\cs_new_protected:Npn \@@_make_decl_ii:
  {
%&lt;*def-g&gt;
    \AtEndEnvironment { document }
      {
        \cleardoublepage
        \UseInstance { nju } { authdecl-g }
        \cleardoublepage
      }
%&lt;/def-g&gt;
  }
%&lt;/(def-u|def-g|def-p)&gt;
%    \end{macrocode}
% \end{macro}
%
%
% \subsubsection{ç”¨æˆ·æŽ¥å£}
%
% \begin{macro}{\@@_new_img_cmd:nn}
% ç”¨äºŽå®šä¹‰æ’å…¥å›¾ç‰‡å‘½ä»¤çš„è¾…åŠ©å‡½æ•°ã€‚
%    \begin{macrocode}
%&lt;*class&gt;
\cs_new_protected:Npn \@@_new_img_cmd:nn #1#2
  {
    \exp_args:Nc \NewDocumentCommand { nju #1 } { o m m }
      { \includegraphics [ width = ##2, height = ##3 ] {#2} }
  }
%    \end{macrocode}
% \end{macro}
%
% \changes{v1.0}{2022/08/01}{å¤–ç½®å›¾ç‰‡æŽ¥å£æ›´åä¸º \opt{image} ç±»ã€‚}
%    \begin{macrocode}
\keys_define:nn { nju / image }
  {
%    \end{macrocode}
% \begin{macro}{image/nju-emblem,\njuemblem}
% \changes{v0.14}{2021/12/23}{æä¾›é€‰æ‹©å¤–ç½®æ&nbsp;¡å¾½å›¾ç‰‡çš„æŽ¥å£ã€‚}
% æ&nbsp;¡å¾½å›¾ç‰‡è·¯å¾„ã€‚
%    \begin{macrocode}
    nju-emblem .code:n = { \@@_new_img_cmd:nn { emblem } {#1} },
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{image/nju-name,\njuname}
% \changes{v0.14}{2021/12/23}{æä¾›é€‰æ‹©å¤–ç½®æ&nbsp;¡åå›¾ç‰‡çš„æŽ¥å£ã€‚}
% æ&nbsp;¡åå›¾ç‰‡è·¯å¾„ã€‚
%    \begin{macrocode}
    nju-name   .code:n = { \@@_new_img_cmd:nn { name   } {#1} }
  }
%    \end{macrocode}
% \end{macro}
%
% \changes{v0.16}{2022/02/22}{ä¸å†é»˜è®¤è½½å…¥ \pkg{njuvisual}ã€‚}
% æ£€æŸ¥ \tn{njuemblem} å’Œ \tn{njuname} å‘½ä»¤æ˜¯å¦æœ‰å®šä¹‰ã€‚
%    \begin{macrocode}
\ctex_at_end_preamble:n
  {
%    \end{macrocode}
% å¦‚æžœæ&nbsp;¡åã€æ&nbsp;¡å¾½å›¾ç‰‡å…¶ä¸­ä¹‹ä¸€çš„è·¯å¾„æœªè¢«å®šä¹‰ï¼Œ
% åˆ™å…¨ç›˜ä½¿ç”¨ \pkg{njuvisual} æä¾›çš„ç»˜åˆ¶å‘½ä»¤ã€‚
%    \begin{macrocode}
    \bool_lazy_and:nnF
      { \cs_if_exist_p:N \njuemblem }
      { \cs_if_exist_p:N \njuname   }
      {
        \cs_undefine:N \njuemblem
        \cs_undefine:N \njuname
        \msg_warning:nn { njuthesis } { missing-image }
        \RequirePackage { njuvisual }
      }
  }
%    \end{macrocode}
%
% \begin{macro}{\maketitle}
% \changes{v0.12}{2021/12/01}{ä»…ä¼šç”Ÿæˆå›½å®¶å›¾ä¹¦é¦†å°é¢æˆ–è€…æ™®é€šå°é¢ä¹‹ä¸€ã€‚}
% \changes{v0.13}{2021/12/12}{é‡æ–°ç»˜åˆ¶å°é¢ã€‚}
% \changes{v0.13}{2021/12/15}{è‰ç¨¿æ¨¡å¼ä¸‹ä¸ç»˜åˆ¶å°é¢ã€‚}
% \changes{v1.4}{2024/03/12}{åœ¨ç”Ÿæˆå°é¢æ—¶åˆ&nbsp;é™¤æ&nbsp;‡é¢˜æ¢è¡Œç¬¦ã€‚}
% é‡å®šä¹‰ \tn{maketitle} ä»¥ç”Ÿæˆå°é¢ã€‚
% åœ¨è‰ç¨¿æ¨¡å¼ä¸‹ï¼Œå°é¢ç»˜åˆ¶å°†è¢«ç¦ç”¨ï¼Œæœ‰åŠ©äºŽæå‡ç¼–è¯‘é€Ÿåº¦ã€‚
%    \begin{macrocode}
\RenewDocumentCommand \maketitle { }
  {
    \bool_if:NF \g_@@_opt_draft_bool
      {
        \pagenumbering { gobble }
        \@@_make_cover:
      }
    \tl_gremove_all:Nn \g_@@_info_title_tl    { \\ }
    \tl_gremove_all:Nn \g_@@_info_title_en_tl { \\ }
%    \end{macrocode}
% å¦‚æžœåœ¨é€‰æ‹©äº† \opt{decl-page}ï¼Œå°±ç”Ÿæˆæœ¬ç§‘ç”Ÿçš„è¯šä¿¡æ‰¿è¯ºä¹¦ï¼Œ
% æˆ–ç&nbsp;”ç©¶ç”Ÿçš„åŽŸåˆ›æ€§å£°æ˜Žå’Œå‡ºç‰ˆæŽˆæƒä¹¦ã€‚
%    \begin{macrocode}
    \bool_lazy_and:nnT
      { ! \g_@@_opt_draft_bool }
      {   \g_@@_opt_decl_bool  }
      { \@@_make_decl_i: \@@_make_decl_ii: }
%    \end{macrocode}
% åœ¨æ&nbsp;‡é¢˜é¡µåŽä½¿ç”¨å¤§å†™ç½—é©¬å­—æ¯é¡µç&nbsp;ï¼Œæ¢å¤æ­£å¸¸å­—ä½“è®¾ç½®ã€‚
%    \begin{macrocode}
    \cleardoublepage
    \exp_args:NV \pagestyle \l_@@_fmt_pagestyle_tl
    \pagenumbering { Roman }
  }
%&lt;/class&gt;
%    \end{macrocode}
% \end{macro}
%
%
% \subsection{æ‘˜è¦é¡µ}
%
% \subsubsection{ç»˜åˆ¶éƒ¨ä»¶}
% \changes{v0.16}{2022/03/02}{å°†æ‘˜è¦éƒ¨ä»¶åˆ†ç¦»åˆ° \file{.def} æ–‡ä»¶ã€‚}
% \changes{v0.16}{2022/03/02}{ä½¿ç”¨ \pkg{xtemplate} é‡æž„æ‘˜è¦ã€‚}
%
% \begin{macro}{abstract/title}
% ä¸­æ–‡æ‘˜è¦æ&nbsp;‡é¢˜å®žä¾‹ã€‚
%    \begin{macrocode}
%&lt;*(def-u|def-g|def-p)&gt;
\@@_declare_element:nn { abstract / title }
  {
%&lt;def-u|def-g&gt;    content     = \@@_abs_title:N \l_@@_name_abstracttitle_tl,
%&lt;def-p&gt;    content     = \g_@@_info_title_tl,
%&lt;def-u|def-g&gt;    format      = \bfseries \kaishu \zihao { -2 },
%&lt;def-p&gt;    format      = \bfseries,
    bottom-skip = 20 pt
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{abstract/en/title}
% è‹±æ–‡æ‘˜è¦æ&nbsp;‡é¢˜å®žä¾‹ã€‚
%    \begin{macrocode}
\@@_declare_element:nn { abstract / en / title }
  {
%&lt;def-u|def-g&gt;    content     = \@@_abs_title:N \l_@@_name_abstracttitle_en_tl,
%&lt;def-p&gt;    content     = \g_@@_info_title_en_tl,
%&lt;def-u|def-g&gt;    format      = \bfseries \kaishu \zihao { -2 },
%&lt;def-p&gt;    format      = \bfseries,
    bottom-skip = 20 pt
  }
%&lt;/(def-u|def-g|def-p)&gt;
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{abstract/info}
% ä¸­æ–‡æ‘˜è¦ä¿¡æ¯æ&nbsp;å®žä¾‹ã€‚
%    \begin{macrocode}
%&lt;*(def-u|def-g)&gt;
\@@_declare_element:nn { abstract / info }
  {
%&lt;def-u&gt;    content     = \@@_abs_info_u:,
%&lt;def-g&gt;    content     = \@@_abs_info_g:,
%&lt;def-u&gt;    format      = \zihao { -4 } \kaishu,
%&lt;def-g&gt;    format      = \zihao {  4 } \kaishu,
%&lt;def-u&gt;    bottom-skip = 15 pt,
%&lt;def-g&gt;    bottom-skip = 30 pt,
    align       = l
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{abstract/en/info}
% è‹±æ–‡æ‘˜è¦ä¿¡æ¯æ&nbsp;å®žä¾‹ã€‚
%    \begin{macrocode}
\@@_declare_element:nn { abstract / en / info }
  {
%&lt;def-u&gt;    content     = \@@_abs_info_en_u:,
%&lt;def-g&gt;    content     = \@@_abs_info_en_g:,
%&lt;def-u&gt;    format      = \zihao { -4 },
%&lt;def-g&gt;    format      = \zihao {  4 },
%&lt;def-u&gt;    bottom-skip = 15 pt,
%&lt;def-g&gt;    bottom-skip = 30 pt,
    align       = l
  }
%&lt;/(def-u|def-g)&gt;
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{abstract/mark}
% è‹±æ–‡æ‘˜è¦æ&nbsp;‡ç­¾å®žä¾‹ã€‚
%    \begin{macrocode}
%&lt;*(def-g|def-p)&gt;
\@@_declare_element:nn { abstract / mark }
  {
    content     = \l_@@_name_abstractb_tl,
    format      = \sffamily \zihao { -3 },
    bottom-skip = 15 pt
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{abstract/en/mark}
% è‹±æ–‡æ‘˜è¦æ&nbsp;‡ç­¾å®žä¾‹ã€‚
%    \begin{macrocode}
\@@_declare_element:nn { abstract / en / mark }
  {
    content     = \l_@@_name_abstractb_en_tl,
    format      = \sffamily \zihao { -3 },
    bottom-skip = 15 pt
  }
%&lt;/(def-g|def-p)&gt;
%    \end{macrocode}
% \end{macro}
%
% \paragraph{æœ¬ç§‘ç”Ÿ}
% \changes{v0.13}{2021/12/12}{ä½¿ç”¨ \LaTeX3 è¯­æ³•é‡æž„æœ¬ç§‘ç”Ÿæ‘˜è¦ã€‚}
% \changes{v1.0}{2022/06/16}{ç»Ÿä¸€æœ¬ç§‘ç”Ÿæ‘˜è¦é¡µçš„æ&nbsp;‡ç­¾æ&nbsp;¼å¼ã€‚}
%
% \begin{macro}{\@@_abs_info_u:,\@@_abs_info_en_u:}
% å°è£…å¥½çš„æœ¬ç§‘ç”Ÿæ‘˜è¦ä¿¡æ¯æ&nbsp;ã€‚
%    \begin{macrocode}
%&lt;*def-u&gt;
\cs_new_protected:Npn \@@_abs_info_u:
  { \@@_abs_info_u:nn {     } { \l_@@_name_colon_tl    } }
\cs_new_protected:Npn \@@_abs_info_en_u:
  { \@@_abs_info_u:nn { _en } { \l_@@_name_colon_en_tl } }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_abs_info_u:nn}
% ç»˜åˆ¶æœ¬ç§‘ç”Ÿæ‘˜è¦ä¿¡æ¯æ&nbsp;ã€‚
% \begin{arguments}
%   \item è¯­è¨€ï¼Œç©ºç½®ä¸ºä¸­æ–‡ï¼Œ|_en| ä¸ºè‹±æ–‡
%   \item åˆ†éš”ç¬¦
% \end{arguments}
% æœ¬ç§‘ç”Ÿæ‘˜è¦é¡µé¢ä¸å«ä¸‹åˆ’çº¿ï¼Œå›&nbsp;è€Œä¸ç”¨ç¡®å®šæ–‡æœ¬å®½åº¦ï¼Œç»˜åˆ¶å‘½ä»¤è¾ƒä¸ºç®€å•ã€‚
%    \begin{macrocode}
\cs_new_protected:Npn \@@_abs_info_u:nn #1#2
  {
%    \end{macrocode}
% ç”±äºŽä½œè€…å§“åä½¿ç”¨çš„å­—æ&nbsp;·å‘ç”Ÿäº†å˜åŠ¨ï¼Œè¿™é‡Œè¿›è¡Œæ›¿æ¢ä»¥ä¾¿åµŒå…¥å¾ªçŽ¯ã€‚
%    \begin{macrocode}
    \tl_set_eq:NN \l_@@_name_author_tl \l_@@_name_authora_tl
%    \end{macrocode}
% ä½¿ç”¨å¾ªçŽ¯è¾“å‡ºé™¢ç³»ã€ä¸“ä¸šã€ä½œè€…ã€å¯¼å¸ˆä¿¡æ¯ã€‚
%    \begin{macrocode}
    \clist_map_inline:nn { title, dept, major, author, supvfull }
      {
        \@@_name:nn { abslabel #1 } { ##1 #1 } #2
        \@@_info:n { ##1 #1 } \\
      }
    \@@_name:nn { abslabel #1 } { abstract #1 } #2
  }
%&lt;/def-u&gt;
%    \end{macrocode}
% \end{macro}
%
% \paragraph{ç&nbsp;”ç©¶ç”Ÿ}
% \changes{v0.13}{2021/12/12}{ä½¿ç”¨ \LaTeX3 è¯­æ³•é‡æž„ç&nbsp;”ç©¶ç”Ÿæ‘˜è¦ã€‚}
%
% \begin{macro}{\@@_abs_info_g:,\@@_abs_info_en_g:}
% å°è£…å¥½çš„ç&nbsp;”ç©¶ç”Ÿæ‘˜è¦ä¿¡æ¯æ&nbsp;ã€‚
%    \begin{macrocode}
%&lt;*def-g&gt;
\cs_new_protected:Npn \@@_abs_info_g:
  { \@@_abs_info_g:N    \l_@@_name_colon_tl    }
\cs_new_protected:Npn \@@_abs_info_en_g:
  { \@@_abs_info_en_g:N \l_@@_name_colon_en_tl }
%    \end{macrocode}
% \end{macro}
%
%
% \begin{macro}{\@@_abs_info_g:N}
% ç»˜åˆ¶ç&nbsp;”ç©¶ç”Ÿä¸­æ–‡æ‘˜è¦ä¿¡æ¯æ&nbsp;ã€‚
% \begin{arguments}
%   \item åˆ†éš”ç¬¦
% \end{arguments}
% ç&nbsp;”ç©¶ç”Ÿä¸­æ–‡æ‘˜è¦é¡µåŒ…æ‹¬ä¸‹åˆ’çº¿ä»¥åŠè‹¥å¹²ç‰¹æ®Šçš„å¯¹é½æ–¹å¼ï¼Œå®žçŽ°æ–¹å¼è¾ƒä¸ºç¹çã€‚
% ä½¿ç”¨ \cs{@@_full_uline:NV} ç¡®å®šå†…å®¹å®½åº¦åŽï¼Œè°ƒç”¨ \cs{@@_uline:n} æˆ–
% \cs{@@_ulined_center_box:nn} å‘½ä»¤ä»¥ç»˜åˆ¶æ¨ªç©¿é¡µé¢çš„ä¸‹åˆ’çº¿ã€‚å‰ä¸¤è¡Œä¸ºæ&nbsp;‡é¢˜ã€‚
%    \begin{macrocode}
\cs_new_protected:Npn \@@_abs_info_g:N #1
  {
    \@@_uline_list:NNe \g_@@_info_title_tl \g_@@_abs_title_left_skip
      { \l_@@_name_titlea_tl #1 }
%    \end{macrocode}
% ä¸“ä¸šã€å¹´çº§ã€å§“åã€‚
%    \begin{macrocode}
    \@@_get_width_print:Ne \l_@@_tmp_skip
      {
        \dim_set:Nn \l_@@_tmpa_dim { 11 em }
        \dim_set:Nn \l_@@_tmpb_dim { 4  em }
        \@@_box_ulined_info:Nn \l_@@_tmpa_dim { major }
        \l_@@_name_majora_tl
        \@@_box_ulined_info:Nn \l_@@_tmpb_dim { grade }
        \l_@@_name_grade_tl \l_@@_name_authora_tl #1
      }
    \@@_box_ulined_info:Nn \l_@@_tmp_skip { author } \tex_par:D
%    \end{macrocode}
% å¯¼å¸ˆå§“åã€èŒç§°ã€‚
%    \begin{macrocode}
    \@@_get_width_print:Ne \l_@@_tmpa_dim { \l_@@_name_supva_tl #1 }
    \@@_box_ulined_info:Nn \l_@@_tmpa_dim { supvfull }
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_abs_info_en_g:N}
% \changes{v1.0}{2022/07/01}{ç§»é™¤ç&nbsp;”ç©¶ç”Ÿè‹±æ–‡æ‘˜è¦çš„ä¸‹åˆ’çº¿ã€‚}
% \changes{v1.1}{2022/12/12}{æ¢å¤ç&nbsp;”ç©¶ç”Ÿè‹±æ–‡æ‘˜è¦çš„ä¸‹åˆ’çº¿ã€‚}
% ç»˜åˆ¶ç&nbsp;”ç©¶ç”Ÿè‹±æ–‡æ‘˜è¦ä¿¡æ¯æ&nbsp;ã€‚å›&nbsp;ä¸ºåˆ°åº•è¦ä¸è¦ä¸‹åˆ’çº¿è¿™å›žäº‹è¯´ä¸æ¸…æ¥šï¼Œ
% æ‰€ä»¥ä¸åšé€‰æ‹©äº†å…¨éƒ½æ•´ä¸Šã€‚
% \begin{arguments}
%   \item åˆ†éš”ç¬¦
% \end{arguments}
%    \begin{macrocode}
\cs_new_protected:Npn \@@_abs_info_en_g:N #1
  {
    \bool_if:NTF \g_@@_abs_underline_bool
      {
        \@@_uline_list:NNe \g_@@_info_title_en_tl
          \g_@@_abs_title_left_skip { \l_@@_name_title_en_tl #1 }
        \clist_map_inline:nn { major, author, supvfull }
          {
            \tex_par:D
            \@@_get_width_print:Ne \l_@@_tmpa_dim
              { \@@_name:n { ##1 _en } #1 }
            \@@_box_ulined_info:Nn \l_@@_tmpa_dim { ##1 _en }
          }
      }
      {
        \clist_map_inline:nn { title, major, author, supvfull }
          { \@@_name:n { ##1 _en } #1 \@@_info:n { ##1 _en } \\ }
      }
  }
%&lt;/def-g&gt;
%    \end{macrocode}
% \end{macro}
%
% \paragraph{å…³é”®è¯åˆ—è¡¨}
%
% \begin{macro}{\@@_print_keywords:nn}
% ç”Ÿæˆä¸­è‹±æ–‡å…³é”®è¯åˆ—è¡¨ã€‚
% \begin{arguments}
%   \item è¯­è¨€ï¼Œç©ºç½®ä¸ºä¸­æ–‡ï¼Œ|_en| ä¸ºè‹±æ–‡
%   \item å…³é”®è¯åˆ†éš”ç¬¦
% \end{arguments}
%    \begin{macrocode}
%&lt;*class&gt;
\cs_new_protected:Npn \@@_print_keywords:nn
  { \@@_print_keywords:NNnn \l_@@_tmpa_tl \l_@@_tmpa_dim }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_print_keywords:NNnn}
% \begin{arguments}
%   \item |tl| ä¸´æ—¶å˜é‡
%   \item |dim| ä¸´æ—¶å˜é‡
% \end{arguments}
%    \begin{macrocode}
\cs_new:Npn \@@_print_keywords:NNnn #1#2#3#4
  {
    \tl_set:Nv #1 { l_@@_name_keywords #3 _tl }
    \exp_args:NNv \tl_put_left:Nn  #1 { l_@@_fmt_abslabel #3 _tl }
    \exp_args:NNv \tl_put_right:Nn #1 { l_@@_name_colon   #3 _tl }
    \@@_get_width:NV #2 #1
%    \end{macrocode}
% å…³é”®è¯åˆ—è¡¨çš„æ‚¬æŒ‚ç¼©è¿›æ&nbsp;·å¼ç”± \tn{list} çŽ¯å¢ƒäº§ç”Ÿã€‚
%    \begin{macrocode}
    \list {#1}
      {
        \labelwidth  #2
        \labelsep    \c_zero_dim
        \leftmargin  \c_zero_dim
        \rightmargin \c_zero_dim
        \advance \leftmargin #2
%    \end{macrocode}
% ä½¿ç”¨ç²—ä½“ä½œä¸ºæ&nbsp;‡ç­¾æ&nbsp;·å¼ã€‚
%    \begin{macrocode}
        \__nju_cs_clear:N \makelabel
      }
    \item \clist_use:cn { g_@@_info_keywords #3 _clist } {#4}
    \endlist
  }
%&lt;/class&gt;
%    \end{macrocode}
% \end{macro}
%
%
% \subsubsection{ç»˜åˆ¶æ‘˜è¦}
% \changes{v0.16}{2022/03/26}{è¡¥ä¸Šç&nbsp;”ç©¶ç”Ÿæ‘˜è¦é¡µé¢çš„å°æ&nbsp;‡é¢˜ã€‚}
%
% \begin{macro}{\@@_make_abstract:,\@@_make_abstract_en:}
% ç»˜åˆ¶æ‘˜è¦é¡µé¢ã€‚
%    \begin{macrocode}
%&lt;*(def-u|def-g|def-p)&gt;
\cs_new_protected:Npn \@@_make_abstract:
  {
    \UseInstance { nju } { abstract / title }
%&lt;def-u|def-g&gt;    \UseInstance { nju } { abstract / info  }
%&lt;def-g|def-p&gt;    \UseInstance { nju } { abstract / mark  }
  }
\cs_new_protected:Npn \@@_make_abstract_en:
  {
    \UseInstance { nju } { abstract / en / title }
%&lt;def-u|def-g&gt;    \UseInstance { nju } { abstract / en / info  }
%&lt;def-g|def-p&gt;    \UseInstance { nju } { abstract / en / mark  }
  }
%&lt;/(def-u|def-g|def-p)&gt;
%    \end{macrocode}
% \end{macro}
%
%
% \subsubsection{ç”¨æˆ·æŽ¥å£}
%
% \begin{macro}{\g_@@_abs_title_left_skip}
% ç&nbsp;”ç©¶ç”Ÿæ‘˜è¦æ&nbsp;‡é¢˜å·¦è¾¹è·ã€‚
%    \begin{macrocode}
%&lt;*class&gt;
\skip_new:N \g_@@_abs_title_left_skip
%    \end{macrocode}
% \end{macro}
%
% \changes{v1.0}{2022/08/01}{æ•´åˆæ‘˜è¦è®¾ç½®é¡¹ã€‚}
%    \begin{macrocode}
\keys_define:nn { nju / abstract }
  {
%    \end{macrocode}
% \begin{macro}{abstract/toc-entry}
% \changes{v0.15}{2022/02/04}{å¯é€‰æ‹©æ‘˜è¦æ˜¯å¦å‡ºçŽ°åœ¨ç›®å½•ä¸­ã€‚}
% æ˜¯å¦å°†æ‘˜è¦æ·»åŠ&nbsp;åˆ°ç›®å½•ã€‚
%    \begin{macrocode}
    toc-entry         .bool_gset:N = \g_@@_abs_showentry_bool,
    toc-entry           .initial:n = true,
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{abstract/underline}
% \changes{v1.2}{2023/04/23}{æ–°å¢žç&nbsp;”ç©¶ç”Ÿè‹±æ–‡æ‘˜è¦é¡µä¸‹åˆ’çº¿é€‰é¡¹ã€‚}
% æ˜¯å¦ä¸ºç&nbsp;”ç©¶ç”Ÿè‹±æ–‡æ‘˜è¦æ¡ç›®å†…å®¹æ·»åŠ&nbsp;ä¸‹åˆ’çº¿ã€‚
%    \begin{macrocode}
    underline         .bool_gset:N = \g_@@_abs_underline_bool,
    underline           .initial:n = true,
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{abstract/title-style}
% \changes{v0.16}{2022/03/26}{å¯é€‰æ‹©ç&nbsp;”ç©¶ç”Ÿæ‘˜è¦æ&nbsp;‡é¢˜æ&nbsp;·å¼ã€‚}
% é€‰æ‹©æ‘˜è¦æ&nbsp;·å¼ï¼Œé»˜è®¤ä¸º \opt{strict}ã€‚
%    \begin{macrocode}
    title-style          .choice:,
    title-style / strict   .code:n =
      {
        \bool_gset_true:N  \g_@@_abs_title_strict_bool
        \skip_gset:Nn \g_@@_abs_title_left_skip { .5 em }
      },
    title-style / centered .code:n =
      {
        \bool_gset_true:N \g_@@_abs_title_strict_bool
        \skip_gset:Nn \g_@@_abs_title_left_skip { .5 em plus 1 fill }
      },
    title-style / natural  .code:n =
      {
        \bool_gset_false:N \g_@@_abs_title_strict_bool
        \skip_gset:Nn \g_@@_abs_title_left_skip { .5 em plus 1 fill }
      },
    title-style         .initial:n = strict
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{environment}{abstract}
% \changes{v0.13}{2021/12/12}{é‡æ–°ç»˜åˆ¶æ‘˜è¦ã€‚}
% ä¸­æ–‡æ‘˜è¦çŽ¯å¢ƒã€‚
%    \begin{macrocode}
\NewDocumentEnvironment { abstract } { +b }
  {
    \cleardoublepage
    \thispagestyle { plain }
    \@@_abs_bookmark:Vn \l_@@_name_abstracta_tl { abstract }
    \tl_gremove_all:Nn \g_@@_info_title_tl { \\ }
    \@@_make_abstract:
    \group_begin: \kaishu \zihao { -4 } #1
  }
  { \@@_print_keywords:nn { } { ï¼› } \group_end: }
%    \end{macrocode}
% \end{environment}
%
% \begin{environment}{abstract*}
% è‹±æ–‡æ‘˜è¦çŽ¯å¢ƒã€‚\pkg{xparse} ç›®å‰ä¸æ”¯æŒåˆå¹¶å¸¦æœ‰æ˜Ÿå·çš„çŽ¯å¢ƒï¼Œå›&nbsp;æ­¤éœ€è¦å•ç‹¬å®šä¹‰ã€‚
%    \begin{macrocode}
\NewDocumentEnvironment { abstract* } { +b }
  {
    \cleardoublepage
    \thispagestyle { plain }
    \@@_abs_bookmark:Vn \l_@@_name_abstracta_en_tl { abstract-en }
%    \end{macrocode}
% \changes{v1.3}{2023/08/21}{ä¿®å¤è‹±æ–‡æ&nbsp;‡é¢˜æ‰‹åŠ¨æ¢è¡Œä¸Žæ‘˜è¦é¡µçš„å†²çªã€‚}
% ç”Ÿæˆå°é¢åŽæ¸…é™¤æ&nbsp;‡é¢˜ä¸­çš„æ¢è¡ŒæŽ§åˆ¶ç¬¦ï¼Œä¾¿äºŽåœ¨æ‘˜è¦ä¸­è¾“å‡ºã€‚
%    \begin{macrocode}
    \tl_gremove_all:Nn \g_@@_info_title_en_tl { \\ }
    \@@_make_abstract_en:
    \group_begin: \zihao { -4 } #1
  }
  { \@@_print_keywords:nn { _en } { ;~ } \group_end: }
%    \end{macrocode}
% \end{environment}
%
%
% \subsection{å‰è¨€è‡´è°¢}
%
% \begin{environment}{preface}
% \begin{environment}{acknowledgement}
% å•ç‹¬åˆ¶ä½œçš„å‰è¨€ã€è‡´è°¢é¡µã€‚
%    \begin{macrocode}
\NewDocumentEnvironment { preface         } { +b }
  { \@@_chapter:V \l_@@_name_preface_tl #1 }
  { \cleardoublepage }
\NewDocumentEnvironment { acknowledgement } { +b }
  { \@@_acknowledgement:n {#1} }
  { \cleardoublepage }
%    \end{macrocode}
% \end{environment}
% \end{environment}
%
% \begin{macro}{\@@_acknowledgement:n}
% æ­£å¸¸æ¨¡å¼çš„è‡´è°¢æ&nbsp;‡é¢˜ã€‚
%    \begin{macrocode}
\cs_new:Npn \@@_acknowledgement:n
  { \@@_chapter:V \l_@@_name_acknowledgement_tl \use:n }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_acknowledgement_anon:n}
% ç›²å®¡æ¨¡å¼ä¸‹ä»…æ˜¾ç¤ºè‡´è°¢ä¹¦ç­¾ã€‚
%    \begin{macrocode}
\cs_new:Npn \@@_acknowledgement_anon:n
  { \@@_bookmark_toc:V \l_@@_name_acknowledgementa_tl \use_none:n }
%    \end{macrocode}
% \end{macro}
%
%
% \subsection{æˆæžœåˆ—è¡¨}
%
% \begin{macro}{\@@_anon_paperlist_setup:}
% åˆ›å»ºä¸€ä¸ªä»…åŒ…å«åˆŠåå’Œå¹´ä»½çš„æ–‡çŒ®åˆ—è¡¨æ&nbsp;¼å¼ã€‚
%    \begin{macrocode}
\cs_new:Npn \@@_anon_paperlist_setup:
  {
    \ctex_at_end_package:nn { biblatex }
      {
        \DeclareBibliographyDriver { anonymous }
          {
            \usebibmacro { begentry }
            \usebibmacro { journal  },~
            \usebibmacro { date     }
            \usebibmacro { finentry }
          }
      }
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_paperlist_anon:nn}
% ç”Ÿæˆç›²å®¡æ¨¡å¼ä¸‹çš„æˆæžœåˆ—è¡¨ã€‚
%    \begin{macrocode}
\cs_new:Npn \@@_paperlist_anon:nn #1#2
  {
    \group_begin:
      \newrefsection
      \nocite {#2}
      \printbiblist
        [ title = #1, driver = anonymous, env = bibliography,
          heading = subbibliography ] { anonymous }
      \endrefsection
    \group_end:
  }
%    \end{macrocode}
% \end{macro}

% \begin{macro}{\@@_paperlist:nn}
% ç”Ÿæˆæ™®é€šæ¨¡å¼ä¸‹çš„æˆæžœåˆ—è¡¨ã€‚
%    \begin{macrocode}
\cs_new:Npn \@@_paperlist:nn #1#2
  {
    \group_begin:
%    \end{macrocode}
% ä¿®æ”¹å§“åçš„æ˜¾ç¤ºæ–¹å¼ï¼Œä½¿è¢«æ³¨è§£çš„å§“åå¯è¢«åŠ&nbsp;ç²—ä¸‹åˆ’çº¿è¡¨ç¤ºã€‚
% ç”±äºŽ \pkg{biblatex} æä¾›çš„ \tn{MakeCapital} æ˜¯ä¸€ä¸ª robust å‘½ä»¤ï¼Œ
% åœ¨ç»˜åˆ¶ä¸‹åˆ’çº¿è¿‡ç¨‹ä¸­æ—&nbsp;æ³•è¢«å®Œå…¨å±•å¼€ï¼Œæˆ‘ä»¬å°†å…¶æ›¿æ¢ä¸º
% å¯è¢«å±•å¼€çš„ \cs{str_uppercase:f} ä»¥é¿å…é€&nbsp;æˆé”™è¯¯ã€‚
%    \begin{macrocode}
      \cs_set_eq:NN \MakeCapital \str_uppercase:f
      \RenewDocumentCommand \mkbibnamegiven  { m }
        { \ifitemannotation { thesisauthor }
            { \bfseries \njuline {##1} } {##1} }
      \RenewDocumentCommand \mkbibnamefamily { m }
        { \ifitemannotation { thesisauthor }
            { \bfseries \njuline {##1} } {##1} }
%    \end{macrocode}
% ä¿®æ”¹å¹´ä»½çš„æ˜¾ç¤ºæ–¹å¼ï¼Œé»˜è®¤è¿›è¡ŒåŠ&nbsp;ç²—ã€‚
%    \begin{macrocode}
      \RenewDocumentCommand \mkbibdateshort { m m m }
        { \textbf { \thefield {##1} } }
%    \end{macrocode}
% \changes{v1.1}{2023/04/07}{ä¿®å¤ç«&nbsp;æœ«å‚è€ƒæ–‡çŒ®è¡¨ä¸Žæˆæžœåˆ—è¡¨çš„å†²çªé—®é¢˜ã€‚}
% ç›¸è¾ƒäºŽç›´æŽ¥ä½¿ç”¨ \env{refsection} çŽ¯å¢ƒï¼Œ\tn{newrefsection} å‘½ä»¤å¯ä»¥
% è‡ªåŠ¨ç»“æŸä¸Šä¸€ä¸ª \env{refsection}ï¼Œä¸Žç«&nbsp;æœ«å‚è€ƒæ–‡çŒ®è¡¨æ&nbsp;¼å¼å…¼å®¹æ›´å¥½ã€‚
%    \begin{macrocode}
      \newrefsection
      \nocite {#2}
      \printbibliography [ heading = subbibliography, title = #1 ]
      \endrefsection
    \group_end:
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\njupaperlist}
% \changes{v0.10}{2021/09/29}{æ–°å¢žäº†æˆæžœåˆ—è¡¨é¡µé¢ã€‚}
% \changes{v0.14}{2021/12/20}{æˆæžœåˆ—è¡¨ä¸­å¯çªå‡ºæŒ‡å®šä½œè€…å§“ååŠå¹´ä»½ã€‚}
% \changes{v1.2}{2023/04/07}{ä¿®å¤æˆæžœåˆ—è¡¨ä¸Žç«&nbsp;æœ«å‚è€ƒæ–‡çŒ®è¡¨çš„å†²çªã€‚}
% \changes{v1.4}{2024/03/21}{ä¿®å¤æˆæžœåˆ—è¡¨ä¸­æ–‡å§“ååŠ&nbsp;ç²—çš„é—®é¢˜ã€‚}
% \changes{v1.4}{2024/04/15}{ç›²å®¡æ¨¡å¼ä¸‹æˆæžœåˆ—è¡¨åªæ˜¾ç¤ºæœŸåˆŠå’Œå¹´ä»½ã€‚}
% æˆæžœåˆ—è¡¨ã€‚
%    \begin{macrocode}
\NewDocumentCommand \njupaperlist
  { O { \l_@@_name_paperlist_tl } m } { \@@_paperlist:nn {#1} {#2} }
%    \end{macrocode}
% \end{macro}
%
%
% \subsection{ç›²å®¡æ¨¡å¼}
% \changes{v1.4}{2024/04/19}{åˆå¹¶ç›²å®¡æ¨¡å¼è®¾ç½®ã€‚}
%
% \begin{macro}{anonymous-mode/no-nju}
% \changes{v1.4}{2024/04/19}{ç›²å®¡æ¨¡å¼ä¸‹å¯é€‰æ‹©æ˜¯å¦éšè—å­¦æ&nbsp;¡ä¿¡æ¯ã€‚}
%    \begin{macrocode}
\keys_define:nn { nju / anonymous-mode }
  {
    no-nju .bool_gset:N = \g_@@_opt_nonju_bool,
    no-nju   .initial:n = false
  }
%    \end{macrocode}
% \end{macro}
%
%    \begin{macrocode}
\bool_if:NT \g_@@_opt_anon_bool
  {
%    \end{macrocode}
% \changes{v1.1}{2022/09/26}{ç›²å®¡æ¨¡å¼ä¸‹ä¸æ˜¾ç¤ºå£°æ˜Žé¡µã€‚}
% ç›²å®¡æ¨¡å¼ä¸‹ä¸æ˜¾ç¤ºå£°æ˜Žé¡µã€‚
%    \begin{macrocode}
    \bool_gset_false:N \g_@@_opt_decl_bool
%    \end{macrocode}
% \changes{v1.4}{2024/04/15}{ç›²å®¡æ¨¡å¼ä¸‹å§“åä½¿ç”¨å&nbsp;ä½ç¬¦ã€‚}
% ç›²å®¡æ¨¡å¼ä¸‹ä½œè€…å’Œå¯¼å¸ˆå§“åç”¨ $\times\times\times$ ä»£æ›¿ã€‚
%    \begin{macrocode}
    \keys_set:nn { nju / info }
      {
        author         = \@@_name:n { anonymous a },
        author*        = \@@_name:n { anonymous a },
        supervisor     =
          { \@@_name:n { anonymous a },          \@@_name:n { anonymous b } },
        supervisor*    =
          { \@@_name:n { anonymous c } \@@_quad: \@@_name:n { anonymous a } },
        supervisor-ii  = ,
        supervisor-ii* =
      }
%    \end{macrocode}
% æ›¿æ¢ä¸ºåŒ¿åç‰ˆæœ¬çš„å‘½ä»¤ã€‚
%    \begin{macrocode}
    \@@_anon_paperlist_setup:
    \cs_gset_eq:NN \@@_paperlist:nn      \@@_paperlist_anon:nn
    \cs_gset_eq:NN \@@_keys_set:nn       \@@_keys_set_anon:nn
    \cs_gset_eq:NN \@@_acknowledgement:n \@@_acknowledgement_anon:n
  }
%    \end{macrocode}
%
% å¼€å¯ \opt{no-nju} æ¨¡å¼æ—¶ï¼Œæ¸…é™¤æ&nbsp;¡åã€æ&nbsp;¡å¾½ä»¥åŠå­¦æ&nbsp;¡ä»£ç&nbsp;ã€‚
%    \begin{macrocode}
\ctex_at_end_preamble:n
  {
    \bool_lazy_and:nnT
      { \g_@@_opt_anon_bool } { \g_@@_opt_nonju_bool }
      {
        \tl_clear:N  \l_@@_name_nju_tl
        \tl_clear:N  \l_@@_name_nju_en_tl
        \tl_gclear:N \g_@@_info_code_tl
        \RenewDocumentCommand \njuemblem { o m m } { }
        \RenewDocumentCommand \njuname   { o m m } { }
      }
  }
%    \end{macrocode}
%
%
% \subsection{ç¬¦å·è¡¨}
%
% \begin{macro}{\@@_notation_label:n}
% å·¦å¯¹é½çš„æ&nbsp;‡ç­¾æ&nbsp;¼å¼ï¼Œç”¨äºŽç¬¦å·è¡¨ã€‚
%    \begin{macrocode}
\cs_new_protected:Npn \@@_notation_label:n #1 { #1 \tex_hfil:D }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_make_notation:nn}
% ç”Ÿæˆç¬¦å·è¡¨ã€‚ç”±äºŽç¬¦å·è¡¨åªæœ‰ç¬¦å·å’Œè¯´æ˜Žä¸¤åˆ—ï¼Œç›¸æ¯”äºŽ \env{longtable} çŽ¯å¢ƒï¼Œ
% \env{description} çŽ¯å¢ƒçš„è¯­æ³•æ›´ä¸ºç®€æ´ç›´è§‚ï¼Œä¸”è¯´æ˜Žæ–‡å­—å¯ä»¥æ¢è¡Œï¼Œå›&nbsp;è€Œæ­¤å¤„ä½¿ç”¨
% \LaTeXe çš„åˆ—è¡¨çŽ¯å¢ƒè¿›è¡Œå°è£…ï¼Œå®šä¹‰å’Œè¯­æ³•å‚è§ \file{source2e.pdf} ä¸­çš„
% File I \quad ltlists.dtx ä¸€ç«&nbsp;ã€‚
%    \begin{macrocode}
\cs_new_protected:Npn \@@_make_notation:nn #1#2
  {
    \dim_set:Nn \l_@@_tmpa_dim { \textwidth - #1 - #2 }
    \list { }
      {
%    \end{macrocode}
% \tn{list} çŽ¯å¢ƒä½¿ç”¨å®½åº¦å›ºå®šçš„ç›’å­åˆ¶ä½œæ&nbsp;‡ç­¾ï¼Œé€šè¿‡æŒ‡å®šè¿™ä¸ªç›’å­çš„å®½åº¦
% \tn{labelwidth} å³å¯ç¡®å®šå·¦ä¾§æ&nbsp;‡ç­¾åŒºåŸŸçš„å®½åº¦ã€‚
%    \begin{macrocode}
        \labelwidth #2
        \labelsep   \c_zero_dim
        \itemsep    \c_zero_dim
        \parsep     \c_zero_dim
%    \end{macrocode}
% å³ä¾§è¯´æ˜Žæ–‡å­—åŒºåŸŸçš„å®½åº¦æ—&nbsp;æ³•ç›´æŽ¥æŒ‡å®šï¼Œè€Œæ˜¯é&nbsp;è®¡ç®—å·¦å³è¾¹è· \tn{leftmargin} å’Œ
% \tn{rightmargin} å¾—åˆ°çš„ã€‚
%    \begin{macrocode}
        \leftmargin .5\l_@@_tmpa_dim
        \rightmargin \leftmargin
        \advance \leftmargin #2
        \cs_set_eq:NN \makelabel \@@_notation_label:n
      }
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{environment}{notation}
% \changes{v0.15}{2022/01/17}{æä¾›ç¬¦å·è¡¨çŽ¯å¢ƒã€‚}
% ç¬¦å·è¡¨çŽ¯å¢ƒã€‚
% \begin{arguments}
%   \item è¯´æ˜ŽåŒºåŸŸå®½åº¦ï¼Œåˆå§‹å€¼ä¸º 10 emã€‚è¯´æ˜Žå®½åº¦çš„è°ƒæ•´æ›´ä¸ºå¸¸è§ï¼Œæ‰€ä»¥æ”¾åœ¨å‰é¢ã€‚
%   \item ç¬¦å·åŒºåŸŸå®½åº¦ï¼Œåˆå§‹å€¼ä¸º 5 em
% \end{arguments}
%    \begin{macrocode}
\NewDocumentEnvironment { notation } { O { 10 em } O { 5 em } }
  {
    \@@_chapter:V \l_@@_name_notation_tl
    \@@_make_notation:nn {#1} {#2}
  }
  { \endlist \cleardoublepage }
%    \end{macrocode}
% \end{environment}
%
% \begin{environment}{notation*}
% å¸¦æœ‰æ˜Ÿå·çš„ç¬¦å·è¡¨ä¸ä¼šæ’å…¥ç›®å½•ã€‚
%    \begin{macrocode}
\NewDocumentEnvironment { notation* } { O { 10 em } O { 5 em } }
  {
    \chapter * { \l_@@_name_notation_tl }
    \@@_make_notation:nn {#1} {#2}
  }
  { \endlist \cleardoublepage }
%&lt;/class&gt;
%    \end{macrocode}
% \end{environment}
%
%
% \subsection{é…ç½®å¸¸é‡}
% \label{subsec:constant-config}
% \changes{v0.16}{2022/02/23}{å°†åç§°å¸¸é‡åˆ†ç¦»åˆ° \file{.def} æ–‡ä»¶ã€‚}
% \changes{v0.18}{2022/04/20}{ä½¿ç”¨ |const| ç±»åž‹ç»Ÿä¸€å®šä¹‰å¸¸é‡ã€‚}
%
% æœ¬èŠ‚å†…å®¹ç”¨äºŽç”Ÿæˆå¸¸é‡çš„é»˜è®¤å®šä¹‰ï¼Œåˆ†ä¸ºæœ¬ç§‘ç”Ÿå’Œç&nbsp;”ç©¶ç”Ÿæ¨¡æ¿ä¸¤ç§ã€‚
%
% \subsubsection{åç§°}
% \label{subsubsec:constant-name}
%
% \changes{v0.19}{2022/05/22}{æ›´æ­£ç&nbsp;”ç©¶ç”Ÿæ™®é€šå°é¢ä¸“ä¸šå­—æ&nbsp;·ã€‚}
% \changes{v0.19}{2022/05/22}{æ›´æ­£å›½å®¶å›¾ä¹¦é¦†å°é¢å­¦ä½è®ºæ–‡å­—æ&nbsp;·ã€‚}
% \changes{v1.0}{2022/06/19}{åˆå¹¶åç§°å¸¸é‡çš„å®šä¹‰ä½ç½®ã€‚}
% \changes{v1.0}{2022/06/19}{æ›´åï¼šsupv_ii -&gt; supviiï¼Œsupv_ttl -&gt; supvtitleã€‚}
%
% ç”±äºŽåŒä¸€åç§°åœ¨ä¸åŒä½ç½®å…·æœ‰ä¸åŒå˜ä½“ï¼Œæœ¬æ¨¡æ¿ä½¿ç”¨å­—æ¯åŽç¼€åè¿›è¡Œäº†åŒºåˆ†ï¼Œ
% å¹¶åœ¨æ˜“æ··æ·†å¤„æ·»åŠ&nbsp;äº†æ³¨é‡Šã€‚
%
% é€šç”¨é»˜è®¤åç§°ã€‚æ³¨æ„ç©ºæ&nbsp;¼æ˜¯å¿½ç•¥æŽ‰çš„ã€‚
%    \begin{macrocode}
%&lt;*(def-u|def-g|def-p)&gt;
\clist_map_inline:nn
  {
    { acknowledgement   } { è‡´ \qquad{} è°¢                     },
    { acknowledgement a } { è‡´è°¢ï¼ˆç›²å®¡é˜¶æ®µï¼Œæš‚æ—¶éšåŽ»ï¼‰         },
    { anonymous a       } { \ensuremath { \times\times\times } },
    { anonymous b       } { \ensuremath { \times\times\times } },
    { anonymous c       } { \ensuremath { \times\times\times } },
%&lt;def-g&gt;    { auth decl         } { å­¦ä½è®ºæ–‡å‡ºç‰ˆæŽˆæƒä¹¦                 },
%&lt;def-p&gt;    { auth decl         } { ç&nbsp;”ç©¶æŠ¥å‘Šä½¿ç”¨æŽˆæƒä¹¦                 },
%&lt;def-p&gt;    { author            } { ä½œè€…                               },
%    \end{macrocode}
% ç”¨äºŽæ‘˜è¦çš„ä½œè€…åç§°å­—æ&nbsp;·
%    \begin{macrocode}
%&lt;def-u&gt;    { author          a } { æœ¬ç§‘ç”Ÿå§“å                         },
%&lt;def-g&gt;    { author          a } { \g_@@_info_type_tl ç”Ÿå§“å        },
%&lt;def-g&gt;    { auth sign         } { ä½œè€…ç­¾åï¼š\njuline{\hspace{6em}}   },
%&lt;def-p&gt;    { auth sign         } { æœ¬äººç­¾å                           },
%&lt;def-p&gt;    { auth sign       a } { å¯¼å¸ˆç­¾å                           },
%&lt;def-g&gt;    { chairman          } { ç­”è¾©å§”å‘˜ä¼šä¸»å¸­                     },
%&lt;def-g&gt;    { clc               } { åˆ†ç±»å·                             },
%&lt;def-g&gt;    { code              } { å­¦æ&nbsp;¡ä»£ç&nbsp;                           },
%&lt;def-g&gt;    { confer            } { å­¦ä½æŽˆäºˆå•ä½å’Œæ—¥æœŸ                 },
    { date              } { æ—¥æœŸ                               },
%&lt;def-g&gt;    { defend date       } { è®ºæ–‡ç­”è¾©æ—¥æœŸ                       },
%&lt;def-g&gt;    { degree            } { ç”³è¯·å­¦ä½çº§åˆ«                       },
%    \end{macrocode}
% ç”¨äºŽå‡ºç‰ˆæŽˆæƒä¹¦çš„å­¦ä½åç§°å­—æ&nbsp;·
%    \begin{macrocode}
%&lt;def-g&gt;    { degree          a } { è®ºæ–‡çº§åˆ«                           },
%&lt;def-p&gt;    { dept              } { ç³»åˆ«                               },
%    \end{macrocode}
% ç”¨äºŽå‡ºç‰ˆæŽˆæƒä¹¦çš„é™¢ç³»åç§°å­—æ&nbsp;·
%    \begin{macrocode}
%&lt;def-g&gt;    { dept            a } { æ‰€åœ¨é™¢ç³»                           },
%&lt;def-g&gt;    { email             } { ä½œè€… Email                         },
%&lt;def-g&gt;    { field             } { ç&nbsp;”ç©¶æ–¹å‘                           },
%&lt;def-u&gt;    { grade             } { å¹´çº§                               },
%&lt;def-g&gt;    { grade             } { çº§                                 },
%&lt;def-u|def-g&gt;    { id                } { å­¦å·                               },
%&lt;def-p&gt;    { id                } { å·¥å·                               },
%    \end{macrocode}
% ç”¨äºŽå‡ºç‰ˆæŽˆæƒä¹¦çš„å­¦å·åç§°å­—æ&nbsp;·
%    \begin{macrocode}
%&lt;def-g&gt;    { id              a } { ç&nbsp;”ç©¶ç”Ÿå­¦å·                         },
    { listoffigures     } { æ’å›¾ç›®å½•                           },
    { listoftables      } { è¡¨æ&nbsp;¼ç›®å½•                           },
%&lt;def-p&gt;    { major             } { å­¦ç§‘ä¸“ä¸š                           },
%    \end{macrocode}
% ç”¨äºŽæ‘˜è¦çš„ä¸“ä¸šåç§°å­—æ&nbsp;·
%    \begin{macrocode}
%&lt;def-g&gt;    { major           a } { ä¸“ä¸š                               },
%    \end{macrocode}
% ç”¨äºŽå›½å®¶å›¾ä¹¦é¦†å°é¢çš„ä¸“ä¸šåç§°å­—æ&nbsp;·
%    \begin{macrocode}
%&lt;def-g&gt;    { major           b } { ä¸“ä¸šåç§°                           },
%    \end{macrocode}
% ç”¨äºŽä¸“ä¸šå­¦ä½å°é¢çš„ä¸“ä¸šåç§°å­—æ&nbsp;·
%    \begin{macrocode}
%&lt;def-g&gt;    { major           c } { ä¸“ä¸šå­¦ä½ç±»åˆ«(é¢†åŸŸ)                 },
    { notation          } { ç¬¦å·è¡¨                             },
%&lt;def-u&gt;    { orig decl         }
%&lt;def-u&gt;      { å—äº¬å¤§å­¦æœ¬ç§‘æ¯•ä¸šè®ºæ–‡ï¼ˆè®¾è®¡ï¼‰ \\ è¯šä¿¡æ‰¿è¯ºä¹¦             },
%&lt;def-g&gt;    { orig decl         } { å—äº¬å¤§å­¦å­¦ä½è®ºæ–‡åŽŸåˆ›æ€§å£°æ˜Ž         },
%&lt;def-p&gt;    { orig decl         } { ç&nbsp;”ç©¶æŠ¥å‘ŠåŽŸåˆ›æ€§å£°æ˜Ž                 },
%&lt;def-u&gt;    { orig sign         } { ä½œè€…ç­¾å                           },
%&lt;def-g&gt;    { orig sign         } { ç&nbsp;”ç©¶ç”Ÿç­¾å                         },
%&lt;def-p&gt;    { orig sign         } { ç&nbsp;”ç©¶æŠ¥å‘Šä½œè€…ç­¾å                   },
    { paper list        } { å‘è¡¨æ–‡ç«&nbsp;ç›®å½•                       },
    { pdf creator       } { LaTeX~ with~ njuthesis~ class      },
    { preface           } { å‰ \qquad{} è¨€                     },
%&lt;def-p&gt;    { report            } { åšå£«åŽç&nbsp;”ç©¶å·¥ä½œæŠ¥å‘Š                 },
%&lt;def-g&gt;    { reviewer          } { è¯„é˜…äºº                             },
%&lt;def-g&gt;    { secret lv         } { å¯†çº§                               },
%&lt;def-g&gt;    { secret status     } { è®ºæ–‡æ¶‰å¯†æƒ…å†µï¼š                     },
%&lt;def-g&gt;    { secret free       } { ä¸ä¿å¯†                             },
%&lt;def-g&gt;    { secret date       }
%&lt;def-g&gt;      { ä¿å¯†ï¼Œä¿å¯†æœŸï¼ˆ \l_@@_name_blankdatea_tl è‡³
%&lt;def-g&gt;                       \l_@@_name_blankdatea_tl ï¼‰           },
%&lt;def-g&gt;    { sign              } { ï¼ˆç­¾å­—ï¼‰                           },
%&lt;def-g&gt;    { sign            a } { ç&nbsp;”ç©¶ç”Ÿç­¾å                         },
%&lt;def-g&gt;    { sign            b } { å¯¼å¸ˆç­¾å                           },
%&lt;def-g&gt;    { stzhongs file     } { STZhongsong                        },
%&lt;def-u&gt;    { submit date       } { æäº¤æ—¥æœŸ                           },
%&lt;def-g&gt;    { submit date       } { è®ºæ–‡æäº¤æ—¥æœŸ                       },
%&lt;def-p&gt;    { submit date       } { å®Œæˆæ—¥æœŸ                           },
%&lt;def-g&gt;    { subtitle          } { ï¼ˆé¢˜åå’Œå‰¯é¢˜åï¼‰                   },
%&lt;def-u&gt;    { supv              } { æŒ‡å¯¼æ•™å¸ˆ                           },
%&lt;def-g&gt;    { supv              } { å¯¼å¸ˆ                               },
%&lt;def-p&gt;    { supv full         } { åˆä½œå¯¼å¸ˆ                           },
%    \end{macrocode}
% ç”¨äºŽæ‘˜è¦çš„å¯¼å¸ˆåç§°å­—æ&nbsp;·
%    \begin{macrocode}
%&lt;def-g&gt;    { supv            a } { æŒ‡å¯¼æ•™å¸ˆï¼ˆå§“åã€èŒç§°ï¼‰             },
%    \end{macrocode}
% ç”¨äºŽå‡ºç‰ˆæŽˆæƒä¹¦çš„å¯¼å¸ˆåç§°å­—æ&nbsp;·
%    \begin{macrocode}
%&lt;def-g&gt;    { supv            b } { å¯¼å¸ˆå§“å                           },
%&lt;def-g&gt;    { supv info         }
%&lt;def-g&gt;      { æŒ‡å¯¼æ•™å¸ˆå§“åã€èŒåŠ¡ã€èŒç§°ã€å­¦ä½ã€å•ä½åç§°åŠåœ°å€         },
    { supv ii           } { ç¬¬äºŒå¯¼å¸ˆ                           },
    { supv title        } { èŒç§°                               },
    { tableofcontents   } { ç›® \qquad{} å½•                     },
%&lt;def-p&gt;    { title             } { æŠ¥å‘Šé¢˜ç›®                           },
%    \end{macrocode}
% ç”¨äºŽæ‘˜è¦çš„æ&nbsp;‡é¢˜åç§°å­—æ&nbsp;·
%    \begin{macrocode}
%&lt;def-g&gt;    { title           a } { æ¯•ä¸šè®ºæ–‡é¢˜ç›®                       },
%    \end{macrocode}
% ç”¨äºŽå›½å®¶å›¾ä¹¦é¦†å°é¢çš„æ&nbsp;‡é¢˜åç§°å­—æ&nbsp;·
%    \begin{macrocode}
%&lt;def-g&gt;    { title           b } { å­¦ä½è®ºæ–‡                           },
%    \end{macrocode}
% ç”¨äºŽå‡ºç‰ˆæŽˆæƒä¹¦çš„æ&nbsp;‡é¢˜åç§°å­—æ&nbsp;·
%    \begin{macrocode}
%&lt;def-g&gt;    { title           c } { è®ºæ–‡é¢˜å                           },
%&lt;def-g&gt;    { udc               } { U D C                              },
%&lt;def-g&gt;    { year              } { å­¦ä½å¹´åº¦                           }
  }
  { \@@_define_name:nn #1 }
%    \end{macrocode}
%
% å®šä¹‰åŒæ—¶ä½¿ç”¨åˆ°ä¸­è‹±æ–‡åç§°çš„å¸¸é‡ã€‚
%    \begin{macrocode}
\clist_map_inline:nn
  {
    { abstract      } { æ‘˜è¦            } { ABSTRACT              },
%    \end{macrocode}
% ç”¨äºŽä¹¦ç­¾çš„æ‘˜è¦åç§°å­—æ&nbsp;·
%    \begin{macrocode}
    { abstract    a } { ä¸­æ–‡æ‘˜è¦        } { ABSTRACT              },
%    \end{macrocode}
% ç”¨äºŽå°æ&nbsp;‡é¢˜çš„æ‘˜è¦åç§°å­—æ&nbsp;·
%    \begin{macrocode}
    { abstract    b } { æ‘˜\qquad{}è¦    } { ABSTRACT              },
%&lt;def-u|def-g&gt;    { abstracttitle }
%&lt;def-u&gt;      { \l_@@_name_nju_tl æœ¬ç§‘ç”Ÿæ¯•ä¸šè®ºæ–‡ï¼ˆè®¾è®¡ã€ä½œå“ï¼‰ä¸­æ–‡æ‘˜è¦  }
%&lt;def-u&gt;      { \l_@@_name_nju_tl æœ¬ç§‘ç”Ÿæ¯•ä¸šè®ºæ–‡ï¼ˆè®¾è®¡ã€ä½œå“ï¼‰è‹±æ–‡æ‘˜è¦  },
%&lt;def-g&gt;      { \l_@@_name_nju_tl ç&nbsp;”ç©¶ç”Ÿæ¯•ä¸šè®ºæ–‡ä¸­æ–‡æ‘˜è¦é¦–é¡µç”¨çº¸        }
%&lt;def-g&gt;      { \l_@@_name_nju_tl ç&nbsp;”ç©¶ç”Ÿæ¯•ä¸šè®ºæ–‡è‹±æ–‡æ‘˜è¦é¦–é¡µç”¨çº¸        },
    { appendix      } { é™„å½•            } { appendix              },
%&lt;def-u&gt;    { author        } { å­¦ç”Ÿå§“å        } { UNDERGRADUATE         },
%&lt;def-g&gt;    { author        } { ä½œè€…å§“å        } { POSTGRADUATE          },
    { blankdate     } { \qquad{}å¹´ \quad{}æœˆ \quad{}æ—¥   } {      },
    { blankdate   a } { \njuline{\qquad\qquad} å¹´
            \njuline{\qquad} æœˆ \njuline{\qquad} æ—¥      } {      },
%    \end{macrocode}
% \changes{v1.4}{2024/04/03}{ä¿®å¤ \hologo{LuaLaTeX} ä¸‹çš„æ‘˜è¦é¡µå¤šä½™æ¢è¡Œã€‚}
% è¿™é‡ŒåŠ&nbsp;å…¥ä¼¸ç¼©é‡ï¼Œæ˜¯å›&nbsp;ä¸º \hologo{LuaLaTeX} ä¸‹å…¨è§’å†’å·çš„å®½åº¦å¹¶ä¸èƒ½è¢«æ­£ç¡®è¯†åˆ«ã€‚
%    \begin{macrocode}
    { colon         } { ï¼š\hskip 0pt minus .4em } { : \c_space_tl },
%&lt;def-u|def-g&gt;    { dept          } { é™¢ç³»            } { DEPARTMENT            },
    { figure        } { å›¾              } { figure                },
    { keywords      } { å…³é”®è¯          } { KEYWORDS              },
    { lang          } { ä¸­æ–‡            } { è‹±æ–‡                  },
%&lt;def-u&gt;    { major         } { ä¸“ä¸š            } { SPECIALIZATION        },
%&lt;def-g&gt;    { major         } { ä¸“ä¸šåç§°        } { SPECIALIZATION        },
    { nju           } { å—äº¬å¤§å­¦        } { Nanjing~ University   },
    { suffix        } {                 } { _en                   },
%&lt;def-u&gt;    { supv full     } { æŒ‡å¯¼æ•™å¸ˆï¼ˆå§“åã€èŒç§°ï¼‰   } { MENTOR       },
%&lt;def-g&gt;    { supv full     } { å¯¼å¸ˆå§“å        } { MENTOR                },
    { table         } { è¡¨              } { table                 },
%&lt;def-u&gt;    { title         } { é¢˜ç›®            } { THESIS                },
%&lt;def-g&gt;    { title         } { è®ºæ–‡é¢˜ç›®        } { THESIS                },
%&lt;def-u&gt;    { type          } { æœ¬ç§‘æ¯•ä¸šè®ºæ–‡                        } { u }
%&lt;def-g&gt;    { type          } {     å­¦ä½è®ºæ–‡                        } { g }
  }
  { \@@_define_name:nnn #1 }
%    \end{macrocode}
%
% \subsubsection{æ–‡æœ¬}
% \label{subsubsec:constant-text}
%
% \begin{variable}{\l_@@_text_origdecl_tl}
% æœ¬ç§‘ç”Ÿçš„å­¦ä½è®ºæ–‡è¯šä¿¡æ‰¿è¯ºä¹¦ï¼Œæˆ–ç&nbsp;”ç©¶ç”Ÿçš„å­¦ä½è®ºæ–‡åŽŸåˆ›æ€§å£°æ˜Žã€‚
%    \begin{macrocode}
\tl_set:Nn \l_@@_text_origdecl_tl
  {
%&lt;*def-u&gt;
    æœ¬äººéƒ‘é‡æ‰¿è¯ºï¼šæ‰€å‘ˆäº¤çš„æ¯•ä¸šè®ºæ–‡ï¼ˆè®¾è®¡ï¼‰ï¼ˆé¢˜ç›®ï¼š \g_@@_info_title_tl ï¼‰
    æ˜¯åœ¨æŒ‡å¯¼æ•™å¸ˆçš„æŒ‡å¯¼ä¸‹ä¸¥æ&nbsp;¼æŒ‰ç…§å­¦æ&nbsp;¡å’Œé™¢ç³»æœ‰å…³è§„å®šç”±æœ¬äººç‹¬ç«‹å®Œæˆçš„ã€‚
    æœ¬æ¯•ä¸šè®ºæ–‡ï¼ˆè®¾è®¡ï¼‰ä¸­å¼•ç”¨ä»–äººè§‚ç‚¹åŠå‚è€ƒèµ„æºçš„å†…å®¹å‡å·²æ&nbsp;‡æ³¨å¼•ç”¨ï¼Œ
    å¦‚å‡ºçŽ°ä¾µçŠ¯ä»–äººçŸ¥è¯†äº§æƒçš„è¡Œä¸ºï¼Œç”±æœ¬äººæ‰¿æ‹…ç›¸åº”æ³•å¾‹è´£ä»»ã€‚
    æœ¬äººæ‰¿è¯ºä¸å­˜åœ¨æŠ„è¢­ã€ä¼ªé€&nbsp;ã€ç¯¡æ”¹ã€ä»£å†™ã€ä¹°å–æ¯•ä¸šè®ºæ–‡ï¼ˆè®¾è®¡ï¼‰ç­‰è¿çºªè¡Œä¸ºã€‚
%&lt;/def-u&gt;
%&lt;*def-g&gt;
    æœ¬äººéƒ‘é‡å£°æ˜Žï¼Œæ‰€æäº¤çš„å­¦ä½è®ºæ–‡æ˜¯æœ¬äººåœ¨å¯¼å¸ˆæŒ‡å¯¼ä¸‹ç‹¬ç«‹è¿›è¡Œç§‘å­¦ç&nbsp;”ç©¶å·¥ä½œæ‰€
    å–å¾—çš„æˆæžœã€‚é™¤æœ¬è®ºæ–‡ä¸­å·²ç»æ³¨æ˜Žå¼•ç”¨çš„å†…å®¹å¤–ï¼Œæœ¬è®ºæ–‡ä¸åŒ…å«å…¶ä»–ä¸ªäººæˆ–é›†ä½“
    å·²ç»å‘è¡¨æˆ–æ’°å†™è¿‡çš„ç&nbsp;”ç©¶æˆæžœï¼Œä¹Ÿä¸åŒ…å«ä¸ºèŽ·å¾—å—äº¬å¤§å­¦æˆ–å…¶ä»–æ•™è‚²æœºæž„çš„å­¦ä½
    è¯ä¹¦è€Œä½¿ç”¨è¿‡çš„ææ–™ã€‚å¯¹æœ¬æ–‡çš„ç&nbsp;”ç©¶åšå‡ºé‡è¦è´¡çŒ®çš„ä¸ªäººå’Œé›†ä½“ï¼Œå‡å·²åœ¨è®ºæ–‡çš„
    è‡´è°¢éƒ¨åˆ†æ˜Žç¡®æ&nbsp;‡æ˜Žã€‚æœ¬äººéƒ‘é‡ç”³æ˜Žæ„¿æ‰¿æ‹…æœ¬å£°æ˜Žçš„æ³•å¾‹è´£ä»»ã€‚
%&lt;/def-g&gt;
%&lt;*def-p&gt;
    æœ¬äººéƒ‘é‡å£°æ˜Žï¼šæ‰€å‘ˆäº¤çš„ç&nbsp;”ç©¶æŠ¥å‘Šï¼Œæ˜¯æœ¬äººç‹¬ç«‹è¿›è¡Œç&nbsp;”ç©¶å·¥ä½œæ‰€å–å¾—çš„æˆæžœã€‚é™¤
    æ–‡ä¸­å·²ç»æ³¨æ˜Žå¼•ç”¨çš„å†…å®¹å¤–ï¼Œæœ¬æŠ¥å‘Šä¸å«ä»»ä½•å…¶ä»–ä¸ªäººæˆ–é›†ä½“å·²ç»å‘è¡¨æˆ–æ’°å†™è¿‡
    çš„ä½œå“æˆæžœã€‚å¯¹æœ¬æŠ¥å‘Šçš„ç&nbsp;”ç©¶åšå‡ºé‡è¦è´¡çŒ®çš„ä¸ªäººå’Œé›†ä½“ï¼Œå‡å·²åœ¨æŠ¥å‘Šä¸­ä»¥æ˜Žç¡®
    æ–¹å¼æ&nbsp;‡æ˜Žã€‚æœ¬äººå®Œå…¨æ„è¯†åˆ°æœ¬å£°æ˜Žçš„æ³•å¾‹ç»“æžœç”±æœ¬äººæ‰¿æ‹…ã€‚
%&lt;/def-p&gt;
  }
%    \end{macrocode}
% \end{variable}
%
% \begin{variable}{\l_@@_text_authdecl_tl}
% ç&nbsp;”ç©¶ç”Ÿçš„å­¦ä½è®ºæ–‡å‡ºç‰ˆæŽˆæƒä¹¦ã€‚
%    \begin{macrocode}
%&lt;*(def-g|def-p)&gt;
\tl_set:Nn \l_@@_text_authdecl_tl
  {
%&lt;*def-g&gt;
    æœ¬äººå®Œå…¨åŒæ„ã€Šä¸­å›½ä¼˜ç§€åšç¡•å£«å­¦ä½è®ºæ–‡å…¨æ–‡æ•°æ®åº“å‡ºç‰ˆç«&nbsp;ç¨‹ã€‹ï¼ˆä»¥ä¸‹ç®€ç§°â€œç«&nbsp;
    ç¨‹â€ï¼‰ï¼Œæ„¿æ„å°†æœ¬äººçš„å­¦ä½è®ºæ–‡æäº¤â€œä¸­å›½å­¦æœ¯æœŸåˆŠï¼ˆå…‰ç›˜ç‰ˆï¼‰ç”µå­æ‚å¿—ç¤¾â€åœ¨ã€Š
    ä¸­å›½åšå£«å­¦ä½è®ºæ–‡å…¨æ–‡æ•°æ®åº“ã€‹ã€ã€Šä¸­å›½ä¼˜ç§€ç¡•å£«å­¦ä½è®ºæ–‡å…¨æ–‡æ•°æ®åº“ã€‹ä¸­å…¨æ–‡
    å‘è¡¨ã€‚ã€Šä¸­å›½åšå£«å­¦ä½è®ºæ–‡å…¨æ–‡æ•°æ®åº“ã€‹ã€ã€Šä¸­å›½ä¼˜ç§€ç¡•å£«å­¦ä½è®ºæ–‡å…¨æ–‡æ•°æ®åº“
    ã€‹å¯ä»¥ä»¥ç”µå­ã€ç½‘ç»œåŠå…¶ä»–æ•°å­—åª’ä½“å½¢å¼å…¬å¼€å‡ºç‰ˆï¼Œå¹¶åŒæ„ç¼–å…¥ã€Šä¸­å›½çŸ¥è¯†èµ„æº
    æ€»åº“ã€‹ï¼Œåœ¨ã€Šä¸­å›½åšç¡•å£«å­¦ä½è®ºæ–‡è¯„ä»·æ•°æ®åº“ã€‹ä¸­ä½¿ç”¨å’Œåœ¨äº’è”ç½‘ä¸Šä¼&nbsp;æ’­ï¼ŒåŒæ„
    æŒ‰â€œç«&nbsp;ç¨‹â€è§„å®šäº«å—ç›¸å…³æƒç›Šã€‚
%&lt;/def-g&gt;
%&lt;*def-p&gt;
    æœ¬ç&nbsp;”ç©¶æŠ¥å‘Šä½œè€…å®Œå…¨äº†è§£å—äº¬å¤§å­¦æœ‰å…³ä¿ç•™å’Œä½¿ç”¨è¯¥æŠ¥å‘Šçš„è§„å®šï¼Œå³ï¼šåšå£«åŽåœ¨
    èŒæœŸé—´çš„çŸ¥è¯†äº§æƒå•ä½å±žå—äº¬å¤§å­¦ã€‚å­¦æ&nbsp;¡æœ‰æƒä¿ç•™å¹¶å‘å›½å®¶æœ‰å…³éƒ¨é—¨æˆ–æœºæž„é€äº¤
    ç&nbsp;”ç©¶æŠ¥å‘Šçš„å¤å°ä»¶å’Œç”µå­ç‰ˆï¼Œå…è®¸ç&nbsp;”ç©¶æŠ¥å‘Šè¢«æŸ¥é˜…å’Œå€Ÿé˜…ï¼›å­¦æ&nbsp;¡å¯ä»¥å…¬å¸ƒç&nbsp;”ç©¶æŠ¥
    å‘Šçš„å…¨éƒ¨æˆ–éƒ¨åˆ†å†…å®¹ï¼Œå¯ä»¥å…è®¸é‡‡ç”¨å½±å°ã€ç¼©å°æˆ–å…¶å®ƒå¤åˆ¶æ‰‹æ®µä¿å­˜ã€æ±‡ç¼–ç&nbsp;”ç©¶
    æŠ¥å‘Šã€‚ä¿å¯†çš„ç&nbsp;”ç©¶æŠ¥å‘Šåœ¨è§£å¯†åŽé€‚ç”¨äºŽæœ¬æŽˆæƒä¹¦ã€‚
%&lt;/def-p&gt;
  }
%&lt;/(def-g|def-p)&gt;
%    \end{macrocode}
% \end{variable}
%
% \begin{variable}{\l_@@_text_cover_en_tl}
% ç&nbsp;”ç©¶ç”Ÿçš„è‹±æ–‡å°é¢å­—æ&nbsp;·ã€‚
%    \begin{macrocode}
%&lt;*def-g&gt;
\tl_set:Nn \l_@@_text_cover_en_tl
  {
    A~ dissertation~ submitted~ to \\
    the~ graduate~ school~ of~ \l_@@_name_nju_en_tl \\
    in~ partial~ fulfilment~ of~ the~ requirements~ for~ the~ degree~ of
  }
%&lt;/def-g&gt;
%    \end{macrocode}
% \end{variable}
%
% \subsubsection{é•¿åº¦}
% \label{subsubsec:constant-length}
%
% \changes{v0.17}{2022/04/09}{å°†é•¿åº¦å€¼åˆ†ç¦»åˆ° \file{.def} æ–‡ä»¶ã€‚}
% \changes{v1.0}{2022/06/11}{å¯ä»¥å•ç‹¬æŒ‡å®šä¸‹åˆ’çº¿çš„å®½åº¦å’Œåç§»ã€‚}
% é»˜è®¤å›ºå®šé•¿åº¦å€¼ã€‚æ­¤å¤„åç§°çš„ç©ºæ&nbsp;¼ä»…ç”¨æ¥æå‡å¯è¯»æ€§ï¼Œåœ¨ç”Ÿæˆå˜é‡åæ—¶ä¼šè¢«åˆ&nbsp;åŽ»ã€‚
%    \begin{macrocode}
\clist_map_inline:nn
  {
%    \end{macrocode}
% å°é¢ä¿¡æ¯æ&nbsp;æ&nbsp;‡ç­¾çš„å®½åº¦ã€‚
%    \begin{macrocode}
%&lt;def-u&gt;    { c label wd     } { 68   pt },
%&lt;def-g&gt;    { c label wd     } { 2.97 cm },
%&lt;def-g&gt;    { c label wd i   } { 3.90 cm },
%&lt;def-g&gt;    { c label wd ii  } { 2.62 cm },
%&lt;def-p&gt;    { c label wd     } { 50   pt },
%    \end{macrocode}
% å°é¢ä¿¡æ¯æ&nbsp;æ¨ªçº¿çš„å®½åº¦ã€‚
%    \begin{macrocode}
%&lt;def-u&gt;    { c rule  wd     } { 8    cm },
%&lt;def-g&gt;    { c rule  wd     } { 6.7  cm },
%&lt;def-g&gt;    { c rule  wd i   } { 6.2  cm },
%&lt;def-g&gt;    { c type  wd     } { 239  pt },
%    \end{macrocode}
% æ&nbsp;¡å¾½å›¾ç‰‡çš„å®½åº¦ã€‚
%    \begin{macrocode}
%&lt;def-u&gt;    { emblem  wd     } { 68   pt },
%&lt;def-g&gt;    { emblem  wd     } { 40   pt },
%&lt;def-u&gt;    { emblem  wd i   } { 68   pt },
%&lt;def-g&gt;    { emblem  wd ii  } { 61   pt },
%    \end{macrocode}
% æ&nbsp;¡åå›¾ç‰‡çš„å®½åº¦ã€‚
%    \begin{macrocode}
%&lt;def-u&gt;    { name    wd     } { 300  pt },
%&lt;def-g&gt;    { name    wd     } { 111  pt },
%&lt;def-p&gt;    { name    wd     } { 220  pt },
%    \end{macrocode}
% ä¸‹åˆ’çº¿é«˜åº¦ï¼ˆåŽšåº¦ï¼‰ã€‚ä¸‹åˆ’çº¿ç»˜åˆ¶å‘½ä»¤æ˜¯é€šç”¨çš„ï¼Œå›&nbsp;æ­¤æ²¡æœ‰ä½œæ–‡ä»¶åŒºåˆ†ã€‚
%    \begin{macrocode}
    { rule    ht i   } { .4   pt },
    { rule    ht ii  } { .8   pt },
%    \end{macrocode}
% ä¸‹åˆ’çº¿æ·±åº¦ï¼ˆåç§»é‡ï¼‰ã€‚
%    \begin{macrocode}
    { rule    dp i   } { -.7  ex },
    { rule    dp ii  } { -.9  ex },
    { rule    dp iii } { -1.2 ex },
%    \end{macrocode}
% å°å¹…ç©ºæ&nbsp;¼ã€‚
%    \begin{macrocode}
%&lt;def-u&gt;    { h sep          } { 0    pt },
%&lt;def-g|def-p&gt;    { h sep          } { 5    pt },
    { v sep          } { 1    ex },
%    \end{macrocode}
% ç«&nbsp;èŠ‚æ&nbsp;‡é¢˜å‰åŽé—´è·ã€‚
%    \begin{macrocode}
    { chapter before } { 10   pt },
    { chapter  after } { 60   pt },
%    \end{macrocode}
% è„šæ³¨ç¼–å·å®½åº¦ã€‚
%    \begin{macrocode}
    { fn hang        } { 13.5 pt }
  }
  { \@@_define_dim:nn #1 }
%    \end{macrocode}
%
% \subsubsection{æ&nbsp;·å¼}
% \label{subsubsec:constant-format}
%
% \changes{v0.17}{2022/04/09}{å°†æ&nbsp;·å¼å®šä¹‰åˆ†ç¦»åˆ° \file{.def} æ–‡ä»¶ã€‚}
% \changes{v0.20}{2022/05/28}{ä¿®å¤å‰ä¸€ç‰ˆæœ¬ä¸­é”™è¯¯çš„ç›®å½•æ¡ç›®æ&nbsp;·å¼ã€‚}
% é»˜è®¤æ&nbsp;·å¼ã€‚
%    \begin{macrocode}
\clist_map_inline:nn
  {
%&lt;def-u&gt;    { pagestyle     } { plain                             },
%&lt;def-g|def-p&gt;    { pagestyle     } { headings                          },
    { abslabel      } { \bfseries                         },
    { abslabel_en   } {                                   },
%&lt;def-u&gt;    { cover title   } { \bfseries                         },
%&lt;def-g&gt;    { cover title   } {                                   },
%&lt;def-u&gt;    { cover label   } { \kaishu                           },
%&lt;def-g&gt;    { cover label   } { \bfseries                         },
%&lt;def-p&gt;    { cover label   } {                                   },
%    \end{macrocode}
% è°ƒç”¨ \pkg{njuvisual} æ—¶çš„æ&nbsp;¡å¾½é¢œè‰²ã€‚
%    \begin{macrocode}
    { emblem color  } { black                             },
    { name   color  } { black                             },
%    \end{macrocode}
% å„çº§æ&nbsp;‡é¢˜æ&nbsp;·å¼ã€‚
%    \begin{macrocode}
    { section       } { \bigger \normalfont \sffamily     },
    { chapter       } { \l_@@_fmt_section_tl \centering },
    { subsection    } { \l_@@_fmt_section_tl            },
    { subsubsection } { \l_@@_fmt_section_tl            },
    { paragraph     } { \l_@@_fmt_section_tl            },
    { subparagraph  } { \l_@@_fmt_section_tl            },
%    \end{macrocode}
% ç›®å½•ä¸­çš„ç«&nbsp;æ&nbsp;‡é¢˜æ&nbsp;·å¼ã€‚
%    \begin{macrocode}
    { chapterintoc  } { \l_@@_fmt_section_tl            },
%    \end{macrocode}
% â€œç›®å½•â€äºŒå­—çš„æ&nbsp;·å¼ã€‚
%    \begin{macrocode}
%    \end{macrocode}
% \changes{v1.3}{2023/07/08}{æ•´åˆè¡¨æ&nbsp;¼çŽ¯å¢ƒå­—ä½“è®¾ç½®ã€‚}
% \env{tabular} çŽ¯å¢ƒå†…çš„å­—ä½“æ&nbsp;·å¼ã€‚
%    \begin{macrocode}
    { tabular       } { \zihao { 5 }                      },
    { toc title     } { \centering \zihao { 3 } \bfseries },
    { header        } { \small \kaishu                    },
    { footer        } { \small \rmfamily                  }
  }
  { \@@_define_fmt:nn #1 }
%&lt;/(def-u|def-g|def-p)&gt;
%    \end{macrocode}
%
%
% \subsection{æ‰‹å†Œæ–‡æ¡£ç±» \cls{njuthesis-doc}}
% \changes{v1.3}{2023/05/12}{å°†æ‰‹å†Œæ&nbsp;·å¼è®¾ç½®æ‹†åˆ†ä¸ºå•ç‹¬çš„ \cls{njuthesis-doc} æ–‡æ¡£ç±»ã€‚}
%
%    \begin{macrocode}
%&lt;*doc-cls&gt;
%&lt;@@=njudoc&gt;
%    \end{macrocode}
%
%
%    \begin{macrocode}
\RequirePackage { l3keys2e }
%    \end{macrocode}
%
% \subsubsection{é€‰é¡¹}
%
%    \begin{macrocode}
\keys_define:nn { njudoc }
  {
    codehigh .bool_gset:N = \g_@@_codehigh_bool,
    codehigh   .initial:n = false
  }
\ProcessKeysOptions { njudoc }
%    \end{macrocode}
%
% \subsubsection{è½½å…¥å®åŒ…}
%
%    \begin{macrocode}
\PassOptionsToPackage { fontset = fandol } { ctex       }
\PassOptionsToPackage { firstpage = true } { background }
%    \end{macrocode}
%
% è½½å…¥åŸºç¡€æ–‡æ¡£ç±»ã€‚
%    \begin{macrocode}
\LoadClass { ctxdoc }
%    \end{macrocode}
%
% è½½å…¥å®åŒ…ã€‚
%    \begin{macrocode}
\RequirePackage
  {
    background,
    codehigh,
    listings,
    njuvisual,
    tabularray,
    unicode-math,
    zhlineskip
  }
\sys_if_engine_xetex:TF
  {
    \RequirePackage { xeCJKfntef }
    \renewcommand\emph[1]{\CJKunderdot[textformat=\itshape]{#1}}
  }
  {
    \RequirePackage { lua-ul }
    \NewDocumentCommand \CJKunderline { o m } { \underLine {#1} }
    \NewDocumentCommand \CJKunderdot  { o m } { \underLine {#1} }
    \NewDocumentCommand \CJKsout      { o m }
      { \textcolor { black!50 } {#1} }
  }
%    \end{macrocode}
%
% å¤„ç†ä¸¢å¤±çš„å±•å¼€ç±»åž‹å®žçŽ°å‘åŽå…¼å®¹ã€‚åœ¨2023å¹´11æœˆï¼Œ\cls{l3doc} è¿›è¡Œäº†ä¸€ç³»åˆ—å±•å¼€ç±»åž‹ä¿®æ”¹ã€‚
% è¯¦è§ \href{https://github.com/CTeX-org/ctex-kit/pull/678}{\texttt{CTeX-org/ctex-kit\#678}}
% ä»¥åŠ \href{https://github.com/CTeX-org/ctex-kit/pull/700}{\texttt{CTeX-org/ctex-kit\#700}}ã€‚
%    \begin{macrocode}
\cs_generate_variant:Nn \__codedoc_get_hyper_target:nN { x }
\cs_generate_variant:Nn \tl_replace_all:Nnn { No }
%    \end{macrocode}
%
% å¤„ç†å‘åŽå…¼å®¹ã€‚è§ \href{https://github.com/CTeX-org/ctex-kit/pull/703}{\texttt{CTeX-org/ctex-kit\#703}}ã€‚
%    \begin{macrocode}
\cs_if_exist:NF \__codedoc_macroname_prefix:o
  {
    \cs_new_protected:Npn \__codedoc_macroname_prefix:n #1
      {
        \__codedoc_if_macro_internal:nTF {#1}
          { \__codedoc_typeset_aux:n {#1} } {#1}
      }
    \cs_generate_variant:Nn \__codedoc_macroname_prefix:n { o }
    \cs_new_protected:Npn \__codedoc_macroname_suffix:N #1
      { \bool_if:NTF #1 { \__codedoc_typeset_TF: } { } }
  }
%    \end{macrocode}
%
% \subsubsection{æ‚é¡¹}
%
% å°é¢èƒŒæ™¯å›¾æ¡ˆã€‚
%    \begin{macrocode}
\backgroundsetup{
  contents={\njuemblem[white!85!gray]{22cm}{!}},
  scale=1, angle=0, hshift=-4cm
}
%    \end{macrocode}
%
% æ–‡æ¡£å‘½ä»¤ã€‚
%    \begin{macrocode}
\definecolor{tpblue}{HTML}{495A80}
\newcommand\tpbutton[1]{\textcolor{tpblue}{\bfseries #1}}
\newcommand\tikzlogo{Ti\emph{k}Z}
\newcommand\OPT[1]{\textcolor{njuyellow}{\bfseries#1}}
%    \end{macrocode}
%
% \pkg{hyperref} è®¾ç½®ã€‚
%    \begin{macrocode}
\hypersetup{
  pdftitle  = {
    The~ njuthesis~ class~ -~
    LaTeX~ thesis~ template~ for~ Nanjing~ University},
  citecolor = njublue,
  linkcolor = njuviolet,
  urlcolor  = njumagenta}
%    \end{macrocode}
%
% \pkg{tabularray} è®¾ç½®ã€‚
%    \begin{macrocode}
\UseTblrLibrary{booktabs,siunitx}
\DefTblrTemplate{caption-tag}{default}{è¡¨\hspace{0.25em}\thetable}
\SetTblrStyle{caption-tag}{font=\bfseries}
\SetTblrInner{row{1}={font=\bfseries}}
\SetTblrInner[talltblr]{row{1}={font=\bfseries}}
\DefTblrTemplate{caption-sep}{default}{\quad}
%    \end{macrocode}
%
% \pkg{tabularray} è¡¨æ&nbsp;¼æ&nbsp;‡ç­¾ç®€å†™ã€‚
%    \begin{macrocode}
\def\TA{\TblrNote{a}}
\def\TB{\TblrNote{b}}
\def\TC{\TblrNote{c}}
\def\TD{\TblrNote{d}}
\def\TE{\TblrNote{e}}
%    \end{macrocode}
%
%
% \TeX{} ç›¸å…³çš„åç§°ç®€å†™ã€‚
%    \begin{macrocode}
\def\TL{\TeX~Live}
\def\MacTeX{Mac\TeX}
\def\biber{\hologo{biber}}
\def\LaTeXe{\hologo{LaTeX2e}}
%    \end{macrocode}
%
% \pkg{zhlineskip} è®¾ç½®ã€‚
%    \begin{macrocode}
\SetTextEnvironmentSinglespace{1.112}
\SetMathEnvironmentSinglespace{1.112}
%    \end{macrocode}
%
% \subsubsection{å­—ä½“è®¾ç½®}
%
%    \begin{macrocode}
\setmainfont { texgyretermes }
  [
    Extension      = .otf,
    UprightFont    = *-regular,
    BoldFont       = *-bold,
    ItalicFont     = *-italic,
    BoldItalicFont = *-bolditalic
  ]
%    \end{macrocode}
%
% éœ€è¦ \pkg{lexend}ã€‚
%    \begin{macrocode}
\setsansfont{LexendDeca}
%    \end{macrocode}
%
% Iosevkaã€‚
%    \begin{macrocode}
\fontspec_font_if_exist:nT { Iosevka }
  {
    \setmonofont { Iosevka }
      [
        UprightFont = *~Light,
        ItalicFont  = *~Light~Italic,
        BoldFont    = *~Semibold
      ]
  }
%    \end{macrocode}
%
% æ€æºå®‹ä½“ã€‚
%    \begin{macrocode}
\fontspec_font_if_exist:nT { Source~ Han~ Serif~ SC }
  {
    \setCJKmainfont{  Source~ Han~ Serif~ SC }
      [
        UprightFont = *~SemiBold,
        ItalicFont  = *~Bold,
        BoldFont    = *~Heavy,
        Language    = Chinese~Simplified
      ]
  }
%    \end{macrocode}
%
%    \begin{macrocode}
\setCJKsansfont { FandolHei-Regular }
  [
    Extension = .otf,
    BoldFont  = FandolHei-Bold
  ]
\setCJKmonofont { FandolFang-Regular }
  [ Extension = .otf ]
%    \end{macrocode}
%
% XITSã€‚
%    \begin{macrocode}
\setmathfont{XITSMath-Regular}[
  BoldFont = XITSMath-Bold,
  Extension = .otf]
%    \end{macrocode}
%
% \pkg{listings} è®¾ç½®ã€‚
%    \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{njuviolet},
    commentstyle    = \itshape\color{white!50!gray},
    stringstyle     = \color{nju-chem-red},
    backgroundcolor = \color{white!95!gray}
  }
\lstdefinestyle{style@shell}
  {
    style      = style@base,
    rulecolor  = \color{njumagenta},
    language   = bash,
    alsoletter = {-},
    emphstyle  = \color{nju-cs-green}
  }
\lstdefinestyle{style@latex}
  {
    style      = style@base,
    rulecolor  = \color{njublue},
    language   = [LaTeX]TeX,
    alsoletter = {*, -, .},
    texcsstyle = *\color{njuviolet},
    emphstyle  = [1]\color{nju-ai-orange},
    emphstyle  = [2]\color{nju-cs-green},
    emphstyle  = [3]\bfseries\color{njuyellow}
  }
%    \end{macrocode}
%
% ä»£ç&nbsp;æ¡†çŽ¯å¢ƒã€‚
%    \begin{macrocode}
\lstnewenvironment{shellexample}[1][]{%
  \lstset{style=style@shell, #1}}{}
\lstnewenvironment{latexexample}[1][]{%
  \lstset{style=style@latex, #1}}{}
%    \end{macrocode}
%
%
% \subsubsection{æ&nbsp;‡ç­¾é¢œè‰²è®¾ç½®}
%
% æˆ‘ä»¬å¯¹æ¯ä¸ª guard è¿›è¡Œç‰¹å®šçš„é¢œè‰²æ&nbsp;‡è®°ï¼Œ
% è€Œä¸æ˜¯ \cls{ctxdoc} ä¸­ä½¿ç”¨æ·±æµ…è¡¨æ˜ŽåµŒå¥—å…³ç³»ã€‚
%
%    \begin{macrocode}
\colorlet    {    at@guard } { njuviolet }
\definecolor { angle@guard } { gray } { 0.7 }
\definecolor {  star@guard } { rgb  } { 0.8 , 0 , 0 }
\definecolor { u@guard } { HTML } { 5463FF }
\definecolor { g@guard } { HTML } { 2B7A0B }
\definecolor { p@guard } { HTML } { FF1818 }
\definecolor { c@guard } { HTML } { FFC300 }
%    \end{macrocode}
%
% \begin{variable}{\c@@_module_color_prop}
% å­˜å‚¨ guard åç§°å’Œå¯¹åº”çš„é¢œè‰²ã€‚
%    \begin{macrocode}
\prop_const_from_keyval:Nn \c@@_module_color_prop
  {
    def-u = u@guard,
    def-g = g@guard,
    def-p = p@guard
  }
%    \end{macrocode}
% \end{variable}
%
% \begin{macro}{\@@_set_module_color:n}
%
%    \begin{macrocode}
\cs_new:Npn \@@_set_module_color:Nn #1#2
  {
    \prop_get:NnNF \c@@_module_color_prop {#2} #1
      { \tl_set:Nn #1 { c@guard } }
    \exp_args:NV \color #1 #2
  }
\cs_new:Npn \@@_set_module_color:n
  { \@@_set_module_color:Nn \l_tmpa_tl }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_module_angle:Nn}
% ç”Ÿæˆå®Œæ•´çš„å¸¦é¢œè‰²çš„ guard æ&nbsp;‡ç­¾ã€‚
%    \begin{macrocode}
\cs_new_protected:Npn \@@_module_angle:Nn #1#2
  {
    \group_begin: \color { angle@guard }    \ttfamily \textlangle \group_end:
    \group_begin: \sffamily #2 \group_end:
    \group_begin: \color { angle@guard } #1 \ttfamily \textrangle \group_end:
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\__ctxdoc_module_angle:n}
% è¡¥ä¸ã€‚
%    \begin{macrocode}
\cs_set:Npn \__ctxdoc_module_angle:n
  { \@@_module_angle:Nn \c_empty_tl }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_colored_module_angle:NN}
%
%    \begin{macrocode}
\cs_new_protected:Npn \@@_colored_module_angle:NN #1#2
  {
    \seq_clear:N #2
    \seq_map_inline:Nn #1
      {
        \seq_gput_right:Nn #2
          { \@@_set_module_color:n {##1} }
      }
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_print_module:n}
%
%    \begin{macrocode}
\cs_new_protected:Npn \@@_print_module:n #1
  {
    \@@_colored_module_angle:NN \l_tmpa_seq \l_tmpb_seq
    \bool_lazy_or:nnTF
      { \str_if_empty_p:n {#1} }
      { \int_compare_p:n { \seq_count:N \l_tmpb_seq = 1 } }
      {
        \str_clear:N \l_tmpa_str
        \str_clear:N \l_tmpb_str
      }
      {
        \str_set:Nn  \l_tmpa_str { ( }
        \str_set:Nn  \l_tmpb_str { ) }
      }
    \@@_module_angle:Nn \l_tmpb_str
      {
        \color { star@guard  } #1
        \color { angle@guard } \l_tmpa_str
        \seq_use:Nn \l_tmpb_seq
          { \color { angle@guard } \orbar }
      }
  }
%    \end{macrocode}
% \end{macro}
%
%
% \begin{macro}{\@@_split_pm:n,\@@_split_pm:V}
% é€šè¿‡ç«–çº¿åˆ†å‰² guard æ&nbsp;‡ç­¾ã€‚
%    \begin{macrocode}
\cs_new:Npn \@@_split_pm:n
  { \seq_set_split:Nnn \l_tmpa_seq { | } }
\cs_generate_variant:Nn \@@_split_pm:n { V }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_split_m:n}
%
%    \begin{macrocode}
\cs_new_protected_nopar:Npn \@@_split_m:n #1
  {
    \tl_set:Nn \l_tmpa_str {#1}
    \clist_map_inline:nn { *, /, (, ) }
      { \str_remove_all:Nn \l_tmpa_str {##1} }
    \@@_split_pm:V \l_tmpa_str
  }
%    \end{macrocode}
% \end{macro}
%
%
%    \begin{macrocode}
\group_begin:
  \char_set_catcode_active:N \&gt;
%    \end{macrocode}
%
% \begin{macro}{\__ctxdoc_module_star:w}
%    \begin{macrocode}
  \cs_gset_protected:Npn \__ctxdoc_module_star:w #1 &gt; #2 \q_stop
    {
      \__ctxdoc_output_module:nn
        { \@@_split_m:n {#1} }
        { \__ctxdoc_module_push:n { \@@_print_module:n { * } } }
      \__ctxdoc_output_line:n {#2}
      \__ctxdoc_star_format:
    }
%    \end{macrocode}
% \end{macro}
%
%
% \begin{macro}{\__ctxdoc_module_slash:w}
%    \begin{macrocode}
  \cs_gset_protected:Npn \__ctxdoc_module_slash:w #1 &gt; #2 \q_stop
    {
      \__ctxdoc_output_module:nn
        { \@@_split_m:n {#1} }
        { \__ctxdoc_module_pop:n { \@@_print_module:n { / } } }
      \__ctxdoc_output_line:n {#2}
      \__ctxdoc_slash_format:
    }
%    \end{macrocode}
% \end{macro}
%
%
% \begin{macro}{\__ctxdoc_module_pm:w}
%    \begin{macrocode}
  \cs_gset_protected:Npn \__ctxdoc_module_pm:w #1 &gt; #2 \q_stop
    {
      \tex_noindent:D
      \hbox_overlap_left:n
        {
          \__ctxdoc_output_module:nn
            { \@@_split_pm:n {#1} }
            { \@@_print_module:n { } }
          \skip_horizontal:n { \leftskip + \smallskipamount }
        }
      \group_begin:
        \__ctxdoc_pm_format:
        \__ctxdoc_output_line:n {#2}
      \group_end:
    }
\group_end:
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\grd,\sgrd,\pgrd}
% åœ¨æ‰‹å†Œä¸­ç”Ÿæˆå¸¦é¢œè‰²çš„ guard æ&nbsp;‡è®°ã€‚
%    \begin{macrocode}
\NewDocumentCommand \grd { m }
  { \__ctxdoc_module_angle:n { \color { njuviolet } #1 } }
\NewDocumentCommand \sgrd { m }
  { \__ctxdoc_module_angle:n { \color { star@guard } * \color{ c@guard } #1 } }
\NewDocumentCommand \pgrd { m }
  { \__ctxdoc_module_angle:n { \color { #1 @guard } def- #1 } }
%    \end{macrocode}
% \end{macro}
%
% \subsubsection{è¯­æ³•é«˜äº®}
%
% \begin{macro}{\@@_output_line:}
% \cls{ctxdoc} å°† \file{.dtx} æ–‡ä»¶ä¸­è¯»å–çš„ä»£ç&nbsp;è¡Œå­˜å‚¨åœ¨
% \cs{l__ctxdoc_verbatim_line_tl}ï¼Œæˆ‘ä»¬ä½¿ç”¨ \pkg{codehigh} æä¾›çš„å†…éƒ¨å‡½æ•°
% å°†å…¶è½¬åŒ–ä¸ºå¸¦æœ‰è¯­æ³•é«˜äº®çš„æ&nbsp;¼å¼å¹¶è¾“å‡ºã€‚é»˜è®¤è¯»å–çš„ä»£ç&nbsp;è¡Œå°¾å¸¦æœ‰ |^^M|ï¼Œ
% ç›´æŽ¥è¾“å…¥é«˜äº®å‡½æ•°ä¼šå¯¼è‡´ä»£ç&nbsp;å¿«å°¾éƒ¨æœ‰é¢å¤–ç©ºè¡Œï¼Œéœ€è¦æ‰‹åŠ¨åˆ&nbsp;åŽ»ã€‚
%    \begin{macrocode}
\cs_generate_variant:Nn \tl_remove_once:Nn { NV }
\cs_set_protected_nopar:Npn \@@_output_line:N #1
  {
    \tex_noindent:D
    \__ctxdoc_replace_at_at:N #1
    \tl_remove_once:NV #1 \c__ctxdoc_active_cr_tl
    \__codehigh_parse_code:nN { latex / latex3 } #1
    \tex_par:D
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\__ctxdoc_output_line:}
% åœ¨ \XeTeX{} å¼•æ“Žä¸‹ï¼Œ\pkg{codehigh} è°ƒç”¨çš„ \pkg{l3regex} æ¨¡å—æœ‰ä¸¥é‡çš„æ€§èƒ½é—®é¢˜ã€‚
% æˆ‘ä»¬ä»…ä»…åœ¨éœ€è¦æ—¶å¯ç”¨é«˜äº®ã€‚
%    \begin{macrocode}
\bool_if:NT \g_@@_codehigh_bool
  {
    \cs_set:Npn \__ctxdoc_output_line:
      { \@@_output_line:N \l__ctxdoc_verbatim_line_tl }
  }
%    \end{macrocode}
% \end{macro}
%
%
%    \begin{macrocode}
%&lt;/doc-cls&gt;
%    \end{macrocode}
%
% \end{implementation}
%
</pre></body></html>