<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.1 2024-04-22 00: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.1 \quad 2024-04-22}
%
% \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}{���������������������������������}
% \changes{v0.7}{2021/09/12}{��� \cls{njuthesis} ��������� CTAN���}
% \changes{v0.8}{2021/09/12}{������������������������������������������}
% \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}{���������������������������������������}
% \changes{v0.12}{2021/11/28}{��������������� \pkg{njuvisual} ���������}
% \changes{v0.12}{2021/11/29}{������������������������������������}
% \changes{v0.12}{2021/11/30}{������������������������������������}
% \changes{v0.12}{2021/12/06}{���������������������������������������������}
% \changes{v0.13}{2021/12/12}{������������������������}
% \changes{v0.13}{2021/12/15}{������2022���������������������������������������������������}
% \changes{v0.13}{2021/12/16}{��������������� \pkg{listings} ���������}
% \changes{v0.14}{2022/01/13}{��������������������������� \TeX{} ���������}
% \changes{v0.16}{2022/03/01}{������������������������������������������}
% \changes{v0.19}{2022/05/23}{���������������������������������������������������}
% \changes{v0.19}{2022/05/23}{���������������������������������������������������}
% \changes{v0.20}{2022/06/08}{������������������������������������}
% \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}{������ \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} ���������������������������������������������������������������������������������������������
% \LaTeX ���������������������������������������������������������������������������������������������������������������
% ������������������������������������������������������������������������������������������������������
% ������������������ \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 ��������������������������������������������������������� PDF ���������
%   \item ���������������������������������������������������������
%         ���������������������������������������������������������������
%   \item ������������������������������������������������������������������������������������
% \end{enumerate}
%
% ��������� \href{https://git.nju.edu.cn/nju-lug/lug-introduction}
%   {Linux ���������}���������������������������
% \end{abstract}
%
% \clearpage
%
%
% \setcounter{tocdepth}{4}
% \tableofcontents
%
% \clearpage
%
%
% \begin{documentation}
%
% \section{������������}
%
% \cls{njuthesis}��������������������������������������������������������������� Linux
% ������������������������������������������������������������������������ \LaTeX ���������
%
% ���������������������������������������������������������
% ���������������������������2024���������������������������������������������������\cite{nju-bachelor-2024}���
% ���������������������������������������������������������������\cite{nju-graduate-2023}���
% ������������������������������������������������������������\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{���������������������������}���������������������������
% ���������������������������������������������������������������������������������������������������
% ���������������������������������������������������������������������������������������������������
% ���������������������������������������������������������������������������������������������������
% ��������������� \cls{njuthesis} ������������������������������
%
% \subparagraph{������������������������������������}
% ������������������������������������\emph{������������������}������������������������������������
% \emph{���������������������������������������������}���������������������������������������������
% ������\href{https://itsc.nju.edu.cn}{���������������������������������}������������
% ������������\href{mailto:my@yaoge123.cn}{������������}���������\emph{������}������
% ��������������������������������������������������������������� |XeLaTeX|���
% ���������\emph{������������������}���������������������������������������������������������������
% ������������������\emph{������ Word ���������������������}���������������������������
% \TeX{} ������������������������������������������������
%
% \subparagraph{��������������� \LaTeX ���������������}
% ���������������������������������������\emph{���������������������������}������
% ���������������������������������������������������������������������������������������
%
%
% \subsection{������������}
%
% ��������������������������������������������������������������������� 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 ������������\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}���������������������������
%        NJU Thesis 2018���2018���\cite{anyirao2018}
%   \item ������������\href{https://fengchendian.github.io/about.html}
%        {@FengChendian}���������������������������
%        NJU Thesis 2021���2021���\cite{yichenzhao2021}
% \end{enumerate}
% ������������������������������������������������������������������������������������������������������������������������������������
%
% ���������������������������������������������������������������������������������������������������������������������
% ��������� Linux User Group ������������������2021���������������������������������������������������������
% ��������� \cls{fduthesis}\cite{fduthesis}���\textsc{THuThesis}\cite{thuthesis} ���
% ��������������������������������������������������������� \LaTeX3 ���������������������������������
% ���������������������������������
%
% ���������������������������������������������
% \begin{itemize}
%   ^^A \item ���������
%   \item ������
%   ^^A \item ������
% \end{itemize}
%
%
% \subsection{������������}
%
% \LaTeX ���������������������������������������������������������������������������������������������
% ������\emph{������������������������������������}������������������������������������������������������������������
% ��������������������������������������������������� \LaTeX ���������������������������������������
% ������������������������������������������������������ \LaTeX3 ������������������������������������
% ���������������������������������������������������������������������������������������������������������������������
% ������������������������������\emph{������������������������}���������������������������������������������������
% ������������������
%
% ���������������������������������������������������������������������������������������������������������������������
% ���������������������
% \begin{description}
%   \item[\textit{lshort}] ���������������������������������������������������
%                          ������������������������\cite{lshort-zh-cn}���
%   \item[���\LaTeX ���������] ������������\cite{���������2013latex������}���
% \end{description}
%
%
% \subsection{���������������������}
%
% ��������������� \textsc{DocStrip} ���������������������������������\emph{������������}������������������
% ���������������������������������������������������������������������������\file{njuthesis.dtx} ������
% \cls{njuthesis} ���������������������������������������������������������������������������������������������
% ������������������������������������������������������������������ \TeX{} ���������������������������
% ������������������������������������������������������������������������
%
% ���������������������������������������������������������������������������������������������
% \pkg{pkg-example} ������������������������������ \file{file-example.xxx} ���������������������
% ��������� \opt{opt-example} ������������������������������ \env{env-example} ���������
%  |\begin{}|���|\end{}|������������������������������������������������������������������������������������
% ������������ {\color{njumagenta}$\blacksquare$} ���������������������������������������������
% {\color{njublue}$\blacksquare$} ��������� \LaTeX ������������
%
%
% \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������������������������������
% \href{https://ctan.org/pkg/njuvisual}{\pkg{njuvisual}} ���������������11���28������
% ������������������ \TeX{} Live ��� \MiKTeX ���������}���������������������������������������������
% ������������������������������������������������������������������������������������������������������������������
% \ref{subsubsec:standard-installation} ������������������������
%
% \subparagraph{GitHub ������}
% ������������������������������������������
% \href{https://github.com/nju-lug/NJUThesis}{Github������}���������������������������������
% ���������������������������������������������������������������������������������������������������
% \ref{subsubsec:on-the-fly-installation}���������������������������������������������������������
% ������ \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 ������}���������������������������������������������������������������\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}] ������������������������������������
%          ������������������������������������������������������������������������
%          ������������������������������������������
%     \item[\file{njuthesis-ctan-v*.zip}] ��������� CTAN ������������������
%          ������������������������
%   \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; ������������������                     \\
%     \file{njuthesis.ins}\TblrNote{a}   &amp; ���������������������                   \\
%     \file{njuthesis.pdf}               &amp; ���������������������������               \\
%     \file{njuthesis-doc.cls}           &amp; ������������������                     \\
%     \file{njuthesis-sample.bib}        &amp; ������������������������                 \\
%     \file{njuthesis-sample.tex}        &amp; ������������������������������������������������ \\
%     \file{njuthesis-graduate.def}      &amp; ���������������������������               \\
%     \file{njuthesis-postdoctoral.def}  &amp; ���������������������������               \\
%     \file{njuthesis-undergraduate.def} &amp; ���������������������������               \\
%     \file{README.md}                   &amp; ������������                         \\
%     \bottomrule
%   \end{talltblr}
% \end{table}
%
%
% \subsection{������������}
%
% \subsubsection{������������}
% \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}
% ��������������������������������������� \file{.cls} ���������
%
% ���������������CTAN ���������������������������������������������������������������������������������������������
% ���������������������������������\emph{������������������}������������������������������������
%
% {\color{red}|[!]|} ���������������������������\footnote{������������������������������������������ \TL
% ������������}������������������������������������������������������������������
% \begin{shellexample}[morekeywords={l3build},emph={install}]
%   l3build install
% \end{shellexample}
% ���������������������������������
%
%
% \subsubsection{������������}
% \label{subsubsec:on-the-fly-installation}
%
% ���������������������������������������������������������������������������������������������������������������������
% ��������������� \file{.cls} ��������������������������������������� Releases ������������
% \emph{���������������}���
%
% ���������������������������������������������������������������������������������������������������������������������
% ������������������������������Windows ��������������������������� \file{install-win.bat}������������
% ������������ macOS ��� Linux���������������������������������
% \begin{shellexample}[morekeywords={bash}]
%   bash install-unix.sh
% \end{shellexample}
% ������������������������ \file{mythesis/} ������������������������������������������������������������������
% ������������������������
%
% {\color{red}|[!]|} ���������������������������������������������������������������������������������������
% ������������������ \file{source} ���������������������������������������������������������������������������
% ������������������������������������������������ 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 ������������������������\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}}���������������������
% ��������������������������� 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 ������������������������������
%   \item ������������������������������������
% \end{enumerate}
% ���������������������������\emph{������������������������������������
% \file{njuthesis-sample.tex}}���������������������������������������������
% ������������������������ \file{njuthesis-sample.pdf}������������ PDF
% ������������������������������������������������������������������������������
%
% ������������������������������������������������������������ \file{.tex} ������������
% ��������������������������������������������� \cls{njuthesis} ��������� \XeTeX
% ��� \LuaTeX ��������������� \biber ������������������������������������������������������
% ������������������������������������������������������������������������������������������
% ������������������������������������������������������������ |latexmk -xelatex|���
%
%
% \subparagraph{������ \XeLaTeX}
% ��������� \XeTeX ���������������������������
%
% \begin{shellexample}[morekeywords={xelatex,biber}]
%   xelatex njuthesis-sample
%   biber njuthesis-sample
%   xelatex njuthesis-sample
%   xelatex njuthesis-sample
% \end{shellexample}
%
%
% \subparagraph{������ \LuaLaTeX}
% ��������� \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 ���������������������
% ��������������������������������������� |-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{������������ Windows ������ \MiKTeX���}���������������������
% \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}{��������������� \TeX ������������}
%
% ���������\href{https://tex.nju.edu.cn}{������ \TeX} ������
% \href{https://www.texpage.com}{TeXPage} ������������������
% ��� \href{https://sci.nju.edu.cn/}{eScience ������}������������������������������
% ������ \LaTeX ������������������������������������������������������������������������
%
%
% \subsubsection{������������}
%
% ������������������������ \ref{subsec:first-things-first} ���������������������������
% \cls{njuthesis} ������������������������
% ���������������������������������������������������������������������������������������������
%
% \begin{enumerate}
%   \item ������\href{https://tex.nju.edu.cn}{������ \TeX ������}
%   \item ������~\ref{subsubsec:on-the-fly-installation}~���������������������������
%   \item ���������������������������\tpbutton{������}������������������������ |XeLaTeX| ������ |LuaLaTeX|
%   \item ������ \file{njuthesis-sample.tex} ������������
%   \item ���������������\tpbutton{������}���������������������������
% \end{enumerate}
%
%
% \subsection{������������}
%
% ���������������������������������������������������������������������������������������������������
% ������������������������������������������������������������������������ Git ������������
% \file{CHANGELOG.md}��������������������������������������������������������������� \file{.tex}
% ������������\footnote{���������������������������������������������������������������������
% ������������������������������������������������������ \file{njuthesis-sample.tex}}���
% ������������������������������������������������������������������������������������ \file{.cls}
% ���������������������������������
%
% \subparagraph{���}
% ������ \file{njuthesis-user-v*.zip}������������������������ \file{.cls}���\file{.def}
% ������������������������
%
% \subparagraph{������}
% ������������������������ \TeX��������������������������������������������������������� CTAN
% ���������������������������������������������������������������������������������
% \begin{shellexample}[morekeywords={tlmgr},emph={update}]
%   tlmgr update --all
% \end{shellexample}
%
%
% \section{������������}
%
% \subsection{������������}
%
% ��������� \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}
%
% ���������������������������������������������������������������������5������ PDF ���������
% ���������������������������������������������������������������������������������������
% ���������������������������������������������������������
%
%
% \subsection{������������}
%
% ������������������ \tn{documentclass} ���������������������������������������������������
% ���������������������������������������������������������������������������������������������������������
%
% \subsubsection{������������}
% \begin{function}[added=2021-09-07,updated=2022-07-23]{type}
%   \begin{syntax}
%     \OPT{type} = &lt;(bachelor)|master|doctor|postdoc&gt;
%   \end{syntax}
% ���������������������������������������������������������������������������������������
% ������������������������������������������������������������������������������������������
% \end{function}
%
% \begin{function}[added=2021-09-07,updated=2022-07-01]{degree}
%   \begin{syntax}
%     \OPT{degree} = &lt;(academic)|professional&gt;
%   \end{syntax}
% ���������������������������������������������������������������������������������������������
% \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{������}���������������
% ���������������������������������������������������������������������������������������������
%
% \begin{function}[updated=2022-01-06]{decl-page}
%   \begin{syntax}
%     \OPT{decl-page} = &lt;\TFF&gt;
%   \end{syntax}
% ������������������������������������������������������
% \end{function}
%
% ���������������������������������������������������������������������������������������������������������
% ������������������������������\footnote{��������������������������� \pkg{unicode-math}���}���
% ���������������������������������������������������������
%
% ������������������������������������������������������������������������������ \pkg{pdfpages} ������
% \cite{pdfpages}��������������������������������������������� \tn{includepdf} ���������
% ���������������������������������������������������������������������������������������������������������
% \begin{latexexample}[moretexcs={\includepdf},emph={[2]pages}]
%   \includepdf[pages={1,{}}]{scanned.pdf}
%   % \setcounter{page}{1} % ���������������������������
% \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} ������������������
% ������������������������������������������������������������������������������������������������
% ���������������������������������������������������������������������������������������
% ���������������������������������������������������������������������������������������������
% ������������������������������������������������������������������������������
%
% \begin{function}[added=2021-12-15,updated=2024-03-19]{draft}
%   \begin{syntax}
%      &lt;\OPT{draft}&gt;
%   \end{syntax}
% ������������������������������������������
% \end{function}
%
% ������������������ \LaTeXe \cls{book} ������������������
% ������������������������������������������������������������������������������
% \begin{itemize}
%   \item ������������������������������������������������
%   \item ���������������������������������������������������
%   \item ������������������������������������������������������
%   \item ������������������������������������������������������������������
%   \item ������������������������������ PDF ������
% \end{itemize}
% ���������������������������������������������������������������������������������������������������
%
% ������������������������������������������������������������������������������ \pkg{listings}
% ������������������������������������������������������������������������������������������������
% ��������������������������������������������� \opt{final} ���������������������������
%
% \begin{function}[added=2022-04-19,updated=2024-04-19]{anonymous}
%   \begin{syntax}
%      &lt;\OPT{anonymous}&gt;
%   \end{syntax}
% ���������������������������
% \end{function}
%
% ������������������������������������������������������������������������
% \begin{itemize}
%   \item ������������������������ $\times\times\times$ ������
%   \item ���������������������������������
%   \item ������������������
%   \item ������������������������
%   \item ������������������������������������
% \end{itemize}
%
% ��������������������������������������������������� \ref{subsec:njusetup}~������������������������������������
%
% \begin{function}[added=2024-04-19]{anonymous-mode/no-nju}
%   \begin{syntax}
%      \OPT{no-nju} = &lt;\TFF&gt;
%   \end{syntax}
% ���������������������������������������������������������������������������������������������
% \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}] ������������������������������������������
%   \item[\normalfont\pkg{ntheorem}] ������������������������
%   \item[\normalfont\pkg{enumitem}] ���������������������������
%   \item[\normalfont\pkg{footmisc}] ���������������������
%   \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{������������}
%
% ���������������������������������������������������������������������������������
% ������������������������������������������������������������������������������
% ������������������������������������������������������������������������������������������
%
% \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}
%
% ���������������������������������������������������������������������������{\songti ������}���
% {\heiti ������}���{\kaishu ������}���{\fangsong ������}���������
% ���������������������������������\textup{serif}���������������������\textsf{sans-serif}���
% ������������������\texttt{monospace}������������
% ������������������������������������������������������������������������������������������������������
% \file{.ttf} ���������������������������������������������������������������������
% ������������������������������������������������������������������������������������������
% ������������������������������������������������������������������������������������
%
% ��������������������������������������������������� \opt{none}������������ \pkg{fontspec}
% ��������� \pkg{ctex} ������������������������������������
%
% \begin{function}[added=2022-07-02]{font-path}
%   \begin{syntax}
%     font-path = \Arg{���������}
%   \end{syntax}
% ���������������������
% \end{function}
%
% ���������������������������������������������������������������������������������������������������������������
% ���������������������������������������������������������������������������������������
% \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 ���������������},
%     note{b} = {������\href{\FD164}{���������������}���������������������������},
%     note{c} = {������\href{\FD131}{������������}������������������������������},
%     note{d} = {������������������������������������������ Google Noto ���������
%       ������������������������������������������������������������������ Adobe Source Han ������
%       ������������������������������ Simplified Chinese������������������ SC������������},
%     note{e} = {��������������������������������������������� Adobe
%       ������������������������������������������������������������������} ]
%     { 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}
%
% ���������������������������������������������������������������������������������������������������
% ������������������ \ref{tab:cjk-fontset} ������������������������������������������������
% ���������������������������������������������������������������������������������������������������
% ������������������������������������������������������������������������������ 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; ������������   &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} ������������������������������������������������������������
% ������������������������������������������������������������������������macOS ������ Times ������
% ������������ smcp ���������
% ������������������������������������ Windows ��������� Times New Roman
% \footnote{Times New Roman������ TimesNewRomanPSMT������ Windows ��� macOS
% ���������������������������������������������������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; ������������������������Fira ������  \\
%     \opt{garamond}    &amp; Garamond Math       &amp; Garamond ������              \\
%     \opt{lm}          &amp; Latin Modern Math   &amp; Computer Modern ������       \\
%     \opt{libertinus}  &amp; Libertinus Math     &amp;                            \\
%     \opt{newcm}       &amp; \NCM~Math           &amp; Computer Modern ������       \\
%     \opt{stix}        &amp; STIX Math           &amp; Times ������                 \\
%     \opt{bonum}       &amp; TG Bonum Math   \TA &amp;                            \\
%     \opt{dejavu}      &amp; TG DejaVu Math  \TA &amp; DejaVu ������                \\
%     \opt{pagella}     &amp; TG Pagella Math \TA &amp; Palatino ������              \\
%     \opt{schola}      &amp; TG Schola Math  \TA &amp;                            \\
%     \opt{termes}      &amp; TG Termes Math  \TA &amp; Times ������                 \\
%     \opt{xits}        &amp; XITS Math       \TB &amp; ������ STIX���Times ������      \\
%   \bottomrule
%   \end{talltblr}
% \end{table}
%
% \paragraph{������}
%
% ���������������������������������������������������������������������������������������������������������
% ���������������������������Fandol������������\emph{������������}���
% ��������������������� Times New Roman���XITS ��������� \TeX~Gyre������������\emph{������������}���
% ������������������������������������������������������������������������������������
%
%
% \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}
%
% ���������������������������������������\tn{njusetup} ������������������������������������
% ���������������������������������������������
%
% ���������������������������������������������������������������������������������������
% \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{������}
%     \OPT{title*} = \Arg{������������}
%   \end{syntax}
% ������������������������������������������������������������������\footnote{������������������15
% ������������������������������������45������������������������������ \ref{subsubsec:modify-length}
% ���������������������}���������������������������������������������������
% ������������������������������������������������������������������ |\\| ������
% \end{function}
%
% ������������������������������������������������������������������������������������������������
% ���������������������������������������������������������������������������
% \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}
% ������������������������������������������������������������������������
% ���������������������������������������������������������������������������������������������������������
% \end{function}
%
% \begin{function}[updated=2021-10-01]{info/grade}
%   \begin{syntax}
%     \OPT{grade} = \Arg{20XX}
%   \end{syntax}
% ���������������������������20XX������
% \end{function}
%
% \begin{function}[updated=2021-10-01]{info/student-id}
%   \begin{syntax}
%     \OPT{student-id} = \Arg{���������������}
%   \end{syntax}
% ������������������������������������������9������������������
% ������������������������������������������������������������������2022������������������������
% \end{function}
%
% \begin{function}[updated=2021-10-01]{info/author,info/author*}
%   \begin{syntax}
%     \OPT{author}  = \Arg{������������}
%     \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}
% ���������������������������������������������������������������������(������)������������
% ������������������������������������������������������������������������������������
% \end{function}
%
% \begin{function}[updated=2021-10-01]{info/field,info/field*}
%   \begin{syntax}
%     \OPT{field}  = \Arg{������}
%     \OPT{field*} = \Arg{������}
%   \end{syntax}
% ������������������������������������������������������������������������������������
% \end{function}
%
% \begin{function}[updated=2022-01-12]{info/supervisor,info/supervisor*}
%   \begin{syntax}
%     \OPT{supervisor}  = \Arg{������������,������}
%     \OPT{supervisor*} = \Arg{������������������}
%   \end{syntax}
% ��������������������������������� |,| ���������������������������������������������������������������������������
% \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}
% ������������������������������������������������������
% \end{function}
%
% \begin{function}[updated=2022-01-14]{info/submit-date}
%   \begin{syntax}
%     \OPT{submit-date} = \Arg{yyyy-mm-dd}
%   \end{syntax}
% ��������������������������������������������� ISO ������������\cite{gb-t-7408-2005}
% ���������������������������������������������������������������������������������������������������������������
% ������������������������������������������������������������������
% \end{function}
%
% \begin{function}[updated=2022-01-14]{info/defend-date}
%   \begin{syntax}
%     \OPT{defend-date} = \Arg{yyyy-mm-dd}
%   \end{syntax}
% ���������������������������������������������������������������
% \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}
% ������������������������������������������������������������������������������������������������������������
% ������������������������������������������������������������������������������������
% ���������������������������������������������������
% \end{function}
%
% \begin{function}[updated=2021-10-01]{info/clc,info/udc}
%   \begin{syntax}
%     \OPT{clc} = \Arg{���������������������}
%     \OPT{udc} = \Arg{���������������������}
%   \end{syntax}
% ���������������������������������\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}
% ������������������������������������������
% \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}
% ������������������������������������������������\CJKsout{���������������������������������}
% \end{function}
%
% \begin{function}[added=2023-04-24]{info/degree,info/degree*}
%   \begin{syntax}
%     \OPT{degree}  = \Arg{���������������}
%     \OPT{degree*} = \Arg{���������������}
%   \end{syntax}
% ��������������������������������������������������������������������������������������� \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        = {���������������\\���������������},
%       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}
%
% ���������������������������������������������������
%
% \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        = {���������������\\���������������\\���������������},
%       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     = {���~������},
%       reviewer     = {���~������,���~���������,���~���������������},
%       email        = {git+nju-lug-email-3104-issue-@yaoge123.cn}
%   }
% \end{latexexample}
%
% ���������������������������������������������������������������
%
% \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        = {���������������\\���������������},
%       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} ���������������������������������������������������������������������������
%   ������������������������������
% \end{function}
%
% \begin{function}{\chaptermark,\sectionmark}
%   \begin{syntax}
%     \tn{chapter}\oarg{������������������������}\marg{������������������}
%     \tn{sectionmark}\marg{���������������������������}
%     \tn{section}\oarg{������������������������}\marg{������������������}
%     \tn{sectionmark}\marg{���������������������}
%   \end{syntax}
% ���������������������������������������������������������������������������
% \end{function}
%
%
% \subsubsection{������}
%
% ��������������������������������������������������������� \opt{plain} ���������������������
% ������������������������������������������������������������������������ \opt{headings} ���������
% ���������������������������������������������������������������������������������������������
% ���������������������������������������������������������������������������������������������������������������
%
% ������������������������������������������������������������������������������������������������������������
%
% \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}
% ������������������������������������������������������������������������������������������
% \end{function}
%
% ������������������������������������������������������������������������ \tn{fancyhead} ���
% \tn{fancyfoot} ������������������������������������������������������������������������������
% ���������������\opt{L}������������\opt{C}������������\opt{R}������
% ���������������������������������������������������\opt{O}���������������������\opt{E}������
% ��������������������� \pkg{fancyhdr} ������������
%
% ������������������������������������������������������������������������������������������
% ���������������������������������������������������������������������������������������
% ���������������������������������������������
% \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} ������������������������������������������������������������������������
% ���������������������������������������������������������������\footnote{������������������������
% ��������� GitHub ������������}������������������������������������������������������
%
% \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}
%
% \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}
% ��������������������������������������������������������� \opt{pifont} ���������������������������
% ���������������������������������������������������������������10������������������ \opt{circled} ��� \opt{circled*}
% ������������������������������������������������������������������������������������������������������������������������������
% \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}
%
% ��������������������������� \pkg{footmisc}��������������������� \LaTeX ������������������
% ��������������� \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} ���������������������������������������������������
% ��������� \pkg{amsfonts}���\pkg{amssymb}���\pkg{bm}
% \footnote{\url{https://tex.stackexchange.com/q/528831/}}
% ���\pkg{upgreek} ���������������������������������������������������������
% ��������������������������������������� \tn{symbf}���
% ��������������������� \pkg{unicode-math} ���������
%
% ������������������������������������������������ \ref{subsubsec:optional-pkg}
% ������������������������������������\footnote{������������������������������������������������}
%
% ��������������������������������������� GB/T 3102--93���������������������������
% ������������������������\cite{gb-3102-93}������������������������ ISO 31-11:1992���
% \footnote{������������������ ISO 80000-2:2019���}���
% ��������� \TeX{} ������������������������������AMS������������������������������
%
% \begin{function}[added=2022-07-31]{math/style}
%   \begin{syntax}
%     \OPT{style} = &lt;TeX|ISO|(GB)&gt;
%   \end{syntax}
% ���������������������
% \end{function}
%
% ��������������������� \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}
%
% ������������������������������������������
%
% \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} ���������������������\opt{centered}������������������������������������������
% \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{������������������������������������������������}
%
% ���������������������������������������������������
%
% \begin{function}[added=2022-04-21]{theorem/style}
%   \begin{syntax}
%     \OPT{style} = &lt;(plain)|break|change|margin|empty|...&gt;
%   \end{syntax}
% ������������������������������ \tn{theoremstyle}\marg{������������}���
% \end{function}
%
% \begin{function}[added=2022-04-21]{theorem/header-font}
%   \begin{syntax}
%     \OPT{header-font} = \meta{������������������}
%   \end{syntax}
% ������������������������������������ \tn{theoremheaderfont}\marg{������}���
% \end{function}
%
% \begin{function}[added=2022-04-21]{theorem/body-font}
%   \begin{syntax}
%     \OPT{body-font} = \meta{������������������}
%   \end{syntax}
% ������������������������������������ \tn{theorembodyfont}\marg{������}���
% \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{���������,������������} \marg{���������},...\}
%   \end{syntax}
% ������������������������������������������������ \meta{������������} ������������\emph{������}������
% ���������������������\emph{������}������������������������������������������������������������������������
% ���\emph{������������������������}������������������������������������������������������������
% \end{function}
%
% \opt{theorem/type} ���������������������������������~\ref{tab:mathenv} ���������
% ���������������������������������������������������������������������
%
% \begin{table}[htbp]
%   \centering
%   \begin{talltblr} [
%       caption = {���������������������������},
%       label   = {tab:mathenv},
%       note{a} = {������������������������������������������������������������������������} ]
%     { colspec = {cc|cc} }
%     \toprule
%       ������       &amp; ������     &amp; ������       &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} ������������������������������������������������������������������
% ������������������������������ \opt{theorem/type} ���������������������
%
% ���������������������������������������������������������������������������������������
% \env{proof}������������������������������������������������������������������������������������
% ������������������ \env{exercise} ��� \env{solution} ������������������������������������������
%
% \begin{latexexample}[moretexcs={\njusetup,\normalfont},
%   emph={[2]theorem},emph={[3]define,body-font,type}]
%   \njusetup[theorem]{
%       share-counter = true ,
%       define ,
%       body-font   = \normalfont ,
%       type        = {
%           { {exercise} {������} },
%           { {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}
% ���������������������������������������������������������������������������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} ������������������������������������������������
% ������������ |biber| ������������������������������������������������������������������
% \ref{subsubsec:compileseq} ������������������������������������������������������
%
% ��������������������������������������������������������� \hologo{BibTeX}������������������������
% \ref{subsubsec:optional-pkg} ������������������������������������������������������
% ������������ \pkg{gbt7714} ���������������������������������������������
%
% \subsubsection{������}
%
% \begin{function}[added=2021-12-19]{bib/style}
%   \begin{syntax}
%     \OPT{style} = &lt;(numeric)|author-year|\meta{���������������}&gt;
%   \end{syntax}
% ������������������������������������������ \opt{numeric} ���������-������������ \opt{author-year}���
% ��������������������������� \pkg{biblatex} ������������������������������������
% \end{function}
%
% ���������������������������������������������������������������������������������������������
% ���������������������������������������������������������������\cite{gb-t-7714-2015}���
% ���������������������������������������������������������������������
% \begin{description}
%   \item[���������������] ������������������������������������������������������������������������
%                     ������������������������������������������������������������������������
%                     ���������������������������������������������������������������������������
%   \item[������-������������] ���������������������������������-���������������������������������
%                        ���������������������������������������������������������"()"������
%                        ���������������������������-���������������������������������������
%                        ���������������������������������������������������������������
% \end{description}
%
% ���������������������������������������������������������������������������������������������
% ���������\cite{nju-bachelor-2023}���������������������������������������������������������������
%
% \begin{function}[added=2022-02-15]{bib/option}
%   \begin{syntax}
%     \OPT{option} = \meta{������������}
%   \end{syntax}
% ��������� \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}
% ��������������������������������������� \pkg{biblatex} ������������������������������������
% ���������������������������������������������������������������������������������������������������
% ������������������������������������������������������
% \end{function}
%
% ���������������������������������������������������
% ������ \opt{bib/option} ���������������������������������������������������������
% ���������������������������������������������������������������������������
% \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}
%
% ���������������������������������������������������������������������
%
% ������������������������������������������������������������������������������������������
% ��������������������� \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{������}\marg{������}
%   \end{syntax}
% ���������������������������������
% \end{function}
%
% ������������ \tn{cite} ���������������������������������������������������������������������
% ���������������������������������������������������������������������������������
% ��������� \ref{tab:numeric-style} ������ \ref{tab:author-year-style}���
%
% \begin{table}[ht]
%   \centering
%   \begin{talltblr} [
%       caption = {���������������������������������},
%       label   = {tab:numeric-style} ]
%     { colspec = {cll} }
%     \toprule
%       ������������ &amp; ������               &amp;  ������������                  \\
%     \midrule
%       ������������ &amp; \tn{cite}          &amp; ���������������������             \\
%       ������������ &amp; \tn{parencite}     &amp; ������������������������           \\
%       ������������ &amp; \tn{cite}          &amp; ��������������������������������������� \\
%       ������������ &amp; \tn{pagescite}     &amp; ���������������������             \\
%       ������������ &amp; \tn{textcite}      &amp; ���������������������������������     \\
%       ������������ &amp; \tn{authornumcite} &amp; ������������������������������       \\
%       ������������ &amp; \tn{footfullcite}  &amp; ������������                   \\
%     \bottomrule
%   \end{talltblr}
% \end{table}
%
% \begin{table}[ht]
%   \centering
%   \begin{talltblr} [
%       caption = {������-������������������������������},
%       label   = {tab:author-year-style},
%       note{a} = {��������������� \tn{parencite} ��������������� \tn{cite}���} ]
%     { colspec = {cll} }
%     \toprule
%       ������������       &amp; ������               &amp; ������������                       \\
%     \midrule
%       ������������       &amp; \tn{cite} \TA      &amp; ��������������������������������������������� \\
%       ������������       &amp; \tn{cite}          &amp; ������������                       \\
%       ������������       &amp; \tn{pagescite}     &amp; ������������������������������������������   \\
%       ������������       &amp; \tn{yearcite}      &amp; ������������������������               \\
%       ��������������������� &amp; \tn{yearpagescite} &amp; ���������������������������������������     \\
%       ������������       &amp; \tn{textcite}      &amp; ���������������������������������������     \\
%       ������������       &amp; \tn{footfullcite}  &amp; ������������                       \\
%     \bottomrule
%   \end{talltblr}
% \end{table}
%
%
% \subsubsection{������������}
%
% ���������������������������������������������������������������������������������������������������
%
% \subparagraph{������ EndNote}
%
% ������������������������������������������������������
% \href{https://itsc.nju.edu.cn/EndNote/list.htm}{EndNote}
% ������������������������������������������ 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}
%
% ������������������������������������������������������������������������������������
% ��������������� \opt{nl-cover}���\emph{������}���������������������������������������������
% ��������������� \opt{decl-page}������������������������������������������������������������������
% ���������������������������������������������������������������������
%
% \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}
% ������������������������������������
% \end{function}
%
% ���������������������������������������������������������������������������\emph{������������}������������������
% ������������������������������������������������������ \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}
% ������������������������������������������������������������������������������
% \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}
% ������������������������������������
% ������������������������\opt{strict}���������������������������������������
% \end{function}
%
% ��������������� Word ������������������������������������������
% ������������������������������������������������������������
% \begin{itemize}
%   \item \opt{strict}������������������������������������������������������
%         ������������������������������������������������������������
%         ������������������������������������������������������������������������
%   \item \opt{centered}���������������������������������������������
%   \item \opt{natural}������������������������������������������
%         ������������������������������������
% \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}
% ���������������������������������������������������
% \end{function}
%
% \begin{function}[added=2022-08-08]{tableofcontents/dotline}
%   \begin{syntax}
%     \OPT{dotline} = &lt;chapter|(section)&gt;
%   \end{syntax}
% ������������������������������������ \opt{chapter} ������������������������������������
% \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}
% ���������������������������������������������������������������������������������
% ��������������������������������������������������������������������� PDF ���������
% ���������������������������������������������������������������������������������
% \end{function}
%
% ������������������������������������������������������������������������������
% \begin{latexexample}[moretexcs={\njusetup},emph={[3]toc-entry},
%   emph={[2]tableofcontents,listoffigures,listoftables}]
%   \njusetup{
%       tableofcontents/toc-entry = true, % ���������������������������������
%       listoffigures/toc-entry   = false,
%       listoftables/toc-entry    = false
%   }
% \end{latexexample}
%
% ������������������������������������������\footnote{������������������������������������������������������
% \cite{gb-t-7713.1-2006}���������������������������������������������������������������������������������
% ������������������������������������������������}��������������������������� \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{������}\marg{������}
%   \end{syntax}
% ���������������������������������������������������������������������������������������
% ������������������������������������\Arg{������} ������������������ \tn{cite}���
% ���������������������������������������������������
% \end{function}
%
% ������������������������������������
% \begin{latexexample}[moretexcs={\njuchapter,\njupaperlist}]
%   \njuchapter{������������������������������������}
%   \njupaperlist[���������������������������������������������]{
%     Nemec1997-209-214,Chiani1998-2998-3008,Chiani1998a}
% \end{latexexample}
%
% ������������������������������������������������������������������������������������������������������������������������
% ������ \pkg{biblatex} ���������������������������������������������������������������������
% \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| ������������������������������������ \meta{������}|=|\meta{������}���
% ������������������������������������������������������������������������������\tn{njupaperlist}
% ��������� |thesisauthor| ������������������������������������������������������������������
%
% ���������������������������������������������������������������������������
% ������ \href{https://github.com/hushidong/biblatex-map}{bibmap}
% ��������������������������������������� \file{bibmapaddauthoran.py} ��� |fieldsource|
% ��������������������������������������������������� \file{.bib} ������������������������
% ��������������� \file{test.bib} ������������������������������������������������������������������
% ������������������������������������
%
% \begin{shellexample}[morekeywords={python},deletekeywords={test}]
%   python bibmap.py test.bib -m bibmapaddauthoran.py
% \end{shellexample}
%
%
% \subsection{������������}
%
% ���������������������������������������������������������������������������������������
% ���������������������������������������������������������������������������������
%
% \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}
%
% ���������������������������������������������������

