% \iffalse meta-comment
% !TeX program  = XeLaTeX
% !TeX encoding = UTF-8
%
% Copyright (C) 2017--2023 by Xiangdong Zeng <xdzeng96@gmail.com>
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either
% version 1.3c of this license or (at your option) any later
% version. 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.
%
% This work has the LPPL maintenance status `maintained'.
%
% The Current Maintainer of this work is Xiangdong Zeng.
%
% This work consists of the files fduthesis.dtx,
%                                 fduthesis-doc.dtx,
%                                 fduthesis-logo.dtx,
%           and the derived files fduthesis.ins,
%                                 fduthesis.cls,
%                                 fduthesis-en.cls,
%                                 fduthesis.def,
%                                 fdudoc.cls,
%                                 fdulogo.sty,
%                                 fdulogo-example.tex,
%                                 fduthesis-cover.tex,
%                                 fduthesis-en.tex,
%                                 fudan-emblem.pdf,
%                                 fudan-emblem-new.pdf,
%                                 fudan-name.pdf,
%                                 fduthesis.pdf,
%                                 fduthesis-en.pdf,
%                                 fduthesis-code.pdf,
%                             and README.md.
%
%<*internal>
\iffalse
%</internal>
%
%<*readme>
The `fduthesis` Class
=====================

*LaTeX thesis template for Fudan University, v0.9a*

Overview
--------

This template supports doctoral or master dissertion and undergraduate
thesis, both in Chinese or English. With the help of modern LaTeX
technology, `fduthesis` aims to create a simple interface, a normative
format, as well as a hackable class for the users.

At present, `fduthesis` only supports XeTeX and LuaTeX engines.
Support for pdfTeX and [ApTeX](https://github.com/clerkma/ptex-ng) is
still under development. `fduthesis` only allows UTF-8 encoding.

The documentation can be found in
[fduthesis.pdf](http://mirrors.ctan.org/macros/latex/contrib/fduthesis/fduthesis.pdf)
(in Chinese) or
[fduthesis-en.pdf](http://mirrors.ctan.org/macros/latex/contrib/fduthesis/fduthesis-en.pdf)
(in English).

GitHub repository: <https://github.com/stone-zeng/fduthesis>.

Installation
------------

To install `fduthesis`, you can use one of the following methods:

- If you are running TeX Live, the simplest way is to run

      tlmgr install fduthesis

- Download
  [fduthesis.tds.zip](http://mirror.ctan.org/install/macros/latex/contrib/fduthesis.tds.zip)
  from CTAN, extract it in the root of one of your TDS trees, and
  update the filename database.

- Get the source from GitHub:

      git clone https://github.com/stone-zeng/fduthesis.git

  Run `install-win.bat` (Windows) or `install-unix.sh` (Linux or macOS)
  to generate the templates and configuration files. These files would
  be found in a new-created `thesis` folder. You can enjoy `fduthesis`
  here at once.

  For permanent installation, you may move the following files into a
  directory where LaTeX will find them (e.g.
  `TEXMF/tex/latex/fduthesis/`):

  - `fduthesis.cls`
  - `fduthesis-en.cls`
  - `fduthesis.def`
  - `fdudoc.cls`
  - `fdulogo.sty`
  - `fudan-emblem.pdf`
  - `fudan-emblem-new.pdf`
  - `fudan-name.pdf`

  Do not forget to update the filename database afterwards.

Contributing
------------

[Issues](https://github.com/stone-zeng/fduthesis/issues) and
[pull requests](https://github.com/stone-zeng/fduthesis/pulls)
are always welcome.

License
-------

This work may be distributed and/or modified under the conditions of
the [LaTeX Project Public License](http://www.latex-project.org/lppl.txt),
either version 1.3c of this license or (at your option) any later
version.

-----

Copyright (C) 2017&ndash;2023 by Xiangdong Zeng <xdzeng96@gmail.com>.
%</readme>
%
%<*internal>
\fi
\begingroup
  \def\NameOfLaTeXe{LaTeX2e}
\expandafter\endgroup\ifx\NameOfLaTeXe\fmtname\else
\csname fi\endcsname
%</internal>
%
%<*install>
\input docstrip.tex
\keepsilent
\askforoverwritefalse

\preamble

    Copyright (C) 2017--2023 by Xiangdong Zeng <xdzeng96@gmail.com>

    This work may be distributed and/or modified under the
    conditions of the LaTeX Project Public License, either
    version 1.3c of this license or (at your option) any later
    version. 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.

    This work has the LPPL maintenance status `maintained'.

    The Current Maintainer of this work is Xiangdong Zeng.

    This work consists of the files fduthesis.dtx,
                                    fduthesis-doc.dtx,
                                    fduthesis-logo.dtx,
              and the derived files fduthesis.ins,
                                    fduthesis.cls,
                                    fduthesis-en.cls,
                                    fduthesis.def,
                                    fdudoc.cls,
                                    fdulogo.sty,
                                    fdulogo-example.tex,
                                    fduthesis-cover.tex,
                                    fduthesis-en.tex,
                                    fudan-emblem.pdf,
                                    fudan-emblem-new.pdf,
                                    fudan-name.pdf,
                                    fduthesis.pdf,
                                    fduthesis-en.pdf,
                                    fduthesis-code.pdf,
                                and README.md.

\endpreamble

\generate{
  \usedir{tex/latex/fduthesis}
    \file{\jobname.cls}        {\from{\jobname.dtx}{class}}
    \file{\jobname-en.cls}     {\from{\jobname.dtx}{class-en}}
    \file{\jobname.def}        {\from{\jobname.dtx}{definition}}
    \file{fdudoc.cls}          {\from{\jobname.dtx}{doc}
                                \from{\jobname-doc.dtx}{doc}}
    \file{fdulogo.sty}         {\from{\jobname.dtx}{logo}
                                \from{\jobname-logo.dtx}{logo}}
    \file{fdulogo-example.tex} {\from{\jobname.dtx}{ex-logo}
                                \from{\jobname-logo.dtx}{ex-logo}}
    \file{\jobname-cover.tex}  {\from{\jobname.dtx}{cover}
                                \from{\jobname-logo.dtx}{cover}}
%<*internal>
  \usedir{source/latex/fduthesis}
    \file{\jobname.ins}        {\from{\jobname.dtx}{install}}
%</internal>
  \usedir{doc/latex/fduthesis}
  \nopreamble\nopostamble
    \file{README.md}           {\from{\jobname.dtx}{readme}}
}

\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/fduthesis      *}
\Msg{*                                                           *}
\Msg{*     fduthesis.cls                                         *}
\Msg{*     fduthesis-en.cls                                      *}
\Msg{*     fduthesis.def                                         *}
\Msg{*     fdudoc.cls                                            *}
\Msg{*     fdulogo.sty                                           *}
\Msg{*                                                           *}
\Msg{* To produce the documentation, run the file fduthesis.dtx  *}
\Msg{* through XeLaTeX.                                          *}
\Msg{*                                                           *}
\Msg{* Happy TeXing!                                             *}
\Msg{*                                                           *}
\Msg{*************************************************************}

