<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">% \iffalse meta-comment
% !TeX program  = XeLaTeX
% !TeX encoding = UTF-8
%
% Copyright (C) 2017--2023 by Xiangdong Zeng &lt;xdzeng96@gmail.com&gt;
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either
% version 1.3c of this license or (at your option) any later
% version. 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.
%
%&lt;*internal&gt;
\iffalse
%&lt;/internal&gt;
%
%&lt;*readme&gt;
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: &lt;https://github.com/stone-zeng/fduthesis&gt;.

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&amp;ndash;2023 by Xiangdong Zeng &lt;xdzeng96@gmail.com&gt;.
%&lt;/readme&gt;
%
%&lt;*internal&gt;
\fi
\begingroup
  \def\NameOfLaTeXe{LaTeX2e}
\expandafter\endgroup\ifx\NameOfLaTeXe\fmtname\else
\csname fi\endcsname
%&lt;/internal&gt;
%
%&lt;*install&gt;
\input docstrip.tex
\keepsilent
\askforoverwritefalse

\preamble

    Copyright (C) 2017--2023 by Xiangdong Zeng &lt;xdzeng96@gmail.com&gt;

    This work may be distributed and/or modified under the
    conditions of the LaTeX Project Public License, either
    version 1.3c of this license or (at your option) any later
    version. 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}}
%&lt;*internal&gt;
  \usedir{source/latex/fduthesis}
    \file{\jobname.ins}        {\from{\jobname.dtx}{install}}
%&lt;/internal&gt;
  \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