% \begin{latexexample}[moretexcs={\njusetname}]
%   \njusetname{listoffigures}{������������}
%   \njusetname{listoftables}{������������}
% \end{latexexample}
%
% ������������������������������������������������������������������������������������
%
% \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}
%
% ������������������������������������������������������������������������
%
% \begin{latexexample}[moretexcs={\njusetlength}]
%   \njusetlength{crulewd}{330pt}
% \end{latexexample}
%
% \subsubsection{������}
% \label{subsubsec:modify-format}
%
% \begin{function}{\njusetformat}
%   \begin{syntax}
%     \tn{njusetformat}\marg{������}\marg{������}
%   \end{syntax}
% ������������������������������������������������������ \ref{subsubsec:constant-format} ������
% \end{function}
%
% ���������������������������������������������������������������
%
% \begin{latexexample}[moretexcs={\njusetformat,\zihao}]
%   \njusetformat{chapter}{\zihao{-2}\sffamily\centering}
% \end{latexexample}
%
% ������������������������������
%
% \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 ���������������
%   \njuname{4cm}{!}                             % ��������� 4cm ���������������������
%   \njuname*{4cm}{!}                            % ��������� 4cm ���������������������
%   \njuemblem[black]{!}{3cm}                    % ���������������
%   \njuemblem[department=dii]{!}{4cm}           % ������������������
%   \njuemblem[department=cs,color=blue]{!}{3cm} % ���������������������
% \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 ��������� OpenType ���������������
%   \item \pkg{footmisc}������������������
%   \item \pkg{enumitem}������������������������
%   \item \pkg{cleveref}������������������������������������
%   \item \pkg{biblatex} ��� \pkg{biblatex-gb7714-2015}������������������������������������������������
% \end{itemize}
%
% ���������������������������������������������������������������
% \begin{itemize}
%   \item \pkg{fandol}���\pkg{tex-gyre}���\pkg{tex-gyre-math}���\pkg{xits} ������
%         ���������������������
%   \item \pkg{emptypage}������������������������������������������������������������������
%   \item \pkg{circledtext} ��� \pkg{l3experimental}������������ \opt{footnote/circled}
%         ��� \opt{footnote/circled*} ������������������������������
%   \item \pkg{pifont}������������ \opt{footnote/pifont} ������������������������������
%   \item \pkg{tikz} ��� \pkg{njuvisual}���������������������������������������
%   \item \pkg{tabularray}���������������������������������������������������������
%   \item \pkg{xeCJKfntef} ��� \pkg{lua-ul}���������������������������������������������
% \end{itemize}
%
% ������������������������������������������������������������������������������������������
% \begin{itemize}
%   \item \pkg{natbib} ��� \pkg{gbt7714} ��� \hologo{BibTeX} ������������������������������
%   \item \pkg{bm} ���������������������������������������������������
%   \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*{���������������}
%
% \bibitem{gb-3100-93}
% ���������������������������������������������.
% \newblock \textit{���������������������������: GB 3100--93} [S].
% \newblock ������: ���������������������, 1993
%
% \bibitem{gb-3101-93}
% ���������������������������������������������.
% \newblock \textit{������������������������������������������: GB 3101--93} [S].
% \newblock ������: ���������������������, 1993
%
% \bibitem{gb-3102-93}
% ���������������������������������������������.
% \newblock \textit{���������������������������������������������: GB/T 3102--93} [S].
% \newblock ������: ���������������������, 1993
%
% \bibitem{gb-t-7408-2005}
% ���������������������������������������������.
% \newblock \textit{������������������������\quad ������������~ ������������������������: GB/T 7408--2005} [S].
% \newblock ������: ���������������������, 2005
%
% \bibitem{gb-t-7713.1-2006}
% ���������������������������������������������.
% \newblock \textit{������������������������: GB/T 7713.1--2006} [S].
% \newblock ������: ���������������������, 2006
%
% \bibitem{gb-t-7714-2015}
% ���������������������������������������������.
% \newblock \textit{���������������\quad ������������������������: GB/T 7714--2015} [S].
% \newblock ������: ���������������������, 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}
% ������������������������.
% \newblock \textit{���������������������������������������������������������} [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 ��������� biblatex ������������������} [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[���������������������]{language/chinese/ctex/ctex.pdf}
%
% \bibitem{circledtext}
% ������.
% \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[���������������������]{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[���������������������]{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}
% ���������.
% \newblock \textit{��������������������������������� \LaTeX ������} [EB/OL].
% \newblock (2016-06-01)
% \urlprefix\url{https://github.com/zhangchuheng123/NJUThesis}
%
% \bibitem{yanyanjiang2017}
% ���������.
% \newblock \textit{������������������ \hologo{LyX} ���������������������������} [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{������������}
% \changes{v0.10}{2021/09/26}{���������������������������������������}
%
% ��������������� \LaTeX3 ��������������������� \pkg{expl3} ���������
% ������������ \pkg{l3packages} ���������������������
%
% ������������������������������\sgrd{class}������������ ������ \pkg{DocStrip} ������
% ���guard������������������������������������������|*|���������|/|���������������������������������������
% ���������������|*|���������|/|������ guard ���������������������������������������������������������
% ��������������������� guard ���������������������������������������������
%
% ���������������������������������������\pgrd{u}���������������
% \file{njuthesis-undergraduate.def}������������������������������\pgrd{g}���
% ������������ \file{njuthesis-graduate.def}������������������������������\pgrd{p}���
% ������������ \file{njuthesis-postdoctoral.def}���
%
% ������������������ \textsf{@@} ��� guard���������������������������������������
% ������������������������������������������������������������������ \textsf{@@} ���������������������������������
% ���������������������������������\grd{@@=nju}���
%
% \subsection{������}
%
%    \begin{macrocode}
%&lt;*class&gt;
%&lt;@@=nju&gt;
%    \end{macrocode}
%
% \changes{v0.11}{2021/10/23}{���������������������������������������������}
% \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{������}}
% ������������������������������ \cs[no-index,replace=false]{\meta{���������}_@@_\meta{���}_\meta{������}_\meta{������}}
% ������������������������������������������������������|l| ���������������������|g| ���������������������|c| ���������
% ���������������������������������������������������������������������������������������������������������
%
% \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}
% ���������������������������������������������
%    \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}
% ������������������������������ |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}{���������������������������������������������}
% \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}}���
% ������������������������������������������ |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}
% ������������������������������������������
%    \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}
% ������������������������������������������������������
%    \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}
% ���������������������������������������������������������
%    \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 ������������������������
% \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 ������
%   \item ���������������������������
% \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 ������������������������������
%    \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} ������������������������������������������ \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}
% ������������������������������������������
% \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}
% ������������������������������������������
% \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 ���������������������������������������������
% ��������������������������� ISO 8601 ������������������ GB/T 7408--2005
% ��������������������������� ������������ ������������������������������
% \begin{arguments}
%   \item ������
%   \item ������
%   \item ������
% \end{arguments}
% ������������������������������ \pkg{zhnumber} ������������������������������������������������������������
% ������������������������������ |\zhnumsetup{time=Chinese}| ������������������������
% ��������������������������������������������������������� \meta{������������}~\meta{���},~\meta{���}���
% ��������������������� |w| ���������������������������������������������������������������������������
%    \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}{���������������������������������������������������������}
% ���������������������������������������������������������������������������������������������
%    \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}
% ���������������������������������������\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}{������������������������������������}
% ��������������������������������� \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}
% ���������������������������
%    \begin{macrocode}
    \@@_breakpar_print:nn { } { }
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_cover_entry_title:NNNN,\@@_cover_entry_title:NNN}
% ���������������������������������������������������������������������
% \begin{arguments}
%   \item ���������
%   \item ���������������������|dim| ���������
%   \item ���������������������|dim| ���������
%   \item ������������
% \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 ������������
%   \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 ������������
%   \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 ������������
%   \item ������������
% \end{arguments}
% |clist| ������������������������������������������������������ \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}
% ������������������������������������
% \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}{������������������������������������������������}
% ���������������������������������������������
% \begin{arguments}
%   \item ������
%   \item ���������
%   \item ������
% \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}
% ������������������������������������������������������������������ \opt{strict}
% ������ \opt{natural} ������������������������������������������������������������
% ���������������������������������������������������������������������������������������
% ���������������������������������������������������������������������������
%    \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} ������������������������������������������������������������������
%
% ������������������������������element���������������������page������������������������������
% ������������������������������������������������������������������������������������������������
% ���������������������������������������������������������������������������������������������������
% ��������������������������������������������������������������������������������� Instance
% ��������������� \pkg{xtemplate} ������������������������������������������������������������
% ���template���������������������������������\emph{������������}������������instance������
% ������������������������������������������������������������������������������
%
% ���������������������������������������������������
%    \begin{macrocode}
\DeclareObjectType { nju } { \c_zero_int }
%    \end{macrocode}
%
% \subsubsection{������������}
% \changes{v1.0}{2022/08/02}{������������������������������������������}
%
%    \begin{macrocode}
%&lt;@@=njuelem&gt;
%    \end{macrocode}
%
% \begin{macro}{\@@_align:}
% ���������������������������
% ���������������������������������������������������������������������������
% ������������������������������������������������
% \begin{description}
%   \item[\opt{content}] ���������������������������������������
%   \item[\opt{format}] ������������������������������
%   \item[\opt{bottom-skip}] ������������������������������������������
%   \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}
%
% ���������������������������������������������������������������
%    \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}{������������������������������������}
%
%    \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}
% ���������������������������
% ���������������������������������������������������������������������������
% \begin{description}
%   \item[\opt{element}] ������������������������������������������������
%   \item[\opt{prefix}] ������������������
%   \item[\opt{format}] ���������������������
%   \item[\opt{top-skip}] ���������������������������������������
%   \item[\opt{bottom-skip}] ���������������������������������������
%   \item[\opt{bm-text}] PDF ������������
%   \item[\opt{bm-name}] PDF ���������������
%   \item[\opt{bookmark}] ��������������������������������������������������� 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}
%
% ���������������������������
%    \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*} ������������������������������������������������������������
%    \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{} ���������������������������������������������
%    \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}{���������������������}
% ���������������������������������������������������
%    \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}
% ���������������������������������������������������������������������������������������
% \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}{���������������������������������������}
% ���������������������������������������������
%    \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}{���������������������������������������}
% \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}{������������������������������������}
% ������������������������\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}{���������������������������������}
% ���������������������
% ��� \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}{���������������������������������������}
% ���������������������
% \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}{������������������������������������}
% \changes{v0.19}{2022/05/11}{������������������������������������������}
% \changes{v0.20}{2022/05/25}{������������������������������������������}
% \changes{v0.20}{2022/05/25}{������������������������������������������������}
% ������������������������������������
%    \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}{���������������������������������}
% ������������������������������������������������������������������������
%    \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 ��������������������������������� |bool| ���������
%   \item ���������������������
%   \item ���������������������������������
%   \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}{���������������������������������}
% ��������������� \cls{ctexbook} ������������
%    \begin{macrocode}
\@@_pass_option:n
  {
    a4paper,
    UTF8,
    scheme = chinese,
%    \end{macrocode}
% ���������������������������������������������������������
%    \begin{macrocode}
    fontset    = none
  }