\endbatchfile
%</install>
%
%<*internal>
\fi
%</internal>
%
%<class|class-en|doc|logo>\NeedsTeXFormat{LaTeX2e}[2020/10/01]
%<*!(driver|install|ex-logo|cover)>
%<!readme>\GetIdInfo $Id: fduthesis.dtx 0.9a 2023-05-27 12:00:00Z Xiangdong Zeng <xdzeng96@gmail.com> $
%<class>  {Thesis template for Fudan University}
%<class>\ProvidesExplClass{\ExplFileName}
%<class-en>  {Thesis template for Fudan University (English version)}
%<class-en>\ProvidesExplClass{\ExplFileName-en}
%<definition>  {Definition file for fduthesis}
%<definition>\ProvidesExplFile{\ExplFileName.def}
%<doc>  {Documentation class for fduthesis}
%<doc>\ProvidesExplClass{fdudoc}
%<logo>  {Fudan University's Visual Identity}
%<logo>\ProvidesExplPackage{fdulogo}
%<!readme>  {\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription}
%</!(driver|install|ex-logo|cover)>
%<*driver>
% \PassOptionsToPackage{showframe}{geometry}
\documentclass{fdudoc}
\usepackage{xeCJKfntef}
\hypersetup{
  pdftitle  = {fduthesis: ������������������������},
  pdfauthor = {���������}}
% ������������������������������������������������������������������������������������
\def\FSID{���{\xeCJKsetup{PunctStyle=banjiao}���}���} % U+3002
\def\FSFW{���{\xeCJKsetup{PunctStyle=banjiao}���}���} % U+FF0E
\def\COFW{���{\xeCJKsetup{PunctStyle=banjiao}���}���} % U+FF1A
\def\SCFW{���{\xeCJKsetup{PunctStyle=banjiao}���}���} % U+FF1B
%^^A! \PassOptionsToPackage{scheme=plain, linespread=1.1}{ctex}
%^^A! \documentclass{fdudoc}
%^^A! \hypersetup{
%^^A!   pdftitle  = {fduthesis: LaTeX Thesis Template for Fudan University},
%^^A!   pdfauthor = {Xiangdong Zeng}}
%^^A! \ctexset{
%^^A!   section = {name = {}, format+ = \raggedright},
%^^A!   subsubsection/tocline = {\CTEXnumberline{#1}#2}}
%^^A! \pagestyle{headings}
%^^A! \def\FSID{{\xeCJKsetup{PunctStyle=banjiao}���}}
%^^A! \def\FSFW{{\xeCJKsetup{PunctStyle=banjiao}���}}
%^^A!

\title{\textcolor{MaterialIndigo800}{\textbf{fduthesis: ������������������������}}}
\author{���������}
\date{2023/05/27\quad v0.9a%
  \thanks{\url{https://github.com/stone-zeng/fduthesis}.}}
%^^A! \title{\textcolor{MaterialIndigo800}{%
%^^A!   \textbf{The \textsf{fduthesis} Class \\
%^^A!     \LaTeX{} Thesis Template for Fudan University}}}
%^^A! \author{Xiangdong Zeng}
%^^A! \date{2023/05/27\quad v0.9a%
%^^A!   \thanks{\url{https://github.com/stone-zeng/fduthesis}.}}
%^^A!

\begin{document}
%^^A! \begin{document}
%^^A!
  \DisableImplementation
  \EnableImplementation
  \def\FDUCODEDOC{}
  \DocInput{fduthesis.dtx}
  \DocInput{fduthesis-doc.dtx,fduthesis-logo.dtx}
  \IndexLayout
  \PrintChanges
  \PrintIndex
\end{document}
%</driver>
% \fi
%
% \changes{v0.1}{2017/02/15}{���������������������}
% \changes{v0.2}{2017/02/19}{������ Git ��������������������������������� GitHub���}
% \changes{v0.3}{2017/02/21}{������ \cls{doc} ��� \pkg{DocStrip}���}
% \changes{v0.3}{2017/03/04}{������ \LuaLaTeX{}���}
% \changes{v0.3}{2017/03/20}{���������������������}
% \changes{v0.3}{2017/05/26}{������ Travis CI ���������������������}
% \changes{v0.3}{2017/06/23}{���������������������������������������}
% \changes{v0.3}{2017/07/05}{������������������}
% \changes{v0.3}{2017/07/10}{���������������������}
% \changes{v0.3}{2017/07/19}{������ \pkg{l3docstrip} ���������������������}
% \changes{v0.3}{2017/07/28}{������������������������������������}
% \changes{v0.4}{2017/08/03}{������ \file{.dtx} ���������}
% \changes{v0.4}{2017/08/11}{���������������������������}
% \changes{v0.6}{2017/11/23}{������ \pkg{ctex} v2.4.11���}
% \changes{v0.6}{2017/11/29}{������������������������������}
% \changes{v0.7}{2018/01/26}{������ \pkg{l3build} ���������������������}
% \changes{v0.7}{2018/01/31}{������������ \file{fduthesis-user.def}���}
% \changes{v0.7}{2018/03/04}{���������������������������������������������������}
% \changes{v0.7a}{2018/04/09}{������������������������ CTAN���}
% \changes{v0.7b}{2018/04/29}{������ \TeXLive{} 2018���}
% \changes{v0.7b}{2018/05/06}{���������������������������������������������}
%
%^^A ������������ " ���������������������������������
% \DeleteShortVerb\"
%^^A! \DeleteShortVerb\"
%^^A!
%
%^^A ���������������������������
%^^A+
% \newgeometry{
%   left   = 1.25 in,
%   right  = 1.25 in,
%   top    = 1.25 in,
%   bottom = 1.00 in
% }
%
% \maketitle
% \vfill
% \begin{center}
%   \includegraphics[width=8cm]{../logo/fduthesis-cover.pdf}
% \end{center}
% \vfill
% \thispagestyle{plain}
% \clearpage
%
% \tableofcontents
%
%^^A-
%
% \EnableDocumentation
%^^A \DisableDocumentation
%
% \begin{documentation}
%
%^^A ������������������������
%^^A+
% \newgeometry{
%   left   = 1.65 in,
%   right  = 0.80 in,
%   top    = 1.25 in,
%   bottom = 1.00 in
% }
%
%^^A-
%
% \section{������}
%^^A! \section{Introduction}
%^^A!
%
% ��������������������������������������������������� \LaTeX{} ������������������������������
% \begin{itemize}
%   \item ��������������������������������������������� \cite{������������������������������������}��������������������� 2001 ������
%     ������������������������������ 2004 ���������������������
%   \item Pandoxie ��������� \cls{FDU-Thesis-Latex} \cite{pandoxie2014fduthesislatex}������������������������
%     ���������������������������������������������������������������������
%   \item richarddzh ��������������������������� \cls{fudan-thesis} \cite{richard2016fudanthesis}���
% \end{itemize}
% ��������������������������������������������������������������������������������������������������� \cite{thuthesis}���
% ������������ \cite{pkuthss}��������������� \cite{cquthesis}��������������������������� \cite{ustcthesis}���
% ��������������������� \cite{ucasthesis} ������������������������������ \cite{sjtuthesis} ���������������������������������
% ������������������������������������������������������������������������������
%
% ��������������������������������������������������������� \LaTeX3 \cite{source3} ���������������������������������������������
% ���������������������������������
%^^A! \cls{fduthesis} is a thesis template for Fudan University.
%^^A! This template is mostly written in \LaTeX3 syntax, and
%^^A! provides a simple interface for users.
%^^A!
%
% \subsection*{\LaTeX{} ������}
%^^A! \subsection*{Getting started with \LaTeX{}}
%^^A!
%
% ��������������������� \LaTeX{} ������������������������������������ \LaTeX{} ���������������������������������������������������
% ���������������������\LaTeX{} ���������\cite{���������2013latex������} ������������������\pkg{lshort}��� \cite{lshort}
% ��������������������� \cite{lshort-zh-cn}������������������������ \LaTeX{} ������������������������������������������
%^^A! This documentation is \emph{not} a \LaTeX{} tutorial at
%^^A! starter's level. If you are totally a newbie, please read some
%^^A! introductions like the famous \pkg{lshort}. Of course, there
%^^A! are countless \LaTeX{} tutorials on the Internet. You can
%^^A! choose whatever you like.
%^^A!
%
% \subsection*{���������������}
%^^A! \subsection*{About this documentation}
%^^A!
%
% ��������������������������������������������������������������������������������������� \pkg{xeCJK} ���������\cls{fduthesis}
% ��������������������������������������������������������� \cs{fdusetup} ���������\env{abstract} ���������\TeX{} ������
% \file{thesis.tex} ��������������������������������������������������������������������������� \meta{������������}���
% \meta{English title} ������������������������������������������������������������������������������������������������������
% ������������������
%^^A! In this documentation, different typefaces are used to
%^^A! represent different contents. Packages and classes are shown
%^^A! in sans-serif font, e.g.\ \pkg{xeCJK} package and
%^^A! \cls{fduthesis} class. Commands and file names are shown in
%^^A! monospaced font, e.g.\ command \cs{fdusetup}, environment
%^^A! \env{abstract} and \TeX{} document \file{thesis.tex}.
%^^A! Italic-shaped font with angle brackets outside means arguments,
%^^A! e.g.\ \meta{English title}. However, you do not need to type
%^^A! the brackets when using these commands. The example code has
%^^A! proper syntax highlighting so it will be much easier to read.
%^^A!
%
% ������������������������������������������������ \LaTeX{} ������������������������������������������������������������������������������
% ������������������������������������������������������������������������������������������������������������������������������
%^^A! \LaTeX{} code lines will have a blue line on their left, while
%^^A! for command lines there will be a pink line. The options,
%^^A! commands and environments in \cls{fduthesis} will be surrounded
%^^A! by two horizontal lines. Their usages and descriptions are
%^^A! provided at the same time.
%^^A!
%
% ������������������������������������������������������������������
% \begin{itemize}
%   \item ������������������ \rexptarget\rexpstar{} ���������������������\emph{������������}������������
%   \item ������������������ \exptarget\expstar{} ���������������������\emph{������������}������������
%   \item ���������������������������������������������������������������������������������������������������������������������
% \end{itemize}
%^^A! The options, commands and environments in \cls{fduthesis} can be
%^^A! divided into the following three types:
%^^A! \begin{itemize}
%^^A!   \item Those can be only used in \emph{Chinese templates} are
%^^A!     indicated by \rexptarget\rexpstar{}.
%^^A!   \item Those can be only used in \emph{English templates} are
%^^A!     indicated by \rexptarget\expstar{}.
%^^A!   \item If they do not have marks afterwards, then you can use
%^^A!     them in both Chinese and English templates.
%^^A! \end{itemize}
%^^A!
%
% \section{������}
%^^A! \section{Installation}
%^^A!
%
% \subsection{������ \cls{fduthesis}}
%^^A! \subsection{Obtaining \cls{fduthesis}}
%^^A!
%
% \subsubsection{������������}
%^^A! \subsubsection{Standard installation}
%^^A!
%
% ������������������������������������������������������������������ \cls{fduthesis}������������ \TeXLive{} ���������������������
% ������������������������
% \begin{shellexample}[morekeywords={tlmgr,install}]
%   tlmgr install fduthesis
% \end{shellexample}
% ��������������������������������������������������� \TeXLive{}������ \cls{fduthesis} ������������������������������������������
% ������������������������������
% \begin{shellexample}[morekeywords={tlmgr,update},emph={--all}]
%   tlmgr update --all
% \end{shellexample}
% ������������������������������
%^^A! If there are no special reasons, it is always recommended to
%^^A! install \cls{fduthesis} with a package manager. For example,
%^^A! the following command will install the package in \TeXLive{}
%^^A! (administrator permission may be required):
%^^A! \begin{shellexample}[morekeywords={tlmgr,install}]
%^^A!   tlmgr install fduthesis
%^^A! \end{shellexample}
%^^A!
%
% ��� \TeXLive{} ��� \MiKTeX{} ������������������������������������������������������������������������������
%^^A! In \TeXLive{} and \MiKTeX{}, you can also install \cls{fduthesis}
%^^A! through a graphical interface. It's rather simple and will not be
%^^A! described here.
%^^A!
%
% \subsubsection{������������}
%^^A! \subsubsection{Install manually}
%^^A!
%
% ��������������� CTAN ������������������������������������������ TDS ������������
% \begin{itemize}
%   \item ��� CTAN ��������� \cls{fduthesis} ���
%     \href{https://mirror.ctan.org/install/macros/latex/contrib/fduthesis.tds.zip}{TDS ���������}���
%   \item ������������������ \file{fduthesis.tds.zip} ��������������������� \TeX{} ������������������ TDS ������������
%   \item ������ \texttt{mktexlsr} ������������������������������������������������
% \end{itemize}
%^^A! If you want to download the template from CTAN and install it
%^^A! manually, the recommended way is to use the TDS ZIP file:
%^^A! \begin{itemize}
%^^A!   \item Download the \href{http://mirror.ctan.org/install/macros/latex/contrib/fduthesis.tds.zip}%
%^^A!     {TDS ZIP file} for \cls{fduthesis};
%^^A!   \item Copy all the files in \file{fduthesis.tds.zip} into the
%^^A!     local TDS directory of \TeX{} distribution.
%^^A!   \item Run \texttt{mktexlsr} to update the ls-R database.
%^^A! \end{itemize}
%^^A
%
% \subsubsection{������������}
%^^A! \subsubsection{Development version}
%^^A!
%
% CTAN ��������������� \cls{fduthesis} ��������������������������������������������������� bug ���������������������������������
% ��������������������������������������� GitHub ���������������������������������������������������
% \begin{itemize}
%   \item ������ \href{https://github.com/stone-zeng/fduthesis}{������������}������������Code���������������������
%     ���Download ZIP������������ \file{fduthesis-main.zip}��������������������� Git ���������������������������������������
%     ���������������������
%     \begin{shellexample}[gobble=7,alsoletter={.},morekeywords={git,clone}]
%       git clone https://github.com/stone-zeng/fduthesis.git
%     \end{shellexample}
%   \item ������ \file{install-win.bat}���Windows ������������ \file{install-unix.sh}���Linux ��� macOS
%     ������������������������������������������ \file{thesis} ���������������������
% \end{itemize}
%^^A! On CTAN, only the stable version of \cls{fduthesis} is provided, where new features and
%^^A! bug fixes may not be included in time. To use the latest development version on GitHub,
%^^A! you can use the install script:
%^^A! \begin{itemize}
%^^A!   \item Open the project's \href{https://github.com/stone-zeng/fduthesis}{homepage}, click
%^^A!     ``Code'' button and choose ``Download ZIP'' to download \file{fduthesis-main.zip}.
%^^A!     If you have git program on your computer, you can also clone the repository directly:
%^^A!     \begin{shellexample}[gobble=5,alsoletter={.},morekeywords={git,clone}]
%^^A!       git clone https://github.com/stone-zeng/fduthesis.git
%^^A!     \end{shellexample}
%^^A!   \item Run \file{install-win.bat} (Windows) or \file{install-unix.sh} (Linux or macOS),
%^^A!     all the necessary files will be found in the \file{thesis} folder then.
%^^A! \end{itemize}
%^^A!
%
% \subsubsection{Overleaf}
%^^A! \subsubsection{Overleaf}
%^^A!
%
% \cls{fduthesis} ������������ \href{https://www.overleaf.com/latex/templates/fduthesis-latex-thesis-template-for-fudan-university/svtdhhstkmkt}{Overleaf ���������}���
% ���������������������������������������������
%^^A! \cls{fduthesis} also provides the \href{https://www.overleaf.com/latex/templates/fduthesis-latex-thesis-template-for-fudan-university/svtdhhstkmkt}{Overleaf version}.
%^^A! You can follow the link and login to edit directly on the web.
%^^A!
%
% \subsection{������������}
%^^A! \subsection{Composition of the template}
%^^A!
%
% ������������������������������������������������������������������������������������������������������������������������
% ���~\ref{tab:fduthesis-components}���
%^^A! There are several parts in \cls{fduthesis}, including kernel template
%^^A! classes, configuration files, affiliated packages and user's guides.
%^^A! More details are listed in table~\ref{tab:fduthesis-components}.
%^^A!
%
% \begin{table}[ht]
%   \caption{\cls{fduthesis} ���������������������}
%   \label{tab:fduthesis-components}
%   \centering
%   \small
%   \begin{tabular}{ll}
%     \toprule
%       \textbf{������} & \textbf{������������} \\
%     \midrule
%       \file{fduthesis.cls}          & ��������������������� \\
%       \file{fduthesis-en.cls}       & ��������������������� \\
%       \file{fduthesis.def}          & ��������������������������������������������������������������������� \\
%       \file{fdudoc.cls}             & ��������������������� \\
%       \file{fdulogo.sty}            & ������������������������������ \\
%       \file{fudan-emblem.pdf}       & ������ \\
%       \file{fudan-emblem-new.pdf}   & ��������������������� \\
%       \file{fudan-name.pdf}         & ������������ \\
%       \file{README.md}              & ������������ \\
%       \ifdefined\FDUCODEDOC
%         \file{fduthesis.pdf}        & ������������������ \\
%         \file{fduthesis-en.pdf}     & ������������������ \\
%         \file{fduthesis-code.pdf}   & ��������������������������������� \\
%       \else
%         \file{fduthesis.pdf}        & ��������������������������������� \\
%         \file{fduthesis-en.pdf}     & ������������������ \\
%         \file{fduthesis-code.pdf}   & ������������������ \\
%       \fi
%     \bottomrule
%   \end{tabular}
% \end{table}
%^^A! \begin{table}[ht]
%^^A!   \caption{The main components of \cls{fduthesis}}
%^^A!   \label{tab:fduthesis-components}
%^^A!   \centering
%^^A!   \begin{tabular}{lp{24em}}
%^^A!     \toprule
%^^A!       \textbf{Files} & \textbf{Descriptions} \\
%^^A!     \midrule
%^^A!       \file{fduthesis.cls}          & Document class for Chinese thesis. \\
%^^A!       \file{fduthesis-en.cls}       & Document class for English thesis.\\
%^^A!       \file{fduthesis.def}          & Configuration parameters file
%^^A!         for \cls{fduthesis}. Please do \emph{not} modify it. \\
%^^A!       \file{fdudoc.cls}             & Document class for user guides. \\
%^^A!       \file{fdulogo.sty}            & Fudan University's visual identity. \\
%^^A!       \file{fudan-emblem.pdf}       & University emblem. \\
%^^A!       \file{fudan-emblem-new.pdf}   & University emblem (revised version). \\
%^^A!       \file{fudan-name.pdf}         & Figure of university name. \\
%^^A!       \file{README.md}              & The brief introduction. \\
%^^A!       \file{fduthesis.pdf}          & User's guide in Chinese. \\
%^^A!       \file{fduthesis-en.pdf}       & User's guide in English (this
%^^A!         document). \\
%^^A!       \file{fduthesis-code.pdf}     & Code implementation. \\
%^^A!     \bottomrule
%^^A!   \end{tabular}
%^^A! \end{table}
%^^A!
%
% \section{������������}
%^^A! \section{User's guide}
%^^A!
%
% \subsection{������������}
%^^A! \subsection{Getting started}
%^^A!
%
% ������������������������ \TeX{} ��������������������� \cls{fduthesis} ���������������������
%^^A! Here is a minimal \TeX{} file for \cls{fduthesis}:
%^^A+
% \begin{latexexample}[deletetexcs={\documentclass},
%     moretexcs={\chapter},morekeywords={\documentclass},
%     emph={[2]document}]
%   % thesis.tex
%   \documentclass{fduthesis}
%   \begin{document}
%     \chapter{������}
%     \section{Welcome to fduthesis!}
%     ���������\LaTeX{}���
%   \end{document}
% \end{latexexample}
%^^A-
%^^A!
%
% ������ \ref{subsec:������������}~���������������������������������������������������
% ������ 5 ���������������������������������������������������������������������
%^^A! Compile this file under the instructions in
%^^A! subsection~\ref{subsec:compilation}, you will get a 5-page article.
%^^A! Of course, most of it will be blank, as you may predicate.
%^^A!
%
% ���������������������������������������������
%^^A! The English version can be used in the same way:
%^^A+
% \begin{latexexample}[deletetexcs={\documentclass},
%     moretexcs={\chapter},morekeywords={\documentclass},
%     emph={[2]document}]
%   % thesis-en.tex
%   \documentclass{fduthesis-en}
%   \begin{document}
%     \chapter{Welcome}
%     \section{Welcome to fduthesis!}
%     Hello, \LaTeX{}!
%   \end{document}
% \end{latexexample}
%^^A-
% ������������������������������������������������������������������������������������������������
% ������������������
%^^A! The differences between English and Chinese version only
%^^A! live in the main body. Thesis cover, instructors list and
%^^A! declaration page are still printed in Chinese.
%^^A!
%
% \subsection{������������} \label{subsec:������������}
%^^A! \subsection{Compilation} \label{subsec:compilation}
%^^A!
%
% ������������������ \pdfTeX{} ������������������ \XeLaTeX{} ��� \LuaLaTeX{}
% ��������������������� \XeLaTeX{}������������������������������������������������������������
% ������������������������������������
%^^A! \cls{fduthesis} does NOT support \pdfTeX{}. Please use
%^^A! \XeLaTeX{} or \LuaLaTeX{} to compile, and \XeLaTeX{} is
%^^A! recommended. To get the correct table of contents, footnotes
%^^A! and cross-references, you need to compile the source file at
%^^A! least twice.
%^^A!
%
% ������������������������������ \TeX{} ��������������� \file{thesis.tex}���
% ������ \XeLaTeX{} ���������������������������������������
% \begin{shellexample}[morekeywords={xelatex}]
%   xelatex thesis
%   xelatex thesis
% \end{shellexample}
% ��������� \pkg{latexmk}���
% \begin{shellexample}[morekeywords={latexmk},emph={-xelatex}]
%   latexmk -xelatex thesis
% \end{shellexample}
%^^A! In the following example, suppose your \TeX{} source file is
%^^A! \file{thesis.tex}. Please execute the following commands if
%^^A! you want to use \XeLaTeX{}:
%^^A! \begin{shellexample}[morekeywords={xelatex}]
%^^A!   xelatex thesis
%^^A!   xelatex thesis
%^^A! \end{shellexample}
%^^A! You can use \pkg{latexmk} as well:
%^^A! \begin{shellexample}[morekeywords={latexmk},emph={-xelatex}]
%^^A!   latexmk -xelatex thesis
%^^A! \end{shellexample}
%^^A!
%
% ������ \LuaLaTeX{} ���������������������������������������
% \begin{shellexample}[morekeywords={lualatex}]
%   lualatex thesis
%   lualatex thesis
% \end{shellexample}
% ������
% \begin{shellexample}[morekeywords={latexmk},emph={-lualatex}]
%   latexmk -lualatex thesis
% \end{shellexample}
%^^A! \LuaLaTeX{} can be used in a similar way:
%^^A! \begin{shellexample}[morekeywords={lualatex}]
%^^A!   lualatex thesis
%^^A!   lualatex thesis
%^^A! \end{shellexample}
%^^A! or
%^^A! \begin{shellexample}[morekeywords={latexmk},emph={-lualatex}]
%^^A!   latexmk -lualatex thesis
%^^A! \end{shellexample}
%^^A!
%
% \subsection{������������}
%^^A! \subsection{Options of the template}
%^^A!
%
% ���������������������������������������������������������������������������������
% \begin{latexexample}[deletetexcs={\documentclass},
%     morekeywords={\documentclass}]
%   \documentclass(*\oarg{������������}*){fduthesis}
%   \documentclass(*\oarg{������������}*){fduthesis-en}
% \end{latexexample}
%^^A! You can specify some \emph{template options} when loading
%^^A! \cls{fduthesis}:
%^^A! \begin{latexexample}[deletetexcs={\documentclass},
%^^A!     morekeywords={\documentclass}]
%^^A!   \documentclass(*\oarg{options}*){fduthesis}
%^^A!   \documentclass(*\oarg{options}*){fduthesis-en}
%^^A! \end{latexexample}
%^^A!
%
% ������������������������������������������������ \opt{true} ��� \opt{false}
% ���������������������������������\kvopt{\meta{������}}{true} ���������|= true|���
% ���������������
%^^A! Some options are \emph{boolean} --- they only take the value
%^^A! \opt{true} or \opt{false}. For these options, you can
%^^A! abbreviate ``\kvopt{\meta{option}}{true}'' simply to
%^^A! ``\opt{\meta{option}}''.
%^^A!
%
%^^A+
% \begin{function}[added=2018-02-01]{type}
%   \begin{fdusyntax}[emph={[1]type}]
%     type = (*<doctor|master|(bachelor)>*)
%   \end{fdusyntax}
%^^A-
%   ���������������������������������������������������������������������������������������������
%   ���������������
% \end{function}
%^^A!   Choose the type of your thesis. The three options represent
%^^A!   doctoral dissertation, master degree thesis and undergraduate
%^^A!   thesis, respectively.
%^^A! \end{function}
%^^A!
%
% \begin{function}{oneside,twoside}
%   ������������������������������������������ \opt{twoside}���������������������������
%   ���������������������������������������������
% \end{function}
%^^A! \begin{function}{oneside,twoside}
%^^A!   Specify whether single or double sided output should be
%^^A!   generated. \opt{twoside} will be chosen by default. These
%^^A!   option will determine where the new chapters begin and how
%^^A!   the headers display. The option \opt{twoside} does
%^^A!   \emph{not} tell the printer to actually make a two-sided
%^^A!   printout.
%^^A! \end{function}
%^^A!
%
% ������������������\opt{twoside}������������������������������������������������������
% ���������������������������������������������������\opt{oneside}���������������������
% ���������������������������������������������������������������������������������������������
% ���������������
%^^A! If choosing \opt{twoside}, chapters will begin at the odd pages
%^^A! (right hand). However, they will begin at arbitrary pages
%^^A! available when choosing \opt{oneside}. Table of contents,
%^^A! abstract and the list of symbols are considered as chapters and
%^^A! processed in the same way.
%^^A!
%
% ������������������������������������������������������������������������������������������
% ������������������������������������������������������������������������������������������������
% ������������������������������������������������������������
% ���������������������������������������������������������������������������������������������
% ���������������������������������������������������������������������������������������������
%^^A! At two-sided mode, left headers on the even pages (left hand)
%^^A! in \emph{main body} will show the title of chapters, while the
%^^A! right headers on the odd pages (right hand) will show the
%^^A! title of sections. Headers in \emph{front matter} have the
%^^A! same style, but they will only show the title as ``Contents'',
%^^A! ``Abstract'', etc.
%^^A!
%^^A! At one-sided mode, both left and right headers on \emph{all}
%^^A! pages in main body will be shown. The text is the title of
%^^A! chapters and sections, respectively. In front matter, there
%^^A! are only middle headers, which show the corresponding titles.
%^^A!
%
% \begin{function}{draft}
%   \begin{fdusyntax}[emph={[1]draft}]
%     draft = (*<\TFF>*)
%   \end{fdusyntax}
%   ������������������������������������������������
% \end{function}
%^^A! \begin{function}{draft}
%^^A!   \begin{fdusyntax}[emph={[1]draft}]
%^^A!     draft = (*<\TFF>*)
%^^A!   \end{fdusyntax}
%^^A!   Enable draft mode. Default off.
%^^A! \end{function}
%^^A!
%
% ������������������������������������������������������������������������
% ������������������������������������
% \begin{itemize}
%   \item ���������������������������������������������
%   \item ������������������������������������������������������
%   \item ��������������������������������������� PDF ���������
%   \item ���������������������
% \end{itemize}
%^^A! \opt{draft} is a global option and will affect many packages.
%^^A! You may notice the following changes when using \opt{draft}:
%^^A! \begin{itemize}
%^^A!   \item Lines with overfull \tn{hbox}'s will be marked with
%^^A!     a thick black square on the right margin.
%^^A!   \item Will not include graphics files actually, but instead
%^^A!     print a box of the size the graphic would take up, as well
%^^A!     as the file name.
%^^A!   \item Will not make hyperlinks and PDF bookmarks.
%^^A!   \item Show the page frames.
%^^A! \end{itemize}
%^^A!
%
% \begin{function}[added=2018-01-31]{config}
%   \begin{fdusyntax}[emph={[1]config}]
%     config = (*\marg{������}*)
%   \end{fdusyntax}
%   ���������������������������������������������������������������������������������
% \end{function}
%^^A! \begin{function}[added=2018-01-31]{config}
%^^A!   \begin{fdusyntax}[emph={[1]config}]
%^^A!     config = (*\marg{file}*)
%^^A!   \end{fdusyntax}
%^^A!   File name of user profile. Default value is empty, so no
%^^A!   profile is loaded automatically.
%^^A! \end{function}
%^^A!
%
% \subsection{������������}
%^^A! \subsection{More options}
%^^A!
%
% \begin{function}{\fdusetup}
%   \begin{fdusyntax}[morekeywords={\fdusetup}]
%     \fdusetup(*\marg{������������}*)
%   \end{fdusyntax}
%   ������������������������������������������������������������������������������������������
%   ��������������������������������������� \cs{fdusetup} ������������
% \end{function}
%^^A! \begin{function}{\fdusetup}
%^^A!   \begin{fdusyntax}[morekeywords={\fdusetup}]
%^^A!     \fdusetup(*\marg{key-value list}*)
%^^A!   \end{fdusyntax}
%^^A!   \cls{fduthesis} has provided a number of options, which
%^^A!   can be given via the general command \cs{fdusetup}.
%^^A! \end{function}
%^^A!
%
% \cs{fdusetup} ���������������������������������������������������������������������������
% ��������������� \kvopt{\meta{key}}{\meta{value}} ���������������������������
% \meta{value} ������������������������������������������������������������������������������
% ������������������������������\textbf{������}������������������
%^^A! The argument of \cs{fdusetup} is a set of comma-separated option list.
%^^A! The options usually have the form of \kvopt{\meta{key}}{\meta{value}}
%^^A! and in some cases \meta{value} can be omitted.
%^^A! For the same option, the values given later will override the
%^^A! the previous ones. Default values are indicated in
%^^A! \textbf{boldface} in the following descriptions.
%^^A!
%
% \cs{fdusetup} ������ \LaTeX3 ������������������������������������������������������
% ���������������������������������������������|=|���������������������������������������������������
% ���������������������������������������
%^^A! \cs{fdusetup} follows \LaTeX3 key-value style, and different
%^^A! types as well as various levels options are supported. In the
%^^A! key-value list, spaces around ``|=|'' will be trimmed; however,
%^^A! blank lines should never appear in the argument.
%^^A!
%
% ������������������������������������������������������ \kvopt{\meta{������}}{true}
% ���������\kvopt{}{true}������
%^^A! Similar with template options, ``\kvopt{\meta{option}}{true}''
%^^A! can be abbreviated to \opt{\meta{option}} for boolean type.
%^^A!
%
% ��������������������������������������� \opt{style} ��� \opt{info} ������������������
% ���������������������������������������
%^^A! Some options, such as \opt{style} and \opt{info}, may have
%^^A! sub-options. They can be set by the following two equivalent
%^^A! methods:
%^^A+
% \begin{latexexample}[morekeywords={\fdusetup},
%     emph={[1]style,cjk-font,font-size,info,title,title*,author,author*,department}]
%   \fdusetup{
%     style = {cjk-font = adobe, font-size = -4},
%     info  = {
%       title      = {������������������������},
%       title*     = {On the Electrodynamics of Moving Bodies},
%       author     = {��������������������������},
%       author*    = {Albert Einstein},
%       department = {������������}
%     }
%   }
% \end{latexexample}
%^^A-
% ������
%^^A! or
%^^A+
% \begin{latexexample}[morekeywords={\fdusetup},
%     emph={[1]style,cjk-font,font-size,info,title,title*,author,author*,department}]
%   \fdusetup{
%     style/cjk-font  = adobe,
%     style/font-size = -4,
%     info/title      = {������������������������},
%     info/title*     = {On the Electrodynamics of Moving Bodies},
%     info/author     = {��������������������������},
%     info/author*    = {Albert Einstein},
%     info/department = {������������}
%   }
% \end{latexexample}
%^^A-
%^^A!
%
% ������ ���|/|��� ������������������������������������������
%^^A! Note that you may \emph{not} put spaces around ``|/|''.
%^^A!
%
% \subsubsection{������������} \label{subsubsec:������������}
%^^A! \subsubsection{Style and format} \label{subsubsec:style-and-format}
%^^A!
%
% \begin{function}{style}
%   \begin{fdusyntax}[emph={[1]style}]
%     style = (*\marg{������������}*)
%     style/(*\meta{key}*) = (*\meta{value}*)
%   \end{fdusyntax}
%   ���������������������������������������������������������������������������������
% \end{function}
%^^A! \begin{function}{style}
%^^A!   \begin{fdusyntax}[emph={[1]style}]
%^^A!     style = (*\marg{key-value list}*)
%^^A!     style/(*\meta{key}*) = (*\meta{value}*)
%^^A!   \end{fdusyntax}
%^^A!   This general option is for setting the thesis style and format.
%^^A!   See the following details.
%^^A! \end{function}
%^^A!
%
%^^A+
% \begin{function}[updated=2019-03-05]{style/font}
%   \begin{fdusyntax}[emph={[1]font}]
%     font = (*<garamond|libertinus|lm|palatino|(times)|times*|none>*)
%   \end{fdusyntax}
%^^A-
%   ���������������������������������������������������������������~\ref{tab:font}���
% \end{function}
%^^A!   Set fonts (including math fonts). The details can be found in table~\ref{tab:font}.
%^^A! \end{function}
%^^A!
%
% \begin{table}[ht]
% \centering
% \begin{threeparttable}
%   \caption{������������������}
%   \label{tab:font}
%   \small
%   \begin{tabular}{ccccc}
%     \toprule
%       & \textbf{������������} & \textbf{���������������} & \textbf{������������} & \textbf{������������} \\
%     \midrule
%       |garamond|        & EB Garamond         & Libertinus Sans & LM Mono\tnote{a} & Garamond Math   \\
%       |libertinus|      & Libertinus Serif    & Libertinus Sans & LM Mono          & Libertinus Math \\
%       |lm|              & LM Roman            & LM Sans         & LM Mono          & LM Math         \\
%       |palatino|        & TG Pagella\tnote{b} & Libertinus Sans & LM Mono          & TG Pagella Math \\
%       |times|           & XITS                & TG Heros        & TG Cursor        & XITS Math       \\
%       |times*|\tnote{c} & Times New Roman     & Arial           & Courier New      & XITS Math       \\
%     \bottomrule
%   \end{tabular}
%   \begin{tablenotes}
%     \item[a] ���LM������ Latin Modern ������������
%     \item[b] ���TG������ TeX Gyre ������������
%     \item[c] ������������Times New Roman���Arial ��� Courier New ������������������
%       ������������ \TeXLive{} ��������������������� Windows ��� macOS ���������������������������
%   \end{tablenotes}
% \end{threeparttable}
% \end{table}
%^^A! \begin{table}[ht]
%^^A! \begin{threeparttable}
%^^A!   \caption{Font configuration}
%^^A!   \label{tab:font}
%^^A!   \centering
%^^A!   \begin{tabular}{ccccc}
%^^A!     \toprule
%^^A!       & \textbf{Roman} & \textbf{Sans-serif} & \textbf{Monospaced} & \textbf{Math} \\
%^^A!     \midrule
%^^A!       |garamond|        & EB Garamond         & Libertinus Sans & LM Mono\tnote{a} & Garamond Math   \\
%^^A!       |libertinus|      & Libertinus Serif    & Libertinus Sans & LM Mono          & Libertinus Math \\
%^^A!       |lm|              & LM Roman            & LM Sans         & LM Mono          & LM Math         \\
%^^A!       |palatino|        & TG Pagella\tnote{b} & Libertinus Sans & LM Mono          & TG Pagella Math \\
%^^A!       |times|           & XITS                & TG Heros        & TG Cursor        & XITS Math       \\
%^^A!       |times*|\tnote{c} & Times New Roman     & Arial           & Courier New      & XITS Math       \\
%^^A!     \bottomrule
%^^A!   \end{tabular}
%^^A!   \begin{tablenotes}
%^^A!     \item[a] ``LM'' is the abbreviation of Latin Modern.
%^^A!     \item[b] ``TG'' is the abbreviation of TeX Gyre.
%^^A!     \item[c] Here, Times New Roman, Arial and Courier New are commercial fonts. They are
%^^A!       installed on Windows and macOS by default.
%^^A!   \end{tablenotes}
%^^A! \end{threeparttable}
%^^A! \end{table}
%
%^^A+
% \begin{function}[rEXP,updated=2019-03-05]{style/cjk-font}
%   \begin{fdusyntax}[emph={[1]cjk-font}]
%     cjk-font = (*<adobe|(fandol)|founder|mac|sinotype|sourcehan|windows|none>*)
%   \end{fdusyntax}
%^^A-
%   ���������������������������������������~\ref{tab:cjk-font}���
% \end{function}
%^^A!   Set CJK (Chinese, Japanese and Korean) fonts. The details can be found in
%^^A!   table~\ref{tab:cjk-font}.
%^^A! \end{function}
%^^A!
%
% \begin{table}[ht]
%   \caption{������������������}
%   \label{tab:cjk-font}
%   \centering
%   \small
%   \begin{tabular}{ccccc}
%     \toprule
%       & \textbf{������������������������} & \textbf{���������������������������} & \textbf{������������������������} & \textbf{������} \\
%     \midrule
%       |adobe|     & Adobe ������      & Adobe  ������     & Adobe  ������  & Adobe ������      \\
%       |fandol|    & Fandol ������     & Fandol ������     & Fandol ������  & Fandol ������     \\
%       |founder|   & ������������        & ������������        & ������������     & ������������        \\
%       |mac|       & ������������������-��� & ������������������-��� & ������������     & ������������������-��� \\
%       |sinotype|  & ������������        & ������������        & ������������     & ������������        \\
%       |sourcehan| & ������������        & ������������        & ---          & ---             \\
%       |windows|   & ������������������    & ������������������    & ������������������ & ������������������    \\
%     \bottomrule
%   \end{tabular}
% \end{table}
%^^A! \begin{table}[ht]
%^^A!   \caption{CJK font configuration}
%^^A!   \label{tab:cjk-font}
%^^A!   \centering
%^^A!   \begin{tabular}{cccc}
%^^A!     \toprule
%^^A!       & \textbf{Roman (song)} & \textbf{Sans-serif (hei)} & \textbf{Monospaced (fang)} \\
%^^A!     \midrule
%^^A!       |adobe|     & Adobe Song Std      & Adobe Heiti Std    & Adobe Fangsong Std \\
%^^A!       |fandol|    & FandolSong          & FandolHei          & FandolFang         \\
%^^A!       |founder|   & FZShuSong-Z01       & FZHei-B01          & FZFangSong-Z02     \\
%^^A!       |mac|       & Songti SC           & Heiti SC           & STFangsong         \\
%^^A!       |sinotype|  & STSong              & STHeiti            & STFangsong         \\
%^^A!       |sourcehan| & Source Han Serif SC & Source Han Sans SC & ---                \\
%^^A!       |windows|   & SimSun              & SimHei             & FangSong           \\
%^^A!     \bottomrule
%^^A!   \end{tabular}
%^^A! \end{table}
%^^A!
%
% ������ \kvopt{font}{none} ��� \kvopt{cjk-font}{none} ������������������������
% ������������ / ��������������������������������������������������� \cs{setmainfont}���
% \cs{setCJKmainfont}���\cs{setmathfont} ���������������������������
%^^A! When you choose \kvopt{font}{none} or \kvopt{cjk-font}{none},
%^^A! \cls{fduthesis} will disable the default western/CJK font
%^^A! settings. You may use \cs{setmainfont}, \cs{setCJKmainfont}
%^^A! and \cs{set\-math\-font}, etc.\ to configure the fonts manually.
%^^A!
%
%^^A+
% \begin{function}{style/font-size}
%   \begin{fdusyntax}[emph={[1]font-size}]
%     font-size = (*<(-4)|5>*)
%   \end{fdusyntax}
%^^A-
%   ������������������������������
% \end{function}
%^^A!   Specify the basic font size in your thesis.
%^^A! \end{function}
%^^A!
%
%^^A+
% \begin{function}[rEXP,updated=2017-10-14]{style/fullwidth-stop}
%   \begin{fdusyntax}[emph={[1]fullwidth-stop}]
%     fullwidth-stop = (*<catcode|mapping|(false)>*)
%   \end{fdusyntax}
%^^A-
%   ���������������������������������\FSFW ������������������������������
%   ���������������������������������������������������������������$_o$���������$_0$������������
% \end{function}
%^^A!   Let full-width full stop ``\FSFW'' as the default full stop.
%^^A!   Generally, this punctuation is used for scientific articles,
%^^A!   where ``\FSID'' is easily to be confused with subscript
%^^A!   ``$_o$'' or ``$_0$''.
%^^A! \end{function}
%^^A!
%
% ������ \kvopt{fullwidth-stop}{catcode} ��� \opt{mapping} ���������������������������������
% ������������������������������ \opt{catcode} ������������\emph{���������}\FSID ������������
% ���\FSFW��������������� \opt{mapping} ������\emph{���������}\FSID ���������������������������
% ������������������������������������\FSID ��������������������������� \opt{catcode} ������������
% ���\FSID ���������������������\FSFW���
%^^A! If you choose \kvopt{fullwidth-stop}{catcode}, only
%^^A! \emph{explicit} ``\FSID'' will be replaced by ``\FSFW''; when
%^^A! choosing \kvopt{fullwidth-stop}{mapping}, however, \emph{all}
%^^A! the ``\FSID'' will be replaced.
%^^A!
%
% ������ \kvopt{fullwidth-stop}{mapping} ������ \XeTeX{} ������������������
% \LuaTeX{} ������������������������������ \kvopt{fullwidth-stop}{catcode}���
%^^A! \opt{mapping} is valid only under \XeTeX{}. When compiling
%^^A! with \LuaTeX{}, it is equivalent to \opt{catcode}.
%^^A!
%
% ������������������ \kvopt{fullwidth-stop}{mapping} ������������������������\FSID���
% ������������������������������
% \begin{latexexample}[moretexcs={\CJKfontspec},emph={[1]Mapping}]
%   % ��������� XeTeX ������
%   % ������������������������������
%   ������������������{\CJKfontspec{(*\meta{���������}*)}[Mapping=full-stop]���}
% \end{latexexample}
%^^A! If you want to display ``\FSID'' temporarily after setting
%^^A! \kvopt{fullwidth-stop}{mapping}, the following code snippet
%^^A! will be helpful:
%^^A! \begin{latexexample}[moretexcs={\CJKfontspec},emph={[1]Mapping}]
%^^A!   % Compiled with XeTeX
%^^A!   % The outside braces is used for group
%^^A!   ������������������{\CJKfontspec{(*\meta{font name}*)}[Mapping=full-stop]���}
%^^A! \end{latexexample}
%^^A!
%
% \begin{function}{style/footnote-style}
%^^A ������������������������������������������������fdusyntax ������������������������
%^^A ������������������������ . ������������
%   \begin{fdusyntax}[emph={[1]footnote-style}]
%     footnote-style = (*<plain|\\
%       ......\mbox{}~~~~~~~~~~~~~~~~~libertinus|libertinus*|libertinus-sans|\\
%       ......\mbox{}~~~~~~~~~~~~~~~~~pifont|pifont*|pifont-sans|pifont-sans*|\\
%       ......\mbox{}~~~~~~~~~~~~~~~~~xits|xits-sans|xits-sans*>*)
%   \end{fdusyntax}
%   ���������������������������������������������������������������������������
%   ���~\ref{tab:footnote-font}���������������������������������������������������
%   ��������� \opt{font} ��������������������� |sans| ������������������������������
%   ��������������� |*| ������������������������������������������
% \end{function}
%^^A! \begin{function}{style/footnote-style}
%^^A!   \begin{fdusyntax}[emph={[1]footnote-style}]
%^^A!     footnote-style = (*<plain|\\
%^^A!       ....\mbox{}~~~~~~~~~~~~~~~~~libertinus|libertinus*|libertinus-sans|\\
%^^A!       ....\mbox{}~~~~~~~~~~~~~~~~~pifont|pifont*|pifont-sans|pifont-sans*|\\
%^^A!       ....\mbox{}~~~~~~~~~~~~~~~~~xits|xits-sans|xits-sans*>*)
%^^A!   \end{fdusyntax}
%^^A!   Set the style of footnote numbers. Note that western fonts
%^^A!   will affect its default value (see table~\ref{tab:footnote-font}),
%^^A!   so you may put it after |font| option. The one with |sans|
%^^A!   is for the corresponding sans-serif version, while |*|
%^^A!   for white on black version.
%^^A! \end{function}
%^^A!
%
% \begin{table}[ht]
%   \caption{���������������������������������������������������������}
%   \label{tab:footnote-font}
%   \centering
%   \small
%   \begin{tabular}{ccccc}
%     \toprule
%       \textbf{������������������} &
%         |libertinus| & |lm|     & |palatino| & |times| \\
%     \midrule
%       \textbf{���������������������������} &
%         |libertinus| & |pifont| & |pifont|   & |xits|  \\
%     \bottomrule
%   \end{tabular}
% \end{table}
%^^A! \begin{table}[ht]
%^^A!   \caption{Relationship between option \opt{font} and the
%^^A!     default value of \opt{footnote-style}}
%^^A!   \label{tab:footnote-font}
%^^A!   \centering
%^^A!   \begin{tabular}{ccccc}
%^^A!     \toprule
%^^A!       \textbf{Western fonts settings} &
%^^A!         |libertinus| & |lm|     & |palatino| & |times| \\
%^^A!     \midrule
%^^A!       \textbf{Default value of footnote number style} &
%^^A!         |libertinus| & |pifont| & |pifont|   & |xits|  \\
%^^A!     \bottomrule
%^^A!   \end{tabular}
%^^A! \end{table}
%^^A!
%
%^^A+
% \begin{function}[added=2017-08-13]{style/hyperlink}
%   \begin{fdusyntax}[emph={[1]hyperlink}]
%     hyperlink = (*<border|(color)|none>*)
%   \end{fdusyntax}
%^^A-
%   ������������������������\opt{border} ���������������������������������������
%   \opt{color} ���������������������������������\opt{none} ���������������������������
%   ������������������������������������������
% \end{function}
%^^A!   Set the style of hyperlinks. \opt{border} draws borders around
%^^A!   hyperlinks; \opt{color} displays hyperlinks in colorful text;
%^^A!   \opt{none} leads to plain text, which is useful when printing
%^^A!   the final document.
%^^A! \end{function}
%^^A!
%
% \begin{function}[added=2017-08-13,updated=2021-12-27]{style/hyperlink-color}
%   \begin{fdusyntax}[emph={[1]hyperlink-color}]
%     hyperlink-color = (*<(default)|classic|material|graylevel|prl>*)
%   \end{fdusyntax}
%   ������������������������������������ \kvopt{hyperlink}{none} ������������
%   ���������������������������������~\ref{tab:hyperlink-color}���
% \end{function}
%^^A! \begin{function}[added=2017-08-13,updated=2021-12-27]{style/hyperlink-color}
%^^A!   \begin{fdusyntax}[emph={[1]hyperlink-color}]
%^^A!     hyperlink-color = (*<(default)|classic|material|graylevel|prl>*)
%^^A!   \end{fdusyntax}
%^^A!   Set the color of hyperlinks. It is invalid if
%^^A!   \kvopt{hyperlink}{none}. The related colors can be found
%^^A!   in table~\ref{tab:hyperlink-color}.
%^^A! \end{function}
%^^A!
%
%^^A+
% \begin{table}[ht]
% \centering
% \small
%^^A-
% \newcommand\linkcolorexam[3]{^^A
%   {\small ���~\textcolor[HTML]{#1}{1-2}���
%     (\textcolor[HTML]{#1}{3.4})~���} &
%   {\small \textcolor[HTML]{#2}{\texttt{https://g.cn}}} &
%   {\small ������~[\textcolor[HTML]{#3}{1}]���
%     (\textcolor[HTML]{#3}{Knuth~1986})}}
%^^A! \newcommand\linkcolorexam[3]{%
%^^A!   {\small Fig.~\textcolor[HTML]{#1}{1-2}���
%^^A!     Eq.~(\textcolor[HTML]{#1}{3.4})} &
%^^A!   {\small \textcolor[HTML]{#2}{\texttt{http://g.cn}}} &
%^^A!   {\small Ref.~[\textcolor[HTML]{#3}{1}]���
%^^A!     (\textcolor[HTML]{#3}{Knuth~1986})}}
% \begin{threeparttable}
% \caption{���������������������������������}
% \label{tab:hyperlink-color}
%^^A! \begin{threeparttable}
%^^A! \caption{Pre-defined hyperlink color schemes}
%^^A! \label{tab:hyperlink-color}
% \begin{tabular}{c*{3}{>{\hspace{0.2cm}}c<{\hspace{0.2cm}}}}
%   \toprule
%     \textbf{������} & \textbf{������} & \textbf{URL} & \textbf{������} \\
%^^A! \begin{tabular}{c*{3}{>{\hspace{0.2cm}}c<{\hspace{0.2cm}}}}
%^^A!   \toprule
%^^A!     \textbf{Options} & \textbf{Cross references} & \textbf{URL} & \textbf{Citation} \\
%^^A+
%   \midrule
%     \opt{default}            & \linkcolorexam{990000}{0000B2}{007F00} \\
%     \opt{classic}            & \linkcolorexam{FF0000}{0000FF}{00FF00} \\
%     \opt{material}\tnote{a}  & \linkcolorexam{E91E63}{009688}{4CAF50} \\
%     \opt{graylevel}\tnote{a} & \linkcolorexam{616161}{616161}{616161} \\
%     \opt{prl}\tnote{b}       & \linkcolorexam{2D3092}{2D3092}{2D3092} \\
%   \bottomrule
% \end{tabular}
% \begin{tablenotes}
%^^A-
%   \item[a] ������ Material ������������
%     ������ \url{https://material.io/guidelines/style/color.html}������
%   \item[b] \textit{Physical Review Letter} ���������������
%^^A!   \item[a] Material Design color palette
%^^A!     (See \url{https://material.io/guidelines/style/color.html}).
%^^A!   \item[b] \textit{Physical Review Letter} magazine.
%^^A+
% \end{tablenotes}
% \end{threeparttable}
% \end{table}
%^^A-
%^^A!
%
%^^A+
% \begin{function}[added=2018-01-25,updated=2023-05-11]{style/bib-backend}
%   \begin{fdusyntax}[emph={[1]bib-backend}]
%     bib-backend = (*<bibtex|biblatex>*)
%   \end{fdusyntax}
%^^A-
%   ������������������������������������������ \opt{bibtex} ��������������� \BibTeX{}
%   ������������������������ \pkg{natbib} ��������������������� \opt{biblatex} ������
%   ��������� \biber{} ��������������������������� \pkg{biblatex} ���������������
%   ���������������������������������������������������������������������
% \end{function}
%^^A!   Specify the backend or driver of bibliography processing.
%^^A!   \BibTeX{} and \pkg{natbib} package will be used if you choose
%^^A!   \opt{bibtex}, while \biber{} and \pkg{biblatex} will be used
%^^A!   if you choose \opt{biblatex}. If not specified, the citations
%^^A!   and references will not be processed.
%^^A! \end{function}
%^^A!
%
% \begin{function}[added=2017-10-28,updated=2018-01-25]{style/bib-style}
%   \begin{fdusyntax}[emph={[1]bib-style}]
%     bib-style = (*<author-year|(numerical)|\meta{������������}>*)
%   \end{fdusyntax}
%   ���������������������������\opt{author-year} ��� \opt{numerical} ������������
%   ������������ GB/T 7714--2015 \cite{gb-t-7714-2015} ������������������������������
%   ������������������������ \meta{������������} ������������ \kvopt{bib-backend}{bibtex}���
%   ������������������ \file{.bst} ������������������������������������
%   \kvopt{bib-backend}{biblatex}������������������������ \file{.bbx} ������������
%   ���������������
% \end{function}
%^^A! \begin{function}[added=2017-10-28,updated=2018-01-25]{style/bib-style}
%^^A!   \begin{fdusyntax}[emph={[1]bib-style}]
%^^A!     bib-style = (*<author-year|(numerical)|\meta{other style}>*)
%^^A!   \end{fdusyntax}
%^^A!   Set the style of bibliography. \opt{author-year} and
%^^A!   \opt{numerical} will follow the standard GB/T 7714--2015.
%^^A!   By setting \kvopt{bib-style}{\meta{other style}}, you can use
%^^A!   other bibliography style (\file{.bst} file for
%^^A!   \kvopt{bib-backend}{bibtex} and \file{.bbx} file for
%^^A!   \kvopt{bib-backend}{biblatex}). Suffix is not needed.
%^^A! \end{function}
%^^A!
%
% \begin{function}[added=2018-01-25]{style/cite-style}
%   \begin{fdusyntax}[emph={[1]cite-style}]
%     cite-style = (*\marg{������������}*)
%   \end{fdusyntax}
%   ���������������������������������������������������������������������������������������������
%   ������������������������������������������������������������������ \file{.cbx} ������������
%   ��������������������������� \kvopt{bib-backend}{bibtex} ������������
% \end{function}
%^^A! \begin{function}[added=2018-01-25]{style/cite-style}
%^^A!   \begin{fdusyntax}[emph={[1]cite-style}]
%^^A!     cite-style = (*\marg{style}*)
%^^A!   \end{fdusyntax}
%^^A!   Select citation style. Default value is empty, which means
%^^A!   the citation style will follow your bibliography style
%^^A!   (author-year or numeric). If you want change the citation
%^^A!   style, the corresponding \file{.cbx} file must be available.
%^^A!   This option is invalid when \kvopt{bib-backend}{bibtex}.
%^^A! \end{function}
%^^A!
%
% \begin{function}[added=2018-01-25]{style/bib-resource}
%   \begin{fdusyntax}[emph={[1]bib-resource}]
%     bib-resource = (*\marg{������}*)
%   \end{fdusyntax}
%   ���������������������������������������������������������������������������������������������������
%   ������ \kvopt{bib-backend}{biblatex}������������������������ \file{.bib}
%   ������������
% \end{function}
%^^A! \begin{function}[added=2018-01-25]{style/bib-resource}
%^^A!   \begin{fdusyntax}[emph={[1]bib-resource}]
%^^A!     bib-resource = (*\marg{bib file\symbol{"28}s\symbol{"29}}*)
%^^A!   \end{fdusyntax}
%^^A!   Specify the bibliography database (usually in \file{.bib}
%^^A!   format). If using more than one files, the file names should
%^^A!   be separated with comma. When \kvopt{bib-backend}{biblatex},
%^^A!   you must type in the ``\file{.bib}'' suffix.
%^^A! \end{function}
%^^A!
%
% \begin{function}[added=2017-08-10]{style/logo}
%   \begin{fdusyntax}[emph={[1]logo}]
%     logo = (*\marg{������}*)
%   \end{fdusyntax}
%   ������������������������������������������������ \file{fudan-name.pdf}���
% \end{function}
%^^A! \begin{function}[added=2017-08-10]{style/logo}
%^^A!   \begin{fdusyntax}[emph={[1]logo}]
%^^A!     logo = (*\marg{file}*)
%^^A!   \end{fdusyntax}
%^^A!   File name of the logo in thesis cover. Default value is
%^^A!   \file{fudan-name.pdf}.
%^^A! \end{function}
%^^A!
%
% \begin{function}[added=2017-08-10]{style/logo-size}
%   \begin{fdusyntax}[emph={[1]logo-size}]
%     logo-size = (*\marg{������}*)
%     logo-size = {(*\meta{������}*), (*\meta{������}*)}
%   \end{fdusyntax}
%   ������������������������������������������������������ |0.5\textwidth|\/���
%   ��������������������������������� \meta{������} ��������������������������� |{}|���
% \end{function}
%^^A! \begin{function}[added=2017-08-10]{style/logo-size}
%^^A!   \begin{fdusyntax}[emph={[1]logo-size}]
%^^A!     logo-size = (*\marg{width}*)
%^^A!     logo-size = {(*\meta{width}*), (*\meta{height}*)}
%^^A!   \end{fdusyntax}
%^^A!   Size of the logo. By default, only width is set to
%^^A!   |0.5\textwidth|. To set height only, you can put an
%^^A!   empty group ``|{}|'' at \meta{width}.
%^^A! \end{function}
%^^A!
%
%^^A+
% \begin{function}[added=2017-07-06]{style/auto-make-cover}
%   \begin{fdusyntax}[emph={[1]auto-make-cover}]
%     auto-make-cover = (*<\TTF>*)
%   \end{fdusyntax}
%^^A-
%   ������������������������������������������������������������������������������������
%   ������������������������������������������������������������ \cs{fdusetup} ���������
%   ��������������� \ref{subsubsec:������������}~������
% \end{function}
%^^A!   Whether generate thesis cover, list of instructors (inside
%^^A!   front cover) and declaration page (inside back cover)
%^^A!   automatically. Entries in the cover can be specified also
%^^A!   via \cs{fdusetup}, and you can find more details in
%^^A!   subsubsection~\ref{subsubsec:information}.
%^^A! \end{function}
%^^A!
%
% \begin{function}[added=2021-09-21]{style/declaration-page}
%   \begin{fdusyntax}[emph={[1]declaration-page}]
%     declaration-page = (*\marg{������}*)
%   \end{fdusyntax}
%   ��������������������������� PDF ���������������������������������������������������������������������������
% \end{function}
%^^A! \begin{function}[added=2021-09-21]{style/declaration-page}
%^^A!   \begin{fdusyntax}[emph={[1]declaration-page}]
%^^A!     declaration-page = (*\marg{file}*)
%^^A!   \end{fdusyntax}
%^^A!   Insert the scanned declaration page PDF file. If empty (default),
%^^A!   then the pre-defined declaration page will be inserted.
%^^A! \end{function}
%^^A!
%
% \begin{function}{\makecoveri,\makecoverii,\makecoveriii}
%   ���������������������������������������������������������������������������������������������
%   ������������������������������������������������������������������������������������������������
% \end{function}
%^^A! \begin{function}{\makecoveri,\makecoverii,\makecoveriii}
%^^A!   For generating thesis cover, list of instructors and
%^^A!   declaration page manually. These commands cannot guarantee
%^^A!   the correct page numbers, hence you should always use the
%^^A!   auto-generated thesis cover unless necessary.
%^^A! \end{function}
%^^A!
%
% \subsubsection{������������} \label{subsubsec:������������}
%^^A! \subsubsection{Personal information} \label{subsubsec:information}
%^^A!
%
% \begin{function}{info}
%   \begin{fdusyntax}[emph={[1]info}]
%     info = (*\marg{������������}*)
%     info/(*\meta{key}*) = (*\meta{value}*)
%   \end{fdusyntax}
%   ���������������������������������������������������������������������������������������������|*|���
%   ���������������������������������������
% \end{function}
%^^A! \begin{function}{info}
%^^A!   \begin{fdusyntax}[emph={[1]info}]
%^^A!     info = (*\marg{key-value list}*)
%^^A!     info/(*\meta{key}*) = (*\meta{value}*)
%^^A!   \end{fdusyntax}
%^^A!   This general option is for entering your personal information.
%^^A!   See the following details. Note that options with ``|*|'' are
%^^A!   the corresponding English items.
%^^A! \end{function}
%^^A!
%
%^^A+
% \begin{function}[added=2018-02-01,updated=2019-03-12]{info/degree}
%   \begin{fdusyntax}[emph={[1]degree}]
%     degree = (*<(academic)|professional>*)
%   \end{fdusyntax}
%^^A-
%   ���������������������������������������������������������\opt{academic} ��� \opt{professional}
%   ������������������������������������������
% \end{function}
%^^A!   Degree type. This option can only be used in master degree
%^^A!   thesis.
%^^A! \end{function}
%^^A!
%
% \begin{function}{info/title,info/title*}
%   \begin{fdusyntax}[emph={[1]title,title*}]
%     title  = (*\marg{������������}*)
%     title* = (*\marg{������������}*)
%   \end{fdusyntax}
%   ������������������������������ 20 ���������������������������������������������������
%   ������������������������������������������������������������������������������|\\|���
%   ���������������
% \end{function}
%^^A! \begin{function}{info/title,info/title*}
%^^A!   \begin{fdusyntax}[emph={[1]title,title*}]
%^^A!     title  = (*\marg{title in Chinese}*)
%^^A!     title* = (*\marg{title in English}*)
%^^A!   \end{fdusyntax}
%^^A!   Title of your thesis. The line width is about \qty{30}{em} by
%^^A!   default, but you may break it with |\\| manually.
%^^A! \end{function}
%^^A!
%
% \begin{function}{info/author,info/author*}
%   \begin{fdusyntax}[emph={[1]author,author*}]
%     author  = (*\marg{������}*)
%     author* = (*\marg{���������������������������}*)
%   \end{fdusyntax}
%   ���������������
% \end{function}
%^^A! \begin{function}{info/author,info/author*}
%^^A!   \begin{fdusyntax}[emph={[1]author,author*}]
%^^A!     author  = (*\marg{name in Chinese}*)
%^^A!     author* = (*\marg{name in English \lparen or Pinyin\rparen}*)
%^^A!   \end{fdusyntax}
%^^A!   Author's name.
%^^A! \end{function}
%^^A!
%
% \begin{function}{info/supervisor}
%   \begin{fdusyntax}[emph={[1]supervisor}]
%     supervisor = (*\marg{������}*)
%   \end{fdusyntax}
%   ���������������
% \end{function}
%^^A! \begin{function}{info/supervisor}
%^^A!   \begin{fdusyntax}[emph={[1]supervisor}]
%^^A!     supervisor = (*\marg{name}*)
%^^A!   \end{fdusyntax}
%^^A!   Supervisor's name.
%^^A! \end{function}
%^^A!
%
% \begin{function}{info/department}
%   \begin{fdusyntax}[emph={[1]department}]
%     department = (*\marg{������}*)
%   \end{fdusyntax}
%   ���������������
% \end{function}
%^^A! \begin{function}{info/department}
%^^A!   \begin{fdusyntax}[emph={[1]department}]
%^^A!     department = (*\marg{name}*)
%^^A!   \end{fdusyntax}
%^^A!   Name of the department.
%^^A! \end{function}
%^^A!
%
% \begin{function}{info/major}
%   \begin{fdusyntax}[emph={[1]major}]
%     major = (*\marg{������}*)
%   \end{fdusyntax}
%   ���������������
% \end{function}
%^^A! \begin{function}{info/major}
%^^A!   \begin{fdusyntax}[emph={[1]major}]
%^^A!     major = (*\marg{name}*)
%^^A!   \end{fdusyntax}
%^^A!   Name of the major.
%^^A! \end{function}
%^^A!
%
% \begin{function}{info/student-id}
%   \begin{fdusyntax}[emph={[1]student-id}]
%     student-id = (*\marg{������}*)
%   \end{fdusyntax}
%   ���������������
% \end{function}
%^^A! \begin{function}{info/student-id}
%^^A!   \begin{fdusyntax}[emph={[1]student-id}]
%^^A!     student-id = (*\marg{number}*)
%^^A!   \end{fdusyntax}
%^^A!   Author's student ID.
%^^A! \end{function}
%^^A!
%
% ��������������������� 11 ������������������������������������������������������������
% ��������������������� 1��������������� 2��������������� 3���������������������������
% ������������������������������������������
%^^A! In Fudan University, student ID has 11 digits. The first two
%^^A! are the year of attendance; next one represents the student's
%^^A! type (1 for doctor, 2 for master and 3 for bachelor); the
%^^A! following five digits are major ID while the last three are
%^^A! serial number.
%^^A!
%
% \begin{function}{info/school-id}
%   \begin{fdusyntax}[emph={[1]school-id}]
%     school-id = (*\marg{������}*)
%   \end{fdusyntax}
%   ��������������������������� 10246������������������������������������������
% \end{function}
%^^A! \begin{function}{info/school-id}
%^^A!   \begin{fdusyntax}[emph={[1]school-id}]
%^^A!     school-id = (*\marg{number}*)
%^^A!   \end{fdusyntax}
%^^A!   School ID. Default value is 10246 (school ID of Fudan University).
%^^A! \end{function}
%^^A!
%
% \begin{function}{info/date}
%   \begin{fdusyntax}[emph={[1]date}]
%     date = (*\marg{������}*)
%   \end{fdusyntax}
%   ������������������������������������������������������\tn{today}������
% \end{function}
%^^A! \begin{function}{info/date}
%^^A!   \begin{fdusyntax}[emph={[1]date}]
%^^A!     date = (*\marg{date}*)
%^^A!   \end{fdusyntax}
%^^A!   Finish date of your thesis. Default value is the compilation
%^^A!   date (\tn{today}).
%^^A! \end{function}
%^^A!
%
%^^A+
% \begin{function}[added=2017-07-04]{info/secret-level}
%   \begin{fdusyntax}[emph={[1]secret-level}]
%     secret-level = (*<(none)|i|ii|iii>*)
%   \end{fdusyntax}
%^^A-
%   ���������\opt{i}���\opt{ii}���\opt{iii} ���������������������������������������
%   \opt{none} ������������������������������������������������������������
% \end{function}
%^^A!   Secret level. \opt{i}, \opt{ii} and \opt{iii} means
%^^A!   ``������'' (secret), ``������'' (confidential) and ``������''
%^^A!   (top secret) respectively. \opt{none} means your thesis is
%^^A!   not secret-related and secret level and year will not be
%^^A!   shown.
%^^A! \end{function}
%^^A!
%
% \begin{function}[added=2017-07-04]{info/secret-year}
%   \begin{fdusyntax}[emph={[1]secret-year}]
%     secret-year = (*\marg{������}*)
%   \end{fdusyntax}
%   ���������������������������������������������������������������������������
%   \kvopt{secret-level}{none} ������������
% \end{function}
%^^A! \begin{function}[added=2017-07-04]{info/secret-year}
%^^A!   \begin{fdusyntax}[emph={[1]secret-year}]
%^^A!     secret-year = (*\marg{year}*)
%^^A!   \end{fdusyntax}
%^^A!   Secret year. It's recommended to use Chinese word as ``������''
%^^A!   (5 years) here. This option is invalid if you have set
%^^A!   \kvopt{secret-level}{none}.
%^^A! \end{function}
%^^A!
%
% \begin{function}{info/instructors}
%   \begin{fdusyntax}[emph={[1]instructors}]
%     instructors = (*\marg{������ 1, ������ 2, ...}*)
%   \end{fdusyntax}
%   ������������������������������������������������������������������������������������
%   ������������������������|{...}|���������������������������������
% \end{function}
%^^A! \begin{function}{info/instructors}
%^^A!   \begin{fdusyntax}[emph={[1]instructors}]
%^^A!     instructors = (*\marg{member 1, member 2, ...}*)
%^^A!   \end{fdusyntax}
%^^A!   Instructors' name. Each name should be separated with
%^^A!   comma. To disambiguate, you may put text containing comma
%^^A!   into a group ``|{...}|''.
%^^A! \end{function}
%^^A!
%
% \begin{function}{info/keywords,info/keywords*}
%   \begin{fdusyntax}[emph={[1]keywords,keywords*}]
%     keywords  = (*\marg{���������������}*)
%     keywords* = (*\marg{���������������}*)
%   \end{fdusyntax}
%   ������������������������������������������������������������������������������������
%   ������������������������|{...}|���������������������������
% \end{function}
%^^A! \begin{function}{info/keywords,info/keywords*}
%^^A!   \begin{fdusyntax}[emph={[1]keywords,keywords*}]
%^^A!     keywords  = (*\marg{keywords in Chinese}*)
%^^A!     keywords* = (*\marg{keywords in English}*)
%^^A!   \end{fdusyntax}
%^^A!   Keywords list. Each keyword should be separated with comma.
%^^A!   To disambiguate, you may put text containing comma into a
%^^A!   group ``|{...}|''.
%^^A! \end{function}
%^^A!
%
% \begin{function}{info/clc}
%   \begin{fdusyntax}[emph={[1]clc}]
%     clc = (*\marg{���������}*)
%   \end{fdusyntax}
%   ������������������CLC������
% \end{function}
%^^A! \begin{function}{info/clc}
%^^A!   \begin{fdusyntax}[emph={[1]clc}]
%^^A!     clc = (*\marg{classification codes}*)
%^^A!   \end{fdusyntax}
%^^A!   Chinese Library Classification (CLC).
%^^A! \end{function}
%^^A!
%
% \begin{function}[added=2021-09-16]{info/jel}
%   \begin{fdusyntax}[emph={[1]jel}]
%     jel = (*\marg{���������}*)
%   \end{fdusyntax}
%   JEL ������������������������������������������������������������������������������������ JEL
%   ���������������������������������������������
% \end{function}
%^^A! \begin{function}[added=2021-09-16]{info/jel}
%^^A!   \begin{fdusyntax}[emph={[1]jel}]
%^^A!     jel = (*\marg{classification codes}*)
%^^A!   \end{fdusyntax}
%^^A!   \textit{Journal of Economic Literature} (JEL) Classification
%^^A!   Code. It's only mandatory for some departments. When specified,
%^^A!   CLC code in the English abstract will be replaced by it.
%^^A! \end{function}
%^^A!
%
% \subsection{������������}
%^^A! \subsection{Writing your thesis}
%^^A!
%
% \begin{quotation}
%   ���������������������������������������������������������������������������������
%   ���\CJKunderdot{������������������������}������������������������������������������������������
%   ���������������������������������������������������������������������������������������������
% \end{quotation}
% \hfill ^^^^2e3a����������������������������������������������� ^^A ^^^^2e3a = ���������
%
% \subsubsection{������}
%^^A! \subsubsection{Front matter}
%^^A!
%
% \begin{function}{\frontmatter}
%   ���������������������������
% \end{function}
%^^A! \begin{function}{\frontmatter}
%^^A!   Declare the beginning of front matter.
%^^A! \end{function}
%^^A!
%
% ���������������������������������������������������������������������������������
% ������������������������������������������������������������������������������
%^^A! Front matter contains table of contents, abstracts and notation
%^^A! list. The page numbers in front matter will be shown in
%^^A! lowercase Roman numerals, and will be counted separately with
%^^A! main matter.
%^^A!
%
% \begin{function}{\tableofcontents,\listoffigures,\listoftables}
%   ���������������������������������������������������������������������������\emph{������}���������������
%   ��������������������������������� \cs{listoffigures} ��� \cs{listoftables} ���������������
%   ������������������������
% \end{function}
%^^A! \begin{function}{\tableofcontents}
%^^A!   Generate the table of contents (TOC). You need to compile
%^^A!   the source file at least \emph{twice} to get the correct TOC.
%^^A!   If your thesis contains many figures or tables, you may also
%^^A!   use \cs{listoffigures} or \cs{listoftables} to generate a list
%^^A!   of them.
%^^A! \end{function}
%^^A!
%
%^^A TODO: \DescribeEnv{abstract}
%^^A TODO: \DescribeEnv{abstract*}
% \begin{function}{abstract}
%   \begin{fdusyntax}[emph={[2]abstract}]
%     % ������������������ (fduthesis)      % ������������������ (fduthesis-en)
%     \begin{abstract}                \begin{abstract}
%       (*\meta{������������} \hspace{3.52cm} \meta{������������}*)
%     \end{abstract}                  \end{abstract}
%   \end{fdusyntax}
% \end{function}
% \begin{function}[rEXP]{abstract*}
%   \begin{fdusyntax}[emph={[2]abstract*}]
%     % ������������������ (fduthesis)
%     \begin{abstract*}
%       (*\meta{������������}*)
%     \end{abstract*}
%   \end{fdusyntax}
%   ������������������������������������������������������������������������������������������
%   ������������������������������������������������������������������������������������������
% \end{function}
%^^A! \begin{function}{abstract}
%^^A!   \begin{fdusyntax}[emph={[2]abstract}]
%^^A!     % fduthesis (Chinese thesis)    % fduthesis-en (English thesis)
%^^A!     \begin{abstract}                \begin{abstract}
%^^A!       (*\meta{Chinese abstract} \hspace{3cm} \meta{English abstract}*)
%^^A!     \end{abstract}                  \end{abstract}
%^^A!   \end{fdusyntax}
%^^A! \end{function}
%^^A! \begin{function}[rEXP]{abstract*}
%^^A!   \begin{fdusyntax}[emph={[2]abstract*}]
%^^A!     % Only for fduthesis
%^^A!     \begin{abstract*}
%^^A!       (*\meta{English abstract}*)
%^^A!     \end{abstract*}
%^^A!   \end{fdusyntax}
%^^A!   Abstract environment. In \cls{fduthesis}, \env{abstract} and
%^^A!   \env{abstract*} are used for Chinese and English abstract,
%^^A!   respectively; while in \cls{fduthesis-en}, there is no
%^^A!   \env{abstract*} environment and you need to write the English
%^^A!   abstract merely.
%^^A! \end{function}
%^^A!
%
% ������������������������������������������������������������������CLC������ JEL ���������������������
% ��������� \cs{fdusetup} ������������������������ \ref{subsubsec:������������}~������
%^^A! At the end of abstract (both Chinese and English, if available),
%^^A! keywords list and CLC or JEL code will be shown. They can be
%^^A! specified via command \cs{fdusetup} and you may refer to
%^^A! subsubsection~\ref{subsubsec:information} for more details.
%^^A!
%
%^^A TODO: \DescribeEnv{notation}
% \begin{function}{notation}
%   \begin{fdusyntax}[emph={[2]notation}]
%     \begin{notation}(*\oarg{���������������}*)
%       (*\meta{������ 1}*)  &  (*\meta{������}*)  \\
%       (*\meta{������ 2}*)  &  (*\meta{������}*)  \\
%       (*\phantom{\meta{������ $n$}}*)  (*$\vdots$*)
%       (*\meta{������\ \kern-0.1em$n$}*)  &  (*\meta{������}*)
%     \end{notation}
%   \end{fdusyntax}
%   ������������������������ \meta{���������������}��� \LaTeX{} ������������������������
%   ���������������������������������������|lp{7.5cm}|���������������������������������������
%   ��������������� \qty{7.5}{cm}���������������������������
% \end{function}
%^^A! \begin{function}{notation}
%^^A!   \begin{fdusyntax}[emph={[2]notation}]
%^^A!     \begin{notation}(*\oarg{column format}*)
%^^A!       (*\meta{symbol 1}*)  &  (*\meta{description}*)  \\
%^^A!       (*\meta{symbol 2}*)  &  (*\meta{description}*)  \\
%^^A!       (*\phantom{\meta{symbol $n$}}*)  (*$\vdots$*)
%^^A!       (*\meta{symbol \kern-0.1em$n$}*)  &  (*\meta{description}*)
%^^A!     \end{notation}
%^^A!   \end{fdusyntax}
%^^A!   Notation list (or symbol list, nomenclature) environment.
%^^A!   The optional argument \meta{column format} is the same as
%^^A!   in a standard \LaTeX{} table. The default value is
%^^A!   ``|lp{7.5cm}|'', which means auto-width for the first column
%^^A!   and fix-width (\qty{7.5}{cm}) for the second; both columns will
%^^A!   be left-aligned.
%^^A! \end{function}
%^^A!
%
% \subsubsection{������}
%^^A! \subsubsection{Main matter}
%^^A!
%
% \begin{function}{\mainmatter}
%   ���������������������������
% \end{function}
%^^A! \begin{function}{\mainmatter}
%^^A!   Declare the beginning of main matter.
%^^A! \end{function}
%^^A!
%
% ������������������������������������������������������������������������������������������
% ������������������������������������������������������������������������
%^^A! As the name suggests, ``main matter'' is the main body of your
%^^A! thesis. When working on a big projects, it's usually a good
%^^A! idea to split the source file into several parts. The page
%^^A! numbers in main matter are shown in arabic numerals.
%^^A!
%
% \begin{function}[updated=2018-01-15]{\footnote}
%   \begin{fdusyntax}[deletetexcs={\footnote},morekeywords={\footnote}]
%     \footnote(*\marg{������������}*)
%   \end{fdusyntax}
%   ������������������������������������������ \opt{style/footnote-style} ���������������
%   ��������� \ref{subsubsec:������������}~���������
% \end{function}
%^^A! \begin{function}[updated=2018-01-15]{\footnote}
%^^A!   \begin{fdusyntax}[deletetexcs={\footnote},morekeywords={\footnote}]
%^^A!     \footnote(*\marg{text}*)
%^^A!   \end{fdusyntax}
%^^A!   Insert a footnote. The style of footnote numbers can be set
%^^A!   with option \opt{style/foot\-note\-style}. See
%^^A!   subsubsection~\ref{subsubsec:style-and-format} for more details.
%^^A! \end{function}
%^^A!
%
% \begin{function}{\caption}
%   \begin{fdusyntax}[deletetexcs={\caption},morekeywords={\caption}]
%     \caption(*\marg{������������}*)
%     \caption(*\oarg{���������}\marg{���������}*)
%   \end{fdusyntax}
%   ��������������������������������� \meta{���������} ������������������������
%   \meta{���������} ������������������������������������������������ \meta{���������}
%   ������������ \meta{������������} ������������������������
%   \cite{���������2013latex������}
% \end{function}
%^^A! \begin{function}{\caption}
%^^A!   \begin{fdusyntax}[deletetexcs={\caption},morekeywords={\caption}]
%^^A!     \caption(*\marg{caption}*)
%^^A!     \caption(*\oarg{short caption}\marg{long caption}*)
%^^A!   \end{fdusyntax}
%^^A!   Insert the caption of figure or table. The optional argument
%^^A!   \meta{short caption} will be shown in the list of figures/tables.
%^^A!   In \meta{long caption}, you can write descriptions for several
%^^A!   paragraphs, but \meta{short caption} and the single
%^^A!   \meta{caption} will not allow multi-paragraph text (i.e.\
%^^A!   text containing \tn{par}) inside.
%^^A! \end{function}
%^^A!
%
% ���������������������������������������������������������������������������������������
% ������������������������������������������������������������������������������
% \tn{caption} ������������������������������������������ \env{table} ���
% \env{figure}���������
%^^A! By convention, caption of a table is usually put \emph{before}
%^^A! the table itself, while for figure it's the opposite.
%^^A! In addition, command \tn{caption} must be put inside float
%^^A! environments (e.g.\ \env{table} and \env{figure}).
%^^A!
%
% \paragraph{������������������}
%^^A! \paragraph{Citations}
%
% \begin{function}[updated=2021-09-20]{\cite}
%   \begin{fdusyntax}[deletetexcs={\cite},morekeywords={\cite}]
%     \cite(*\marg{������������}*)
%     \cite(*\oarg{������}\marg{������������}*)
%   \end{fdusyntax}
%   ��������������������������������������� \meta{������} ���������������������������������������������
%   ���������������������������������������������������������������������������������������������������������
%   ���������������������������������������������������������������������������������������
%   ���~\ref{tab:citation-numerical} ������~\ref{tab:citation-author-year}���
% \end{function}
%^^A! \begin{function}[updated=2021-09-20]{\cite}
%^^A!   \begin{fdusyntax}[deletetexcs={\cite},morekeywords={\cite}]
%^^A!     \cite(*\marg{bib key}*)
%^^A!     \cite(*\oarg{page number}\marg{bib key}*)
%^^A!   \end{fdusyntax}
%^^A!   Insert citations. The optional argument \meta{page number} can be
%^^A!   used to indicate the page number of the citation. The citation style
%^^A!   varies among different bibliography styles. More commands are also
%^^A!   provided to mark the citations, which can be found in
%^^A!   table~\ref{tab:citation-numerical} (numerical style) and
%^^A!   \ref{tab:citation-author-year} (author-year style).
%^^A! \end{function}
%^^A!
%
%^^A+
% \NewDocumentCommand\verbcite{O{cite}om}{^^A
%   \IfNoValueTF{#2}{^^A
%     \texttt{\textbackslash#1\{#3\}}^^A
%   }{^^A
%     \texttt{\textbackslash#1[#2]\{#3\}}^^A
%   }}
%^^A-
%
% \begin{table}[ht]
%   \caption{���������������������������������} \label{tab:citation-numerical}
%   \centering
%   \small
%   \begin{tabularx}{\textwidth}{cCll}
%     \toprule
%       \textbf{������������} &
%       \textbf{������������} &
%       \textbf{\kvopt{bib-backend}{bibtex}} &
%       \textbf{\kvopt{bib-backend}{biblatex}} \\
%     \midrule
%     ������������ &
%       ������\cite{texbook} &
%       \verbcite{texbook} &
%       ������ \\
%     ������������ &
%       ������\cite{texbook,companion} &
%       \verbcite{texbook,companion} &
%       ������ \\
%     ������������ &
%       ������\cite[126--137]{texbook} &
%       \verbcite[cite][126--137]{texbook} &
%       ������ \\
%     ������������ &
%       \citet{texbook}������ &
%       \verbcite[citet]{texbook} &
%       \verbcite[authornumcite]{texbook} \\
%     ��������������������� &
%       \citet[42]{texbook}������ &
%       \verbcite[citet][42]{texbook} &
%       \verbcite[authornumcite][42]{texbook} \\
%     ��������� &
%       ������{\citestyle{numbers}\cite{texbook}} &
%       \verbcite[parencite]{texbook} &
%       ������ \\
%     \bottomrule
%   \end{tabularx}
% \end{table}
%^^A! \begin{table}[ht]
%^^A!   \caption{Citations in numerical style} \label{tab:citation-numerical}
%^^A!   \centering
%^^A!   \small
%^^A!   \def\C#1{\textcolor{MaterialGreen}{#1}}
%^^A!   \begin{tabularx}{\textwidth}{cCll}
%^^A!     \toprule
%^^A!       \textbf{Styles} &
%^^A!       \textbf{Results} &
%^^A!       \textbf{\kvopt{bib-backend}{bibtex}} &
%^^A!       \textbf{\kvopt{bib-backend}{biblatex}} \\
%^^A!     \midrule
%^^A!     Single &
%^^A!       Text\textsuperscript{[\C1]} &
%^^A!       \verbcite{texbook} &
%^^A!       Same as left \\
%^^A!     Multiple &
%^^A!       Text\textsuperscript{[\C1--\C2]} &
%^^A!       \verbcite{texbook,companion} &
%^^A!       Same as left \\
%^^A!     With page &
%^^A!       Text\textsuperscript{[\C1]126--137} &
%^^A!       \verbcite[cite][126--137]{texbook} &
%^^A!       Same as left \\
%^^A!     With author &
%^^A!       Knuth\textsuperscript{[\C1]} states &
%^^A!       \verbcite[citet]{texbook} &
%^^A!       \verbcite[authornumcite]{texbook} \\
%^^A!     With page \& author &
%^^A!       Knuth\textsuperscript{[\C1]42} states &
%^^A!       \verbcite[citet][42]{texbook} &
%^^A!       \verbcite[authornumcite][42]{texbook} \\
%^^A!     No superscript &
%^^A!       Text [\C1] &
%^^A!       \verbcite[parencite]{texbook} &
%^^A!       Same as left \\
%^^A!     \bottomrule
%^^A!   \end{tabularx}
%^^A! \end{table}
%^^A!
%
% \begin{table}[ht]
%   \caption{���������������������������������������} \label{tab:citation-author-year}
%   \centering
%   \small
%   \def\!{\kern-1.5pt}
%   \begin{tabularx}{\textwidth}{cCll}
%     \toprule
%       \textbf{������������} &
%       \textbf{������������} &
%       \textbf{\kvopt{bib-backend}{bibtex}} &
%       \textbf{\kvopt{bib-backend}{biblatex}} \\
%     \midrule
%     ������������ &
%       (\citeauthor{texbook}\!, \citeyear{texbook}\!) &
%       \verbcite[citep]{texbook} &
%       \verbcite{texbook} \\
%     ������������ &
%       (\citeauthor{texbook}\!, \citeyear{texbook}\!;
%         \citeauthor{companion}\!, \citeyear{companion}\!) &
%       \verbcite[citep]{texbook,companion} &
%       \verbcite{texbook,companion} \\
%     ������������ &
%       (\citeauthor{texbook}\!, \citeyear{texbook}\!)^^A
%         \textsuperscript{126--137} &
%       \verbcite[citep][126--137]{texbook} &
%       \verbcite[cite][126--137]{texbook} \\
%     ������������ &
%       \citeauthor{texbook}(\citeyear{texbook}\!) &
%       \verbcite[citet]{texbook} &
%       ������ \\
%     ��������������������� &
%       \citeauthor{texbook}(\citeyear{texbook}\!)\textsuperscript{42} &
%       \verbcite[citet][42]{texbook} &
%       ������ \\
%     \bottomrule
%   \end{tabularx}
% \end{table}
%^^A! \begin{table}[ht]
%^^A!   \caption{Citations in author-year style} \label{tab:citation-author-year}
%^^A!   \centering
%^^A!   \small
%^^A!   \def\C#1{\textcolor{MaterialGreen}{#1}}
%^^A!   \begin{tabularx}{\textwidth}{cCll}
%^^A!     \toprule
%^^A!       \textbf{Styles} &
%^^A!       \textbf{Results} &
%^^A!       \textbf{\kvopt{bib-backend}{bibtex}} &
%^^A!       \textbf{\kvopt{bib-backend}{biblatex}} \\
%^^A!     \midrule
%^^A!     Single &
%^^A!       (\C{Knuth}, \C{1986}) &
%^^A!       \verbcite[citep]{texbook} &
%^^A!       \verbcite{texbook} \\
%^^A!     Multiple &
%^^A!       (\C{Knuth}, \C{1986}; \C{Mittelbach et~al.}, \C{2004}) &
%^^A!       \verbcite[citep]{texbook,companion} &
%^^A!       \verbcite{texbook,companion} \\
%^^A!     With page &
%^^A!       (\C{Knuth}, \C{1986})\textsuperscript{126--137} &
%^^A!       \verbcite[citep][126--137]{texbook} &
%^^A!       \verbcite[cite][126--137]{texbook} \\
%^^A!     With author &
%^^A!       \C{Knuth} (\C{1986}) &
%^^A!       \verbcite[citet]{texbook} &
%^^A!       Same as left \\
%^^A!     With page \& author &
%^^A!       \C{Knuth} (\C{1986})\textsuperscript{42} &
%^^A!       \verbcite[citet][42]{texbook} &
%^^A!       Same as left \\
%^^A!     \bottomrule
%^^A!   \end{tabularx}
%^^A! \end{table}
%^^A!
%
% \paragraph{���������������}
%^^A! \paragraph{Theorem-like environments}
%
%^^A TODO: \DescribeEnv{proof}
% \begin{function}{axiom,corollary,definition,example,lemma,
%   proof,theorem}
%   \begin{fdusyntax}[emph={[2]proof}]
%     \begin{proof}(*\oarg{���������}*)
%       (*\meta{������������}*)
%     \end{proof}
%   \end{fdusyntax}
%   ������������������������������������������������������~\ref{tab:theorem}���
% \end{function}
%^^A! \begin{function}{axiom,corollary,definition,example,lemma,
%^^A!   proof,theorem}
%^^A!   \begin{fdusyntax}[emph={[2]proof}]
%^^A!     \begin{proof}(*\oarg{subheading}*)
%^^A!       (*\meta{procedure of proof}*)
%^^A!     \end{proof}
%^^A!   \end{fdusyntax}
%^^A!   A series of pre-defined math environments.
%^^A! \end{function}
%^^A!
%
% \begin{table}[ht]
%   \caption{������������������������} \label{tab:theorem}
%   \centering
%   \small
%   \begin{tabular}{*{8}{c}}
%     \toprule
%       \textbf{������} &
%         \env{axiom} & \env{corollary} & \env{definition} & \env{example} &
%         \env{lemma} & \env{proof}     & \env{theorem} \\
%     \midrule
%       \textbf{������} &
%         ������ & ������ & ������ & ��� &
%         ������ & ������ & ������ \\
%     \bottomrule
%   \end{tabular}
% \end{table}
%
% ���������������\env{proof}������������������������������������$\QED$���������������
% ��������������������������������������������������� \ref{subsec:������������}~���
% ������������������������\emph{������}���
%^^A! A QED\footnote{Abbreviation of Latin phrase \emph{quod erat
%^^A!   demonstrandum}, means ``what was to be demonstrated''.}
%^^A! symbol ``$\QED$'' will be added at the end of \env{proof}
%^^A! environment. You need to compile the source file \emph{twice}
%^^A! as in subsection~\ref{subsec:compilation} in order to make
%^^A! the position of QED symbol correct.
%^^A!
%
% \begin{function}[updated=2023-02-08]{\newtheorem}
%   \begin{fdusyntax}[deletetexcs={\newtheorem},
%       morekeywords={\newtheorem,\newtheorem*}]
%     \newtheorem(*\oarg{������}\marg{���������}\marg{������}*)
%     \newtheorem*(*\oarg{������}\marg{���������}\marg{������}*)
%     \begin(*\marg{���������}\oarg{���������}*)
%       (*\meta{������}*)
%     \end(*\marg{���������}*)
%   \end{fdusyntax}
%   ������������������������������������������������������������������������������������������
%   ������������������������������������$\QED$���������������������������������������������������
%   ���������������
% \end{function}
%^^A! \begin{function}[updated=2017-12-12]{\newtheorem}
%^^A!   \begin{fdusyntax}[deletetexcs={\newtheorem},
%^^A!       morekeywords={\newtheorem,\newtheorem*}]
%^^A!     \newtheorem(*\oarg{options}\marg{environment}\marg{title}*)
%^^A!     \newtheorem*(*\oarg{options}\marg{environment}\marg{title}*)
%^^A!     \begin(*\marg{environment}\oarg{subheading}*)
%^^A!       (*\meta{contents}*)
%^^A!     \end(*\marg{environment}*)
%^^A!   \end{fdusyntax}
%^^A!   Declare new math environments (theorems). If you use
%^^A!   \cs{newtheorem*}, then the theorem will not be numbered, and
%^^A!   a QED symbol ``$\QED$'' will be added at the end of the
%^^A!   environment. All the theorem environments defined by yourself
%^^A!   can be used as the pre-defined ones.
%^^A! \end{function}
%^^A!
%
% ���������������~\ref{tab:theorem} ���������������������������������������������������������
% \begin{latexexample}[deletetexcs={\newtheorem},
%     morekeywords={\newtheorem,\newtheorem*}]
%   \newtheorem*{proof}{������}
%   \newtheorem{axiom}{������}
%   \newtheorem{corollary}{������}
%   ...
% \end{latexexample}
%^^A! Actually, the pre-defined math environments are just defined
%^^A! with \cs{new\-the\-o\-rem} and \cs{new\-the\-o\-rem*}:
%^^A! \begin{latexexample}[deletetexcs={\newtheorem},
%^^A!     morekeywords={\newtheorem,\newtheorem*}]
%^^A!   \newtheorem*{proof}{proof}
%^^A!   \newtheorem{axiom}{axiom}
%^^A!   \newtheorem{corollary}{corollary}
%^^A!   ...
%^^A! \end{latexexample}
%^^A!
%
% ��� \cs{fdusetup} ���������\cs{newtheorem} ��������������� \meta{������}
% ���������������������������������������������������������������������������|theorem/|������
%^^A! Similar with \cs{fdusetup}, the optional argument \meta{options}
%^^A! of \cs{newtheorem} is a key-value list as well. The available
%^^A! are described below. Note that you don't need to type in the
%^^A! ``|theorem/|'' prefix.
%^^A!
%
% \begin{function}{theorem/style}
%   \begin{fdusyntax}[emph={[1]style}]
%     style = (*<(plain)|margin|change|\\
%       XXXXXX\mbox{}~~~~~~~~break|marginbreak|changebreak>*)
%   \end{fdusyntax}
%   ���������������������������������
% \end{function}
%^^A! \begin{function}{theorem/style}
%^^A!   \begin{fdusyntax}[emph={[1]style}]
%^^A!     style = (*<(plain)|margin|change|\\
%^^A!       XXXX\mbox{}~~~~~~~~break|marginbreak|changebreak>*)
%^^A!   \end{fdusyntax}
%^^A!   The overall style of the theorem environment.
%^^A! \end{function}
%^^A!
%
% \begin{function}{theorem/header-font}
%   \begin{fdusyntax}[emph={[1]header-font}]
%     header-font = (*\marg{������}*)
%   \end{fdusyntax}
%   ��������������������������������������������������������� \tn{sffamily}������������������
%   ������������������������������������ |\bfseries\upshape|������������������������
% \end{function}
%^^A! \begin{function}{theorem/header-font}
%^^A!   \begin{fdusyntax}[emph={[1]header-font}]
%^^A!     header-font = (*\marg{font}*)
%^^A!   \end{fdusyntax}
%^^A!   Font of the theorem header. Default value is \tn{sffamily}
%^^A!   and |\bfseries\upshape| for Chinese and English template,
%^^A!   respectively.
%^^A! \end{function}
%^^A!
%
% \begin{function}{theorem/body-font}
%   \begin{fdusyntax}[emph={[1]body-font}]
%     body-font = (*\marg{������}*)
%   \end{fdusyntax}
%   ��������������������������������������������� \tn{fdu@kai}���������������������������
%   ��������� \tn{itshape}���������������
% \end{function}
%^^A! \begin{function}{theorem/body-font}
%^^A!   \begin{fdusyntax}[emph={[1]body-font}]
%^^A!     body-font = (*\marg{font}*)
%^^A!   \end{fdusyntax}
%^^A!   Font of the theorem body. Default value is \tn{fdu@kai}
%^^A!   (\textit{������}) and \tn{itshape} for Chinese and English
%^^A!   template, respectively.
%^^A! \end{function}
%^^A!
%
% \begin{function}{theorem/qed}
%   \begin{fdusyntax}[emph={[1]qed}]
%     qed = (*\marg{������}*)
%   \end{fdusyntax}
%   ��������������������������������������������������� \cs{newtheorem} ���������������������������������
%   ��� \cs{newtheorem*} ��������������������� |\ensuremath{\QED}|���������$\QED$������
% \end{function}
%^^A! \begin{function}{theorem/qed}
%^^A!   \begin{fdusyntax}[emph={[1]qed}]
%^^A!     qed = (*\marg{symbol}*)
%^^A!   \end{fdusyntax}
%^^A!   Theorem end mark. For \cs{newtheorem}, default value is
%^^A!   empty; for \cs{newtheorem*}, default value is
%^^A!   |\ensuremath{\QED}| (i.e.\ ``$\QED$'').
%^^A! \end{function}
%^^A!
%
% \begin{function}{theorem/counter}
%   \begin{fdusyntax}[emph={[1]counter}]
%     counter = (*\marg{���������}*)
%   \end{fdusyntax}
%   ��������������������������������������� \meta{���������} ������������������������ \meta{���������}
%   ���������������������\cite{���������2013latex������}��������� |chapter|������������������������
%   ������ \cs{newtheorem*} ������������������������
% \end{function}
%^^A! \begin{function}{theorem/counter}
%^^A!   \begin{fdusyntax}[emph={[1]counter}]
%^^A!     counter = (*\marg{counter}*)
%^^A!   \end{fdusyntax}
%^^A!   The theorem will be enumerated within \meta{counter}. For
%^^A!   example, the default value is |chapter|, which means with
%^^A!   each new \tn{chapter}, the enumeration begins again with 1.
%^^A!   This option is invalid for \cs{newtheorem*}.
%^^A! \end{function}
%^^A!
%
% \subsubsection{������}
%^^A! \subsubsection{Back matter}
%^^A!
%
% \begin{function}{\backmatter}
%   ���������������������������
% \end{function}
%^^A! \begin{function}{\backmatter}
%^^A!   Declare the beginning of back matter.
%^^A! \end{function}
%^^A!
%
% ������������������������������������������������
%^^A! Back matter contains bibliography, declaration page, etc.
%^^A!
%
% \begin{function}[updated=2018-01-25]{\printbibliography}
%   \begin{fdusyntax}[morekeywords={\printbibliography}]
%     \printbibliography(*\oarg{������}*)
%   \end{fdusyntax}
%   ��������������������������������� \kvopt{bib-backend}{bibtex}������ \meta{������}
%   ������������������ \tn{bibliography} \texttt{\marg{���������������}}������������
%   \meta{���������������} ��������� \opt{style/bib-resource} ������������������������
%   \ref{subsubsec:������������}~������������������ \kvopt{bib-backend}{biblatex}���
%   ��������������� \pkg{biblatex} ���������������������������������������������������
%   \cite{biblatex}���
% \end{function}
%^^A! \begin{function}[updated=2018-01-25]{\printbibliography}
%^^A!   \begin{fdusyntax}[morekeywords={\printbibliography}]
%^^A!     \printbibliography(*\oarg{options}*)
%^^A!   \end{fdusyntax}
%^^A!   Print the bibliography. When \kvopt{bib-backend}{bibtex}, then
%^^A!   \meta{options} is invalid and this command is equivalent to
%^^A!   \tn{bibliography} \texttt{\marg{bib files}}, where \meta{bib files}
%^^A!   should be specified with option \opt{style/bib-resource} (see
%^^A!   subsubsection~\ref{subsubsec:style-and-format}). When
%^^A!   \kvopt{bib-backend}{bibtex}, then \tn{printbibliography} is
%^^A!   provided by \pkg{biblatex} and the available options can be
%^^A!   found in its documentation.
%^^A! \end{function}
%^^A!
%
% \begin{function}[added=2023-02-06]{acknowledgements}
%   \begin{fdusyntax}[emph={[2]acknowledgements}]
%     \begin{acknowledgements}
%       (*\meta{������������}*)
%     \end{acknowledgements}
%   \end{fdusyntax}
%   ���������
% \end{function}
%^^A! \begin{function}[added=2023-02-06]{acknowledgements}
%^^A!   \begin{fdusyntax}[emph={[2]acknowledgements}]
%^^A!     \begin{acknowledgements}
%^^A!       (*\meta{acknowledgements}*)
%^^A!     \end{acknowledgements}
%^^A!   \end{fdusyntax}
%^^A!   Acknowledgements.
%^^A! \end{function}
%^^A!
%
% \section{������������������}
%^^A! \section{Packages dependencies}
%^^A!
%
% ������������������������������������������������������������������������������������������
% ���������������
% \begin{itemize}
%   \item ������������������������������������\emph{������}������������������
%     ���������������������
%     \begin{itemize}
%       \item \pkg{xtemplate} ��� \pkg{l3keys2e}��������������� \LaTeX3 ���������������
%         ������������ \pkg{l3packages} ���������
%       \item \cls{ctexbook}��������������������������������������������� \CTeX{}
%         ������ \cite{CTeX}���
%       \item \pkg{amsmath}������ \LaTeX{} ������������������������������
%         ��������������������� \AmSLaTeX{} ���������
%       \item \pkg{unicode-math}��������������� Unicode ���������
%         OpenType ���������������
%       \item \pkg{geometry}������������������������������
%       \item \pkg{fancyhdr}������������������������
%       \item \pkg{footmisc}������������������
%       \item \pkg{ntheorem}���������������������������������������
%       \item \pkg{graphicx}���������������������������������
%       \item \pkg{longtable}���������������������������������������
%       \item \pkg{caption}������������������������
%       \item \pkg{xcolor}������������������������
%       \item \pkg{hyperref}������������������������������������������������������������
%     \end{itemize}
%   \item ������ \kvopt{style/footnote-style}{pifont} ���������������
%     \pkg{pifont} ������������������ \pkg{psnfss} ���������
%   \item ������ \kvopt{style/bib-backend}{bibtex} ���������������
%     \pkg{natbib} ������������������ \BibTeX{} ������������������������������
%     \pkg{gbt7714} ������������ \cite{natbib,gbt7714}���
%   \item ������ \kvopt{style/bib-backend}{biblatex} ���������������
%     \pkg{biblatex} ������������������ \biber{} ������������������������������
%     \pkg{biblatex-gb7714-2015} ������������
%     \cite{biblatex,biblatex-gb7714-2015}���
% \end{itemize}
%^^A! Different compilation methods and options will result in a
%^^A! different packages dependency. Details are as follows:
%^^A! \begin{itemize}
%^^A!   \item In any case, \cls{fduthesis} will load the following
%^^A!     packages \emph{explicitly}:
%^^A!     \begin{itemize}
%^^A!       \item \pkg{xtemplate} and \pkg{l3keys2e}, belong to
%^^A!         \pkg{l3packages} bundle
%^^A!       \item \cls{ctexbook}, belongs to \CTeX{} bundle
%^^A!       \item \pkg{amsmath}, belongs to \AmSLaTeX{} bundle
%^^A!       \item \pkg{unicode-math}
%^^A!       \item \pkg{geometry}
%^^A!       \item \pkg{fancyhdr}
%^^A!       \item \pkg{footmisc}
%^^A!       \item \pkg{ntheorem}
%^^A!       \item \pkg{graphicx}
%^^A!       \item \pkg{longtable}
%^^A!       \item \pkg{caption}
%^^A!       \item \pkg{xcolor}
%^^A!       \item \pkg{hyperref}
%^^A!     \end{itemize}
%^^A!   \item When chosen \kvopt{style/footnote-style}{pifont},
%^^A!     package \pkg{pifont} will be loaded. It belongs to
%^^A!     \pkg{psnfss} bundle.
%^^A!   \item When chosen \kvopt{style/bib-backend}{bibtex},
%^^A!     package \pkg{natbib} will be loaded. Meanwhile, program
%^^A!     \BibTeX{} will be required for compilation. The
%^^A!     bibliography style is provided by \pkg{gbt7714}.
%^^A!   \item When chosen \kvopt{style/bib-backend}{biblatex},
%^^A!     package \pkg{biblatex} will be loaded. Program \biber{}
%^^A!     will be required then. The bibliography style is provided
%^^A!     by \pkg{biblatex-gb7714-2015}.
%^^A! \end{itemize}
%^^A!
%
% ���������������������������������������������������������������������������������������
% ������������������������������������������������������������������
%^^A! Only the packages loaded directly by \cls{fduthesis} are listed
%^^A! here. If you need to know the dependencies of the packages
%^^A! themselves, please refer to the corresponding manuals.
%^^A!
%
% \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{https://mirror.ctan.org/#2}{\texttt{CTAN://#2}}}}
%
% \subsection{������}
%
% \bibitem[Knuth(1986)]{texbook}
% \textsc{Knuth D E}.
% \newblock \textit{The \TeX book: Computers \& Typesetting, volume A} [M].
% \newblock Boston: Addison--Wesley Publishing Company, 1986
% \urlprefix \CTANurl[���������^^A
%   \footnote{������������������������������������������ Knuth ���������������������������������������������}���]^^A
%   {systems/knuth/dist/tex/texbook.tex}
%
% \bibitem[Mittelbach et~al.(2004)]{companion}
% \textsc{Mittelbach F} and \textsc{Goossens M}.
% \newblock \textit{The \LaTeX{} Companion} [M].
% \newblock 2nd ed.
% \newblock Boston: Addison--Wesley Publishing Company, 2004
%
% \bibitem[()]{������2017latex2e}
% ������.
% \newblock \textit{\LaTeXe{} ���������������������������} [M].
% \newblock ������: ���������������������, 2017
%
% \bibitem[()]{���������2013latex������}
% ���������.
% \newblock \textit{\LaTeX{} ������} [M].
% \newblock ������: ���������������������, 2013
%
% \subsection{���������������}
%
% \bibitem[()]{gb-t-7713.1-2006}
% ���������������������������������, ���������������������������������������������.
% \newblock \textit{������������������������: GB/T 7713.1--2006} [S].
% \newblock ������: ���������������������, 2007
%
% \bibitem[()]{gb-t-7714-2015}
% ���������������������������������������������.
% \newblock \textit{���������������\quad ������������������������: GB/T 7714--2015} [S].
% \newblock ������: ���������������������, 2015
%
% \bibitem[()]{gb-t-15834-2011}
% ������������������������������������.
% \newblock \textit{������������������: GB/T 15834--2011} [S/OL].
% \newblock ������: ���������������������, 2012
% \urlprefix\url{http://www.moe.gov.cn/ewebeditor/uploadfile/2015/01/13/20150113091548267.pdf}
%
% \bibitem[()]{clreq}
% W3C.
% \newblock \textit{���������������������Requirements for Chinese Text Layout���} [EB/OL].
% \newblock W3C Editor's Draft.
% \newblock (2023-05-24)
% \urlprefix\url{https://w3c.github.io/clreq/}
%
% \bibitem[()]{������������������������}
% ���������������������, ������������������������.
% \newblock \textit{���������������������������������������������} [EB/OL].
% \newblock 2017 ��� 3 ������������.
% \newblock (2017-03-27)
% \urlprefix\url{http://www.gs.fudan.edu.cn/_upload/article/4c/a8/a82545ef443b9c057c14ba13782c/c883c6f3-6d7f-410c-8f30-d8bde6fcb990.doc}
%
% \subsection{���������������}
%
% \bibitem[()]{source2e}
% \textsc{Braams J}, \textsc{Carlisle D}, \textsc{Jeffrey A}, et~al.
% \newblock \textit{The \LaTeXe{} Sources} [CP/OL].
% \newblock (2022-11-01)
% \urlprefix\url{https://ctan.org/pkg/latex}
% \urlprefix\CTANurl[������������]{macros/latex/base/source2e.pdf}
%
% \bibitem[()]{CTeX}
% \textsc{CTEX.ORG}.
% \newblock \textit{\CTeX{} ������������} [EB/OL].
% \newblock version 2.5.10,
% \newblock (2022-07-14)
% \urlprefix\url{https://ctan.org/pkg/ctex}
% \urlprefix\CTANurl[���������������������]{language/chinese/ctex/ctex.pdf}
%
% \bibitem[()]{xeCJK}
% \textsc{CTEX.ORG}.
% \newblock \textit{\pkg{xeCJK} ������} [EB/OL].
% \newblock version 3.9.1,
% \newblock (2022-08-05)
% \urlprefix\url{https://ctan.org/pkg/xecjk}
% \urlprefix\CTANurl[���������������������]{macros/xetex/latex/xecjk/xeCJK.pdf}
%
% \bibitem[()]{natbib}
% \textsc{Daly P W}.
% \newblock \textit{Natural Sciences Citations and References} [EB/OL].
% \newblock version 8.31b,
% \newblock (2010-09-13)
% \urlprefix\url{https://ctan.org/pkg/natbib}
% \urlprefix\CTANurl[���������������������]{macros/latex/contrib/natbib/natbib.pdf}
%
% \bibitem[()]{source3}
% \textsc{The \LaTeX3 Project}.
% \newblock \textit{The \LaTeX3 Sources} [CP/OL].
% \newblock (2023-05-22)
% \urlprefix\url{https://ctan.org/pkg/l3kernel}
% \urlprefix\CTANurl[������������]{macros/latex/contrib/l3kernel/source3.pdf}
%
% \bibitem[()]{biblatex}
% \textsc{Kime P}, \textsc{Wemheuer M}, \textsc{Lehman P}.
% \newblock \textit{The \pkg{biblatex} Package} [EB/OL].
% \newblock version 3.19,
% \newblock (2023-03-05)
% \urlprefix\url{https://ctan.org/pkg/biblatex}
% \urlprefix\CTANurl[���������]{macros/latex/contrib/biblatex/doc/biblatex.pdf}
%
% \bibitem[()]{lshort}
% \textsc{Oetiker T}, \textsc{Partl H}, \textsc{Hyna I}, et~al.
% \newblock \textit{The Not So Short Introduction to \LaTeXe{}: Or \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{��������������������������� \LaTeXe{} ������: ��� 111 ������������ \LaTeXe{}} [EB/OL].
% \newblock \CTeX{} ������������, ���.
% \newblock ������������ version 6.4, ������������ version 6.04,
% \newblock (2023-05-05)
% \urlprefix\url{https://ctan.org/pkg/lshort-zh-cn}
% \urlprefix\CTANurl[���������]{info/lshort/chinese/lshort-zh-cn.pdf}
%
% \bibitem[()]{biblatex-gb7714-2015}
% ���������.
% \newblock \textit{������ GB/T 7714-2015 ��������� biblatex ������������������} [EB/OL].
% \newblock version 1.1n,
% \newblock (2023-05-25)
% \urlprefix\url{https://ctan.org/pkg/biblatex-gb7714-2015}
% \urlprefix\CTANurl[���������]{biblatex-contrib/biblatex-gb7714-2015/biblatex-gb7714-2015.pdf}
%
% \bibitem[()]{gbt7714}
% ������������\textsc{Zeping L}���.
% \newblock \textit{GB/T 7714-2015 \BibTeX{} Style} [EB/OL].
% \newblock version 2.1.5,
% \newblock (2022-10-03)
% \urlprefix\url{https://ctan.org/pkg/gbt7714}
% \urlprefix\CTANurl[���������]{biblio/bibtex/contrib/gbt7714/gbt7714.pdf}
%
% \bibitem[()]{cquthesis}
% ���������.
% \newblock \textit{\textsc{CquThesis}��������������������������� \LaTeX{} ������} [EB/OL].
% \newblock version 1.50,
% \newblock (2020-06-23)
% \urlprefix\url{https://ctan.org/pkg/cquthesis}
% \urlprefix\CTANurl[���������������������]{macros/latex/contrib/cquthesis/cquthesis.pdf}
%
% \bibitem[()]{pkuthss}
% Casper Ti. Vector.
% \newblock \textit{���������������������������������pkuthss} [EB/OL].
% \newblock version 1.9.3,
% \newblock (2022-10-30)
% \urlprefix\url{https://ctan.org/pkg/pkuthss}
% \urlprefix\CTANurl[���������������������]{macros/latex/contrib/pkuthss/pkuthss.pdf}
%
% \bibitem[()]{thuthesis}
% ������������ TUNA ������.
% \newblock \textit{\textsc{ThuThesis}���������������������������������} [EB/OL].
% \newblock version 7.4.0,
% \newblock (2023-05-15)
% \urlprefix\url{https://ctan.org/pkg/thuthesis}
% \urlprefix\CTANurl[���������������������]{macros/latex/contrib/thuthesis/thuthesis.pdf}
%
% \emph{������������������������ CTAN���������������������������}
%
% \bibitem[()]{sjtuthesis}
% \textsc{SJTUG}.
% \newblock \textit{������������������������������������} [EB/OL].
% \newblock version 2.0.2,
% \newblock (2023-04-01)
% \urlprefix\url{https://github.com/sjtug/SJTUThesis}
% \urlprefix\url[������������������]{https://github.com/sjtug/SJTUTeX}
%
% \bibitem[()]{ustcthesis}
% \textsc{USTC \TeX{} User Group}.
% \newblock \textit{������������������������������������ \LaTeX{} ������} [EB/OL].
% \newblock version 3.3.4,
% \newblock (2023-05-10)
% \urlprefix\url{https://github.com/ustctug/ustcthesis}
%
% \bibitem[()]{ucasthesis}
% \textsc{mohuangrui}.
% \newblock \textit{\pkg{ucasthesis} ��������������������� \LaTeX{} ������} [EB/OL].
% \newblock (2021-10-29)
% \urlprefix\url{https://github.com/mohuangrui/ucasthesis}
%
% \emph{���������������������������������}
%
% \bibitem[()]{pandoxie2014fduthesislatex}
% \textsc{Pandoxie}.
% \newblock \textit{Fudan University-Latex Template} [EB/OL].
% \newblock (2014-06-07)
% \urlprefix\url{https://github.com/Pandoxie/FDU-Thesis-Latex}
%
% \bibitem[()]{richard2016fudanthesis}
% \textsc{richard}.
% \newblock \textit{������������������������������������} [EB/OL].
% \newblock (2016-01-31)
% \urlprefix\url{https://github.com/richarddzh/fudan-thesis}
%
% \bibitem{������������������������������������}
% ������������������������������.
% \newblock \textit{2019 ������������������������������������} [EB/OL].
% \newblock (2019-03-12)
% \urlprefix\url{https://math.fudan.edu.cn/f3/e1/c30360a324577/page.htm}
%
% \subsection{������}
%
% \bibitem[()]{wright2009dtxfile}
% \textsc{Wright J}.
% \newblock \textit{A model dtx file} [EB/OL].
% \newblock (2009-10-06)
% \urlprefix\url{https://www.texdev.net/2009/10/06/a-model-dtx-file/}
%
% \bibitem[()]{������������}
% ���������\textsc{Eric Q L}���.
% \newblock \textit{������������������������������������������} [EB/OL].
% \urlprefix\url{https://thetype.com/kongque/}
%
% \end{thebibliography}
%
% \clearpage
%
%^^A! \end{document}
%
% \end{documentation}
%
% \begin{implementation}
%
%^^A ������������������������
% \newgeometry{
%   left      = 2.25 in,
%   right     = 1.00 in,
%   top       = 1.25 in,
%   bottom    = 1.00 in,
%   marginpar = 2.25 in
% }
%
% \section{������������}
%
% ��������������� \LaTeX3 ��������������������� \pkg{expl3} ���������
% ������������ \pkg{l3packages} ���������������������
%
% ������ \LaTeX3 ������������������������������������������������������������������������
% ���������������|_|���������������|:|������������������������������������
% ������������������������������|~|������������������ |~| ���������������������������������
% ��������� \LaTeXe{} ��������������� \tn{nobreakspace} ���������
%
% ������������������������������ \textcolor[HTML]{2E3191}{\textsf{<*class>}}
% ������������������ \pkg{DocStrip} ���������guard���������������������������������������
% ���\textsf{*}���������\textsf{/}���������������������������������������������������
% ���\textsf{*}���������\textsf{/}������ guard ������������������������������������������
% ������������������������������������ guard ���������������������������������������������������
%
% ������������������ \textcolor{MaterialPink}{\textsf{<@@=fdu>}} ��� guard���
% ���������������������������������������������
%
% \subsection{������}
%
%    \begin{macrocode}
%<@@=fdu>
%<*class|class-en>
%    \end{macrocode}
%
% \changes{v0.8}{2021/09/15}{������ \LaTeX{} 2020/10/01���������������������
%   \pkg{expl3} ��� \pkg{xparse} ���������}
% \changes{v0.8}{2022/02/17}{���������������������������������}
%
% ������ \LaTeX3 ���������������
%    \begin{macrocode}
\RequirePackage { xtemplate, l3keys2e }
\msg_new:nnn { fduthesis } { 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/07/17 }
      { } { \msg_error:nnn { fduthesis } { l3-too-old } {#1} }
  }
%    \end{macrocode}
%
% ������ \cls{fduthesis} ��������� \XeTeX{} ��� \LuaTeX{}���
%    \begin{macrocode}
\msg_new:nnn { fduthesis } { unsupported-engine }
  {
    The~ fduthesis~ class~ requires~ either~ XeTeX~ or~ LuaTeX. \\\\
    "#1"~ is~ not~ supported~ at~ present.~ You~ must~ change \\
    your~ typesetting~ engine~ to~ "xelatex"~ or~ "lualatex".
  }
\sys_if_engine_xetex:F
  {
    \sys_if_engine_luatex:F
      {
        \msg_fatal:nnx { fduthesis } { unsupported-engine }
          { \c_sys_engine_str }
      }
  }
%    \end{macrocode}
%
% \subsubsection{������������������}
%
% \begin{variable}{\l_@@_tmpa_box,
%   \l_@@_tmpa_clist,
%   \l_@@_tmpa_dim,
%   \l_@@_tmpa_skip,
%   \l_@@_tmpa_tl,\l_@@_tmpb_tl}
% ���������������
%    \begin{macrocode}
\box_new:N   \l_@@_tmpa_box
\clist_new:N \l_@@_tmpa_clist
\dim_new:N   \l_@@_tmpa_dim
\skip_new:N  \l_@@_tmpa_skip
\tl_new:N    \l_@@_tmpa_tl
\tl_new:N    \l_@@_tmpb_tl
%    \end{macrocode}
% \end{variable}
%
% \begin{variable}{\g_@@_thesis_type_tl}
% ���������������
%    \begin{macrocode}
\tl_new:N \g_@@_thesis_type_tl
%    \end{macrocode}
% \end{variable}
%
% \begin{variable}{\g_@@_to_ctexbook_clist,\g_@@_to_hyperref_clist}
% ��������������� \cls{fduthesis} ������ \cls{ctexbook} ������������
% \pkg{hyperref} ������������������������
%    \begin{macrocode}
\clist_new:N \g_@@_to_ctexbook_clist
\clist_new:N \g_@@_to_hyperref_clist
%    \end{macrocode}
% \end{variable}
%
% \begin{variable}{\g_@@_twoside_bool}
% ���������������������������������������������
%    \begin{macrocode}
\bool_new:N \g_@@_twoside_bool
\bool_set_true:N \g_@@_twoside_bool
%    \end{macrocode}
% \end{variable}
%
% \begin{variable}{\g_@@_draft_bool}
% ���������������������������������������������
%    \begin{macrocode}
\bool_new:N \g_@@_draft_bool
%    \end{macrocode}
% \end{variable}
%
% \begin{variable}{\g_@@_config_tl}
% ������������������������������������������
%    \begin{macrocode}
\tl_new:N \g_@@_config_tl
%    \end{macrocode}
% \end{variable}
%
% \subsubsection{������������}
%
% \begin{macro}{
%   \file_input:V,
%   \int_to_arabic:v,
%   \keys_define:nx,
%   \prop_item:No,
%   \regex_replace_all:nnc}
% \begin{macro}[TF]{\tl_if_eq:Vn}
% \LaTeX3{} ���������������
%    \begin{macrocode}
\cs_generate_variant:Nn \file_input:n          { V   }
\cs_generate_variant:Nn \int_to_arabic:n       { v   }
\cs_generate_variant:Nn \keys_define:nn        { nx  }
\cs_generate_variant:Nn \prop_item:Nn          { No  }
\cs_generate_variant:Nn \regex_replace_all:nnN { nnc }
\prg_generate_conditional_variant:Nnn \tl_if_eq:nn { Vn } { T, TF }
%    \end{macrocode}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\@@_quad:,\@@_qquad:}
% ��������� \LaTeXe{} ������ \tn{quad} ��� \tn{qquad}���
%    \begin{macrocode}
\cs_new:Npn \@@_quad:  { \skip_horizontal:n { 1 em } }
\cs_new:Npn \@@_qquad: { \skip_horizontal:n { 2 em } }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_vspace:N,\@@_vspace:n,\@@_vspace:c}
% ������ \LaTeXe{} ������ \tn{vspace*}���
%    \begin{macrocode}
\cs_new_protected:Npn \@@_vspace:N #1
  {
    \dim_set_eq:NN \l_@@_tmpa_dim \prevdepth
    \hrule height \c_zero_dim
    \nobreak
    \skip_vertical:N #1
    \skip_vertical:N \c_zero_skip
    \dim_set_eq:NN \prevdepth \l_@@_tmpa_dim
  }
\cs_new_protected:Npn \@@_vspace:n #1
  {
    \skip_set:Nn \l_@@_tmpa_skip {#1}
    \@@_vspace:N \l_@@_tmpa_skip
  }
\cs_generate_variant:Nn \@@_vspace:N { c }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_symbol:n}
% ��������� \LaTeXe{} ������ \tn{symbol}���
%    \begin{macrocode}
\cs_new:Npn \@@_symbol:n #1 { \tex_char:D #1 \scan_stop: }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_arabic:n}
% ��������� \LaTeXe{} ������ \tn{arabic}���
%    \begin{macrocode}
\cs_new:Npn \@@_arabic:n #1
  { \int_to_arabic:v { c@ #1 } }
%    \end{macrocode}
% \end{macro}
%
% \changes{v0.8}{2021/09/15}{������������ \LaTeX{} 2020/10/01 ���������������������}
%
% \begin{macro}{\@@_gadd_ltxhook:nn}
% ������ \LaTeX{} ���������������������������������������������������������������
% \texttt{begindocument/\allowbreak before} ������������������������ \pkg{xeCJK} ���������������
%    \begin{macrocode}
\cs_new_protected:Npn \@@_gadd_ltxhook:nn #1#2
  { \hook_gput_code:nnn {#1} { . } {#2} }
\hook_gset_rule:nnnn { begindocument/before } { . } { < } { xeCJK }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_patch_cmd:Nnn,\@@_appto_cmd:Nn}
% ��������������������� \pkg{ctexpatch} ���������
%    \begin{macrocode}
\cs_new_protected:Npn \@@_patch_cmd:Nnn #1#2#3
  {
    \ctex_patch_cmd_once:NnnnTF #1 { } {#2} {#3}
      { } { \ctex_patch_failure:N #1 }
  }
\cs_new_protected:Npn \@@_appto_cmd:Nn #1#2
  {
    \ctex_appto_cmd:NnnTF #1 { } {#2}
      { } { \ctex_patch_failure:N #1 }
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_define_fn_style:nn,
%   \@@_define_punct:nn,
%   \@@_define_name:nn,
%   \@@_define_name:nnn}
% ������������������������������������������������������������������
%    \begin{macrocode}
\cs_new_protected:Npn \@@_define_fn_style:nn #1#2
  { \tl_const:cn { c_@@_fn_style_ #1 _tl } {#2} }
\cs_new_protected:Npn \@@_define_punct:nn #1#2
  { \tl_const:cn { c_@@_ #1 _tl } {#2} }
\cs_new_protected:Npn \@@_define_name:nn #1#2
  { \tl_const:cn { c_@@_name_ #1 _tl } {#2} }
\cs_new_protected:Npn \@@_define_name:nnn #1#2#3
  {
    \tl_const:cn { c_@@_name_ #1    _tl } {#2}
    \tl_const:cn { c_@@_name_ #1 _en_tl } {#3}
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_msg_new:nn,
%   \@@_error:n,\@@_error:nn,\@@_error:nx,\@@_error:nnn,\@@_error:nnnn,
%   \@@_warning:n,\@@_warning:nn,\@@_warning:nxx,
%   \@@_info:nx}
% ������������������������������������
%    \begin{macrocode}
\cs_new:Npn \@@_msg_new:nn  { \msg_new:nnn      { fduthesis } }
\cs_new:Npn \@@_error:n     { \msg_error:nn     { fduthesis } }
\cs_new:Npn \@@_error:nn    { \msg_error:nnn    { fduthesis } }
\cs_new:Npn \@@_error:nx    { \msg_error:nnx    { fduthesis } }
\cs_new:Npn \@@_error:nnn   { \msg_error:nnnn   { fduthesis } }
\cs_new:Npn \@@_error:nnnn  { \msg_error:nnnnn  { fduthesis } }
\cs_new:Npn \@@_warning:n   { \msg_warning:nn   { fduthesis } }
\cs_new:Npn \@@_warning:nn  { \msg_warning:nnn  { fduthesis } }
\cs_new:Npn \@@_warning:nxx { \msg_warning:nnxx { fduthesis } }
\cs_new:Npn \@@_info:nx     { \msg_info:nnx     { fduthesis } }
%    \end{macrocode}
% \end{macro}
%
% \subsection{������������}
%
% ������ |fdu/option| ������������
%    \begin{macrocode}
\keys_define:nn { fdu / option }
  {
%    \end{macrocode}
%
% \changes{v0.7}{2018/02/01}{������ \opt{type} ���������}
%
% \begin{macro}{type}
% ������������������������������������������������������������������������������������������������
% ������������������������������������������������������������������������������
%    \begin{macrocode}
    type .choices:nn =
      { doctor, master, bachelor }
      { \tl_set_eq:NN \g_@@_thesis_type_tl \l_keys_choice_tl },
    type .value_required:n = true,
    type .initial:n = bachelor,
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{oneside,twoside}
% ���������������������������������������
%    \begin{macrocode}
    oneside .value_forbidden:n = true,
    twoside .value_forbidden:n = true,
    oneside .code:n =
      {
        \clist_gput_right:Nn \g_@@_to_ctexbook_clist { oneside }
        \bool_set_false:N    \g_@@_twoside_bool
      },
    twoside .code:n =
      {
        \clist_gput_right:Nn \g_@@_to_ctexbook_clist { twoside }
        \bool_set_true:N     \g_@@_twoside_bool
      },
%    \end{macrocode}
% \end{macro}
%
% \changes{v0.5}{2017/09/23}{������ \opt{nofonts} ���������}
%
% \begin{macro}{draft}
% ���������������������������������������������
%    \begin{macrocode}
    draft .choice:,
    draft / true  .code:n =
      {
        \bool_set_true:N     \g_@@_draft_bool
        \clist_gput_right:Nn \g_@@_to_ctexbook_clist { draft }
      },
    draft / false .code:n =
      { \bool_set_false:N    \g_@@_draft_bool },
    draft .default:n = true,
    draft .initial:n = false,
%    \end{macrocode}
% \end{macro}
%
% \changes{v0.7}{2018/01/31}{������ \opt{config} ���������}
%
% \begin{macro}{config}
% ������������������
%    \begin{macrocode}
    config .tl_set:N = \g_@@_config_tl,
%    \end{macrocode}
% \end{macro}
%
% ���������������������
%    \begin{macrocode}
    unknown .code:n = { \@@_error:n { unknown-option } }
  }
\@@_msg_new:nn { unknown-option }
  { Class~ option~ "\l_keys_key_str"~ is~ unknown. }
%    \end{macrocode}
%
% ������������������������ |fdu/option|���
%    \begin{macrocode}
\ProcessKeysOptions { fdu / option }
%    \end{macrocode}
%
% ���������������������������
%    \begin{macrocode}
\file_input:n { fduthesis.def }
\@@_msg_new:nn { load-config-file }
  { You~ are~ loading~ config~ file~ "#1". }
\tl_if_empty:NF \g_@@_config_tl
  {
    \@@_info:nx { load-config-file } { \g_@@_config_tl }
    \file_input:V \g_@@_config_tl
  }
%    \end{macrocode}
%
% \subsection{������������������������}
%
% \changes{v0.7}{2018/01/19}{������ \cls{ctexbook} ������������������������������
%   ��������������� \cls{book}���}
%
% ��������������� \cls{ctexbook} ������������
%    \begin{macrocode}
% TODO: (2017-07-22) Chinese fonts in fduthesis-en
\PassOptionsToClass
  {
    UTF8,
%<class-en>    scheme     = plain,
    heading    = true,
%<class>    fontset    = none,
%<class-en>    fontset    = fandol,
    zihao      = -4,
%<class>    linespread = \c_@@_line_spread_fp,
    \g_@@_to_ctexbook_clist
  }
  { ctexbook }
%    \end{macrocode}
%
% ������������������������
%    \begin{macrocode}
\clist_map_inline:nn
  {
    { no-math           } { fontspec },
    { perpage           } { footmisc },
    { amsmath, thmmarks } { ntheorem }
  }
  { \PassOptionsToPackage #1 }
%    \end{macrocode}
%
% ������ \cls{ctexbook} ������������
% ��������� \XeLaTeX{} ������������\cls{ctexbook} ������������������ \pkg{xeCJK}
% ��������������������� \LuaLaTeX{} ������������������������ \pkg{LuaTeX-ja} ���������
% ��������������� \cls{ctexbook} ������������ \pkg{fontspec} ���������
%    \begin{macrocode}
\LoadClass { ctexbook }
%    \end{macrocode}
%
% \changes{v0.4}{2017/08/13}{���������������������}
%
% ���������������������������\pkg{amsmath} ��������� \pkg{unicode-math} ���������������
%    \begin{macrocode}
\RequirePackage
  {
    amsmath,
    unicode-math,
    geometry,
    fancyhdr,
    footmisc,
    ntheorem,
    graphicx,
    longtable,
    caption,
    xcolor
  }
%    \end{macrocode}
%
% \changes{v0.8}{2021/09/16}{��������� \cls{ctexbook} ��� \pkg{xeCJK} ������������}
%
% \begin{macro}{\@@_check_package:nnn,\@@_check_class:nnn}
% ���������������������������������
%    \begin{macrocode}
\cs_new_protected:Npn \@@_check_package:nnn #1#2#3
  {
    \@ifpackagelater {#1} {#2}
      { } { \@@_error:nnnn { package-too-old } { Package } {#1} {#3} }
  }
\cs_new_protected:Npn \@@_check_class:nnn #1#2#3
  {
    \@ifclasslater {#1} {#2}
      { } { \@@_error:nnnn { package-too-old } { Class } {#1} {#3} }
  }
\@@_msg_new:nn { package-too-old }
  {
    #1~ "#2"~ is~ too~ old. \\
    The~ fduthesis~ class~ only~ supports~ "#2" \\
    with~ a~ version~ higher~ than~ v#3. \\\\
    Please~ update~ an~ up-to-date~ version~ of~ it \\
    using~ your~ TeX~ package~ manager~ or~ from~ CTAN.
  }
%    \end{macrocode}
% \end{macro}
%
%    \begin{macrocode}
\@@_check_class:nnn { ctexbook } { 2021/03/14 } { 2.5.6 }
\sys_if_engine_xetex:T
  { \@@_check_package:nnn { xeCJK } { 2020/05/01 } { 3.8.3 } }
%    \end{macrocode}
%
% \subsection{������������}
%
% ������ \pkg{geometry} ���������������������������������������������������������������������
% $\qty{2.54}{\centi\meter}=\qty{1}{in}$���
% $\qty{3.18}{\centi\meter}=\qty{1.25}{in}$���
%    \begin{macrocode}
\geometry
  {
    paper      = a4paper,
    vmargin    = 2.54 cm,
    hmargin    = 3.18 cm,
    headheight = 15 pt
  }
%    \end{macrocode}
%
% ���������������������������������������������������������
%    \begin{macrocode}
\bool_if:NT \g_@@_draft_bool { \geometry { showframe } }
%    \end{macrocode}
%
% \subsection{������}
%
% \subsubsection{���������������������}
%
% \changes{v0.7c}{2019/03/05}{������������������������������ macOS���}
%
% \begin{variable}{\g_@@_fontset_tl, \g_@@_cjk_fontset_tl}
% ������������������������
%    \begin{macrocode}
\tl_new:N \g_@@_fontset_tl
%<class>\tl_new:N \g_@@_cjk_fontset_tl
%    \end{macrocode}
% \end{variable}
%
% \begin{macro}{style/font}
% \changes{v0.7c}{2019/03/05}{������ \opt{garamond} ��� \opt{times*} ���������}
% ������������������������
%    \begin{macrocode}
\keys_define:nn { fdu / style }
  {
    font .choices:nn =
      { garamond, libertinus, lm, palatino, times, times*, none }
      { \tl_set_eq:NN \g_@@_fontset_tl \l_keys_choice_tl },
    font .value_required:n = true,
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{style/cjk-font}
% \changes{v0.7c}{2019/03/05}{������ \opt{sinotype} ��� \opt{sourcehan} ���������}
% ������������������������
%    \begin{macrocode}
%<*class>
\keys_define:nn { fdu / style }
  {
    cjk-font .choices:nn =
      { adobe, fandol, founder, mac, sinotype, sourcehan, windows, none }
      { \tl_set_eq:NN \g_@@_cjk_fontset_tl \l_keys_choice_tl },
    cjk-font .value_required:n = true,
  }
%    \end{macrocode}
%</class>
% \end{macro}
%
% \begin{macro}{
%   \@@_setmainfont:nn,
%   \@@_setsansfont:nn,
%   \@@_setmonofont:nn,
%   \@@_setmathfont:nn}
% ��������������������������������������������������� \pkg{fontspec} ��� \pkg{unicode-math}���
% \begin{arguments}
%   \item ���������
%   \item ������
% \end{arguments}
%    \begin{macrocode}
\cs_new_protected:Npn \@@_setmainfont:nn #1#2
  { \__fontspec_main_setmainfont:nn {#2} {#1} }
\cs_new_protected:Npn \@@_setsansfont:nn #1#2
  { \__fontspec_main_setsansfont:nn {#2} {#1} }
\cs_new_protected:Npn \@@_setmonofont:nn #1#2
  { \__fontspec_main_setmonofont:nn {#2} {#1} }
\cs_new_protected:Npn \@@_setmathfont:nn #1#2
  { \__um_setmathfont:nn {#2} {#1} }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{
%   \@@_setCJKmainfont:nn,
%   \@@_setCJKsansfont:nn,
%   \@@_setCJKmonofont:nn}
% \changes{v0.8}{2021/09/15}{������������������������}
% ��������������������������������������������������� \pkg{xeCJK} ��� \pkg{ctex} ���������
%    \begin{macrocode}
%<*class>
\cs_new_protected:Npn \@@_setCJKmainfont:nn #1#2
  { \@@_set_family:xnn { \CJKrmdefault } {#2} {#1} }
\cs_new_protected:Npn \@@_setCJKsansfont:nn #1#2
  { \@@_set_family:xnn { \CJKsfdefault } {#2} {#1} }
\cs_new_protected:Npn \@@_setCJKmonofont:nn #1#2
  { \@@_set_family:xnn { \CJKttdefault } {#2} {#1} }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_set_cjk_font_kai:nn,\fdu@kai}
% ���������������������������
%    \begin{macrocode}
\cs_new_protected:Npn \@@_set_cjk_font_kai:nn #1#2
  { \@@_set_family:nnn { fdu@kai } {#2} {#1} }
\cs_new_protected:Npn \fdu@kai
  { \@@_switch_family:n { fdu@kai } }
%    \end{macrocode}
% \end{macro}
%
% \changes{v0.7d}{2019/03/29}{������������������������������������������������������������������}
%
% \begin{macro}{
%   \@@_cjk_font_options:,
%   \@@_setCJKmainfont:n,
%   \@@_setCJKsansfont:n,
%   \@@_setCJKmonofont:n,
%   \@@_set_cjk_font_kai:n}
% ��� bold���italic ��� bold italic ������������ roman ���������
%    \begin{macrocode}
\tl_const:Nn \@@_cjk_font_options:
 { UprightFont = *, ItalicFont = *, AutoFakeBold = true }
\cs_new_protected:Npx \@@_setCJKmainfont:n   #1
  { \@@_setCJKmainfont:nn   {#1} { \@@_cjk_font_options: } }
\cs_new_protected:Npx \@@_setCJKsansfont:n   #1
  { \@@_setCJKsansfont:nn   {#1} { \@@_cjk_font_options: } }
\cs_new_protected:Npx \@@_setCJKmonofont:n   #1
  { \@@_setCJKmonofont:nn   {#1} { \@@_cjk_font_options: } }
\cs_new_protected:Npx \@@_set_cjk_font_kai:n #1
  { \@@_set_cjk_font_kai:nn {#1} { \@@_cjk_font_options: } }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_set_family:nnn,\@@_set_family:xnn,\@@_switch_family:n}
% ������ CJK ������������������������������������
%    \begin{macrocode}
\sys_if_engine_xetex:TF
  {
    \cs_new_eq:NN \@@_set_family:nnn  \xeCJK_set_family:nnn
    \cs_new_eq:NN \@@_switch_family:n \xeCJK_switch_family:n
  }
  {
    \cs_new_eq:NN \@@_set_family:nnn  \ctex_ltj_set_family:nnn
    \cs_new_eq:NN \@@_switch_family:n \ctex_ltj_switch_family:n
  }
\cs_generate_variant:Nn \@@_set_family:nnn { x }
%</class>
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{
%   \setmainfont,
%   \setsansfont,
%   \setmonofont,
%   \setmathfont,
%   \setCJKmainfont,
%   \setCJKsansfont,
%   \setCJKmonofont}
% ������������������������������������������������������������������������������������������������������������������
% ���������������������
%    \begin{macrocode}
\cs_new_protected:Npn \@@_set_font_helper:n #1
  {
    \exp_args:Nc \RenewDocumentCommand { set #1 font } { O { } m O { } }
      {
        \ctex_at_end_preamble:n
          { \use:c { @@_set #1 font:nn } {##2} { ##1, ##3 } }
      }
  }
\clist_map_inline:nn { main, sans, mono, math }
  { \@@_set_font_helper:n {#1} }
%<class>\clist_map_inline:nn { CJKmain, CJKsans, CJKmono }
%<class>  { \@@_set_font_helper:n {#1} }
%    \end{macrocode}
% \end{macro}
%
% \changes{v0.7e}{2019/04/10}{������ Libertinus ��� XITS ���������������������������}
% \changes{v0.8}{2021/09/15}{������ Libertinus Sans Bold Oblique ���������������������}
% \changes{v0.9}{2023/02/18}{������������ Libertinus ��� XITS ���������������������}
%
% \begin{macro}{\@@_load_font_garamond:}
% EB Garamond ���������
%    \begin{macrocode}
\cs_new_protected:Npn \@@_load_font_garamond:
  {
    \@@_setmainfont:nn { EBGaramond }
      {
        Extension      = .otf,
        UprightFont    = *-Regular,
        BoldFont       = *-Bold,
        ItalicFont     = *-Italic,
        BoldItalicFont = *-BoldItalic
      }
    \@@_setsansfont:nn { LibertinusSans }
      {
        Extension      = .otf,
        UprightFont    = *-Regular,
        BoldFont       = *-Bold,
        ItalicFont     = *-Italic,
      }
    \@@_setmonofont:nn { lmmonolt10 }
      {
        Extension      = .otf,
        UprightFont    = *-regular,
        BoldFont       = *-bold,
        ItalicFont     = *-oblique,
        BoldItalicFont = *-boldoblique
      }
    \@@_setmathfont:nn { Garamond-Math.otf } { }
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_load_font_libertinus:}
% Libertinus ���������
%    \begin{macrocode}
\cs_new_protected:Npn \@@_load_font_libertinus:
  {
    \@@_setmainfont:nn { LibertinusSerif }
      {
        Extension      = .otf,
        UprightFont    = *-Regular,
        BoldFont       = *-Bold,
        ItalicFont     = *-Italic,
        BoldItalicFont = *-BoldItalic,
      }
    \@@_setsansfont:nn { LibertinusSans }
      {
        Extension      = .otf,
        UprightFont    = *-Regular,
        BoldFont       = *-Bold,
        ItalicFont     = *-Italic,
      }
    \@@_setmonofont:nn { lmmonolt10 }
      {
        Extension      = .otf,
        UprightFont    = *-regular,
        BoldFont       = *-bold,
        ItalicFont     = *-oblique,
        BoldItalicFont = *-boldoblique
      }
    \@@_setmathfont:nn { LibertinusMath-Regular.otf } { }
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_load_font_lm:}
% Latin Modern ������������ \XeLaTeX{} ��� \LuaLaTeX{} ���������������������������������������
% ���������������������������
%    \begin{macrocode}
\cs_new_protected:Npn \@@_load_font_lm:
  { \@@_setmathfont:nn { latinmodern-math.otf } { } }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_load_font_palatino:}
% Palatino ���������
%    \begin{macrocode}
\cs_new_protected:Npn \@@_load_font_palatino:
  {
    \@@_setmainfont:nn { texgyrepagella }
      {
        Extension      = .otf,
        UprightFont    = *-regular,
        BoldFont       = *-bold,
        ItalicFont     = *-italic,
        BoldItalicFont = *-bolditalic
      }
    \@@_setsansfont:nn { LibertinusSans }
      {
        Extension      = .otf,
        UprightFont    = *-Regular,
        BoldFont       = *-Bold,
        ItalicFont     = *-Italic,
        Scale          = MatchUppercase,
      }
    \@@_setmonofont:nn { lmmonolt10 }
      {
        Extension      = .otf,
        UprightFont    = *-regular,
        BoldFont       = *-bold,
        ItalicFont     = *-oblique,
        BoldItalicFont = *-boldoblique
      }
    \@@_setmathfont:nn { texgyrepagella-math.otf } { }
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_load_font_times:}
% Times ���������
%    \begin{macrocode}
\cs_new_protected:Npn \@@_load_font_times:
  {
    \@@_setmainfont:nn { XITS }
      {
        Extension      = .otf,
        UprightFont    = *-Regular,
        BoldFont       = *-Bold,
        ItalicFont     = *-Italic,
        BoldItalicFont = *-BoldItalic,
      }
    \@@_setsansfont:nn { texgyreheros }
      {
        Extension      = .otf,
        UprightFont    = *-regular,
        BoldFont       = *-bold,
        ItalicFont     = *-italic,
        BoldItalicFont = *-bolditalic
      }
    \@@_setmonofont:nn { texgyrecursor }
      {
        Extension      = .otf,
        UprightFont    = *-regular,
        BoldFont       = *-bold,
        ItalicFont     = *-italic,
        BoldItalicFont = *-bolditalic,
        Ligatures      = CommonOff
      }
    \@@_setmathfont:nn { XITSMath-Regular.otf }
      { BoldFont = XITSMath-Bold.otf }
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_load_font_times*:}
% Times* ������������������������������������������������
%    \begin{macrocode}
\cs_new_protected:cpn { @@_load_font_ times* : }
  {
    \@@_setmainfont:nn { Times~ New~ Roman    } { }
    \@@_setsansfont:nn { Arial                } { }
    \@@_setmonofont:nn { Courier~ New         } { }
    \@@_setmathfont:nn { XITSMath-Regular.otf }
      { BoldFont = XITSMath-Bold.otf }
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_load_cjk_font_adobe:}
% Adobe ���������
%    \begin{macrocode}
\cs_new_protected:Npn \@@_load_cjk_font_adobe:
  {
    \@@_setCJKmainfont:n   { AdobeSongStd-Light       }
    \@@_setCJKsansfont:n   { AdobeHeitiStd-Regular    }
    \@@_setCJKmonofont:n   { AdobeFangsongStd-Regular }
    \@@_set_cjk_font_kai:n { AdobeKaitiStd-Regular    }
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_load_cjk_font_fandol:}
% Fandol ������������������������������ TeX ������������������������������������������������
%    \begin{macrocode}
\cs_new_protected:Npn \@@_load_cjk_font_fandol:
  {
    \@@_setCJKmainfont:nn   { FandolSong }
      {
        Extension      = .otf,
        UprightFont    = *-Regular,
        BoldFont       = *-Bold,
        ItalicFont     = *-Regular,
        BoldItalicFont = *-Bold
      }
    \@@_setCJKsansfont:nn   { FandolHei  }
      {
        Extension      = .otf,
        UprightFont    = *-Regular,
        BoldFont       = *-Bold,
        ItalicFont     = *-Regular,
        BoldItalicFont = *-Bold
      }
    \@@_setCJKmonofont:nn   { FandolFang }
      {
        Extension      = .otf,
        UprightFont    = *-Regular,
        BoldFont       = *-Regular,
        ItalicFont     = *-Regular,
        BoldItalicFont = *-Regular
      }
    \@@_set_cjk_font_kai:nn { FandolKai  }
      {
        Extension      = .otf,
        UprightFont    = *-Regular,
        BoldFont       = *-Regular,
        ItalicFont     = *-Regular,
        BoldItalicFont = *-Regular
      }
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_load_cjk_font_founder:}
% ���������������������������������������������������������������������������������������������������
%    \begin{macrocode}
\cs_new_protected:Npn \@@_load_cjk_font_founder:
  {
    \@@_setCJKmainfont:n   { FZShuSong-Z01  }
    \@@_setCJKsansfont:n   { FZHei-B01      }
    \@@_setCJKmonofont:n   { FZFangSong-Z02 }
    \@@_set_cjk_font_kai:n { FZKai-Z03      }
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_load_cjk_font_mac:}
% macOS ���������������������
%    \begin{macrocode}
\cs_new_protected:Npn \@@_load_cjk_font_mac:
  {
    \@@_setCJKmainfont:nn   { STSongti-SC }
      {
        UprightFont    = *-Light,
        BoldFont       = *-Bold,
        ItalicFont     = *-Light,
        BoldItalicFont = *-Bold
      }
    \@@_setCJKsansfont:nn   { STHeitiSC   }
      {
        UprightFont    = *-Medium,
        BoldFont       = *-Medium,
        ItalicFont     = *-Medium,
        BoldItalicFont = *-Medium
      }
    \@@_setCJKmonofont:n    { STFangsong  }
    \@@_set_cjk_font_kai:nn { STKaitiSC   }
      {
        UprightFont    = *-Regular,
        BoldFont       = *-Bold,
        ItalicFont     = *-Regular,
        BoldItalicFont = *-Bold
      }
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_load_cjk_font_sinotype:}
% ���������������
%    \begin{macrocode}
\cs_new_protected:Npn \@@_load_cjk_font_sinotype:
  {
    \@@_setCJKmainfont:n   { STSong     }
    \@@_setCJKsansfont:n   { STHeiti    }
    \@@_setCJKmonofont:n   { STFangsong }
    \@@_set_cjk_font_kai:n { STKaiti    }
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_load_cjk_font_sourcehan:}
% ������������������������������������������������������������������������������������������������
%    \begin{macrocode}
\cs_new_protected:Npn \@@_load_cjk_font_sourcehan:
  {
    \@@_setCJKmainfont:nn { SourceHanSerifSC }
      {
        UprightFont    = *-Regular,
        BoldFont       = *-Bold,
        ItalicFont     = *-Regular,
        BoldItalicFont = *-Bold
      }
    \@@_setCJKsansfont:nn { SourceHanSansSC  }
      {
        UprightFont    = *-Regular,
        BoldFont       = *-Bold,
        ItalicFont     = *-Regular,
        BoldItalicFont = *-Bold
      }
    \@@_warning:n { source-han }
  }
\@@_msg_new:nn { source-han }
  { Font~ set~ "sourcehan"~ does~ not~ contain~ kaiti~ and~ fangsong. }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_load_cjk_font_windows:}
% Windows ���������������������
%    \begin{macrocode}
\cs_new_protected:Npn \@@_load_cjk_font_windows:
  {
    \@@_setCJKmainfont:n   { SimSun   }
    \@@_setCJKsansfont:n   { SimHei   }
    \@@_setCJKmonofont:n   { FangSong }
    \@@_set_cjk_font_kai:n { KaiTi    }
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_load_font:}
% ���������������������
%    \begin{macrocode}
\cs_new_protected:Npn \@@_load_font:
  {
    \use:c { @@_load_font_     \g_@@_fontset_tl     : }
%<class>    \use:c { @@_load_cjk_font_ \g_@@_cjk_fontset_tl : }
  }
\ctex_at_end_preamble:n { \@@_load_font: }
%    \end{macrocode}
% \end{macro}
%
%^^A ������������������������ v0.7c ������������
% \changes{v0.5}{2017/09/09}{���������������������������������������������������������������������������
%   ���������������������������������������������������}
% \changes{v0.6}{2017/11/11}{������������ XITS ������������������������������}
% \changes{v0.5}{2017/09/23}{������ \kvopt{font}{none} ���������}
% \changes{v0.5}{2017/09/23}{������ \kvopt{cjk-font}{none} ���������}
% \changes{v0.5}{2017/09/23}{������ \pkg{fontspec} v2.6e���}
% \changes{v0.6}{2017/10/11}{������ \pkg{unicode-math} v0.8h���}
%
% \subsubsection{������������������}
%
% ������ GB 3102.11--93 ������ ISO 80000-2:2009 ������������������������������
% ������������������������������������������������������������������
% ��������� |\keys_set:nn{unicode-math}| ��������������� \cs{unimathsetup}���
%    \begin{macrocode}
% TODO: (2018-01-19) Do we need `mathrm=sym`?
\keys_set:nn { unicode-math }
  {
    math-style = ISO,
    bold-style = ISO,
%   mathrm     = sym
  }
%    \end{macrocode}
%
% \subsubsection{������}
%
% \begin{macro}{style/font-size}
% \changes{v0.9}{2023/02/08}{������������ \file{ctex-c5size.clo} ������������������}
% |font-size| ������������������������������������ \cls{ctexbook} ������������������
% ������������������ |.clo| ���������
%    \begin{macrocode}
\keys_define:nn { fdu / style }
  {
    font-size .choice:,
    font-size .value_required:n = true,
    font-size / -4 .code:n = { },
    font-size /  5 .code:n = { \ctex_file_input:n { ctex-c5size.clo } },
%<class-en>  }
%    \end{macrocode}
% \end{macro}
%
% \subsubsection{������������}
%
% \begin{macro}{style/fullwidth-stop}
% \changes{v0.6}{2017/10/14}{������������������ TECKit ���������������������}
% ���������������������������������������������
%    \begin{macrocode}
%<*class>
    fullwidth-stop .choice:,
    fullwidth-stop .value_required:n = true,
%    \end{macrocode}
% ���������������������������������������������\FSID ���������������
%    \begin{macrocode}
    fullwidth-stop / catcode .code:n =
      { \@@_set_fullwidth_stop_catcode: },
%    \end{macrocode}
% ������ TECKit ��������������������������������������� \tn{defaultCJKfontfeatures}
% |{|\kvopt{Map\-ping}{fullwidth-stop}|}|���������������������������������������\FSID���
% ������������������������������������ \XeTeX{} ������������
%    \begin{macrocode}
    fullwidth-stop / mapping .code:n =
      {
        \sys_if_engine_xetex:TF
          {
            \clist_gset:Nn \g__xeCJK_default_features_clist
              { Mapping = fullwidth-stop }
          }
          {
%    \end{macrocode}
% \LuaTeX{} ���������������������������������������������������
%    \begin{macrocode}
            \sys_if_engine_luatex:T
              {
                \@@_warning:n { mapping-not-available }
                \@@_set_fullwidth_stop_catcode:
              }
          }
      },
    fullwidth-stop / false .code:n = { }
  }
%    \end{macrocode}
% \end{macro}
% ���������������
%    \begin{macrocode}
\@@_msg_new:nn { mapping-not-available }
  {
    Option~ "fullwidth-stop = mapping"~ is~ not~ available~ in~ LuaTeX. \\
    "fullwidth-stop = catcode"~ will~ be~ set~ instead.
  }
%    \end{macrocode}
%
% \begin{macro}{\@@_set_fullwidth_stop_catcode:}
% \changes{v0.8}{2021/09/16}{���������������������������������������������������������������������}
% ���\FSID ���������������������������������������\FSFW���
%    \begin{macrocode}
\cs_new:Npn \@@_set_fullwidth_stop_catcode:
  {
    \char_set_active_eq:NN ^^^^3002 \c_@@_fwid_full_stop_tl
    \char_set_catcode_active:N ^^^^3002
    \clist_map_inline:nn
      { \c_@@_orig_decl_text_tl, \c_@@_auth_decl_text_tl }
      { \tl_set_rescan:Nno ##1 { } {##1} }
  }
%</class>
%    \end{macrocode}
% \end{macro}
%
% \changes{v0.8}{2021/09/15}{������ \tn{emph} ������������������}
%
% ������ \tn{emph} ���������������������������������������������������
%    \begin{macrocode}
%<*class>
\DeclareEmphSequence
  {
    \itshape \fdu@kai,
    \upshape \CJKfamily { \CJKfamilydefault },
  }
%</class>
%    \end{macrocode}
%
% \changes{v0.6}{2017/10/28}{������ \LuaTeX{} ���������������������������������������������������
%   ���������\pkg{ctex} v2.4.11 ���������������������������}
%
% \subsection{������������}
%
% ���������������������������������
%    \begin{macrocode}
\fancyhf { }
%    \end{macrocode}
%
% \begin{macro}{\@@_fancy_head:nn}
% ���������������
%    \begin{macrocode}
\cs_new_protected:Npn \@@_fancy_head:nn #1#2
  {
    \fancyhead [#1]
%<class>      { \small \fdu@kai \nouppercase {#2} }
%<class-en>      { \small \itshape \nouppercase {#2} }
  }
%    \end{macrocode}
% \end{macro}
%
% ������������������������������������������������������
%
% \cs{fancyhead} ���������������\opt{E} ��� \opt{O} ���������������������even���������������odd������ ��� \opt{L}���
% \opt{R} ��� \opt{C} ���������������������left������������right���������������center������������������������������������
% ���������������������������������������������������������������������������������������������������������������������������
%    \begin{macrocode}
\bool_if:NTF \g_@@_twoside_bool
  {
    \@@_fancy_head:nn { EL } { \leftmark  }
    \@@_fancy_head:nn { OR } { \rightmark }
  }
  {
    \@@_fancy_head:nn { L  } { \leftmark  }
    \@@_fancy_head:nn { R  } { \rightmark }
  }
%    \end{macrocode}
%
% ������������������������������������������ \opt{C} ���������������center������
%    \begin{macrocode}
\fancyfoot [ C ] { \small \thepage }
%    \end{macrocode}
%
% ������������������������������������
%    \begin{macrocode}
% \RenewDocumentCommand \headrulewidth { } { 0 pt }
%    \end{macrocode}
%
% \begin{macro}{\cleardoublepage}
% ��������� \tn{cleardoublepage}���������������������������������������������������������������������
% \url{https://tex.stackexchange.com/a/1683}���
%    \begin{macrocode}
\RenewDocumentCommand \cleardoublepage { }
  {
    \clearpage
    \bool_if:NT \g_@@_twoside_bool
      {
        \int_if_odd:nF \c@page
          { \hbox:n { } \thispagestyle { empty } \newpage }
      }
  }
%    \end{macrocode}
% \end{macro}
%
% \pkg{ctex} ������������ \opt{heading} ��������������������������������������� |headings|���
% ��������������� \pkg{ctex} ������������������������ \cs{pagestyle} ��� |fancy|���
%    \begin{macrocode}
\pagestyle { fancy }
%    \end{macrocode}
%
% \subsection{������������������}
%
% |\keys_set:nn{ctex}| ��������������� \cs{ctexset}���
%    \begin{macrocode}
\keys_set:nn { ctex }
  {
%    \end{macrocode}
% ������������chapter������������section���������������sub-section������������������
% ������������ \kvopt{fixskip}{true} ���������������������������������������
%    \begin{macrocode}
    chapter =
      {
%<class>        format      = \huge \normalfont \sffamily \centering,
%<*class-en>
        format      = \centering,
        nameformat  = \LARGE \bfseries,
        titleformat = \huge \bfseries,
        aftername   = \par \nobreak \vskip 10 pt,
%</class-en>
        beforeskip  = 50 pt,
        afterskip   = 40 pt,
        number      = \@@_arabic:n { chapter },
        fixskip     = true
      },
    section =
      {
%<class>        format      = \Large \normalfont \sffamily \raggedright,
%<class-en>        format      = \Large \bfseries \raggedright,
        beforeskip  = 3.5 ex plus 1.0 ex minus 0.2 ex,
        afterskip   = 2.7 ex plus 0.5 ex,
        fixskip     = true
      },
    subsection =
      {
%<class>        format      = \large \normalfont \sffamily \raggedright,
%<class-en>        format      = \large \bfseries \raggedright,
        beforeskip  = 3.25 ex plus 1.0 ex minus 0.2 ex,
        afterskip   = 2.5  ex plus 0.3 ex,
        fixskip     = true
      }
  }
%    \end{macrocode}
%
% \changes{v0.7d}{2019/03/24}{���������������������������������������������������������}
% \changes{v0.9}{2023/02/05}{������������������������������������������ \tn{quad}���}
%
% \begin{macro}{\@@_sanitize_chapter_title:n}
% ��������������������� \tn{quad}���
%    \begin{macrocode}
\cs_new_protected:Npn \@@_sanitize_chapter_title:n #1
  {
    \tl_clear:N \l_@@_tmpa_tl
    \tl_set:No \l_@@_tmpa_tl {#1}
    \tl_remove_all:Nn \l_@@_tmpa_tl { \quad }
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_chapter:n,\@@_chapter:V}
% ������������������������������������������������������������
%    \begin{macrocode}
\cs_new_protected:Npn \@@_chapter:n #1
  {
    \@@_sanitize_chapter_title:n {#1}
    \group_begin:
      \ctexset { chapter / numbering = false }
      \chapter [ \l_@@_tmpa_tl ] {#1}
    \group_end:
    \@@_chapter_header:n {#1}
  }
\cs_generate_variant:Nn \@@_chapter:n { V }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_chapter_no_toc:n,\@@_chapter_no_toc:V}
% ������������������������������������������������������������
% \url{https://tex.stackexchange.com/a/1821}���
%    \begin{macrocode}
\cs_new_protected:Npn \@@_chapter_no_toc:n #1
  {
    \chapter * {#1}
    \@@_sanitize_chapter_title:n {#1}
    \pdfbookmark [0] { \l_@@_tmpa_tl } { toc }
    \@@_chapter_header:n {#1}
  }
\cs_generate_variant:Nn \@@_chapter_no_toc:n { V }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_chapter_header:n}
% \changes{v0.8}{2022/01/18}{���������������������������������������������}
% ���������������������������������������������������������������������������������������������������������������������
% \tn{leftmark} ���������
%    \begin{macrocode}
\cs_new_protected:Npn \@@_chapter_header:n #1
  {
    \bool_if:NTF \g_@@_twoside_bool
      { \markboth {#1} {#1} }
      { \markboth { \hfill #1 \hfill } { } }
  }
%    \end{macrocode}
% \end{macro}
%
% \subsection{������}
%
% \changes{v0.3}{2017/02/21}{���������������}
%
% \subsubsection{������������}
%
% ������������������������������������
%    \begin{macrocode}
\clist_map_inline:nn
  {
    { plain           } { plain           },
    { libertinus      } { libertinus      },
    { libertinus_neg  } { libertinus*     },
    { libertinus_sans } { libertinus-sans },
    { pifont          } { pifont          },
    { pifont_neg      } { pifont*         },
    { pifont_sans     } { pifont-sans     },
    { pifont_sans_neg } { pifont-sans*    },
    { xits            } { xits            },
    { xits_sans       } { xits-sans       },
    { xits_sans_neg   } { xits-sans*      }
  }
  { \@@_define_fn_style:nn #1 }
%    \end{macrocode}
%
% \begin{variable}{\l_@@_fn_style_tl}
% ������������������������������������������
%    \begin{macrocode}
\tl_new:N \l_@@_fn_style_tl
%    \end{macrocode}
% \end{variable}
%
%    \begin{macrocode}
\keys_define:nn { fdu / style }
  {
%    \end{macrocode}
%
% \begin{macro}{style/footnote-style}
% ������������������������������
% \begin{itemize}
%   \item \opt{plain}������������������������
%   \item \opt{libertinus}��������� Libertinus Serif ��� Libertinus Sans
%     ���������
%   \item \opt{pifont}��������� \pkg{pifont} ���������
%   \item \opt{xits}��������� XITS ���������
% \end{itemize}
% ���������������������������������������������������|sans|���������������������������������|*|������
% ������������������
%    \begin{macrocode}
    footnote-style .choices:nn =
      {
        plain,
        libertinus, libertinus*, libertinus-sans,
        pifont,     pifont*,     pifont-sans,     pifont-sans*,
        xits,                    xits-sans,       xits-sans*
      }
%    \end{macrocode}
% \changes{v0.6}{2017/11/12}{������������ XITS-Math ���������}
% ��������� \opt{pifont} ��������������������� \pkg{pifont} ���������
%    \begin{macrocode}
      {
        \tl_gset_eq:NN \l_@@_fn_style_tl \l_keys_choice_tl
        \int_compare:nT { 5 <= \l_keys_choice_int <= 8 }
          { \RequirePackage { pifont } }
      },
    footnote-style .value_required:n = true
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_fn_symbol_libertinus:n}
% \opt{libertinus} ������������\numrange{1}{20} ������������\numrange{21}{46}
% ������������������������\numrange{47}{72} ������������������������
%    \begin{macrocode}
\cs_new:Npn \@@_fn_symbol_libertinus:n #1
  {
    \int_compare:nTF { #1 >= 21 }
      {
        \int_compare:nTF { #1 >= 47 }
          { \@@_symbol:n { \int_eval:n { "24B6 - 47 + #1 } } }
          { \@@_symbol:n { \int_eval:n { "24D0 - 21 + #1 } } }
      }
      { \@@_symbol:n { \int_eval:n { "2460 - 1 + #1 } } }
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_fn_symbol_libertinus_neg:n}
% \opt{libertinus} ������������������������ \numrange{1}{20}���
%    \begin{macrocode}
\cs_new:Npn \@@_fn_symbol_libertinus_neg:n #1
  {
    \int_compare:nTF { #1 >= 11 }
      { \@@_symbol:n { \int_eval:n { "24EB - 11 + #1 } } }
      { \@@_symbol:n { \int_eval:n { "2776 -  1 + #1 } } }
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_fn_symbol_pifont:n}
% \opt{pifont} ������������������������������������ \numrange{1}{10}���
%    \begin{macrocode}
\cs_new:Npn \@@_fn_symbol_pifont:n #1
  { \ding { \int_eval:n { 171 + #1 } } }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_fn_symbol_pifont_neg:n}
% \opt{pifont} ������������������
%    \begin{macrocode}
\cs_new:Npn \@@_fn_symbol_pifont_neg:n #1
  { \ding { \int_eval:n { 181 + #1 } } }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_fn_symbol_pifont_sans:n}
% \opt{pifont} ���������������������
%    \begin{macrocode}
\cs_new:Npn \@@_fn_symbol_pifont_sans:n #1
  { \ding { \int_eval:n { 191 + #1 } } }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_fn_symbol_pifont_sans_neg:n}
% \opt{pifont} ���������������������
%    \begin{macrocode}
\cs_new:Npn \@@_fn_symbol_pifont_sans_neg:n #1
  { \ding { \int_eval:n { 201 + #1 } } }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_fn_symbol_xits:n}
% \opt{xits} ������������\numrange{1}{9} ������������\numrange{10}{35}
% ������������������������\numrange{36}{61} ������������������������
%    \begin{macrocode}
\cs_new:Npn \@@_fn_symbol_xits:n #1
  {
    \int_compare:nTF { #1 >= 10 }
      {
        \int_compare:nTF { #1 >= 36 }
          { \@@_symbol:n { \int_eval:n { "24B6 - 36 + #1 } } }
          { \@@_symbol:n { \int_eval:n { "24D0 - 10 + #1 } } }
      }
      { \@@_symbol:n { \int_eval:n { "2460 - 1 + #1 } } }
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_fn_symbol_xits_sans:n}
% \opt{xits} ������������������������������ \numrange{1}{10}���
%    \begin{macrocode}
\cs_new:Npn \@@_fn_symbol_xits_sans:n #1
  { \@@_symbol:n { \int_eval:n { "2780 - 1 + #1 } } }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_fn_symbol_xits_sans_neg:n}
% \opt{xits} ��������������������������������� \numrange{1}{10}���
%    \begin{macrocode}
\cs_new:Npn \@@_fn_symbol_xits_sans_neg:n #1
  { \@@_symbol:n { \int_eval:n { "278A - 1 + #1 } } }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\thefootnote}
% \changes{v0.7}{2018/01/17}{���������������������������������}
% ������������������������
%    \begin{macrocode}
\cs_set:Npn \thefootnote { \fdu_footnote_number:N \c@footnote }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\fdu_footnote_number:N}
% ���������������������
%    \begin{macrocode}
\cs_new:Npn \fdu_footnote_number:N #1
  {
    \tl_case:NnF \l_@@_fn_style_tl
      {
%    \end{macrocode}
% \opt{plain} ��������������������������� |footnote| ���������
%    \begin{macrocode}
        \c_@@_fn_style_plain_tl
          { \int_use:N #1 }
%    \end{macrocode}
% \opt{libertinus} ������������������ Libertinus Serif ���
% Libertinus Sans ���������
%    \begin{macrocode}
        \c_@@_fn_style_libertinus_tl
          {
            \fontspec { LibertinusSerif-Regular.otf }
            \@@_fn_symbol_libertinus:n {#1}
          }
        \c_@@_fn_style_libertinus_neg_tl
          {
            \fontspec { LibertinusSerif-Regular.otf }
            \@@_fn_symbol_libertinus_neg:n {#1}
          }
        \c_@@_fn_style_libertinus_sans_tl
          {
            \fontspec { LibertinusSans-Regular.otf }
            \@@_fn_symbol_libertinus:n {#1}
          }
%    \end{macrocode}
% \opt{pifont} ������������������������������������
%    \begin{macrocode}
        \c_@@_fn_style_pifont_tl
          { \@@_fn_symbol_pifont:n {#1} }
        \c_@@_fn_style_pifont_neg_tl
          { \@@_fn_symbol_pifont_neg:n {#1} }
        \c_@@_fn_style_pifont_sans_tl
          { \@@_fn_symbol_pifont_sans:n {#1} }
        \c_@@_fn_style_pifont_sans_neg_tl
          { \@@_fn_symbol_pifont_sans_neg:n {#1} }
%    \end{macrocode}
% \opt{xits} ���������������������������������������
%    \begin{macrocode}
        \c_@@_fn_style_xits_tl
          {
            \fontspec { XITS-Regular.otf }
            \@@_fn_symbol_xits:n {#1}
          }
        \c_@@_fn_style_xits_sans_tl
          {
            \fontspec { XITS-Regular.otf }
            \@@_fn_symbol_xits_sans:n {#1}
          }
        \c_@@_fn_style_xits_sans_neg_tl
          {
            \fontspec { XITS-Regular.otf }
            \@@_fn_symbol_xits_sans_neg:n {#1}
          }
      }
%    \end{macrocode}
% ������ \cs{l_@@_fn_style_tl} ��������������������������������������� \opt{plain}
% ���������
%    \begin{macrocode}
      { \int_use:N #1 }
  }
%    \end{macrocode}
% \end{macro}
%
% \subsubsection{������������}
%
% \begin{macro}[int]{\@makefntext}
% \changes{v0.7}{2018/01/18}{��������������������� \pkg{fancyvrb} ���������
%   ���������������������������}
% ������������������������������������������������������������������������������ \qty{1.5}{em}���
% ��� \url{http://tex.stackexchange.com/q/19844} ���
% \url{https://www.zhihu.com/question/53030087}���
%    \begin{macrocode}
\cs_set:Npn \@makefntext #1
  {
    \mode_leave_vertical:
    \hbox_to_wd:nn { 1.5 em } { \@thefnmark \hfil }
    #1
  }
%    \end{macrocode}
% \end{macro}
%
% \subsection{������������}
%
% \changes{v0.3}{2017/05/07}{���������������������}
%
% \begin{variable}{\c_@@_thm_style_plain_clist,
%   \c_@@_thm_style_break_clist}
% ������ \opt{plain}���\opt{break} ������������������������������������
%    \begin{macrocode}
\clist_const:Nn \c_@@_thm_style_plain_clist
  { plain, margin, change }
\clist_const:Nn \c_@@_thm_style_break_clist
  { break, marginbreak, changebreak }
%    \end{macrocode}
% \end{variable}
%
% \begin{variable}{\l_@@_thm_style_tl,
%   \l_@@_thm_header_font_tl,
%   \l_@@_thm_body_font_tl,
%   \l_@@_thm_qed_tl,
%   \l_@@_thm_counter_tl}
% ������������������������������
%    \begin{macrocode}
\tl_new:N \l_@@_thm_style_tl
\tl_new:N \l_@@_thm_header_font_tl
\tl_new:N \l_@@_thm_body_font_tl
\tl_new:N \l_@@_thm_qed_tl
\tl_new:N \l_@@_thm_counter_tl
%    \end{macrocode}
% \end{variable}
%
% \begin{macro}{theorem/style,
%   theorem/header-font,
%   theorem/body-font,
%   theorem/qed,
%   theorem/counter}
% ������ |fdu/theorem| ������������
%    \begin{macrocode}
\keys_define:nn { fdu / theorem }
  {
    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         .tl_set:N  = \l_@@_thm_qed_tl,
    counter     .tl_set:N  = \l_@@_thm_counter_tl
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_thm_ntheorem_style:n,\@@_thm_ntheorem_new:w}
% ������ \pkg{ntheorem} ���������
%    \begin{macrocode}
\cs_new_eq:NN \@@_thm_ntheorem_style:n \theoremstyle
\cs_new_eq:NN \@@_thm_ntheorem_new:w   \newtheorem
%    \end{macrocode}
% \end{macro}
%
% \changes{v0.7}{2017/12/12}{��� \cs{fdunewtheorem} ���������������
%   \cs{new\-the\-orem}���}
%
% \begin{macro}{\newtheorem}
% \changes{v0.9}{2023/02/08}{������ \cs{DeclareDocumentCommand} ���������}
% ���������������������������
%    \begin{macrocode}
\DeclareDocumentCommand \newtheorem { s o m m }
  {
%    \end{macrocode}
% ��������������������� \cs{newtheorem*} ��������������������������������� \cs{QED}���
% ������ \cs{new\-the\-orem} ��������������������������������������� \cs{QED} ���
% \pkg{unicode-math} ���������������
%    \begin{macrocode}
    \IfBooleanTF {#1}
      { \tl_set:Nn \l_@@_thm_qed_tl { \ensuremath { \QED } } }
      { \tl_set:Nn \l_@@_thm_qed_tl { } }
%    \end{macrocode}
% ��������������������� \opt{plain}���
%    \begin{macrocode}
% TODO: (2017-12-07) Move to interface
    \tl_set:Nn \l_@@_thm_style_tl { plain }
%    \end{macrocode}
% ��������������������������� |fdu/theorem| ������������������������������������������������
% ���������������������������������������
%    \begin{macrocode}
    \IfValueT {#2} { \keys_set:nn { fdu / theorem } {#2} }
    \fdu_thm_set_header_font:V \l_@@_thm_header_font_tl
    \fdu_thm_set_body_font:V   \l_@@_thm_body_font_tl
    \fdu_thm_set_qed:V         \l_@@_thm_qed_tl
%    \end{macrocode}
% \cs{newtheorem} ������������������������������ \cs{newtheorem*}
% ������������������������������������������������������������������
%    \begin{macrocode}
    \IfBooleanTF {#1}
      {
%    \end{macrocode}
% ��� |*| ��������������������������� \opt{plain} ��� \opt{break} ���������������
% ���������������������������������������������������
%    \begin{macrocode}
        \clist_if_in:nVF { plain, break } \l_@@_thm_style_tl
          {
            \clist_if_in:NVTF
              \c_@@_thm_style_plain_clist \l_@@_thm_style_tl
              { \@@_thm_redefine_style:n { plain } }
              {
                \clist_if_in:NVTF
                  \c_@@_thm_style_break_clist \l_@@_thm_style_tl
                  { \@@_thm_redefine_style:n { break } }
                  {
                    \@@_error:nx { unknown-theorem-style }
                      { \l_@@_thm_style_tl }
                  }
              }
          }
%    \end{macrocode}
% \pkg{ntheorem} ������������������������������������ |nonumber| ���������
% ���������������������
%    \begin{macrocode}
        \tl_put_left:Nn \l_@@_thm_style_tl { nonumber }
        \fdu_thm_new_no_number:Vxx \l_@@_thm_style_tl {#3} {#4}
      }
      {
%    \end{macrocode}
% ������ |*| ������������������������|nonumber|���������������������������
%    \begin{macrocode}
        \clist_clear:N \l_@@_tmpa_clist
        \clist_concat:NNN \l_@@_tmpa_clist
          \c_@@_thm_style_plain_clist \c_@@_thm_style_break_clist
        \clist_if_in:NVF \l_@@_tmpa_clist \l_@@_thm_style_tl
          {
            \@@_error:nx { unknown-theorem-style }
              { \l_@@_thm_style_tl }
          }
        \fdu_thm_new:VVxx \l_@@_thm_style_tl \l_@@_thm_counter_tl
          {#3} {#4}
      }
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_thm_redefine_style:n}
% ������������������������������������������
%    \begin{macrocode}
\cs_new:Npn \@@_thm_redefine_style:n #1
  {
    \@@_warning:nxx { redefine-theorem-style }
      {#1} { \l_@@_thm_style_tl }
    \tl_set:Nn \l_@@_thm_style_tl {#1}
  }
%    \end{macrocode}
% \end{macro}
%
% ���������������
%    \begin{macrocode}
\@@_msg_new:nn { redefine-theorem-style }
  { Theorem~ style~ "#2"~ will~ be~ redefined~ as~ "#1". }
\@@_msg_new:nn { unknown-theorem-style }
  { Theorem~ style~ "#1"~ is~ unknown. }
%    \end{macrocode}
%
% \begin{macro}{\fdu_thm_new:nnnn,\fdu_thm_new:VVxx}
% ���������������������������
% \begin{arguments}
%   \item ������
%   \item ���������
%   \item ������������������
%   \item ���������������
% \end{arguments}
%    \begin{macrocode}
\cs_new:Npn \fdu_thm_new:nnnn #1#2#3#4
  {
    \@@_thm_ntheorem_style:n {#1}
    \@@_thm_ntheorem_new:w   {#3} {#4} [#2]
  }
\cs_generate_variant:Nn \fdu_thm_new:nnnn { VVxx }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\fdu_thm_new_no_number:nnn,
%   \fdu_thm_new_no_number:Vxx}
% ������������������������������
% \begin{arguments}
%   \item ������
%   \item ������������������
%   \item ���������������
% \end{arguments}
%    \begin{macrocode}
\cs_new:Npn \fdu_thm_new_no_number:nnn #1#2#3
  {
    \@@_thm_ntheorem_style:n {#1}
    \@@_thm_ntheorem_new:w   {#2} {#3}
  }
\cs_generate_variant:Nn \fdu_thm_new_no_number:nnn { Vxx }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\fdu_thm_set_qed:n,
%   \fdu_thm_set_header_font:n,
%   \fdu_thm_set_body_font:n,
%   \fdu_thm_set_qed:V,
%   \fdu_thm_set_header_font:V,
%   \fdu_thm_set_body_font:V}
% ������ \pkg{ntheorem} ���������������������������������������������������������������
% ���������������������������������������
%    \begin{macrocode}
\cs_new:Npn \fdu_thm_set_qed:n         #1 { \theoremsymbol     {#1} }
\cs_new:Npn \fdu_thm_set_header_font:n #1 { \theoremheaderfont {#1} }
\cs_new:Npn \fdu_thm_set_body_font:n   #1 { \theorembodyfont   {#1} }
\cs_generate_variant:Nn \fdu_thm_set_qed:n         { V }
\cs_generate_variant:Nn \fdu_thm_set_header_font:n { V }
\cs_generate_variant:Nn \fdu_thm_set_body_font:n   { V }
%    \end{macrocode}
% \end{macro}
%
% \subsection{������������������������}
%
% \changes{v0.3}{2017/07/09}{������������������}
%
% ��������������������� \env{figure} ��� \env{table} ������������������
%    \begin{macrocode}
\captionsetup [ figure ] { font = small,         labelsep = quad }
\captionsetup [ table  ] { font = { small, sf }, labelsep = quad }
%    \end{macrocode}
%
% \begin{macro}{\thefigure,\thetable}
% \changes{v0.7}{2018/01/17}{���������������������������������}
% \changes{v0.8}{2021/03/10}{������������ \tn{thechapter} ���������������������������������������������}
% ������������������������
%    \begin{macrocode}
\cs_set:Npn \thefigure
  { \thechapter - \@@_arabic:n { figure } }
\cs_set:Npn \thetable
  { \thechapter - \@@_arabic:n { table  } }
%    \end{macrocode}
% \end{macro}
%
% \subsection{������}
%
% \subsubsection{������������}
%
% \begin{variable}{\l_@@_info_title_tl,
%   \l_@@_info_date_tl,
%   \l_@@_info_author_tl,
%   \l_@@_info_supervisor_tl,
%   \l_@@_info_department_tl,
%   \l_@@_info_major_tl,
%   \l_@@_info_student_id_tl,
%   \l_@@_info_school_id_tl,
%   \l_@@_info_clc_tl,
%   \l_@@_info_jel_tl,
%   \l_@@_info_instructors_clist,
%   \l_@@_info_keywords_clist}
% ������������������������������
%    \begin{macrocode}
\clist_map_inline:nn
  {
    title, date, author, supervisor, department, major, student_id,
    school_id, clc, jel
  }
  { \tl_new:c { l_@@_info_ #1 _tl } }
\clist_new:N \l_@@_info_instructors_clist
\clist_new:N \l_@@_info_keywords_clist
%    \end{macrocode}
% \end{variable}
%
% \begin{variable}{\l_@@_info_title_en_tl,
%   \l_@@_info_author_en_tl,
%   \l_@@_info_supervisor_en_tl,
%   \l_@@_info_department_en_tl,
%   \l_@@_info_major_en_tl,
%   \l_@@_info_keywords_en_clist}
% ������������������������
%    \begin{macrocode}
\clist_map_inline:nn
  { title, author, supervisor, department, major }
  { \tl_new:c { l_@@_info_ #1 _en_tl } }
\clist_new:N \l_@@_info_keywords_en_clist
%    \end{macrocode}
% \end{variable}
%
% \begin{variable}{\l_@@_info_degree_type_tl}
% ���������������
%    \begin{macrocode}
\tl_new:N \l_@@_info_degree_type_tl
%    \end{macrocode}
% \end{variable}
%
% \changes{v0.9}{2023/02/12}{������������������������ \tn{\textbackslash} ������������������������}
% 
% \begin{variable}{\l_@@_info_title_sanitized_tl,\l_@@_info_title_en_sanitized_tl}
% ���������������������������
%    \begin{macrocode}
\tl_new:N \l_@@_info_title_sanitized_tl
\tl_new:N \l_@@_info_title_en_sanitized_tl
%    \end{macrocode}
% \end{variable}
%
% \begin{macro}{\@@_set_title:nn}
% ��������������������������������������� |\\| ������������������������
%    \begin{macrocode}
\cs_new_protected:Npn \@@_set_title:nn #1#2
  {
    \tl_set:cn { l_@@_info_ #1 _tl           } {#2}
    \tl_set:cn { l_@@_info_ #1 _sanitized_tl } {#2}
    \tl_replace_all:cnn { l_@@_info_ #1 _sanitized_tl } { \\ } { ~ }
    \regex_replace_all:nnc
      { \s+ } { \ }
      { l_@@_info_ #1 _sanitized_tl }
    \regex_replace_all:nnc
      { ([\x{4e00}-\x{9fff}]) \s+ ([\x{4e00}-\x{9fff}]) } { \1 \2 }
      { l_@@_info_ #1 _sanitized_tl }
  }
%    \end{macrocode}
% \end{macro}
%
% ������ |fdu/info| ������������
%    \begin{macrocode}
\keys_define:nn { fdu / info }
  {
%    \end{macrocode}
%
% \changes{v0.7}{2018/02/01}{������ \opt{info/degree} ���������}
%
% \begin{macro}{info/degree}
% ������������������������������������������
%    \begin{macrocode}
    degree      .choices:nn  =
      { academic, professional }
      { \tl_set_eq:NN \l_@@_info_degree_type_tl \l_keys_choice_tl },
    degree      .value_required:n = true,
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{info/title,info/title*}
% ������������������������������������������������������������������������
%    \begin{macrocode}
    title       .code:n      = { \@@_set_title:nn { title    } {#1} },
    title*      .code:n      = { \@@_set_title:nn { title_en } {#1} },
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{info/date}
% ���������������������
%    \begin{macrocode}
    date        .tl_set:N    = \l_@@_info_date_tl,
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{info/author,info/author*}
% ���������������
%    \begin{macrocode}
    author      .tl_set:N    = \l_@@_info_author_tl,
    author*     .tl_set:N    = \l_@@_info_author_en_tl,
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{info/supervisor,info/supervisor*}
% ���������������
%    \begin{macrocode}
    supervisor  .tl_set:N    = \l_@@_info_supervisor_tl,
%   supervisor* .tl_set:N    = \l_@@_info_supervisor_en_tl,
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{info/instructors}
% ���������������������
%    \begin{macrocode}
    instructors .clist_set:N = \l_@@_info_instructors_clist,
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{info/department,info/department*}
% ���������
%    \begin{macrocode}
    department  .tl_set:N    = \l_@@_info_department_tl,
%   department* .tl_set:N    = \l_@@_info_department_en_tl,
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{info/major,info/major*}
% ���������
%    \begin{macrocode}
    major       .tl_set:N    = \l_@@_info_major_tl,
%   major*      .tl_set:N    = \l_@@_info_major_en_tl,
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{info/student-id}
% ���������
%    \begin{macrocode}
    student-id  .tl_set:N    = \l_@@_info_student_id_tl,
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{info/school-id}
% ���������������
%    \begin{macrocode}
    school-id   .tl_set:N    = \l_@@_info_school_id_tl,
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{info/keywords,info/keywords*}
% ������������������
%    \begin{macrocode}
    keywords    .clist_set:N = \l_@@_info_keywords_clist,
    keywords*   .clist_set:N = \l_@@_info_keywords_en_clist,
%    \end{macrocode}
% \end{macro}
%
% \changes{v0.8}{2021/09/16}{������ \opt{info/jel} ���������}
%
% \begin{macro}{info/clc,info/jel}
% ������������������ JEL ������������
%    \begin{macrocode}
    clc         .tl_set:N    = \l_@@_info_clc_tl,
    jel         .tl_set:N    = \l_@@_info_jel_tl
  }
%    \end{macrocode}
% \end{macro}
%
% \changes{v0.4}{2017/08/10}{������ \opt{style/logo} ���
%   \opt{style/logo-size} ���������}
%
% \begin{variable}{\l_@@_cover_logo_tl,\l_@@_cover_logo_size_clist}
%    \begin{macrocode}
\tl_new:N    \l_@@_cover_logo_tl
\clist_new:N \l_@@_cover_logo_size_clist
%    \end{macrocode}
% \end{variable}
%
% \begin{macro}{style/logo,style/logo-size}
% ������������������������������������
%    \begin{macrocode}
\keys_define:nn { fdu / style }
  {
    logo      .tl_set:N    = \l_@@_cover_logo_tl,
    logo-size .clist_set:N = \l_@@_cover_logo_size_clist
  }
%    \end{macrocode}
% \end{macro}
%
% \subsubsection{������}
%
% \changes{v0.3}{2017/07/04}{������ \opt{info/secret-level} ���
%   \opt{info/secret-year} ���������}
%
% \begin{variable}{\l_@@_info_secret_level_tl}
% ������������������������
%    \begin{macrocode}
\tl_new:N \l_@@_info_secret_level_tl
%    \end{macrocode}
% \end{variable}
%
%    \begin{macrocode}
\keys_define:nn { fdu / info }
  {
%    \end{macrocode}
%
% \begin{macro}{info/secret-level}
% \changes{v0.6}{2017/11/11}{������������ XITS-Math ���������}
% ���������\opt{none} ������������������\opt{i}���\opt{ii}���\opt{iii} ���������
% ���������������������������
%    \begin{macrocode}
    secret-level .choices:nn  =
      { none, i, ii, iii }
      { \tl_set_eq:NN \l_@@_info_secret_level_tl \l_keys_choice_tl },
    secret-level .value_required:n = true,
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{info/secret-year}
% ���������������
%    \begin{macrocode}
    secret-year  .tl_set:N = \l_@@_info_secret_year_tl
  }
%    \end{macrocode}
% \end{macro}
%
% \subsubsection{������������������}
%
% \begin{macro}{\@@_spread_box:nn,\@@_spread_box:no}
% ������������������������������
% \begin{arguments}
%   \item ������
%   \item ������
% \end{arguments}
% ������ \cs{tl_map_inline:nn} ������������������ \tn{hfil}������������������ \tn{unskip}
% ������������������������ \tn{hfil}������ \url{https://tex.stackexchange.com/q/169689}���
%    \begin{macrocode}
\cs_new_protected:Npn \@@_spread_box:nn #1#2
  {
    \mode_leave_vertical:
    \hbox_to_wd:nn {#1} { \tl_map_inline:nn {#2} { ##1 \hfil } \unskip }
  }
\cs_generate_variant:Nn \@@_spread_box:nn { no }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_center_box:nn,\@@_center_box:Vn}
% ������������������������������
%    \begin{macrocode}
\cs_new_protected:Npn \@@_center_box:nn #1#2
  {
    \mode_leave_vertical:
    \hbox_to_wd:nn {#1} { \hfil #2 \hfil }
  }
\cs_generate_variant:Nn \@@_center_box:nn { Vn }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_fixed_width_box:nn}
% ���������������������������������
%    \begin{macrocode}
\cs_new:Npn \@@_fixed_width_box:nn #1#2
  { \parbox {#1} {#2} }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_fixed_width_center_box:nn}
% ������������������������������������������������
%    \begin{macrocode}
\cs_new:Npn \@@_fixed_width_center_box:nn #1#2
  { \parbox {#1} { \centering #2 } }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_get_text_width:Nn,\@@_get_text_width:NV}
% ������������������������������ |dim| ������������
% \begin{arguments}
%   \item |dim| ���������
%   \item ������
% \end{arguments}
%    \begin{macrocode}
\cs_new:Npn \@@_get_text_width:Nn #1#2
  {
    \hbox_set:Nn \l_@@_tmpa_box {#2}
    \dim_set:Nn #1 { \box_wd:N \l_@@_tmpa_box }
  }
\cs_generate_variant:Nn \@@_get_text_width:Nn { NV }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_blank_underline:n}
% \changes{v0.4}{2017/08/14}{������ \tn{rule} ������������������������������
%   \pkg{ulem} ���������}
% ���������������������|#1|: ���������
%    \begin{macrocode}
\cs_new:Npn \@@_blank_underline:n #1
  { \rule [ -0.5 ex ] {#1} { 0.4 pt } }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_line_spread:N,\@@_line_spread:n}
% ���������������|#1|: ������������ |fp| ���������
%    \begin{macrocode}
\cs_new:Npn \@@_line_spread:N #1
  { \linespread { \fp_use:N #1 } \selectfont }
\cs_new:Npn \@@_line_spread:n #1
  { \linespread {#1} \selectfont }
%    \end{macrocode}
% \end{macro}
%
% \subsubsection{���������������}
%
% \changes{v0.5}{2017/09/19}{������ \pkg{expl3} ������������������������
%   ������������������ \LaTeXe{} ������������}
%
% \begin{macro}{\@@_cover_id:,\@@_cover_id_tabular:n,\@@_cover_id_aux:n}
% ���������������������������������������������
% \changes{v0.9a}{2023/05/21}{���������������������������������������������������������}
%    \begin{macrocode}
\cs_new_protected:Npn \@@_cover_id:
  {
    \tl_if_eq:NnTF \l_@@_info_secret_level_tl { none }
      { \@@_cover_id_tabular:n { } }
      { \@@_cover_id_tabular:n { \@@_cover_secret: \\ } }
  }
\cs_new_protected:Npn \@@_cover_id_tabular:n #1
  {
    \exp_args:Nnx \begin{tabular} { \c_@@_cover_id_align_tl }
      #1
      \@@_cover_id_aux:n { school_id  } \\
      \@@_cover_id_aux:n { student_id }
    \end{tabular}
  }
\cs_new:Npn \@@_cover_id_aux:n #1
  {
    \tl_use:c { c_@@_name_ #1 _tl } &
    \tl_use:c { l_@@_info_ #1 _tl }
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{variable}{\c_@@_cover_id_align_tl}
% ���������������������������������������������������������������������������������������������������������
%    \begin{macrocode}
\tl_const:Nn \c_@@_cover_id_align_tl
  { l @ { \c_@@_fwid_colon_tl } l @ { } }
%    \end{macrocode}
% \end{variable}
%
% \begin{macro}{\@@_cover_secret:}
% ���������������������������������
%    \begin{macrocode}
\cs_new:Npn \@@_cover_secret:
  {
    \multicolumn { 2 } { l }
      {
        \sffamily
        \c_@@_name_secret_level_tl
        \c_@@_fwid_colon_tl
        \prop_item:No \c_@@_secret_prop
          { \l_@@_info_secret_level_tl }
        \c_@@_name_secret_star_tl
        \l_@@_info_secret_year_tl
      }
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_cover_logo:}
% ��������������������������������� \opt{width} ��� \opt{height} ������������������
% ���������\cs{l_@@_cover_logo_size_clist} ���������������������������������������
%    \begin{macrocode}
\cs_new_protected:Npn \@@_cover_logo:
  {
    \clist_pop:NN   \l_@@_cover_logo_size_clist \l_@@_tmpa_tl
    \clist_pop:NNTF \l_@@_cover_logo_size_clist \l_@@_tmpb_tl
      {
        \tl_if_empty:NTF \l_@@_tmpa_tl
          { \includegraphics [ height = \l_@@_tmpb_tl ] }
          {
            \includegraphics
              [ width  = \l_@@_tmpa_tl, height = \l_@@_tmpb_tl ]
          }
      }
      { \includegraphics [ width = \l_@@_tmpa_tl ] }
    { \l_@@_cover_logo_tl }
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_cover_type:}
% ���������������
%    \begin{macrocode}
\cs_new_protected:Npn \@@_cover_type:
  {
    \prop_get:NVN \c_@@_thesis_type_prop
      \g_@@_thesis_type_tl \l_@@_tmpa_tl
    \@@_spread_box:no { 0.45 \textwidth } { \l_@@_tmpa_tl }
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_cover_degree:}
% \changes{v0.7c}{2019/03/12}{���������������������������������������������}
% ���������������
%    \begin{macrocode}
\cs_new_protected:Npn \@@_cover_degree:
  {
    \tl_if_eq:NnF \g_@@_thesis_type_tl { bachelor }
      {
        \c_@@_fwid_left_paren_tl
        \prop_item:No \c_@@_degree_type_prop
          { \l_@@_info_degree_type_tl }
        \c_@@_fwid_right_paren_tl
      }
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_cover_info:}
% \changes{v0.8}{2021/09/21}{���������������������������������������}
% \changes{v0.9}{2023/02/05}{������������������������������������}
% ������������
%    \begin{macrocode}
\cs_new_protected:Npn \@@_cover_info:
  {
    \group_begin:
      \zihao { 4 }
%    \end{macrocode}
% ��������������������������������������������������������������������������������� \cs{c_@@_name_major_tl}���
%    \begin{macrocode}
      \tl_if_eq:NnT \l_@@_info_degree_type_tl { professional }
        {
          \tl_set_eq:NN
            \c_@@_name_major_tl \c_@@_name_major_professional_tl
        }
%    \end{macrocode}
% ������������������������������ |clist| ������������
%    \begin{macrocode}
      \clist_clear:N \l_@@_tmpa_clist
      \clist_map_inline:nn { department, major, author, supervisor, date }
        {
          \clist_gput_right:Nn \l_@@_tmpa_clist
            {
              \exp_args:Nx \@@_cover_info_left:n
                { \tl_use:c { c_@@_name_ ##1 _tl } }
              &
              \tl_use:c { l_@@_info_ ##1 _tl }
            }
        }
%    \end{macrocode}
% ������ \env{tabular} ���������������
% \changes{v0.9a}{2023/05/07}{��������������������������������� \pkg{array} ���������������������������}
%    \begin{macrocode}
      \exp_args:Nnx \begin{tabular} { \c_@@_cover_info_align_tl }
        \clist_use:Nn \l_@@_tmpa_clist { \\ [ 1 ex ] }
      \end{tabular}
    \group_end:
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{variable}{\c_@@_cover_info_align_tl}
% ������������������������������������������������������������������������
%    \begin{macrocode}
\tl_const:Nn \c_@@_cover_info_align_tl
  { c @ { \c_@@_fwid_colon_tl } c }
%    \end{macrocode}
% \end{variable}
%
% \begin{macro}{\@@_cover_info_left:n}
% ������������������������
%    \begin{macrocode}
\cs_new_protected:Npn \@@_cover_info_left:n #1
  {
    \tl_if_eq:NnTF \l_@@_info_degree_type_tl { professional }
      { \@@_spread_box:nn { 9 em } {#1} }
      { \@@_spread_box:nn { 6 em } {#1} }
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_cover_signature:N}
% ������������
%    \begin{macrocode}
\cs_new_protected:Npn \@@_cover_signature:N #1
  {
    \clist_map_inline:Nn #1
      {
        ##1 \c_@@_fwid_colon_tl
        \@@_blank_underline:n { 6 em }
        \@@_quad:
      }
  }
%    \end{macrocode}
% \end{macro}
%
% \subsubsection{������������}
%
% \changes{v0.7}{2018/02/27}{������ \pkg{xtemplate} ���������������������}
%
% ������������������������������������������
%    \begin{macrocode}
%<@@=fdu_cover>
\DeclareObjectType { fdu / cover } { \c_zero_int }
%    \end{macrocode}
%
% \begin{macro}{\DeclareCoverTemplate,\fdu_cover_declare_template:nn}
% ���������������������
% \begin{arguments}
%   \item ������������
%   \item ������������������������������������
% \end{arguments}
%    \begin{macrocode}
\NewDocumentCommand \DeclareCoverTemplate { m m }
  { \fdu_cover_declare_template:nn {#1} {#2} }
\cs_new_protected:Npn \fdu_cover_declare_template:nn #1#2
  {
    \tl_set:Nn \l_@@_template_tl {#1}
%    \end{macrocode}
% ���������������������
%    \begin{macrocode}
    \@@_declare_template_interface:nx {#1}
      {
        format      : tokenlist,
        top-skip    : skip,
        bottom-skip : skip,
        \clist_map_function:nN {#2} \@@_key_type:n
      }
%    \end{macrocode}
% ���������������������
%    \begin{macrocode}
    \tl_new:c   { l_@@ / #1 / format_tl   }
    \skip_new:c { l_@@ / #1 / top_skip    }
    \skip_new:c { l_@@ / #1 / bottom_skip }
    \clist_map_inline:nn {#2}
      {
        \tl_new:c   { l_@@ / #1 / ##1 / content_tl  }
        \tl_new:c   { l_@@ / #1 / ##1 / format_tl   }
        \skip_new:c { l_@@ / #1 / ##1 / bottom_skip }
      }
%    \end{macrocode}
% ���������������������^^A ��������������������� `fdu_cover' ������ `fdu'
%    \begin{macrocode}
    \@@_declare_template_code:nxn {#1}
      {
        format      = \exp_not:c { l_@@ / #1 / format_tl   },
        top-skip    = \use:c     { l_@@ / #1 / top_skip    },
        bottom-skip = \use:c     { l_@@ / #1 / bottom_skip },
        \clist_map_function:nN {#2} \@@_key_binding:n
      }
      {
        \AssignTemplateKeys
        \tl_use:c       { l_@@ / #1 / format_tl }
        \__fdu_vspace:c { l_@@ / #1 / top_skip  }
        \clist_map_inline:nn {#2}
          {
            \use:c { @@ / #1 / ####1 / align:n }
              {
                \tl_use:c { l_@@ / #1 / ####1 / format_tl  }
                \tl_use:c { l_@@ / #1 / ####1 / content_tl }
                \par
              }
            \__fdu_vspace:c { l_@@ / #1 / ####1 / bottom_skip }
          }
        \__fdu_vspace:c { l_@@ / #1 / bottom_skip }
      }
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{variable}{\l_@@_template_tl}
% ���������������������
%    \begin{macrocode}
\tl_new:N \l_@@_template_tl
%    \end{macrocode}
% \end{variable}
%
% \begin{macro}{\@@_declare_template_interface:nn,
%   \@@_declare_template_code:nnn,
%   \@@_declare_template_interface:nx,
%   \@@_declare_template_code:nxn}
% ������������������������������������������ \pkg{xtemplate} ������������������
%    \begin{macrocode}
\cs_new_protected:Npn \@@_declare_template_interface:nn #1#2
  { \DeclareTemplateInterface { fdu / cover } {#1} { \c_zero_int } {#2} }
\cs_new_protected:Npn \@@_declare_template_code:nnn #1#2#3
  { \DeclareTemplateCode { fdu / cover } {#1} { \c_zero_int } {#2} {#3} }
\cs_generate_variant:Nn \@@_declare_template_interface:nn { nx  }
\cs_generate_variant:Nn \@@_declare_template_code:nnn     { nxn }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_key_type:n}
%    \begin{macrocode}
\cs_new:Npn \@@_key_type:n #1
  {
    #1 / content     : tokenlist,
    #1 / format      : tokenlist,
    #1 / bottom-skip : skip,
    #1 / align       : choice { left, right, center, normal } = normal,
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_key_binding:n}
%    \begin{macrocode}
\cs_new:Npn \@@_key_binding:n #1
  {
    #1 / content     =
      \exp_not:c
        { l_@@ / \l_@@_template_tl / #1 / content_tl  },
    #1 / format      =
      \exp_not:c
        { l_@@ / \l_@@_template_tl / #1 / format_tl   },
    #1 / bottom-skip =
      \exp_not:c
        { l_@@ / \l_@@_template_tl / #1 / bottom_skip },
    #1 / align       =
      {
        left   =
          \exp_not:N \cs_set_protected:cpn
            { @@ / \l_@@_template_tl / #1 / align:n }
            \exp_not:n {##1}
            {
              \exp_not:n
                {
                  \group_begin:
                    \flushleft ##1 \endflushleft
                  \group_end:
                }
            },
        right  =
          \exp_not:N \cs_set_protected:cpn
            { @@ / \l_@@_template_tl / #1 / align:n }
            \exp_not:n {##1}
            {
              \exp_not:n
                {
                  \group_begin:
                    \flushright ##1 \endflushright
                  \group_end:
                }
            },
        center =
          \exp_not:N \cs_set_protected:cpn
            { @@ / \l_@@_template_tl / #1 / align:n }
            \exp_not:n {##1}
            {
              \exp_not:n
                {
                  \group_begin:
                    \center ##1 \endcenter
                  \group_end:
                }
            },
        normal =
          \exp_not:N \cs_set_protected:cpn
            { @@ / \l_@@_template_tl / #1 / align:n }
            \exp_not:n {##1}
            { \exp_not:n { \group_begin: ##1 \group_end: } }
      },
  }
%<@@=fdu>
%    \end{macrocode}
% \end{macro}
%
% \subsubsection{������������}
%
% \changes{v0.9}{2023/02/18}{��������������� PDF ���������}
%
% \begin{macro}{\makecoveri}
% ���������������������������
%    \begin{macrocode}
\NewDocumentCommand \makecoveri { }
  {
    \thispagestyle { empty }
    \tl_set:Nn \thepage { A }
    \UseInstance { fdu / cover } { cover-i-default }
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\makecoverii}
% \changes{v0.8}{2021/09/21}{\opt{info/instructors} ���������������������������������
%   ���������������}
% ���������������������������������������
%    \begin{macrocode}
\NewDocumentCommand \makecoverii { }
  {
    \thispagestyle { empty }
    \tl_set:Nn \thepage { B }
    \clist_if_empty:NTF \l_@@_info_instructors_clist
      { \hbox:n { } }
      { \UseInstance { fdu / cover } { cover-ii-default } }
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\makecoveriii}
% ������������������������
%    \begin{macrocode}
\NewDocumentCommand \makecoveriii { }
  {
    \cleardoublepage
    \thispagestyle { empty }
    \tl_set:Nn \thepage { C }
    \tl_if_empty:NTF \l_@@_declaration_page_tl
      { \UseInstance { fdu / cover } { cover-iii-default } }
      { \includepdf { \l_@@_declaration_page_tl } }
  }
%    \end{macrocode}
% \end{macro}
%
% ������������������������������������
%    \begin{macrocode}
\DeclareCoverTemplate { cover-i   }
  { id, logo, type, degree, title, title-en, info }
\DeclareCoverTemplate { cover-ii  } { title, name-list }
\DeclareCoverTemplate { cover-iii }
  {
    originality-decl-name,
    originality-decl-text,
    originality-decl-sig,
    authorization-decl-name,
    authorization-decl-text,
    authorization-decl-sig
  }
%    \end{macrocode}
%
% \changes{v0.7d}{2019/03/29}{���������������������������������������������������������������}
%
% ������������������������������������
%    \begin{macrocode}
\DeclareInstance { fdu / cover } { cover-i-default } { cover-i }
  {
%<class-en>    format                 = \@@_line_spread:N \c_@@_line_spread_fp,
    bottom-skip            = 0 pt plus 1.5 fill,
    id       / content     = \@@_cover_id:,
    logo     / content     = \@@_cover_logo:,
    type     / content     = \@@_cover_type:,
    degree   / content     = \@@_cover_degree:,
    title    / content     =
      \@@_fixed_width_center_box:nn
        { 0.9 \textwidth } { \l_@@_info_title_tl },
    title-en / content     =
      \@@_fixed_width_center_box:nn
        { 0.9 \textwidth } { \l_@@_info_title_en_tl },
    info     / content     = \@@_cover_info:,
    id       / format      = \zihao { -5 },
    type     / format      = \zihao {  2 },
    degree   / format      = \zihao {  4 },
    title    / format      = \zihao { -2 } \bfseries,
    title-en / format      =
      \@@_line_spread:n { 1.2 } \zihao { 4 } \bfseries,
    id       / bottom-skip = 0 pt plus 1.6 fill,
    logo     / bottom-skip = 0 pt plus 0.3 fill,
    type     / bottom-skip = -18 pt,
    degree   / bottom-skip = 0 pt plus 0.8 fill,
    title-en / bottom-skip = 0 pt plus 2.5 fill,
    id       / align       = right,
    logo     / align       = center,
    type     / align       = center,
    degree   / align       = center,
    title    / align       = center,
    title-en / align       = center,
    info     / align       = center,
  }
\DeclareInstance { fdu / cover } { cover-ii-default } { cover-ii }
  {
%<class-en>    format              = \@@_line_spread:N \c_@@_line_spread_fp,
    title     / content =
      \@@_spread_box:no { 7 em } { \c_@@_name_instructors_tl },
    name-list / content =
      \clist_use:Nn \l_@@_info_instructors_clist { \par },
    title     / format  = \zihao { 2 } \sffamily,
    name-list / format  = \large,
    title     / align   = center,
    name-list / align   = center,
  }
\DeclareInstance { fdu / cover } { cover-iii-default } { cover-iii }
  {
    format                                =
%<class>      \@@_line_spread:n { 1.8 },
%<class-en>      \@@_line_spread:n { 1.8 } \dim_set:Nn \parindent { 2 \ccwd },
    top-skip                              = 0 pt plus 0.2 fill,
    bottom-skip                           = 0 pt plus 2.5 fill,
    originality-decl-name   / content     = \c_@@_name_orig_decl_tl,
    originality-decl-text   / content     = \c_@@_orig_decl_text_tl,
    originality-decl-sig    / content     =
      \@@_cover_signature:N \c_@@_orig_decl_sign_clist,
    authorization-decl-name / content     = \c_@@_name_auth_decl_tl,
    authorization-decl-text / content     = \c_@@_auth_decl_text_tl,
    authorization-decl-sig  / content     =
      \@@_cover_signature:N \c_@@_auth_decl_sign_clist,
    originality-decl-name   / format      =
      \@@_line_spread:n { 1.2 } \zihao { -2 } \bfseries,
    authorization-decl-name / format      =
      \@@_line_spread:n { 1.2 } \zihao { -2 } \bfseries,
    originality-decl-name   / bottom-skip = 0.4 cm,
    originality-decl-text   / bottom-skip = 0.4 cm,
    originality-decl-sig    / bottom-skip = 0 pt plus 2.5 fill,
    authorization-decl-name / bottom-skip = 0.4 cm,
    authorization-decl-text / bottom-skip = 0.4 cm,
    originality-decl-name   / align       = center,
    originality-decl-sig    / align       = right,
    authorization-decl-name / align       = center,
    authorization-decl-sig  / align       = right,
  }
%    \end{macrocode}
%
% \begin{variable}{\l_@@_auto_make_cover_bool,\l_@@_declaration_page_tl}
%    \begin{macrocode}
\bool_new:N \l_@@_auto_make_cover_bool
\tl_new:N   \l_@@_declaration_page_tl
%    \end{macrocode}
% \end{variable}
%
% \begin{macro}{style/auto-make-cover}
% ���������������������������
%    \begin{macrocode}
\keys_define:nn { fdu / style }
  {
    auto-make-cover  .bool_set:N = \l_@@_auto_make_cover_bool,
    auto-make-cover  .default:n  = true,
%    \end{macrocode}
% \end{macro}
%
% \changes{v0.8}{2021/09/21}{������ \opt{style/declaration-page} ���������}
%
% \begin{macro}{style/declaration-page}
% ��������������������������� PDF ���������
%    \begin{macrocode}
    declaration-page .code:n     =
      {
        \tl_set_eq:NN \l_@@_declaration_page_tl \l_keys_value_tl
        \RequirePackage { pdfpages }
      },
  }
%    \end{macrocode}
% \end{macro}
%
% ��� \env{document} ���������������������������������������������������������
%    \begin{macrocode}
\ctex_after_end_preamble:n
  {
    \bool_if:NT \l_@@_auto_make_cover_bool
      {
        \begin{titlepage}
          \makecoveri \newpage \makecoverii
        \end{titlepage}
      }
  }
%    \end{macrocode}
%
% ��� \env{document} ������������������������������
%    \begin{macrocode}
\@@_gadd_ltxhook:nn { enddocument }
  { \bool_if:NT \l_@@_auto_make_cover_bool { \makecoveriii } }
%    \end{macrocode}
%
% \subsection{������}
%
% ���������������������
%    \begin{macrocode}
\keys_set:nn { ctex }
  {
%<class>    contentsname   = \c_@@_name_toc_tl,
%<class>    listfigurename = \c_@@_name_lof_tl,
%<class>    listtablename  = \c_@@_name_lot_tl,
%    \end{macrocode}
%
% ���������������������������������������
%    \begin{macrocode}
    chapter / tocline =
      {
%<class>        \normalfont \sffamily
%<class-en>        \bfseries
        \CTEXnumberline {#1} #2
      },
    section / tocline =
      {
%<class-en>        \bfseries
        \CTEXnumberline {#1} #2
      },
    subsection / tocline =
      {
%<class>        \fdu@kai
        \CTEXnumberline {#1} #2
      }
  }
%    \end{macrocode}
%
% \changes{v0.7e}{2019/05/12}{������������������������������������������}
%
% \begin{macro}{\tableofcontents,\listoffigures,\listoftables}
% ������ \cs{tableofcontents}���\cs{listoffigures} ��� \cs{listoftables} ������������
% ������������������������������������������������ PDF ��������������������� \LaTeXe{} ���������������
% \file{book.cls}^^A
% \footnote{������������������ \cs{tableofcontents} ��� \cs{@mkboth} ���������
% \cs{chapter*} ��������������������������������������������� typo���}���
%    \begin{macrocode}
\@@_patch_cmd:Nnn \tableofcontents
  {
    \chapter*{\contentsname
      \@mkboth{\MakeUppercase\contentsname}
              {\MakeUppercase\contentsname}}
  }
  { \@@_chapter_no_toc:V \contentsname }
\@@_patch_cmd:Nnn \listoffigures
  {
    \chapter*{\listfigurename}
    \@mkboth{\MakeUppercase\listfigurename}
            {\MakeUppercase\listfigurename}
  }
  { \@@_chapter:V \listfigurename }
\@@_patch_cmd:Nnn \listoftables
  {
    \chapter*{\listtablename}
    \@mkboth{\MakeUppercase\listtablename}
            {\MakeUppercase\listtablename}
  }
  { \@@_chapter:V \listtablename }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}[int]{\@starttoc}
% ������ \tn{@starttoc} ���������������������������������������������������
%    \begin{macrocode}
%<*class-en>
\@@_patch_cmd:Nnn \@starttoc
  { \begingroup }
  {
    \begingroup
      \@@_line_spread:N \c_@@_line_spread_fp
  }
%</class-en>
%    \end{macrocode}
% \end{macro}
%
% \subsection{������}
%
% \begin{environment}{abstract}
% \begin{environment}{abstract*}
% \changes{v0.7}{2018/03/05}{���������������}
% ������������������������������������������������������������������������������������������������������������������
%    \begin{macrocode}
\NewDocumentEnvironment { abstract  } { }
%<class>  { \@@_abstract_begin:    } { \@@_abstract_end:      }
%<class-en>  { \@@_abstract_en_begin: } { \@@_abstract_en_end:   }
%<*class>
\NewDocumentEnvironment { abstract* } { }
  { \@@_abstract_en_begin: } { \@@_abstract_en_end:   }
%</class>
%    \end{macrocode}
% \end{environment}
% \end{environment}
%
% \begin{macro}{\@@_abstract_begin:,\@@_abstract_en_begin:}
% ������������������
%    \begin{macrocode}
%<*class>
\cs_new_protected:Npn \@@_abstract_begin:
  { \@@_chapter:V \c_@@_name_abstract_tl    }
%</class>
\cs_new_protected:Npn \@@_abstract_en_begin:
  { \@@_chapter:V \c_@@_name_abstract_en_tl }
%    \end{macrocode}
% \end{macro}
%
% \changes{v0.7d}{2019/03/28}{���������������������������������}
% \changes{v0.8}{2021/12/22}{������������ CLC/JEL ���������������������������}
%
% \begin{macro}{\@@_abstract_end:}
% ������������������������������������������������ CLC/JEL ������������
%    \begin{macrocode}
%<*class>
\cs_new_protected:Npn \@@_abstract_end:
  {
    \@@_keywords:nNn
      { \sffamily \c_@@_name_keywords_tl \c_@@_fwid_colon_tl }
      \l_@@_info_keywords_clist { \c_@@_fwid_semicolon_tl }
    \tl_if_empty:NF \l_@@_info_clc_tl
      {
        \@@_clc_jel:nn
          { \sffamily \c_@@_name_clc_tl \c_@@_fwid_colon_tl }
          { \l_@@_info_clc_tl }
      }
  }
%</class>
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_abstract_en_end:}
% ��������������������������������� JEL ��������������� CLC ������������������������
%    \begin{macrocode}
\cs_new_protected:Npn \@@_abstract_en_end:
  {
    \@@_keywords:nNn
      { \bfseries \c_@@_name_keywords_en_tl \@@_quad: }
      \l_@@_info_keywords_en_clist { ; ~ }
    \tl_if_empty:NTF \l_@@_info_jel_tl
      {
        \tl_if_empty:NF \l_@@_info_clc_tl
          {
            \@@_clc_jel:nn
              { \bfseries \c_@@_name_clc_en_tl \@@_quad: }
              { \l_@@_info_clc_tl }
          }
      }
      {
        \@@_clc_jel:nn
          { \bfseries \c_@@_name_jel_en_tl \@@_quad: }
          { \l_@@_info_jel_tl }
      }
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_keywords:nNn,\@@_keywords_prevdepth:,\@@_clc_jel:nn}
% ���������������������������������������������������������������������������\tn{parbox} ���������������
% ������������������ \url{https://tex.stackexchange.com/a/34982}���
%    \begin{macrocode}
\cs_new_protected:Npn \@@_keywords:nNn #1#2#3
  {
    \par \mode_leave_vertical: \par \noindent
    \@@_get_text_width:Nn \l_@@_tmpa_dim {#1}
    \group_begin: #1 \group_end:
    \parbox [t] { \dim_eval:n { \textwidth - \l_@@_tmpa_dim } }
      {
        \clist_use:Nn #2 {#3} \par
        \cs_gset:Npx \@@_keywords_prevdepth:
          { \dim_use:N \tex_prevdepth:D }
      }
  }
\cs_new_protected:Npn \@@_clc_jel:nn #1#2
  {
    \par \tex_prevdepth:D \@@_keywords_prevdepth: \noindent
    \group_begin: #1 \group_end:
    #2
  }
%    \end{macrocode}
% \end{macro}
%
% \subsection{���������}
%
% \begin{environment}{notation}
% \changes{v0.7}{2018/03/05}{���������������}
% ������������������������ \env{longtable} ���������������������������������������������������
%    \begin{macrocode}
\NewDocumentEnvironment { notation } { O { l p { 7.5 cm } } }
  {
    \@@_notation_begin:
    \group_begin:
      \@@_notation_long_table_setup:
      \longtable {#1}
  }
  {
      \endlongtable
    \group_end:
  }
%    \end{macrocode}
% \end{environment}
%
% \begin{macro}{\@@_notation_begin:}
% ���������������������
%    \begin{macrocode}
\cs_new_protected:Npn \@@_notation_begin:
  {
%<class>    \@@_chapter:V \c_@@_name_notation_tl
%<class-en>    \@@_chapter:V \c_@@_name_notation_en_tl
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_notation_long_table_setup:}
% ������ \cs{LTpre} ��� \cs{LTpost}������������ \env{longtable} ������������������
% ������������������������������������������������������ \tn{arraystretch} ������������������
% ������������������ \cs{fp_set:Nn}���
%    \begin{macrocode}
\cs_new_protected:Npn \@@_notation_long_table_setup:
  {
%<class-en>    \tl_set:Nn \arraystretch { 1.3 }
    \dim_set_eq:NN \LTpre  \c_zero_dim
    \dim_set_eq:NN \LTpost \c_zero_dim
  }
%    \end{macrocode}
% \end{macro}
%
% \subsection{������}
%
% \changes{v0.9}{2023/02/06}{���������������������}
%
% \begin{environment}{acknowledgements}
% ���������������
%    \begin{macrocode}
\NewDocumentEnvironment { acknowledgements } { }
  { \@@_acknowledgements_begin: } { }
%    \end{macrocode}
% \end{environment}
%
% \begin{macro}{\@@_acknowledgements_begin:}
% ������������������
%    \begin{macrocode}
\cs_new_protected:Npn \@@_acknowledgements_begin:
  {
%<class>    \@@_chapter:V \c_@@_name_acknowledgements_tl
%<class-en>    \@@_chapter:V \c_@@_name_acknowledgements_en_tl
  }
%    \end{macrocode}
% \end{macro}
%
% \subsection{���������������������������}
%
% \changes{v0.6}{2017/10/27}{������ \BibTeX{}���������������������������������������������}
% \changes{v0.7}{2018/01/25}{������ \biber{} ��� \pkg{biblatex}���}
% \changes{v0.9a}{2023/05/11}{��������������������� \BibTeX{} ��� \pkg{biblatex}���}
%
% \begin{variable}{\l_@@_bib_backend_tl}
% ������������������������������������������������������������������������������ \BibTeX{} ��� \pkg{biblatex}���
% \pkg{biblatex}/\biber{}���
%    \begin{macrocode}
\tl_new:N \l_@@_bib_backend_tl
%    \end{macrocode}
% \end{variable}
%
% \begin{variable}{\l_@@_bib_style_tl,\l_@@_bib_gb_style_tl,\l_@@_cite_style_tl}
% ������������������������������������
%    \begin{macrocode}
\tl_new:N \l_@@_bib_style_tl
\tl_new:N \l_@@_bib_gb_style_tl
\tl_new:N \l_@@_cite_style_tl
%    \end{macrocode}
% \end{variable}
%
% \begin{variable}{\l_@@_bib_resource_clist}
% \changes{v0.8}{2021/03/07}{������ \texttt{clist} ��������������������� \pkg{biblatex}
%   ���������������������������}
% ������������������������������������
%    \begin{macrocode}
\clist_new:N \l_@@_bib_resource_clist
%    \end{macrocode}
% \end{variable}
%
% \changes{v0.6}{2017/10/28}{������ \opt{style/bib-style} ���������}
% \changes{v0.7}{2018/01/25}{������ \opt{style/bib-backend}���
%   \opt{style/cite-style} ��� \opt{style/bib-resource} ���������}
% \changes{v0.8}{2021/09/20}{������������ \pkg{gbt7714} ���������}
%
%    \begin{macrocode}
\keys_define:nn { fdu / style }
  {
%    \end{macrocode}
% \begin{macro}{style/bib-backend}
% ���������������������
%    \begin{macrocode}
    bib-backend .choice:,
    bib-backend .value_required:n = true,
    bib-backend / bibtex   .code:n =
      { \tl_set:Nn \l_@@_bib_backend_tl { bibtex } },
%    \end{macrocode}
% \changes{v0.8}{2022/01/08}{������������ \tn{addbibresource} ��������������� \pkg{biblatex} ������������}
% ������ \pkg{biblatex} ���������������������������������������������������������������������������������������������������
% ������������������������������������������������
%    \begin{macrocode}
    bib-backend / biblatex .code:n =
      {
        \tl_set:Nn \l_@@_bib_backend_tl { biblatex }
        \NewDocumentCommand \addbibresource { m }
          { \clist_gput_right:Nn \l_@@_bib_resource_clist {#1} }
      },
%    \end{macrocode}
% \end{macro}
% \begin{macro}{style/bib-style}
% ���������������������
%    \begin{macrocode}
    bib-style .choice:,
    bib-style .value_required:n = true,
    bib-style / numerical    .code:n =
      {
        \tl_set:Nn  \l_@@_bib_gb_style_tl { numerical  }
        \tl_clear:N \l_@@_bib_style_tl
      },
    bib-style / author-year .code:n =
      {
        \tl_set:Nn  \l_@@_bib_gb_style_tl { author-year }
        \tl_clear:N \l_@@_bib_style_tl
      },
    bib-style / unknown     .code:n =
      {
        \tl_set_eq:NN \l_@@_bib_style_tl \l_keys_value_tl
        \tl_clear:N   \l_@@_bib_gb_style_tl
      },
%    \end{macrocode}
% \end{macro}
% \begin{macro}{style/cite-style}
% \changes{v0.8}{2021/09/17}{��������� \BibTeX{} ������������}
% ���������������
%    \begin{macrocode}
    cite-style .tl_set:N = \l_@@_cite_style_tl,
%    \end{macrocode}
% \end{macro}
% \begin{macro}{style/bib-resource}
% ������������������������
%    \begin{macrocode}
    bib-resource .clist_set:N = \l_@@_bib_resource_clist
  }
%    \end{macrocode}
% \end{macro}
%
% \changes{v0.8}{2021/03/28}{������������������������������������}
%
% ������������������������������������������������\pkg{gbt774}���\pkg{natbib} ��� \pkg{biblatex}
% ������������������������������������������������ \pkg{hyperref} ���������������������������������
%    \begin{macrocode}
\ctex_at_end_preamble:n
  {
    \tl_if_eq:NnT \l_@@_bib_backend_tl { bibtex }
      {
        \tl_if_empty:NTF \l_@@_bib_style_tl
          {
            \RequirePackage [ sort & compress ] { gbt7714 }
            \exp_args:No \bibliographystyle
              { gbt7714- \l_@@_bib_gb_style_tl }
          }
          {
            \RequirePackage [ sort & compress ] { natbib }
            \exp_args:No \bibliographystyle
              { \l_@@_bib_style_tl }
          }
        \@@_bibtex_setup:
      }
  }
%    \end{macrocode}
% \pkg{biblatex} ��������� |begindocument/before| ������������������������������������
% \texttt{env/doc\-u\-ment/begin} ������������ \pkg{biblatex} ���������������������
% ������������������ |\begin{document}| ������������������ |\document| ���������������������
%    \begin{macrocode}
\@@_gadd_ltxhook:nn { env/document/begin }
  {
    \tl_if_eq:NnT \l_@@_bib_backend_tl { biblatex }
      {
        \@@_biblatex_pre_setup:
        \RequirePackage { biblatex }
        \@@_biblatex_post_setup:
      }
  }
%    \end{macrocode}
%
% \changes{v0.7}{2018/01/25}{������������ \cs{printbibliography} ������
%   ���������������������������}
% \changes{v0.7d}{2019/03/23}{������������������������������������������}
% \changes{v0.7e}{2020/08/30}{������ \pkg{gbt7714} v2.0���}
% \changes{v0.8}{2021/09/20}{������������������������������������������}
%
% \begin{macro}{\@@_bibtex_setup:,\parencite,\printbibliography}
% \BibTeX{} ���������������
%    \begin{macrocode}
\cs_new_protected:Npn \@@_bibtex_setup:
  {
%    \end{macrocode}
% ������������������������������������������������������������ \tn{cite} ������������������������
%    \begin{macrocode}
    \tl_if_eq:VnTF \l_@@_bib_gb_style_tl { numerical }
      {
        \exp_args:NNx \DeclareRobustCommand \parencite
          { \exp_args:No \exp_not:o { \cs:w cite ~ \cs_end: } }
        \exp_args:Nc \ctex_patch_cmd:Nnn { parencite ~ }
          { \begingroup }
          { \begingroup \bibstyle@numbers }
      }
      { \cs_set_eq:NN \parencite \cite }
%    \end{macrocode}
% ���������������
%    \begin{macrocode}
    \tl_if_empty:NF \l_@@_cite_style_tl
      { \exp_args:NV \citestyle \l_@@_cite_style_tl }
%    \end{macrocode}
% ������ \tn{textendash} ���\textendash���������������������������������
%    \begin{macrocode}
    \ctex_patch_cmd:Nnn \NAT@citexnum
      { - \NAT@penalty }
      { \textendash \NAT@penalty }
%    \end{macrocode}
% ���������������������������
%    \begin{macrocode}
    \cs_set:Npn \bibsection { \@@_chapter:V \bibname }
%    \end{macrocode}
% \BibTeX{} ������������ \pkg{biblatex} ���������������
%    \begin{macrocode}
    \NewDocumentCommand \printbibliography { o }
      {
        \exp_args:NV \bibliography \l_@@_bib_resource_clist
        \IfValueT {##1}
          { \@@_warning:nn { invalid-option-in-bibtex } {##1} }
      }
  }
\@@_msg_new:nn { invalid-option-in-bibtex }
  { Option(s)~ "#1"~ are~ invalid~ in~ BibTeX. }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_biblatex_pre_setup:,\@@_biblatex_post_setup:}
% \pkg{biblatex} ���������������
%    \begin{macrocode}
\cs_new_protected:Npn \@@_biblatex_pre_setup:
  {
    \cs_undefine:N \addbibresource
    \clist_new:N \l_@@_biblatex_options_clist
    \clist_put_right:Nn \l_@@_biblatex_options_clist { hyperref = manual }
%    \end{macrocode}
% ���������������������
%    \begin{macrocode}
    \clist_put_right:Nx \l_@@_biblatex_options_clist
      {
        style =
        \tl_if_empty:NTF \l_@@_bib_style_tl
          {
            \str_if_eq:VnTF \l_@@_bib_gb_style_tl { numerical }
              { gb7714-2015 } { gb7714-2015ay }
          }
          { \l_@@_bib_style_tl }
      }
%    \end{macrocode}
% ���������������
% \changes{v0.8}{2021/03/09}{���������������������������}
%    \begin{macrocode}
    \tl_if_empty:NF \l_@@_cite_style_tl
      {
        \clist_put_right:Nx \l_@@_biblatex_options_clist
          { citestyle = \l_@@_cite_style_tl }
      }
    \exp_args:NV \PassOptionsToPackage \l_@@_biblatex_options_clist
      { biblatex }
  }
\cs_new_protected:Npn \@@_biblatex_post_setup:
  {
    \clist_map_function:NN \l_@@_bib_resource_clist \addbibresource
    \@@_biblatex_allow_url_break:
    \@@_biblatex_use_en_dash:
%    \end{macrocode}
% ���������������������������
%    \begin{macrocode}
    \defbibheading { bibliography } [ \bibname ] { \@@_chapter:n {##1} }
%<*class-en>
    \exp_args:Nnx \DefineBibliographyStrings { english }
      { bibliography = { \c_@@_name_bib_en_tl } }
%</class-en>
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_biblatex_allow_url_break:}
% \pkg{biblatex} ��������� URL ���������������������������������������������������
%    \begin{macrocode}
\cs_new:Npn \@@_biblatex_allow_url_break:
  {
    \int_set_eq:NN \c@biburlucpenalty  \c_one_int
    \int_set_eq:NN \c@biburlnumpenalty \c_one_int
    \int_set_eq:NN \c@biburllcpenalty  \c_one_int
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_biblatex_use_en_dash:}
% ������ \tn{textendash} ���\textendash���������������������������������
%    \begin{macrocode}
\cs_new:Npn \@@_biblatex_use_en_dash:
  {
    \DefineBibliographyExtras { english }
      {
        \cs_set_nopar:Npn \bibrangedash
          { \textendash \penalty \hyphenpenalty }
      }
    \DefineBibliographyExtras { russian }
      {
        \cs_set_nopar:Npn \bibrangedash
          { \textendash \penalty \hyphenpenalty }
      }
  }
%    \end{macrocode}
% \end{macro}
%
% \changes{v0.7}{2018/01/25}{������ \pkg{gbt7714} v1.0������������������������������������������}
% \changes{v0.8}{2021/09/20}{������������������������������������������������������}
%
% \subsection{\pkg{hyperref} ������������}
%
% \changes{v0.4}{2017/08/13}{������ \pkg{hyperref} ������������������������������
%   ���������\opt{style/hyperlink} ��� \opt{style/hyperlink-color} ���������
%   ��� PDF ���������������}
% \changes{v0.7}{2018/01/23}{��� \pkg{hyperref} ���������������������������������
%   ������������������}
%
% \begin{macro}{\hypersetup}
% \changes{v0.9}{2023/02/08}{������ \cs{DeclareDocumentCommand} ���������}
% \begin{macro}{\fdu_hyperref_setup:n}
% \pkg{hyperref} ���������������������������������������������������������������������
% \tn{hypersetup} ������������������������������
%    \begin{macrocode}
\DeclareDocumentCommand \hypersetup { m }
  { \fdu_hyperref_setup:n {#1} }
\cs_new_protected:Npn \fdu_hyperref_setup:n #1
  { \clist_gput_right:Nn \g_@@_to_hyperref_clist {#1} }
%    \end{macrocode}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\@@_set_hyperlink_color_key:n}
% ��������������������������������������������������������� \pkg{l3keys} ������������������������������������
%    \begin{macrocode}
\cs_new:Npn \@@_set_hyperlink_color_key:n #1
  {
    hyperlink-color / \clist_item:nn {#1} {1} .code:n =
      {
        \@@_define_hyperlink_color:nnn
          { \clist_item:nn {#1} {2} }
          { \clist_item:nn {#1} {3} }
          { \clist_item:nn {#1} {4} }
        \fdu_hyperref_setup:n
          {
            linkcolor = fdu@link, linkbordercolor = fdu@link,
            urlcolor  = fdu@url,  urlbordercolor  = fdu@url,
            citecolor = fdu@cite, citebordercolor = fdu@cite
          }
      },
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_define_hyperlink_color:nnn}
% ������������������������
%    \begin{macrocode}
\cs_new_protected:Npn \@@_define_hyperlink_color:nnn #1#2#3
  {
    \definecolorset { HTML } { fdu@ } { }
      { link, #1; url, #2; cite, #3 }
  }
%    \end{macrocode}
% \end{macro}
%
%    \begin{macrocode}
\keys_define:nx { fdu / style }
  {
%    \end{macrocode}
%
% \begin{macro}{style/hyperlink}
% \changes{v0.8}{2021/12/27}{��������������������������������������������� \opt{hidelinks} ���������������������}
% ������������������
%    \begin{macrocode}
    hyperlink .choice:,
    hyperlink .value_required:n = true,
    hyperlink / border .code:n =
      { \fdu_hyperref_setup:n { colorlinks = false } },
    hyperlink / color  .code:n =
      { \fdu_hyperref_setup:n { colorlinks = true  } },
    hyperlink / none   .code:n =
      { \fdu_hyperref_setup:n { hidelinks } },
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{style/hyperlink-color}
% \changes{v0.8}{2021/12/27}{������������������������������������}
% ������������������
%    \begin{macrocode}
    hyperlink-color .choice:,
    hyperlink-color .value_required:n = true,
    \clist_map_function:nN
      {
        { classic,   FF0000, 0000FF, 00FF00 },
        { default,   990000, 0000B2, 007F00 },
        { material,  E91E63, 009688, 4CAF50 },
        { graylevel, 616161, 616161, 616161 },
        { prl,       2D3092, 2D3092, 2D3092 }
      }
      \@@_set_hyperlink_color_key:n
  }
%    \end{macrocode}
% \end{macro}
%
% \changes{v0.6}{2017/10/29}{������ URL ���������������}
%
% \begin{macro}{\fdu_allow_url_break:,\@@_add_url_break_points:}
% ������ URL ������������������������������������������������������
% \url{https://bit.ly/2hhIjLW}���
%    \begin{macrocode}
\cs_new:Npn \fdu_allow_url_break:
  {
    \cs_new:Npn \@@_add_url_break_points:
      { \tl_map_function:NN \c_@@_url_break_points_tl \do }
    \@@_appto_cmd:Nn \UrlBreaks
      { \UrlOrds \@@_add_url_break_points: }
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{variable}{\c_@@_url_break_points_tl}
% ������������������������ 26 ������������������������������������ 10 ���������������������
% \pkg{url} ������������ \tn{UrlBreaks} ������������������������ |*|���|-|���
% |~|���|'|���|"|���|-|���������������������������������
%    \begin{macrocode}
\tl_const:Nn \c_@@_url_break_points_tl
  {
    abcdefghijklmnopqrstuvwxyz
    ABCDEFGHIJKLMNOPQRSTUVWXYZ
    0123456789
  }
%    \end{macrocode}
% \end{variable}
%
% \changes{v0.7e}{2019/04/23}{������ \pkg{hyperref} ��� \pkg{unicode-math}
%   ���������������������}
%
% ������������������������ \pkg{hyperref} ���������
%    \begin{macrocode}
\ctex_at_end_preamble:n
  {
    \RequirePackage { hyperref }
%    \end{macrocode}
% ������ \tn{hypersetup} ��������� \pkg{hyperref} ���������������
%    \begin{macrocode}
    \hypersetup
      {
        bookmarksnumbered = true,
        psdextra          = true,
        unicode           = true,
%    \end{macrocode}
% ������ PDF ������������
%    \begin{macrocode}
%<*class>
        pdftitle    = \l_@@_info_title_sanitized_tl,
        pdfauthor   = \l_@@_info_author_tl,
        pdfkeywords = \l_@@_info_keywords_clist,
%</class>
%<*class-en>
        pdftitle    = \l_@@_info_title_en_sanitized_tl,
        pdfauthor   = \l_@@_info_author_en_tl,
        pdfkeywords = \l_@@_info_keywords_en_clist,
%</class-en>
%       pdfsubject  = ,
        pdfcreator  = \c_@@_name_pdf_creator_tl
      }
%    \end{macrocode}
% ��������������������� \cs{fdu_hyperref_setup:n} ��������������������� \tn{hypersetup}���
%    \begin{macrocode}
    \exp_args:NV \hypersetup \g_@@_to_hyperref_clist
%    \end{macrocode}
% URL ���������������
%    \begin{macrocode}
    \fdu_allow_url_break:
%    \end{macrocode}
% ������ \pkg{hyperref} ��� \pkg{biblatex} ������������������������������������������������������
%    \begin{macrocode}
    \tl_if_eq:NnT \l_@@_bib_backend_tl { biblatex }
      { \BiblatexManualHyperrefOn }
  }
%    \end{macrocode}
%
% ��� PDF ������������������ \tn{fdu@kai} ������������������������ \pkg{hyperref} ������������������
%    \begin{macrocode}
\ctex_at_end_package:nn { hyperref }
  {
    \pdfstringdefDisableCommands
      {
        \cs_set_eq:NN \fdu@kai \prg_do_nothing:
        \cs_set_eq:NN \quad    \c_space_tl
        \cs_set_eq:NN \qquad   \c_space_tl
      }
  }
%    \end{macrocode}
%
% \subsection{������������}
%
% \begin{macro}{info,style}
% ������������meta���������������
%    \begin{macrocode}
\keys_define:nn { fdu }
  {
    info  .meta:nn = { fdu / info  } {#1},
    style .meta:nn = { fdu / style } {#1}
  }
%    \end{macrocode}
% \end{macro}
%
% ������������������������
%    \begin{macrocode}
\keys_set:nn { fdu }
  {
    style   / font            = times,
%<class>    style   / cjk-font        = fandol,
    style   / font-size       = -4,
%<class>    style   / fullwidth-stop  = false,
    style   / auto-make-cover = true,
    style   / logo            = { fudan-name.pdf },
    style   / logo-size       = { 0.5 \textwidth },
    style   / hyperlink       = color,
    style   / hyperlink-color = default,
    style   / bib-style       = numerical,
    info    / degree          = academic,
    info    / secret-level    = none,
    info    / school-id       = { 10246 },
    info    / date            = { \zhtoday },
%<class>    theorem / header-font     = { \sffamily },
%<class-en>    theorem / header-font     = { \bfseries \upshape },
%<class>    theorem / body-font       = { \fdu@kai },
%<class-en>    theorem / body-font       = { \itshape },
    theorem / counter         = { chapter }
  }
%    \end{macrocode}
%
% \begin{macro}{\fdusetup}
% ���������������������
%    \begin{macrocode}
\NewDocumentCommand \fdusetup { m }
  { \keys_set:nn { fdu } {#1} }
%    \end{macrocode}
% \end{macro}
%
% \begin{environment}{proof}
% \begin{environment}{axiom}
% \begin{environment}{corollary}
% \begin{environment}{definition}
% \begin{environment}{example}
% \begin{environment}{lemma}
% \begin{environment}{theorem}
% ���������������������������������������
% ������������������������������������������������������������������������������
%    \begin{macrocode}
%<*class>
\newtheorem* { proof       } { \c_@@_name_proof_tl      }
\newtheorem  { axiom       } { \c_@@_name_axiom_tl      }
\newtheorem  { corollary   } { \c_@@_name_corollary_tl  }
\newtheorem  { definition  } { \c_@@_name_definition_tl }
\newtheorem  { example     } { \c_@@_name_example_tl    }
\newtheorem  { lemma       } { \c_@@_name_lemma_tl      }
\newtheorem  { theorem     } { \c_@@_name_theorem_tl    }
%</class>
%<*class-en>
\newtheorem* { proof       } { \c_@@_name_proof_en_tl      }
\newtheorem  { axiom       } { \c_@@_name_axiom_en_tl      }
\newtheorem  { corollary   } { \c_@@_name_corollary_en_tl  }
\newtheorem  { definition  } { \c_@@_name_definition_en_tl }
\newtheorem  { example     } { \c_@@_name_example_en_tl    }
\newtheorem  { lemma       } { \c_@@_name_lemma_en_tl      }
\newtheorem  { theorem     } { \c_@@_name_theorem_en_tl    }
%</class-en>
%</class|class-en>
%    \end{macrocode}
% \end{environment}
% \end{environment}
% \end{environment}
% \end{environment}
% \end{environment}
% \end{environment}
% \end{environment}
%
% \subsection{������������������������}
%
% \changes{v0.3}{2017/06/27}{���������������������������������������}
%
%    \begin{macrocode}
%<*definition>
%    \end{macrocode}
%
% \subsubsection{������������}
%
% \begin{variable}{\c_@@_name_simp_tl,\c_@@_name_trad_tl,\c_@@_name_en_tl}
% ���������������
%    \begin{macrocode}
\tl_const:Nn \c_@@_name_simp_tl { ������������          }
\tl_const:Nn \c_@@_name_trad_tl { ������������          }
\tl_const:Nn \c_@@_name_en_tl   { Fudan~ University }
%    \end{macrocode}
% \end{variable}
%
% ���������������������������~\ref{tab:punctuations}���
%    \begin{macrocode}
\clist_map_inline:nn
  {
    { ideo_comma       } { ^^^^3001 },
    { ideo_full_stop   } { ^^^^3002 },
    { fwid_comma       } { ^^^^ff0c },
    { fwid_full_stop   } { ^^^^ff0e },
    { fwid_colon       } { ^^^^ff1a },
    { fwid_semicolon   } { ^^^^ff1b },
    { fwid_left_paren  } { ^^^^ff08 },
    { fwid_right_paren } { ^^^^ff09 }
  }
  { \@@_define_punct:nn #1 }
%    \end{macrocode}
%
% \begin{table}[ht]
%   \caption{������������������}
%   \label{tab:punctuations}
%   \centering
%   \begin{tabular}{cccc}
%     \toprule
%       \textbf{������������} &
%       \textbf{������������} &
%       \textbf{������} &
%       \textbf{Unicode ������} \\
%     \midrule
%       ������������     & Ideographic comma           & ^^^^3001 & U+3001 \\
%       ������������     & Ideographic full stop       & ^^^^3002 & U+3002 \\
%       ������������     & Fullwidth comma             & ^^^^ff0c & U+FF0C \\
%       ������������������ & Fullwidth full stop         & ^^^^ff0e & U+FF0E \\
%       ������������     & Fullwidth colon             & ^^^^ff1a & U+FF1A \\
%       ������������     & Fullwidth semicolon         & ^^^^ff1b & U+FF1B \\
%       ������������������ & Fullwidth left parenthesis  & ^^^^ff08 & U+FF08 \\
%       ������������������ & Fullwidth right parenthesis & ^^^^ff09 & U+FF09 \\
%     \bottomrule
%   \end{tabular}
% \end{table}
%
% \begin{variable}{\c_@@_line_spread_fp}
% ��������������������������� $k$ ������������������
% \begin{equation*}
%   1.2 \times k \times \qty{12}{bp} = \qty{20}{pt}.
% \end{equation*}
% ���������1.2 ���������������������������������������\qty{12}{bp} ���������������������������
% \qty{20}{pt} ���������������������
%    \begin{macrocode}
\fp_const:Nn \c_@@_line_spread_fp
  { \dim_ratio:nn { 20 pt } { 12 bp } / 1.2 }
%    \end{macrocode}
% \end{variable}
%
% \subsubsection{���������}
%
% \begin{variable}{\c_@@_orig_decl_text_tl}
% ������������������������
%    \begin{macrocode}
\tl_const:Nn \c_@@_orig_decl_text_tl
  {
    ���������������������������������������������������������������������������������������������������
    ���������������������������������������������������������������������������������������������������
    ���������������������������������������������������������������������������������������������������
    ���������������������������������������������������������������������������������������������������
  }
%    \end{macrocode}
% \end{variable}
%
% \begin{variable}{\c_@@_auth_decl_text_tl}
% ���������������������������
%    \begin{macrocode}
\tl_const:Nn \c_@@_auth_decl_text_tl
  {
    ���������������������������������������������������������������������������������������������������
    ���������������������������������������������������������������������������������������������������
    ���������������������������������������������������������������������������������������������������
    ������������������������������������������������������������������������������������������������
  }
%    \end{macrocode}
% \end{variable}
%
% \begin{variable}{\c_@@_orig_decl_sign_clist,
%   \c_@@_auth_decl_sign_clist}
% ������������������������
%    \begin{macrocode}
\clist_const:Nn \c_@@_orig_decl_sign_clist
  { ������������, ������ }
\clist_const:Nn \c_@@_auth_decl_sign_clist
  { ������������, ������������, ������ }
%    \end{macrocode}
% \end{variable}
%
% \subsubsection{������}
%
% \begin{variable}{\c_@@_thesis_type_prop,\c_@@_degree_type_prop}
% ������������������������������
%    \begin{macrocode}
\prop_const_from_keyval:Nn \c_@@_thesis_type_prop
  {
    doctor   = ������������������,
    master   = ������������������,
    bachelor = ������������������,
  }
\prop_const_from_keyval:Nn \c_@@_degree_type_prop
  {
    academic     = ������������,
    professional = ������������,
  }
%    \end{macrocode}
% \end{variable}
%
% \begin{variable}{\c_@@_secret_prop}
% ���������������
%    \begin{macrocode}
\prop_const_from_keyval:Nn \c_@@_secret_prop
  {
    i   = ������,
    ii  = ������,
    iii = ������,
  }
%    \end{macrocode}
% \end{variable}
%
% \changes{v0.9a}{2023/03/23}{������������������������������������������}
%
% ���������������������������������������������
%    \begin{macrocode}
\clist_map_inline:nn
  {
    { secret_level       } { ��� \qquad ���                  },
    { secret_star        } { \textrm { \bigstar }          },
    { school_id          } { ������������                      },
    { student_id         } { ��� \qquad ���                  },
    { department         } { ������                          },
    { major              } { ������                          },
    { major_professional } { ������������������������������          },
    { author             } { ������                          },
    { supervisor         } { ������������                      },
    { date               } { ������������                      },
    { instructors        } { ������������������                  },
    { author_sign        } { ������������                      },
    { supervisor_sign    } { ������������                      },
    { sign_date          } { ������                          },
    { toc                } { ��� \quad ���                   },
    { lof                } { ������������                      },
    { lot                } { ������������                      },
    { bib_en             } { Bibliography                  },
    { pdf_creator        } { LaTeX~ with~ fduthesis~ class },
    { orig_decl          }
      { \c_@@_name_simp_tl \\ ���������������������������   },
    { auth_decl          }
      { \c_@@_name_simp_tl \\ ������������������������������ },
  }
  { \@@_define_name:nn #1 }
\clist_map_inline:nn
  {
    { abstract         } { ��� \quad ��� } { Abstract          },
    { keywords         } { ���������      } { Keywords:         },
    { clc              } { ���������������  } { CLC~ code:        },
    { jel              } { JEL ���������  } { JEL~ code:        },
    { notation         } { ���������      } { List~ of~ Symbols },
    { acknowledgements } { ��� \quad ��� } { Acknowledgements  }
  }
  { \@@_define_name:nnn #1 }
%    \end{macrocode}
%
% ������������������������
%    \begin{macrocode}
\clist_map_inline:nn
  {
    { proof      } { ������ } { Proof      },
    { axiom      } { ������ } { Axiom      },
    { corollary  } { ������ } { Corollary  },
    { definition } { ������ } { Definition },
    { example    } { ���   } { Example    },
    { lemma      } { ������ } { Lemma      },
    { theorem    } { ������ } { Theorem    }
  }
  { \@@_define_name:nnn #1 }
%    \end{macrocode}
%
% \begin{variable}{\c_@@_name_major_professional_tl}
% \changes{v0.9}{2023/02/05}{���������������������������������}
% ���������������������������������
%    \begin{macrocode}
\tl_put_right:Nn \c_@@_name_major_professional_tl
  { { \skip_horizontal:n { -0.5 em } } }
%</definition>
%<@@=>
%    \end{macrocode}
% \end{variable}
%
% \clearpage
%
% \end{implementation}
%