%&lt;/install&gt;
%
%&lt;*internal&gt;
\fi
%&lt;/internal&gt;
%
%&lt;class|class-en|doc|logo&gt;\NeedsTeXFormat{LaTeX2e}[2020/10/01]
%&lt;*!(driver|install|ex-logo|cover)&gt;
%&lt;!readme&gt;\GetIdInfo $Id: fduthesis.dtx 0.9a 2023-05-27 12:00:00Z Xiangdong Zeng &lt;xdzeng96@gmail.com&gt; $
%&lt;class&gt;  {Thesis template for Fudan University}
%&lt;class&gt;\ProvidesExplClass{\ExplFileName}
%&lt;class-en&gt;  {Thesis template for Fudan University (English version)}
%&lt;class-en&gt;\ProvidesExplClass{\ExplFileName-en}
%&lt;definition&gt;  {Definition file for fduthesis}
%&lt;definition&gt;\ProvidesExplFile{\ExplFileName.def}
%&lt;doc&gt;  {Documentation class for fduthesis}
%&lt;doc&gt;\ProvidesExplClass{fdudoc}
%&lt;logo&gt;  {Fudan University's Visual Identity}
%&lt;logo&gt;\ProvidesExplPackage{fdulogo}
%&lt;!readme&gt;  {\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription}
%&lt;/!(driver|install|ex-logo|cover)&gt;
%&lt;*driver&gt;
% \PassOptionsToPackage{showframe}{geometry}
\documentclass{fdudoc}
\usepackage{xeCJKfntef}
\hypersetup{
  pdftitle  = {fduthesis: å¤æ—¦å¤§å­¦è®ºæ–‡æ¨¡æ¿},
  pdfauthor = {æ›¾ç¥¥ä¸œ}}
% å…¨è§’æ&nbsp;‡ç‚¹æ”¾åœ¨å¼•å·ä¸­ï¼Œéœ€è¦æ”¹æˆåŠè§’å¼ï¼Œå¦åˆ™é—´è·è¿‡å¤§ï¼Œä¸å¥½çœ‹
\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
%&lt;!--CODEDOC--&gt;  \EnableImplementation
%&lt;!--CODEDOC--&gt;  \def\FDUCODEDOC{}
  \DocInput{fduthesis.dtx}
%&lt;!--CODEDOC--&gt;  \DocInput{fduthesis-doc.dtx,fduthesis-logo.dtx}
%&lt;!--CODEDOC--&gt;  \IndexLayout
%&lt;!--CODEDOC--&gt;  \PrintChanges
%&lt;!--CODEDOC--&gt;  \PrintIndex
\end{document}
%&lt;/driver&gt;
% \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}{æ·»åŠ&nbsp;æµ‹è¯•æ–‡ä»¶ã€‚}
% \changes{v0.3}{2017/05/26}{ä½¿ç”¨ Travis CI è¿›è¡ŒæŒç»­é›†æˆã€‚}
% \changes{v0.3}{2017/06/23}{æ·»åŠ&nbsp;å¤æ—¦å¤§å­¦è§†è§‰è¯†åˆ«ç³»ç»Ÿã€‚}
% \changes{v0.3}{2017/07/05}{æ–°å¢žå£°æ˜Žé¡µã€‚}
% \changes{v0.3}{2017/07/10}{æ·»åŠ&nbsp;è‹±æ–‡æ¨¡æ¿ã€‚}
% \changes{v0.3}{2017/07/19}{ä½¿ç”¨ \pkg{l3docstrip} ç®¡ç†åå­—ç©ºé—´ã€‚}
% \changes{v0.3}{2017/07/28}{æ•´ç†ä»£ç&nbsp;ï¼Œç¼–å†™ç”¨æˆ·æ–‡æ¡£ã€‚}
% \changes{v0.4}{2017/08/03}{æ‹†åˆ† \file{.dtx} æ–‡ä»¶ã€‚}
% \changes{v0.4}{2017/08/11}{æ·»åŠ&nbsp;é”™è¯¯ä¿¡æ¯æç¤ºã€‚}
% \changes{v0.6}{2017/11/23}{åŒæ­¥ \pkg{ctex} v2.4.11ã€‚}
% \changes{v0.6}{2017/11/29}{æ·»åŠ&nbsp;è‹±æ–‡ç‰ˆç”¨æˆ·æ–‡æ¡£ã€‚}
% \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}{å°†æ&nbsp;¡åã€æ&nbsp;¡å¾½å›¾ç‰‡æ·»åŠ&nbsp;è‡³å‘è¡Œç‰ˆã€‚}
%
%^^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 çº§çš„å¼&nbsp;è¶ŠåŒå­¦ï¼›
%   \item Pandoxie ç¼–å†™çš„ \cls{FDU-Thesis-Latex} \cite{pandoxie2014fduthesislatex}ï¼ŒåŸºæœ¬æ»¡è¶³äº†åšå£«
%     ï¼ˆç¡•å£«ï¼‰æ¯•ä¸šè®ºæ–‡æ&nbsp;¼å¼è¦æ±‚ï¼Œåœ¨å½“æ—¶ä½¿ç”¨äººæ•°è¾ƒå¤šï¼›
%   \item richarddzh ç¼–å†™çš„ç¡•å£«è®ºæ–‡æ¨¡æ¿ \cls{fudan-thesis} \cite{richard2016fudanthesis}ã€‚
% \end{itemize}
% ä»¥ä¸Šæ¨¡æ¿å¤§éƒ½æ²¡æœ‰ç»è¿‡ç³»ç»Ÿçš„è®¾è®¡ï¼Œä¹Ÿç¼ºä¹åŽç»­ç»´æŠ¤ã€‚ç›¸æ¯”ä¹‹ä¸‹ï¼Œæ¸…åŽå¤§å­¦ \cite{thuthesis}ã€
% åŒ—äº¬å¤§å­¦ \cite{pkuthss}ã€é‡åº†å¤§å­¦ \cite{cquthesis}ã€ä¸­å›½ç§‘å­¦æŠ€æœ¯å¤§å­¦ \cite{ustcthesis}ã€
% ä¸­å›½ç§‘å­¦é™¢å¤§å­¦ \cite{ucasthesis} ä»¥åŠå‹æ&nbsp;¡ä¸Šæµ·äº¤é€šå¤§å­¦ \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å…¥é—¨} ç¬¬ä¸€ç«&nbsp;ï¼Œæˆ–â€œ\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!
%
% æœ¬æ–‡æ¡£é‡‡ç”¨ä¸åŒå­—ä½“è¡¨ç¤ºä¸åŒå†…å®¹ã€‚æ—&nbsp;è¡¬çº¿å­—ä½“è¡¨ç¤ºå®åŒ…åç§°ï¼Œå¦‚ \pkg{xeCJK} å®åŒ…ã€\cls{fduthesis}
% æ–‡æ¡£ç±»ç­‰ï¼›ç­‰å®½å­—ä½“è¡¨ç¤ºä»£ç&nbsp;æˆ–æ–‡ä»¶åï¼Œå¦‚ \cs{fdusetup} å‘½ä»¤ã€\env{abstract} çŽ¯å¢ƒã€\TeX{} æ–‡æ¡£
% \file{thesis.tex} ç­‰ï¼›å¸¦æœ‰å°–æ‹¬å·çš„æ¥·ä½“ï¼ˆæˆ–è¥¿æ–‡æ–œä½“ï¼‰è¡¨ç¤ºå‘½ä»¤å‚æ•°ï¼Œå¦‚ \meta{æ¨¡æ¿é€‰é¡¹}ã€
% \meta{English title} ç­‰ã€‚åœ¨ä½¿ç”¨æ—¶ï¼Œå‚æ•°ä¸¤ä¾§çš„å°–æ‹¬å·ä¸å¿…è¾“å…¥ã€‚ç¤ºä¾‹ä»£ç&nbsp;è¿›è¡Œäº†è¯­æ³•é«˜äº®å¤„ç†ï¼Œ
% ä»¥æ–¹ä¾¿é˜…è¯»ã€‚
%^^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{} ä»£ç&nbsp;ï¼Œè€Œå¸¦æœ‰ç²‰è‰²ä¾§è¾¹çº¿çš„åˆ™ä¸ºå‘½ä»¤è¡Œä»£ç&nbsp;ï¼Œè¯·æ³¨æ„åŒºåˆ†ã€‚
% æ¨¡æ¿æä¾›çš„é€‰é¡¹ã€å‘½ä»¤ã€çŽ¯å¢ƒç­‰ï¼Œå‡åˆ—åœ¨å·¦è¾¹æ&nbsp;å¹¶ç”¨æ¨ªçº¿æ¡†èµ·ï¼ŒåŒæ—¶ç»™å‡ºä½¿ç”¨è¯­æ³•å’Œç›¸å…³è¯´æ˜Žã€‚
%^^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 åå­—åŽé¢ä¸å¸¦æœ‰ç‰¹æ®Šæ&nbsp;‡è®°çš„ï¼Œè¡¨ç¤ºæ—¢å¯ä»¥åœ¨ä¸­æ–‡æ¨¡æ¿ä¸­ä½¿ç”¨ï¼Œä¹Ÿå¯ä»¥åœ¨è‹±æ–‡æ¨¡æ¿ä¸­ä½¿ç”¨ã€‚
% \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{æ&nbsp;‡å‡†å®‰è£…}
%^^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 æ&nbsp;¹ç›®å½•ï¼›
%   \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 ç¨‹åºï¼Œä¹Ÿå¯é€šè¿‡ä»¥ä¸‹å‘½ä»¤ç›´æŽ¥
%     å…‹éš†ä»£ç&nbsp;ä»“åº“ï¼š
%     \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!
%
% æœ¬æ¨¡æ¿ä¸»è¦åŒ…å«æ&nbsp;¸å¿ƒæ–‡æ¡£ç±»ã€é…ç½®æ–‡ä»¶ã€é™„å±žå®åŒ…ä»¥åŠç”¨æˆ·æ–‡æ¡£ç­‰å‡&nbsp;ä¸ªéƒ¨åˆ†ï¼Œå…¶å…·ä½“ç»„æˆè§
% è¡¨~\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{æ–‡ä»¶} &amp; \textbf{åŠŸèƒ½è¯´æ˜Ž} \\
%     \midrule
%       \file{fduthesis.cls}          &amp; ä¸­æ–‡æ¨¡æ¿æ–‡æ¡£ç±» \\
%       \file{fduthesis-en.cls}       &amp; è‹±æ–‡æ¨¡æ¿æ–‡æ¡£ç±» \\
%       \file{fduthesis.def}          &amp; å‚æ•°é…ç½®æ–‡ä»¶ï¼Œç”¨äºŽè®¾å®šåˆå§‹å‚æ•°ï¼Œä¸å»ºè®®è‡ªè¡Œæ”¹åŠ¨ \\
%       \file{fdudoc.cls}             &amp; ç”¨æˆ·æ‰‹å†Œæ–‡æ¡£ç±» \\
%       \file{fdulogo.sty}            &amp; å¤æ—¦å¤§å­¦è§†è§‰è¯†åˆ«ç³»ç»Ÿ \\
%       \file{fudan-emblem.pdf}       &amp; æ&nbsp;¡å¾½ \\
%       \file{fudan-emblem-new.pdf}   &amp; æ&nbsp;¡å¾½ï¼ˆé‡ä¿®ç‰ˆï¼‰ \\
%       \file{fudan-name.pdf}         &amp; æ&nbsp;¡åå›¾ç‰‡ \\
%       \file{README.md}              &amp; ç®€è¦è‡ªè¿° \\
%       \ifdefined\FDUCODEDOC
%         \file{fduthesis.pdf}        &amp; ä¸­æ–‡ç”¨æˆ·æ‰‹å†Œ \\
%         \file{fduthesis-en.pdf}     &amp; è‹±æ–‡ç”¨æˆ·æ‰‹å†Œ \\
%         \file{fduthesis-code.pdf}   &amp; æ¨¡æ¿å®žçŽ°ä»£ç&nbsp;ï¼ˆæœ¬æ–‡æ¡£ï¼‰ \\
%       \else
%         \file{fduthesis.pdf}        &amp; ä¸­æ–‡ç”¨æˆ·æ‰‹å†Œï¼ˆæœ¬æ–‡æ¡£ï¼‰ \\
%         \file{fduthesis-en.pdf}     &amp; è‹±æ–‡ç”¨æˆ·æ‰‹å†Œ \\
%         \file{fduthesis-code.pdf}   &amp; æ¨¡æ¿å®žçŽ°ä»£ç&nbsp; \\
%       \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} &amp; \textbf{Descriptions} \\
%^^A!     \midrule
%^^A!       \file{fduthesis.cls}          &amp; Document class for Chinese thesis. \\
%^^A!       \file{fduthesis-en.cls}       &amp; Document class for English thesis.\\
%^^A!       \file{fduthesis.def}          &amp; Configuration parameters file
%^^A!         for \cls{fduthesis}. Please do \emph{not} modify it. \\
%^^A!       \file{fdudoc.cls}             &amp; Document class for user guides. \\
%^^A!       \file{fdulogo.sty}            &amp; Fudan University's visual identity. \\
%^^A!       \file{fudan-emblem.pdf}       &amp; University emblem. \\
%^^A!       \file{fudan-emblem-new.pdf}   &amp; University emblem (revised version). \\
%^^A!       \file{fudan-name.pdf}         &amp; Figure of university name. \\
%^^A!       \file{README.md}              &amp; The brief introduction. \\
%^^A!       \file{fduthesis.pdf}          &amp; User's guide in Chinese. \\
%^^A!       \file{fduthesis-en.pdf}       &amp; User's guide in English (this
%^^A!         document). \\
%^^A!       \file{fduthesis-code.pdf}     &amp; 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!}
%     ä½&nbsp;å¥½ï¼Œ\LaTeX{}ï¼
%   \end{document}
% \end{latexexample}
%^^A-
%^^A!
%
% æŒ‰ç…§ \ref{subsec:ç¼–è¯‘æ–¹å¼}~å°èŠ‚ä¸­çš„æ–¹å¼ç¼–è¯‘è¯¥æ–‡æ¡£ï¼Œæ‚¨åº”å½“å¾—åˆ°
% ä¸€ç¯‡ 5 é¡µçš„æ–‡ç«&nbsp;ã€‚å½“ç„¶ï¼Œè¿™ç¯‡æ–‡ç«&nbsp;çš„ç»å¤§éƒ¨åˆ†éƒ½æ˜¯ç©ºç™½çš„ã€‚
%^^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!
%
% ä»¥ä¸‹ä»£ç&nbsp;ä¸­ï¼Œå‡è®¾æ‚¨çš„ \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 = (*&lt;doctor|master|(bachelor)&gt;*)
%   \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}ã€‚è¯¥é€‰é¡¹ä¼šå½±å“æ¯ç«&nbsp;
%   çš„å¼€å§‹ä½ç½®ï¼Œè¿˜ä¼šå½±å“é¡µçœ‰æ&nbsp;·å¼ã€‚
% \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}ï¼‰ä¸‹ï¼ŒæŒ‰ç…§é€šå¸¸çš„æŽ’ç‰ˆæƒ¯ä¾‹ï¼Œæ¯ç«&nbsp;åº”åªä»Ž
% å¥‡æ•°é¡µï¼ˆåœ¨å³ï¼‰å¼€å§‹ï¼›è€Œåœ¨å•é¡µæ¨¡å¼ï¼ˆ\opt{oneside}ï¼‰ä¸‹ï¼Œåˆ™å¯ä»¥ä»Ž
% ä»»æ„é¡µé¢å¼€å§‹ã€‚æœ¬æ¨¡æ¿ä¸­ï¼Œç›®å½•ã€æ‘˜è¦ã€ç¬¦å·è¡¨ç­‰å‡è§†ä½œç«&nbsp;ï¼Œä¹ŸæŒ‰ç›¸åŒ
% æ–¹å¼æŽ’ç‰ˆã€‚
%^^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!
%
% åŒé¢æ¨¡å¼ä¸‹ï¼Œæ­£æ–‡éƒ¨åˆ†å¶æ•°é¡µï¼ˆåœ¨å·¦ï¼‰çš„å·¦é¡µçœ‰æ˜¾ç¤ºç«&nbsp;æ&nbsp;‡é¢˜ï¼Œå¥‡æ•°é¡µ
% ï¼ˆåœ¨å³ï¼‰çš„å³é¡µçœ‰æ˜¾ç¤ºèŠ‚æ&nbsp;‡é¢˜ï¼›å‰ç½®éƒ¨åˆ†çš„é¡µçœ‰æŒ‰åŒæ&nbsp;·æ&nbsp;¼å¼æ˜¾ç¤ºï¼Œä½†æ–‡å­—
% å‡ä¸ºå¯¹åº”æ&nbsp;‡é¢˜ï¼ˆå¦‚â€œç›®å½•â€ã€â€œæ‘˜è¦â€ç­‰ï¼‰ã€‚
% è€Œåœ¨å•é¢æ¨¡å¼ä¸‹ï¼Œæ­£æ–‡éƒ¨åˆ†åˆ™é¡µé¢ä¸åˆ†å¥‡å¶ï¼Œå‡åŒæ—¶æ˜¾ç¤ºå·¦ã€å³é¡µçœ‰ï¼Œ
% æ–‡å­—åˆ†åˆ«ä¸ºç«&nbsp;æ&nbsp;‡é¢˜å’ŒèŠ‚æ&nbsp;‡é¢˜ï¼›å‰ç½®éƒ¨åˆ†åªæœ‰ä¸­é—´é¡µçœ‰ï¼Œæ˜¾ç¤ºå¯¹åº”æ&nbsp;‡é¢˜ã€‚
%^^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 = (*&lt;\TFF&gt;*)
%   \end{fdusyntax}
%   é€‰æ‹©æ˜¯å¦å¼€å¯è‰ç¨¿æ¨¡å¼ï¼Œé»˜è®¤å…³é—­ã€‚
% \end{function}
%^^A! \begin{function}{draft}
%^^A!   \begin{fdusyntax}[emph={[1]draft}]
%^^A!     draft = (*&lt;\TFF&gt;*)
%^^A!   \end{fdusyntax}
%^^A!   Enable draft mode. Default off.
%^^A! \end{function}
%^^A!
%
% è‰ç¨¿æ¨¡å¼ä¸ºå…¨å±€é€‰é¡¹ï¼Œä¼šå½±å“åˆ°å¾ˆå¤šå®åŒ…çš„å·¥ä½œæ–¹å¼ã€‚
% å¼€å¯ä¹‹åŽï¼Œä¸»è¦çš„å˜åŒ–æœ‰ï¼š
% \begin{itemize}
%   \item æŠŠè¡Œæº¢å‡ºçš„ç›’å­æ˜¾ç¤ºä¸ºé»‘è‰²æ–¹å—ï¼›
%   \item ä¸å®žé™…æ’å…¥å›¾ç‰‡ï¼Œåªè¾“å‡ºä¸€ä¸ªå&nbsp;ä½æ–¹æ¡†ï¼›
%   \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 é£Žæ&nbsp;¼çš„é”®å€¼è®¾ç½®ï¼Œæ”¯æŒä¸åŒç±»åž‹ä»¥åŠå¤šç§
% å±‚æ¬¡çš„é€‰é¡¹è®¾å®šã€‚é”®å€¼åˆ—è¡¨ä¸­ï¼Œâ€œ|=|â€å·¦å³çš„ç©ºæ&nbsp;¼ä¸å½±å“è®¾ç½®ï¼›ä½†éœ€æ³¨æ„ï¼Œ
% å‚æ•°åˆ—è¡¨ä¸­ä¸å¯ä»¥å‡ºçŽ°ç©ºè¡Œã€‚
%^^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     = {é˜¿å°”ä¼¯ç‰¹Â·çˆ±å›&nbsp;æ–¯å¦},
%       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     = {é˜¿å°”ä¼¯ç‰¹Â·çˆ±å›&nbsp;æ–¯å¦},
%     info/author*    = {Albert Einstein},
%     info/department = {ç‰©ç†å­¦ç³»}
%   }
% \end{latexexample}
%^^A-
%^^A!
%
% æ³¨æ„ â€œ|/|â€ çš„å‰åŽå‡ä¸å¯ä»¥å‡ºçŽ°ç©ºç™½å­—ç¬¦ã€‚
%^^A! Note that you may \emph{not} put spaces around ``|/|''.
%^^A!
%
% \subsubsection{è®ºæ–‡æ&nbsp;¼å¼} \label{subsubsec:è®ºæ–‡æ&nbsp;¼å¼}
%^^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}
%   è¯¥é€‰é¡¹åŒ…å«è®¸å¤šå­é¡¹ç›®ï¼Œç”¨äºŽè®¾ç½®è®ºæ–‡æ&nbsp;¼å¼ã€‚å…·ä½“å†…å®¹è§ä¸‹ã€‚
% \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 = (*&lt;garamond|libertinus|lm|palatino|(times)|times*|none&gt;*)
%   \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
%       &amp; \textbf{æ­£æ–‡å­—ä½“} &amp; \textbf{æ—&nbsp;è¡¬çº¿å­—ä½“} &amp; \textbf{ç­‰å®½å­—ä½“} &amp; \textbf{æ•°å­¦å­—ä½“} \\
%     \midrule
%       |garamond|        &amp; EB Garamond         &amp; Libertinus Sans &amp; LM Mono\tnote{a} &amp; Garamond Math   \\
%       |libertinus|      &amp; Libertinus Serif    &amp; Libertinus Sans &amp; LM Mono          &amp; Libertinus Math \\
%       |lm|              &amp; LM Roman            &amp; LM Sans         &amp; LM Mono          &amp; LM Math         \\
%       |palatino|        &amp; TG Pagella\tnote{b} &amp; Libertinus Sans &amp; LM Mono          &amp; TG Pagella Math \\
%       |times|           &amp; XITS                &amp; TG Heros        &amp; TG Cursor        &amp; XITS Math       \\
%       |times*|\tnote{c} &amp; Times New Roman     &amp; Arial           &amp; Courier New      &amp; 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!       &amp; \textbf{Roman} &amp; \textbf{Sans-serif} &amp; \textbf{Monospaced} &amp; \textbf{Math} \\
%^^A!     \midrule
%^^A!       |garamond|        &amp; EB Garamond         &amp; Libertinus Sans &amp; LM Mono\tnote{a} &amp; Garamond Math   \\
%^^A!       |libertinus|      &amp; Libertinus Serif    &amp; Libertinus Sans &amp; LM Mono          &amp; Libertinus Math \\
%^^A!       |lm|              &amp; LM Roman            &amp; LM Sans         &amp; LM Mono          &amp; LM Math         \\
%^^A!       |palatino|        &amp; TG Pagella\tnote{b} &amp; Libertinus Sans &amp; LM Mono          &amp; TG Pagella Math \\
%^^A!       |times|           &amp; XITS                &amp; TG Heros        &amp; TG Cursor        &amp; XITS Math       \\
%^^A!       |times*|\tnote{c} &amp; Times New Roman     &amp; Arial           &amp; Courier New      &amp; 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 = (*&lt;adobe|(fandol)|founder|mac|sinotype|sourcehan|windows|none&gt;*)
%   \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
%       &amp; \textbf{æ­£æ–‡å­—ä½“ï¼ˆå®‹ä½“ï¼‰} &amp; \textbf{æ—&nbsp;è¡¬çº¿å­—ä½“ï¼ˆé»‘ä½“ï¼‰} &amp; \textbf{ç­‰å®½å­—ä½“ï¼ˆä»¿å®‹ï¼‰} &amp; \textbf{æ¥·ä½“} \\
%     \midrule
%       |adobe|     &amp; Adobe å®‹ä½“      &amp; Adobe  é»‘ä½“     &amp; Adobe  ä»¿å®‹  &amp; Adobe æ¥·ä½“      \\
%       |fandol|    &amp; Fandol å®‹ä½“     &amp; Fandol é»‘ä½“     &amp; Fandol ä»¿å®‹  &amp; Fandol æ¥·ä½“     \\
%       |founder|   &amp; æ–¹æ­£ä¹¦å®‹        &amp; æ–¹æ­£é»‘ä½“        &amp; æ–¹æ­£ä»¿å®‹     &amp; æ–¹æ­£æ¥·ä½“        \\
%       |mac|       &amp; ï¼ˆåŽæ–‡ï¼‰å®‹ä½“-ç®€ &amp; ï¼ˆåŽæ–‡ï¼‰é»‘ä½“-ç®€ &amp; åŽæ–‡ä»¿å®‹     &amp; ï¼ˆåŽæ–‡ï¼‰æ¥·ä½“-ç®€ \\
%       |sinotype|  &amp; åŽæ–‡å®‹ä½“        &amp; åŽæ–‡é»‘ä½“        &amp; åŽæ–‡ä»¿å®‹     &amp; åŽæ–‡æ¥·ä½“        \\
%       |sourcehan| &amp; æ€æºå®‹ä½“        &amp; æ€æºé»‘ä½“        &amp; ---          &amp; ---             \\
%       |windows|   &amp; ï¼ˆä¸­æ˜“ï¼‰å®‹ä½“    &amp; ï¼ˆä¸­æ˜“ï¼‰é»‘ä½“    &amp; ï¼ˆä¸­æ˜“ï¼‰ä»¿å®‹ &amp; ï¼ˆä¸­æ˜“ï¼‰æ¥·ä½“    \\
%     \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!       &amp; \textbf{Roman (song)} &amp; \textbf{Sans-serif (hei)} &amp; \textbf{Monospaced (fang)} \\
%^^A!     \midrule
%^^A!       |adobe|     &amp; Adobe Song Std      &amp; Adobe Heiti Std    &amp; Adobe Fangsong Std \\
%^^A!       |fandol|    &amp; FandolSong          &amp; FandolHei          &amp; FandolFang         \\
%^^A!       |founder|   &amp; FZShuSong-Z01       &amp; FZHei-B01          &amp; FZFangSong-Z02     \\
%^^A!       |mac|       &amp; Songti SC           &amp; Heiti SC           &amp; STFangsong         \\
%^^A!       |sinotype|  &amp; STSong              &amp; STHeiti            &amp; STFangsong         \\
%^^A!       |sourcehan| &amp; Source Han Serif SC &amp; Source Han Sans SC &amp; ---                \\
%^^A!       |windows|   &amp; SimSun              &amp; SimHei             &amp; 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 = (*&lt;(-4)|5&gt;*)
%   \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 = (*&lt;catcode|mapping|(false)&gt;*)
%   \end{fdusyntax}
%^^A-
%   é€‰æ‹©æ˜¯å¦æŠŠå…¨è§’å®žå¿ƒå¥ç‚¹\FSFW ä½œä¸ºé»˜è®¤çš„å¥å·å½¢çŠ¶ã€‚
%   è¿™ç§å¥å·ä¸€èˆ¬ç”¨äºŽç§‘æŠ€ç±»æ–‡ç«&nbsp;ï¼Œä»¥é¿å…ä¸Žä¸‹æ&nbsp;‡â€œ$_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 ä¼šåƒæŽ‰å¼€å¤´çš„å‡&nbsp;ä¸ª
%^^A ç©ºæ&nbsp;¼ï¼Œå›&nbsp;æ­¤è¿™é‡Œç”¨ . æ¥å&nbsp;ä½ã€‚
%   \begin{fdusyntax}[emph={[1]footnote-style}]
%     footnote-style = (*&lt;plain|\\
%       ......\mbox{}~~~~~~~~~~~~~~~~~libertinus|libertinus*|libertinus-sans|\\
%       ......\mbox{}~~~~~~~~~~~~~~~~~pifont|pifont*|pifont-sans|pifont-sans*|\\
%       ......\mbox{}~~~~~~~~~~~~~~~~~xits|xits-sans|xits-sans*&gt;*)
%   \end{fdusyntax}
%   è®¾ç½®è„šæ³¨ç¼–å·æ&nbsp;·å¼ã€‚è¥¿æ–‡å­—ä½“è®¾ç½®ä¼šå½±å“å…¶é»˜è®¤å–å€¼ï¼ˆè§
%   è¡¨~\ref{tab:footnote-font}ï¼‰ã€‚å›&nbsp;æ­¤ï¼Œè¦ä½¿å¾—è¯¥é€‰é¡¹ç”Ÿæ•ˆï¼Œéœ€å°†å…¶
%   æ”¾ç½®åœ¨ \opt{font} é€‰é¡¹ä¹‹åŽã€‚å¸¦æœ‰ |sans| çš„ä¸ºç›¸åº”çš„æ—&nbsp;è¡¬çº¿å­—ä½“
%   ç‰ˆæœ¬ï¼›å¸¦æœ‰ |*| çš„ä¸ºé˜´æ–‡æ&nbsp;·å¼ï¼ˆå³é»‘åº•ç™½å­—ï¼‰ã€‚
% \end{function}
%^^A! \begin{function}{style/footnote-style}
%^^A!   \begin{fdusyntax}[emph={[1]footnote-style}]
%^^A!     footnote-style = (*&lt;plain|\\
%^^A!       ....\mbox{}~~~~~~~~~~~~~~~~~libertinus|libertinus*|libertinus-sans|\\
%^^A!       ....\mbox{}~~~~~~~~~~~~~~~~~pifont|pifont*|pifont-sans|pifont-sans*|\\
%^^A!       ....\mbox{}~~~~~~~~~~~~~~~~~xits|xits-sans|xits-sans*&gt;*)
%^^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{è¥¿æ–‡å­—ä½“ä¸Žè„šæ³¨ç¼–å·æ&nbsp;·å¼é»˜è®¤å€¼çš„å¯¹åº”å…³ç³»}
%   \label{tab:footnote-font}
%   \centering
%   \small
%   \begin{tabular}{ccccc}
%     \toprule
%       \textbf{è¥¿æ–‡å­—ä½“è®¾ç½®} &amp;
%         |libertinus| &amp; |lm|     &amp; |palatino| &amp; |times| \\
%     \midrule
%       \textbf{è„šæ³¨ç¼–å·æ&nbsp;·å¼é»˜è®¤å€¼} &amp;
%         |libertinus| &amp; |pifont| &amp; |pifont|   &amp; |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} &amp;
%^^A!         |libertinus| &amp; |lm|     &amp; |palatino| &amp; |times| \\
%^^A!     \midrule
%^^A!       \textbf{Default value of footnote number style} &amp;
%^^A!         |libertinus| &amp; |pifont| &amp; |pifont|   &amp; |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 = (*&lt;border|(color)|none&gt;*)
%   \end{fdusyntax}
%^^A-
%   è®¾ç½®è¶…é“¾æŽ¥æ&nbsp;·å¼ã€‚\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 = (*&lt;(default)|classic|material|graylevel|prl&gt;*)
%   \end{fdusyntax}
%   è®¾ç½®è¶…é“¾æŽ¥é¢œè‰²ã€‚è¯¥é€‰é¡¹åœ¨ \kvopt{hyperlink}{none} æ—¶æ—&nbsp;æ•ˆã€‚
%   å„é€‰é¡¹æ‰€ä»£è¡¨çš„é¢œè‰²è§è¡¨~\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 = (*&lt;(default)|classic|material|graylevel|prl&gt;*)
%^^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})~å¼} &amp;
%   {\small \textcolor[HTML]{#2}{\texttt{https://g.cn}}} &amp;
%   {\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})} &amp;
%^^A!   {\small \textcolor[HTML]{#2}{\texttt{http://g.cn}}} &amp;
%^^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}{&gt;{\hspace{0.2cm}}c&lt;{\hspace{0.2cm}}}}
%   \toprule
%     \textbf{é€‰é¡¹} &amp; \textbf{é“¾æŽ¥} &amp; \textbf{URL} &amp; \textbf{å¼•ç”¨} \\
%^^A! \begin{tabular}{c*{3}{&gt;{\hspace{0.2cm}}c&lt;{\hspace{0.2cm}}}}
%^^A!   \toprule
%^^A!     \textbf{Options} &amp; \textbf{Cross references} &amp; \textbf{URL} &amp; \textbf{Citation} \\
%^^A+
%   \midrule
%     \opt{default}            &amp; \linkcolorexam{990000}{0000B2}{007F00} \\
%     \opt{classic}            &amp; \linkcolorexam{FF0000}{0000FF}{00FF00} \\
%     \opt{material}\tnote{a}  &amp; \linkcolorexam{E91E63}{009688}{4CAF50} \\
%     \opt{graylevel}\tnote{a} &amp; \linkcolorexam{616161}{616161}{616161} \\
%     \opt{prl}\tnote{b}       &amp; \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 = (*&lt;bibtex|biblatex&gt;*)
%   \end{fdusyntax}
%^^A-
%   é€‰æ‹©å‚è€ƒæ–‡çŒ®çš„æ”¯æŒæ–¹å¼ã€‚é€‰æ‹© \opt{bibtex} åŽï¼Œå°†ä½¿ç”¨ \BibTeX{}
%   å¤„ç†æ–‡çŒ®ï¼Œæ&nbsp;·å¼ç”± \pkg{natbib} å®åŒ…è´Ÿè´£ï¼›é€‰æ‹© \opt{biblatex} åŽï¼Œ
%   å°†ä½¿ç”¨ \biber{} å¤„ç†æ–‡çŒ®ï¼Œæ&nbsp;·å¼åˆ™ç”± \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 = (*&lt;author-year|(numerical)|\meta{å…¶ä»–æ&nbsp;·å¼}&gt;*)
%   \end{fdusyntax}
%   è®¾ç½®å‚è€ƒæ–‡çŒ®æ&nbsp;·å¼ã€‚\opt{author-year} å’Œ \opt{numerical} åˆ†åˆ«å¯¹åº”
%   å›½å®¶æ&nbsp;‡å‡† GB/T 7714--2015 \cite{gb-t-7714-2015} ä¸­çš„è‘—è€…â€”å‡ºç‰ˆå¹´åˆ¶å’Œ
%   é¡ºåºç¼–ç&nbsp;åˆ¶ã€‚é€‰æ‹© \meta{å…¶ä»–æ&nbsp;·å¼} æ—¶ï¼Œå¦‚æžœ \kvopt{bib-backend}{bibtex}ï¼Œ
%   éœ€ä¿è¯ç›¸åº”çš„ \file{.bst} æ&nbsp;¼å¼æ–‡ä»¶èƒ½è¢«è°ƒç”¨ï¼›è€Œå¦‚æžœ
%   \kvopt{bib-backend}{biblatex}ï¼Œåˆ™éœ€ä¿è¯ç›¸åº”çš„ \file{.bbx} æ&nbsp;¼å¼æ–‡ä»¶
%   èƒ½è¢«è°ƒç”¨ã€‚
% \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 = (*&lt;author-year|(numerical)|\meta{other style}&gt;*)
%^^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{å¼•ç”¨æ&nbsp;·å¼}*)
%   \end{fdusyntax}
%   é€‰æ‹©å¼•ç”¨æ&nbsp;¼å¼ã€‚é»˜è®¤ä¸ºç©ºï¼Œå³ä¸Žå‚è€ƒæ–‡çŒ®æ&nbsp;·å¼ï¼ˆè‘—è€…â€”å‡ºç‰ˆå¹´åˆ¶æˆ–é¡ºåº
%   ç¼–ç&nbsp;åˆ¶ï¼‰ä¿æŒä¸€è‡´ã€‚å¦‚æžœæ‰‹åŠ¨å¡«å†™ï¼Œéœ€ä¿è¯ç›¸åº”çš„ \file{.cbx} æ&nbsp;¼å¼æ–‡ä»¶
%   èƒ½è¢«è°ƒç”¨ã€‚è¯¥é€‰é¡¹åœ¨ \kvopt{bib-backend}{bibtex} æ—¶æ—&nbsp;æ•ˆã€‚
% \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}
%   å°é¢ä¸­æ&nbsp;¡åå›¾ç‰‡çš„æ–‡ä»¶åã€‚é»˜è®¤å€¼ä¸º \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}
%   æ&nbsp;¡åå›¾ç‰‡çš„å¤§å°ã€‚é»˜è®¤ä»…æŒ‡å®šäº†å®½åº¦ï¼Œä¸º |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 = (*&lt;\TTF&gt;*)
%   \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}
%   ç”¨äºŽæ‰‹åŠ¨ç”Ÿæˆè®ºæ–‡å°é¢ã€æŒ‡å¯¼å°ç»„æˆå‘˜åå•å’Œå£°æ˜Žé¡µã€‚è¿™å‡&nbsp;ä¸ªå‘½ä»¤ä¸èƒ½
%   ç¡®ä¿é¡µç&nbsp;çš„æ­£ç¡®ç¼–æŽ’ï¼Œå›&nbsp;æ­¤é™¤éžå¿…è¦ï¼Œæ‚¨åº”å½“å§‹ç»ˆä½¿ç”¨è‡ªåŠ¨ç”Ÿæˆçš„å°é¢ã€‚
% \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 = (*&lt;(academic)|professional&gt;*)
%   \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{ä¸­æ–‡æ&nbsp;‡é¢˜}*)
%     title* = (*\marg{è‹±æ–‡æ&nbsp;‡é¢˜}*)
%   \end{fdusyntax}
%   è®ºæ–‡æ&nbsp;‡é¢˜ã€‚é»˜è®¤ä¼šåœ¨çº¦ 20 ä¸ªæ±‰å­—å­—å®½å¤„å¼ºåˆ¶æ–­è¡Œï¼Œä½†ä¸ºäº†è¯­ä¹‰çš„
%   è¿žè´¯ä»¥åŠæŽ’ç‰ˆçš„ç¾Žè§‚ï¼Œå¦‚æžœæ‚¨çš„æ&nbsp;‡é¢˜é•¿äºŽä¸€è¡Œï¼Œå»ºè®®ä½¿ç”¨â€œ|\\|â€
%   æ‰‹åŠ¨æ–­è¡Œã€‚
% \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 ä½ï¼Œå‰ä¸¤ä½ä¸ºå…¥å­¦å¹´ä»½ï¼Œä¹‹åŽä¸€ä½ä¸ºå­¦ç”Ÿç±»åž‹
% ä»£ç&nbsp;ï¼ˆåšå£«ç”Ÿä¸º 1ï¼Œç¡•å£«ç”Ÿä¸º 2ï¼Œæœ¬ç§‘ç”Ÿä¸º 3ï¼‰ï¼ŒæŽ¥ä¸‹æ¥çš„äº”ä½ä¸º
% ä¸“ä¸šä»£ç&nbsp;ï¼Œæœ€åŽä¸‰ä½ä¸ºé¡ºåºå·ã€‚
%^^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}
%   å­¦æ&nbsp;¡ä»£ç&nbsp;ã€‚é»˜è®¤å€¼ä¸º 10246ï¼ˆè¿™æ˜¯å¤æ—¦å¤§å­¦çš„å­¦æ&nbsp;¡ä»£ç&nbsp;ï¼‰ã€‚
% \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 = (*&lt;(none)|i|ii|iii&gt;*)
%   \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} æ—¶æ—&nbsp;æ•ˆã€‚
% \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{é³³é&nbsp;­ã€è±¬è‚šã€è±¹å°¾}å…­å­—æ˜¯ä¹Ÿã€‚ã€å¤§æ¦‚èµ·è¦ç¾Žéº—ï¼Œä¸­è¦æµ©è•©ï¼Œ
%   çµè¦éŸ¿äº®ã€‚å°¤è²´åœ¨é¦–å°¾è²«ç©¿ï¼Œæ„æ€æ¸…æ–°ã€‚è‹Ÿèƒ½è‹¥æ˜¯ï¼Œæ–¯å¯ä»¥è¨€æ¨‚åºœçŸ£ã€‚
% \end{quotation}
% \hfill ^^^^2e3aé™¶å®—å„€ã€Šå—æ‘è¼Ÿè€•éŒ„Â·ä½œä»Šæ¨‚åºœæ³•ã€‹ ^^A ^^^^2e3a = ç&nbsp;´æŠ˜å·
%
% \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!
%
% åœ¨æœ¬æ¨¡æ¿ä¸­ï¼Œå‰ç½®éƒ¨åˆ†åŒ…å«ç›®å½•ã€ä¸­è‹±æ–‡æ‘˜è¦ä»¥åŠç¬¦å·è¡¨ç­‰ã€‚
% å‰ç½®éƒ¨åˆ†çš„é¡µç&nbsp;é‡‡ç”¨å°å†™ç½—é©¬å­—æ¯ï¼Œå¹¶ä¸”ä¸Žæ­£æ–‡åˆ†å¼€è®¡æ•°ã€‚
%^^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} ç”Ÿæˆå•ç‹¬çš„
%   æ’å›¾ã€è¡¨æ&nbsp;¼ç›®å½•ã€‚
% \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{åˆ—æ&nbsp;¼å¼è¯´æ˜Ž}*)
%       (*\meta{ç¬¦å· 1}*)  &amp;  (*\meta{è¯´æ˜Ž}*)  \\
%       (*\meta{ç¬¦å· 2}*)  &amp;  (*\meta{è¯´æ˜Ž}*)  \\
%       (*\phantom{\meta{ç¬¦å· $n$}}*)  (*$\vdots$*)
%       (*\meta{ç¬¦å·\ \kern-0.1em$n$}*)  &amp;  (*\meta{è¯´æ˜Ž}*)
%     \end{notation}
%   \end{fdusyntax}
%   ç¬¦å·è¡¨ã€‚å¯é€‰å‚æ•° \meta{åˆ—æ&nbsp;¼å¼è¯´æ˜Ž}ä¸Ž \LaTeX{} ä¸­æ&nbsp;‡å‡†è¡¨æ&nbsp;¼çš„åˆ—æ&nbsp;¼
%   å¼è¯´æ˜Žè¯­æ³•ä¸€è‡´ï¼Œé»˜è®¤å€¼ä¸ºâ€œ|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}*)  &amp;  (*\meta{description}*)  \\
%^^A!       (*\meta{symbol 2}*)  &amp;  (*\meta{description}*)  \\
%^^A!       (*\phantom{\meta{symbol $n$}}*)  (*$\vdots$*)
%^^A!       (*\meta{symbol \kern-0.1em$n$}*)  &amp;  (*\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!
%
% ä¸»ä½“éƒ¨åˆ†æ˜¯è®ºæ–‡çš„æ&nbsp;¸å¿ƒï¼Œæ‚¨å¯ä»¥åˆ†ç«&nbsp;èŠ‚æ’°å†™ã€‚å¦‚æœ‰éœ€æ±‚ï¼Œä¹Ÿå¯ä»¥é‡‡ç”¨
% å¤šæ–‡ä»¶ç¼–è¯‘çš„æ–¹å¼ã€‚ä¸»ä½“éƒ¨åˆ†çš„é¡µç&nbsp;é‡‡ç”¨é˜¿æ‹‰ä¼¯æ•°å­—ã€‚
%^^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}
%   æ’å…¥è„šæ³¨ã€‚è„šæ³¨ç¼–å·æ&nbsp;·å¼å¯åˆ©ç”¨ \opt{style/footnote-style} é€‰é¡¹æŽ§åˆ¶ï¼Œ
%   å…·ä½“è§ \ref{subsubsec:è®ºæ–‡æ&nbsp;¼å¼}~å°èŠ‚ã€‚
% \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{å›¾è¡¨æ&nbsp;‡é¢˜}*)
%     \caption(*\oarg{çŸ­æ&nbsp;‡é¢˜}\marg{é•¿æ&nbsp;‡é¢˜}*)
%   \end{fdusyntax}
%   æ’å…¥å›¾è¡¨æ&nbsp;‡é¢˜ã€‚å¯é€‰å‚æ•° \meta{çŸ­æ&nbsp;‡é¢˜} ç”¨äºŽå›¾è¡¨ç›®å½•ã€‚åœ¨
%   \meta{é•¿æ&nbsp;‡é¢˜} ä¸­ï¼Œæ‚¨å¯ä»¥è¿›è¡Œé•¿è¾¾å¤šæ®µçš„å™è¿°ï¼›ä½† \meta{çŸ­æ&nbsp;‡é¢˜}
%   å’Œå•ç‹¬çš„ \meta{å›¾è¡¨æ&nbsp;‡é¢˜} ä¸­åˆ™ä¸å…è®¸åˆ†æ®µã€‚
%   \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!
%
% æŒ‰ç…§æŽ’ç‰ˆæƒ¯ä¾‹ï¼Œå»ºè®®æ‚¨å°†è¡¨æ&nbsp;¼çš„æ&nbsp;‡é¢˜æ”¾ç½®åœ¨ç»˜åˆ¶è¡¨æ&nbsp;¼çš„å‘½ä»¤ä¹‹å‰ï¼Œ
% è€Œå°†å›¾ç‰‡çš„æ&nbsp;‡é¢˜æ”¾ç½®åœ¨ç»˜å›¾æˆ–æ’å›¾çš„å‘½ä»¤ä¹‹åŽã€‚å¦éœ€æ³¨æ„ï¼Œ
% \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{æ–‡çŒ®æ&nbsp;‡ç­¾}*)
%     \cite(*\oarg{é¡µç&nbsp;}\marg{æ–‡çŒ®æ&nbsp;‡ç­¾}*)
%   \end{fdusyntax}
%   æ’å…¥æ‰€å¼•ç”¨çš„æ–‡çŒ®ã€‚å¯é€‰å‚æ•° \meta{é¡µç&nbsp;} å¯ç”¨æ¥æ&nbsp;‡æ³¨å¼•æ–‡çš„é¡µç&nbsp;ã€‚åœ¨ä¸åŒçš„
%   å‚è€ƒæ–‡çŒ®æ&nbsp;·å¼ä¸­ï¼Œå¼•ç”¨çš„æ&nbsp;·å¼ä¹Ÿä¸å°½ç›¸åŒã€‚æ&nbsp;¹æ®éœ€è¦ï¼Œæ¨¡æ¿è¿˜æä¾›äº†æ›´å¤šçš„å‘½ä»¤
%   ç”¨æ¥æ&nbsp;‡è®°å¼•ç”¨ã€‚é¡ºåºç¼–ç&nbsp;åˆ¶å’Œè‘—è€…â€”å‡ºç‰ˆå¹´åˆ¶ä¸‹çš„å„ç§å¼•ç”¨æ–¹å¼è§
%   è¡¨~\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{é¡ºåºç¼–ç&nbsp;åˆ¶ä¸‹çš„å¼•ç”¨æ&nbsp;·å¼} \label{tab:citation-numerical}
%   \centering
%   \small
%   \begin{tabularx}{\textwidth}{cCll}
%     \toprule
%       \textbf{å¼•ç”¨æ–¹å¼} &amp;
%       \textbf{æŽ’ç‰ˆæ•ˆæžœ} &amp;
%       \textbf{\kvopt{bib-backend}{bibtex}} &amp;
%       \textbf{\kvopt{bib-backend}{biblatex}} \\
%     \midrule
%     å•ç¯‡æ–‡çŒ® &amp;
%       å¼•æ–‡\cite{texbook} &amp;
%       \verbcite{texbook} &amp;
%       åŒå·¦ \\
%     å¤šç¯‡æ–‡çŒ® &amp;
%       å¼•æ–‡\cite{texbook,companion} &amp;
%       \verbcite{texbook,companion} &amp;
%       åŒå·¦ \\
%     æ&nbsp;‡æ³¨é¡µç&nbsp; &amp;
%       å¼•æ–‡\cite[126--137]{texbook} &amp;
%       \verbcite[cite][126--137]{texbook} &amp;
%       åŒå·¦ \\
%     æ&nbsp;‡æ³¨ä½œè€… &amp;
%       \citet{texbook}æŒ‡å‡º &amp;
%       \verbcite[citet]{texbook} &amp;
%       \verbcite[authornumcite]{texbook} \\
%     æ&nbsp;‡æ³¨ä½œè€…ã€é¡µç&nbsp; &amp;
%       \citet[42]{texbook}æŒ‡å‡º &amp;
%       \verbcite[citet][42]{texbook} &amp;
%       \verbcite[authornumcite][42]{texbook} \\
%     éžä¸Šæ&nbsp;‡ &amp;
%       å¼•æ–‡{\citestyle{numbers}\cite{texbook}} &amp;
%       \verbcite[parencite]{texbook} &amp;
%       åŒå·¦ \\
%     \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} &amp;
%^^A!       \textbf{Results} &amp;
%^^A!       \textbf{\kvopt{bib-backend}{bibtex}} &amp;
%^^A!       \textbf{\kvopt{bib-backend}{biblatex}} \\
%^^A!     \midrule
%^^A!     Single &amp;
%^^A!       Text\textsuperscript{[\C1]} &amp;
%^^A!       \verbcite{texbook} &amp;
%^^A!       Same as left \\
%^^A!     Multiple &amp;
%^^A!       Text\textsuperscript{[\C1--\C2]} &amp;
%^^A!       \verbcite{texbook,companion} &amp;
%^^A!       Same as left \\
%^^A!     With page &amp;
%^^A!       Text\textsuperscript{[\C1]126--137} &amp;
%^^A!       \verbcite[cite][126--137]{texbook} &amp;
%^^A!       Same as left \\
%^^A!     With author &amp;
%^^A!       Knuth\textsuperscript{[\C1]} states &amp;
%^^A!       \verbcite[citet]{texbook} &amp;
%^^A!       \verbcite[authornumcite]{texbook} \\
%^^A!     With page \&amp; author &amp;
%^^A!       Knuth\textsuperscript{[\C1]42} states &amp;
%^^A!       \verbcite[citet][42]{texbook} &amp;
%^^A!       \verbcite[authornumcite][42]{texbook} \\
%^^A!     No superscript &amp;
%^^A!       Text [\C1] &amp;
%^^A!       \verbcite[parencite]{texbook} &amp;
%^^A!       Same as left \\
%^^A!     \bottomrule
%^^A!   \end{tabularx}
%^^A! \end{table}
%^^A!
%
% \begin{table}[ht]
%   \caption{è‘—è€…â€”å‡ºç‰ˆå¹´åˆ¶ä¸‹çš„å¼•ç”¨æ&nbsp;·å¼} \label{tab:citation-author-year}
%   \centering
%   \small
%   \def\!{\kern-1.5pt}
%   \begin{tabularx}{\textwidth}{cCll}
%     \toprule
%       \textbf{å¼•ç”¨æ–¹å¼} &amp;
%       \textbf{æŽ’ç‰ˆæ•ˆæžœ} &amp;
%       \textbf{\kvopt{bib-backend}{bibtex}} &amp;
%       \textbf{\kvopt{bib-backend}{biblatex}} \\
%     \midrule
%     å•ç¯‡æ–‡çŒ® &amp;
%       (\citeauthor{texbook}\!, \citeyear{texbook}\!) &amp;
%       \verbcite[citep]{texbook} &amp;
%       \verbcite{texbook} \\
%     å¤šç¯‡æ–‡çŒ® &amp;
%       (\citeauthor{texbook}\!, \citeyear{texbook}\!;
%         \citeauthor{companion}\!, \citeyear{companion}\!) &amp;
%       \verbcite[citep]{texbook,companion} &amp;
%       \verbcite{texbook,companion} \\
%     æ&nbsp;‡æ³¨é¡µç&nbsp; &amp;
%       (\citeauthor{texbook}\!, \citeyear{texbook}\!)^^A
%         \textsuperscript{126--137} &amp;
%       \verbcite[citep][126--137]{texbook} &amp;
%       \verbcite[cite][126--137]{texbook} \\
%     æ&nbsp;‡æ³¨ä½œè€… &amp;
%       \citeauthor{texbook}(\citeyear{texbook}\!) &amp;
%       \verbcite[citet]{texbook} &amp;
%       åŒå·¦ \\
%     æ&nbsp;‡æ³¨ä½œè€…ã€é¡µç&nbsp; &amp;
%       \citeauthor{texbook}(\citeyear{texbook}\!)\textsuperscript{42} &amp;
%       \verbcite[citet][42]{texbook} &amp;
%       åŒå·¦ \\
%     \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} &amp;
%^^A!       \textbf{Results} &amp;
%^^A!       \textbf{\kvopt{bib-backend}{bibtex}} &amp;
%^^A!       \textbf{\kvopt{bib-backend}{biblatex}} \\
%^^A!     \midrule
%^^A!     Single &amp;
%^^A!       (\C{Knuth}, \C{1986}) &amp;
%^^A!       \verbcite[citep]{texbook} &amp;
%^^A!       \verbcite{texbook} \\
%^^A!     Multiple &amp;
%^^A!       (\C{Knuth}, \C{1986}; \C{Mittelbach et~al.}, \C{2004}) &amp;
%^^A!       \verbcite[citep]{texbook,companion} &amp;
%^^A!       \verbcite{texbook,companion} \\
%^^A!     With page &amp;
%^^A!       (\C{Knuth}, \C{1986})\textsuperscript{126--137} &amp;
%^^A!       \verbcite[citep][126--137]{texbook} &amp;
%^^A!       \verbcite[cite][126--137]{texbook} \\
%^^A!     With author &amp;
%^^A!       \C{Knuth} (\C{1986}) &amp;
%^^A!       \verbcite[citet]{texbook} &amp;
%^^A!       Same as left \\
%^^A!     With page \&amp; author &amp;
%^^A!       \C{Knuth} (\C{1986})\textsuperscript{42} &amp;
%^^A!       \verbcite[citet][42]{texbook} &amp;
%^^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{å°æ&nbsp;‡é¢˜}*)
%       (*\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{åç§°} &amp;
%         \env{axiom} &amp; \env{corollary} &amp; \env{definition} &amp; \env{example} &amp;
%         \env{lemma} &amp; \env{proof}     &amp; \env{theorem} \\
%     \midrule
%       \textbf{å«ä¹‰} &amp;
%         å…¬ç† &amp; æŽ¨è®º &amp; å®šä¹‰ &amp; ä¾‹ &amp;
%         å¼•ç† &amp; è¯æ˜Ž &amp; å®šç† \\
%     \bottomrule
%   \end{tabular}
% \end{table}
%
% è¯æ˜ŽçŽ¯å¢ƒï¼ˆ\env{proof}ï¼‰çš„æœ€åŽä¼šæ·»åŠ&nbsp;è¯æ¯•ç¬¦å·â€œ$\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{æ&nbsp;‡é¢˜}*)
%     \newtheorem*(*\oarg{é€‰é¡¹}\marg{çŽ¯å¢ƒå}\marg{æ&nbsp;‡é¢˜}*)
%     \begin(*\marg{çŽ¯å¢ƒå}\oarg{å°æ&nbsp;‡é¢˜}*)
%       (*\meta{å†…å®¹}*)
%     \end(*\marg{çŽ¯å¢ƒå}*)
%   \end{fdusyntax}
%   å£°æ˜Žæ–°çš„å®šç†ç±»çŽ¯å¢ƒï¼ˆæ•°å­¦çŽ¯å¢ƒï¼‰ã€‚å¸¦æ˜Ÿå·çš„ç‰ˆæœ¬è¡¨ç¤ºä¸è¿›è¡Œç¼–å·ï¼Œ
%   å¹¶ä¸”ä¼šé»˜è®¤æ·»åŠ&nbsp;è¯æ¯•ç¬¦å·â€œ$\QED$â€ã€‚å£°æ˜ŽåŽï¼Œå³å¯åŒé¢„å®šä¹‰çš„æ•°å­¦çŽ¯å¢ƒ
%   ä¸€æ&nbsp;·ä½¿ç”¨ã€‚
% \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{é€‰é¡¹}
% ä¹Ÿä¸ºä¸€ç»„é”®å€¼åˆ—è¡¨ã€‚å¯ç”¨çš„é€‰é¡¹è§ä¸‹ã€‚æ³¨æ„æ‚¨æ—&nbsp;éœ€è¾“å…¥â€œ|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 = (*&lt;(plain)|margin|change|\\
%       XXXXXX\mbox{}~~~~~~~~break|marginbreak|changebreak&gt;*)
%   \end{fdusyntax}
%   å®šç†ç±»çŽ¯å¢ƒçš„æ€»ä½“æ&nbsp;·å¼ã€‚
% \end{function}
%^^A! \begin{function}{theorem/style}
%^^A!   \begin{fdusyntax}[emph={[1]style}]
%^^A!     style = (*&lt;(plain)|margin|change|\\
%^^A!       XXXX\mbox{}~~~~~~~~break|marginbreak|changebreak&gt;*)
%^^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}
%   å®šç†å¤´ï¼ˆå³æ&nbsp;‡é¢˜ï¼‰çš„å­—ä½“ã€‚ä¸­æ–‡æ¨¡æ¿é»˜è®¤ä¸º \tn{sffamily}ï¼Œå³æ—&nbsp;è¡¬çº¿ä½“
%   ï¼ˆé»‘ä½“ï¼‰ï¼›è‹±æ–‡æ¨¡æ¿é»˜è®¤ä¸º |\bfseries\upshape|ï¼Œå³åŠ&nbsp;ç²—ç›´ç«‹ä½“ã€‚
% \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}
%   å®šç†ç»“æŸæ&nbsp;‡è®°ï¼ˆå³è¯æ¯•ç¬¦å·ï¼‰ã€‚å¦‚æžœç”¨ \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|ï¼Œè¡¨ç¤ºæŒ‰ç«&nbsp;ç¼–å·ã€‚
%   ä½¿ç”¨ \cs{newtheorem*} æ—¶ï¼Œè¯¥é€‰é¡¹æ—&nbsp;æ•ˆã€‚
% \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{é€‰é¡¹}
%   æ—&nbsp;æ•ˆï¼Œç›¸å½“äºŽ \tn{bibliography} \texttt{\marg{æ–‡çŒ®æ•°æ®åº“}}ï¼Œå…¶ä¸­çš„
%   \meta{æ–‡çŒ®æ•°æ®åº“} å¯åˆ©ç”¨ \opt{style/bib-resource} é€‰é¡¹æŒ‡å®šï¼Œå…·ä½“è§
%   \ref{subsubsec:è®ºæ–‡æ&nbsp;¼å¼}~å°èŠ‚ï¼›è€Œå¦‚æžœ \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 ç¼–ç&nbsp;çš„
%         OpenType æ•°å­¦å­—ä½“ã€‚
%       \item \pkg{geometry}ï¼Œç”¨äºŽè°ƒæ•´é¡µé¢å°ºå¯¸ã€‚
%       \item \pkg{fancyhdr}ï¼Œå¤„ç†é¡µçœ‰é¡µè„šã€‚
%       \item \pkg{footmisc}ï¼Œå¤„ç†è„šæ³¨ã€‚
%       \item \pkg{ntheorem}ï¼Œæä¾›å¢žå¼ºç‰ˆçš„å®šç†ç±»çŽ¯å¢ƒã€‚
%       \item \pkg{graphicx}ï¼Œæä¾›å›¾å½¢æ’å…¥çš„æŽ¥å£ã€‚
%       \item \pkg{longtable}ï¼Œé•¿è¡¨æ&nbsp;¼ï¼ˆå…è®¸è·¨é¡µï¼‰æ”¯æŒã€‚
%       \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{} ç¨‹åºã€‚å‚è€ƒæ–‡çŒ®æ&nbsp;·å¼ç”±
%     \pkg{gbt7714} å®åŒ…æä¾› \cite{natbib,gbt7714}ã€‚
%   \item å¼€å¯ \kvopt{style/bib-backend}{biblatex} åŽï¼Œä¼šè°ƒç”¨
%     \pkg{biblatex} å®åŒ…ï¼Œå¹¶ä¾èµ– \biber{} ç¨‹åºã€‚å‚è€ƒæ–‡çŒ®æ&nbsp;·å¼ç”±
%     \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 \&amp; Typesetting, volume A} [M].
% \newblock Boston: Addison--Wesley Publishing Company, 1986
% \urlprefix \CTANurl[æºä»£ç&nbsp;^^A
%   \footnote{æ­¤ä»£ç&nbsp;åªå¯ä½œä¸ºå­¦ä¹&nbsp;ä¹‹ç”¨ã€‚æœªç» 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{} æ–‡ç±»å’Œå®åŒ…å­¦ä¹&nbsp;æ‰‹å†Œ} [M].
% \newblock åŒ—äº¬: æ¸…åŽå¤§å­¦å‡ºç‰ˆç¤¾, 2017
%
% \bibitem[()]{åˆ˜æµ·æ´‹2013latexå…¥é—¨}
% åˆ˜æµ·æ´‹.
% \newblock \textit{\LaTeX{} å…¥é—¨} [M].
% \newblock åŒ—äº¬: ç”µå­å·¥ä¸šå‡ºç‰ˆç¤¾, 2013
%
% \subsection{æ&nbsp;‡å‡†ã€è§„èŒƒ}
%
% \bibitem[()]{gb-t-7713.1-2006}
% å›½åŠ¡é™¢å­¦ä½å§”å‘˜ä¼šåŠžå…¬å®¤, å…¨å›½ä¿¡æ¯ä¸Žæ–‡çŒ®æ&nbsp;‡å‡†åŒ–æŠ€æœ¯å§”å‘˜ä¼š.
% \newblock \textit{å­¦ä½è®ºæ–‡ç¼–å†™è§„åˆ™: GB/T 7713.1--2006} [S].
% \newblock åŒ—äº¬: ä¸­å›½æ&nbsp;‡å‡†å‡ºç‰ˆç¤¾, 2007
%
% \bibitem[()]{gb-t-7714-2015}
% å…¨å›½ä¿¡æ¯ä¸Žæ–‡çŒ®æ&nbsp;‡å‡†åŒ–æŠ€æœ¯å§”å‘˜ä¼š.
% \newblock \textit{ä¿¡æ¯ä¸Žæ–‡çŒ®\quad å‚è€ƒæ–‡çŒ®è‘—å½•è§„åˆ™: GB/T 7714--2015} [S].
% \newblock åŒ—äº¬: ä¸­å›½æ&nbsp;‡å‡†å‡ºç‰ˆç¤¾, 2015
%
% \bibitem[()]{gb-t-15834-2011}
% æ•™è‚²éƒ¨è¯­è¨€æ–‡å­—ä¿¡æ¯ç®¡ç†å¸.
% \newblock \textit{æ&nbsp;‡ç‚¹ç¬¦å·ç”¨æ³•: GB/T 15834--2011} [S/OL].
% \newblock åŒ—äº¬: ä¸­å›½æ&nbsp;‡å‡†å‡ºç‰ˆç¤¾, 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[()]{å¤æ—¦å¤§å­¦è®ºæ–‡è§„èŒƒ}
% å¤æ—¦å¤§å­¦å›¾ä¹¦é¦†, å¤æ—¦å¤§å­¦ç&nbsp;”ç©¶ç”Ÿé™¢.
% \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[æºä»£ç&nbsp;ï¼š]{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[æ–‡æ¡£åŠæºä»£ç&nbsp;ï¼š]{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[æ–‡æ¡£åŠæºä»£ç&nbsp;ï¼š]{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[æ–‡æ¡£åŠæºä»£ç&nbsp;ï¼š]{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[æºä»£ç&nbsp;ï¼š]{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 æ&nbsp;‡å‡†çš„ biblatex å‚è€ƒæ–‡çŒ®æ&nbsp;·å¼} [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}
% æŽæŒ¯æ¥&nbsp;.
% \newblock \textit{\textsc{CquThesis}ï¼šé‡åº†å¤§å­¦æ¯•ä¸šè®ºæ–‡ \LaTeX{} æ¨¡æ¿} [EB/OL].
% \newblock version 1.50,
% \newblock (2020-06-23)
% \urlprefix\url{https://ctan.org/pkg/cquthesis}
% \urlprefix\CTANurl[æ–‡æ¡£åŠæºä»£ç&nbsp;ï¼š]{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[æ–‡æ¡£åŠæºä»£ç&nbsp;ï¼š]{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[æ–‡æ¡£åŠæºä»£ç&nbsp;ï¼š]{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[æºä»£ç&nbsp;ä»“åº“ï¼š]{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 ä»£ç&nbsp;éƒ¨åˆ†çš„é¡µè¾¹è·
% \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 è¯­æ³•ï¼Œä»£ç&nbsp;ä¸­çš„ç©ºæ&nbsp;¼ã€æ¢è¡Œã€å›žè½¦ä¸Žåˆ¶è¡¨ç¬¦å®Œå…¨å¿½ç•¥ï¼Œ
% è€Œä¸‹åˆ’çº¿â€œ|_|â€å’Œå†’å·â€œ|:|â€åˆ™å¯ä½œä¸ºä¸€èˆ¬å­—æ¯ä½¿ç”¨ã€‚
% æ­£å¸¸çš„ç©ºæ&nbsp;¼å¯ä»¥ä½¿ç”¨â€œ|~|â€ä»£æ›¿ï¼›è‡³äºŽ |~| åŽŸæ¥æ‰€è¡¨ç¤ºçš„â€œå¸¦å­â€ï¼Œ
% åˆ™è¦ç”¨ \LaTeXe{} çš„åŽŸå§‹å‘½ä»¤ \tn{nobreakspace} ä»£æ›¿ã€‚
%
% ä»¥ä¸‹ä»£ç&nbsp;ä¸­æœ‰ä¸€äº›å½¢å¦‚ \textcolor[HTML]{2E3191}{\textsf{&lt;*class&gt;}}
% çš„æ&nbsp;‡è®°ï¼Œè¿™æ˜¯ \pkg{DocStrip} ä¸­çš„â€œguardâ€ï¼Œç”¨æ¥é€‰æ‹©æ€§åœ°æå–æ–‡ä»¶ã€‚
% â€œ\textsf{*}â€å’Œâ€œ\textsf{/}â€åˆ†åˆ«è¡¨ç¤ºè¯¥éƒ¨åˆ†çš„å¼€å§‹å’Œç»“æŸã€‚ä¸å«
% â€œ\textsf{*}â€å’Œâ€œ\textsf{/}â€çš„ guard å‡ºçŽ°åœ¨è¡Œå·å·¦ä¾§ï¼Œå®ƒä»¬ç”¨æ¥ç¡®å®š
% å•ç‹¬ä¸€è¡Œä»£ç&nbsp;çš„å½’å±žã€‚è¿™äº› guard çš„é¢œè‰²æ·±æµ…ä¸ä¸€ï¼Œç”¨ä»¥æ˜Žç¡®åµŒå¥—å…³ç³»ã€‚
%
% å¦æœ‰è‹¥å¹²å½¢å¦‚ \textcolor{MaterialPink}{\textsf{&lt;@@=fdu&gt;}} çš„ guardï¼Œ
% å®ƒä»¬ç”¨æ¥æŒ‡ç¤ºåå­—ç©ºé—´ï¼ˆæ¨¡å—ï¼‰ã€‚
%
% \subsection{å‡†å¤‡}
%
%    \begin{macrocode}
%&lt;@@=fdu&gt;
%&lt;*class|class-en&gt;
%    \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} ä¼&nbsp;å…¥ \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{} çš„é’©å­ç®¡ç†æœºåˆ¶ã€‚æœ¬æ¨¡æ¿ä¸­çš„å­—ä½“åŠ&nbsp;è½½å‘½ä»¤ä½äºŽ
% \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 } { . } { &lt; } { 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}
% ç”¨æ¥å®šä¹‰è„šæ³¨æ&nbsp;·å¼ã€æ&nbsp;‡ç‚¹ã€é»˜è®¤åç§°çš„è¾…åŠ©å‡½æ•°ã€‚
%    \begin{macrocode}
\cs_new_protected:Npn \@@_define_fn_style:nn #1#2
  { \tl_const:cn { c_@@_fn_style_ #1 _tl } {#2} }
\cs_new_protected:Npn \@@_define_punct:nn #1#2
  { \tl_const:cn { c_@@_ #1 _tl } {#2} }
\cs_new_protected:Npn \@@_define_name:nn #1#2
  { \tl_const:cn { c_@@_name_ #1 _tl } {#2} }
\cs_new_protected:Npn \@@_define_name:nnn #1#2#3
  {
    \tl_const:cn { c_@@_name_ #1    _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}
%
% å°†æ–‡æ¡£ç±»é€‰é¡¹ä¼&nbsp;ç»™ |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} æ–‡æ¡£ç±»ï¼Œè€Œéžç›´æŽ¥ä½¿ç”¨
%   æ&nbsp;‡å‡†æ–‡æ¡£ç±» \cls{book}ã€‚}
%
% å°†é€‰é¡¹ä¼&nbsp;å…¥ \cls{ctexbook} æ–‡æ¡£ç±»ã€‚
%    \begin{macrocode}
% TODO: (2017-07-22) Chinese fonts in fduthesis-en
\PassOptionsToClass
  {
    UTF8,
%&lt;class-en&gt;    scheme     = plain,
    heading    = true,
%&lt;class&gt;    fontset    = none,
%&lt;class-en&gt;    fontset    = fandol,
    zihao      = -4,
%&lt;class&gt;    linespread = \c_@@_line_spread_fp,
    \g_@@_to_ctexbook_clist
  }
  { ctexbook }
%    \end{macrocode}
%
% ä¼&nbsp;å…¥å„å®åŒ…é€‰é¡¹ã€‚
%    \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} å®åŒ…è®¾ç½®çº¸å¼&nbsp;å¤§å°ã€é¡µé¢è¾¹è·ä»¥åŠé¡µçœ‰é«˜åº¦ã€‚è¿™é‡Œï¼Œ
% $\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
%&lt;class&gt;\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*} æ&nbsp;·å¼ã€‚}
% é¢„å®šä¹‰è¥¿æ–‡å­—ä½“ã€‚
%    \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} æ&nbsp;·å¼ã€‚}
% é¢„å®šä¹‰ä¸­æ–‡å­—ä½“ã€‚
%    \begin{macrocode}
%&lt;*class&gt;
\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}
%&lt;/class&gt;
% \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}
%&lt;*class&gt;
\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 }
%&lt;/class&gt;
%    \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} }
%&lt;class&gt;\clist_map_inline:nn { CJKmain, CJKsans, CJKmono }
%&lt;class&gt;  { \@@_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:}
% æ–¹æ­£å­—åº“ã€‚è™½ç„¶æœ‰ç²—ä½“ï¼ˆæ–¹æ­£å°æ&nbsp;‡å®‹ï¼‰ç­‰ï¼Œä½†å¹¶éžå…è´¹ï¼Œæ•…è¿™é‡Œä¸åšå¤„ç†ã€‚
%    \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:}
% å­—ä½“åŠ&nbsp;è½½å‘½ä»¤ã€‚
%    \begin{macrocode}
\cs_new_protected:Npn \@@_load_font:
  {
    \use:c { @@_load_font_     \g_@@_fontset_tl     : }
%&lt;class&gt;    \use:c { @@_load_cjk_font_ \g_@@_cjk_fontset_tl : }
  }
\ctex_at_end_preamble:n { \@@_load_font: }
%    \end{macrocode}
% \end{macro}
%
%^^A ä»¥ä¸‹ç›¸å…³ä»£ç&nbsp;å·²åœ¨ v0.7c ä¸­ç§»é™¤ã€‚
% \changes{v0.5}{2017/09/09}{é‡æ–°å®žçŽ°å­—ä½“è°ƒç”¨ã€‚æ&nbsp;¸å¿ƒå†…å®¹æ˜¯åˆ†ç¦»å­—ä½“çš„å£°æ˜Žä¸Žè®¾å®šï¼Œ
%   å¹¶æŒ‰ç…§å®‹ã€é»‘ã€ä»¿ã€æ¥·åˆ’åˆ†ä¸­æ–‡å­—ä½“ã€‚}
% \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{æ•°å­¦å­—ä½“è®¾ç½®}
%
% æ&nbsp;¹æ® 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| ä¸æ˜¯æ–‡æ¡£ç±»é€‰é¡¹ï¼Œä¸èƒ½ä¼&nbsp;ç»™ \cls{ctexbook} æ–‡æ¡£ç±»ï¼Œå›&nbsp;æ­¤
% éœ€è¦æ‰‹åŠ¨å¼•å…¥ |.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 } },
%&lt;class-en&gt;  }
%    \end{macrocode}
% \end{macro}
%
% \subsubsection{å…¶ä»–è®¾ç½®}
%
% \begin{macro}{style/fullwidth-stop}
% \changes{v0.6}{2017/10/14}{æ”¯æŒç±»åˆ«ç&nbsp;å’Œ TECKit æ˜&nbsp;å°„ä¸¤ç§æœºåˆ¶ã€‚}
% è®¾ç½®å¥å·å½¢çŠ¶ï¼ˆåœ†åœˆæˆ–æ˜¯åœ†ç‚¹ï¼‰ã€‚
%    \begin{macrocode}
%&lt;*class&gt;
    fullwidth-stop .choice:,
    fullwidth-stop .value_required:n = true,