%    \end{macrocode}
%
% ������������������������
%    \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}���}
% ������������������
%    \begin{macrocode}
    booktabs,
    caption,
    graphicx,
  }
\@@_loadpkg_nthm:
%    \end{macrocode}
% \pkg{hyperref} ���������������������������������������������������������������
%    \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} ���������������������������������������������
%    \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} ������������������������������������
%    \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}{���������������������������}
% \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{���������}���\emph{���������}������������������������������������������������������������
% ������������������������������������������������������������������������������������������������������
% ������������������������������������������������������������������������������������������������������
% ���������������������������������������������������������������������������������������������������
%    \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}{������������������������������������������������������������������}
% \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}{������������������������������������}
% \changes{v0.14}{2022/01/14}{��������������������������������� |\\|���}
% ������������������������������ |\\| ������������������������������������|*|������������������������������������
%    \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}{������������������������������������}
% ������������������
%    \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}{������������������������������������������������������}
% \changes{v1.3}{2023/12/05}{���������������������������������������}
% ���������������������������������������������������������������������������������������������������
%    \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}{������������������������������}
% ���������������
%    \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}{���������������������������������������������������������}
% ������������������������������������������������������������������������ \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}
% ������������������������������������������
%    \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}
% ���������������������
%    \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}
% ���������������������
%    \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}
% ������������������������
%    \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} ������������������������������
%
% \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:}���
% ������������������ 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}{��������� 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
      { \l_@@_name_macofficefeature_clist } { times }
    \__fontspec_main_setsansfont:nn
      { \l_@@_name_macofficefeature_clist } { arial }
    \__fontspec_main_setmonofont:nn
      { Scale     = MatchLowercase } { Menlo }
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{variable}{\l_@@_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}{������ 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}{���������������������������������������}
% \changes{v1.3}{2023/10/09}{���������������������������������������������}
% ���������������������������������������������
%    \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}{���������������������������������������}
% \changes{v1.3}{2023/10/09}{���������������������������������������������}
% \changes{v1.4}{2024/04/03}{������������������������������������������}
% \begin{macro}{\@@_loadfont_stzhongs:V,\@@_loadfont_stzhongs:,\@@_stzhongs:}
% ���������������������������������������������
%    \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}
%
% ������������������������������������������������������������������������������������
%    \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}{������ |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}{������������������������������}
% ���������������������������������������������������������
% ��������������������������������������������������� |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} ���������������������������������������������������������
% ���������������������������������������������������������������������������������������������������
% ��������������������������������������������������� |dim| ���������������������������������������������
%    \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} ������������������ \opt{headings} ���������������������������������
%    \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}������������������������������������������������������������
%    \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}{���������������������������������������������������������}
% \changes{v0.12}{2021/12/03}{���������������������������������������������}
% ��������� \tn{mainmatter}���������������������������������������������������
% ������������������������������������������������
%    \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}{������������������������������������������������������������}
% ������������������������������������������������
%    \begin{macrocode}
\AtBeginEnvironment { document }
  {
    \exp_args:NV \pagestyle \l_@@_fmt_pagestyle_tl
    \pagenumbering { Roman }
  }
%    \end{macrocode}
%
%
% \subsection{������������������}
%
% \begin{macro}{\@@_bookmark_toc:n,\@@_bookmark_toc:V}
% ������������������������������������������������������������������������������������������
%    \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 ������������������������
%    \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}
% ���������������������������������������������������������������������������������������������������������������������
% ������������ \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}
% ���������������������������������������������������������
%    \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{������������}
% \changes{v0.13}{2021/12/09}{������ \pkg{tocloft}������ \pkg{ctex} ���������������������}
%
% ���������������������������������
%    \begin{macrocode}
    contentsname   = \l_@@_name_tableofcontents_tl,
    listfigurename = \l_@@_name_listoffigures_tl,
    listtablename  = \l_@@_name_listoftables_tl,
%    \end{macrocode}
% ������������������������������������
%    \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 ���������������������������������������������������������������������������������
% ������������������������������������������������������������
% \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}
% ������������������������������������������������������������
%    \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}
%
% \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{macrocode}
\ctex_at_end_preamble:n
  {
    \bool_if:NF \g_@@_toc_showentry_bool
      {
        \bool_gset_false:N \g_@@_lof_showentry_bool
        \bool_gset_false:N \g_@@_lot_showentry_bool
      }
  }
%    \end{macrocode}
%
% \begin{macro}{tableofcontents/dotline}
% \changes{v1.0}{2022/08/08}{������������������������������������������������������}
% ������ \cls{book} ������������������������������������������
%    \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}
% ������������ \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}{������������������������������������������}
% \changes{v0.15}{2022/02/11}{���������������������������������������}
% ��������������������������������������������������� \opt{numeric} ���������-������������
% \opt{author-year}��������������� \pkg{biblatex} ��� \opt{gb7714-2015}
% ��� \opt{gb7714-2015ay} ��������������������������������� \opt{unknown}���������
% ��������������������������������������������������������� \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}{������������ \pkg{biblatex} ������������������������}
% ��������� \pkg{biblatex} ������������������������������������������������
% ��������������������������������������������� \opt{bib/style} ���������
% ���������������������������������������������������������������������������������������������
% |\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} ������������������������������
% ���������������������������������������
%    \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}
% ������������������������������������������
%    \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}{���������������������������������������}
% ������������������������������������������������������������������������ |chapter| ���������
% ������������������������������������������������������������ \pkg{biblatex} ���������
%  |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}
% ��������������������������������������������������� \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 ���������������������������������}
% ������ 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} ���������������������������������
% \begin{arguments}
%   \item ���������
% \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} ������������������������������������������������������������������������������������
%    \begin{macrocode}
\bool_if:NT \g_@@_opt_load_cref_bool
  {
    \crefdefaultlabelformat { #2#1#3\, }
    \crefformat { equation      } { ������~#2#1#3~   }
    \crefformat { chapter       } { ���#2#1#3���     }
    \crefformat { section       } { ���~#2#1#3~���   }
    \crefformat { subsection    } { ���~#2#1#3~������ }
    \crefformat { subsubsection } { ���~#2#1#3~������ }
%    \end{macrocode}
% ������ \pkg{cleveref} ������������������
%    \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}
% ������������ \pkg{circledtext} ������������������������
% ������������������������������������������������������������������������������������������������������������
%    \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}{������ \opt{circled} ��� \opt{circled*} ���������}
% ������������������������
%    \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}{������������������������ \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{������������}
%
% \begin{macro}[int]{\@makefntext}
% ������������������������������������������������������������������������������ \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{������������}
%
% \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}{������������������������������}
% \changes{v1.0}{2022/08/06}{������ \pkg{tabularray} ���������}
% \changes{v1.4}{2024/03/06}{������ \pkg{tabularray} ���������}
% ���������������������������������������������^^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}
% ������������������������������������������������������������������ \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}{������������������������������ \pkg{floatrow}���}
% \changes{v0.18}{2022/05/08}{���������������������������}
% ������������������������������������������������������������������������������������������������������
%    \begin{macrocode}
\DeclareCaptionStyle{njucap}
  {
    font          = {small, bf},
    labelsep      = quad,
    justification = centering
  }
\captionsetup [ figure ] { style = njucap }
\captionsetup [ table  ] { style = njucap }
%    \end{macrocode}
%
% \begin{macro}{\ctex_patch_cmd:Nnn}
%    \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}{���������������������������������}
% ������������������������������������������������������
% \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}
% ���������������������������������������������������������������������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}{��������� \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 ���������������������������|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}
% ���������������������������������������������������������������������������������������������
% ��������� \env{proof} ������������������������������������������
%    \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} ������������������������������������ \file{interface3.pdf}
% ������ 5.3 ������������������������������������������������ |V| ���������������������������������
% \begin{arguments}
%   \item ���������
%   \item ������������
%   \item ���������
% \end{arguments}
% ���������������������������������������������������������������������������
% ���������������������������������������������������������������������������
%    \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{������������}
% \changes{v1.0}{2022/07/31}{���������������������������������}
%
% \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}
% ������������������������������������
%    \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}
% ���������������������������������������������������������������������
%    \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}
% ���������������������������������������
%    \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}
% ���������������������������������������
%    \begin{macrocode}
    partial                      .choices:nn =
      { upright, italic } { \@@_um_setup:n { partial = #1 } },
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{math/real-part}
% ������������������������������������������������������
%    \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}
% ������������������������������������������
%    \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}
% ������������������������������������������������
%    \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}
% ���������������
%    \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}���
% ������������������������������������������������������
%    \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}{������������������������������������}
% \changes{v1.2}{2023/05/02}{���������������������������������������������}
% ������������������������������������
%    \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}
% ������������������������������������
%    \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}
% ������������������������������
%    \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 ������������������}
% ���������������������������������
%    \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}
% ���������������������������
% \begin{arguments}
%   \item ���������������������|dim| ���������
%   \item ������������������������|dim| ���������
%   \item ���������������|dim| ���������
%   \item ������������
% \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}
% ���������������������������������������
%    \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}
% ���������������������������������������
% 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{���������}
% \changes{v1.0}{2022/06/30}{������������������������������}
% \changes{v1.2}{2023/05/01}{������2023���������������������������������������������}
%
% \subparagraph{������} ���������������������������������������������
%
% \begin{macro}{g/cover-front/top}
% ������������������������������������
% ������������������������������ |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}
% ������������������������������������
%    \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}
% ������������������������������������
%    \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}
% ������������������������������
%    \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}
% ������������������������������
%    \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}
% ���������������������������
%    \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}{������������������������������������������������������������������}
% ���������������������������������
%    \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}
% ���������������������������������
%    \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}
% ������������������������������������
%    \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}
% ������������������������������������
%    \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:}
% ������������������������������
% \begin{arguments}
%   \item ���������������������|dim| ���������
%   \item ���������������������|dim| ���������
%   \item ������������
% \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:}
% ������������������������������
% \begin{arguments}
%   \item ���������������������|dim| ���������
%   \item ������������
%   \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{������������} ���������������������������������������������������
% \changes{v1.3}{2023/08/21}{������������������������������������������������������}
%
% \begin{macro}{g/cover-en/title}
% ������������������������������������
%    \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}
% ������������������������������������������
%    \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}
% ������������������������������������������
%    \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}
% ������������������������������������������
%    \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}
% ������������������������������������������
%    \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{���������������������} ������������������������������������������������������������
%
% \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}
% ������������������������������������������
%    \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}
% ������������������������������������
%    \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:}
% ������������������������������
%    \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}{���������������������������������������������������������������}
% \changes{v0.19}{2022/05/23}{������������������������������������������������������������}
% ���������������������������������
%    \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}
% ������������������������������������
%    \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}
% ���������������������������������������
%    \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}
% ���������������������������������������
%    \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}
% ������������������������������������������
%    \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}
% ���������������������������������������
%    \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}
% ���������������������������������������
%    \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}
% ������������������������������������������
%    \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}
% ���������������������������������������������
%    \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}
% ���������������������������������������������
%    \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}{������������������������������������������������}
% ������������������������������������������������ |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:}
% ������������������
%    \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}
% ������������������������������������
%    \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}
% ������������������������������������
%    \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}
% ������������������������������������
%    \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}
% ���������������������������������
%    \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}
% ���������������������������
% \begin{arguments}
%   \item ���������������������|dim| ���������
%   \item ������������
% \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}
% ������������������������������������������������������������������������������
% \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}
% ������������������������������^^A ���������������������������������������
%    \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}
% ������������������������������^^A ���������������������������������������
%    \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 ������������������������������}
% \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}
% ������������������������������������������
%    \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}
% ������������������������������������������
%    \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}
% ������������������������������������
%    \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}{��������������������������������� \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}
% ������������������������������������ \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}{������������������������������������}
% \changes{v0.19}{2022/05/22}{���������������������������������������������}
% ������������������������������������
% ������������������������������������������������������������������������������
%    \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}{������������������������������������������������}
% ���������������������������������������������������������������������������������
%    \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}{������������������������������������������}
% ���������������������
%    \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}{������������������������������������������}
% ���������������������
%    \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}
% ���������������������������������������������������������������
% ��������������� \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}{������������������������������������������}
% ��������� \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}������������������������������������������
% ���������������������������������������������������
%    \begin{macrocode}
    \bool_lazy_and:nnT
      { ! \g_@@_opt_draft_bool }
      {   \g_@@_opt_decl_bool  }
      { \@@_make_decl_i: \@@_make_decl_ii: }