%    \end{macrocode}
% åˆ©ç”¨ç±»åˆ«ç&nbsp;æœºåˆ¶åˆ‡æ¢ï¼Œåªæœ‰æ˜¾å¼çš„\FSID ä¼šè¢«æ›¿æ¢ã€‚
%    \begin{macrocode}
    fullwidth-stop / catcode .code:n =
      { \@@_set_fullwidth_stop_catcode: },
%    \end{macrocode}
% åˆ©ç”¨ TECKit æ˜&nbsp;å°„æœºåˆ¶åˆ‡æ¢ï¼Œç›¸å½“äºŽè®¾ç½®äº† \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{} ä¸‹æ”¹ç”¨ç±»åˆ«ç&nbsp;æœºåˆ¶ä»£æ›¿ï¼Œå¹¶ç»™å‡ºè­¦å‘Šã€‚
%    \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}{å°†ç±»åˆ«ç&nbsp;è®¾ç½®åº”ç”¨äºŽé¢„å®šä¹‰çš„æ–‡æœ¬ä¸­ï¼Œå¹¶ä¼˜åŒ–å®žçŽ°ã€‚}
% å°†\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} }
  }
%&lt;/class&gt;
%    \end{macrocode}
% \end{macro}
%
% \changes{v0.8}{2021/09/15}{å…è®¸ \tn{emph} å¯¹ä¸­æ–‡ç”Ÿæ•ˆã€‚}
%
% å£°æ˜Ž \tn{emph} æ&nbsp;·å¼åºåˆ—ï¼Œä½¿å¾—ä¸­æ–‡å¼ºè°ƒä»¥æ¥·ä½“æ˜¾ç¤ºã€‚
%    \begin{macrocode}
%&lt;*class&gt;
\DeclareEmphSequence
  {
    \itshape \fdu@kai,
    \upshape \CJKfamily { \CJKfamilydefault },
  }
%&lt;/class&gt;
%    \end{macrocode}
%
% \changes{v0.6}{2017/10/28}{ä¼˜åŒ– \LuaTeX{} ä¸‹å¸Œè…Šå­—æ¯ã€è¥¿é‡Œå°”å­—æ¯å’Œå¸¦åœˆæ•°å­—çš„
%   æ˜¾ç¤ºï¼ˆ\pkg{ctex} v2.4.11 å·²é»˜è®¤è¿›è¡Œå¤„ç†ï¼‰ã€‚}
%
% \subsection{é¡µçœ‰é¡µè„š}
%
% æ¸…é™¤é»˜è®¤é¡µçœ‰é¡µè„šæ&nbsp;¼å¼ã€‚
%    \begin{macrocode}
\fancyhf { }
%    \end{macrocode}
%
% \begin{macro}{\@@_fancy_head:nn}
% é¡µçœ‰æ&nbsp;·å¼ã€‚
%    \begin{macrocode}
\cs_new_protected:Npn \@@_fancy_head:nn #1#2
  {
    \fancyhead [#1]
%&lt;class&gt;      { \small \fdu@kai \nouppercase {#2} }
%&lt;class-en&gt;      { \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}
%
% æž„å»ºé¡µè„šï¼Œç”¨æ¥æ˜¾ç¤ºé¡µç&nbsp;ã€‚é€‰é¡¹ \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} é€‰é¡¹åŽï¼Œä¼šæŠŠé¡µé¢æ&nbsp;¼å¼è®¾ç½®ä¸º |headings|ã€‚
% å›&nbsp;æ­¤å¿…é¡»åœ¨ \pkg{ctex} è°ƒç”¨ä¹‹åŽé‡æ–°è®¾ç½® \cs{pagestyle} ä¸º |fancy|ã€‚
%    \begin{macrocode}
\pagestyle { fancy }
%    \end{macrocode}
%
% \subsection{ç«&nbsp;èŠ‚æ&nbsp;‡é¢˜ç»“æž„}
%
% |\keys_set:nn{ctex}| å®žé™…ç›¸å½“äºŽ \cs{ctexset}ã€‚
%    \begin{macrocode}
\keys_set:nn { ctex }
  {
%    \end{macrocode}
% è®¾ç½®ç«&nbsp;ï¼ˆchapterï¼‰ã€èŠ‚ï¼ˆsectionï¼‰ä¸Žå°èŠ‚ï¼ˆsub-sectionï¼‰æ&nbsp;‡é¢˜æ&nbsp;·å¼ã€‚
% æ­¤å¤„ä½¿ç”¨ \kvopt{fixskip}{true} é€‰é¡¹æ¥æŠ‘åˆ¶å‰åŽçš„å¤šä½™é—´è·ã€‚
%    \begin{macrocode}
    chapter =
      {
%&lt;class&gt;        format      = \huge \normalfont \sffamily \centering,
%&lt;*class-en&gt;
        format      = \centering,
        nameformat  = \LARGE \bfseries,
        titleformat = \huge \bfseries,
        aftername   = \par \nobreak \vskip 10 pt,
%&lt;/class-en&gt;
        beforeskip  = 50 pt,
        afterskip   = 40 pt,
        number      = \@@_arabic:n { chapter },
        fixskip     = true
      },
    section =
      {
%&lt;class&gt;        format      = \Large \normalfont \sffamily \raggedright,
%&lt;class-en&gt;        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 =
      {
%&lt;class&gt;        format      = \large \normalfont \sffamily \raggedright,
%&lt;class-en&gt;        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}{ä¼˜åŒ–ç›®å½•ã€æ‘˜è¦ã€å‚è€ƒæ–‡çŒ®ç­‰çš„æ&nbsp;‡é¢˜å®žçŽ°ã€‚}
% \changes{v0.9}{2023/02/05}{åœ¨ç›®å½•å’Œä¹¦ç­¾ä¸­åˆ&nbsp;é™¤ç«&nbsp;æ&nbsp;‡é¢˜ä¸­çš„ \tn{quad}ã€‚}
%
% \begin{macro}{\@@_sanitize_chapter_title:n}
% åˆ&nbsp;é™¤ç«&nbsp;æ&nbsp;‡é¢˜ä¸­çš„ \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}
% æ‰‹åŠ¨ç”Ÿæˆç«&nbsp;çš„æ&nbsp;‡é¢˜ï¼Œç”¨äºŽæ‘˜è¦ã€å‚è€ƒæ–‡çŒ®ç­‰ã€‚
%    \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}{ç®€åŒ–å•é¡µæ¨¡å¼ä¸‹é¡µçœ‰çš„å®žçŽ°æ–¹å¼ã€‚}
% å•é¡µæ¨¡å¼ä¸‹ï¼Œç›®å½•ã€æ‘˜è¦ã€ç¬¦å·è¡¨ç­‰çš„é¡µçœ‰ä¸­é—´ä¸ºç›¸åº”æ&nbsp;‡é¢˜ï¼Œå·¦å³ä¸ºç©ºã€‚è¿™é‡Œé€šè¿‡å±…ä¸­çš„
% \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{ç¼–å·æ&nbsp;·å¼}
%
% å„ç§è„šæ³¨ç¼–å·æ&nbsp;·å¼çš„åç§°ã€‚
%    \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}
% ä¿å­˜å½“å‰ä½¿ç”¨çš„è„šæ³¨ç¼–å·æ&nbsp;·å¼ã€‚
%    \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|â€çš„ä¸ºæ—&nbsp;è¡¬çº¿ç¬¦å·ï¼Œå¸¦â€œ|*|â€çš„
% ä¸ºé˜´æ–‡ç‰ˆæœ¬ã€‚
%    \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 &lt;= \l_keys_choice_int &lt;= 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 &gt;= 21 }
      {
        \int_compare:nTF { #1 &gt;= 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 &gt;= 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} é˜³æ–‡æ—&nbsp;è¡¬çº¿ç‰ˆã€‚
%    \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} é˜´æ–‡æ—&nbsp;è¡¬çº¿ç‰ˆã€‚
%    \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 &gt;= 10 }
      {
        \int_compare:nTF { #1 &gt;= 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} é˜³æ–‡æ—&nbsp;è¡¬çº¿ç‰ˆã€‚åªåŒ…å« \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} é˜´æ–‡æ—&nbsp;è¡¬çº¿ç‰ˆã€‚ä¹ŸåªåŒ…å« \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}
% è„šæ³¨ç¼–å·æ&nbsp;·å¼ã€‚
%    \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} ç±»åž‹æ—&nbsp;éœ€è¿›è¡Œé¢å¤–çš„æ“ä½œã€‚
%    \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{æ•´ä½“æ&nbsp;·å¼}
%
% \begin{macro}[int]{\@makefntext}
% \changes{v0.7}{2018/01/18}{ç®€åŒ–å®žçŽ°ï¼Œå…¼å®¹ \pkg{fancyvrb} å®åŒ…ã€‚
%   ä¸å†ä½¿ç”¨æ‚¬æŒ‚ç¼©è¿›ã€‚}
% é‡å®šä¹‰å†…éƒ¨è„šæ³¨æ–‡å­—å‘½ä»¤ï¼Œä½¿è„šæ³¨ç¼–å·ä¸ä½¿ç”¨ä¸Šæ&nbsp;‡ï¼Œå®½åº¦ä¸º \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} ä¸¤ç§ç±»åž‹çš„å®šç†æ&nbsp;·å¼åç§°ã€‚
%    \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}
% è®¾ç½®é»˜è®¤æ&nbsp;·å¼ä¸º \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*}
% åˆ™è´Ÿè´£åˆ›å»ºæ—&nbsp;ç¼–å·å®šç†ã€‚ä»¥ä¸‹åˆ†è¿™ä¸¤ç§æƒ…å†µå¤„ç†ã€‚
%    \begin{macrocode}
    \IfBooleanTF {#1}
      {
%    \end{macrocode}
% å¸¦ |*| çš„ç‰ˆæœ¬åŽŸåˆ™ä¸ŠåªæŽ¥å— \opt{plain} å’Œ \opt{break} ä¸¤ç§æ&nbsp;·å¼ï¼Œ
% å…¶ä½™æ&nbsp;·å¼å°†è¢«è½¬æ¢æˆè¿™ä¸¤è€…å…¶ä¸­ä¹‹ä¸€ã€‚
%    \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} å®åŒ…æä¾›çš„æ—&nbsp;ç¼–å·å®šç†å¸¦æœ‰ |nonumber| å‰ç¼€ï¼Œ
% è¿™é‡Œå°†å…¶åŠ&nbsp;ä¸Šã€‚
%    \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|â€çš„æ‰€æœ‰å®šç†æ&nbsp;·å¼ã€‚
%    \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}
% é‡å®šä¹‰å®šç†æ&nbsp;·å¼ï¼Œå¹¶ç»™å‡ºè­¦å‘Šã€‚
%    \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 æ&nbsp;·å¼
%   \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 æ&nbsp;·å¼
%   \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} çš„æ&nbsp;‡é¢˜æ&nbsp;·å¼ã€‚
%    \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}{åˆ&nbsp;é™¤è®ºæ–‡æ&nbsp;‡é¢˜ä¸­çš„ \tn{\textbackslash} å’Œæ±‰å­—é—´çš„ç©ºæ&nbsp;¼ã€‚}
% 
% \begin{variable}{\l_@@_info_title_sanitized_tl,\l_@@_info_title_en_sanitized_tl}
% å¤„ç†åŽçš„è®ºæ–‡æ&nbsp;‡é¢˜ã€‚
%    \begin{macrocode}
\tl_new:N \l_@@_info_title_sanitized_tl
\tl_new:N \l_@@_info_title_en_sanitized_tl
%    \end{macrocode}
% \end{variable}
%
% \begin{macro}{\@@_set_title:nn}
% è®¾ç½®è®ºæ–‡æ&nbsp;‡é¢˜ï¼Œå¹¶åˆ&nbsp;é™¤å…¶ä¸­çš„ |\\| å’Œæ±‰å­—é—´çš„ç©ºæ&nbsp;¼ã€‚
%    \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}
% å­¦æ&nbsp;¡ä»£ç&nbsp;ã€‚
%    \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}
% æ&nbsp;¡åå›¾ç‰‡çš„æ–‡ä»¶åå’Œå°ºå¯¸ã€‚
%    \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} å®åŒ…ã€‚}
% ä¸‹åˆ’çº¿å&nbsp;ä½ç¬¦ã€‚|#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}
% å³ä¸Šè§’çš„å¯†çº§ã€å­¦æ&nbsp;¡ä»£ç&nbsp;å’Œå­¦å·ã€‚
% \changes{v0.9a}{2023/05/21}{å°é¢å¯†çº§ã€å­¦æ&nbsp;¡ä»£ç&nbsp;å’Œå­¦å·æ”¹ç”¨è¡¨æ&nbsp;¼å®žçŽ°ã€‚}
%    \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 } &amp;
    \tl_use:c { l_@@_info_ #1 _tl }
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{variable}{\c_@@_cover_id_align_tl}
% å¯†çº§ã€å­¦å·æ&nbsp;å¯¹é½æ&nbsp;¼å¼ï¼šå·¦å³ä¸¤æ&nbsp;å‡å·¦å¯¹é½ï¼Œä¸­é—´ä»¥å†’å·åˆ†éš”ï¼Œå¹¶ä¸”ä¸åŠ&nbsp;é—´è·ã€‚
%    \begin{macrocode}
\tl_const:Nn \c_@@_cover_id_align_tl
  { l @ { \c_@@_fwid_colon_tl } l @ { } }
%    \end{macrocode}
% \end{variable}
%
% \begin{macro}{\@@_cover_secret:}
% å¯†çº§ï¼Œä½¿ç”¨æ—&nbsp;è¡¬çº¿å­—ä½“ã€‚
%    \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:}
% æ’å…¥æ&nbsp;¡åå›¾ç‰‡ã€‚æ&nbsp;¹æ®å‚æ•° \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}{è°ƒæ•´ä¸“ä¸šå­¦ä½çš„å°é¢ä¿¡æ¯æ&nbsp;ã€‚}
% \changes{v0.9}{2023/02/05}{å°é¢ä¿¡æ¯æ&nbsp;æ”¹ç”¨è¡¨æ&nbsp;¼å®žçŽ°ã€‚}
% ä¿¡æ¯æ&nbsp;ã€‚
%    \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}
% å°†ä¿¡æ¯æ&nbsp;çš„æ¯ä¸€è¡Œå­˜å…¥ |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 } }
              &amp;
              \tl_use:c { l_@@_info_ ##1 _tl }
            }
        }