%    \end{macrocode}
% ���������������������������������������������������������������������������
%    \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}
% ���������������������������
%    \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}
% ���������������������������
%    \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}
% ������������������������������
%    \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}
% ������������������������������
%    \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}
% ���������������������������
%    \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}
% ���������������������������
%    \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}{������������������������������������������}
%
% \begin{macro}{\@@_abs_info_u:,\@@_abs_info_en_u:}
% ���������������������������������������
%    \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}
% ���������������������������������
% \begin{arguments}
%   \item ���������������������������|_en| ���������
%   \item ���������
% \end{arguments}
% ���������������������������������������������������������������������������������������������������
%    \begin{macrocode}
\cs_new_protected:Npn \@@_abs_info_u:nn #1#2
  {
%    \end{macrocode}
% ������������������������������������������������������������������������������������������
%    \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{���������}
% \changes{v0.13}{2021/12/12}{������ \LaTeX3 ������������������������������}
%
% \begin{macro}{\@@_abs_info_g:,\@@_abs_info_en_g:}
% ���������������������������������������
%    \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}
% ���������������������������������������
% \begin{arguments}
%   \item ���������
% \end{arguments}
% ������������������������������������������������������������������������������������������������������
% ������ \cs{@@_full_uline:NV} ������������������������������ \cs{@@_uline:n} ���
% \cs{@@_ulined_center_box:nn} ���������������������������������������������������������������
%    \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}{������������������������������������������}
% \changes{v1.1}{2022/12/12}{������������������������������������������}
% ���������������������������������������������������������������������������������������������
% ������������������������������������
% \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}
% ��������������������������������������� \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}
% ���������������������������������
%    \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}{������������������������������������������}
%
% \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}
% ���������������������������������
%    \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}{������������������������������������������}
% ���������������������������������
%    \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}{������������������������������������������������}
% ������������������������������������������������������������
%    \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}{���������������������������������������}
% ������������������������������ \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} ������������������������������������������������������������������������
%    \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}{������������������������������������������������������}
% ������������������������������������������������������������������������������
%    \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}
% ������������������������������
%    \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:}
% ������������������������������������������������������������
%    \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}
% ���������������������������������������������������������������������������������
% ������ \pkg{biblatex} ��������� \tn{MakeCapital} ��������� robust ���������
% ������������������������������������������������������������������������
% ��������������� \cs{str_uppercase:f} ������������������������
%    \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}
% ���������������������������������������������������
%    \begin{macrocode}
      \RenewDocumentCommand \mkbibdateshort { m m m }
        { \textbf { \thefield {##1} } }
%    \end{macrocode}
% \changes{v1.1}{2023/04/07}{������������������������������������������������������������}
% ��������������������� \env{refsection} ���������\tn{newrefsection} ������������
% ��������������������� \env{refsection}������������������������������������������������
%    \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}{������������������������������������������������������}
% \changes{v1.4}{2024/03/21}{������������������������������������������������}
% \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}{���������������������������������������������������}
%    \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}{���������������������������������������}
% ��������������������������������������� $\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} ������������������������������������������������������
%    \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}
% ���������������������������������������������
%    \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} ������������������������������������������������������������������������������������
% \LaTeXe ��������������������������������������������������� \file{source2e.pdf} ������
% File I \quad ltlists.dtx ���������
%    \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} ���������������������������������������������������������������������������������
% \tn{labelwidth} ������������������������������������������
%    \begin{macrocode}
        \labelwidth #2
        \labelsep   \c_zero_dim
        \itemsep    \c_zero_dim
        \parsep     \c_zero_dim