%    \end{macrocode}
% é€šè¿‡ \env{tabular} çŽ¯å¢ƒè¾“å‡ºã€‚
% \changes{v0.9a}{2023/05/07}{å±•å¼€åˆ—æ&nbsp;¼å¼å‚æ•°ä»¥ä¿®å¤ä¸Ž \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}
% ä¿¡æ¯æ&nbsp;å¯¹é½æ&nbsp;¼å¼ï¼šå·¦å³ä¸¤æ&nbsp;å‡å±…ä¸­ï¼Œä¸­é—´ä»¥å†’å·åˆ†éš”ã€‚
%    \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}
% ä¿¡æ¯æ&nbsp;å·¦ä¾§å­—æ®µã€‚
%    \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}
%&lt;@@=fdu_cover&gt;
\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}
% å£°æ˜Žæ¨¡æ¿ä»£ç&nbsp;ã€‚^^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: } }
      },
  }
%&lt;@@=fdu&gt;
%    \end{macrocode}
% \end{macro}
%
% \subsubsection{ç»˜åˆ¶å°é¢}
%
% \changes{v0.9}{2023/02/18}{ä¸ºå°é¢æ·»åŠ&nbsp; PDF é¡µç&nbsp;ã€‚}
%
% \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}{å°é¢ä¸­æ–‡æ&nbsp;‡é¢˜æ”¹ä¸ºåŠ&nbsp;ç²—å®‹ä½“ï¼ˆå¯èƒ½ä½¿ç”¨ä¼ªç²—ï¼‰ã€‚}
%
% å®šä¹‰å°é¢çš„å…·ä½“é…ç½®å‚æ•°ã€‚
%    \begin{macrocode}
\DeclareInstance { fdu / cover } { cover-i-default } { cover-i }
  {
%&lt;class-en&gt;    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 }
  {
%&lt;class-en&gt;    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                                =
%&lt;class&gt;      \@@_line_spread:n { 1.8 },
%&lt;class-en&gt;      \@@_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} å¼€å§‹ä½ç½®æ·»åŠ&nbsp;å°é¢ä»¥åŠæŒ‡å¯¼å°ç»„æˆå‘˜åå•ã€‚
%    \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} ç»“æŸä½ç½®æ·»åŠ&nbsp;å£°æ˜Žé¡µã€‚
%    \begin{macrocode}
\@@_gadd_ltxhook:nn { enddocument }
  { \bool_if:NT \l_@@_auto_make_cover_bool { \makecoveriii } }
%    \end{macrocode}
%
% \subsection{ç›®å½•}
%
% è®¾ç½®ç›®å½•æ&nbsp;‡é¢˜ã€‚
%    \begin{macrocode}
\keys_set:nn { ctex }
  {
%&lt;class&gt;    contentsname   = \c_@@_name_toc_tl,
%&lt;class&gt;    listfigurename = \c_@@_name_lof_tl,
%&lt;class&gt;    listtablename  = \c_@@_name_lot_tl,
%    \end{macrocode}
%
% è®¾ç½®ç›®å½•ä¸­ç«&nbsp;èŠ‚æ&nbsp;‡é¢˜çš„æ&nbsp;·å¼ã€‚
%    \begin{macrocode}
    chapter / tocline =
      {
%&lt;class&gt;        \normalfont \sffamily
%&lt;class-en&gt;        \bfseries
        \CTEXnumberline {#1} #2
      },
    section / tocline =
      {
%&lt;class-en&gt;        \bfseries
        \CTEXnumberline {#1} #2
      },
    subsection / tocline =
      {
%&lt;class&gt;        \fdu@kai
        \CTEXnumberline {#1} #2
      }
  }
%    \end{macrocode}
%
% \changes{v0.7e}{2019/05/12}{å¢žåŠ&nbsp;å¯¹æ’å›¾ã€è¡¨æ&nbsp;¼ç›®å½•çš„å¤„ç†ã€‚}
%
% \begin{macro}{\tableofcontents,\listoffigures,\listoftables}
% ä¿®æ”¹ \cs{tableofcontents}ã€\cs{listoffigures} å’Œ \cs{listoftables} çš„å®šä¹‰ï¼Œ
% ä½¿å¾—é¡µçœ‰æ­£ç¡®æ˜¾ç¤ºï¼Œå¹¶å‡ºçŽ°åœ¨ç›®å½•åŠ PDF ä¹¦ç­¾ä¸­ã€‚æ¥è‡ªäºŽ \LaTeXe{} æ&nbsp;‡å‡†æ–‡æ¡£ç±»
% \file{book.cls}^^A
% \footnote{åŽŸä»£ç&nbsp;ä¸­åªæœ‰ \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}
%&lt;*class-en&gt;
\@@_patch_cmd:Nnn \@starttoc
  { \begingroup }
  {
    \begingroup
      \@@_line_spread:N \c_@@_line_spread_fp
  }
%&lt;/class-en&gt;
%    \end{macrocode}
% \end{macro}
%
% \subsection{æ‘˜è¦}
%
% \begin{environment}{abstract}
% \begin{environment}{abstract*}
% \changes{v0.7}{2018/03/05}{æ•´ç†ä»£ç&nbsp;ã€‚}
% æ‘˜è¦çŽ¯å¢ƒã€‚åœ¨ä¸­æ–‡æ¨¡æ¿å®šä¹‰äº†ä¸­è‹±æ–‡åŒè¯­æ‘˜è¦ï¼Œä½†åœ¨è‹±æ–‡æ¨¡æ¿ä¸­åˆ™æ²¡æœ‰å®šä¹‰ä¸­æ–‡æ‘˜è¦ã€‚
%    \begin{macrocode}
\NewDocumentEnvironment { abstract  } { }
%&lt;class&gt;  { \@@_abstract_begin:    } { \@@_abstract_end:      }
%&lt;class-en&gt;  { \@@_abstract_en_begin: } { \@@_abstract_en_end:   }
%&lt;*class&gt;
\NewDocumentEnvironment { abstract* } { }
  { \@@_abstract_en_begin: } { \@@_abstract_en_end:   }
%&lt;/class&gt;
%    \end{macrocode}
% \end{environment}
% \end{environment}
%
% \begin{macro}{\@@_abstract_begin:,\@@_abstract_en_begin:}
% æ‘˜è¦é¡µæ&nbsp;‡é¢˜ã€‚
%    \begin{macrocode}
%&lt;*class&gt;
\cs_new_protected:Npn \@@_abstract_begin:
  { \@@_chapter:V \c_@@_name_abstract_tl    }
%&lt;/class&gt;
\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}
%&lt;*class&gt;
\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 }
      }
  }