%    \end{macrocode}
% ��������������������������������������������������������������������������������� \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| ���������������������������}
%
% ������������������������������������������������������������������������������������������
%
% \subsubsection{������}
% \label{subsubsec:constant-name}
%
% \changes{v0.19}{2022/05/22}{������������������������������������������}
% \changes{v0.19}{2022/05/22}{������������������������������������������������}
% \changes{v1.0}{2022/06/19}{������������������������������������}
% \changes{v1.0}{2022/06/19}{���������supv_ii -&gt; supvii���supv_ttl -&gt; supvtitle���}
%
% ������������������������������������������������������������������������������������������������������
% ������������������������������������
%
% ���������������������������������������������������
%    \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         } { ���������������������������                 },
%&lt;def-p&gt;    { author            } { ������                               },
%    \end{macrocode}
% ���������������������������������
%    \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              } { ������������                           },
%&lt;def-g&gt;    { confer            } { ���������������������������                 },
    { date              } { ������                               },
%&lt;def-g&gt;    { defend date       } { ������������������                       },
%&lt;def-g&gt;    { degree            } { ������������������                       },
%    \end{macrocode}
% ������������������������������������������
%    \begin{macrocode}
%&lt;def-g&gt;    { degree          a } { ������������                           },
%&lt;def-p&gt;    { dept              } { ������                               },
%    \end{macrocode}
% ������������������������������������������
%    \begin{macrocode}
%&lt;def-g&gt;    { dept            a } { ������������                           },
%&lt;def-g&gt;    { email             } { ������ Email                         },
%&lt;def-g&gt;    { field             } { ������������                           },
%&lt;def-u&gt;    { grade             } { ������                               },
%&lt;def-g&gt;    { grade             } { ���                                 },
%&lt;def-u|def-g&gt;    { id                } { ������                               },
%&lt;def-p&gt;    { id                } { ������                               },
%    \end{macrocode}
% ������������������������������������������
%    \begin{macrocode}
%&lt;def-g&gt;    { id              a } { ���������������                         },
    { listoffigures     } { ������������                           },
    { listoftables      } { ������������                           },