%&lt;/class&gt;
%    \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}{æ•´ç†ä»£ç&nbsp;ã€‚}
% ç¬¦å·è¡¨çŽ¯å¢ƒï¼Œåˆ©ç”¨ \env{longtable} å°è£…ã€‚å¯é€‰å‚æ•°ä¸ºè¡¨æ&nbsp;¼åˆ—æ&nbsp;¼å¼è¯´æ˜Žç¬¦ã€‚
%    \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:}
% ç¬¦å·è¡¨é¡µæ&nbsp;‡é¢˜ã€‚
%    \begin{macrocode}
\cs_new_protected:Npn \@@_notation_begin:
  {
%&lt;class&gt;    \@@_chapter:V \c_@@_name_notation_tl
%&lt;class-en&gt;    \@@_chapter:V \c_@@_name_notation_en_tl
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_notation_long_table_setup:}
% è°ƒæ•´ \cs{LTpre} å’Œ \cs{LTpost}ï¼Œä»¥åˆ&nbsp;åŽ» \env{longtable} å‰åŽçš„ç©ºç™½ã€‚
% è‹±æ–‡æ¨¡æ¿ä¸­è¿˜éœ€è¦è°ƒæ•´è¡¨æ&nbsp;¼çš„è¡Œè·ã€‚æ³¨æ„ \tn{arraystretch} åªæ˜¯ä¸€ä¸ªç®€å•
% å®ï¼Œä¸èƒ½ä½¿ç”¨ \cs{fp_set:Nn}ã€‚
%    \begin{macrocode}
\cs_new_protected:Npn \@@_notation_long_table_setup:
  {
%&lt;class-en&gt;    \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:}
% è‡´è°¢é¡µæ&nbsp;‡é¢˜ã€‚
%    \begin{macrocode}
\cs_new_protected:Npn \@@_acknowledgements_begin:
  {
%&lt;class&gt;    \@@_chapter:V \c_@@_name_acknowledgements_tl
%&lt;class-en&gt;    \@@_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}
% ä¿å­˜å‚è€ƒæ–‡çŒ®åŠå¼•ç”¨æ&nbsp;·å¼ã€‚
%    \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} åœ¨å¯¼è¨€åŒºåŽæ‰è½½å…¥ï¼Œéœ€è¦å•ç‹¬å®šä¹‰æ·»åŠ&nbsp;å‚è€ƒæ–‡çŒ®æ•°æ®æºçš„å‘½ä»¤ä»¥å®žçŽ°å…¼å®¹ã€‚
% è¯¥å‘½ä»¤éœ€è¦åœ¨è½½å…¥å®åŒ…å‰å–æ¶ˆå®šä¹‰ã€‚
%    \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}
% å‚è€ƒæ–‡çŒ®æ&nbsp;·å¼ã€‚
%    \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{} ä¸‹ä½¿ç”¨ã€‚}
% å¼•ç”¨æ&nbsp;·å¼ã€‚
%    \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 &amp; compress ] { gbt7714 }
            \exp_args:No \bibliographystyle
              { gbt7714- \l_@@_bib_gb_style_tl }
          }
          {
            \RequirePackage [ sort &amp; compress ] { natbib }
            \exp_args:No \bibliographystyle
              { \l_@@_bib_style_tl }
          }
        \@@_bibtex_setup:
      }
  }
%    \end{macrocode}
% \pkg{biblatex} ä¼šå†™å…¥ |begindocument/before| é’©å­ï¼Œå›&nbsp;æ­¤éœ€åœ¨å…¶ä¹‹å‰é€šè¿‡
% \texttt{env/doc\-u\-ment/begin} é’©å­è½½å…¥ \pkg{biblatex} å®åŒ…ã€‚æ³¨æ„è¿™ä¸ª
% é’©å­ä»…é€‚ç”¨äºŽ |\begin{document}| çš„å†™æ³•ï¼Œå¯¹äºŽ |\document| å‘½ä»¤æœ¬èº«æ—&nbsp;æ•ˆã€‚
%    \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}{æ–°å¢žä¸å¸¦ä¸Šæ&nbsp;‡çš„æ–‡å†…å¼•ç”¨å‘½ä»¤ã€‚}
%
% \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}
% å¼•ç”¨æ&nbsp;·å¼ã€‚
%    \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}
% ä¿®æ”¹å‚è€ƒæ–‡çŒ®æ&nbsp;‡é¢˜ã€‚
%    \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}
% å‚è€ƒæ–‡çŒ®æ&nbsp;·å¼ã€‚
%    \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}
% å¼•ç”¨æ&nbsp;·å¼ã€‚
% \changes{v0.8}{2021/03/09}{æ­£ç¡®è°ƒç”¨å¼•ç”¨æ&nbsp;·å¼ã€‚}
%    \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}
% ä¿®æ”¹å‚è€ƒæ–‡çŒ®æ&nbsp;‡é¢˜ã€‚
%    \begin{macrocode}
    \defbibheading { bibliography } [ \bibname ] { \@@_chapter:n {##1} }
%&lt;*class-en&gt;
    \exp_args:Nnx \DefineBibliographyStrings { english }
      { bibliography = { \c_@@_name_bib_en_tl } }
%&lt;/class-en&gt;
  }
%    \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}{ä¸å†å°†è‘—å½•ç”¨ç¬¦å·ä¿®æ”¹ä¸ºä¸­æ–‡æ&nbsp;‡ç‚¹ç¬¦å·ã€‚}
%
% \subsection{\pkg{hyperref} ç›¸å…³é…ç½®}
%
% \changes{v0.4}{2017/08/13}{æ–°å¢ž \pkg{hyperref} ç›¸å…³é…ç½®ï¼ŒåŒ…æ‹¬è¶…é“¾æŽ¥
%   æ&nbsp;·å¼ï¼ˆ\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} é€‰é¡¹ä¼&nbsp;é€’å‚æ•°ã€‚}
% è¶…é“¾æŽ¥æ&nbsp;·å¼ã€‚
%    \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}
%&lt;*class&gt;
        pdftitle    = \l_@@_info_title_sanitized_tl,
        pdfauthor   = \l_@@_info_author_tl,
        pdfkeywords = \l_@@_info_keywords_clist,
%&lt;/class&gt;
%&lt;*class-en&gt;
        pdftitle    = \l_@@_info_title_en_sanitized_tl,
        pdfauthor   = \l_@@_info_author_en_tl,
        pdfkeywords = \l_@@_info_keywords_en_clist,
%&lt;/class-en&gt;
%       pdfsubject  = ,
        pdfcreator  = \c_@@_name_pdf_creator_tl
      }
%    \end{macrocode}
% å°†å¯¼è¨€åŒºä¸­é€šè¿‡ \cs{fdu_hyperref_setup:n} è¿›è¡Œçš„è®¾ç½®ä¼&nbsp;å…¥ \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,
%&lt;class&gt;    style   / cjk-font        = fandol,
    style   / font-size       = -4,
%&lt;class&gt;    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 },
%&lt;class&gt;    theorem / header-font     = { \sffamily },
%&lt;class-en&gt;    theorem / header-font     = { \bfseries \upshape },
%&lt;class&gt;    theorem / body-font       = { \fdu@kai },
%&lt;class-en&gt;    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}
% æ¨¡æ¿é¢„å®šä¹‰çš„å¸¸ç”¨æ•°å­¦çŽ¯å¢ƒã€‚
% å…¶ä¸­çš„â€œè¯æ˜Žâ€æ¯”è¾ƒç‰¹æ®Šï¼Œå®ƒä¸ç¼–å·ï¼Œä½†ä¼šæ·»åŠ&nbsp;è¯æ¯•ç¬¦å·ã€‚
%    \begin{macrocode}
%&lt;*class&gt;
\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    }
%&lt;/class&gt;
%&lt;*class-en&gt;
\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    }
%&lt;/class-en&gt;
%&lt;/class|class-en&gt;
%    \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}
%&lt;*definition&gt;
%    \end{macrocode}
%
% \subsubsection{é€šç”¨é…ç½®}
%
% \begin{variable}{\c_@@_name_simp_tl,\c_@@_name_trad_tl,\c_@@_name_en_tl}
% å­¦æ&nbsp;¡åç§°ã€‚
%    \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}
%
% å¸¸ç”¨æ&nbsp;‡ç‚¹ç¬¦å·ï¼Œè§è¡¨~\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{å¸¸ç”¨æ&nbsp;‡ç‚¹ç¬¦å·}
%   \label{tab:punctuations}
%   \centering
%   \begin{tabular}{cccc}
%     \toprule
%       \textbf{ä¸­æ–‡åç§°} &amp;
%       \textbf{è‹±æ–‡åç§°} &amp;
%       \textbf{ç¬¦å·} &amp;
%       \textbf{Unicode ç&nbsp;ä½} \\
%     \midrule
%       ä¸­æ–‡é¡¿å·     &amp; Ideographic comma           &amp; ^^^^3001 &amp; U+3001 \\
%       ä¸­æ–‡å¥å·     &amp; Ideographic full stop       &amp; ^^^^3002 &amp; U+3002 \\
%       ä¸­æ–‡é€—å·     &amp; Fullwidth comma             &amp; ^^^^ff0c &amp; U+FF0C \\
%       å…¨è§’è¥¿æ–‡å¥ç‚¹ &amp; Fullwidth full stop         &amp; ^^^^ff0e &amp; U+FF0E \\
%       ä¸­æ–‡å†’å·     &amp; Fullwidth colon             &amp; ^^^^ff1a &amp; U+FF1A \\
%       ä¸­æ–‡åˆ†å·     &amp; Fullwidth semicolon         &amp; ^^^^ff1b &amp; U+FF1B \\
%       ä¸­æ–‡å·¦åœ†æ‹¬å· &amp; Fullwidth left parenthesis  &amp; ^^^^ff08 &amp; U+FF08 \\
%       ä¸­æ–‡å³åœ†æ‹¬å· &amp; Fullwidth right parenthesis &amp; ^^^^ff09 &amp; U+FF09 \\
%     \bottomrule
%   \end{tabular}
% \end{table}
%
% \begin{variable}{\c_@@_line_spread_fp}
% è¡Œè·å€æ•°ã€‚è¡Œè·å€æ•° $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
  {
    æœ¬äººéƒ‘é‡å£°æ˜Žï¼šæ‰€å‘ˆäº¤çš„å­¦ä½è®ºæ–‡ï¼Œæ˜¯æœ¬äººåœ¨å¯¼å¸ˆçš„æŒ‡å¯¼ä¸‹ï¼Œç‹¬ç«‹è¿›è¡Œç&nbsp;”ç©¶
    å·¥ä½œæ‰€å–å¾—çš„æˆæžœã€‚è®ºæ–‡ä¸­é™¤ç‰¹åˆ«æ&nbsp;‡æ³¨çš„å†…å®¹å¤–ï¼Œä¸åŒ…å«ä»»ä½•å…¶ä»–ä¸ªäººæˆ–æœº
    æž„å·²ç»å‘è¡¨æˆ–æ’°å†™è¿‡çš„ç&nbsp;”ç©¶æˆæžœã€‚å¯¹æœ¬ç&nbsp;”ç©¶åšå‡ºé‡è¦è´¡çŒ®çš„ä¸ªäººå’Œé›†ä½“ï¼Œå‡
    å·²åœ¨è®ºæ–‡ä¸­ä½œäº†æ˜Žç¡®çš„å£°æ˜Žå¹¶è¡¨ç¤ºäº†è°¢æ„ã€‚æœ¬å£°æ˜Žçš„æ³•å¾‹ç»“æžœç”±æœ¬äººæ‰¿æ‹…ã€‚
  }
%    \end{macrocode}
% \end{variable}
%
% \begin{variable}{\c_@@_auth_decl_text_tl}
% è®ºæ–‡ä½¿ç”¨æŽˆæƒå£°æ˜Žã€‚
%    \begin{macrocode}
\tl_const:Nn \c_@@_auth_decl_text_tl
  {
    æœ¬äººå®Œå…¨äº†è§£å¤æ—¦å¤§å­¦æœ‰å…³æ”¶è—å’Œåˆ©ç”¨åšå£«ã€ç¡•å£«å­¦ä½è®ºæ–‡çš„è§„å®šï¼Œå³ï¼šå­¦
    æ&nbsp;¡æœ‰æƒæ”¶è—ã€ä½¿ç”¨å¹¶å‘å›½å®¶æœ‰å…³éƒ¨é—¨æˆ–æœºæž„é€äº¤è®ºæ–‡çš„å°åˆ·æœ¬å’Œç”µå­ç‰ˆæœ¬ï¼›
    å…è®¸è®ºæ–‡è¢«æŸ¥é˜…å’Œå€Ÿé˜…ï¼›å­¦æ&nbsp;¡å¯ä»¥å…¬å¸ƒè®ºæ–‡çš„å…¨éƒ¨æˆ–éƒ¨åˆ†å†…å®¹ï¼Œå¯ä»¥é‡‡ç”¨å½±
    å°ã€ç¼©å°æˆ–å…¶å®ƒå¤åˆ¶æ‰‹æ®µä¿å­˜è®ºæ–‡ã€‚æ¶‰å¯†å­¦ä½è®ºæ–‡åœ¨è§£å¯†åŽéµå®ˆæ­¤è§„å®šã€‚
  }
%    \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}{â€œå…³é”®å­—â€æ›´æ”¹ä¸ºâ€œå…³é”®è¯â€ã€‚}
%
% é»˜è®¤åç§°ã€‚æ³¨æ„ç©ºæ&nbsp;¼æ˜¯å¿½ç•¥æŽ‰çš„ã€‚
%    \begin{macrocode}
\clist_map_inline:nn
  {
    { secret_level       } { å¯† \qquad çº§                  },
    { secret_star        } { \textrm { \bigstar }          },
    { school_id          } { å­¦æ&nbsp;¡ä»£ç&nbsp;                      },
    { student_id         } { å­¦ \qquad å·                  },
    { department         } { é™¢ç³»                          },
    { major              } { ä¸“ä¸š                          },
    { major_professional } { ä¸“ä¸šå­¦ä½ç±»åˆ«ï¼ˆé¢†åŸŸï¼‰          },
    { author             } { å§“å                          },
    { supervisor         } { æŒ‡å¯¼æ•™å¸ˆ                      },
    { date               } { å®Œæˆæ—¥æœŸ                      },
    { instructors        } { æŒ‡å¯¼å°ç»„æˆå‘˜                  },
    { author_sign        } { ä½œè€…ç­¾å                      },
    { supervisor_sign    } { å¯¼å¸ˆç­¾å                      },
    { sign_date          } { æ—¥æœŸ                          },
    { toc                } { ç›® \quad å½•                   },
    { lof                } { æ’å›¾ç›®å½•                      },
    { lot                } { è¡¨æ&nbsp;¼ç›®å½•                      },
    { 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 } } }
%&lt;/definition&gt;
%&lt;@@=&gt;
%    \end{macrocode}
% \end{variable}
%
% \clearpage
%
% \end{implementation}
%
</pre></body></html>