%&lt;def-p&gt;    { major             } { ������������                           },
%    \end{macrocode}
% ���������������������������������
%    \begin{macrocode}
%&lt;def-g&gt;    { major           a } { ������                               },
%    \end{macrocode}
% ������������������������������������������������
%    \begin{macrocode}
%&lt;def-g&gt;    { major           b } { ������������                           },
%    \end{macrocode}
% ���������������������������������������������
%    \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         } { ���������������������������                 },
%&lt;def-u&gt;    { orig sign         } { ������������                           },
%&lt;def-g&gt;    { orig sign         } { ���������������                         },
%&lt;def-p&gt;    { orig sign         } { ������������������������                   },
    { paper list        } { ������������������                       },
    { pdf creator       } { LaTeX~ with~ njuthesis~ class      },
    { preface           } { ��� \qquad{} ���                     },
%&lt;def-p&gt;    { report            } { ���������������������������                 },
%&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 } { ���������������                         },
%&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}
% ���������������������������������
%    \begin{macrocode}
%&lt;def-g&gt;    { supv            a } { ���������������������������������             },
%    \end{macrocode}
% ������������������������������������������
%    \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}
% ���������������������������������
%    \begin{macrocode}
%&lt;def-g&gt;    { title           a } { ������������������                       },
%    \end{macrocode}
% ������������������������������������������������
%    \begin{macrocode}
%&lt;def-g&gt;    { title           b } { ������������                           },
%    \end{macrocode}
% ������������������������������������������
%    \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}
% ���������������������������������
%    \begin{macrocode}
    { abstract    a } { ������������        } { ABSTRACT              },
%    \end{macrocode}
% ������������������������������������
%    \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 ���������������������������������������������        }
%&lt;def-g&gt;      { \l_@@_name_nju_tl ���������������������������������������������        },
    { 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} ������������������������������}
% ��������������������������������� \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}
% ���������������������������������������������������������������������������������������
%    \begin{macrocode}
\tl_set:Nn \l_@@_text_origdecl_tl
  {
%&lt;*def-u&gt;
    ��������������������������������������������������������������������� \g_@@_info_title_tl ���
    ������������������������������������������������������������������������������������������������
    ���������������������������������������������������������������������������������������������
    ���������������������������������������������������������������������������������
    ���������������������������������������������������������������������������������������������������������
%&lt;/def-u&gt;
%&lt;*def-g&gt;
    ���������������������������������������������������������������������������������������������������������
    ���������������������������������������������������������������������������������������������������������
    ���������������������������������������������������������������������������������������������������������
    ���������������������������������������������������������������������������������������������������������
    ���������������������������������������������������������������������������������
%&lt;/def-g&gt;
%&lt;*def-p&gt;
    ���������������������������������������������������������������������������������������������������������
    ���������������������������������������������������������������������������������������������������������
    ���������������������������������������������������������������������������������������������������������
    ������������������������������������������������������������������������������
%&lt;/def-p&gt;
  }
%    \end{macrocode}
% \end{variable}
%
% \begin{variable}{\l_@@_text_authdecl_tl}
% ������������������������������������������
%    \begin{macrocode}
%&lt;*(def-g|def-p)&gt;
\tl_set:Nn \l_@@_text_authdecl_tl
  {
%&lt;*def-g&gt;
    ���������������������������������������������������������������������������������������������������������
    ������������������������������������������������������������������������������������������������������������
    ���������������������������������������������������������������������������������������������������������
    ���������������������������������������������������������������������������������������������������������
    ���������������������������������������������������������������������������������������������������������
    ���������������������������������������������������������������������������������������������������������
    ������������������������������������������
%&lt;/def-g&gt;
%&lt;*def-p&gt;
    ���������������������������������������������������������������������������������������������������������
    ���������������������������������������������������������������������������������������������������������
    ���������������������������������������������������������������������������������������������������������
    ���������������������������������������������������������������������������������������������������������
    ������������������������������������������������������������������
%&lt;/def-p&gt;
  }
%&lt;/(def-g|def-p)&gt;
%    \end{macrocode}
% \end{variable}
%
% \begin{variable}{\l_@@_text_cover_en_tl}
% ���������������������������������
%    \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}{������������������������������������������������}
% ������������������������������������������������������������������������������������������������������������
%    \begin{macrocode}
\clist_map_inline:nn
  {
%    \end{macrocode}
% ���������������������������������
%    \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}
% ���������������������������������
%    \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}
% ������������������������
%    \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}
% ������������������������
%    \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}
% ������������������������������������������������������������������������������������������������
%    \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}
% ���������������
%    \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}
% ���������������������������
%    \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{������}
% \label{subsubsec:constant-format}
%
% \changes{v0.17}{2022/04/09}{������������������������ \file{.def} ���������}
% \changes{v0.20}{2022/05/28}{���������������������������������������������������}
% ���������������
%    \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} ���������������������
%    \begin{macrocode}
    { emblem color  } { black                             },
    { name   color  } { black                             },
%    \end{macrocode}
% ���������������������
%    \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}
% ������������������������������
%    \begin{macrocode}
    { chapterintoc  } { \l_@@_fmt_section_tl            },
%    \end{macrocode}
% ������������������������������
%    \begin{macrocode}
%    \end{macrocode}
% \changes{v1.3}{2023/07/08}{���������������������������������}
% \env{tabular} ���������������������������
%    \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}{��������������������������������������� \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} ���������������������
%    \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}
%
% ������������������
%    \begin{macrocode}
\lstnewenvironment{shellexample}[1][]{%
  \lstset{style=style@shell, #1}}{}
\lstnewenvironment{latexexample}[1][]{%
  \lstset{style=style@latex, #1}}{}
%    \end{macrocode}
%
%
% \subsubsection{������������������}
%
% ��������������� guard ������������������������������
% ��������� \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 ���������
%    \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 ���������
%    \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 ���������
%    \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} ������������������������������������
% \cs{l__ctxdoc_verbatim_line_tl}��������������� \pkg{codehigh} ���������������������
% ��������������������������������������������������������������������������������������� |^^M|���
% ���������������������������������������������������������������������������������������
%    \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>