texlive[47408] Master: fduthesis (9apr18)

commits+karl at tug.org commits+karl at tug.org
Mon Apr 9 23:17:27 CEST 2018


Revision: 47408
          http://tug.org/svn/texlive?view=revision&revision=47408
Author:   karl
Date:     2018-04-09 23:17:26 +0200 (Mon, 09 Apr 2018)
Log Message:
-----------
fduthesis (9apr18)

Modified Paths:
--------------
    trunk/Master/tlpkg/bin/tlpkg-ctan-check
    trunk/Master/tlpkg/tlpsrc/collection-langchinese.tlpsrc

Added Paths:
-----------
    trunk/Master/texmf-dist/doc/latex/fduthesis/
    trunk/Master/texmf-dist/doc/latex/fduthesis/README.md
    trunk/Master/texmf-dist/doc/latex/fduthesis/fdulogo-example.tex
    trunk/Master/texmf-dist/doc/latex/fduthesis/fduthesis-code.pdf
    trunk/Master/texmf-dist/doc/latex/fduthesis/fduthesis-cover.tex
    trunk/Master/texmf-dist/doc/latex/fduthesis/fduthesis-en.pdf
    trunk/Master/texmf-dist/doc/latex/fduthesis/fduthesis-en.tex
    trunk/Master/texmf-dist/doc/latex/fduthesis/fduthesis-template.tex
    trunk/Master/texmf-dist/doc/latex/fduthesis/fduthesis.pdf
    trunk/Master/texmf-dist/doc/latex/fduthesis/latexmkrc
    trunk/Master/texmf-dist/doc/latex/fduthesis/latexmkrc-en
    trunk/Master/texmf-dist/source/latex/fduthesis/
    trunk/Master/texmf-dist/source/latex/fduthesis/fduthesis-doc.dtx
    trunk/Master/texmf-dist/source/latex/fduthesis/fduthesis-logo.dtx
    trunk/Master/texmf-dist/source/latex/fduthesis/fduthesis.dtx
    trunk/Master/texmf-dist/source/latex/fduthesis/fduthesis.ins
    trunk/Master/texmf-dist/tex/latex/fduthesis/
    trunk/Master/texmf-dist/tex/latex/fduthesis/fdudoc.cls
    trunk/Master/texmf-dist/tex/latex/fduthesis/fdulogo.sty
    trunk/Master/texmf-dist/tex/latex/fduthesis/fduthesis-en.cls
    trunk/Master/texmf-dist/tex/latex/fduthesis/fduthesis.cls
    trunk/Master/texmf-dist/tex/latex/fduthesis/fduthesis.def
    trunk/Master/tlpkg/tlpsrc/fduthesis.tlpsrc

Added: trunk/Master/texmf-dist/doc/latex/fduthesis/README.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex/fduthesis/README.md	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/fduthesis/README.md	2018-04-09 21:17:26 UTC (rev 47408)
@@ -0,0 +1,68 @@
+The `fduthesis` Class
+=====================
+
+*LaTeX thesis template for Fudan University, v0.7a*
+
+Overview
+--------
+
+`fduthesis` is a thesis template for Fudan University. This template
+is mostly written in LaTeX3, with a simple interface for users.
+
+At present, only XeTeX, LuaTeX and [ApTeX](https://github.com/clerkma/ptex-ng)
+(experimental) are supported.
+
+The documentation can be found in
+[fduthesis.pdf](https://github.com/Stone-Zeng/fduthesis/releases/download/v0.7a/fduthesis.pdf)
+(in Chinese) or
+[fduthesis-en.pdf](https://github.com/Stone-Zeng/fduthesis/releases/download/v0.7a/fduthesis-en.pdf)
+(in English).
+
+Installation
+------------
+
+To install `fduthesis`, you can use one of the following methods:
+
+- Download
+  [fduthesis.tds.zip](https://github.com/Stone-Zeng/fduthesis/releases/download/v0.7a/fduthesis.tds.zip)
+  from GitHub, extract it in the root of one of your TDS trees, and
+  update the filename database.
+
+- Get the source (`fduthesis.zip`) from GitHub:
+
+      git clone https://github.com/Stone-Zeng/fduthesis.git
+
+  Run
+
+      xetex fduthesis.dtx
+
+  to generate the templates and configuration files. Then 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`
+
+  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, 2018 by Xiangdong Zeng <xdzeng96 at gmail.com>.


Property changes on: trunk/Master/texmf-dist/doc/latex/fduthesis/README.md
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/fduthesis/fdulogo-example.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/fduthesis/fdulogo-example.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/fduthesis/fdulogo-example.tex	2018-04-09 21:17:26 UTC (rev 47408)
@@ -0,0 +1,80 @@
+%%
+%% This is file `fdulogo-example.tex',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% fduthesis.dtx  (with options: `ex-logo')
+%% fduthesis-logo.dtx  (with options: `ex-logo')
+%% 
+%%     Copyright (C) 2017, 2018 by Xiangdong Zeng <xdzeng96 at gmail.com>
+%% 
+%%     This work may be distributed and/or modified under the
+%%     conditions of the LaTeX Project Public License, either
+%%     version 1.3c of this license or (at your option) any later
+%%     version. The latest version of this license is in:
+%% 
+%%       http://www.latex-project.org/lppl.txt
+%% 
+%%     and version 1.3 or later is part of all distributions of
+%%     LaTeX version 2005/12/01 or later.
+%% 
+%%     This work has the LPPL maintenance status `maintained'.
+%% 
+%%     The Current Maintainer of this work is Xiangdong Zeng.
+%% 
+%%     This work consists of the files fduthesis.dtx,
+%%                                     fduthesis-doc.dtx,
+%%                                     fduthesis-logo.dtx,
+%%                                     fduthesis-template.tex,
+%%               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,
+%%                                     fduthesis.pdf,
+%%                                     fduthesis-en.pdf,
+%%                                     fduthesis-code.pdf,
+%%                                     latexmkrc,
+%%                                     latexmkrc-en,
+%%                                 and README.md.
+%% 
+\documentclass{article}
+\usepackage{fdulogo}
+\usetikzlibrary{backgrounds,external}
+\tikzexternalize[prefix=fudan-]
+\let\FIG=\tikzsetnextfilename
+\def\BG#1{color=white, show background rectangle,
+  background rectangle/.style={#1}}
+\begin{document}
+\FIG{name-black}                  \fduname
+\FIG{name-blue}                   \fduname[color=FudanBlue]
+\FIG{name-red}                    \fduname[color=FudanRed]
+\FIG{emblem-a-black}              \fduemblem
+\FIG{emblem-a-blue}               \fduemblem[color=FudanBlue]
+\FIG{emblem-a-red}                \fduemblem[color=FudanRed]
+\FIG{emblem-b-black}              \fduemblem*
+\FIG{emblem-b-blue}               \fduemblem*[color=FudanBlue]
+\FIG{emblem-b-red}                \fduemblem*[color=FudanRed]
+\FIG{emblem-new-a-black}          \fduemblem+
+\FIG{emblem-new-a-blue}           \fduemblem+[color=FudanBlue]
+\FIG{emblem-new-a-red}            \fduemblem+[color=FudanRed]
+\FIG{emblem-new-b-black}          \fduemblem+*
+\FIG{emblem-new-b-blue}           \fduemblem+*[color=FudanBlue]
+\FIG{emblem-new-b-red}            \fduemblem+*[color=FudanRed]
+\FIG{emblem-new-a-reversed-black} \fduemblem+[\BG{fill}]
+\FIG{emblem-new-a-reversed-blue}  \fduemblem+[\BG{fill=FudanBlue}]
+\FIG{emblem-new-a-reversed-red}   \fduemblem+[\BG{fill=FudanRed}]
+\FIG{emblem-new-b-reversed-black} \fduemblem+*[\BG{fill}]
+\FIG{emblem-new-b-reversed-blue}  \fduemblem+*[\BG{fill=FudanBlue}]
+\FIG{emblem-new-b-reversed-red}   \fduemblem+*[\BG{fill=FudanRed}]
+\FIG{motto}                       \fdumotto
+\FIG{motto-reversed}              \fdumotto[\BG{fill}]
+\end{document}
+\endinput
+%%
+%% End of file `fdulogo-example.tex'.


Property changes on: trunk/Master/texmf-dist/doc/latex/fduthesis/fdulogo-example.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/fduthesis/fduthesis-code.pdf
===================================================================
(Binary files differ)

Index: trunk/Master/texmf-dist/doc/latex/fduthesis/fduthesis-code.pdf
===================================================================
--- trunk/Master/texmf-dist/doc/latex/fduthesis/fduthesis-code.pdf	2018-04-09 21:16:36 UTC (rev 47407)
+++ trunk/Master/texmf-dist/doc/latex/fduthesis/fduthesis-code.pdf	2018-04-09 21:17:26 UTC (rev 47408)

Property changes on: trunk/Master/texmf-dist/doc/latex/fduthesis/fduthesis-code.pdf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/pdf
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/fduthesis/fduthesis-cover.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/fduthesis/fduthesis-cover.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/fduthesis/fduthesis-cover.tex	2018-04-09 21:17:26 UTC (rev 47408)
@@ -0,0 +1,55 @@
+%%
+%% This is file `fduthesis-cover.tex',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% fduthesis.dtx  (with options: `cover')
+%% fduthesis-logo.dtx  (with options: `cover')
+%% 
+%%     Copyright (C) 2017, 2018 by Xiangdong Zeng <xdzeng96 at gmail.com>
+%% 
+%%     This work may be distributed and/or modified under the
+%%     conditions of the LaTeX Project Public License, either
+%%     version 1.3c of this license or (at your option) any later
+%%     version. The latest version of this license is in:
+%% 
+%%       http://www.latex-project.org/lppl.txt
+%% 
+%%     and version 1.3 or later is part of all distributions of
+%%     LaTeX version 2005/12/01 or later.
+%% 
+%%     This work has the LPPL maintenance status `maintained'.
+%% 
+%%     The Current Maintainer of this work is Xiangdong Zeng.
+%% 
+%%     This work consists of the files fduthesis.dtx,
+%%                                     fduthesis-doc.dtx,
+%%                                     fduthesis-logo.dtx,
+%%                                     fduthesis-template.tex,
+%%               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,
+%%                                     fduthesis.pdf,
+%%                                     fduthesis-en.pdf,
+%%                                     fduthesis-code.pdf,
+%%                                     latexmkrc,
+%%                                     latexmkrc-en,
+%%                                 and README.md.
+%% 
+\documentclass{standalone}
+\usepackage{fdulogo}
+\begin{document}
+\makeatletter
+\fduthesis at cover
+\makeatother
+\end{document}
+\endinput
+%%
+%% End of file `fduthesis-cover.tex'.


Property changes on: trunk/Master/texmf-dist/doc/latex/fduthesis/fduthesis-cover.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/fduthesis/fduthesis-en.pdf
===================================================================
(Binary files differ)

Index: trunk/Master/texmf-dist/doc/latex/fduthesis/fduthesis-en.pdf
===================================================================
--- trunk/Master/texmf-dist/doc/latex/fduthesis/fduthesis-en.pdf	2018-04-09 21:16:36 UTC (rev 47407)
+++ trunk/Master/texmf-dist/doc/latex/fduthesis/fduthesis-en.pdf	2018-04-09 21:17:26 UTC (rev 47408)

Property changes on: trunk/Master/texmf-dist/doc/latex/fduthesis/fduthesis-en.pdf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/pdf
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/fduthesis/fduthesis-en.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/fduthesis/fduthesis-en.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/fduthesis/fduthesis-en.tex	2018-04-09 21:17:26 UTC (rev 47408)
@@ -0,0 +1,1084 @@
+%%
+%% This is file `fduthesis-en.tex',
+%% generated with Lua script `get-doc-en.lua'.
+%%
+%% The original source files were:
+%%
+%% fduthesis.dtx
+%% 
+%%     Copyright (C) 2017, 2018 by Xiangdong Zeng <xdzeng96 at gmail.com>
+%% 
+%%     This work may be distributed and/or modified under the
+%%     conditions of the LaTeX Project Public License, either
+%%     version 1.3c of this license or (at your option) any later
+%%     version. The latest version of this license is in:
+%% 
+%%       http://www.latex-project.org/lppl.txt
+%% 
+%%     and version 1.3 or later is part of all distributions of
+%%     LaTeX version 2005/12/01 or later.
+%% 
+%%     This work has the LPPL maintenance status `maintained'.
+%% 
+%%     The Current Maintainer of this work is Xiangdong Zeng.
+%% 
+%%     This work consists of the files fduthesis.dtx,
+%%                                     fduthesis-doc.dtx,
+%%                                     fduthesis-logo.dtx,
+%%                                     fduthesis-template.tex,
+%%               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,
+%%                                     fduthesis.pdf,
+%%                                     fduthesis-en.pdf,
+%%                                     fduthesis-code.pdf,
+%%                                     latexmkrc,
+%%                                     latexmkrc-en,
+%%                                 and README.md.
+%% 
+\PassOptionsToPackage{scheme=plain, linespread=1.1}{ctex}
+\documentclass{fdudoc}
+\hypersetup
+  {
+    pdftitle  = {fduthesis: LaTeX Thesis Template for Fudan University},
+    pdfauthor = {Xiangdong Zeng}
+  }
+\ctexset
+  {
+    section = {name = {}, format+ = \raggedright},
+    subsubsection/tocline = {\CTEXnumberline{#1}#2}
+  }
+\pagestyle{headings}
+\renewcommand*\expstar{\hyperlink{expstar}{$\mfrake$}}
+\renewcommand*\rexpstar{\hyperlink{rexpstar}{$\mfrakc$}}
+\newcommand\FSID{{\xeCJKsetup{PunctStyle=banjiao}。}}
+\newcommand\FSFW{{\xeCJKsetup{PunctStyle=banjiao}.}}
+\IndexPrologue{\section{Index}}
+\def\IndexLayout{%
+  \setlength\IndexMin{0.5\textheight}%
+  \ctexset{section/numbering=false}%
+  \StopSpecialIndexModule}
+\def\indexname{Index}
+\let\usage\relax
+
+\title{\textcolor{MaterialIndigo800}{%
+  \textbf{The \textsf{fduthesis} Class \\
+    \LaTeX{} Thesis Template for Fudan University}}}
+\author{Xiangdong Zeng}
+\date{\today \quad v0.7a%
+  \thanks{\url{https://github.com/Stone-Zeng/fduthesis}.}}
+
+\begin{document}
+
+\DeleteShortVerb\"
+
+\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
+
+\newgeometry{
+  left   = 1.75 in,
+  right  = 1.00 in,
+  top    = 1.25 in,
+  bottom = 1.00 in
+}
+
+\section{Introduction}
+
+\cls{fduthesis} is a thesis template for Fudan University.
+This template is mostly written in \LaTeX3 syntax, and
+provides a simple interface for users.
+
+\subsection*{Getting started with \LaTeX{}}
+
+This documentation is \emph{not} a \LaTeX{} tutorial at
+starter's level. If you are totally a newbie, please read some
+introductions like the famous \pkg{lshort}. Of course, there
+are countless \LaTeX{} tutorials on the Internet. You can
+choose whatever you like.
+
+\subsection*{About this documentation}
+
+In this documentation, different typefaces are used to
+represent different contents. Packages and classes are shown
+in sans-serif font, e.g.\ \pkg{xeCJK} package and
+\cls{fduthesis} class. Commands and file names are shown in
+monospaced font, e.g.\ command \cs{fdusetup}, environment
+\env{abstract} and \TeX{} document \file{thesis.tex}.
+Italic-shaped font with angle brackets outside means arguments,
+e.g.\ \meta{English title}. However, you do not need to type
+the brackets when using these commands. The example code has
+proper syntax highlighting so it will be much easier to read.
+
+\LaTeX{} code lines will have a blue line on their left, while
+for command lines there will be a pink line. The options,
+commands and environments in \cls{fduthesis} will be surrounded
+by two horizontal lines. Their usages and descriptions are
+provided at the same time.
+
+The options, commands and environments in \cls{fduthesis} can be
+divided into the following three types:
+\begin{itemize}
+  \item Those can be only used in \emph{Chinese templates} are
+    indicated by \rexptarget\rexpstar{}.
+  \item Those can be only used in \emph{English templates} are
+    indicated by \rexptarget\expstar{}.
+  \item If they do not have special characters afterwards, then
+    you can use them in both Chinese and English templates.
+\end{itemize}
+
+If you want to read the implementation part, please turn to the
+Chinese version. Any issues or feature requests can be submitted
+in the \href{https://github.com/Stone-Zeng/fduthesis/issues}%
+{GitHub repository}.
+
+\section{Installation}
+
+\subsection{Obtaining \cls{fduthesis}}
+
+\subsubsection{Standard installation}
+
+If there are no special reasons, it is always recommended to
+install \cls{fduthesis} with a package manager. For example,
+the following command will install the package in \TeXLive{}
+(administrator permission may be required):
+\begin{shellexample}[gobble=1,morekeywords={tlmgr,install}]
+  tlmgr install fduthesis
+\end{shellexample}
+
+In \TeXLive{} and \MiKTeX{}, you can also install \cls{fduthesis}
+through a graphical interface. It's rather simple and will not be
+described here.
+
+\subsubsection{Install manually}
+
+If you want to download the template from GitHub and install it
+manually, the recommended way is to use the TDS ZIP file:
+\begin{itemize}
+  \item Download the \href{https://github.com/Stone-Zeng/fduthesis/releases/download/v0.7a/fduthesis.tds.zip}%
+    {TDS ZIP file} for \cls{fduthesis};
+  \item Copy all the files in \file{fduthesis.tds.zip} into the
+    local TDS directory of \TeX{} distribution.
+  \item Run \bashcmd{mktexlsr} to update the ls-R database.
+\end{itemize}
+Although not recommended, you may generate the whole template
+from source code as well:
+\begin{itemize}
+  \item Open the project's \href{https://github.com/Stone-Zeng/fduthesis}%
+    {homepage}, click ``Clone or download'' and choose
+    ``Download ZIP'' to download \file{fduthesis-master.zip}.
+    If you have git program on your computer, you can also
+    clone the repository directly:
+    \begin{shellexample}[gobble=5,alsoletter={.},%
+        morekeywords={git,clone}]
+      git clone https://github.com/Stone-Zeng/fduthesis.git
+    \end{shellexample}
+  \item Extract files, and get into the \file{source} directory.
+    Run the following command to generate all the components:
+    \begin{shellexample}[gobble=5,morekeywords={xetex}]
+      xetex fduthesis.dtx
+    \end{shellexample}
+  \item Copy the generated document classes (\file{.cls}),
+    packages (\file{.sty}) and configuration files (\file{.def})
+    into \path{texmf-local/tex/latex/fduthesis/} under the local
+    TDS tree of \TeX{} distribution. Then run \bashcmd{mktexlsr}
+    to update the ls-R database.
+\end{itemize}
+
+\subsubsection{\cls{fduthesis} on the fly}
+
+If you don't want to install \cls{fduthesis} but need to use it
+at once, you can try the installation scripts. Download the
+repository from GitHub, run \file{install-win.bat} (on Windows)
+or \file{install-linux.sh} (on Linux), then all the necessary
+files will be found in the \file{thesis} folder.
+
+\subsection{Composition of the template}
+
+There are several parts in \cls{fduthesis}, including kernel
+template classes, configuration files, affiliated packages and
+user's guides. More details are listed in table~%
+\ref{tab:fduthesis-components}.
+
+\begin{table}[ht]
+  \caption{The main components of \cls{fduthesis}}
+  \label{tab:fduthesis-components}
+  \centering
+  \begin{tabular}{lp{24em}}
+    \toprule
+    \textbf{Files} & \textbf{Descriptions} \\
+    \midrule
+    \file{fduthesis.cls}          & Document class for Chinese thesis. \\
+    \file{fduthesis-en.cls}       & Document class for English thesis.\\
+    \file{fduthesis.def}          & Configuration parameters file
+      for \cls{fduthesis}. Please do \emph{not} modify it. \\
+    \file{fdudoc.cls}             & Document class for user guides. \\
+    \file{fdulogo.sty}            & Fudan University's visual identity. \\
+    \file{README.md}              & The brief introduction. \\
+    \file{fduthesis.pdf}          & User's guide in Chinese. \\
+    \file{fduthesis-en.pdf}       & User's guide in English (this
+      document). \\
+    \file{fduthesis-code.pdf}     & Code implementation. \\
+    \file{fduthesis-template.tex} & An empty thesis template, and you can
+      write your thesis based on it. \\
+    \bottomrule
+  \end{tabular}
+\end{table}
+
+\section{User's guide}
+
+\subsection{Getting started}
+
+Here is a minimal \TeX{} file for \cls{fduthesis}:
+\begin{latexexample}[gobble=1,deletetexcs={\documentclass},%
+    moretexcs={\chapter},morekeywords={\documentclass},%
+    emph={[2]document}]
+  % thesis.tex
+  \documentclass{fduthesis}
+  \begin{document}
+    \chapter{欢迎}
+    \section{Welcome to fduthesis!}
+    你好,\LaTeX{}!
+  \end{document}
+\end{latexexample}
+
+Compile this file under the instructions in subsection~%
+\ref{subsec:compilation}, you will get a 5-page article.
+Of course, most of it will be blank, as you may predicate.
+
+The English version can be used in the same way:
+\begin{latexexample}[gobble=1,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}
+The differences between English and Chinese version only
+live in the main body. Thesis cover, instructors list and
+declaration page are still printed in Chinese.
+
+\subsection{Compilation} \label{subsec:compilation}
+
+\cls{fduthesis} does NOT support \pdfTeX{}. Please use
+\XeLaTeX{} or \LuaLaTeX{} to compile, and \XeLaTeX{} is
+recommended. To get the correct table of contents, footnotes
+and cross-references, you need to compile the source file at
+least twice.
+
+In the following example, suppose your \TeX{} source file is
+\file{thesis.tex}. Please execute the following commands if
+you want to use \XeLaTeX{}:
+\begin{shellexample}[gobble=1,morekeywords={xelatex}]
+  xelatex thesis
+  xelatex thesis
+\end{shellexample}
+You can use \pkg{latexmk} as well:
+\begin{shellexample}[gobble=1,morekeywords={latexmk},emph={-xelatex}]
+  latexmk -xelatex thesis
+\end{shellexample}
+
+\LuaLaTeX{} can be used in a similar way:
+\begin{shellexample}[gobble=1,morekeywords={lualatex}]
+  lualatex thesis
+  lualatex thesis
+\end{shellexample}
+or
+\begin{shellexample}[gobble=1,morekeywords={latexmk},emph={-lualatex}]
+  latexmk -lualatex thesis
+\end{shellexample}
+
+Note that you should not put the profile \file{latexmkrc} in
+your working directory. This file is meant to generate the
+user's guide.
+
+\subsection{Options of the template}
+
+You can specify some \emph{template options} when loading
+\cls{fduthesis}:
+\begin{latexexample}[gobble=1,deletetexcs={\documentclass},%
+    morekeywords={\documentclass}]
+  \documentclass(*\oarg{options}*){fduthesis}
+  \documentclass(*\oarg{options}*){fduthesis-en}
+\end{latexexample}
+
+Some options are \emph{boolean} --- they only take the value
+\opt{true} or \opt{false}. For these options, you can
+abbreviate ``\kvopt{\meta{option}}{true}'' simply to
+``\opt{\meta{option}}''.
+
+\begin{function}[added=2018-02-01]{type}
+  \begin{fdusyntax}[gobble=4,emph={[1]type}]
+    type = (*<doctor|master|(bachelor)>*)
+  \end{fdusyntax}
+  Choose the type of your thesis. The three options represent
+  doctoral dissertation, master degree thesis and undergraduate
+  thesis, respectively.
+\end{function}
+
+\begin{function}{oneside,twoside}
+  Specify whether single or double sided output should be
+  generated. \opt{twoside} will be chosen by default. These
+  option will determine where the new chapters begin and how
+  the headers display. The option \opt{twoside} does
+  \emph{not} tell the printer to actually make a two-sided
+  printout.
+\end{function}
+
+If choosing \opt{twoside}, chapters will begin at the odd pages
+(right hand). However, they will begin at arbitrary pages
+available when choosing \opt{oneside}. Table of contents,
+abstract and the list of symbols are considered as chapters and
+processed in the same way.
+
+At two-sided mode, left headers on the even pages (left hand)
+in \emph{main body} will show the title of chapters, while the
+right headers on the odd pages (right hand) will show the
+title of sections. Headers in \emph{front matter} have the
+same style, but they will only show the title as
+``\textit{Contents}'', ``\textit{Abstract}'', etc.
+
+At one-sided mode, both left and right headers on \emph{all}
+pages in main body will be shown. The text is the title of
+chapters and sections, respectively. In front matter, there
+are only middle headers, which show the corresponding titles.
+
+\begin{function}{draft}
+  \begin{fdusyntax}[gobble=4,emph={[1]draft}]
+    draft = (*<\TFF>*)
+  \end{fdusyntax}
+  Enable draft mode. Default off.
+\end{function}
+
+\opt{draft} is a global option and will affect many packages.
+You may notice the following changes when using \opt{draft}:
+\begin{itemize}
+  \item Lines with overfull \tn{hbox}'s will be marked with
+    a thick black square on the right margin.
+  \item Will not include graphics files actually, but instead
+    print a box of the size the graphic would take up, as well
+    as the file name.
+  \item Will not make hyperlinks and PDF bookmarks.
+  \item Show the page frames.
+\end{itemize}
+
+\begin{function}[added=2018-01-31]{config}
+  \begin{fdusyntax}[gobble=4,emph={[1]config}]
+    config = (*\marg{file}*)
+  \end{fdusyntax}
+  File name of user profile. Default value is empty, so no
+  profile is loaded automatically.
+\end{function}
+
+\subsection{More options}
+
+\begin{function}{\fdusetup}
+  \begin{fdusyntax}[gobble=4,morekeywords={\fdusetup}]
+    \fdusetup(*\marg{key-value list}*)
+  \end{fdusyntax}
+  \cls{fduthesis} has provided a number of options, which
+  can be given via the general command \cs{fdusetup}.
+\end{function}
+
+The argument of \cs{fdusetup} is a set of comma-separated option
+list. The options usually have the form of \kvopt{\meta{key}}%
+{\meta{value}} and in some cases \meta{value} can be omitted.
+For the same option, the values given later will override the
+the previous ones. Default values are indicated in
+\textbf{boldface} in the following descriptions.
+
+\cs{fdusetup} follows \LaTeX3 key-value style, and different
+types as well as various levels options are supported. In the
+key-value list, spaces around ``|=|'' will be trimmed; however,
+blank lines should never appear in the argument.
+
+Similar with template options, ``\kvopt{\meta{option}}{true}''
+can be abbreviated to \opt{\meta{option}} for boolean type.
+
+Some options, such as \opt{style} and \opt{info}, may have
+sub-options. They can be set by the following two equivalent
+methods:
+\begin{latexexample}[gobble=1,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 a Heuristic Viewpoint Concerning the Production
+        and Transformation of Light},
+      author     = {阿尔伯特·爱因斯坦},
+      author*    = {Albert Einstein},
+      department = {物理学系}
+    }
+  }
+\end{latexexample}
+or
+\begin{latexexample}[gobble=1,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 a Heuristic Viewpoint Concerning the Production
+      and Transformation of Light},
+    info/author     = {阿尔伯特·爱因斯坦},
+    info/author*    = {Albert Einstein},
+    info/department = {物理学系}
+  }
+\end{latexexample}
+
+Note that you may \emph{not} put spaces around ``|/|''.
+
+\subsubsection{Style and format} \label{subsubsec:style-and-format}
+
+\begin{function}{style}
+  \begin{fdusyntax}[gobble=4,emph={[1]style}]
+    style = (*\marg{key-value list}*)
+    style/(*\meta{key}*) = (*\meta{value}*)
+  \end{fdusyntax}
+  This general option is for setting the thesis style and format.
+  See the following details.
+\end{function}
+
+\begin{function}[updated=2017-09-23]{style/font}
+  \begin{fdusyntax}[gobble=4,emph={[1]font}]
+    font = (*<libertinus|lm|palatino|(times)|none>*)
+  \end{fdusyntax}
+  Set the western fonts (including math fonts).
+\end{function}
+
+\begin{function}[rEXP,updated=2017-09-23]{style/cjk-font}
+  \begin{fdusyntax}[gobble=4,emph={[1]cjk-font}]
+    cjk-font = (*<adobe|(fandol)|founder|mac|windows|none>*)
+  \end{fdusyntax}
+  Set CJK (Chinese, Japanese and Korean) fonts.
+\end{function}
+
+When you choose \kvopt{font}{none} or \kvopt{cjk-font}{none},
+\cls{fduthesis} will disable the default western/CJK font
+settings. You may use \cs{setmainfont}, \cs{setCJKmainfont}
+and \cs{set\-math\-font}, etc.\ to configure the fonts manually.
+
+\begin{function}{style/font-size}
+  \begin{fdusyntax}[gobble=4,emph={[1]font-size}]
+    font-size = (*<(-4)|5>*)
+  \end{fdusyntax}
+  Specify the basic font size in your thesis.
+\end{function}
+
+\begin{function}[rEXP,updated=2017-10-14]{style/fullwidth-stop}
+  \begin{fdusyntax}[gobble=4,emph={[1]fullwidth-stop}]
+    fullwidth-stop = (*<catcode|mapping|(false)>*)
+  \end{fdusyntax}
+  Let full-width full stop ``\FSFW'' as the default full stop.
+  Generally, this punctuation is used for scientific articles,
+  where ``\FSID'' is easily to be confused with subscript
+  ``$_o$'' or ``$_0$''.
+\end{function}
+
+If you choose \kvopt{fullwidth-stop}{catcode}, only
+\emph{explicit} ``\FSID'' will be replaced by ``\FSFW''; when
+choosing \kvopt{fullwidth-stop}{mapping}, however, \emph{all}
+the ``\FSID'' will be replaced.
+
+\opt{mapping} is valid only under \XeTeX{}. When compiling
+with \LuaTeX{}, it is equivalent to \opt{catcode}.
+
+If you want to display ``\FSID'' temporarily after setting
+\kvopt{fullwidth-stop}{mapping}, the following code snippet
+will be helpful:
+\begin{latexexample}[gobble=1,moretexcs={\CJKfontspec},emph={[1]Mapping}]
+  % Compiled with XeTeX
+  % The outside braces is used for group
+  这是一个句号{\CJKfontspec{(*\meta{font name}*)}[Mapping=full-stop]。}
+\end{latexexample}
+
+\begin{function}{style/footnote-style}
+  \begin{fdusyntax}[gobble=4,emph={[1]footnote-style}]
+    footnote-style = (*<plain|\\
+      XXXX\mbox{}~~~~~~~~~~~~~~~~~libertinus|libertinus*|libertinus-sans|\\
+      XXXX\mbox{}~~~~~~~~~~~~~~~~~pifont|pifont*|pifont-sans|pifont-sans*|\\
+      XXXX\mbox{}~~~~~~~~~~~~~~~~~xits|xits-sans|xits-sans*>*)
+  \end{fdusyntax}
+  Set the style of footnote numbers. Note that western fonts
+  will affect its default value (see table~\ref{tab:footnote-font}),
+  so you may put it after |font| option. The one with |sans|
+  is for the corresponding sans-serif version, while |*|
+  for white on black version.
+\end{function}
+
+\begin{table}[ht]
+  \caption{Relationship between option \opt{font} and the
+    default value of \opt{footnote-style}}
+  \label{tab:footnote-font}
+  \centering
+  \begin{tabular}{ccccc}
+    \toprule
+    \textbf{Western fonts settings} &
+      |libertinus| & |lm|     & |palatino| & |times| \\
+    \midrule
+    \textbf{Default value of footnote number style} &
+      |libertinus| & |pifont| & |pifont|   & |xits|  \\
+    \bottomrule
+  \end{tabular}
+\end{table}
+
+\begin{function}[added=2017-08-13]{style/hyperlink}
+  \begin{fdusyntax}[gobble=4,emph={[1]hyperlink}]
+    hyperlink = (*<border|(color)|none>*)
+  \end{fdusyntax}
+  Set the style of hyperlinks. \opt{border} draws borders around
+  hyperlinks; \opt{color} displays hyperlinks in colorful text;
+  \opt{none} leads to plain text, which is useful when printing
+  the final document.
+\end{function}
+
+\begin{function}[added=2017-08-13,updated=2017-12-08]{style/hyperlink-color}
+  \begin{fdusyntax}[gobble=4,emph={[1]hyperlink-color}]
+    hyperlink-color = (*<(default)|classic|elegant|fantasy|material|\\
+      XXXX\mbox{}~~~~~~~~~~~~~~~~~~business|science|summer|autumn|graylevel|prl>*)
+  \end{fdusyntax}
+  Set the color of hyperlinks. It is invalid if
+  \kvopt{hyperlink}{none}. The related colors can be found
+  in table~\ref{tab:hyperlink-color}.
+\end{function}
+
+\begin{table}[ht]
+\centering
+\newcommand\linkcolorexam[3]{%
+  {\small Fig.~\textcolor[HTML]{#1}{1-2},
+    Eq.~(\textcolor[HTML]{#1}{3.4})} &
+  {\small \textcolor[HTML]{#2}{\texttt{http://g.cn}}} &
+  {\small Ref.~[\textcolor[HTML]{#3}{1}],
+    (\textcolor[HTML]{#3}{Knuth~1986})}}
+\begin{threeparttable}
+\caption{Pre-defined hyperlink color schemes}
+\label{tab:hyperlink-color}
+\begin{tabular}{c*{3}{>{\hspace{0.2cm}}c<{\hspace{0.2cm}}}}
+  \toprule
+  \textsf{Options} & \textsf{Cross references} & \textsf{URL} & \textsf{Citation} \\
+  \midrule
+  \opt{default}            & \linkcolorexam{990000}{0000B2}{007F00} \\
+  \opt{classic}            & \linkcolorexam{FF0000}{0000FF}{00FF00} \\
+  \opt{elegant}\tnote{a}   & \linkcolorexam{961212}{C31818}{9B764F} \\
+  \opt{fantasy}\tnote{b}   & \linkcolorexam{FF4A19}{FF3F94}{934BA1} \\
+  \opt{material}\tnote{c}  & \linkcolorexam{E91E63}{009688}{4CAF50} \\
+  \opt{business}\tnote{d}  & \linkcolorexam{D14542}{295497}{1F6E43} \\
+  \opt{science}\tnote{e}   & \linkcolorexam{CA0619}{389F9D}{FF8920} \\
+  \opt{summer}\tnote{f}    & \linkcolorexam{00AFAF}{5F5FAF}{5F8700} \\
+  \opt{autumn}\tnote{f}    & \linkcolorexam{D70000}{D75F00}{AF8700} \\
+  \opt{graylevel}\tnote{c} & \linkcolorexam{616161}{616161}{616161} \\
+  \opt{prl}\tnote{g}       & \linkcolorexam{2D3092}{2D3092}{2D3092} \\
+  \bottomrule
+\end{tabular}
+\begin{tablenotes}
+  \item[a] From \href{https://tex.stackexchange.com/}%
+    {\TeX{} - \LaTeX{} Stack Exchange}.
+  \item[b] Adobe CC.
+  \item[c] Material Design color palette
+    (See \url{https://material.io/guidelines/style/color.html}).
+  \item[d] Microsoft Office 2016.
+  \item[e] From \href{https://www.wolfram.com/}{Wolfram Research website}.
+  \item[f] Solarized color palette
+    (See \url{http://ethanschoonover.com/solarized}).
+  \item[g] \textit{Physical Review Letter} magazine.
+\end{tablenotes}
+\end{threeparttable}
+\end{table}
+
+\begin{function}[added=2018-01-25]{style/bib-backend}
+  \begin{fdusyntax}[gobble=4,emph={[1]bib-backend}]
+    bib-backend = (*<bibtex|biblatex>*)
+  \end{fdusyntax}
+  Specify the backend or driver of bibliography processing.
+  \BibTeX{} and \pkg{natbib} package will be used if you choose
+  \opt{bibtex}, while \biber{} and \pkg{biblatex} will be used
+  if you choose \opt{biblatex}.
+\end{function}
+
+\begin{function}[added=2017-10-28,updated=2018-01-25]%
+    {style/bib-style}
+  \begin{fdusyntax}[gobble=4,emph={[1]bib-style}]
+    bib-style = (*<author-year|(numerical)|\meta{other style}>*)
+  \end{fdusyntax}
+  Set the style of bibliography. \opt{author-year} and
+  \opt{numerical} will follow the standard GB/T 7714--2015.
+  By setting \kvopt{bib-style}{\meta{other style}}, you can use
+  other bibliography style (\file{.bst} file for
+  \kvopt{bib-backend}{bibtex} and \file{.bbx} file for
+  \kvopt{bib-backend}{biblatex}). Suffix is not needed.
+\end{function}
+
+\begin{function}[added=2018-01-25]{style/cite-style}
+  \begin{fdusyntax}[gobble=4,emph={[1]cite-style}]
+    cite-style = (*\marg{style}*)
+  \end{fdusyntax}
+  Select citation style. Default value is empty, which means
+  the citation style will follow your bibliography style
+  (author-year or numeric). If you want change the citation
+  style, the corresponding \file{.cbx} file must be available.
+  This option is invalid when \kvopt{bib-backend}{bibtex}.
+\end{function}
+
+\begin{function}[added=2018-01-25]{style/bib-resource}
+  \begin{fdusyntax}[gobble=4,emph={[1]bib-resource}]
+    bib-resource = (*\marg{bib file(s)}*)
+  \end{fdusyntax}
+  Specify the bibliography database (usually in \file{.bib}
+  format). If using more than one files, the file names should
+  be separated with comma. When \kvopt{bib-backend}{biblatex},
+  you must type in the ``\file{.bib}'' suffix.
+\end{function}
+
+\begin{function}[added=2017-08-10]{style/logo}
+  \begin{fdusyntax}[gobble=4,emph={[1]logo}]
+    logo = (*\marg{file}*)
+  \end{fdusyntax}
+  File name of the logo in thesis cover. Default value is
+  \file{fudan-name.pdf}.
+\end{function}
+
+\begin{function}[added=2017-08-10]{style/logo-size}
+  \begin{fdusyntax}[gobble=4,emph={[1]logo-size}]
+    logo-size = (*\marg{width}*)
+    logo-size = {(*\meta{width}*), (*\meta{height}*)}
+  \end{fdusyntax}
+  Size of the logo. By default, only width is set to
+  |0.5\textwidth|. To set height only, you can put an
+  empty group ``|{}|'' at \meta{width}.
+\end{function}
+
+\begin{function}[added=2017-07-06]{style/auto-make-cover}
+  \begin{fdusyntax}[gobble=4,emph={[1]auto-make-cover}]
+    auto-make-cover = (*<\TTF>*)
+  \end{fdusyntax}
+  Whether generate thesis cover, list of instructors (inside
+  front cover) and declaration page (inside back cover)
+  automatically. Entries in the cover can be specified also
+  via \cs{fdusetup}, and you can find more details in
+  subsubsection~\ref{subsubsec:information}.
+\end{function}
+
+\begin{function}{\makecoveri,\makecoverii,\makecoveriii}
+  For generating thesis cover, list of instructors and
+  declaration page manually. These commands cannot ensure
+  the correct page numbers, hence you should always use the
+  auto-generated thesis cover unless necessary.
+\end{function}
+
+\subsubsection{Personal information} \label{subsubsec:information}
+
+\begin{function}{info}
+  \begin{fdusyntax}[gobble=4,emph={[1]info}]
+    info = (*\marg{key-value list}*)
+    info/(*\meta{key}*) = (*\meta{value}*)
+  \end{fdusyntax}
+  This general option is for entering your personal information.
+  See the following details. Note that options with ``|*|'' are
+  the corresponding English items.
+\end{function}
+
+\begin{function}[added=2018-02-01]{info/degree}
+  \begin{fdusyntax}[gobble=4,emph={[1]degree}]
+    degree = (*<(academic)|professional>*)
+  \end{fdusyntax}
+  Degree type. This option can only be used in master degree
+  thesis.
+\end{function}
+
+\begin{function}{info/title,info/title*}
+  \begin{fdusyntax}[gobble=4,emph={[1]title,title*}]
+    title  = (*\marg{title in Chinese}*)
+    title* = (*\marg{title in English}*)
+  \end{fdusyntax}
+  Title of your thesis. The line width is about \SI{30}{em} by
+  default, but you may break it with |\\| manually.
+\end{function}
+
+\begin{function}{info/author,info/author*}
+  \begin{fdusyntax}[gobble=4,emph={[1]author,author*}]
+    author  = (*\marg{name in Chinese}*)
+    author* = (*\marg{name in English \lparen or Pinyin\rparen}*)
+  \end{fdusyntax}
+  Author's name.
+\end{function}
+
+\begin{function}{info/supervisor}
+  \begin{fdusyntax}[gobble=4,emph={[1]supervisor}]
+    supervisor = (*\marg{name}*)
+  \end{fdusyntax}
+  Supervisor's name.
+\end{function}
+
+\begin{function}{info/department}
+  \begin{fdusyntax}[gobble=4,emph={[1]department}]
+    department = (*\marg{name}*)
+  \end{fdusyntax}
+  Name of the department.
+\end{function}
+
+\begin{function}{info/major}
+  \begin{fdusyntax}[gobble=4,emph={[1]major}]
+    major = (*\marg{name}*)
+  \end{fdusyntax}
+  Name of the major.
+\end{function}
+
+\begin{function}{info/student-id}
+  \begin{fdusyntax}[gobble=4,emph={[1]student-id}]
+    student-id = (*\marg{number}*)
+  \end{fdusyntax}
+  Author's student ID.
+\end{function}
+
+In Fudan University, student ID has 11 digits. The first two
+are the year of attendance; next one represents the student's
+type (1 for doctor, 2 for master and 3 for bachelor); the
+following five digits are major ID while the last three are
+serial number.
+
+\begin{function}{info/school-id}
+  \begin{fdusyntax}[gobble=4,emph={[1]school-id}]
+    school-id = (*\marg{number}*)
+  \end{fdusyntax}
+  School ID. Default value is 10246 (school ID of Fudan University).
+\end{function}
+
+\begin{function}{info/date}
+  \begin{fdusyntax}[gobble=4,emph={[1]date}]
+    date = (*\marg{date}*)
+  \end{fdusyntax}
+  Finish date of your thesis. Default value is the compilation
+  date (\tn{today}).
+\end{function}
+
+\begin{function}[added=2017-07-04]{info/secret-level}
+  \begin{fdusyntax}[gobble=4,emph={[1]secret-level}]
+    secret-level = (*<(none)|i|ii|iii>*)
+  \end{fdusyntax}
+  Secret level. \opt{i}, \opt{ii} and \opt{iii} means
+  ``秘密'' (secret), ``机密'' (confidential) and ``绝密''
+  (top secret) respectively. \opt{none} means your thesis is
+  not secret-related and secret level and year will not be
+  shown.
+\end{function}
+
+\begin{function}[added=2017-07-04]{info/secret-year}
+  \begin{fdusyntax}[gobble=4,emph={[1]secret-year}]
+    secret-year = (*\marg{year}*)
+  \end{fdusyntax}
+  Secret year. It's recommended to use Chinese word as ``五年''
+  (5 years) here. This option is invalid if you have set
+  \kvopt{secret-level}{none}.
+\end{function}
+
+\begin{function}{info/instructors}
+  \begin{fdusyntax}[gobble=4,emph={[1]instructors}]
+    instructors = (*\marg{member 1, member 2, ...}*)
+  \end{fdusyntax}
+  Instructors' name. Each name should be separated with
+  comma. To disambiguate, you may put text containing comma
+  into a group ``|{...}|''.
+\end{function}
+
+\begin{function}{info/keywords,info/keywords*}
+  \begin{fdusyntax}[gobble=4,emph={[1]keywords,keywords*}]
+    keywords  = (*\marg{keywords in Chinese}*)
+    keywords* = (*\marg{keywords in English}*)
+  \end{fdusyntax}
+  Keywords list. Each keyword should be separated with comma.
+  To disambiguate, you may put text containing comma into a
+  group ``|{...}|''.
+\end{function}
+
+\begin{function}{info/clc}
+  \begin{fdusyntax}[gobble=4,emph={[1]clc}]
+    clc = (*\marg{classification codes}*)
+  \end{fdusyntax}
+  Chinese Library Classification (CLC).
+\end{function}
+
+\subsection{Writing your thesis}
+
+\subsubsection{Front matter}
+
+\begin{function}{\frontmatter}
+  Declare the beginning of front matter.
+\end{function}
+
+Front matter contains table of contents, abstracts and notation
+list. The page numbers in front matter will be shown in
+lowercase Roman numerals, and will be counted separately with
+main matter.
+
+\begin{function}{\tableofcontents}
+  Generate the table of contents (TOC). You need to compile
+  the source file at least \emph{twice} to get the correct TOC.
+\end{function}
+
+\begin{function}{abstract}
+  \begin{fdusyntax}[gobble=4,emph={[2]abstract}]
+    % fduthesis (Chinese thesis)    % fduthesis-en (English thesis)
+    \begin{abstract}                \begin{abstract}
+      (*\meta{Chinese abstract} \hspace{3cm} \meta{English abstract}*)
+    \end{abstract}                  \end{abstract}
+  \end{fdusyntax}
+\end{function}
+\begin{function}[rEXP]{abstract*}
+  \begin{fdusyntax}[gobble=4,emph={[2]abstract*}]
+    % Only for fduthesis
+    \begin{abstract*}
+      (*\meta{English abstract}*)
+    \end{abstract*}
+  \end{fdusyntax}
+  Abstract environment. In \cls{fduthesis}, \env{abstract} and
+  \env{abstract*} are used for Chinese and English abstract,
+  respectively; while in \cls{fduthesis-en}, there is no
+  \env{abstract*} environment and you need to write the English
+  abstract merely.
+\end{function}
+
+At the end of abstract (both Chinese and English, if available),
+keywords list and CLC number will be shown. They can be
+specified via command \cs{fdusetup} and you may refer to
+subsubsection~\ref{subsubsec:information} for more details.
+
+\begin{function}{notation}
+  \begin{fdusyntax}[gobble=4,emph={[2]notation}]
+    \begin{notation}(*\oarg{column format}*)
+      (*\meta{symbol 1}*)  &  (*\meta{description}*)  \\
+      (*\meta{symbol 2}*)  &  (*\meta{description}*)  \\
+      (*\phantom{\meta{symbol $n$}}*)  (*$\vdots$*)
+      (*\meta{symbol \kern-0.1em$n$}*)  &  (*\meta{description}*)
+    \end{notation}
+  \end{fdusyntax}
+  Notation list (or symbol list, nomenclature) environment.
+  The optional argument \meta{column format} is the same as
+  in a standard \LaTeX{} table. The default value is
+  ``|lp{7.5cm}|'', which means auto-width for the first column
+  and fix-width (\SI{7.5}{cm}) for the second; both columns will
+  be left-aligned.
+\end{function}
+
+\subsubsection{Main matter}
+
+\begin{function}{\mainmatter}
+  Declare the beginning of main matter.
+\end{function}
+
+As the name suggests, ``main matter'' is the main body of your
+thesis. When working on a big projects, it's usually a good
+idea to split the source file into several parts. The page
+numbers in main matter are shown in arabic numerals.
+
+\begin{function}[updated=2018-01-15]{\footnote}
+  \begin{fdusyntax}[gobble=4,deletetexcs={\footnote},%
+      morekeywords={\footnote}]
+    \footnote(*\marg{text}*)
+  \end{fdusyntax}
+  Insert a footnote. The style of footnote numbers can be set
+  with option \opt{style/foot\-note\-style}. See subsubsection~%
+  \ref{subsubsec:style-and-format} for more details.
+\end{function}
+
+\begin{function}{axiom,corollary,definition,example,lemma,
+  proof,theorem}
+  \begin{fdusyntax}[gobble=4,emph={[2]proof}]
+    \begin{proof}(*\oarg{subheading}*)
+      (*\meta{procedure of proof}*)
+    \end{proof}
+  \end{fdusyntax}
+  A series of pre-defined math environments.
+\end{function}
+
+A QED\footnote{Abbreviation of Latin phrase \emph{quod erat
+  demonstrandum}, means ``what was to be demonstrated''.}
+symbol ``$\QED$'' will be added at the end of \env{proof}
+environment. You need to compile the source file \emph{twice}
+as in subsection~\ref{subsec:compilation} in order to make
+the position of QED symbol correct.
+
+\begin{function}[updated=2017-12-12]{\newtheorem}
+  \begin{fdusyntax}[gobble=4,deletetexcs={\newtheorem},
+      morekeywords={\newtheorem,\newtheorem*}]
+    \newtheorem(*\oarg{options}\marg{environment}\marg{title}*)
+    \newtheorem*(*\oarg{options}\marg{environment}\marg{title}*)
+    \begin(*\marg{environment}\oarg{subheading}*)
+      (*\meta{contents}*)
+    \end(*\marg{environment}*)
+  \end{fdusyntax}
+  Declare new math environments (theorems). If you use
+  \cs{newtheorem*}, then the theorem will not be numbered, and
+  a QED symbol ``$\QED$'' will be added at the end of the
+  environment. All the theorem environments defined by yourself
+  can be used as the pre-defined ones.
+\end{function}
+
+Actually, the pre-defined math environments are just defined
+with \cs{newtheorem} and \cs{newtheorem*}:
+\begin{latexexample}[gobble=1,deletetexcs={\newtheorem},
+    morekeywords={\newtheorem,\newtheorem*}]
+  \newtheorem*{proof}{proof}
+  \newtheorem{axiom}{axiom}
+  \newtheorem{corollary}{corollary}
+  ...
+\end{latexexample}
+
+Similar with \cs{fdusetup}, the optional argument \meta{options}
+of \cs{newtheorem} is a key-value list as well. The available
+are described below. Note that you don't need to type in the
+``|theorem/|'' prefix.
+
+\begin{function}{theorem/style}
+  \begin{fdusyntax}[gobble=4,emph={[1]style}]
+    style = (*<(plain)|margin|change|\\
+      XXXX\mbox{}~~~~~~~~break|marginbreak|changebreak>*)
+  \end{fdusyntax}
+  The overall style of the theorem environment.
+\end{function}
+
+\begin{function}{theorem/header-font}
+  \begin{fdusyntax}[gobble=4,emph={[1]header-font}]
+    header-font = (*\marg{font}*)
+  \end{fdusyntax}
+  Font of the theorem header. Default value is \tn{sffamily}
+  and |\bfseries\upshape| for Chinese and English template,
+  respectively.
+\end{function}
+
+\begin{function}{theorem/body-font}
+  \begin{fdusyntax}[gobble=4,emph={[1]body-font}]
+    body-font = (*\marg{font}*)
+  \end{fdusyntax}
+  Font of the theorem body. Default value is \tn{fdu at kai}
+  (\textit{楷体}) and \tn{itshape} for Chinese and English
+  template, respectively.
+\end{function}
+
+\begin{function}{theorem/qed}
+  \begin{fdusyntax}[gobble=4,emph={[1]qed}]
+    qed = (*\marg{symbol}*)
+  \end{fdusyntax}
+  Theorem end mark. For \cs{newtheorem}, default value is
+  empty; for \cs{newtheorem*}, default value is
+  |\ensuremath{\QED}| (i.e.\ ``$\QED$'').
+\end{function}
+
+\begin{function}{theorem/counter}
+  \begin{fdusyntax}[gobble=4,emph={[1]counter}]
+    counter = (*\marg{counter}*)
+  \end{fdusyntax}
+  The theorem will be enumerated within \meta{counter}. For
+  example, the default value is |chapter|, which means with
+  each new \tn{chapter}, the enumeration begins again with 1.
+  This option is invalid for \cs{newtheorem*}.
+\end{function}
+
+\begin{function}{\caption}
+  \begin{fdusyntax}[gobble=4,deletetexcs={\caption},morekeywords={\caption}]
+    \caption(*\marg{caption}*)
+    \caption(*\oarg{short caption}\marg{long caption}*)
+  \end{fdusyntax}
+  Insert the caption of figure or table. The optional argument
+  \meta{short caption} will be shown in the list of figures/tables.
+  In \meta{long caption}, you can write descriptions for several
+  paragraphs, but \meta{short caption} and the single
+  \meta{caption} will not allow multi-paragraph text (i.e.\
+  text containing \tn{par}) inside.
+\end{function}
+
+By convention, caption of a table is usually put \emph{before}
+the table itself, while for figure it's the opposite.
+In addition, command \tn{caption} must be put inside float
+environments (e.g.\ \env{table} and \env{figure}).
+
+\subsubsection{Back matter}
+
+\begin{function}{\backmatter}
+  Declare the beginning of back matter.
+\end{function}
+
+Back matter contains bibliography, declaration page, etc.
+
+\begin{function}[updated=2018-01-25]{\printbibliography}
+  \begin{fdusyntax}[gobble=4,morekeywords={\printbibliography}]
+    \printbibliography(*\oarg{options}*)
+  \end{fdusyntax}
+  Print the bibliography. When \kvopt{bib-backend}{bibtex}, then
+  \meta{options} is invalid and this command is equivalent to
+  \tn{bibliography} \texttt{\marg{bib files}}, where
+  \meta{bib files} should be specified with option
+  \opt{style/bib-resource} (see subsubsection~%
+  \ref{subsubsec:style-and-format}). When \kvopt{bib-backend}%
+  {bibtex}, then \tn{printbibliography} is provided by
+  \pkg{biblatex} and the available options can be found in its
+  documentation.
+\end{function}
+
+\section{Packages dependencies}
+
+Different compilation methods and options will result in a
+different packages dependency. Details are as follows:
+\begin{itemize}
+  \item In any case, \cls{fduthesis} will load the following
+    packages \emph{explicitly}:
+    \begin{itemize}
+      \item \pkg{expl3}, \pkg{xparse}, \pkg{xtemplate} and
+        \pkg{l3keys2e}, belong to \pkg{l3kernel} and
+        \pkg{l3packages} bundles
+      \item \cls{ctexbook}, belongs to \CTeX{} bundle
+      \item \pkg{amsmath}, belongs to \AmSLaTeX{} bundle
+      \item \pkg{unicode-math}
+      \item \pkg{geometry}
+      \item \pkg{fancyhdr}
+      \item \pkg{footmisc}
+      \item \pkg{ntheorem}
+      \item \pkg{graphicx}
+      \item \pkg{longtable}
+      \item \pkg{caption}
+      \item \pkg{natbib}
+      \item \pkg{xcolor}
+      \item \pkg{hyperref}
+    \end{itemize}
+  \item When chosen \kvopt{style/footnote-style}{pifont},
+    package \pkg{pifont} will be loaded. It belongs to
+    \pkg{psnfss} bundle.
+  \item When chosen \kvopt{style/bib-backend}{bibtex},
+    package \pkg{natbib} will be loaded. Meanwhile, program
+    \BibTeX{} will be required for compilation. The
+    bibliography style is provided by \pkg{gbt7714}.
+  \item When chosen \kvopt{style/bib-backend}{biblatex},
+    package \pkg{biblatex} will be loaded. Program \biber{}
+    will be required then. The bibliography style is provided
+    by \pkg{biblatex-gb7714-2015}.
+\end{itemize}
+
+Only the packages loaded directly by \cls{fduthesis} are listed
+here. If you need to know the dependencies of the packages
+themselves, please refer to the corresponding manuals.
+
+\end{document}


Property changes on: trunk/Master/texmf-dist/doc/latex/fduthesis/fduthesis-en.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/fduthesis/fduthesis-template.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/fduthesis/fduthesis-template.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/fduthesis/fduthesis-template.tex	2018-04-09 21:17:26 UTC (rev 47408)
@@ -0,0 +1,259 @@
+% \iffalse meta-comment
+%
+% Copyright (C) 2017, 2018 by Xiangdong Zeng <xdzeng96 at gmail.com>
+%
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either
+% version 1.3c of this license or (at your option) any later
+% version. The latest version of this license is in:
+%
+%   http://www.latex-project.org/lppl.txt
+%
+% and version 1.3 or later is part of all distributions of
+% LaTeX version 2005/12/01 or later.
+%
+% This work has the LPPL maintenance status `maintained'.
+%
+% The Current Maintainer of this work is Xiangdong Zeng.
+%
+% \fi
+
+%>********************************************************************
+%> 重要提示:
+%>   1. 请确保使用 UTF-8 编码保存
+%>   2. 请使用 XeLaTeX 或 LuaLaTeX 编译
+%>   3. 请仔细阅读用户文档
+%>   4. 修改、使用、发布本文档请务必遵循 LaTeX Project Public License
+%>   5. 不需要的注释可以尽情删除
+%>********************************************************************
+
+\documentclass{fduthesis}
+%> 模板选项:
+%>   type = doctor|master|bachelor  论文类型,默认为本科论文
+%>   oneside|twoside                论文的单双面模式,默认为 twoside
+%>   draft = true|false             是否开启草稿模式,默认关闭
+%> 带选项的用法示例:
+%>   \documentclass[oneside]{fduthesis}
+%>   \documentclass[twoside, draft=true]{fduthesis}
+%>   \documentclass[type=bavhelor, twoside, draft=true]{fduthesis}
+
+\fdusetup{
+  %> 参数设置
+  %> 允许采用两种方式设置选项:
+  %>   1. style/... = ...
+  %>   2. style = { ... = ... }
+  %> 注意事项:
+  %>   1. 不要出现空行
+  %>   2. “=” 两侧的空格【会】被忽略
+  %>   3. “/” 两侧的空格【不会】被忽略
+  %>   4. 请使用英文逗号 “,” 分隔选项
+  %
+  %> style 类用于设置论文格式
+  style = {
+    % font = times,
+    %> 西文字体(包括数学字体)
+    %> 允许选项:
+    %>   font = libertinus|lm|palatino|times|none
+    %
+    % cjk-font = fandol,
+    %> 中文字体
+    %> 允许选项:
+    %>   cjk-font = adobe|fandol|founder|mac|windows|none
+    %
+    %> 注意:
+    %>   1. 中文字体设置高度依赖于系统。各系统建议方案:
+    %>        windows:cjk-font = windows
+    %>        mac:    cjk-font = mac
+    %>        linux:  cjk-font = fandol(默认值)
+    %>   2. 除 fandol 外,其余字体均为商用字体,请注意版权问题
+    %>   3. 但 fandol 字体缺字比较严重
+    %>   4. 这里中西文字体设置均注释掉了,即使用默认设置:
+    %>        font     = times
+    %>        cjk-font = fandol
+    %>   5. 使用 font = none / cjk-font = none 关闭默认字体设置,需手动进行配置
+    %
+    font-size = 5,
+    %> 字号
+    %> 允许选项:
+    %>   font-size = -4|5
+    %
+    fullwidth-stop = catcode,
+    %> 是否把全角实心句点 “.” 作为默认的句号形状
+    %> 允许选项:
+    %>   fullwidth-stop = catcode|mapping|false
+    %> 解释:
+    %>   catcode  【显式】的 “。” 会被替换为 “.”(e.g. 不包括用宏定义保存的 “。”)
+    %>   mapping  【所有】的 “。” 会被替换为 “.”(使用 LuaLaTeX 编译则无效)
+    %>   false     不进行替换
+    %
+    % footnote-style = pifont,
+    %> 脚注编号样式
+    %> 允许选项:
+    %>   footnote-style = plain|libertinus|libertinus*|libertinus-sans|
+    %>                    pifont|pifont*|pifont-sans|pifont-sans*|
+    %>                    xits|xits-sans|xits-sans*
+    %
+    % hyperlink = color,
+    %> 超链接样式
+    %> 允许选项:
+    %>   hyperlink = border|color|none
+    %
+    % hyperlink-color = default,
+    %> 超链接颜色
+    %> 允许选项:
+    %> hyperlink-color = default|classic|elegant|fantasy|material|
+    %>                   business|science|summer|autumn|graylevel|prl
+    %
+    logo = {../logo/pdf/fudan-name-black.pdf},
+    % logo = {fudan-name.pdf},             %> 图片与本文件放在同一目录
+    % logo = {figure/fudan-name.pdf},      %> 图片放在 figure/ 目录
+    %> 封面中的校名图片
+    %
+    % logo-size = {0.5\textwidth},      %> 只设置宽度
+    % logo-size = {{}, 3cm},            %> 只设置高度
+    % logo-size = {8cm, 3cm},           %> 设置宽度和高度
+    %> 设置校名图片的大小
+    %> 通常不需要调整
+    %
+    % auto-make-cover = true
+    %> 是否自动生成论文封面(封一)、指导小组成员名单(封二)和声明页(封三)
+    %> 除非特殊需要(e.g. 不要封面),否则不建议设为 false
+  },
+  %
+  %> info 类用于录入论文信息
+  info = {
+    title = {论文标题},
+    %> 中文标题
+    %> 长标题建议使用 “\\” 命令手动换行(不是指在源文件里输入回车符,当然
+    %> 源文件里适当的换行可以有助于代码清晰):
+    %>   title = {最高人民法院、最高人民检察院关于适用\\
+    %>            犯罪嫌疑人、被告人逃匿、死亡案件违法所得\\
+    %>            没收程序若干问题的规定},
+    %
+    title* = {Thesis Title},
+    %> 英文标题
+    %
+    author = {你的名字},
+    %> 作者姓名
+    %
+    % author* = {Your name},
+    %> 作者姓名(英文 / 拼音)
+    %> 目前不需要填写
+    %
+    supervisor = {某某某\quad 教授},
+    %> 导师
+    %> 姓名与职称之间可以用 \quad 打印一个空格
+    %
+    major = {物理学},
+    %> 专业
+    %
+    department = {物理系},
+    %> 院系
+    %
+    student-id = {12300000000},
+    %> 作者学号
+    %
+    % date = {2018 年 1 月 1 日},
+    %> 日期
+    %> 注释掉表示使用编译日期
+    %
+    % secret-level = ii,
+    %> 密级
+    %> 允许选项:
+    %>   secret-level = none|i|ii|iii
+    %> 解释:
+    %>   none  不显示密级与保密年限
+    %>   i     秘密
+    %>   ii    机密
+    %>   iii   绝密
+    %
+    % secret-year = {五年},
+    %> 保密年限
+    %> secret-level = none 时该选项无效
+    %
+    instructors = {
+      {张\quad 三 \quad 工程师},
+      {李\quad 四 \quad 工程师},
+      {王五六     \quad 讲\quad 师}
+    },
+    %> 指导小组成员
+    %> 使用英文逗号 “,” 分隔
+    %> 如有需要,可以用 \quad 手工对齐
+    %
+    keywords = {不确定关系, 量子力学, 理论物理},
+    %> 中文关键字
+    %> 使用英文逗号 “,” 分隔
+    %
+    keywords* = {Uncertainty principle, quantum mechanics, theoretical physics},
+    %> 英文关键字
+    %> 使用英文逗号 “,” 分隔
+    %
+    clc = {O413.1}
+    %> 中图分类号
+  }
+}
+
+\begin{document}
+
+% \raggedbottom
+%> 这个命令用来关闭版心底部强制对齐,可以减少不必要的 underfull \vbox 提示,但会影响排版效果
+
+\frontmatter
+%> 前置部分包含目录、中英文摘要以及符号表等
+
+\tableofcontents
+%> 目录
+
+\begin{abstract}
+  中文摘要
+\end{abstract}
+
+\begin{abstract*}
+  English abstract
+\end{abstract*}
+
+\begin{notation}
+  $x$                          & 坐标        \\
+  $p$                          & 动量        \\
+  $\psi(x)$                    & 波函数      \\
+  $\langle x |$                & 左矢(bra) \\
+  $| x \rangle$                & 右矢(ket) \\
+  $\langle\alpha|\beta\rangle$ & 内积        \\
+\end{notation}
+%> 符号表
+%> 语法与 LaTeX 表格一致:列用 & 区分,行用 \\ 区分
+%> 如需修改格式,可以使用可选参数:
+%>   \begin{notation}[ll]
+%>     $x$ & 坐标 \\
+%>     $p$ & 动量
+%>   \end{notation}
+%> 可选参数与 LaTeX 标准表格的列格式说明语法一致
+%> 这里的 “ll” 表示两列均为自动宽度,并且左对齐
+
+\mainmatter
+%> 主体部分是论文的核心
+%> 建议采用多文件编译的方式
+%> 比较好的做法是把每一章放进一个单独的 tex 文件里,并在这里用 \include 导入,例如
+%>   \include{chapter1}
+%>   \include{chapter2}
+%>   \include{chapter3}
+
+\chapter{介绍}
+
+\section{量子力学历史概要}
+
+\section{研究对象}
+
+\section{研究方法}
+
+\chapter{核心定理证明}
+
+\chapter{总结与展望}
+
+\backmatter
+%> 后置部分包含参考文献、声明页(自动生成)等
+
+% \printbibliography
+%> 打印参考文献列表
+
+\end{document}


Property changes on: trunk/Master/texmf-dist/doc/latex/fduthesis/fduthesis-template.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/fduthesis/fduthesis.pdf
===================================================================
(Binary files differ)

Index: trunk/Master/texmf-dist/doc/latex/fduthesis/fduthesis.pdf
===================================================================
--- trunk/Master/texmf-dist/doc/latex/fduthesis/fduthesis.pdf	2018-04-09 21:16:36 UTC (rev 47407)
+++ trunk/Master/texmf-dist/doc/latex/fduthesis/fduthesis.pdf	2018-04-09 21:17:26 UTC (rev 47408)

Property changes on: trunk/Master/texmf-dist/doc/latex/fduthesis/fduthesis.pdf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/pdf
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/fduthesis/latexmkrc
===================================================================
--- trunk/Master/texmf-dist/doc/latex/fduthesis/latexmkrc	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/fduthesis/latexmkrc	2018-04-09 21:17:26 UTC (rev 47408)
@@ -0,0 +1,17 @@
+# Latexmk configuration file.
+
+# Use XeLaTeX to compile.
+$pdf_mode = 5;
+
+# Process index.
+$makeindex = 'zhmakeindex -s gind.ist %O -o %D %S';
+
+# Show CPU time used.
+$show_time = 1;
+
+# Process glossary (change history).
+add_cus_dep('glo', 'gls', 0, 'makeglo2gls');
+sub makeglo2gls {
+    system("zhmakeindex -s gglo.ist -o \"$_[0].gls\"
+        -t \"$_[0].glg\" \"$_[0].glo\"");
+}

Added: trunk/Master/texmf-dist/doc/latex/fduthesis/latexmkrc-en
===================================================================
--- trunk/Master/texmf-dist/doc/latex/fduthesis/latexmkrc-en	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/fduthesis/latexmkrc-en	2018-04-09 21:17:26 UTC (rev 47408)
@@ -0,0 +1,10 @@
+# Latexmk configuration file.
+
+# Use XeLaTeX to compile.
+$pdf_mode = 5;
+
+# Process index.
+$makeindex = 'zhmakeindex -s gind.ist %O -o %D %S';
+
+# Show CPU time used.
+$show_time = 1;

Added: trunk/Master/texmf-dist/source/latex/fduthesis/fduthesis-doc.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/fduthesis/fduthesis-doc.dtx	                        (rev 0)
+++ trunk/Master/texmf-dist/source/latex/fduthesis/fduthesis-doc.dtx	2018-04-09 21:17:26 UTC (rev 47408)
@@ -0,0 +1,2202 @@
+% \iffalse meta-comment
+%
+% Copyright (C) 2017, 2018 by Xiangdong Zeng <xdzeng96 at gmail.com>
+%
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either
+% version 1.3c of this license or (at your option) any later
+% version. The latest version of this license is in:
+%
+%   http://www.latex-project.org/lppl.txt
+%
+% and version 1.3 or later is part of all distributions of
+% LaTeX version 2005/12/01 or later.
+%
+% This work has the LPPL maintenance status `maintained'.
+%
+% The Current Maintainer of this work is Xiangdong Zeng.
+%
+% \fi
+%
+% \EnableImplementation
+%
+% \begin{implementation}
+%
+%^^A 代码部分的页边距
+% \newgeometry{
+%   left      = 2.25 in,
+%   right     = 1.00 in,
+%   top       = 1.25 in,
+%   bottom    = 1.00 in,
+%   marginpar = 2.25 in
+% }
+%
+% \subsection{模板文档样式 \cls{fdudoc}}
+%
+% \changes{v0.4}{2017/07/29}{在 \cls{ctxdoc} 的基础上完成
+%   \cls{fdudoc} 文档类,用于模板手册的编写。}
+%
+% 编写 \LaTeX{} 宏包文档,传统上会采用 \pkg{doc} 宏包或
+% \cls{ltxdoc} 文档类。而对于使用 \LaTeX3 开发的宏包,\cls{l3doc}
+% 文档类将是一个更好的选择。\CTeX{} 宏集所附带的
+% \href{https://github.com/CTeX-org/ctex-kit/blob/master/tool/ctxdoc.cls}^^A
+% {\cls{ctxdoc}} 文档类,则在 \cls{l3doc} 的基础上进行了一些修正,
+% 特别是重新实现了 \env{macrocode} 环境,使之能更好地应用于中文
+% 文档。\cls{ctxdoc} 的主要功能如下:
+%
+% \begin{itemize}
+%   \item 注释使用灰色、倾斜字体,以便与一般代码区分;
+%   \item 模块、名字空间等使用彩色标注,并添加超链接;
+%   \item 自动更新行号宽度;
+%   \item 边注中的长命令使用盒子进行缩放,防止溢出;
+%   \item 修订记录中将显示修改日期;
+%   \item 添加中文支持。
+% \end{itemize}
+%
+% 然而,\cls{ctxdoc} 主要供内部使用,代码较为混乱和随意。
+% 本模板的文档样式(\cls{fdudoc})为适应具体需求,对其代码
+% 进行了整理,添加了相关注释,并做了一些改动:
+%
+% \begin{itemize}
+%   \item 允许模块标记 |<*|\meta{module}|>| 和
+%     |</|\meta{module}|>| 出现在行号左侧;
+%   \item 不再以直立、倾斜字体区分不同嵌套层次的模块;
+%   \item 调整索引中版本号的排序方式;
+%   \item 新增一系列实用命令;
+%   \item 修改文档字体、配色等。
+% \end{itemize}
+%
+% 本文档样式的核心代码主要来自 \cls{ctxdoc} 文档类 v2.4.10。
+% 在此,本人要向原开发者
+% \href{https://github.com/CTeX-org/}{CTEX.ORG}
+% 团队表示由衷的感谢。
+%
+% 以下为 \cls{fdudoc} 的具体实现。
+%
+% \subsubsection{载入宏包、文档类}
+%
+%    \begin{macrocode}
+%<*doc>
+\ExplSyntaxOff
+%    \end{macrocode}
+%
+% 无需载入 \pkg{thumbpdf}。
+%    \begin{macrocode}
+\@namedef{ver at thumbpdf.sty}{9999/99/99}
+%    \end{macrocode}
+%
+% 关闭 \pkg{xparse} 中的命令声明信息。
+%    \begin{macrocode}
+\PassOptionsToPackage{log-declarations = false}{xparse}
+%    \end{macrocode}
+%
+% 载入宏包和文档类。
+%    \begin{macrocode}
+\LoadClass[a4paper, full]{l3doc}
+\RequirePackage[UTF8, heading, sub3section, fontset = none]{ctex}
+%    \end{macrocode}
+% 与 \pkg{hypdoc}(由 \cls{l3doc} 调用)冲突,导致脚注超链接
+% 无法正常跳转。临时禁用。
+%    \begin{macrocode}
+% \RequirePackage[stable, bottom]{footmisc}
+\RequirePackage{graphicx}
+\RequirePackage{caption}
+\RequirePackage{geometry}
+\RequirePackage{listings}
+\RequirePackage{makecell}
+\RequirePackage[toc]{multitoc}
+\RequirePackage{siunitx}
+\RequirePackage{tabularx}
+\RequirePackage{threeparttable}
+\RequirePackage{unicode-math}
+\RequirePackage{xcolor}
+\RequirePackage{xcolor-material}
+\RequirePackage{zref-base}
+%    \end{macrocode}
+%
+% \subsubsection{\env{macrocode} 环境}
+%
+% \paragraph{继承的代码}
+%
+% \begin{macro}[int]{\macro at code}
+% 在 \pkg{doc} 宏包中,\env{macrocode} 环境的核心功能由命令
+% \tn{macro at code} 负责实现,而 \tn{xmacro at code} 只用来结束
+% \env{macrocode} 环境。但在 \cls{l3doc} 以及 \cls{ctxdoc} 中,
+% \tn{xmacro\-@\-code} 则基本接管了 \tn{macro at code} 的功能。
+% 后者此时只起辅助作用。
+%    \begin{macrocode}
+\def\macro at code{%
+%    \end{macrocode}
+% 调整前后间距,禁止 \env{macrocode} 环境前的分页。
+%    \begin{macrocode}
+   \topsep \MacrocodeTopsep
+   \@beginparpenalty \predisplaypenalty
+%    \end{macrocode}
+% 将列表前后的附加垂直空白设为 0。根据 \cls{ctxdoc} 修改。
+%    \begin{macrocode}
+   \partopsep \z at skip
+%    \if at inlabel\leavevmode\fi
+%    \end{macrocode}
+% 构建 \env{trivlist} 环境,设置段间距为 0。
+% 之后修改字体,并调节左右间距。\tn{MacroIndent} 会根据代码行数
+% 更新,具体细节见后文。
+% \tn{macro at font} 用来在不同模块见切换字体。本文档类不使用
+% \tn{AltMacroFont},因此这里改用 \tn{MacroFont} 代替。
+%    \begin{macrocode}
+   \trivlist \parskip \z@ \item[]%
+%    \macro at font
+   \MacroFont
+   \leftskip\@totalleftmargin \advance\leftskip\MacroIndent
+   \rightskip\z@ \parindent\z@ \parfillskip\@flushglue
+%    \end{macrocode}
+% 按照 \LaTeXe{} 中 \tn{verbatim} 环境中定义 \tn{par},使得空行
+% 可以原样输出,否则空行会被吃掉。
+%    \begin{macrocode}
+   \blank at linefalse \def\par{\ifblank at line
+                             \leavevmode\fi
+                             \blank at linetrue\@@par
+                             \penalty\interlinepenalty}
+%    \end{macrocode}
+% \tn{obeylines} 将把回车符 |^^M| 变成 \tn{par}。
+% 接下来将所有特殊符号的类别码设为 12,即“其他”类。
+%    \begin{macrocode}
+   \obeylines
+   \let\do\do at noligs \verbatim at nolig@list
+   \let\do\@makeother \dospecials
+%    \end{macrocode}
+% 相当于退出 |\begin{list}| 和 |\begin{minipage}|。
+%    \begin{macrocode}
+   \global\@newlistfalse
+   \global\@minipagefalse
+%    \end{macrocode}
+% 初始化交叉引用功能。
+%    \begin{macrocode}
+   \init at crossref}
+%    \end{macrocode}
+% \end{macro}
+%
+%    \begin{macrocode}
+%<@@=fdudoc>
+\ExplSyntaxOn
+%    \end{macrocode}
+%
+% \begin{variable}{\l_@@_tmpa_tl,\l_@@_tmpb_tl}
+% 临时变量。
+%    \begin{macrocode}
+\tl_new:N \l_@@_tmpa_tl
+\tl_new:N \l_@@_tmpb_tl
+%    \end{macrocode}
+% \end{variable}
+%
+% \begin{macro}{\@@_patch_cmd:Nnn,\@@_preto_cmd:Nn,\@@_appto_cmd:Nn}
+% 补丁工具。
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_patch_cmd:Nnn #1#2#3
+  {
+    \ctex_patch_cmd_once:NnnnTF #1 { } {#2} {#3}
+      { } { \ctex_patch_failure:N #1 }
+  }
+\cs_new_protected:Npn \@@_preto_cmd:Nn #1#2
+  {
+    \ctex_preto_cmd:NnnTF #1 { } {#2}
+      { } { \ctex_patch_failure:N #1 }
+  }
+\cs_new_protected:Npn \@@_appto_cmd:Nn #1#2
+  {
+    \ctex_appto_cmd:NnnTF #1 { } {#2}
+      { } { \ctex_patch_failure:N #1 }
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+% \paragraph{代码行处理}
+%
+% \begin{macro}[int]{\xmacro at code,\sxmacro at code}
+% 重新实现 \env{macrocode} 与 \env{macrocode*} 环境的核心功能,
+% 将对代码逐行处理。后者会将空格显示为“\textvisiblespace”。
+%    \begin{macrocode}
+\cs_set_protected_nopar:Npn \xmacro at code
+  { \@@_marco_code:w }
+\cs_set_protected_nopar:Npn \sxmacro at code
+  {
+    \fontspec_print_visible_spaces:
+    \xmacro at code
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_marco_code:w}
+%    \begin{macrocode}
+\cs_new_protected_nopar:Npn \@@_marco_code:w
+  {
+%    \end{macrocode}
+% 根据 \tn{codeline at index} 是否为 |true| 选择是否显示行号。
+%    \begin{macrocode}
+    \ifcodeline at index
+      \@@_marco_code_every_par:n { \@@_code_line_no: }
+    \else:
+      \@@_marco_code_every_par:n { }
+    \fi:
+%    \end{macrocode}
+% 设置代码段结束标记为“\verb*|%    \end{macrocode}^^M|”。
+%    \begin{macrocode}
+    \@@_make_finish_tag:x { \@currenvir }
+%    \end{macrocode}
+% 开始 \env{macrocode}。
+%    \begin{macrocode}
+    \@@_macro_code_start:w
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_marco_code_every_par:n}
+% 在每段之前插入内容。这里每段即相当于每行。
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_marco_code_every_par:n #1
+  {
+    \everypar
+      {
+        \everypar {#1}
+        \if at inlabel
+          \global \@inlabelfalse \@noparlistfalse
+          \llap { \box \@labels \hskip \leftskip }
+        \fi
+        #1
+      }
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+% 设置 \tn{endlinechar} 为 $-1$,表示行末不插入任何字符
+% (实际上相当于在行尾插入注释符 |%|)。
+%    \begin{macrocode}
+\group_begin:
+  \int_set:Nn \tex_endlinechar:D { -1 }
+%    \end{macrocode}
+%
+% \begin{variable}{\c_@@_active_space_tl}
+% 活动字符类的空格(ASCII 码为 32)。
+%    \begin{macrocode}
+  \use:n
+    {
+      \char_set_catcode_active:n { 32 }
+      \tl_const:Nn \c_@@_active_space_tl
+    }
+    { }
+\group_end:
+%    \end{macrocode}
+% \end{variable}
+%
+% ASCII 码 13 是回车符 |^^M|。将其设置为活动字符。
+%    \begin{macrocode}
+\group_begin:
+  \char_set_catcode_active:n { 13 }
+%    \end{macrocode}
+%
+% \begin{macro}{\@@_make_finish_tag:n,\@@_make_finish_tag:x}
+% \env{macrocode} 结尾标记。展开后变成
+% “\verb*|%    \end{#1}^^M|”。
+%    \begin{macrocode}
+  \cs_new_protected:Npx \@@_make_finish_tag:n #1
+    {
+      \tl_set:Nn \exp_not:N \l_@@_macro_code_finish_tl
+        {
+          \c_percent_str
+          \prg_replicate:nn { 4 }
+            { \exp_not:o { \c_@@_active_space_tl } }
+          \exp_not:o { \active at escape@char } end
+          \c_left_brace_str #1 \c_right_brace_str
+          \exp_not:N ^^M
+        }
+    }
+  \cs_generate_variant:Nn \@@_make_finish_tag:n { x }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_macro_code_start:w}
+% 开始代码环境。此命令主要是为了防止 |\begin{macrocode}|
+% 后出现多余的空行。
+%    \begin{macrocode}
+  \cs_new_protected:Npn \@@_macro_code_start:w #1
+    {
+      \str_if_eq:nnTF {#1} { ^^M }
+        { \@@_macro_code_read_line:w }
+        { \@@_macro_code_read_line:w #1 }
+    }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_macro_code_read_line:w}
+% 逐行读取代码,并连同行尾回车符一并存入
+% \cs{l_@@_macro_code_line_tl}。如果该行与结束标记
+% “\verb*|%    \end{macrocode}^^M|”相同,则结束此
+% \env{macrocode};否则继续处理该行代码。
+%    \begin{macrocode}
+  \cs_new_protected:Npn \@@_macro_code_read_line:w #1 ^^M
+    {
+      \tl_set:Nn \l_@@_macro_code_line_tl { #1 ^^M }
+      \tl_if_eq:NNTF
+        \l_@@_macro_code_line_tl \l_@@_macro_code_finish_tl
+        { \exp_args:Nx \end { \@currenvir } }
+        {
+          \@@_macro_code_process_line:
+          \@@_macro_code_read_line:w
+        }
+    }
+%    \end{macrocode}
+% \end{macro}
+%
+% \changes{v0.4}{2017/08/09}{[\pkg{fdudoc}] 修复 \cls{ctxdoc}
+%   文档类 v2.4.10 之前版本中行距偏小的问题,见 ctex-kit
+%   \href{https://github.com/CTeX-org/ctex-kit/issues/303}{\#~303}。}
+%
+% \begin{macro}{\@@_swap_cr:,\@@_swap_cr_aux:w}
+% 把 \cs{l_@@_macro_code_line_tl} 中的回车符 |^^M| 挪到外面。
+%    \begin{macrocode}
+  \cs_new_protected:Npn \@@_swap_cr:
+    {
+      \exp_after:wN
+        \@@_swap_cr_aux:w \l_@@_macro_code_line_tl
+    }
+  \cs_new_protected:Npn \@@_swap_cr_aux:w #1 ^^M
+    {
+      \group_insert_after:N ^^M
+      \tl_set:Nn \l_@@_macro_code_line_tl {#1}
+    }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{variable}{\c_@@_active_cr_tl}
+% 活动字符类的回车符。
+%    \begin{macrocode}
+  \tl_const:Nn \c_@@_active_cr_tl { ^^M }
+\group_end:
+%    \end{macrocode}
+% \end{variable}
+%
+% \begin{variable}{\l_@@_macro_code_line_tl,
+%   \l_@@_macro_code_finish_tl,
+%   \g_@@_macro_code_verbatim_stop_tl}
+% 分别用来存储代码行、\env{macrocode} 结束标记以及抄录停止标记。
+%    \begin{macrocode}
+\tl_new:N \l_@@_macro_code_line_tl
+\tl_new:N \l_@@_macro_code_finish_tl
+\tl_new:N \g_@@_macro_code_verbatim_stop_tl
+%    \end{macrocode}
+% \end{variable}
+%
+% \begin{macro}{\@@_process_normal_line:}
+% 普通代码行根据开头字符分别处理。
+%    \begin{macrocode}
+\cs_new_protected_nopar:Npn \@@_process_normal_line:
+  {
+    \str_case_x:nnF
+      { \str_head:N \l_@@_macro_code_line_tl }
+      {
+%    \end{macrocode}
+% 以 |%| 开头的行先由 \cs{tl_tail:N} 去掉 |%|,之后再检查 |<|。
+%    \begin{macrocode}
+        { \c_percent_str }
+        {
+          \@@_check_angle:x
+            { \tl_tail:N \l_@@_macro_code_line_tl }
+        }
+%    \end{macrocode}
+% 以 |#| 开头的行按注释的格式输出。
+%    \begin{macrocode}
+        { \c_hash_str }
+        { \@@_output_comment_line: }
+      }
+%    \end{macrocode}
+% 其余正常输出。
+%    \begin{macrocode}
+      { \@@_output_line: }
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_process_verbatim_line:}
+% 处理抄录代码行(不检查 |%| 与 |<|)。
+%    \begin{macrocode}
+\cs_new_protected_nopar:Npn \@@_process_verbatim_line:
+  {
+%    \end{macrocode}
+% 将该行与抄录停止标记进行比较。
+%    \begin{macrocode}
+    \tl_if_eq:NNTF \l_@@_macro_code_line_tl
+        \g_@@_macro_code_verbatim_stop_tl
+%    \end{macrocode}
+% 若相同,则结束抄录环境,清空抄录停止标记,并输出该标记;
+%    \begin{macrocode}
+      {
+        \tl_gclear:N \g_@@_macro_code_verbatim_stop_tl
+        \cs_gset_eq:NN \@@_macro_code_process_line:
+          \@@_process_normal_line:
+        \@@_output_module:nn
+          { \color { verb at guard } }
+          {
+            \@@_swap_cr:
+            \@@_module_pop:n { \l_@@_macro_code_line_tl }
+          }
+      }
+%    \end{macrocode}
+% 否则直接输出抄录代码。
+%    \begin{macrocode}
+      { \tl_use:N \l_@@_macro_code_line_tl }
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_macro_code_process_line:}
+% 处理代码行。该命令的作用如下:
+% \begin{itemize}
+%   \item 正常情况下,等同于 \cs{@@_process_normal_line:};
+%   \item 在 \cs{DontCheckModules} 之后,等价于
+%     \cs{@@_output_line:},即不检查模块标记,直接输出;
+%   \item 在抄录环境中,等价于 \cs{@@_process_verbatim_line:},
+%     此时将不再特殊处理以 |%| 开头的代码行。
+% \end{itemize}
+%    \begin{macrocode}
+\cs_new_eq:NN \@@_macro_code_process_line:
+  \@@_process_normal_line:
+%    \end{macrocode}
+% \end{macro}
+%
+% \paragraph{模块标记处理}
+%
+% \begin{macro}{\CheckModules,\DontCheckModules}
+% 选择是否检查模块标记。这两个命令在 \pkg{doc} 宏包中已有定义,
+% 此处重新声明。
+%    \begin{macrocode}
+\DeclareDocumentCommand \CheckModules { }
+  {
+    \cs_set_eq:NN \@@_macro_code_process_line:
+      \@@_process_normal_line:
+  }
+\DeclareDocumentCommand \DontCheckModules { }
+  {
+    \cs_set_eq:NN \@@_macro_code_process_line:
+      \@@_output_line:
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_check_angle:n,\@@_check_angle:x}
+% 检查第一个字符是否是 |<|。若是,则检查模块;否则立刻输出改行。
+% 该函数的参数不带 |%|。
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_check_angle:n #1
+  {
+    \str_if_eq_x:nnTF { \str_head:n {#1} } { < }
+      { \@@_check_module:x { \tl_tail:n {#1} } }
+      { \@@_output_comment_line: }
+  }
+\cs_generate_variant:Nn \@@_check_angle:n { x }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_check_module:n,\@@_check_module:x}
+% 检查紧跟 |<| 之后的字符。共有四种情况:
+% \begin{itemize}
+%   \item |*|:模块开始(|%<*|\meta{module}|>|);
+%   \item |/|:模块结束(|%</|\meta{module}|>|);
+%   \item |@|:名字空间(|%<@@=|\meta{namespace}|>|);
+%   \item |<|:抄录环境开始(|%<<|\meta{end-tag})。
+% \end{itemize}
+% 若不是这几种情况,则为单独一行的独立模块
+% (|%<|\meta{module}|>|)。
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_check_module:n #1
+  {
+    \str_case_x:nnF { \str_head:n {#1} }
+      {
+        { * } { \@@_module_star:w }
+        { / } { \@@_module_slash:w }
+        { @ } { \@@_module_at:w }
+        { < } { \@@_module_verb:w }
+      }
+      { \@@_module_pm:w }
+%    \end{macrocode}
+% 参数 |#1| 将被上面几个 |:w| 型函数吃掉。
+%    \begin{macrocode}
+    #1 \q_stop
+  }
+\cs_generate_variant:Nn \@@_check_module:n { x }
+%    \end{macrocode}
+% \end{macro}
+%
+% 设置 |>| 为活动字符。
+%    \begin{macrocode}
+\group_begin:
+  \char_set_catcode_active:N \>
+%    \end{macrocode}
+%
+% \begin{macro}{\@@_module_star:w}
+% 模块开始标记。
+% \begin{arguments}
+%   \item |*|\meta{module}
+%   \item 之后的代码
+% \end{arguments}
+%    \begin{macrocode}
+  \cs_new_protected:Npn \@@_module_star:w #1 > #2 \q_stop
+    {
+%    \end{macrocode}
+% 临时变量 \cs{l_@@_tmp_tl} 保存 |<*|\meta{module}|>|
+% 之后的部分,即真实代码。
+%    \begin{macrocode}
+      \tl_set:Nn \l_@@_tmpa_tl {#2}
+%    \end{macrocode}
+% 判断该行是否为空(只含一个回车符 |^^M|)。
+%    \begin{macrocode}
+      \tl_if_eq:NNTF \l_@@_tmpa_tl \c_@@_active_cr_tl
+%    \end{macrocode}
+% 若是,则将 |<|\meta{module}|>| 放在行号的右侧;
+%    \begin{macrocode}
+        {
+          \@@_output_module:nn
+            { \@@_star_color: }
+            {
+              \@@_module_push:n
+                { \@@_module_angle:n {#1} }
+            }
+        }
+%    \end{macrocode}
+% 否则放在左侧,并输出相应代码。
+%    \begin{macrocode}
+        {
+          \@@_output_module_left:nn
+            { \@@_star_color: }
+            {
+              \@@_module_push:n
+                { \@@_module_angle:n {#1} }
+            }
+        }
+      \@@_output_line:n {#2}
+    }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_module_slash:w}
+% 模块结束标记。结构与 \cs{@@_module_star:w} 相同。
+% \begin{arguments}
+%   \item |/|\meta{module}
+%   \item 之后的代码
+% \end{arguments}
+%    \begin{macrocode}
+  \cs_new_protected:Npn \@@_module_slash:w #1 > #2 \q_stop
+    {
+      \tl_set:Nn \l_@@_tmpa_tl {#2}
+      \tl_if_eq:NNTF \l_@@_tmpa_tl \c_@@_active_cr_tl
+        {
+          \@@_output_module:nn
+            { \@@_slash_color: }
+            {
+              \@@_module_pop:n
+                { \@@_module_angle:n {#1} }
+            }
+        }
+        {
+          \@@_output_module_left:nn
+            { \@@_slash_color: }
+            {
+              \@@_module_pop:n
+                { \@@_module_angle:n {#1} }
+            }
+        }
+      \@@_output_line:n {#2}
+    }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_module_at:w}
+% 名字空间。
+% \begin{arguments}
+%   \item 名字空间的名称(不含 |@@=|)
+%   \item 之后的代码
+% \end{arguments}
+%    \begin{macrocode}
+  \cs_new_protected:Npn \@@_module_at:w @ @ = #1 > #2 \q_stop
+    {
+      \@@_output_module:nn
+        { \color { at at guard } }
+        { \@@_module_angle:n { @ @ = #1 } }
+%    \end{macrocode}
+% 设置名字空间为 |#1|。\cls{l3doc} 中将名字空间称为
+% “模块”(module),注意不要混淆。
+%    \begin{macrocode}
+      \tl_gset:Nn \g__codedoc_module_name_tl {#1}
+      \@@_output_line:n {#2}
+    }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_module_verb:w}
+% 抄录开始。|#1|: |<|\meta{end-tag},只有一个 |<|。
+% \meta{end-tag} 的最后会带有一个回车符 |^^M|。
+%    \begin{macrocode}
+  \cs_new_protected:Npn \@@_module_verb:w #1 \q_stop
+    {
+%    \end{macrocode}
+% 重定义 \cs{@@_macro_code_process_line:},用以输出抄录行。
+%    \begin{macrocode}
+      \cs_gset_eq:NN \@@_macro_code_process_line:
+        \@@_process_verbatim_line:
+%    \end{macrocode}
+% 设置抄录停止标记。用 \cs{tl_tail:n} 去掉开头的 |<|。
+%    \begin{macrocode}
+      \tl_gset:Nx \g_@@_macro_code_verbatim_stop_tl
+        { \c_percent_str \tl_tail:n {#1} }
+%    \end{macrocode}
+% 输出 |%<<|\meta{end-tag}。
+%    \begin{macrocode}
+      \@@_output_module:nn
+        { \color { verb at guard } }
+        {
+          \@@_swap_cr:
+          \@@_module_push:n { \l_@@_macro_code_line_tl }
+        }
+    }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_module_pm:w}
+% 处理单独一行的模块。|<|\meta{module}|>| 放在行号的左侧。
+% \begin{arguments}
+%   \item \meta{module}
+%   \item 之后的代码
+% \end{arguments}
+%    \begin{macrocode}
+  \cs_new_protected:Npn \@@_module_pm:w #1 > #2 \q_stop
+    {
+      \@@_output_module_left:nn
+        { \@@_pm_color: }
+        { \@@_module_angle:n {#1} }
+      \@@_output_line:n {#2}
+    }
+\group_end:
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_output_line:n,\@@_output_line:}
+% 输出代码行。参数将被存入 \cs{l_@@_macro_code_line_tl},
+% 再由不带参数的版本调用。
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_output_line:n #1
+  {
+    \tl_set:Nn \l_@@_macro_code_line_tl {#1}
+%    \end{macrocode}
+% 若为空行(只含一个 |^^M|),则直接输出(换行)。
+%    \begin{macrocode}
+    \tl_if_eq:NNTF
+      \l_@@_macro_code_line_tl \c_@@_active_cr_tl
+      { \tl_use:N \l_@@_macro_code_line_tl }
+      {
+%    \end{macrocode}
+% 检查开头是否为 |%|,据此分别处理。
+%    \begin{macrocode}
+        \str_if_eq_x:nnTF
+          { \str_head:N \l_@@_macro_code_line_tl } { \c_percent_str }
+          { \@@_output_comment_line: } { \@@_output_line: }
+      }
+  }
+\cs_new_protected_nopar:Npn \@@_output_line:
+  {
+    \tex_noindent:D
+%    \end{macrocode}
+% 此处将把 |@@| 替换为相应的名字空间。
+%    \begin{macrocode}
+    \@@_replace_at_at:N \l_@@_macro_code_line_tl
+    \tl_use:N \l_@@_macro_code_line_tl
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_output_comment_line:}
+% 输出注释代码行。用灰色、斜体显示。
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_output_comment_line:
+  {
+    \tex_noindent:D
+    \group_begin:
+      \__fdudoc_swap_cr:
+      \color { code at gray } \slshape \@@_output_line:
+    \group_end:
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_replace_at_at:N,
+%   \@@_replace_at_at_aux:Nn,\@@_replace_at_at_aux:No}
+% 把 |@@| 替换为相应的名字空间。其名称存放在全局变量
+% \cs{g__codedoc_module_name_tl} 中。
+% 它为空时(|%<@@=>|),不做替换。
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_replace_at_at:N #1
+  {
+    \tl_if_empty:NF \g__codedoc_module_name_tl
+      { \@@_replace_at_at_aux:No #1 \g__codedoc_module_name_tl }
+  }
+\cs_new_protected:Npn \@@_replace_at_at_aux:Nn #1#2
+  {
+%    \end{macrocode}
+% 以下代码分别对应两种名字空间的替换:
+% \begin{itemize}
+%   \item 内部变量:|\|\meta{type}|_@@_|\meta{name} $\to$
+%     |\|\meta{type}|__|\meta{namespace}|_|\meta{name};
+%   \item 内部函数:|\@@_|\meta{name}” $\to$
+%     |\__|\meta{namespace}|_|\meta{name}”)。
+% \end{itemize}
+%    \begin{macrocode}
+    \tl_replace_all:Nnn #1 { _ @ @ } { _ _ #2 }
+    \tl_replace_all:Nnn #1 {   @ @ } { _ _ #2 }
+  }
+\cs_generate_variant:Nn \@@_replace_at_at_aux:Nn { No }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_module_push:n,
+%   \@@_module_push_aux:nn,\@@_module_push_aux:on}
+% 将模块名压入栈中。此处的栈主要用来处理模块名(包括抄录标记)
+% 之间的超链接。
+%    \begin{macrocode}
+\cs_new_protected_nopar:Npn \@@_module_push:n
+  { \@@_module_push_aux:on { \int_use:N \c at HD@hypercount } }
+\cs_new_protected:Npn \@@_module_push_aux:nn #1
+  {
+    \seq_gpush:Nn \g_@@_module_dest_seq {#1}
+    \hypersetup { hidelinks }
+    \exp_args:Nx \hdclindex
+      { \zref at extractdefault { HD.#1 } { guard at end } { 1 } } { }
+  }
+\cs_generate_variant:Nn \@@_module_push_aux:nn { on }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_module_pop:n,
+%   \@@_module_pop_aux:nn,\@@_module_pop_aux:on}
+% 将模块名释放出栈。
+%    \begin{macrocode}
+\cs_new_protected_nopar:Npn \@@_module_pop:n
+  {
+    \seq_gpop:NNTF \g_@@_module_dest_seq \l_@@_tmpa_tl
+      { \@@_module_pop_aux:on { \l_@@_tmpa_tl } }
+      { \BOOM \use:n }
+  }
+\cs_new_protected:Npn \@@_module_pop_aux:nn #1
+  {
+    \zref at labelbylist { HD.#1 } { fdudoc }
+    \hypersetup { hidelinks }
+    \hdclindex {#1} { }
+  }
+\cs_generate_variant:Nn \@@_module_pop_aux:nn { on }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{variable}{\g_@@_module_dest_seq}
+% 存放模块名的序列(栈)。
+%    \begin{macrocode}
+\seq_new:N \g_@@_module_dest_seq
+%    \end{macrocode}
+% \end{variable}
+%
+% 处理行号超链接。使用 \pkg{zref} 宏包。
+%    \begin{macrocode}
+\zref at newlist { fdudoc }
+\zref at newprop { guard at end } [ 1 ]
+  { \int_eval:n { \c at HD@hypercount - 1 } }
+\zref at addprop { fdudoc } { guard at end }
+%    \end{macrocode}
+%
+% \paragraph{格式处理}
+%
+% \begin{macro}{\MacroFont}
+% 代码部分的字体。
+%    \begin{macrocode}
+\cs_set_protected:Npn \MacroFont
+  {
+    \linespread { 1.05 }
+    \small \ttfamily \mdseries \upshape
+    \@@_verb_addon:
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_output_module:nn,\@@_output_module_left:nn}
+% 输出模块名(分行内和行号左侧两种)。
+% \begin{arguments}
+%   \item 颜色等样式
+%   \item 模块名
+% \end{arguments}
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_output_module:nn #1#2
+  {
+    \tex_noindent:D
+    \group_begin:
+      #1
+      \footnotesize \normalfont \sffamily #2
+    \group_end:
+  }
+\cs_new_protected:Npn \@@_output_module_left:nn #1#2
+  {
+    \tex_noindent:D
+    \hbox_overlap_left:n
+      {
+        \@@_output_module:nn {#1} {#2}
+        \skip_horizontal:n { \leftskip + \smallskipamount }
+      }
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_star_color:,\@@_slash_color:,\@@_pm_color:}
+% 选择模块标记的颜色。模块标记的颜色会根据嵌套层次而改变。
+%    \begin{macrocode}
+\cs_new_protected_nopar:Npn \@@_star_color:
+  {
+    \seq_gpop:NNTF \g_@@_star_color_seq \current at color
+      { \set at color }
+      { \@@_select_color: }
+    \seq_gpush:No \g_@@_slash_color_seq { \current at color }
+  }
+\cs_new_protected_nopar:Npn \@@_slash_color:
+  {
+    \seq_gpop:NNTF \g_@@_slash_color_seq \current at color
+      {
+        \set at color
+        \seq_gpush:No \g_@@_star_color_seq { \current at color }
+      }
+% TODO: 需要报错:star 与 slash 没有匹配
+      { \BOOM }
+  }
+\cs_new_protected_nopar:Npn \@@_pm_color:
+  {
+    \seq_get:NNTF \g_@@_star_color_seq \current at color
+      { \set at color }
+      {
+        \@@_select_color:
+        \seq_gpush:No \g_@@_star_color_seq { \current at color }
+      }
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{variable}{\g_@@_star_color_seq,\g_@@_slash_color_seq}
+% 存放模块标记颜色的序列。
+%    \begin{macrocode}
+\seq_new:N \g_@@_star_color_seq
+\seq_new:N \g_@@_slash_color_seq
+%    \end{macrocode}
+% \end{variable}
+%
+% \begin{macro}{\@@_select_color:}
+% \begin{macro}[int]{guard at series}
+% 设置模块标记的色系。
+%    \begin{macrocode}
+\cs_new_protected_nopar:Npn \@@_select_color:
+  { \color { guard at series!!+ } }
+\definecolorseries { guard at series }
+  { cmyk } { last } { blue } { purple }
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% 设置色系的增量大小。可选参数 |3| 意味着基色(blue)与
+% 末色(purple)之间将等分为三份。该数字比嵌套最大深度小 1。
+%    \begin{macrocode}
+\resetcolorseries [ 3 ] { guard at series }
+%    \end{macrocode}
+%
+% \begin{macro}[int]{verb at guard,at at guard,code at gray}
+% 设置颜色。
+%    \begin{macrocode}
+\definecolor { verb at guard } { named } { MaterialLime600 }
+\definecolor { at at guard   } { named } { MaterialPink    }
+\definecolor { code at gray  } { named } { MaterialGrey    }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_module_angle:n}
+% 输出“$\langle\cdots\rangle$”。^^A\\
+%^^A 注:原来所使用的 \tn{textlangle} 和 \tn{textrangle} 在
+%^^A Source Sans Pro 字体下不可用。
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_module_angle:n #1
+  { \textlangle #1 \textrangle }
+%   { < #1 > }
+%   { \ensuremath \langle #1 \ensuremath \rangle }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_code_line_no:}
+% 行号。设置为阿拉伯数字。
+%    \begin{macrocode}
+\cs_new_protected_nopar:Npn \@@_code_line_no:
+  {
+    \int_gincr:N \c at CodelineNo
+    \hbox_overlap_left:n
+      {
+        \hbox_to_wd:nn
+          { \MacroIndent }
+          {
+            \HD at target
+            \tex_hss:D \@@_code_line_no_style:
+            \theCodelineNo \enspace
+          }
+        \tex_kern:D \@totalleftmargin
+      }
+  }
+\tl_set:Nn \theCodelineNo { \arabic { CodelineNo } }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_code_line_no_style:}
+% 行号格式。
+%    \begin{macrocode}
+\cs_new_protected_nopar:Npn \@@_code_line_no_style:
+  { \color { code at gray } \normalfont \sffamily \tiny }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[int]{\HD at SetMacroIndent}
+% 设置代码缩进(行号一栏的宽度)。该命令会写进 |.aux| 辅助文件,
+% 以便在二次编译时确定最大行号宽度。
+%    \begin{macrocode}
+\cs_set_protected:Npn \HD at SetMacroIndent #1
+  {
+    \group_begin:
+      \settowidth \MacroIndent
+        {
+          \@@_code_line_no_style:
+          \prg_replicate:nn { \tl_count:n {#1} } { 0 }
+          \enspace
+        }
+      \dim_gset_eq:NN \MacroIndent \MacroIndent
+    \group_end:
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{\env{function} 环境}
+%
+% \begin{macro}{\@@_verb_addon:,
+%   \@@_disable_ecglue:,
+%   \@@_plain_punct_style:}
+% \begin{macro}[int]{\meta at font@select}
+% 调整文字间距,以便于让 CJK 字符占的宽度等于西文等宽字体中两个
+% 空格的宽度。需要按编译情况分别定义。
+%    \begin{macrocode}
+\sys_if_engine_xetex:TF
+  {
+    \cs_set_eq:NN \@@_verb_addon: \xeCJKVerbAddon
+    \cs_set:Nn \@@_plain_punct_style:
+      { \xeCJKsetup { PunctStyle = plain } }
+    \cs_set:Nn \@@_disable_ecglue:
+      { \xeCJKsetup { CJKecglue } }
+    \@@_appto_cmd:Nn \meta at font@select
+      { \mode_if_inner:T { \@@_disable_ecglue: } }
+  }
+  {
+    \cs_set_eq:NN \@@_verb_addon:        \prg_do_nothing:
+    \cs_set_eq:NN \@@_plain_punct_style: \prg_do_nothing:
+    \cs_set:Nn \@@_disable_ecglue:
+      { \ltjsetparameter { autoxspacing = false } }
+    \@@_appto_cmd:Nn \meta at font@select
+      { \@@_disable_ecglue: }
+  }
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{environment}{function}
+% \begin{macro}{\@@_fix_previous_depth:}
+% 调整 \env{function} 环境前后间距。
+%    \begin{macrocode}
+\BeforeBeginEnvironment { function }
+  { \par \nointerlineskip }
+\AtEndEnvironment { function }
+  {
+    \par
+    \cs_gset:Nx \@@_fix_previous_depth:
+      { \prevdepth = \the \prevdepth \space }
+  }
+\AfterEndEnvironment { function }
+  { \@@_fix_previous_depth: }
+%    \end{macrocode}
+% \end{macro}
+% \end{environment}
+%
+% \begin{environment}{syntax}
+% \begin{environment}{fdusyntax}
+% 在 \env{syntax} 和 \env{fdusyntax} 环境前设置若干活动字符。
+% \texttt{\textbar} 用于分隔多个选项,无需倾斜;|<xxx>| 表示选项,
+% |(xxx)| 表示默认选项。原来的括号用宏保存,并且使用直立字体。
+% \env{syntax} 环境另需要额外调整行距、标点样式及字符间距。
+%    \begin{macrocode}
+\AtBeginEnvironment { syntax }
+  {
+    \linespread { 1.2 }
+    \@@_plain_punct_style:
+    \@@_disable_ecglue:
+%     \char_set_catcode_active:N |
+%     \char_set_catcode_active:N (
+%     \char_set_active_eq:NN | \orbar
+%     \char_set_active_eq:NN ( \defaultval at aux
+  }
+\AtBeginEnvironment { fdusyntax }
+  {
+    \cs_set:Npn \lparen { \textup { ( } }
+    \cs_set:Npn \rparen { \textup { ) } }
+    \char_set_catcode_active:N |
+    \char_set_catcode_active:N <
+    \char_set_catcode_active:N (
+    \char_set_active_eq:NN | \orbar
+    \char_set_active_eq:NN < \syntaxopt at aux
+    \char_set_active_eq:NN ( \defaultval at aux
+  }
+%    \end{macrocode}
+% \end{environment}
+% \end{environment}
+%
+% \subsubsection{修订记录索引项}
+%
+% \begin{macro}{\@@_ltx_changes:nnn}
+% 保存 \pkg{doc} 中 \tn{changes@} 的定义。
+%    \begin{macrocode}
+\cs_new_eq:NN \@@_ltx_changes:nnn \changes@
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[int]{\changes@}
+% \changes{v0.4}{2017/07/30}{调整索引排序方式。}
+% 重定义 \tn{changes@},在版本号一行显示修改日期。
+%    \begin{macrocode}
+\cs_set_protected:Npn \changes@ #1#2
+  {
+    \@@_save_version_date:nn {#1} {#2}
+    \@@_ltx_changes:nnn {#1} {#2}
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{variable}{\g_@@_version_date_prop}
+% 存放版本号与对应的修改日期。
+% key = 版本号,value = \{ 开始日期,结束日期 \}。
+% 开始日期与结束日期可以相同。
+%    \begin{macrocode}
+\prop_new:N \g_@@_version_date_prop
+%    \end{macrocode}
+% \end{variable}
+%
+% \begin{macro}{\@@_save_version_date:nn}
+% |nn| 版本最终将被 \tn{changes@} 调用。
+% \begin{arguments}
+%   \item 版本号
+%   \item 日期
+% \end{arguments}
+% 它们分别对应 \tn{change} 的前两个参数(第三个是说明文字)。
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_save_version_date:nn #1#2
+  {
+    \prop_get:NnNTF \g_@@_version_date_prop
+      {#1} \l_@@_tmpa_tl
+      {
+%    \end{macrocode}
+% \cs{l_@@_tmp_tl} 相当于两个参数(开始日期、结束日期),
+% 因此需要提前展开。
+%    \begin{macrocode}
+        \exp_after:wN
+          \@@_save_version_date_aux:nnnn \l_@@_tmpa_tl
+        {#2} {#1}
+      }
+      { \@@_save_version_date_aux:nnn {#1} {#2} {#2} }
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_save_version_date_aux:nnnn}
+% \begin{arguments}
+%   \item 原开始日期
+%   \item 原结束日期(显然应有 |#1| < |#2|)
+%   \item 新读入的日期
+%   \item 版本号
+% \end{arguments}
+% 如果 |#3| < |#1|,则读入日期 |#3|、|#2|;
+% 如果 |#3| > |#2|,则读入日期 |#1|、|#3|。
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_save_version_date_aux:nnnn #1#2#3#4
+  {
+    \@@_if_date_later:nnTF {#1} {#3}
+      { \@@_save_version_date_aux:nnn {#4} {#3} {#2} }
+      {
+        \@@_if_date_later:nnT {#3} {#2}
+          { \@@_save_version_date_aux:nnn {#4} {#1} {#3} }
+      }
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_save_version_date_aux:nnn}
+% 将版本号和日期存入 \cs{g_@@_version_date_prop}。
+% \begin{arguments}
+%   \item 版本号
+%   \item 开始日期
+%   \item 结束日期
+% \end{arguments}
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_save_version_date_aux:nnn #1#2#3
+  { \prop_gput:Nnn \g_@@_version_date_prop {#1} { {#2} {#3} } }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[TF]{\@@_if_date_later:nn}
+% \begin{macro}{\@@_parse_date:w}
+% 比较两个日期。如果 |#1| 在 |#2| 之后,则为 |true|;反之为 |false|。
+% 日期的格式为 YYYY/MM/DD。比较方法是直接将日期化成 8 位数字,
+% 所以月、日前的 0 不可以省略。
+%    \begin{macrocode}
+\prg_new_conditional:Npnn \@@_if_date_later:nn #1#2 { TF, T }
+  {
+    \if_int_compare:w
+        \@@_parse_date:w #1 / / / 0 \q_stop >
+        \@@_parse_date:w #2 / / / 0 \q_stop \exp_stop_f:
+      \prg_return_true:
+    \else:
+      \prg_return_false:
+    \fi:
+  }
+\cs_new:Npn \@@_parse_date:w #1/#2/#3/ #4 \q_stop
+  { #1#2#3 }
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}[int]{\CTEX at versionitem}
+% 版本条目标签。如果版本号不在 \cs{g_@@_version_date_prop} 的
+% key 里面,则利用未定义的 \cs{BOOM} 报错。
+%    \begin{macrocode}
+\cs_new_protected:Npn \CTEX at versionitem #1 \efill
+  {
+    \@idxitem
+    \prop_get:NnNTF \g_@@_version_date_prop
+      {#1} \l_@@_tmpa_tl
+      {
+        \exp_after:wN
+          \@@_print_version_date:nnn \l_@@_tmpa_tl
+        {#1}
+      }
+      { \BOOM }
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_print_version_date:nnn}
+% 输出版本号和日期。如果开始日期和结束日期相同,则只输出一项。
+% \begin{arguments}
+%   \item 开始日期
+%   \item 结束日期
+%   \item 版本号
+% \end{arguments}
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_print_version_date:nnn #1#2#3
+  {
+    \noindent
+    \Hy at raisedlink { \belowpdfbookmark {#3} { HD.#3 } }
+    \textbf {#3} \hfill
+    \hbox:n
+      {
+        \footnotesize
+        \str_if_eq:nnTF {#1} {#2}
+          { ( #1 ) } { ( #1 ~ -- ~ #2 ) }
+      }
+    \par \nopagebreak
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[int]{\HDorg at theglossary}
+% 该命令由 \pkg{hypdoc} 宏包定义,用于存放标准文档类 \cls{book}
+% 中定义的 \tn{theindex} 命令。
+% 此处的补丁将在版本号一行最后加上修改日期。
+%    \begin{macrocode}
+\ctex_patch_cmd:Nnn \HDorg at theglossary
+  { \let \item \@idxitem }
+  { \let \item \CTEX at versionitem }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[int]{\@wrglossary}
+% 该命令由 \LaTeXe{} 内核定义,又由 \pkg{hypdoc} 宏包作了修改。
+% 此处的补丁使得修订记录条目的页码能够指向对应行。
+%    \begin{macrocode}
+\ctex_patch_cmd:Nnn \@wrglossary
+  { hdpindex }
+  {
+    \ifnum \c at HD@hypercount = \z@
+      hdpindex
+    \else
+      hdclindex { \the \c at HD@hypercount }
+    \fi
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{命令补丁}
+%
+% \paragraph{\LaTeXe{} 补丁}
+%
+% \begin{macro}[int]{\@addtocurcol}
+% 调整浮动体、代码等与文字的间距。
+% 见 \url{http://tex.stackexchange.com/a/40896}。
+%    \begin{macrocode}
+\ctex_patch_cmd:Nnn \@addtocurcol
+  { \vskip \intextsep }
+  {
+    \edef \save at first@penalty { \the \lastpenalty } \unpenalty
+    \ifnum \lastpenalty = \@M
+      \unpenalty
+    \else
+      \penalty \save at first@penalty \relax
+    \fi
+    \ifnum \outputpenalty < -\@Mii
+      \addvspace\intextsep
+      \vskip\parskip
+    \else
+      \addvspace\intextsep
+    \fi
+  }
+\ctex_patch_cmd:Nnn \@addtocurcol
+  {
+    \vskip \intextsep
+    \ifnum \outputpenalty < -\@Mii
+      \vskip -\parskip
+    \fi
+  }
+  {
+    \ifnum \outputpenalty < -\@Mii
+      \aftergroup \vskip \aftergroup \intextsep
+      \aftergroup \nointerlineskip
+    \else
+      \vskip \intextsep
+    \fi
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[int]{\@getpen}
+% 将换行或换页的最大罚值由 \num{10000} 改为 \num{10001}。
+%    \begin{macrocode}
+\ctex_patch_cmd:Nnn \@getpen { \@M } { \@Mi }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[int]{\l at section,\l at subsection}
+% 修改目录条目的缩进。
+%    \begin{macrocode}
+\ctex_patch_cmd:Nnn \l at section    { 2.5em } { 1.5em }
+\ctex_patch_cmd:Nnn \l at subsection { 2.5em } { 1.5em }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[int]{\@thehead}
+% 修改页眉,禁用 \tn{MakeUppercase}。
+%    \begin{macrocode}
+\@@_preto_cmd:Nn \@thehead
+  { \cs_set_eq:cN { MakeUppercase \space } \@iden }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\thebibliography}
+% \begin{macro}[int]{\HDorg at thebibliography}
+% 参考文献一节需要编号。
+%    \begin{macrocode}
+\ctex_patch_cmd:Nnn \HDorg at thebibliography
+  { \section* } { \section }
+\cs_set_eq:NN \thebibliography \HDorg at thebibliography
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\GlossaryParms}
+% 修改修订记录中的一些缩进。
+%    \begin{macrocode}
+\@@_appto_cmd:Nn \GlossaryParms
+  {
+    \raggedcolumns
+    \cs_set_eq:NN \Hy at writebookmark \HDorg at writebookmark
+    \cs_set:Npn \@idxitem   { \par \hangindent 2em }
+    \cs_set:Npn \subitem    { \@idxitem \hspace* { 1em } }
+    \cs_set:Npn \subsubitem { \@idxitem \hspace* { 2em } }
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[int]{\HoLogo at LaTeXe}
+% 由于使用了 \pkg{unicode-math},需要额外修改 \pkg{hologo} 中的
+% \tn{LaTeXe} 命令,以使粗体正常显示。
+%    \begin{macrocode}
+\ctex_patch_cmd:Nnn \HoLogo at LaTeXe
+  { \hbox { \HOLOGO at MathSetup 2 $ _{ \textstyle \varepsilon } $ } }
+  {
+    \hbox
+      {
+        \mathsurround 0pt \relax
+        2
+        \if b \expandafter \@car \f at series \@nil
+          $ _{ \textstyle \symbf { \varepsilon } } $
+        \else
+          $ _{ \textstyle \varepsilon } $
+        \fi
+      }
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\SpecialMainEnvIndex}
+% 索引汉化。
+%    \begin{macrocode}
+\ctex_patch_cmd:Nnn \SpecialMainEnvIndex
+  { (environment) } { ~ 环境 }
+\ctex_patch_cmd:Nnn \SpecialMainEnvIndex
+  { environments: } { 环境: }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[int]{\HDorg at SpecialEnvIndex}
+% \pkg{hypdoc} 宏包重新定义了 \tn{SpecialEnvIndex} 命令,因此需要
+% 修改内部定义。
+%    \begin{macrocode}
+\ctex_patch_cmd:Nnn \HDorg at SpecialEnvIndex
+  { (environment) } { ~ 环境 }
+\ctex_patch_cmd:Nnn \HDorg at SpecialEnvIndex
+  { environments: } { 环境: }
+%    \end{macrocode}
+% \end{macro}
+%
+% \paragraph{\cls{l3doc} 补丁}
+%
+%    \begin{macrocode}
+%<@@=codedoc>
+%    \end{macrocode}
+%
+% \begin{macro}{\list}
+% \cls{l3doc} 会设置列表环境中 \tn{listparindent} |=| \tn{z@},
+% 这里将其恢复。
+%    \begin{macrocode}
+\cs_set_eq:NN \list \@@_oldlist:nn
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_function_descr_start:w}
+% 抑制首段的 \tn{parskip}。
+%    \begin{macrocode}
+\__fdudoc_patch_cmd:Nnn \@@_function_descr_start:w
+  { \noindent }
+  { \skip_vertical:n { -\parskip } \noindent }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_function_assemble:}
+% 在 \cls{l3doc} 中,\env{function} 环境里的 \env{syntax} 和
+% \env{descr} 盒子中间存在一段 \tn{med\-skip\-amount} 的距离。
+% 但是如果 \env{syntax} 盒子为空(未使用 \env{syntax} 环境),
+% 就会显得不好看。此时通过把 \tn{medskipamount} 设置为零来修正。
+% 若盒子非空,则把 \tn{parskip} 还回去。
+%    \begin{macrocode}
+\__fdudoc_preto_cmd:Nn \@@_function_assemble:
+  {
+    \box_if_empty:NTF \g_@@_syntax_box
+      { \skip_zero:N \medskipamount }
+      { \skip_add:Nn \medskipamount { \parskip } }
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_typeset_functions:}
+% 调整 \env{function} 环境的字体。
+%    \begin{macrocode}
+\__fdudoc_patch_cmd:Nnn \@@_typeset_functions:
+  { \small \ttfamily } { \footnotesize \CodeFont }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_typeset_functions:,\@@_macro_init:,
+%   \@@_macro_dump:}
+% 左侧边注的函数列表采用单倍行距。
+%    \begin{macrocode}
+\__fdudoc_preto_cmd:Nn \@@_typeset_functions:
+  { \MacroFont }
+\__fdudoc_patch_cmd:Nnn \@@_macro_init:
+  { \hbox:n } { \MacroFont \hbox:n }
+\__fdudoc_patch_cmd:Nnn \@@_macro_dump:
+  { \hbox_unpack_clear:N } { \MacroFont \hbox_unpack_clear:N }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_macro_end_style:n}
+% 禁止显示 \env{macro} 环境最后的 “(\emph{End definition for ...})”。
+%    \begin{macrocode}
+\cs_set_eq:NN \@@_macro_end_style:n \use_none:n
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_typeset_TF:}
+% 关闭 |TF| 上的超链接,并且保证颜色与函数主体一致。
+%    \begin{macrocode}
+\cs_set_protected:Npn \@@_typeset_TF:
+  {
+    \group_begin:
+      \exp_args:No \@@_if_macro_internal:nT \l_@@_tmpa_tl
+        { \color [ gray ] { 0.5 } }
+      \itshape TF
+      \makebox [ 0 pt ] [ r ]
+        {
+          \color { red }
+          \underline { \phantom { \itshape TF } \kern -0.1 em }
+        }
+    \group_end:
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_macro_typeset_one:nN}
+% 在 \env{macro} 环境的侧边栏中,\cls{l3doc} 根据命令的长短,分别用
+% 普通字体和紧缩字体输出。然而很长的命令还是会超出页边。这里用缩放
+% 盒子的手段使得长命令也可正常显示。
+%    \begin{macrocode}
+\cs_set_protected:Npn \@@_macro_typeset_one:nN #1#2
+  {
+    \vbox_set:Nn \l_@@_macro_box
+      {
+        \MacroFont
+        \vbox_unpack_clear:N \l_@@_macro_box
+        \hbox_set:Nn \l_tmpa_box
+          { \@@_print_macroname:nN {#1} #2 }
+%    \end{macrocode}
+% \tn{marginparwidth} 和 \tn{marginparsep} 分别是边注的宽度及其到
+% 版心的距离,\tn{la\-bel\-sep} 则是编号盒子右端与条目首行文本之间
+% 的距离。
+%    \begin{macrocode}
+        \dim_set:Nn \l_tmpa_dim
+          { \marginparwidth - \labelsep - \marginparsep }
+        \dim_compare:nNnT { \box_wd:N \l_tmpa_box } > \l_tmpa_dim
+          {
+            \box_resize_to_wd_and_ht:Nnn \l_tmpa_box
+              { \l_tmpa_dim } { \box_ht:N \l_tmpa_box }
+          }
+        \hbox_overlap_left:n
+          {
+            \box_use:N \l_tmpa_box
+            \skip_horizontal:n { \marginparsep - \labelsep }
+          }
+      }
+    \int_incr:N \l_@@_macro_int
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_print_macroname:nN}
+% 该函数不再需要根据命令的长短切换字体。
+%    \begin{macrocode}
+\cs_set_protected:Npn \@@_print_macroname:nN #1#2
+  {
+    \strut
+    \@@_get_hyper_target:xN
+      {
+        \exp_not:n {#1}
+        \bool_if:NT #2 { \tl_to_str:n {TF} }
+      }
+      \l_@@_tmpa_tl
+    \cs_if_exist:cTF { r@ \l_@@_tmpa_tl }
+      { \exp_args:NNo \label at hyperref [ \l_@@_tmpa_tl ] }
+      { \use:n }
+      {
+        \tl_set:Nn \l_@@_tmpa_tl {#1}
+%    \end{macrocode}
+% 命令中的空格改用“\textvisiblespace”显示。
+%    \begin{macrocode}
+        \tl_replace_all:Non \l_@@_tmpa_tl
+          { \c_catcode_other_space_tl }
+          { \fontspec_visible_space: }
+        \@@_macroname_prefix:o \l_@@_tmpa_tl
+        \@@_macroname_suffix:N #2
+      }
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_special_index_module:nnnnN}
+% 索引汉化。
+%    \begin{macrocode}
+\cs_set_protected:Npn \@@_special_index_module:nnnnN #1#2#3#4#5
+  {
+    \use:x
+      {
+        \exp_not:n { \@@_special_index_aux:nnnnnnn {#1} {#2} }
+          \tl_if_empty:nTF {#3}
+            { { } { } { } { } }
+            {
+              \str_if_eq_x:nnTF {#3} { TeX }
+                {
+                  { TeX~ and~ LaTeX2e }
+                  { \string \TeX{}~ 和~ \string \LaTeXe{} }
+                }
+                { {#3} { \string \pkg {#3} } }
+              \bool_if:NTF #5
+                { { commands~ internal } { ~ 内部命令: } }
+                { { commands           } { ~ 命令:     } }
+            }
+      }
+    {#4}
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_special_index_aux:nnnnnnn}
+% 该函数在 \cls{l3doc} 中本来只有 6 个参数。这里增加了一个,用来辅助
+% 排序。
+% \begin{arguments}
+%   \item 键(即宏名称字符串,用来排序)
+%   \item 宏名称
+%   \item 索引头排序字符串(排序)
+%   \item 索引头文字
+%   \item 索引头后缀字符串(排序,新增)
+%   \item 索引头后缀文字
+%   \item 索引类型(\opt{main}/\opt{usage} 等)
+% \end{arguments}
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_special_index_aux:nnnnnnn #1#2#3#4#5#6#7
+  {
+    \tl_set:Nn \l_@@_index_escaped_key_tl {#1}
+    \@@_quote_special_char:N \l_@@_index_escaped_key_tl
+    \@@_special_index_set:Nn
+      \l_@@_index_escaped_macro_tl {#2}
+    \str_if_eq:onTF { \@currenvir } { macrocode }
+      { \codeline at wrindex }
+      {
+        \str_case:nnF {#7}
+          {
+            { main  } { \codeline at wrindex }
+            { usage } { \index }
+          }
+          { \HD at target \index }
+      }
+      {
+        \tl_if_empty:nF { #3 #4 #5 #6 }
+          { #3 #5 \actualchar #4 #6 \levelchar }
+        \l_@@_index_escaped_key_tl
+        \actualchar
+        {
+          \token_to_str:N \verbatim at font \c_space_tl
+          \l_@@_index_escaped_macro_tl
+        }
+        \encapchar
+        hdclindex { \the \c at HD@hypercount } {#7}
+      }
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{杂项}
+%
+% \begin{macro}{\StopSpecialIndexModule,
+%   \@@_special_index_module:nnnnN}
+% 不对 \cs{cs} 和 \cs{tn} 等编索引。用于目录、索引等。
+%    \begin{macrocode}
+\DeclareDocumentCommand \StopSpecialIndexModule { }
+  {
+    \cs_set_eq:NN
+      \@@_special_index_module:nnnnN \use_none:nnnnn
+  }
+\tl_map_inline:nn { \actualchar \encapchar \levelchar }
+  { \exp_args:Nx \DoNotIndex { \bslash \tl_to_str:N #1 } }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\meta}
+% 重定义 \cs{meta} 命令,需要禁用中文、西文之间的空格,
+% 并确保为罗马字体族。
+%    \begin{macrocode}
+\RenewDocumentCommand \meta { m }
+  {
+    \group_begin:
+      \sys_if_engine_xetex:T { \xeCJKsetup { CJKecglue = { } } }
+      \rmfamily \@@_meta:n {#1}
+    \group_end:
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+% 重定向 \cls{l3doc} 中的一些提示信息。
+%    \begin{macrocode}
+\msg_redirect_name:nnn { l3doc } { foreign-internal    } { log }
+\msg_redirect_name:nnn { l3doc } { print-changes-howto } { log }
+\msg_redirect_name:nnn { l3doc } { print-index-howto   } { log }
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+%<@@=>
+\ExplSyntaxOff
+%    \end{macrocode}
+%
+% \subsubsection{排版样式设置}
+%
+% 目录中禁止对 \cs{cs} 和 \cs{tn} 等的索引。
+%    \begin{macrocode}
+\AtBeginDocument{%
+  \addtocontents{toc}{\StopSpecialIndexModule}}
+%    \end{macrocode}
+%
+% \begin{macro}{\path,\opt,\kaishu}
+% 设置 PDF 字符串中的命令替换。
+%    \begin{macrocode}
+\pdfstringdefDisableCommands{%
+  \let\path\meta
+  \let\opt\@firstofone
+  \let\kaishu\relax}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[int]{\@makefntext}
+% 调整脚注文本缩进。
+%    \begin{macrocode}
+\renewcommand\@makefntext[1]{\parindent 0em\noindent\@makefnmark~#1}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\IndexLayout,\indexname}
+% 调整索引外观。
+%    \begin{macrocode}
+\IndexPrologue{%
+  \section{\indexname}%
+  \textit{无衬线字体的数字表示对应索引项出现的页码;
+    带下划线的数字表示定义对应索引项的代码行号;
+    其他普通数字则表示使用对应索引项的代码行号.}}
+\def\IndexLayout{%
+  \newgeometry{%
+    left   = 0.85 in,
+    right  = 0.85 in,
+    top    = 1.25 in,
+    bottom = 1.00 in}%
+  \setlength\IndexMin{0.5\textheight}%
+  \ctexset{section/numbering=false}%
+  \StopSpecialIndexModule}
+\def\indexname{代码索引}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\usage}
+% 控制“描述对应索引项的页码”样式。在 \pkg{doc} 宏包中的定义为
+% \tn{textit}。
+%    \begin{macrocode}
+\def\usage#1{\textsf{#1}}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\glossaryname}
+% 调整修订记录外观。
+%    \begin{macrocode}
+\GlossaryPrologue{\section{\glossaryname}}
+\def\glossaryname{修订记录}
+%    \end{macrocode}
+% \end{macro}
+%
+% 西文字体。
+%    \begin{macrocode}
+\setmainfont{TeX Gyre Pagella}
+\setsansfont{TeX Gyre Heros}
+\setmathfont{TeX Gyre Pagella Math}
+%    \end{macrocode}
+%
+% \begin{macro}{\kaishu,\fangsong}
+% 中文字体。
+%    \begin{macrocode}
+\setCJKmainfont{FZShuSong-Z01}%
+  [
+    BoldFont       = FZHei-B01,
+    ItalicFont     = FZKai-Z03,
+    BoldItalicFont = FZKai-Z03
+  ]
+\setCJKsansfont{FZHei-B01}%
+  [
+    BoldFont       = FZHei-B01,
+    ItalicFont     = FZKai-Z03,
+    BoldItalicFont = FZKai-Z03
+  ]
+\setCJKmonofont{FZFangSong-Z02}%
+  [
+    BoldFont       = FZHei-B01,
+    ItalicFont     = FZKai-Z03,
+    BoldItalicFont = FZKai-Z03
+  ]
+\newCJKfontfamily\kaishu{FZKai-Z03}%
+  [BoldFont = *, ItalicFont = *, BoldItalicFont = *]
+\newCJKfontfamily\fangsong{FZFangSong-Z02}%
+  [BoldFont = *, ItalicFont = *, BoldItalicFont = *]
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\CodeFont}
+% \begin{macro}[int]{\fdudoc at code@font,\fdudoc at cjk@code at font}
+% 代码部分的字体,这里用了两种系列。
+%    \begin{macrocode}
+\setmonofont{CMU Typewriter Text}%
+  [
+    UprightFont = * Light,
+    BoldFont    = * Bold,
+    SlantedFont = * Light Oblique,
+    HyphenChar  = None
+  ]
+\newfontfamily\fdudoc at code@font{Source Code Pro}%
+  [BoldFont = * Semibold]
+\newCJKfontfamily\fdudoc at cjk@code at font{Source Han Sans SC}%
+  [BoldFont = * Bold, AutoFakeSlant = 0.22]
+\newcommand*\CodeFont{\fdudoc at code@font\fdudoc at cjk@code at font}
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% 中文排版格式(\pkg{ctex} 宏包)。
+%    \begin{macrocode}
+\ctexset
+  {
+    section = {name = {第,节}, format+ = \raggedright},
+    subsubsection/tocline = {\kaishu\CTEXnumberline{#1}#2},
+    paragraph = {runin = false, numbering = false}
+  }
+%    \end{macrocode}
+%
+% 设定章节标题、目录深度。
+%    \begin{macrocode}
+\setcounter{secnumdepth}{4}
+\setcounter{tocdepth}{3}
+%    \end{macrocode}
+%
+% 单位设置(\pkg{siunitx} 宏包)。
+%    \begin{macrocode}
+\sisetup
+  {
+    number-math-rm       = \ensuremath,
+    inter-unit-product   = \ensuremath{{}\cdot{}},
+    group-digits         = true,
+    group-minimum-digits = 4,
+    group-separator      = \text{~},
+    range-phrase         = \symbol{"FF5E},
+    separate-uncertainty = true
+  }
+%    \end{macrocode}
+%
+% 超链接设置(\pkg{hyperref} 宏包)。
+%    \begin{macrocode}
+\hypersetup
+  {
+    bookmarksdepth    = 4,
+    bookmarksnumbered = true,
+    colorlinks        = true,
+    citecolor         = MaterialGreen,
+    linkcolor         = MaterialPink,
+    urlcolor          = MaterialIndigo
+  }
+%    \end{macrocode}
+%
+% 浮动体标题设置(\pkg{caption} 宏包)。
+%    \begin{macrocode}
+\captionsetup{labelsep = quad, labelfont+ = bf}
+%    \end{macrocode}
+%
+% 设置标准列表环境样式。
+%    \begin{macrocode}
+\setlist{noitemsep, topsep=\smallskipamount}
+\setlist[1]{labelindent=\parindent}
+\setlist[enumerate]{leftmargin=*}
+\setlist[itemize]{leftmargin=*}
+%    \end{macrocode}
+%
+% \begin{environment}{optdesc}
+% 用于描述各选项。设置条目间距为 \tn{marginparsep},与
+% \cls{l3doc} 一致。
+%    \begin{macrocode}
+\newlist{optdesc}{description}{3}
+\setlist[optdesc]{%
+  font=\mdseries\small\ttfamily, align=right,
+  listparindent=\parindent,
+  labelsep=\marginparsep, labelindent=-\marginparsep,
+  leftmargin=*}
+%    \end{macrocode}
+% \end{environment}
+%
+% \begin{environment}{tablenotes}
+% \begin{variable}{tpt at id}
+% 重新定义 \pkg{threeparttable} 包的 \env{tablenotes} 环境,
+% 用于表格的注释。
+%    \begin{macrocode}
+\renewlist{tablenotes}{description}{1}
+\setlist[tablenotes]{%
+  format=\normalfont\tnote at item, align=right,
+  listparindent=\parindent, labelindent=\tabcolsep,
+  leftmargin=*, rightmargin=\tabcolsep,
+  after=\@noparlisttrue}
+\AtBeginEnvironment{tablenotes}{%
+  \setlength\parindent{2\ccwd}%
+  \normalfont\footnotesize}
+\AtBeginEnvironment{threeparttable}{%
+  \stepcounter{tpt at id}%
+  \edef\curr at tpt@id{tpt@\arabic{tpt at id}}}
+\newcounter{tpt at id}
+%    \end{macrocode}
+% \end{variable}
+% \end{environment}
+%
+% \begin{macro}[int]{\tnote at item,\TPTtagStyle}
+% 为 \tn{tnote} 增加超链接。
+%    \begin{macrocode}
+\def\tnote at item#1{%
+  \Hy at raisedlink{\hyper at anchor{\curr at tpt@id-#1}}#1}
+\def\TPTtagStyle#1{\hyperlink{\curr at tpt@id-#1}{#1}}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\UrlAlphabet,\UrlDigits}
+% 网址断行。\tn{UrlOrds}、\tn{UrlAlphabet} 和 \tn{UrlDigits}
+% 分别记录了特殊符号、字母和数字,把它们依次附加在 \pkg{url} 宏包
+% 提供的命令 \tn{UrlBreaks} 之后,即可允许在这些位置处断行。与
+% \cs{fdu_allow_url_break:} 的原理是相同的。
+%    \begin{macrocode}
+\def\UrlAlphabet{%
+  \do\a\do\b\do\c\do\d\do\e\do\f\do\g\do\h\do\i\do\j%
+  \do\k\do\l\do\m\do\n\do\o\do\p\do\q\do\r\do\s\do\t%
+  \do\u\do\v\do\w\do\x\do\y\do\z\do\A\do\B\do\C\do\D%
+  \do\E\do\F\do\G\do\H\do\I\do\J\do\K\do\L\do\M\do\N%
+  \do\O\do\P\do\Q\do\R\do\S\do\T\do\U\do\V\do\W\do\X%
+  \do\Y\do\Z}
+\def\UrlDigits{%
+  \do\1\do\2\do\3\do\4\do\5\do\6\do\7\do\8\do\9\do\0}
+\g at addto@macro\UrlBreaks{\UrlOrds}
+\g at addto@macro\UrlBreaks{\UrlAlphabet}
+\g at addto@macro\UrlBreaks{\UrlDigits}
+%    \end{macrocode}
+% \end{macro}
+%
+% 不对下列各项添加索引。
+%    \begin{macrocode}
+\DoNotIndex{\begin,\end,
+  \a,\b,\c,\d,\e,\f,\g,\h,\i,\j,\k,\l,\m,
+  \n,\o,\p,\q,\r,\s,\t,\u,\v,\w,\x,\y,\z,
+  \A,\B,\C,\D,\E,\F,\G,\H,\I,\J,\K,\L,\M,
+  \N,\O,\P,\Q,\R,\S,\T,\U,\V,\W,\X,\Y,\Z,
+  \0,\1,\2,\3,\4,\5,\6,\7,\8,\9}
+%    \end{macrocode}
+%
+% 启用索引、交叉引用、历史记录。
+%    \begin{macrocode}
+\EnableCrossrefs
+\CodelineIndex
+\RecordChanges
+%    \end{macrocode}
+%
+% \subsubsection{文档层命令}
+%
+% \begin{macro}{\exptarget,\rexptarget,\expstar,\rexpstar,
+%   \__codedoc_typeset_exp:,\__codedoc_typeset_rexp:}
+% 部分命令之后的星号($\star$ 或 \ding{73}),表明其不同用法。
+% 这里的“exp”和“rexp”分别源自 \LaTeX3 中的“expandable”
+% 和“restricted-expandable”。
+%    \begin{macrocode}
+\newcommand*\exptarget{\Hy at raisedlink{\hypertarget{expstar}{}}}
+\newcommand*\rexptarget{\Hy at raisedlink{\hypertarget{rexpstar}{}}}
+\newcommand*\expstar{\hyperlink{expstar}{$\star$}}
+\newcommand*\rexpstar{\hyperlink{rexpstar}{\ding{73}}}
+% TODO: (2017/08/12) 允许修改 exptstar 和 rexpstar
+\renewcommand*\expstar{\hyperlink{expstar}{$\mfrake$}}
+\renewcommand*\rexpstar{\hyperlink{rexpstar}{$\mfrakc$}}
+\ExplSyntaxOn
+\cs_set_eq:NN \__codedoc_typeset_exp:  \expstar
+\cs_set_eq:NN \__codedoc_typeset_rexp: \rexpstar
+\ExplSyntaxOff
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\marg,\oarg,\parg}
+% 几种命令参数:
+% \begin{itemize}
+%   \item 必选参数:|{|\meta{arg}|}|;
+%   \item 可选参数:|[|\meta{arg}|]|;
+%   \item 图形参数:|(|\meta{arg}|)|。
+% \end{itemize}
+%    \begin{macrocode}
+\renewcommand*\marg[1]{\{\meta{#1}\}}
+\renewcommand*\oarg[1]{[\meta{#1}]}
+\renewcommand*\parg[1]{(\meta{#1})}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\opt}
+% 选项名。
+%    \begin{macrocode}
+\DeclareDocumentCommand\opt{m}{\texttt{#1}}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\kvopt}
+% \meta{key} |=| \meta{value} 型选项。
+%    \begin{macrocode}
+\DeclareDocumentCommand\kvopt{mm}
+  {\texttt{#1\breakablethinspace=\breakablethinspace#2}}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\breakablethinspace}
+% 允许换行的细间距。
+%    \begin{macrocode}
+\def\breakablethinspace{\hskip 0.16667em\relax}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\syntaxopt,\defaultval}
+% \begin{macro}[int]{\syntaxopt at aux,\defaultval at aux}
+% \env{syntax} 中的选项及命令选项。
+% |aux| 结尾的两个命令用于定义利用 |<>| 和 |()| 的简写形式。
+%    \begin{macrocode}
+\def\syntaxopt#1{\textit{#1}}
+\def\defaultval#1{\textbf{\textup{#1}}}
+\def\syntaxopt at aux#1>{\syntaxopt{#1}}
+\def\defaultval at aux#1){\defaultval{#1}}
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\orbar,\TF,\TTF,\TFF}
+% \env{syntax} 中的选项分隔符,以及 \opt{true} 或 \opt{false}
+% 选项的几种快捷方式。
+%    \begin{macrocode}
+\def\orbar{\textup{\textbar}}
+\def\TF{true\orbar false}
+\def\TTF{\defaultval{true}\orbar false}
+\def\TFF{true\orbar\defaultval{false}}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{environment}{arguments}
+% 放在 \env{macro} 环境中,用于描述对应命令的参数。
+% \cls{l3doc} 中的定义 \opt{labelsep} 设置不太合理,会使标签被覆盖,
+% 这里重新定义。
+%    \begin{macrocode}
+\DeclareDocumentEnvironment{arguments}{}
+  {\enumerate[%
+    label={\texttt{\#\arabic*:~}}, labelsep=0pt, nolistsep]}%
+  {\endenumerate}
+%    \end{macrocode}
+% \end{environment}
+%
+% \begin{macro}{\TeX,\LaTeX,\LaTeXe,
+%   \pdfTeX,\pdfLaTeX,\XeTeX,\XeLaTeX,\LuaTeX,\LuaLaTeX,
+%   \AmSLaTeX,\TeXLive,\MiKTeX,\BibTeX,\biber,\TikZ}
+% \TeX{} 相关标志。
+%    \begin{macrocode}
+\def\TeX{\hologo{TeX}}
+\def\LaTeX{\hologo{LaTeX}}
+\def\LaTeXe{\hologo{LaTeXe}}
+\def\pdfTeX{\hologo{pdfTeX}}
+\def\pdfLaTeX{\hologo{pdfLaTeX}}
+\def\XeTeX{\hologo{XeTeX}}
+\def\XeLaTeX{\hologo{XeLaTeX}}
+\def\LuaTeX{\hologo{LuaTeX}}
+\def\LuaLaTeX{\hologo{LuaLaTeX}}
+\def\AmSLaTeX{\hologo{AmSLaTeX}}
+\def\TeXLive{\TeX\ Live}
+\def\MiKTeX{\hologo{MiKTeX}}
+\def\BibTeX{\hologo{BibTeX}}
+\def\BibTeX{\hologo{BibTeX}}
+\def\biber{\hologo{biber}}
+%    \end{macrocode}
+% 该定义来自 \file{pgfmanual-en-macros.tex}。
+%    \begin{macrocode}
+\def\TikZ{Ti\emph{k}Z}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\cs,\tn}
+% \begin{macro}[int]{\codedoc at cs,\codedoc at tn}
+% 控制序列。
+%^^A Colors are used for debug.
+%    \begin{macrocode}
+% \let\codedoc at cs=\cs
+% \let\codedoc at tn=\tn
+% \renewcommand*\cs[2][]{%
+%   \textcolor{MaterialIndigo}{\codedoc at cs[#1]{#2}}}
+% \renewcommand*\tn[2][]{%
+%   \textcolor{MaterialPink}{\codedoc at tn[#1]{#2}}}
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\file,\env,\pkg,\cls}
+% 文件、环境、宏包、文档类。
+%    \begin{macrocode}
+% \renewcommand*\file[1]{%
+%   \textcolor{MaterialGrey900}{\texttt{#1}}}
+\renewcommand*\env[1]{\textbf{\texttt{#1}}}
+% \renewcommand*\pkg[1]{\textsf{#1}}
+% \renewcommand*\cls[1]{\textit{\textsf{#1}}}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\bashcmd}
+% Bash 中的命令。
+%    \begin{macrocode}
+\newcommand*\bashcmd[1]{\texttt{#1}}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\scite}
+% 位于上标的文献引用。
+%    \begin{macrocode}
+\newcommand*\scite[1]{\textsuperscript{\cite{#1}}}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{environment}{quote*}
+% 引述环境。
+% \begin{arguments}
+%   \item 作者
+%   \item 朝代
+% \end{arguments}
+%    \begin{macrocode}
+\DeclareDocumentEnvironment{quote*}{oo}
+  {\quote\fangsong\qquad}%
+  {\endquote\IfNoValueF{#1}{%
+    \hfill —— \IfNoValueF{#2}{〔#2〕}#1}}
+%    \end{macrocode}
+% \end{environment}
+%
+% \paragraph{示例代码环境}
+%
+% \pkg{listings} 宏包中连字符 |-| 原本以数学模式输出,
+% 此处改为普通文本。
+% 见 \url{https://tex.stackexchange.com/a/33188/136923}。
+%    \begin{macrocode}
+\lst at CCPutMacro\lst at ProcessOther {"2D}{\lst at ttfamily{-{}}{-{}}}
+\@empty\z@\@empty
+%    \end{macrocode}
+%
+% \changes{v0.5}{2017/09/05}{[\pkg{fdudoc}] 移除 \pkg{listings}
+%   关键字定义文件。}
+%
+% 定义几种代码样式。
+% \begin{macro}[int]{style at base}
+%    \begin{macrocode}
+\lstdefinestyle{style at base}
+  {
+    extendedchars   = true,
+    gobble          = 3,
+    lineskip        = 2 pt,
+    frame           = l,
+    framerule       = 1 pt,
+    framesep        = 0 pt,
+    escapeinside    = {(*}{*)},
+    basicstyle      = \small\CodeFont\color{MaterialGrey900},
+    keywordstyle    = \bfseries\color{MaterialIndigo},
+    commentstyle    = \itshape\color{MaterialGrey600},
+    stringstyle     = \color{MaterialRed},
+    backgroundcolor = \color{MaterialGrey50}
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[int]{style at shell}
+%    \begin{macrocode}
+\lstdefinestyle{style at shell}
+  {
+    style      = style at base,
+    rulecolor  = \color{MaterialPink},
+    language   = bash,
+    alsoletter = {-},
+    emphstyle  = \color{MaterialGreen800}
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[int]{style at latex}
+%    \begin{macrocode}
+\lstdefinestyle{style at latex}
+  {
+    style      = style at base,
+    rulecolor  = \color{MaterialIndigo},
+    language   = [LaTeX]TeX,
+    alsoletter = {*, -},
+    texcsstyle = *\color{MaterialDeepOrange},
+    emphstyle  = [1]\color{MaterialGreen800},
+    emphstyle  = [2]\color{MaterialTeal}
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[int]{style at syntax}
+%    \begin{macrocode}
+\lstdefinestyle{style at syntax}
+  {
+    extendedchars = true,
+    gobble        = 6,
+    escapeinside  = {(*}{*)},
+    language      = [LaTeX]TeX,
+    alsoletter    = {*, -},
+    basicstyle    = \footnotesize\CodeFont\color{MaterialGrey900},
+    keywordstyle  = \bfseries\color{MaterialIndigo},
+    commentstyle  = \itshape\color{MaterialGrey600},
+    texcsstyle    = *\color{MaterialDeepOrange},
+    emphstyle     = [1]\color{MaterialGreen800},
+    emphstyle     = [2]\color{MaterialTeal}
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{environment}{shellexample}
+% \begin{environment}{latexexample}
+% Shell 和 \LaTeX{} 示例代码。
+%    \begin{macrocode}
+\lstnewenvironment{shellexample}[1][]{%
+  \lstset{style=style at shell, #1}}{}
+\lstnewenvironment{latexexample}[1][]{%
+  \lstset{style=style at latex, #1}}{}
+%    \end{macrocode}
+% \end{environment}
+% \end{environment}
+%
+% \begin{environment}{fdusyntax}
+% 语法说明。用于代替 \cls{l3doc} 中的 \env{syntax} 环境。
+%    \begin{macrocode}
+\lstnewenvironment{fdusyntax}[1][]{%
+  \lstset{style=style at syntax, #1}\vspace{-1.8ex}}{}
+%</doc>
+%    \end{macrocode}
+% \end{environment}
+%
+% \subsubsection{\pkg{latexmk} 配置文件}
+%
+%    \begin{macrocode}
+%<*latexmk|latexmk-en>
+# Latexmk configuration file.
+
+# Use XeLaTeX to compile.
+$pdf_mode = 5;
+
+# Process index.
+$makeindex = 'zhmakeindex -s gind.ist %O -o %D %S';
+
+# Show CPU time used.
+$show_time = 1;
+%</latexmk|latexmk-en>
+%<*latexmk>
+
+# Process glossary (change history).
+add_cus_dep('glo', 'gls', 0, 'makeglo2gls');
+sub makeglo2gls {
+    system("zhmakeindex -s gglo.ist -o \"$_[0].gls\"
+        -t \"$_[0].glg\" \"$_[0].glo\"");
+}
+%</latexmk>
+%    \end{macrocode}
+%
+% \clearpage
+%
+% \end{implementation}
+%


Property changes on: trunk/Master/texmf-dist/source/latex/fduthesis/fduthesis-doc.dtx
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/source/latex/fduthesis/fduthesis-logo.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/fduthesis/fduthesis-logo.dtx	                        (rev 0)
+++ trunk/Master/texmf-dist/source/latex/fduthesis/fduthesis-logo.dtx	2018-04-09 21:17:26 UTC (rev 47408)
@@ -0,0 +1,2537 @@
+% \iffalse meta-comment
+%
+% Copyright (C) 2017, 2018 by Xiangdong Zeng <xdzeng96 at gmail.com>
+%
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either
+% version 1.3c of this license or (at your option) any later
+% version. The latest version of this license is in:
+%
+%   http://www.latex-project.org/lppl.txt
+%
+% and version 1.3 or later is part of all distributions of
+% LaTeX version 2005/12/01 or later.
+%
+% This work has the LPPL maintenance status `maintained'.
+%
+% The Current Maintainer of this work is Xiangdong Zeng.
+%
+% \fi
+%
+% \EnableImplementation
+%
+% \begin{implementation}
+%
+%^^A 代码部分的页边距
+% \newgeometry{
+%   left      = 2.25 in,
+%   right     = 1.00 in,
+%   top       = 1.25 in,
+%   bottom    = 1.00 in,
+%   marginpar = 2.25 in
+% }
+%
+% \subsection{视觉识别系统 \pkg{fdulogo}}
+%
+% \changes{v0.5}{2017/08/30}{将视觉识别系统移入 \pkg{fdulogo}
+%   宏包,并添加重修版校徽。}
+%
+% 本宏包附属于 \cls{fduthesis},利用 \TikZ{} 宏包绘制复旦大学
+% 校名、校徽与校训,并提供标准色以供参考。
+%
+%    \begin{macrocode}
+%<@@=fdulogo>
+%<*logo>
+\RequirePackage { luatex85 }
+\RequirePackage { xcolor, tikz }
+\RequirePackage { xparse }
+%    \end{macrocode}
+%
+% \subsubsection{用户接口}
+%
+% \begin{macro}{\fduname}
+% 复旦大学校名(復旦大學),由毛泽东题写。原始图片来源:
+% \url{http://www.fudan.edu.cn/2016/channels/view/74/}。
+%    \begin{macrocode}
+\NewDocumentCommand \fduname { O { } }
+  {
+    \@@_tikz:Nx \fdulogo at name
+      { \l_@@_default_arg_tl, #1 }
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\fduemblem}
+% 复旦大学校徽。第一个可选参数(加号)用于选择是否使用重修版本
+% 的图案,第二个(星号)用于选择是否选用阴文图案。原始图片来源:
+% \url{http://www.fudan.edu.cn/2016/channels/view/74/}。
+% 重修版本的核心图案来自江湾永久校址奠基石(来源:
+% \url{http://www.fda.fudan.edu.cn/zphc/list.htm}),字体使用
+% FreeSerif Bold。
+%    \begin{macrocode}
+\NewDocumentCommand \fduemblem { t+ s O { } }
+  {
+    \@@_tikz:cx
+      {
+        \IfBooleanTF {#1}
+          {
+            \IfBooleanTF {#2}
+              { fdulogo at emblem@new at reversed } { fdulogo at emblem@new }
+          }
+          {
+            \IfBooleanTF {#2}
+              { fdulogo at emblem@reversed } { fdulogo at emblem }
+          }
+      }
+      { \l_@@_default_arg_tl, #3 }
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\fdumotto}
+% 复旦大学校训:博學而篤志,切問而近思(简体:博学而笃志,
+% 切问而近思),由马相伯题写。原始图片来源:
+% \url{http://www.fudan.edu.cn/2016/channels/view/74/}。
+%    \begin{macrocode}
+\NewDocumentCommand \fdumotto { O { } }
+  {
+    \@@_tikz:Nx \fdulogo at motto
+      { \l_@@_default_arg_tl, #1 }
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{variable}{\l_@@_default_arg_tl}
+% 默认参数。
+%    \begin{macrocode}
+\tl_const:Nn \l_@@_default_arg_tl { x = 1 pt, y = 1 pt }
+%    \end{macrocode}
+% \end{variable}
+%
+% \begin{macro}{\@@_tikz:Nn,\@@_tikz:Nx,\@@_tikz:cx}
+% 对 \env{tikzpicture} 环境的封装。
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_tikz:Nn #1#2
+  {
+    \begin{tikzpicture} [#2]
+      #1
+    \end{tikzpicture}
+  }
+\cs_generate_variant:Nn \@@_tikz:Nn { Nx, cx }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{FudanBlue,FudanRed}
+% 标准色(复旦蓝、复旦红)。
+%    \begin{macrocode}
+\definecolor { FudanBlue } { HTML } { 0E419C }
+\definecolor { FudanRed  } { HTML } { C80000 }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{MaterialGrey}
+% Google Material 颜色系列。
+%    \begin{macrocode}
+\definecolor { MaterialGrey } { HTML } { 9E9E9E }
+%    \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{内部命令}
+%
+%    \begin{macrocode}
+%<@@=>
+\ExplSyntaxOff
+%    \end{macrocode}
+%
+% \begin{macro}[int]{\fdulogo at name}
+% 校名。
+%    \begin{macrocode}
+\def\fdulogo at name{%
+  \fill \fdulogo at name@fu
+        \fdulogo at name@dan
+        \fdulogo at name@da
+        \fdulogo at name@xue;}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[int]{\fdulogo at emblem,
+%   \fdulogo at emblem@reversed,
+%   \fdulogo at emblem@text,
+%   \fdulogo at emblem@year}
+% 校徽。
+%    \begin{macrocode}
+\def\fdulogo at emblem{%
+  \fill \fdulogo at emblem@kernel
+        \fdulogo at emblem@text
+        \fdulogo at emblem@year
+        \fdulogo at emblem@ring at inner@i
+        \fdulogo at emblem@ring at inner@ii
+        \fdulogo at emblem@ring at outer@i
+        \fdulogo at emblem@ring at outer@ii;}
+\def\fdulogo at emblem@reversed{%
+  \fill \fdulogo at emblem@text
+        \fdulogo at emblem@year;
+  \fill[even odd rule]
+        \fdulogo at emblem@kernel
+        \fdulogo at emblem@ring at inner@i
+        \fdulogo at emblem@ring at outer@i
+        \fdulogo at emblem@ring at outer@ii;}
+\def\fdulogo at emblem@text{%
+  \fdulogo at emblem@F
+  \fdulogo at emblem@U at i
+  \fdulogo at emblem@D
+  \fdulogo at emblem@A
+  \fdulogo at emblem@N at i
+  \fdulogo at emblem@U at ii
+  \fdulogo at emblem@N at ii
+  \fdulogo at emblem@I at i
+  \fdulogo at emblem@V
+  \fdulogo at emblem@E
+  \fdulogo at emblem@R
+  \fdulogo at emblem@S
+  \fdulogo at emblem@I at ii
+  \fdulogo at emblem@T
+  \fdulogo at emblem@Y}
+\def\fdulogo at emblem@year{%
+  \fdulogo at emblem@one
+  \fdulogo at emblem@nine
+  \fdulogo at emblem@zero
+  \fdulogo at emblem@five}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[int]{\fdulogo at emblem@new,
+%   \fdulogo at emblem@new at reversed,
+%   \fdulogo at emblem@new at text,
+%   \fdulogo at emblem@new at year}
+% 校徽(重修版)。
+%    \begin{macrocode}
+\def\fdulogo at emblem@new{%
+  \fill \fdulogo at emblem@new at kernel
+        \fdulogo at emblem@new at text
+        \fdulogo at emblem@new at year;
+  \fill[even odd rule]
+        \fdulogo at emblem@new at ring@inner at i
+        \fdulogo at emblem@new at ring@inner at ii
+        \fdulogo at emblem@new at ring@outer at i
+        \fdulogo at emblem@new at ring@outer at ii;}
+\def\fdulogo at emblem@new at reversed{%
+  \fill \fdulogo at emblem@new at text
+        \fdulogo at emblem@new at year;
+  \fill[even odd rule]
+        \fdulogo at emblem@new at kernel
+        \fdulogo at emblem@new at ring@inner at i
+        \fdulogo at emblem@new at ring@outer at i
+        \fdulogo at emblem@new at ring@outer at ii;}
+\def\fdulogo at emblem@new at text{%
+  \fdulogo at emblem@new at F
+  \fdulogo at emblem@new at U@i
+  \fdulogo at emblem@new at D
+  \fdulogo at emblem@new at A
+  \fdulogo at emblem@new at N@i
+  \fdulogo at emblem@new at U@ii
+  \fdulogo at emblem@new at N@ii
+  \fdulogo at emblem@new at I@i
+  \fdulogo at emblem@new at V
+  \fdulogo at emblem@new at E
+  \fdulogo at emblem@new at R
+  \fdulogo at emblem@new at S
+  \fdulogo at emblem@new at I@ii
+  \fdulogo at emblem@new at T
+  \fdulogo at emblem@new at Y}
+\def\fdulogo at emblem@new at year{%
+  \fdulogo at emblem@new at one
+  \fdulogo at emblem@new at nine
+  \fdulogo at emblem@new at zero
+  \fdulogo at emblem@new at five}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[int]{\fdulogo at motto,
+%   \fdulogo at motto@i,
+%   \fdulogo at motto@ii}
+% 校训。
+%    \begin{macrocode}
+\def\fdulogo at motto{%
+  \fill \fdulogo at motto@i
+        \fdulogo at motto@ii;}
+\def\fdulogo at motto@i{%
+  \fdulogo at motto@bo
+  \fdulogo at motto@xue
+  \fdulogo at motto@er at i
+  \fdulogo at motto@du
+  \fdulogo at motto@zhi}
+\def\fdulogo at motto@ii{%
+  \fdulogo at motto@qie
+  \fdulogo at motto@wen
+  \fdulogo at motto@er at ii
+  \fdulogo at motto@jin
+  \fdulogo at motto@si}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[int]{\fduthesis at cover}
+% \cls{fduthesis} 用户手册的封面图案。内部使用。
+%    \begin{macrocode}
+\def\fduthesis at cover{%
+  \hspace{1.5cm}
+  \begin{tikzpicture}[x=1pt, y=1pt, scale=1.1, color=MaterialGrey]
+    \useasboundingbox ( 100, -140) rectangle ( 800,  800);
+    \fdulogo at emblem@new
+  \end{tikzpicture}
+  \begin{tikzpicture}[x=1pt, y=1pt]
+    \useasboundingbox ( 750, -150) rectangle (1350,  850);
+    \fill \fdulogo at motto@i;
+  \end{tikzpicture}
+  \begin{tikzpicture}[x=1pt, y=1pt]
+    \useasboundingbox (1280,   10) rectangle (1880, 1210);
+    \fill \fdulogo at motto@ii;
+  \end{tikzpicture}
+  \hspace*{-42.5cm}}
+%</logo>
+%    \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{生成文件}
+%
+% 以下两个文件用于生成各图案。
+% \DoNotIndex{\FIG,\BG}
+%    \begin{macrocode}
+%<*(ex-logo|cover)>
+%<ex-logo>\documentclass{article}
+%<cover>\documentclass{standalone}
+\usepackage{fdulogo}
+%<*ex-logo>
+\usetikzlibrary{backgrounds,external}
+\tikzexternalize[prefix=fudan-]
+\let\FIG=\tikzsetnextfilename
+\def\BG#1{color=white, show background rectangle,
+  background rectangle/.style={#1}}
+%</ex-logo>
+\begin{document}
+%    \end{macrocode}
+%
+% 校名。
+%    \begin{macrocode}
+%<*ex-logo>
+\FIG{name-black}                  \fduname
+\FIG{name-blue}                   \fduname[color=FudanBlue]
+\FIG{name-red}                    \fduname[color=FudanRed]
+%    \end{macrocode}
+%
+% 校徽。
+%    \begin{macrocode}
+\FIG{emblem-a-black}              \fduemblem
+\FIG{emblem-a-blue}               \fduemblem[color=FudanBlue]
+\FIG{emblem-a-red}                \fduemblem[color=FudanRed]
+\FIG{emblem-b-black}              \fduemblem*
+\FIG{emblem-b-blue}               \fduemblem*[color=FudanBlue]
+\FIG{emblem-b-red}                \fduemblem*[color=FudanRed]
+%    \end{macrocode}
+%
+% 校徽(重修版)。
+%    \begin{macrocode}
+\FIG{emblem-new-a-black}          \fduemblem+
+\FIG{emblem-new-a-blue}           \fduemblem+[color=FudanBlue]
+\FIG{emblem-new-a-red}            \fduemblem+[color=FudanRed]
+\FIG{emblem-new-b-black}          \fduemblem+*
+\FIG{emblem-new-b-blue}           \fduemblem+*[color=FudanBlue]
+\FIG{emblem-new-b-red}            \fduemblem+*[color=FudanRed]
+\FIG{emblem-new-a-reversed-black} \fduemblem+[\BG{fill}]
+\FIG{emblem-new-a-reversed-blue}  \fduemblem+[\BG{fill=FudanBlue}]
+\FIG{emblem-new-a-reversed-red}   \fduemblem+[\BG{fill=FudanRed}]
+\FIG{emblem-new-b-reversed-black} \fduemblem+*[\BG{fill}]
+\FIG{emblem-new-b-reversed-blue}  \fduemblem+*[\BG{fill=FudanBlue}]
+\FIG{emblem-new-b-reversed-red}   \fduemblem+*[\BG{fill=FudanRed}]
+%    \end{macrocode}
+%
+% 校训。
+%    \begin{macrocode}
+\FIG{motto}                       \fdumotto
+\FIG{motto-reversed}              \fdumotto[\BG{fill}]
+%</ex-logo>
+%    \end{macrocode}
+%
+% \cls{fduthesis} 封面。
+%    \begin{macrocode}
+%<*cover>
+\makeatletter
+\fduthesis at cover
+\makeatother
+%</cover>
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+\end{document}
+%</(ex-logo|cover)>
+%    \end{macrocode}
+%
+% \subsubsection{路径}
+%
+% 各图案的路径均使用 Bézier 曲线生成。曲线的具体数据参见源代码,
+% 此处从略。
+%
+% \clearpage
+%
+% \end{implementation}
+%
+% \DisableImplementation
+%
+% \begin{implementation}
+%
+% \paragraph{校名}
+%
+% 复。
+%    \begin{macrocode}
+%<*logo>
+\def\fdulogo at name@fu{%
+  ( 86.79426450, 309.23000203)
+    .. controls ( 90.52759774, 306.43000210) and ( 95.27426428, 304.13666883) .. ( 96.80759758, 299.37666895)
+    .. controls (100.07426416, 292.95000244) and (100.74093081, 285.69666929) .. (101.08759747, 278.60333613)
+    .. controls ( 97.58093089, 266.51000310) and ( 89.47426443, 256.63000335) .. ( 83.27426458, 245.87000362)
+    .. controls ( 76.79426475, 235.84333720) and ( 70.78093156, 225.51000413) .. ( 64.22093173, 215.53667104)
+    .. controls ( 62.24759844, 212.88333778) and ( 62.18093178, 209.48333786) .. ( 61.44759846, 206.37667127)
+    .. controls ( 66.44759834, 207.63000457) and ( 71.00759822, 205.08333797) .. ( 75.68759811, 203.80333800)
+    .. controls ( 77.31426473, 200.65667142) and ( 78.78093136, 197.41667150) .. ( 80.55426465, 194.33667157)
+    .. controls ( 80.19426466, 188.60333838) and ( 77.71426472, 183.32333852) .. ( 74.72759813, 178.52333864)
+    .. controls ( 68.70093162, 167.31000558) and ( 62.86093176, 155.99000587) .. ( 56.75426525, 144.81667281)
+    .. controls ( 54.87426529, 140.92333958) and ( 54.19426531, 136.60333968) .. ( 52.91426534, 132.51000645)
+    .. controls ( 54.60759863, 129.12333987) and ( 56.99426524, 126.08333995) .. ( 58.50093187, 122.61667337)
+    .. controls ( 59.66093184, 116.97667351) and ( 61.08759847, 111.27000698) .. ( 60.52759849, 105.45667380)
+    .. controls ( 59.15426519,  78.25667448) and ( 58.22093188,  51.01667516) .. ( 56.68759858,  23.83000917)
+    .. controls ( 54.52759864,  19.44334261) and ( 53.56759866,  12.80334278) .. ( 47.75426547,  12.03000946)
+    .. controls ( 42.10093228,  14.51000940) and ( 39.03426569,  20.09667593) .. ( 37.23426574,  25.71000912)
+    .. controls ( 36.24759909,  37.23000883) and ( 41.36759897,  48.00334190) .. ( 42.15426561,  59.35000828)
+    .. controls ( 43.31426558,  69.33667470) and ( 41.59426563,  79.37667445) .. ( 41.47426563,  89.39000753)
+    .. controls ( 41.72759896,  92.87000744) and ( 39.83426567,  95.81667404) .. ( 38.20759904,  98.71000730)
+    .. controls ( 36.59426575,  98.21667398) and ( 34.98093246,  97.73667399) .. ( 33.35426583,  97.24334067)
+    .. controls ( 28.54093262,  89.83000752) and ( 23.40759941,  82.63000770) .. ( 18.54093287,  75.25667455)
+    .. controls ( 16.62093292,  75.76334120) and ( 14.67426630,  76.15000786) .. ( 12.80759968,  76.81667451)
+    .. controls ( 12.07426636,  78.93667446) and ( 11.02093306,  81.43000773) .. ( 12.54093302,  83.45667435)
+    .. controls ( 20.94093281,  99.43000728) and ( 29.63426593, 115.23000688) .. ( 38.19426571, 131.11000649)
+    .. controls ( 42.94093226, 140.45667292) and ( 48.59426545, 149.36333936) .. ( 52.68759868, 159.00333912)
+    .. controls ( 55.28759862, 168.04333890) and ( 60.40759849, 176.51000535) .. ( 59.79426517, 186.20333844)
+    .. controls ( 54.76759863, 185.93667178) and ( 51.83426537, 181.23000523) .. ( 47.56759881, 179.16333862)
+    .. controls ( 44.71426555, 181.43000523) and ( 41.87426562, 183.71000517) .. ( 39.04759902, 186.01667178)
+    .. controls ( 40.84759898, 191.27000498) and ( 41.78093229, 196.92333818) .. ( 44.86093221, 201.65667139)
+    .. controls ( 52.82093201, 215.04333772) and ( 60.74093181, 228.45667072) .. ( 68.78093161, 241.80333705)
+    .. controls ( 74.71426480, 252.79000345) and ( 83.66093124, 262.99000319) .. ( 83.84759790, 276.12333620)
+    .. controls ( 83.06093126, 284.17666933) and ( 81.95426462, 292.19000246) .. ( 81.08759797, 300.24333559)
+    .. controls ( 82.94093126, 303.27000218) and ( 84.82093121, 306.28333544) .. ( 86.79426450, 309.23000203)
+  (143.71426307,  60.96334157)
+    .. controls (144.87426304,  59.85667494) and (146.06092968,  58.77667496) .. (147.26092965,  57.72334166)
+    .. controls (149.38092960,  57.35000833) and (151.54092954,  57.99000832) .. (153.66092949,  58.11000831)
+    .. controls (154.46092947,  59.65667494) and (155.27426278,  61.20334157) .. (156.08759610,  62.75000820)
+    .. controls (152.87426284,  64.45667482) and (149.39426293,  65.55000813) .. (145.88759635,  66.47000810)
+    .. controls (145.16759637,  64.64334148) and (144.43426306,  62.80334153) .. (143.71426307,  60.96334157)
+  (144.91426304, 141.67000622)
+    .. controls (143.54092974, 139.96333960) and (143.79426307, 137.71000632) .. (143.52759641, 135.67000637)
+    .. controls (146.12759635, 135.72333971) and (148.42092962, 137.09667300) .. (150.07426291, 139.03000629)
+    .. controls (154.63426280, 143.33667285) and (153.22092950, 150.21667268) .. (154.36759614, 155.79000587)
+    .. controls (151.31426288, 151.01667266) and (148.14092963, 146.32333944) .. (144.91426304, 141.67000622)
+  (139.83426317, 253.56333676)
+    .. controls (153.16759617, 263.92333650) and (166.98092916, 273.65666959) .. (180.19426216, 284.17666933)
+    .. controls (184.74092871, 283.19000269) and (188.98092861, 281.07000274) .. (192.24759519, 277.71000282)
+    .. controls (182.23426211, 263.05666986) and (165.90092919, 254.75000340) .. (153.84759615, 242.09667038)
+    .. controls (146.96759633, 233.00333727) and (139.40759651, 224.41667082) .. (132.67426335, 215.21667105)
+    .. controls (126.63426350, 204.79000465) and (121.22093030, 194.00333825) .. (115.50093045, 183.39000518)
+    .. controls (113.88759715, 181.04333857) and (113.86093049, 178.20333864) .. (113.84759715, 175.44333871)
+    .. controls (120.24759699, 184.61667182) and (126.19426351, 194.09667158) .. (132.54093002, 203.31000468)
+    .. controls (140.58092982, 217.01667101) and (152.38092952, 229.56333736) .. (167.99426247, 234.25667058)
+    .. controls (172.19426236, 231.63000397) and (176.00759560, 228.21667073) .. (178.48759554, 223.88333750)
+    .. controls (178.03426222, 208.04333790) and (170.72759573, 193.64333826) .. (166.24759584, 178.71000530)
+    .. controls (159.55426268, 161.00333907) and (159.48759601, 141.69667289) .. (154.91426279, 123.47000668)
+    .. controls (152.00759620, 118.13667348) and (151.20759622, 111.04334032) .. (145.19426304, 108.15000706)
+    .. controls (142.22092978, 112.72334028) and (137.62092989, 115.56334021) .. (132.30093003, 116.57667352)
+    .. controls (129.06093011, 111.89667363) and (125.34093020, 107.51000708) .. (122.47426360, 102.59000720)
+    .. controls (120.10093033,  96.57667402) and (117.70093039,  90.31000751) .. (118.26093038,  83.71000767)
+    .. controls (126.60759683,  88.87000754) and (134.99426329,  93.95000742) .. (143.28759642,  99.20334062)
+    .. controls (149.03426294, 101.97667388) and (155.03426279, 104.23000716) .. (160.84759598, 106.89667376)
+    .. controls (165.36759587, 109.01667371) and (171.96759570, 109.15000704) .. (174.74092896, 104.25667383)
+    .. controls (180.14092883,  99.07000729) and (179.06092886,  91.27000748) .. (179.26092885,  84.47000765)
+    .. controls (176.34092892,  77.25667450) and (172.12759570,  70.45667467) .. (170.91426239,  62.64334153)
+    .. controls (177.99426222,  55.12334172) and (184.76759538,  47.13667525) .. (193.68759516,  41.68334206)
+    .. controls (194.34092847,  38.95000879) and (195.18092845,  36.17667553) .. (194.71426180,  33.32334227)
+    .. controls (192.94092851,  33.12334227) and (191.18092855,  32.92334228) .. (189.42092860,  32.71000895)
+    .. controls (185.27426203,  35.52334221) and (180.14092883,  37.20334217) .. (177.14092890,  41.41667540)
+    .. controls (173.59426233,  46.16334194) and (168.66092912,  49.52334186) .. (163.82092924,  52.81667511)
+    .. controls (161.22092930,  47.79000857) and (157.30092940,  43.59000868) .. (152.34092952,  40.83000874)
+    .. controls (145.87426302,  45.28334197) and (139.71426317,  50.23000851) .. (134.72759663,  56.35000836)
+    .. controls (132.92759668,  59.23000828) and (132.14093003,  62.59000820) .. (130.94093006,  65.73667479)
+    .. controls (132.47426335,  69.56334136) and (134.59426330,  73.12334127) .. (137.24759657,  76.27000786)
+    .. controls (143.88759640,  74.47000790) and (150.47426290,  72.52334129) .. (157.11426274,  70.73667466)
+    .. controls (160.58092932,  73.36334126) and (164.75426255,  75.89667453) .. (166.18092918,  80.25667443)
+    .. controls (168.00759580,  85.73667429) and (170.20759574,  91.05667416) .. (172.34092902,  96.43000735)
+    .. controls (169.06092911,  96.77667401) and (165.74092919,  98.00334065) .. (162.46092927,  97.59000733)
+    .. controls (155.74092944,  94.68334073) and (148.95426294,  91.79000747) .. (142.84759643,  87.72334091)
+    .. controls (137.52759656,  84.17667433) and (131.24759672,  81.96334105) .. (126.76759683,  77.24334117)
+    .. controls (121.84759695,  72.37667462) and (116.75426375,  67.65667474) .. (111.88759720,  62.72334153)
+    .. controls (106.62093067,  55.99000837) and (101.46093080,  49.15000854) .. ( 96.48759759,  42.20334204)
+    .. controls ( 93.54093099,  36.41667552) and ( 90.70093107,  30.57667567) .. ( 87.42093115,  24.96334247)
+    .. controls ( 83.87426457,  26.44334244) and ( 79.19426469,  28.04334240) .. ( 78.46093137,  32.35000896)
+    .. controls ( 80.48759799,  37.96334215) and ( 83.39426458,  43.21667535) .. ( 85.60759786,  48.75000855)
+    .. controls ( 87.51426448,  54.04334175) and ( 92.48759769,  57.36334166) .. ( 95.11426429,  62.25667488)
+    .. controls ( 96.75426425,  65.41667480) and ( 98.54093087,  68.48334139) .. (100.08759750,  71.68334131)
+    .. controls (102.40759744,  76.51000785) and (102.58093077,  82.07000771) .. (105.12759737,  86.80334093)
+    .. controls (109.44759726,  94.08334075) and (113.92759715, 101.27000723) .. (118.08759705, 108.63000705)
+    .. controls (121.11426364, 116.92334018) and (125.23426354, 124.81667331) .. (127.67426347, 133.31000643)
+    .. controls (127.40759681, 142.21667288) and (125.86093019, 151.13667265) .. (127.35426348, 160.04333910)
+    .. controls (126.95426349, 166.37667227) and (130.68759673, 171.60333881) .. (133.59426333, 176.88333868)
+    .. controls (135.03426329, 179.41667195) and (138.31426321, 179.64333861) .. (140.76759648, 180.61667192)
+    .. controls (145.40759636, 173.87000542) and (150.78092956, 167.68333891) .. (155.87426277, 161.28333907)
+    .. controls (154.00759615, 168.75000555) and (157.66092939, 175.69667204) .. (159.02092936, 182.88333853)
+    .. controls (161.96759595, 195.19000489) and (167.38092915, 207.07000459) .. (167.04759582, 219.96333760)
+    .. controls (164.47426255, 219.76333760) and (161.64759596, 220.45667092) .. (159.34092935, 219.03000429)
+    .. controls (154.63426280, 216.43000435) and (149.44759626, 214.25667108) .. (146.07426301, 209.87000452)
+    .. controls (141.96759645, 204.55000465) and (136.86092991, 200.01667143) .. (133.08759667, 194.44333824)
+    .. controls (126.78093016, 180.76333858) and (120.64759698, 166.89667226) .. (117.15426374, 152.17667263)
+    .. controls (111.54093054, 136.29667302) and (108.63426395, 119.43000678) .. (100.72759748, 104.43000715)
+    .. controls ( 99.18093085, 102.67000720) and ( 96.75426425, 101.97667388) .. ( 94.79426430, 100.76334058)
+    .. controls ( 93.07426434, 102.04334055) and ( 91.35426438, 103.32334052) .. ( 89.62093109, 104.59000715)
+    .. controls ( 88.06093113, 110.39000701) and ( 84.32759789, 116.45667352) .. ( 86.74093116, 122.52334004)
+    .. controls ( 92.48759769, 139.11000629) and ( 97.71426422, 155.87000587) .. (103.47426408, 172.44333879)
+    .. controls (111.64759721, 187.41667175) and (119.76759701, 202.41667137) .. (127.88759680, 217.41667100)
+    .. controls (139.84759650, 232.69667061) and (152.04759620, 247.83000357) .. (163.92759590, 263.19000319)
+    .. controls (153.66092949, 255.16333672) and (145.20759637, 245.01667031) .. (135.38092995, 236.47000385)
+    .. controls (130.47426340, 233.84333725) and (124.72759688, 232.63000395) .. (120.52759699, 228.76333738)
+    .. controls (115.07426379, 223.92333750) and (109.78093059, 218.89667096) .. (104.15426406, 214.25667108)
+    .. controls (101.86093079, 217.11000434) and ( 99.04759752, 219.79000427) .. ( 97.95426422, 223.39000418)
+    .. controls ( 96.06093093, 230.88333733) and ( 96.82093091, 239.12333712) .. (100.50093082, 245.96333695)
+    .. controls (104.34093072, 255.28333672) and (108.88759728, 264.28333649) .. (112.63426385, 273.64333626)
+    .. controls (113.75426382, 277.21666950) and (116.74093041, 279.49666944) .. (119.50093035, 281.76333605)
+    .. controls (121.56759696, 280.59000275) and (123.74093024, 279.56333611) .. (125.63426353, 278.11000281)
+    .. controls (128.27426346, 274.76333623) and (129.70093009, 270.69666966) .. (131.18093005, 266.76333643)
+    .. controls (129.26093010, 259.37666995) and (126.90093016, 252.08333680) .. (125.56759686, 244.55000365)
+    .. controls (131.00759672, 246.40333694) and (135.18092995, 250.37667017) .. (139.83426317, 253.56333676)}
+%    \end{macrocode}
+%
+% 旦。
+%    \begin{macrocode}
+\def\fdulogo at name@dan{%
+  (318.28759204,  86.52334094)
+    .. controls (328.19425846,  87.00334092) and (337.14092490,  91.81667414) .. (346.11425801,  95.59000738)
+    .. controls (351.20759122,  94.93667406) and (356.20759109,  93.69667409) .. (360.83425765,  91.41667415)
+    .. controls (361.59425763,  89.11000754) and (362.34092427,  86.79000760) .. (363.11425759,  84.47000765)
+    .. controls (357.78092439,  79.79000777) and (350.70092457,  78.47000780) .. (344.07425806,  76.67000785)
+    .. controls (343.51425808,  77.64334116) and (342.42092477,  79.59000778) .. (341.87425812,  80.56334108)
+    .. controls (332.26092503,  77.56334116) and (322.44759194,  75.27000788) .. (312.82092551,  72.32334129)
+    .. controls (306.68759233,  70.84334133) and (301.54092579,  66.97667476) .. (296.48759259,  63.39000818)
+    .. controls (292.74092601,  58.63000830) and (291.00759272,  52.12334180) .. (285.50092620,  48.87000854)
+    .. controls (279.98092633,  44.65667532) and (272.30092653,  47.80334190) .. (268.44759329,  52.75000845)
+    .. controls (266.51426000,  56.84334168) and (264.15426006,  60.80334158) .. (262.72759343,  65.11000814)
+    .. controls (262.96759343,  67.80334140) and (263.51426008,  70.45667467) .. (263.96759340,  73.12334127)
+    .. controls (267.08759332,  73.39000793) and (270.23425991,  73.53667459) .. (273.32759317,  74.08334125)
+    .. controls (288.47425945,  77.64334116) and (303.11425909,  83.09667435) .. (318.28759204,  86.52334094)
+  (347.60759131, 212.41667112)
+    .. controls (352.20759119, 214.71000440) and (357.26092440, 212.57667112) .. (362.04759095, 212.12333780)
+    .. controls (363.84759090, 209.92333785) and (365.60759086, 207.69667124) .. (367.28759082, 205.39000463)
+    .. controls (364.44759089, 193.92333825) and (356.31425776, 184.75000515) .. (353.11425784, 173.41667210)
+    .. controls (350.19425791, 164.27000566) and (347.51425798, 155.04333922) .. (344.23425806, 146.01667278)
+    .. controls (342.48759144, 141.53667289) and (342.50092477, 136.68333968) .. (341.74092479, 132.00333980)
+    .. controls (340.55425815, 124.59000665) and (339.36759152, 117.16334017) .. (338.18092488, 109.73667369)
+    .. controls (336.31425826, 108.56334038) and (334.43425831, 107.39000708) .. (332.59425835, 106.17667378)
+    .. controls (329.91425842, 108.37667372) and (326.87425849, 110.39000701) .. (325.35425853, 113.61667359)
+    .. controls (323.51425858, 117.24334017) and (321.70092529, 121.09667340) .. (317.79425872, 122.88334003)
+    .. controls (314.35425881, 120.28334009) and (311.04759222, 117.48334016) .. (307.38092565, 115.20334022)
+    .. controls (303.08759242, 121.15000674) and (307.50092565, 127.88333990) .. (309.52759226, 133.76333975)
+    .. controls (308.32759229, 143.05667286) and (300.79425915, 151.83000597) .. (304.55425905, 161.37667240)
+    .. controls (305.95425902, 164.12333900) and (308.52759229, 166.09667228) .. (310.39425891, 168.52333889)
+    .. controls (313.00759217, 167.01667226) and (315.76759211, 165.71000562) .. (318.16759205, 163.84333900)
+    .. controls (322.47425860, 158.48333914) and (326.20759184, 152.29667262) .. (327.11425849, 145.35000613)
+    .. controls (327.94092513, 140.35000626) and (328.71425845, 135.32333972) .. (329.59425843, 130.32333984)
+    .. controls (330.34092507, 130.55000650) and (331.83425837, 131.00333982) .. (332.59425835, 131.21667315)
+    .. controls (335.83425827, 146.37667277) and (340.43425816, 161.20333907) .. (343.70092474, 176.35000536)
+    .. controls (345.04759137, 181.07000524) and (345.90092469, 185.93667178) .. (347.64759131, 190.53667167)
+    .. controls (350.00759125, 194.93667156) and (353.07425784, 199.07000479) .. (353.80759115, 204.15000466)
+    .. controls (347.32759132, 204.91000464) and (341.32759147, 201.87000472) .. (335.78092494, 198.93667146)
+    .. controls (331.47425838, 196.45667152) and (326.50092517, 195.12333822) .. (322.70092527, 191.79000497)
+    .. controls (315.19425879, 185.56333846) and (307.60759231, 179.45667195) .. (300.19425916, 173.12333877)
+    .. controls (296.47425925, 170.24333884) and (294.80759263, 165.69667229) .. (291.99425937, 162.05667238)
+    .. controls (292.47425935, 156.11000586) and (295.62092594, 150.99000599) .. (297.87425922, 145.64333946)
+    .. controls (299.80759250, 137.37667300) and (302.00759245, 127.76333990) .. (297.06092591, 120.15000676)
+    .. controls (295.79425927, 117.40334016) and (293.94092598, 115.01667356) .. (291.96759270, 112.76334028)
+    .. controls (289.50092610, 118.09667348) and (285.55425953, 123.29667335) .. (286.28759284, 129.49667319)
+    .. controls (286.84759283, 138.20333964) and (284.63425955, 146.71000610) .. (283.44759291, 155.27000588)
+    .. controls (286.83425950, 162.61667237) and (286.67425950, 170.93667216) .. (288.94092611, 178.63000530)
+    .. controls (291.67425937, 180.88333858) and (293.70092599, 183.88333850) .. (296.54092592, 186.00333845)
+    .. controls (306.46092567, 191.56333831) and (316.12759210, 197.56333816) .. (325.99425852, 203.21667135)
+    .. controls (333.27425833, 206.09667128) and (340.30092483, 209.61667119) .. (347.60759131, 212.41667112)}
+%    \end{macrocode}
+%
+% 大。
+%    \begin{macrocode}
+\def\fdulogo at name@da{%
+  (500.52758749, 206.59000460)
+    .. controls (503.94092073, 220.15000426) and (500.12758750, 234.41667057) .. (504.03425407, 247.92333690)
+    .. controls (511.07425389, 246.55000360) and (517.44758706, 242.07000371) .. (519.55425368, 234.97667056)
+    .. controls (516.83425375, 217.67000432) and (512.24758719, 200.72333808) .. (509.44758726, 183.43000518)
+    .. controls (505.98092068, 167.81667224) and (503.00758742, 152.09667263) .. (499.86092084, 136.41667302)
+    .. controls (505.75425402, 140.20333959) and (512.02092053, 143.41667285) .. (517.80758705, 147.37667275)
+    .. controls (519.20758702, 148.73667271) and (519.98092033, 150.59000600) .. (521.03425364, 152.20333929)
+    .. controls (519.78092034, 156.32333919) and (518.88758703, 160.77667241) .. (522.32758694, 164.09667233)
+    .. controls (528.04758680, 164.07000566) and (533.75425332, 164.08333900) .. (539.46091985, 164.07000566)
+    .. controls (541.24758647, 162.17667238) and (544.28758639, 160.44333909) .. (542.76758643, 157.40333916)
+    .. controls (541.94091978, 149.95000602) and (534.75425330, 146.48333944) .. (529.51425343, 142.35000621)
+    .. controls (520.10092033, 136.29667302) and (510.22092058, 131.00333982) .. (500.80758748, 124.93667331)
+    .. controls (503.71425407, 118.32334014) and (507.70092064, 112.28334029) .. (510.84758723, 105.77667379)
+    .. controls (515.51425378,  95.17667405) and (524.40758689,  87.40334091) .. (531.72758671,  78.67000780)
+    .. controls (538.30091988,  74.05667458) and (544.99425304,  69.55000803) .. (551.88758620,  65.37667480)
+    .. controls (556.27425276,  63.48334151) and (560.44758599,  61.11000824) .. (564.12758590,  58.03000831)
+    .. controls (558.10091938,  53.81667509) and (550.71425290,  52.76334178) .. (543.98091973,  50.16334184)
+    .. controls (539.66091984,  48.55000855) and (534.92758663,  48.35000856) .. (530.38092007,  48.51000855)
+    .. controls (520.74092031,  51.48334181) and (513.10092051,  59.24334162) .. (509.72758726,  68.72334138)
+    .. controls (504.24758739,  85.40334096) and (500.02092083, 102.44334054) .. (494.66092097, 119.16334012)
+    .. controls (491.66092104, 110.84334033) and (488.38092112, 102.61667387) .. (485.64758786,  94.20334074)
+    .. controls (481.35425463,  87.89667423) and (477.18092140,  81.47000773) .. (472.75425485,  75.24334122)
+    .. controls (465.78092169,  65.49667479) and (454.34092197,  59.77667494) .. (442.62092227,  58.23000831)
+    .. controls (439.51425568,  58.68334163) and (436.43425576,  59.39000828) .. (433.48758916,  60.48334159)
+    .. controls (430.78092256,  61.73667489) and (429.92758925,  64.85667481) .. (428.51425595,  67.21667475)
+    .. controls (434.07425581,  68.15000806) and (439.74092234,  68.56334138) .. (445.26092220,  69.84334135)
+    .. controls (455.00758862,  73.60334126) and (464.20758839,  79.99000777) .. (469.18092160,  89.41667420)
+    .. controls (473.36758817,  98.01667398) and (479.90092134, 105.60334046) .. (481.12758797, 115.40334021)
+    .. controls (475.23425479, 113.83000692) and (470.84758823, 109.43000703) .. (466.18092168, 105.79000712)
+    .. controls (460.79425515, 100.05667393) and (457.03425524,  91.63000747) .. (448.46092212,  90.15000751)
+    .. controls (445.51425553,  95.32334072) and (444.71425555, 101.31000723) .. (443.67425557, 107.07000709)
+    .. controls (446.92758883, 106.27000711) and (450.19425541, 105.51000713) .. (453.47425533, 104.79000715)
+    .. controls (462.60758843, 111.72334031) and (470.71425490, 120.11000676) .. (480.90092131, 125.56333996)
+    .. controls (485.82092119, 128.04333990) and (487.58092114, 133.69667309) .. (488.79425445, 138.65667297)
+    .. controls (493.14092100, 161.23000573) and (496.22092093, 184.00333850) .. (500.52758749, 206.59000460)}
+%    \end{macrocode}
+%
+% 学。
+%    \begin{macrocode}
+\def\fdulogo at name@xue{%
+  (747.62091464, 258.36333664)
+    .. controls (750.15424791, 256.21667003) and (752.74091451, 254.15000341) .. (755.38091445, 252.13667013)
+    .. controls (750.84758123, 243.33667035) and (742.26091478, 238.23000381) .. (734.47424830, 232.65667062)
+    .. controls (736.20758159, 230.40333734) and (737.98091488, 228.19000406) .. (739.79424817, 226.00333745)
+    .. controls (743.27424808, 226.81667076) and (746.76758133, 227.55000408) .. (750.28758124, 228.23000406)
+    .. controls (751.46091455, 225.40333746) and (752.64758118, 222.57667087) .. (753.86091449, 219.76333760)
+    .. controls (750.62091457, 213.24333777) and (748.54091462, 206.27000461) .. (746.78091466, 199.23000478)
+    .. controls (748.22091463, 197.71000482) and (749.67424792, 196.17667153) .. (751.14091455, 194.67000490)
+    .. controls (760.71424765, 211.47000448) and (769.88758075, 228.49667072) .. (779.47424718, 245.29667030)
+    .. controls (773.42091400, 244.24333699) and (767.28758082, 243.89667033) .. (761.19424764, 243.24333702)
+    .. controls (760.47424765, 248.00333690) and (766.58091417, 249.36333686) .. (769.60758076, 251.87000347)
+    .. controls (775.06091396, 251.71000347) and (782.16758045, 254.05667008) .. (786.15424701, 249.12333687)
+    .. controls (787.15424699, 247.96333690) and (788.06091363, 246.71000360) .. (788.99424694, 245.47000363)
+    .. controls (786.26091368, 234.07000391) and (778.42091387, 225.05667081) .. (772.88758068, 214.99000439)
+    .. controls (768.59424745, 208.51000455) and (764.74091421, 201.75000472) .. (760.55424765, 195.21667155)
+    .. controls (758.16758105, 190.29667167) and (756.44758109, 185.07000514) .. (754.07424781, 180.13667193)
+    .. controls (759.44758101, 179.95000527) and (764.83424755, 179.33667195) .. (770.22091408, 179.47000528)
+    .. controls (776.19424726, 180.55000525) and (781.90091379, 182.84333853) .. (787.99424697, 183.31000518)
+    .. controls (792.42091352, 184.25667183) and (796.32758009, 181.16333857) .. (800.31424666, 179.72333861)
+    .. controls (800.47424665, 177.73667199) and (800.64757998, 175.75000537) .. (800.83424665, 173.76333875)
+    .. controls (790.94091356, 167.73667224) and (782.19424711, 159.31000578) .. (770.64758073, 156.49667252)
+    .. controls (756.94091441, 154.17667258) and (743.36758142, 151.12333932) .. (729.70091509, 148.53667272)
+    .. controls (723.98091523, 147.25667275) and (717.72758206, 145.35000613) .. (714.59424880, 139.93667293)
+    .. controls (723.31424858, 140.35000626) and (731.92758170, 145.47000613) .. (740.60758148, 142.33667287)
+    .. controls (742.23424811, 139.56333961) and (743.82091474, 136.75000635) .. (745.38091470, 133.92333975)
+    .. controls (743.54091474, 131.48333981) and (742.03424812, 128.80333988) .. (740.20758149, 126.36333994)
+    .. controls (735.48758161, 121.79000672) and (729.54091509, 118.80334013) .. (723.72758191, 115.85667354)
+    .. controls (728.02091513, 114.00334025) and (732.62091502, 115.64334021) .. (737.06091491, 115.85667354)
+    .. controls (744.58091472, 116.27000686) and (752.03424787, 117.36334016) .. (759.52758101, 118.15000681)
+    .. controls (762.92758093, 116.28334019) and (766.28758084, 114.35000691) .. (769.48758076, 112.13667363)
+    .. controls (770.55424740, 108.49667372) and (771.60758071, 104.85667381) .. (772.66091402, 101.21667390)
+    .. controls (771.22091405,  98.23000731) and (769.11424744,  95.67000737) .. (766.28758084,  93.91000742)
+    .. controls (756.02091443,  97.39000733) and (745.16758137,  96.35000736) .. (734.52758164,  96.37667402)
+    .. controls (729.95424842,  95.96334070) and (725.63424853,  94.23000741) .. (721.18091530,  93.17667410)
+    .. controls (717.24758207,  83.47000768) and (718.54091537,  72.91000794) .. (717.83424872,  62.71000820)
+    .. controls (717.24758207,  53.75000842) and (722.64758193,  43.71000867) .. (716.04758210,  35.91000887)
+    .. controls (712.07424886,  35.36334221) and (708.03424897,  33.52334226) .. (704.04758240,  34.85667556)
+    .. controls (697.94091588,  36.35000886) and (691.66091604,  37.27000883) .. (685.71424952,  39.37667545)
+    .. controls (678.32758304,  44.67000865) and (670.20758324,  49.53667519) .. (665.38091670,  57.52334166)
+    .. controls (673.52758316,  53.41667510) and (681.47424963,  48.71000855) .. (690.28758274,  46.15000861)
+    .. controls (694.52758264,  44.61667532) and (698.95424919,  46.32334194) .. (703.22091575,  46.88334193)
+    .. controls (704.35424906,  49.84334185) and (705.78091569,  52.71000845) .. (706.66091567,  55.76334170)
+    .. controls (707.98091563,  66.84334143) and (706.18091568,  78.27000781) .. (709.15424894,  89.13667420)
+    .. controls (708.72758228,  89.65667419) and (707.86091564,  90.69667416) .. (707.43424898,  91.21667415)
+    .. controls (695.24758262,  90.37667417) and (683.74091624,  85.91000762) .. (673.22091650,  79.89667443)
+    .. controls (667.54091664,  76.23000786) and (660.62091682,  76.04334120) .. (654.28758364,  74.23000791)
+    .. controls (648.38091712,  73.23000793) and (643.48758391,  77.65667449) .. (639.82091734,  81.69667439)
+    .. controls (638.15425071,  84.59000765) and (637.00758407,  87.73667424) .. (635.58091744,  90.75000750)
+    .. controls (641.15425064,  95.83000737) and (649.06091711,  94.83000739) .. (655.91425027,  96.53667402)
+    .. controls (669.07424994,  99.97667393) and (682.16758295, 103.71000717) .. (695.24758262, 107.53667374)
+    .. controls (700.00758250, 109.08334037) and (706.22091568, 108.84334038) .. (709.24758227, 113.48334026)
+    .. controls (713.56758216, 119.85667344) and (721.44758196, 123.11000669) .. (724.18091523, 130.64333983)
+    .. controls (717.19424874, 130.88333983) and (710.54091557, 128.16333989) .. (703.74091574, 127.00333992)
+    .. controls (700.96758248, 129.33667320) and (700.46091582, 132.96333977) .. (699.67424917, 136.28333969)
+    .. controls (702.44758244, 139.24333962) and (705.16758237, 142.28333954) .. (708.15424896, 145.04333947)
+    .. controls (713.63424883, 149.91000602) and (720.66091532, 152.35000596) .. (727.23424849, 155.35000588)
+    .. controls (731.56758171, 157.07000584) and (731.92758170, 162.24333904) .. (732.67424835, 166.16333894)
+    .. controls (723.46091525, 167.77667224) and (714.14091548, 164.72333898) .. (705.96758235, 160.63000575)
+    .. controls (700.03424917, 157.68333916) and (693.82091599, 155.39000588) .. (687.82091614, 152.59000595)
+    .. controls (684.79424955, 153.49667259) and (682.08758295, 155.12333922) .. (679.58091634, 157.03000584)
+    .. controls (680.38091632, 167.76333890) and (682.68758293, 178.51000530) .. (681.42091630, 189.31000503)
+    .. controls (680.79424965, 193.81667159) and (681.86091629, 198.25667148) .. (682.78091626, 202.64333803)
+    .. controls (683.50091625, 202.24333804) and (684.95424954, 201.45667140) .. (685.67424952, 201.05667141)
+    .. controls (687.36758282, 198.41667147) and (689.34091610, 195.97667153) .. (691.35424938, 193.57667159)
+    .. controls (694.04758265, 194.40333824) and (696.83424925, 195.01667156) .. (699.39424918, 196.21667153)
+    .. controls (701.24758247, 198.09667148) and (702.44758244, 200.47000475) .. (704.11424906, 202.49667137)
+    .. controls (709.31424893, 207.03000459) and (715.47424878, 210.37667117) .. (722.04758195, 212.47000445)
+    .. controls (724.15424856, 214.63000440) and (726.15424851, 216.88333768) .. (728.10091513, 219.19000429)
+    .. controls (727.86091514, 220.85667091) and (727.62091514, 222.52333754) .. (727.40758181, 224.19000416)
+    .. controls (723.18091525, 223.24333752) and (719.78091534, 220.56333758) .. (716.82091541, 217.55000433)
+    .. controls (716.16758210, 224.28333749) and (713.46091550, 231.16333732) .. (716.06091543, 237.81667049)
+    .. controls (718.95424869, 236.79000385) and (721.88758195, 235.89667053) .. (724.86091521, 235.07000389)
+    .. controls (732.74091501, 242.52333704) and (743.15424809, 247.96333690) .. (747.62091464, 258.36333664)
+  (696.82091591, 220.16333759)
+    .. controls (700.36758249, 219.00333762) and (703.24758242, 216.63000435) .. (705.64758236, 213.81667109)
+    .. controls (704.32758239, 210.63000450) and (703.11424909, 207.39000458) .. (702.15424911, 204.07000466)
+    .. controls (700.64758248, 203.27000468) and (699.14091585, 202.45667137) .. (697.63424923, 201.64333806)
+    .. controls (696.60758258, 203.37667135) and (695.56758261, 205.08333797) .. (694.55424930, 206.80333793)
+    .. controls (695.31424928, 211.25667115) and (696.06091593, 215.71000437) .. (696.82091591, 220.16333759)
+  (749.11424794, 167.77667224)
+    .. controls (747.63424798, 165.07000564) and (746.10091468, 162.37667237) .. (744.63424805, 159.67000577)
+    .. controls (755.00758112, 160.13667243) and (764.79424755, 163.65667234) .. (774.58091397, 166.85667226)
+    .. controls (778.28758054, 167.81667224) and (780.35424716, 171.29667215) .. (782.99424709, 173.76333875)
+    .. controls (771.44758071, 174.45667207) and (759.56758101, 172.97667211) .. (749.11424794, 167.77667224)
+  (742.71424810, 179.96333860)
+    .. controls (740.74091481, 176.05667203) and (747.15424799, 179.88333860) .. (742.71424810, 179.96333860)
+  (713.83424882, 188.16333839)
+    .. controls (711.34091555, 184.93667181) and (709.32758227, 181.25667190) .. (706.18091568, 178.57667197)
+    .. controls (699.63424918, 177.63000532) and (692.48758269, 178.65667197) .. (687.60758281, 183.47000518)
+    .. controls (687.67424947, 177.49667199) and (687.62091614, 171.52333881) .. (687.64758281, 165.53667229)
+    .. controls (699.67424917, 169.11000554) and (711.88758220, 172.00333880) .. (723.98091523, 175.37667205)
+    .. controls (721.91424862, 176.56333868) and (719.84758200, 177.75000532) .. (717.79424872, 178.93667196)
+    .. controls (718.16758205, 181.56333856) and (718.52758204, 184.19000516) .. (718.88758203, 186.81667176)
+    .. controls (717.19424874, 187.27000508) and (715.51424878, 187.71000507) .. (713.83424882, 188.16333839)
+  (741.00758147, 214.85667106)
+    .. controls (737.16758157, 207.41667125) and (733.72758166, 199.53667144) .. (734.23424831, 190.96333832)
+    .. controls (735.32758162, 190.33667167) and (736.43424826, 189.69667169) .. (737.55424823, 189.07000504)
+    .. controls (738.12758155, 193.45667160) and (738.30091488, 197.91000482) .. (739.31424818, 202.21667138)
+    .. controls (740.48758149, 206.29667127) and (743.34091475, 210.61667117) .. (741.00758147, 214.85667106)
+  (701.99424912, 258.20333664)
+    .. controls (704.94091571, 255.97667003) and (708.68758228, 254.55000340) .. (711.04758222, 251.68333681)
+    .. controls (711.56758221, 247.73667024) and (712.63424885, 242.96333702) .. (709.48758226, 239.81667044)
+    .. controls (703.08758242, 233.87000392) and (696.68758258, 227.91000407) .. (690.47424940, 221.77667089)
+    .. controls (689.72758276, 223.44333751) and (688.99424944, 225.11000414) .. (688.27424946, 226.76333743)
+    .. controls (691.99424937, 232.81667061) and (695.06091596, 239.23000378) .. (698.54091587, 245.41667030)
+    .. controls (700.23424916, 249.49667019) and (700.87424914, 253.93667008) .. (701.99424912, 258.20333664)
+  (654.71425030, 137.15000634)
+    .. controls (658.28758354, 146.24333944) and (659.68758351, 156.59000585) .. (667.11424999, 163.60333901)
+    .. controls (667.80758330, 160.27000576) and (668.83424995, 157.00333917) .. (669.26091660, 153.63000592)
+    .. controls (668.40758329, 150.57667267) and (666.80758333, 147.80333940) .. (665.84758335, 144.79000615)
+    .. controls (665.35425003, 140.60333958) and (665.68758336, 136.36333969) .. (665.72758336, 132.15000646)
+    .. controls (664.06091673, 130.12333985) and (662.02091678, 128.45667322) .. (659.56758351, 127.47000658)
+    .. controls (657.88758355, 130.67000650) and (656.24758359, 133.88333975) .. (654.71425030, 137.15000634)}
+%    \end{macrocode}
+%
+% \paragraph{校徽}
+%
+% 核心图案。
+%    \begin{macrocode}
+\def\fdulogo at emblem@kernel{%
+  (351.02572456, 574.53945678)
+    .. controls (353.31905783, 587.19278979) and (370.06572408, 593.55278963) .. (380.65239048, 586.95278980)
+    .. controls (386.01239035, 582.31278991) and (389.51905693, 574.99279010) .. (388.22572363, 567.81945694)
+    .. controls (386.66572367, 555.08612393) and (380.57239049, 543.57945755) .. (377.06572391, 531.37945785)
+    .. controls (375.69239061, 525.83279133) and (379.82572384, 521.44612477) .. (382.75905710, 517.29945821)
+    .. controls (419.97238950, 519.71279148) and (457.09238857, 523.61945805) .. (494.39905431, 524.81945802)
+    .. controls (505.81238735, 525.81945799) and (517.31905373, 525.21945801) .. (528.69238678, 524.05945804)
+    .. controls (539.05238652, 523.29945806) and (548.67905295, 513.85945829) .. (547.86571964, 503.17945856)
+    .. controls (547.22571965, 497.11279204) and (542.46571977, 490.89945887) .. (535.86571994, 491.12612553)
+    .. controls (523.49238691, 491.00612553) and (511.29238722, 493.79279213) .. (498.93238753, 494.09945879)
+    .. controls (478.77238803, 495.83279208) and (458.51905520, 495.72612541) .. (438.31905571, 495.01945876)
+    .. controls (427.34572265, 493.97945879) and (416.13238960, 494.20612545) .. (405.57238986, 490.60612554)
+    .. controls (398.26572338, 488.08612560) and (390.46572357, 486.52612564) .. (383.90572374, 482.24612575)
+    .. controls (379.85239050, 479.57945915) and (376.14572393, 475.11279259) .. (376.97239058, 469.93945939)
+    .. controls (378.22572388, 458.71279300) and (386.95905699, 449.31279324) .. (386.15905701, 437.71279353)
+    .. controls (383.69239041, 424.51279386) and (378.01239055, 412.21946083) .. (374.45239064, 399.31279449)
+    .. controls (371.06572406, 387.49946145) and (370.10572408, 375.17946176) .. (368.23905746, 363.07279540)
+    .. controls (367.66572414, 356.96612888) and (366.55905750, 350.91279570) .. (366.34572417, 344.76612919)
+    .. controls (363.49239091, 318.55279651) and (365.89239085, 292.17946383) .. (366.31905751, 265.91279782)
+    .. controls (366.58572417, 249.05946491) and (367.50572415, 232.21946533) .. (369.07905744, 215.44613242)
+    .. controls (369.79905742, 204.24613270) and (372.17239070, 193.21946631) .. (372.89239068, 182.01946659)
+    .. controls (372.62572402, 175.80613341) and (371.38572405, 167.51280028) .. (364.62572422, 165.19280034)
+    .. controls (358.59905770, 163.63280038) and (350.94572456, 163.64613371) .. (346.71905800, 168.96613358)
+    .. controls (338.13239155, 178.77946667) and (337.71905822, 192.48613299) .. (335.77239161, 204.72613269)
+    .. controls (331.25239172, 230.40613205) and (330.90572506, 256.55279806) .. (331.15905839, 282.55279741)
+    .. controls (288.67905945, 280.91279745) and (245.66572719, 283.05946406) .. (203.82572824, 274.09946429)
+    .. controls (200.02572833, 273.43279764) and (195.38572845, 270.87279770) .. (192.34572852, 274.64613094)
+    .. controls (185.49239536, 281.73946410) and (184.87906204, 292.20613050) .. (182.30572878, 301.25946361)
+    .. controls (185.73239536, 303.24613022) and (188.99906194, 305.72613016) .. (192.98572851, 306.45946348)
+    .. controls (217.54572789, 311.79279668) and (242.75906060, 313.05946331) .. (267.81239330, 313.27279664)
+    .. controls (289.33239277, 313.92612996) and (310.87905889, 315.92612991) .. (332.42572502, 314.57946327)
+    .. controls (332.63905835, 354.81946227) and (336.22572493, 396.36612790) .. (353.90572449, 433.12612698)
+    .. controls (355.45239111, 435.01946026) and (353.79905782, 436.64612689) .. (352.65239118, 438.15279352)
+    .. controls (344.61239138, 431.49946035) and (339.75905817, 422.07279392) .. (335.77239161, 412.61946082)
+    .. controls (331.29239172, 401.53946110) and (322.95905859, 391.68612801) .. (322.25239194, 379.32612832)
+    .. controls (320.61239198, 363.93946204) and (319.06572536, 347.01946246) .. (308.14572563, 335.00612943)
+    .. controls (294.86572596, 321.71279643) and (275.35905978, 317.88612986) .. (257.25239357, 317.31279654)
+    .. controls (244.57239389, 317.01946321) and (231.38572755, 315.24612992) .. (219.17239452, 319.59279648)
+    .. controls (199.06572836, 326.67279631) and (183.39906208, 345.41946250) .. (180.62572882, 366.63279531)
+    .. controls (176.82572891, 393.49946130) and (177.69239556, 421.24612727) .. (185.07906204, 447.43279329)
+    .. controls (187.31906198, 454.19279312) and (188.82572861, 462.31279291) .. (195.33239512, 466.37945948)
+    .. controls (225.99906102, 487.49945895) and (267.79905997, 488.05945894) .. (300.91905914, 472.39279266)
+    .. controls (312.34572552, 465.79279283) and (313.77239216, 451.15279319) .. (315.38572545, 439.37946015)
+    .. controls (318.67905870, 442.36612675) and (320.02572533, 446.68612664) .. (322.13239195, 450.47279321)
+    .. controls (330.99905839, 465.63279283) and (344.74572471, 477.15279254) .. (354.63905780, 491.48612552)
+    .. controls (353.30572450, 493.36612547) and (350.90572456, 494.19279212) .. (349.06572461, 495.49945875)
+    .. controls (339.71905817, 486.91279230) and (328.70572512, 479.15279249) .. (315.81239210, 477.43279254)
+    .. controls (308.29239229, 476.05945924) and (300.81239248, 482.25945908) .. (300.05239250, 489.71279223)
+    .. controls (300.29239249, 493.88612546) and (303.38572575, 496.91279205) .. (305.75905902, 500.05945864)
+    .. controls (316.66572542, 513.49945830) and (329.54572509, 525.39279134) .. (338.87905819, 540.08612430)
+    .. controls (345.31905803, 550.57945737) and (348.10572463, 562.72612374) .. (351.02572456, 574.53945678)
+  (211.99906137, 380.15279497)
+    .. controls (213.41239466, 369.35279524) and (216.90572791, 357.49946220) .. (226.42572767, 351.12612903)
+    .. controls (238.31906071, 346.09946249) and (251.69239371, 345.40612917) .. (264.37239339, 347.04612913)
+    .. controls (269.66572659, 347.21946246) and (275.17239312, 348.29946243) .. (279.49239301, 351.53946235)
+    .. controls (289.10572611, 358.76612884) and (292.73239268, 371.93946184) .. (290.85239273, 383.45946155)
+    .. controls (264.70572672, 389.28612807) and (238.03906072, 383.60612822) .. (211.99906137, 380.15279497)
+  (220.85239448, 442.37946008)
+    .. controls (211.53239471, 434.35279361) and (209.46572810, 421.25946061) .. (209.38572810, 409.60612757)
+    .. controls (235.99906077, 409.13946091) and (262.61239343, 411.53946085) .. (289.21239277, 412.67279416)
+    .. controls (289.95905942, 420.89946062) and (289.99905942, 429.51279373) .. (286.93239283, 437.32612687)
+    .. controls (284.69239288, 443.07279340) and (279.74572634, 448.15279327) .. (273.42572650, 449.03279325)
+    .. controls (266.31906001, 450.25945988) and (259.06572686, 450.32612655) .. (251.90572704, 451.01945986)
+    .. controls (241.14572730, 450.67279321) and (229.57239426, 449.28612657) .. (220.85239448, 442.37946008)
+  (450.54572207, 484.52612569)
+    .. controls (463.87905507, 485.19279234) and (477.23905474, 484.59279236) .. (490.58572107, 484.91279235)
+    .. controls (506.99905399, 486.12612565) and (524.78572021, 485.08612568) .. (538.90571986, 475.72612591)
+    .. controls (546.77238633, 470.17945938) and (548.85238628, 459.53945965) .. (547.14571965, 450.56612654)
+    .. controls (546.15905301, 446.07279332) and (545.11905304, 440.93946012) .. (541.03905314, 438.16612685)
+    .. controls (528.78572011, 428.23279377) and (512.14572053, 427.39279379) .. (497.05238757, 427.35279379)
+    .. controls (466.02572168, 428.56612709) and (434.85238913, 425.24612717) .. (403.91905657, 428.87279375)
+    .. controls (397.62572339, 429.84612706) and (392.70572352, 435.05946026) .. (390.78572356, 440.95279345)
+    .. controls (388.53239029, 447.27279329) and (388.27905696, 454.15279312) .. (388.61239028, 460.79279295)
+    .. controls (390.07905691, 469.07279275) and (397.18572340, 474.97945926) .. (404.33238989, 478.60612584)
+    .. controls (418.87905619, 485.12612568) and (435.21238912, 482.07279242) .. (450.54572207, 484.52612569)
+  (415.59905628, 458.27279302)
+    .. controls (412.73238968, 456.53945973) and (413.49238966, 452.84612648) .. (413.25238967, 450.03279322)
+    .. controls (414.81238963, 448.92612658) and (416.33238959, 447.43279329) .. (418.39905621, 447.41945995)
+    .. controls (447.37238882, 446.75279330) and (476.33238809, 448.08612660) .. (505.29238737, 448.96612658)
+    .. controls (510.42572057, 449.33945991) and (515.23905379, 451.27279319) .. (520.01238700, 453.05945981)
+    .. controls (519.62572034, 456.45945973) and (518.38572037, 459.73945965) .. (515.66572044, 461.93945959)
+    .. controls (487.70572114, 462.57945957) and (459.71905517, 462.08612625) .. (431.78572254, 460.81945962)
+    .. controls (426.35905601, 460.52612629) and (420.41238949, 461.31279294) .. (415.59905628, 458.27279302)
+  (434.01238915,419.45946065)
+    .. controls (450.58572207, 421.12612728) and (467.27905498, 420.31279396) .. (483.87905457, 421.35279394)
+    .. controls (500.83905415, 422.59279391) and (517.85238705, 420.91279395) .. (534.57238664, 418.08612735)
+    .. controls (542.10571978, 417.03279405) and (547.46571965, 410.41946088) .. (549.71905292, 403.55279438)
+    .. controls (552.38571952, 395.33946126) and (553.19905284, 385.84612816) .. (548.91905294, 378.03279502)
+    .. controls (544.65238638, 370.49946188) and (536.97238658, 364.72612869) .. (528.23905346, 363.79279538)
+    .. controls (491.77238771, 359.75279548) and (454.99905529, 362.17946208) .. (418.42572287, 360.08612880)
+    .. controls (411.46572305, 358.71279550) and (403.94572323, 360.21946213) .. (398.41239004, 364.75279535)
+    .. controls (389.18572360, 372.11279517) and (385.21239037, 385.13946151) .. (388.13239030, 396.48612789)
+    .. controls (389.59905693, 400.72612779) and (392.98572351, 403.88612771) .. (395.93239010, 407.13946096)
+    .. controls (400.77238998, 412.32612750) and (407.02572316, 416.53946073) .. (414.21238964, 417.44612737)
+    .. controls (420.79905615, 418.16612735) and (427.35905598, 419.32612732) .. (434.01238915, 419.45946065)
+  (434.35905581, 393.23279464)
+    .. controls (427.49238931, 392.47279466) and (420.30572283, 393.41946130) .. (413.71905632, 390.99279470)
+    .. controls (413.31905633, 390.03279472) and (412.51905635, 388.11279477) .. (412.13238970, 387.15279479)
+    .. controls (413.11905634, 385.65946150) and (413.75905632, 383.40612822) .. (415.87905627, 383.20612823)
+    .. controls (424.22572273, 380.80612829) and (432.86572251, 383.40612822) .. (441.34572230, 383.33946156)
+    .. controls (465.45238836, 385.19279484) and (489.63905443, 385.57946150) .. (513.75905382, 387.15279479)
+    .. controls (517.51905373, 387.05946146) and (519.97238700, 390.40612805) .. (521.50572030, 393.41946130)
+    .. controls (509.73238726, 396.53946123) and (497.45238756, 395.43279459) .. (485.46572120, 394.75279460)
+    .. controls (468.42572162, 394.47279461) and (451.41238871, 393.20612798) .. (434.35905581, 393.23279464)
+  (409.93238975, 351.67279568)
+    .. controls (434.37238914, 354.71279560) and (459.05238852, 354.63279561) .. (483.62572124, 355.91279557)
+    .. controls (485.82572119, 350.48612904) and (483.75905457, 344.68612919) .. (479.95905467, 340.59279596)
+    .. controls (476.77238808, 336.71279605) and (472.75905485, 333.45946280) .. (470.66572157, 328.76612959)
+    .. controls (481.29238797, 329.64612956) and (491.83905437, 331.35279619) .. (502.50572077, 331.65946285)
+    .. controls (510.19905391, 333.91279612) and (513.45238716, 342.01946259) .. (519.03905369, 346.97946246)
+    .. controls (523.06572026, 349.80612906) and (527.89238680, 353.35279564) .. (533.07905334, 351.55279568)
+    .. controls (540.77238648, 348.75279575) and (544.71905305, 339.03279600) .. (542.39905311, 331.43279619)
+    .. controls (536.53238659, 309.72613006) and (530.59905340, 287.99279727) .. (522.91905359, 266.85946447)
+    .. controls (511.78572054, 262.21946458) and (499.50572085, 266.01946449) .. (487.89238780, 265.24613117)
+    .. controls (483.34572125, 264.73946452) and (478.39905471, 265.49946450) .. (474.30572148, 263.07279790)
+    .. controls (474.23905481, 261.36613127) and (474.34572147, 259.65946465) .. (474.65238813, 257.96613136)
+    .. controls (478.51905470, 242.35279841) and (481.25238797, 226.47279881) .. (485.98572118, 211.08613253)
+    .. controls (487.06572116, 204.00613271) and (487.67905447, 196.05946624) .. (484.25238789, 189.51279973)
+    .. controls (476.31905476, 184.71279985) and (465.85238835, 189.35279974) .. (460.89238848, 196.41946623)
+    .. controls (451.43905538, 210.80613254) and (446.58572217, 227.61946545) .. (443.34572225, 244.36613170)
+    .. controls (442.22572228, 249.07279825) and (441.66572229, 254.07279812) .. (438.85238903, 258.15279802)
+    .. controls (419.99905617, 259.47279799) and (405.93238985, 243.37946505) .. (387.73239031, 241.71279843)
+    .. controls (379.39905718, 242.19279842) and (375.17239062, 251.88613151) .. (376.69239058, 259.24613132)
+    .. controls (377.26572390, 264.15279787) and (381.23905714, 267.63279778) .. (385.10572371, 270.17946438)
+    .. controls (391.30572355, 273.80613096) and (398.41239004, 275.27279759) .. (405.15905654, 277.51279753)
+    .. controls (415.71905627, 280.60613079) and (426.22572268, 284.92613068) .. (437.39905573, 284.68613069)
+    .. controls (437.42572240, 291.23279719) and (437.54572239, 297.80613036) .. (436.70572242, 304.32613020)
+    .. controls (418.06572288, 303.93946354) and (402.18572328, 292.19279717) .. (383.91905707, 289.95279722)
+    .. controls (379.93239050, 289.39279724) and (376.61239058, 292.69946382) .. (375.42572395, 296.21946373)
+    .. controls (373.71905732, 301.08613028) and (374.13239065, 306.87279680) .. (376.93239058, 311.27279669)
+    .. controls (384.66572372, 317.89946319) and (395.17239012, 320.05946314) .. (405.07905654, 320.76612979)
+    .. controls (417.17238957, 322.07279642) and (429.94572258, 321.69946310) .. (441.02572231, 327.49946295)
+    .. controls (440.74572231, 329.12612958) and (440.49238899, 330.76612954) .. (440.25238899, 332.37946283)
+    .. controls (429.37238927, 333.83279613) and (417.82572289, 328.43279626) .. (407.47905648, 333.69946280)
+    .. controls (400.06572333, 337.24612937) and (401.46572330, 350.71279570) .. (409.93238975, 351.67279568)
+  (470.38572157, 306.49946348)
+    .. controls (470.22572158, 300.08613030) and (470.13238825, 293.64613046) .. (470.43905491, 287.23279729)
+    .. controls (479.91905467, 288.63279726) and (489.97238775, 287.17946396) .. (499.06572086, 290.41946388)
+    .. controls (502.74572076, 295.76613041) and (502.45238744, 302.59279691) .. (502.78572076, 308.79279675)
+    .. controls (491.93238770, 310.05946339) and (481.17238797, 307.24613012) .. (470.38572157, 306.49946348)}
+%    \end{macrocode}
+%
+% 文字“FUDAN UNIVERSITY”。
+%    \begin{macrocode}
+\def\fdulogo at emblem@F{%
+  ( 85.70573119, 304.00613021)
+    .. controls ( 90.07906441, 311.59279668) and (100.06573083, 314.24612995) .. (108.09239730, 311.64613001)
+    .. controls (103.82573074, 301.69946360) and (107.82573064, 290.84613053) .. (112.17239720, 281.68613076)
+    .. controls (119.41239701, 280.19279747) and (126.06573018, 284.45946403) .. (132.95906334, 285.88613066)
+    .. controls (137.94572988, 286.45946398) and (139.27906318, 291.77946384) .. (141.21239647, 295.53946375)
+    .. controls (142.14572978, 295.53946375) and (144.01239640, 295.52613042) .. (144.94572971, 295.52613042)
+    .. controls (148.49239629, 287.19279729) and (154.53239614, 279.35279749) .. (153.91906282, 269.83279773)
+    .. controls (149.89239625, 270.88613103) and (145.59906303, 272.07279767) .. (141.47906313, 270.85946437)
+    .. controls (125.89239685, 265.43279784) and (110.17239725, 260.40613130) .. ( 94.46573097, 255.35279809)
+    .. controls ( 89.01239777, 253.68613146) and ( 84.71906455, 249.71279823) .. ( 80.70573132, 245.81946499)
+    .. controls ( 73.74573149, 252.05946484) and ( 70.87906489, 261.25946461) .. ( 68.05239830, 269.87279773)
+    .. controls ( 64.50573172, 280.96613078) and ( 57.47906523, 291.33946386) .. ( 58.22573188, 303.44613022)
+    .. controls ( 62.19906511, 305.32613017) and ( 65.98573168, 307.81946344) .. ( 70.30573158, 308.83279675)
+    .. controls ( 74.57239814, 304.05946354) and ( 71.82573154, 297.28613037) .. ( 71.27906488, 291.71279718)
+    .. controls ( 72.87906484, 283.55279738) and ( 77.30573140, 276.27279757) .. ( 80.70573132, 268.76613109)
+    .. controls ( 88.21239779, 270.85946437) and ( 96.07906426, 272.48613099) .. (102.67906410, 276.83279755)
+    .. controls (102.70573077, 283.04613073) and ( 99.11906419, 288.36613060) .. ( 97.53239756, 294.19279712)
+    .. controls ( 95.97239760, 299.61946365) and ( 90.13239775, 301.51279693) .. ( 85.70573119, 304.00613021)}
+\def\fdulogo at emblem@U at i{%
+  ( 50.99906539, 392.96612798)
+    .. controls ( 54.67906530, 390.99279470) and ( 58.05239855, 387.84612811) .. ( 62.49239844, 387.95279477)
+    .. controls ( 76.31906476, 388.51279476) and ( 90.14573108, 389.13946141) .. (103.97239740, 389.69946140)
+    .. controls (110.18573058, 389.12612808) and (117.35906373, 390.09946139) .. (122.42573027, 385.65946150)
+    .. controls (129.65239676, 379.60612832) and (131.54573004, 369.59279523) .. (131.63906338, 360.61946212)
+    .. controls (131.19906339, 353.85946229) and (131.29239672, 346.59279581) .. (127.78573014, 340.53946263)
+    .. controls (126.01239685, 337.35279604) and (122.75906360, 335.13946276) .. (119.15906369, 334.52612944)
+    .. controls (101.30573080, 331.45946285) and ( 83.07906459, 332.15279617) .. ( 65.17239837, 329.57946290)
+    .. controls ( 61.19906514, 328.36612960) and ( 57.73239856, 324.13946304) .. ( 53.25239867, 325.91279632)
+    .. controls ( 51.42573205, 332.44612949) and ( 51.81239870, 339.35279599) .. ( 53.03906534, 345.95279582)
+    .. controls ( 74.42573147, 345.69946250) and ( 95.83906427, 346.47279581) .. (117.07906374, 348.97946241)
+    .. controls (119.71906367, 350.11279572) and (120.93239698, 353.23279564) .. (121.71906362, 355.83279558)
+    .. controls (123.27906358, 362.08612875) and (121.62573029, 368.72612859) .. (119.06573036, 374.47279511)
+    .. controls (117.10573041, 378.72612834) and (111.81239720, 378.75279500) .. (107.82573064, 378.64612834)
+    .. controls ( 92.15906436, 378.25946168) and ( 76.47906475, 377.84612836) .. ( 60.86573181, 376.51279506)
+    .. controls ( 58.59906520, 373.07279515) and ( 56.30573193, 366.75279530) .. ( 51.03906539, 368.65946192)
+    .. controls ( 50.62573207, 369.13946191) and ( 49.82573209, 370.11279522) .. ( 49.41239876, 370.59279521)
+    .. controls ( 47.93239880, 378.00612836) and ( 46.78573216, 386.17946148) .. ( 50.99906539, 392.96612798)}
+\def\fdulogo at emblem@D{%
+  (64.02573173, 473.6194593)
+    .. controls ( 78.02573138, 477.27279254) and ( 92.67906435, 474.61945927) .. (106.45239734, 471.21945936)
+    .. controls (111.21239722, 469.93945939) and (116.33239709, 469.28612607) .. (120.49239699, 466.43279281)
+    .. controls (127.27906348, 462.27279292) and (131.21239672, 454.53945978) .. (132.19906336, 446.80612664)
+    .. controls (133.41239666, 440.40612680) and (130.65239673, 434.23279362) .. (129.90573009, 427.96612711)
+    .. controls (128.55906345, 418.87279400) and (127.78573014, 408.80612759) .. (121.33239697, 401.63279443)
+    .. controls (114.69239713, 407.53946095) and (105.42573070, 407.83279428) .. ( 97.10573091, 409.17946091)
+    .. controls ( 80.67906465, 411.91279417) and ( 63.93239840, 417.91279402) .. ( 47.22573215, 413.43279414)
+    .. controls ( 48.17239880, 428.72612709) and ( 50.41239874, 443.89946004) .. ( 52.57239869, 459.05945966)
+    .. controls ( 53.59906533, 465.39279284) and ( 57.58573189, 471.75279268) .. ( 64.02573173, 473.61945930)
+  ( 67.21239832, 459.93945964)
+    .. controls ( 60.79906515, 452.17945983) and ( 60.07906516, 441.68612676) .. ( 58.89239853, 432.11279367)
+    .. controls ( 78.57239804, 427.71279378) and ( 98.43906421, 424.23279387) .. (118.22573038, 420.35279396)
+    .. controls (119.94573033, 426.56612714) and (122.21239694, 432.80612699) .. (122.02573028, 439.35279349)
+    .. controls (121.94573028, 443.07279340) and (121.23906364, 447.20612663) .. (118.14573038, 449.64612656)
+    .. controls (107.43906398, 459.37945965) and ( 92.27906436, 460.72612629) .. ( 78.53239804, 462.00612626)
+    .. controls ( 74.75906480, 461.88612626) and ( 69.99906492, 463.28612622) .. ( 67.21239832, 459.93945964)}
+\def\fdulogo at emblem@A{%
+  (107.38573065, 530.41945788)
+    .. controls (111.05239722, 526.09945799) and (114.81239713, 521.85945809) .. (118.71906370, 517.76612486)
+    .. controls (120.58573032, 520.44612479) and (122.43906361, 523.13945806) .. (124.26573023, 525.84612466)
+    .. controls (118.67906370, 527.49945795) and (113.02573051, 528.93945792) .. (107.38573065, 530.41945788)
+  ( 89.70573109, 544.55279086)
+    .. controls ( 91.74573104, 545.16612418) and ( 93.89239765, 544.69945752) .. ( 95.93239760, 544.41945753)
+    .. controls (115.55906378, 540.88612428) and (134.86572996, 535.79279108) .. (154.51906280, 532.49945783)
+    .. controls (160.10572933, 531.44612452) and (167.25239582, 533.00612448) .. (170.87906239, 527.48612462)
+    .. controls (168.58572912, 523.08612473) and (165.61239586, 519.11279149) .. (162.43906261, 515.32612492)
+    .. controls (157.33239607, 519.85945814) and (150.53239624, 521.39279144) .. (144.02572973, 522.69945807)
+    .. controls (139.35906318, 516.29945823) and (134.78572996, 509.81945839) .. (130.29239674, 503.28612522)
+    .. controls (132.79906335, 500.36612530) and (135.02572996, 497.21945871) .. (137.59906323, 494.33945878)
+    .. controls (140.86572981, 490.48612554) and (146.43906301, 490.76612554) .. (150.51906290, 488.17945893)
+    .. controls (145.53239636, 481.44612577) and (143.07906309, 472.28612600) .. (135.02572996, 468.32612610)
+    .. controls (120.83906365, 493.68612546) and (101.47906413, 515.53945825) .. ( 85.14573120, 539.44612432)
+    .. controls ( 86.58573117, 541.20612428) and ( 87.99906447, 543.03279090) .. ( 89.70573109, 544.55279086)}
+\def\fdulogo at emblem@N at i{%
+  (153.31906283, 624.63278886)
+    .. controls (156.06572943, 630.35278871) and (161.94572928, 633.68612196) .. (167.59906248, 635.97945524)
+    .. controls (179.55906218, 618.63278901) and (194.97239513, 604.12612270) .. (208.77239478, 588.31278976)
+    .. controls (212.86572801, 584.17945653) and (219.05239452, 578.93945667) .. (215.43906128, 572.49945683)
+    .. controls (210.57239474, 572.80612349) and (206.01239485, 574.61945677) .. (201.35906163, 575.87279008)
+    .. controls (183.07906209, 581.17945661) and (165.26572920, 588.16612310) .. (146.61239633, 592.09945634)
+    .. controls (156.63906275, 580.55278996) and (168.83906245, 571.23279019) .. (179.42572885, 560.24612380)
+    .. controls (183.30572875, 555.93945724) and (189.82572859, 557.67279053) .. (194.91906179, 556.27279057)
+    .. controls (192.39906186, 547.75279078) and (184.19906206, 542.28612425) .. (177.15906224, 537.52612437)
+    .. controls (172.38572902, 539.67279098) and (172.66572902, 546.39279081) .. (168.70572912, 549.51279073)
+    .. controls (157.05239607, 560.07279047) and (146.07906301, 571.32612352) .. (134.61239663, 582.08612325)
+    .. controls (131.57239671, 585.24612317) and (126.90573016, 585.17945651) .. (122.93239693, 586.12612315)
+    -- (119.852397, 589.08612308)
+    .. controls (124.66573022, 596.48612289) and (131.69239671, 601.99278942) .. (137.39906323, 608.63278926)
+    .. controls (154.65239613, 603.63278938) and (171.90572904, 598.63278951) .. (189.26572860, 594.00612296)
+    .. controls (183.41239541, 601.83278943) and (175.70572894, 608.04612260) .. (169.03906244, 615.16612243)
+    .. controls (165.26572920, 619.17945566) and (159.41239601, 617.56612237) .. (154.55906280, 618.04612235)
+    .. controls (152.37239619, 619.28612232) and (152.86572951, 622.55278891) .. (153.31906283, 624.63278886)}
+\def\fdulogo at emblem@U at ii{%
+  (258.77239353, 689.04612058)
+    .. controls (263.03906009, 694.20612045) and (270.21239324, 695.88612041) .. (276.62572642, 694.88612043)
+    .. controls (276.59905975, 690.75278720) and (275.33239312, 686.48612064) .. (276.51905975, 682.41945408)
+    .. controls (282.11905961, 665.88612116) and (289.74572609, 649.93945489) .. (293.02572601, 632.69945532)
+    .. controls (294.21239264, 626.47278881) and (291.66572604, 619.00612233) .. (285.58572619, 616.32612240)
+    .. controls (278.66572637, 613.15278914) and (271.43905988, 610.23278922) .. (263.81239340, 609.36612257)
+    .. controls (254.57239364, 608.23278927) and (245.35906053, 614.29945578) .. (241.86572729, 622.75278890)
+    .. controls (236.78572741, 634.63278861) and (232.09239420, 646.68612164) .. (227.06572766, 658.57945467)
+    .. controls (224.87906104, 664.13945454) and (217.69239456, 665.99278782) .. (216.43906126, 672.12612100)
+    .. controls (224.42572772, 675.79278758) and (232.47906085, 680.09945414) .. (241.53239396, 680.01945414)
+    .. controls (240.37239399, 674.65945427) and (235.95906077, 669.33945441) .. (238.66572737, 663.75278788)
+    .. controls (244.29239389, 650.99278820) and (248.97239378, 637.77945519) .. (255.50572695, 625.41945550)
+    .. controls (257.49239356, 621.37945560) and (262.10572678, 619.03278900) .. (266.54572667, 619.45945565)
+    .. controls (273.71905982, 620.08612230) and (280.29239299, 623.95278887) .. (285.22572620, 629.05945541)
+    .. controls (285.79905952, 636.09945524) and (282.41239294, 642.45945508) .. (280.02572633, 648.84612158)
+    .. controls (275.86572644, 658.92612133) and (272.35905986, 669.28612107) .. (267.86572664, 679.23278749)
+    .. controls (266.06572668, 683.59278738) and (260.81239348, 684.91278735) .. (258.77239353, 689.04612058)}
+\def\fdulogo at emblem@N at ii{%
+  (345.57239136, 707.99278677)
+    .. controls (351.03905789, 715.44611992) and (361.02572431, 712.24612000) .. (368.81239078, 712.56611999)
+    .. controls (367.34572415, 708.07278677) and (363.99905757, 704.12612020) .. (363.83905757, 699.28612032)
+    .. controls (365.07905754, 679.73945415) and (367.55905748, 660.25945463) .. (368.05239080, 640.65945512)
+    .. controls (368.63905745, 636.84612188) and (362.54572427, 633.19278864) .. (360.34572432, 637.16612188)
+    .. controls (349.19905794, 652.40612150) and (338.90572486, 668.24612110) .. (328.15905846, 683.76612071)
+    .. controls (326.07905851, 686.48612064) and (324.19905856, 690.83278720) .. (320.06572533, 690.09945389)
+    .. controls (319.41239201, 685.96612066) and (319.43905868, 681.75278743) .. (320.21239199, 677.63278753)
+    .. controls (322.09239195, 666.87278780) and (322.53239194, 655.93945474) .. (324.17239190, 645.15278834)
+    .. controls (325.58572519, 640.72612179) and (329.97239175, 638.20612185) .. (332.14572503, 634.19278862)
+    .. controls (326.27905851, 628.95278875) and (317.94572538, 628.97945541) .. (310.55905890, 628.49945543)
+    .. controls (305.85239235, 632.85945532) and (311.27905888, 638.31278851) .. (311.17239222, 643.37945505)
+    .. controls (310.53239224, 656.73945472) and (307.94572563, 669.89945439) .. (306.62572567, 683.19278739)
+    .. controls (306.25239234, 686.61945397) and (306.75905900, 690.33945388) .. (304.94572571, 693.44612047)
+    .. controls (302.85239243, 697.00612038) and (300.17239250, 700.25945363) .. (298.98572586, 704.29945353)
+    .. controls (306.07905901, 706.59278681) and (314.30572548, 709.81945339) .. (321.50572530, 706.32612015)
+    .. controls (335.55905828, 694.53945378) and (342.13239145, 675.93945424) .. (356.90572441, 664.89945452)
+    .. controls (356.95905774, 675.96612091) and (354.50572447, 686.87278730) .. (354.14572448, 697.93945369)
+    .. controls (353.74572449, 702.85945357) and (348.65239128, 704.89945352) .. (345.57239136, 707.99278677)}
+\def\fdulogo at emblem@I at i{%
+  (393.63905683, 711.84612001)
+    .. controls (401.78572329, 713.56611997) and (410.42572307, 711.12612003) .. (418.22572288, 708.49945343)
+    .. controls (419.49238951, 706.96612013) and (420.79905615, 704.49945353) .. (418.99905619, 702.80612024)
+    .. controls (417.34572290, 700.15278697) and (413.27905633, 699.49945365) .. (412.61238968, 696.23278707)
+    .. controls (410.30572308, 680.88612078) and (409.26572310, 665.35278784) .. (406.74572316, 650.01945489)
+    .. controls (407.15905649, 644.20612170) and (412.57238969, 639.67278848) .. (411.42572305, 633.57945530)
+    .. controls (402.90572326, 634.09945529) and (393.87905682, 633.55278863) .. (385.95905702, 637.24612187)
+    .. controls (382.23905711, 642.79278840) and (392.01239020, 645.07278835) .. (392.18572353, 650.45945488)
+    .. controls (394.46572347, 666.68612114) and (395.21239012, 683.08612073) .. (397.15905674, 699.33945366)
+    .. controls (396.67905675, 703.57945355) and (388.99905694, 707.79278678) .. (393.63905683, 711.84612001)}
+\def\fdulogo at emblem@V{%
+  (441.78572229, 703.56612022)
+    .. controls (448.49238879, 702.35278691) and (455.27905528, 701.24612027) .. (461.71905512, 698.95278700)
+    .. controls (463.45238841, 698.27278702) and (465.39905503, 697.71278703) .. (466.45238834, 696.01945374)
+    .. controls (466.90572166, 691.77945384) and (462.97238843, 688.87278725) .. (461.18572180, 685.39278734)
+    .. controls (460.79905515, 673.55278763) and (460.79905515, 661.69945460) .. (461.15905514, 649.85945489)
+    .. controls (460.83905515, 646.92612163) and (463.10572176, 644.73945502) .. (464.71905505, 642.59278841)
+    .. controls (473.78572149, 651.93945484) and (480.62572132, 663.12612123) .. (488.50572112, 673.44612097)
+    .. controls (491.79905437, 677.59278753) and (488.85238778, 683.29945406) .. (491.63905438, 687.63278728)
+    .. controls (498.55905420, 687.17945396) and (507.41238731, 686.35278731) .. (511.02572056, 679.44612082)
+    .. controls (503.19905409, 674.83278760) and (496.61238758, 668.47278776) .. (491.50572105, 660.96612128)
+    .. controls (480.99905464, 647.37945495) and (471.69238821, 632.75278865) .. (459.53238851, 620.52612229)
+    .. controls (456.67905525, 622.16612225) and (453.65238866, 623.43278889) .. (450.57238874, 624.53945553)
+    .. controls (448.95905544, 641.12612178) and (447.43905548, 657.71278803) .. (445.82572219, 674.29945428)
+    .. controls (445.07905554, 679.45945415) and (445.34572220, 684.76612069) .. (443.85238890, 689.79278723)
+    .. controls (442.51905560, 694.27278712) and (441.53238896, 698.87278700) .. (441.78572229, 703.56612022)}
+\def\fdulogo at emblem@E{%
+  (526.98572016, 668.59278776)
+    .. controls (530.17238675, 669.21945441) and (532.65238668, 666.80612114) .. (535.09238662, 665.19278784)
+    .. controls (547.45238631, 655.96612141) and (561.49238596, 649.28612157) .. (573.99905232, 640.27278847)
+    .. controls (578.85238553, 635.77945524) and (575.13238562, 627.07278880) .. (569.21238577, 625.37945550)
+    .. controls (565.73238586, 639.41945515) and (550.83905290, 644.23278837) .. (539.90571984, 651.08612153)
+    .. controls (535.22571995, 646.21945498) and (529.57238676, 641.72612176) .. (527.15905349, 635.21945526)
+    .. controls (529.51905343, 629.52612207) and (535.87905327, 627.33945546) .. (540.77238648, 624.31278886)
+    .. controls (546.33238634, 620.17945563) and (553.49238616, 625.57945550) .. (559.19905269, 622.00612226)
+    .. controls (557.10571941, 614.04612245) and (552.87905284, 605.24612267) .. (544.41238639, 602.64612274)
+    .. controls (542.49238644, 612.75278915) and (533.62571999, 619.48612232) .. (524.83905355, 623.59278888)
+    .. controls (521.87905362, 625.23278884) and (519.13238702, 622.43278891) .. (517.53238706, 620.20612230)
+    .. controls (514.90572046, 616.47278906) and (511.87905387, 612.81945582) .. (510.49238724, 608.40612260)
+    .. controls (509.59905393, 605.47278934) and (511.30572055, 602.61945607) .. (513.65238716, 600.96612278)
+    .. controls (519.42572035, 596.49945623) and (525.18572020, 591.80612301) .. (531.94572003, 588.91278975)
+    .. controls (536.98571991, 588.85945642) and (541.79905312, 590.76612304) .. (546.73238633, 591.63278968)
+    .. controls (550.63905290, 583.88612321) and (541.33238647, 575.32612342) .. (533.66571999, 578.12612335)
+    .. controls (521.42572030, 583.35278989) and (511.61238721, 592.63278966) .. (500.49238749, 599.72612281)
+    .. controls (495.63905428, 603.19278939) and (489.46572110, 605.95278932) .. (487.42572115, 612.03278917)
+    .. controls (495.85238760, 615.57945575) and (501.03905414, 623.43278889) .. (505.39905403, 631.05945536)
+    .. controls (511.77238721, 642.09945509) and (521.27905363, 651.56612152) .. (524.62572022, 664.15278787)
+    .. controls (525.11905354, 665.76612116) and (525.31905353, 667.68612111) .. (526.98572016, 668.59278776)}
+\def\fdulogo at emblem@R{%
+  (594.53238514, 624.33945553)
+    .. controls (604.35905156, 620.15278897) and (610.29238474, 610.84612253) .. (618.54571787, 604.51278936)
+    .. controls (626.91905099, 597.44612287) and (634.30571748, 587.99278977) .. (635.51905078, 576.76612339)
+    .. controls (636.38571742, 567.01945696) and (628.43905096, 557.52612387) .. (618.63905120, 556.84612388)
+    .. controls (612.81238468, 556.05945724) and (607.19905149, 559.85945714) .. (601.46571830, 557.91279052)
+    .. controls (599.13238502, 548.69945742) and (595.37238512, 539.60612432) .. (596.02571843, 529.89945789)
+    .. controls (596.55905175, 525.01945801) and (590.23905191, 525.37945800) .. (587.15905199, 526.69945797)
+    .. controls (579.63905218, 528.67279126) and (576.29238559, 538.76612434) .. (580.51905215, 545.09945751)
+    .. controls (584.26571873, 550.67279071) and (587.94571863, 556.56612389) .. (589.05238527, 563.32612372)
+    .. controls (589.65238526, 567.80612361) and (587.42571865, 572.03279017) .. (584.82571871, 575.51279008)
+    .. controls (584.02571873, 575.35279009) and (582.41238544, 575.04612343) .. (581.61238546, 574.88612343)
+    .. controls (576.83905225, 570.57945687) and (571.67905237, 566.53945698) .. (567.95905247, 561.21945711)
+    .. controls (567.26571915, 557.91279052) and (567.86571914, 553.57945730) .. (564.86571921, 551.31279069)
+    .. controls (561.95905262, 550.63279071) and (560.17238600, 553.53945730) .. (558.30571938, 555.21945726)
+    .. controls (554.73238613, 559.59279048) and (550.77238623, 563.65945705) .. (547.39905298, 568.17945693)
+    .. controls (545.87905302, 569.69945690) and (546.42571967, 571.96612351) .. (546.21238634, 573.85945679)
+    .. controls (549.82571959, 575.89945674) and (554.03905282, 574.81945677) .. (557.94571938, 575.44612342)
+    .. controls (561.51905263, 577.15279004) and (563.70571924, 580.59278996) .. (566.37238584, 583.36612322)
+    .. controls (574.14571898, 591.17945636) and (581.69238546, 599.20612283) .. (589.57238526, 606.91278930)
+    .. controls (594.50571847, 611.35278919) and (593.13238517, 618.48612234) .. (594.53238514, 624.33945553)
+  (592.65238518, 585.5394565)
+    .. controls (591.53238521, 581.93945659) and (593.85238515, 578.40612335) .. (596.10571843, 575.77945674)
+    .. controls (598.30571838, 573.47279014) and (600.42571832, 570.77945687) .. (603.53238491, 569.68612356)
+    .. controls (612.70571802, 566.64612364) and (624.47905105, 576.00612341) .. (621.10571781, 585.80612316)
+    .. controls (617.58571789, 591.11278969) and (613.22571800, 596.53945623) .. (606.97238483, 598.64612284)
+    .. controls (601.49238496, 595.15278959) and (596.38571842, 590.89945637) .. (592.65238518, 585.53945650)}
+\def\fdulogo at emblem@S{%
+  (638.23905071, 535.65945775)
+    .. controls (644.62571722, 539.87279098) and (653.18571700, 542.09945759) .. (660.43905016, 538.80612434)
+    .. controls (669.22571660, 534.85945777) and (674.87904979, 525.96612466) .. (676.86571641, 516.77945822)
+    .. controls (677.59904973, 511.88612501) and (677.78571639, 506.92612513) .. (678.57238304, 502.03279192)
+    .. controls (679.25238302, 497.08612538) and (683.17238292, 493.05945881) .. (682.65238293, 487.87279228)
+    .. controls (676.70571642, 483.33945906) and (669.71904992, 479.61945915) .. (661.99905012, 480.09945914)
+    .. controls (660.69238348, 487.24612562) and (669.39904993, 491.04612553) .. (669.37238327, 497.92612536)
+    .. controls (669.99904992, 507.01945846) and (667.61238331, 516.13945824) .. (663.41238341, 524.16612470)
+    .. controls (660.99905014, 528.63279126) and (654.89238363, 529.96612456) .. (650.89238373, 526.83279130)
+    .. controls (645.69238386, 512.75279165) and (649.19905044, 497.60612537) .. (650.66571707, 483.17945906)
+    .. controls (651.43905038, 478.12612585) and (648.98571711, 473.13945931) .. (645.39905053, 469.73945940)
+    .. controls (634.13238415, 460.97945961) and (616.05238460, 463.81945954) .. (607.49238481, 475.07279260)
+    .. controls (599.98571833, 484.69945902) and (597.97238505, 497.76612536) .. (599.85238500, 509.60612507)
+    .. controls (597.17238507, 510.68612504) and (594.49238514, 511.72612501) .. (591.83905187, 512.81945832)
+    .. controls (591.82571854, 514.47279161) and (591.81238520, 516.12612490) .. (591.81238520, 517.77945819)
+    .. controls (599.25238502, 521.72612476) and (606.35905151, 526.57945797) .. (614.50571797, 528.99279125)
+    .. controls (618.49238454, 530.51279121) and (621.70571779, 524.55279136) .. (618.77238453, 521.79279143)
+    .. controls (615.51905128, 517.81945819) and (610.41238474, 514.41945828) .. (610.30571808, 508.77945842)
+    .. controls (609.93238475, 501.56612527) and (609.59905143, 493.80612546) .. (613.13238467, 487.24612562)
+    .. controls (615.38571795, 482.81945907) and (620.01238450, 479.41945915) .. (625.03905104, 479.24612582)
+    .. controls (630.01238425, 480.01945914) and (632.85238418, 485.43279234) .. (633.13238417, 490.04612555)
+    .. controls (632.71905085, 499.36612532) and (629.99905092, 508.51279176) .. (630.45238424, 517.88612486)
+    .. controls (630.45238424, 524.44612469) and (632.39905086, 531.89945784) .. (638.23905071, 535.65945775)}
+\def\fdulogo at emblem@I at ii{%
+  (693.17238267, 460.65945962)
+    .. controls (695.39904928, 458.89945967) and (698.14571588, 457.08612638) .. (698.39904921, 453.96612646)
+    .. controls (700.21238249, 444.25946003) and (703.63904908, 434.81946027) .. (704.10571573, 424.88612718)
+    .. controls (702.42571577, 424.35279386) and (700.77238248, 423.80612721) .. (699.13238252, 423.24612722)
+    .. controls (696.71904925, 426.16612715) and (694.93238263, 430.25946038) .. (690.86571606, 431.11279369)
+    .. controls (676.33238309, 429.47279374) and (662.25238344, 425.27279384) .. (647.78571714, 423.21946056)
+    .. controls (642.43905061, 422.31279391) and (636.83905075, 421.92612726) .. (632.07905086, 419.04612733)
+    .. controls (631.17238422, 414.68612744) and (630.98571756, 409.28612757) .. (626.54571767, 406.89946097)
+    .. controls (625.27905103, 407.88612761) and (623.54571774, 408.52612759) .. (622.90571776, 410.12612755)
+    .. controls (618.81238453, 419.75279398) and (617.74571789, 430.27279372) .. (615.85238460, 440.47279346)
+    .. controls (615.19905129, 444.11279337) and (616.45238459, 449.79279323) .. (621.06571781, 449.76612656)
+    .. controls (626.46571767, 447.93945994) and (625.82571769, 440.51279346) .. (630.81238423, 438.12612685)
+    .. controls (649.21238377, 441.15279344) and (667.62571664, 444.21946003) .. (685.87904952, 447.96612661)
+    .. controls (691.09238272, 449.81945989) and (691.13238272, 456.33945973) .. (693.17238267, 460.65945962)}
+\def\fdulogo at emblem@T{%
+  (687.11904949, 391.40612802)
+    .. controls (692.18571603, 396.44612789) and (700.15904916, 398.43279451) .. (706.61238233, 394.81946127)
+    .. controls (706.78571566, 374.25946178) and (705.19904904, 353.75279563) .. (703.82571574, 333.25946281)
+    .. controls (700.34571582, 329.09946291) and (694.30571598, 327.64612961) .. (689.37238277, 329.96612956)
+    .. controls (688.77238278, 331.28612952) and (686.81238283, 333.12612948) .. (688.65238278, 334.40612945)
+    .. controls (693.03904934, 338.87279600) and (696.07904926, 344.75279585) .. (696.21238259, 351.11279569)
+    .. controls (676.75904975, 354.25946228) and (656.98571691, 354.79279560) .. (637.30571740, 354.53946228)
+    .. controls (634.55905080, 351.79279568) and (633.61238416, 346.79279580) .. (629.33238427, 345.80612916)
+    .. controls (626.47905100, 344.97946251) and (624.83905105, 348.13946244) .. (624.63905105, 350.49946238)
+    .. controls (623.18571775, 359.37946215) and (623.46571775, 368.61946192) .. (625.85238435, 377.31279504)
+    .. controls (626.31905101, 378.97946166) and (627.93238430, 379.81946164) .. (629.11905094, 380.89946162)
+    .. controls (632.85238418, 378.88612833) and (634.81238413, 374.55279511) .. (638.83905070, 373.08612848)
+    .. controls (652.43905036, 371.25946186) and (666.17238335, 370.56612854) .. (679.85238300, 369.60612857)
+    .. controls (683.91904957, 369.20612858) and (688.18571613, 368.07279527) .. (692.10571603, 369.79279523)
+    .. controls (696.71904925, 371.05946186) and (698.61238253, 377.13946171) .. (696.22571593, 381.05946161)
+    .. controls (694.06571598, 385.20612818) and (690.09238275, 387.91279477) .. (687.11904949, 391.40612802)}
+\def\fdulogo at emblem@Y{%
+  (617.57238456, 308.67279676)
+    .. controls (618.33238454, 308.65946342) and (619.85238450, 308.63279676) .. (620.61238448, 308.63279676)
+    .. controls (623.38571775, 305.37946350) and (624.41238439, 301.15279694) .. (625.58571769, 297.15279704)
+    .. controls (633.54571749, 294.43279711) and (641.94571728, 290.29946388) .. (650.53238374, 292.67279716)
+    .. controls (660.39905016, 294.88613043) and (670.37238324, 296.63279706) .. (680.22571633, 298.93946367)
+    .. controls (686.91904949, 299.96613031) and (690.85238273, 306.43279681) .. (697.30571590, 308.08613010)
+    .. controls (698.06571588, 299.28613032) and (694.90571596, 290.91279720) .. (692.13238270, 282.73946407)
+    .. controls (691.75904937, 281.24613077) and (690.83904940, 280.21946413) .. (689.37238277, 279.64613081)
+    .. controls (686.74571616, 280.49946413) and (685.17238287, 282.87279740) .. (683.39904958, 284.80613069)
+    .. controls (673.79904982, 282.88613073) and (664.23905006, 280.71279745) .. (654.85238363, 277.89946419)
+    .. controls (662.07905011, 271.45946435) and (667.39904998, 262.52613124) .. (676.59904975, 258.60613134)
+    .. controls (678.67904970, 257.53946470) and (681.47904963, 257.63279803) .. (683.17238292, 255.99279807)
+    .. controls (684.90571621, 248.51279826) and (682.79904960, 238.67279851) .. (674.89238313, 235.51279858)
+    .. controls (669.46571660, 249.71279823) and (655.46571695, 257.24613137) .. (646.86571716, 269.09946441)
+    .. controls (641.23905064, 276.16613090) and (631.89238420, 278.01946419) .. (623.53238441, 279.72613081)
+    .. controls (617.95905122, 280.92613078) and (613.19905134, 272.47279766) .. (607.85238480, 276.92613088)
+    .. controls (608.41238479, 285.40613067) and (611.27905138, 293.47279714) .. (613.22571800, 301.68613026)
+    .. controls (613.77238466, 304.49946353) and (615.46571795, 306.80613014) .. (617.57238456, 308.67279676)}
+%    \end{macrocode}
+%
+% 年份“1905”。
+%    \begin{macrocode}
+\def\fdulogo at emblem@one{%
+  (210.6390614,174.63280011)
+    .. controls (216.67906125, 175.21946676) and (221.81239445, 178.87280000) .. (227.55906098, 180.56613329)
+    .. controls (232.15906086, 177.80613336) and (236.70572742, 174.56613344) .. (239.37239402, 169.75280023)
+    .. controls (238.14572738, 166.88613363) and (236.77239408, 164.03280037) .. (234.83906080, 161.55280043)
+    .. controls (221.77239446, 143.96613421) and (209.17239477, 126.04613465) .. (196.18572843, 108.40613510)
+    .. controls (194.77239513, 106.56613514) and (193.47906183, 104.56613519) .. (191.71906187, 103.00613523)
+    .. controls (187.97239530, 101.52613527) and (184.55906205, 104.48613519) .. (181.98572878, 106.81946847)
+    .. controls (179.35906218, 109.25946841) and (175.50572895, 112.13946834) .. (177.26572890, 116.21946823)
+    .. controls (185.81239535, 129.96613456) and (196.33239509, 142.37946758) .. (204.86572821, 156.15280057)
+    .. controls (200.26572833, 159.91280047) and (195.41239511, 163.57946705) .. (191.87906187, 168.41946693)
+    .. controls (191.99906187, 173.07280015) and (195.02572846, 177.91280002) .. (199.63906168, 179.32613332)
+    .. controls (203.25239492, 177.65946670) and (206.67906150, 175.33946676) .. (210.63906140, 174.63280011)}
+\def\fdulogo at emblem@nine{%
+  (293.61239266, 125.28613467)
+    .. controls (287.66572614, 121.88613476) and (283.09239292, 113.28613497) .. (287.54572614, 106.99280180)
+    .. controls (291.95905937, 100.09946864) and (301.35905913,  98.67280201) .. (308.67905895, 100.99280195)
+    .. controls (313.38572550, 103.20613523) and (316.67905875, 108.65946842) .. (315.75905877, 113.87280163)
+    .. controls (314.18572548, 118.32613485) and (309.63905893, 120.55280146) .. (305.89239235, 122.89946807)
+    .. controls (302.19905911, 124.79280135) and (297.74572589, 127.05946796) .. (293.61239266, 125.28613467)
+  (283.21239292, 137.61946770)
+    .. controls (289.81239275, 139.92613431) and (297.09239257, 139.31280099) .. (303.86572574, 138.12613435)
+    .. controls (314.97239213, 136.04613440) and (326.23905851, 129.27280124) .. (330.05239175, 118.11280152)
+    .. controls (332.94572501, 105.13946851) and (328.85239178,  92.08613550) .. (324.65239188,  79.88613581)
+    .. controls (321.90572529,  69.68613606) and (312.95905884,  62.39280291) .. (303.49239241,  58.59280301)
+    .. controls (296.41239259,  55.49946975) and (288.41239279,  57.07280305) .. (281.25239297,  59.04613633)
+    .. controls (270.17239325,  62.33946958) and (260.70572682,  71.61946935) .. (258.78572686,  83.21946906)
+    .. controls (258.14572688,  88.32613560) and (261.02572681,  92.88613548) .. (265.11906004,  95.67280208)
+    .. controls (271.74572654,  93.39280214) and (272.38572652,  85.77946899) .. (275.58572644,  80.55280246)
+    .. controls (281.01239297,  73.16613598) and (292.19905936,  70.15280272) .. (300.31905916,  74.83280260)
+    .. controls (303.61239241,  76.65946922) and (306.47905900,  80.12613580) .. (306.43905901,  84.04613570)
+    .. controls (296.22572593,  85.09946901) and (285.02572621,  86.75280230) .. (277.26572640,  94.09946879)
+    .. controls (271.26572655, 100.64613529) and (266.10572668, 110.17946838) .. (269.73239326, 119.12613483)
+    .. controls (272.42572652, 126.23280132) and (275.69239311, 134.44613444) .. (283.21239292, 137.61946770)}
+\def\fdulogo at emblem@zero{%
+  (411.01238972, 111.88613501)
+    .. controls (404.38572322, 109.99280172) and (402.09238995, 102.60613524) .. (401.35905663,  96.49946873)
+    .. controls (400.65238998,  86.93946897) and (400.89238998,  76.60613589) .. (406.01238985,  68.15280277)
+    .. controls (408.30572313,  64.69946952) and (411.50572305,  61.23280294) .. (415.78572294,  60.48613629)
+    .. controls (424.71905605,  58.92613633) and (433.35905583,  66.55280281) .. (434.53238914,  75.23280259)
+    .. controls (435.43905578,  84.84613568) and (432.83905585,  94.45946878) .. (429.02572261, 103.20613523)
+    .. controls (425.89238935, 109.53946840) and (418.07905621, 114.51280161) .. (411.01238972, 111.88613501)
+  (405.74572319, 127.83280128)
+    .. controls (415.94572293, 129.47280124) and (427.99905597, 129.88613456) .. (436.03905577, 122.24613475)
+    .. controls (447.95905547, 108.76613509) and (453.13238867,  90.09946889) .. (451.81238870,  72.33946933)
+    .. controls (450.19905541,  58.21946968) and (438.79905570,  43.93947004) .. (423.73238941,  43.91280337)
+    .. controls (411.93238970,  44.16613670) and (398.71905670,  47.67280328) .. (391.73239021,  57.95280302)
+    .. controls (384.51905705,  68.47280276) and (383.82572374,  81.67280243) .. (382.77239043,  93.95280212)
+    .. controls (382.50572377, 108.28613510) and (390.71905690, 124.67280136) .. (405.74572319, 127.83280128)}
+\def\fdulogo at emblem@five{%
+  (521.86572029, 172.09946684)
+    .. controls (529.15905344, 177.17946671) and (539.82571984, 165.40613367) .. (533.55905333, 158.84613383)
+    .. controls (531.37238672, 156.05946724) and (528.26572013, 154.12613395) .. (525.10572021, 152.59280066)
+    .. controls (518.22572038, 149.35280074) and (511.30572055, 146.17946748) .. (504.49238739, 142.79280090)
+    .. controls (505.89238735, 138.48613434) and (507.39905398, 134.20613445) .. (509.29238727, 130.08613455)
+    .. controls (513.69238716, 132.57946782) and (518.31905371, 134.84613443) .. (521.93238695, 138.48613434)
+    .. controls (531.25238672, 148.75280075) and (549.73238626, 147.07280080) .. (557.66571939, 135.93946774)
+    .. controls (564.54571922, 127.15280129) and (566.22571918, 114.91280160) .. (563.05238592, 104.33946853)
+    .. controls (560.75905265,  96.36613540) and (554.18571948,  90.75280220) .. (547.63905298,  86.16613565)
+    .. controls (536.71905325,  79.13946916) and (521.10572031,  79.37946915) .. (511.09238722,  87.96613561)
+    .. controls (506.94572066,  92.15280217) and (511.54572054,  97.87280203) .. (515.22572045, 100.51280196)
+    .. controls (522.31905361, 102.40613525) and (528.73238678,  95.71280208) .. (535.89238660,  98.12613535)
+    .. controls (541.66571979, 101.15280194) and (546.25238634, 106.04613515) .. (549.17238627, 111.84613501)
+    .. controls (550.74571956, 119.79280148) and (545.49238636, 128.76613459) .. (537.27905323, 130.08613455)
+    .. controls (532.50572002, 130.93946787) and (529.15905344, 126.76613464) .. (525.82572019, 124.11280137)
+    .. controls (519.34572035, 118.00613486) and (511.38572055, 113.83280163) .. (503.55905408, 109.76613506)
+    .. controls (496.57238759, 123.39280139) and (487.81238780, 136.40613440) .. (484.21238789, 151.49946735)
+    .. controls (496.54572092, 158.76613384) and (509.27905393, 165.29946701) .. (521.86572029, 172.09946684)}
+%    \end{macrocode}
+%
+% 内环。
+%    \begin{macrocode}
+\def\fdulogo at emblem@ring at inner@i{%
+  (361.25239097, 616.49945573)
+    .. controls (394.65239013, 618.07278902) and (428.63905595, 615.12612243) .. (460.33238849, 603.93945604)
+    .. controls (533.42572000, 578.20612335) and (592.38571852, 515.31279159) .. (612.77238468, 440.47279346)
+    .. controls (618.50571787, 421.04612728) and (619.83905117, 400.69946112) .. (620.91905114, 380.57946162)
+    .. controls (621.31905113, 350.97946236) and (617.47905123, 321.11279644) .. (607.53238481, 293.12613048)
+    .. controls (581.78571879, 222.35279891) and (521.59905363, 164.84613368) .. (449.29238877, 143.36613422)
+    .. controls (411.30572305, 132.47280116) and (370.74572406, 131.20613453) .. (331.93239170, 138.13946769)
+    .. controls (299.90572584, 143.89946754) and (269.06572661, 156.40613390) .. (242.41239394, 175.12613343)
+    .. controls (198.49239504, 205.71279933) and (163.47906258, 250.28613155) .. (147.89239630, 301.81946359)
+    .. controls (138.98572986, 331.20612953) and (135.87906327, 362.25946208) .. (138.06572988, 392.84612798)
+    .. controls (139.77239651, 425.36612717) and (148.53239629, 457.45945970) .. (163.30572925, 486.47279231)
+    .. controls (189.25239527, 536.12612440) and (232.15906086, 577.09945671) .. (283.82572624, 599.16612283)
+    .. controls (308.26572563, 609.68612256) and (334.66572497, 615.49945575) .. (361.25239097, 616.49945573)}
+\def\fdulogo at emblem@ring at inner@ii{%
+  (349.85239125, 596.91278955)
+    .. controls (326.69239183, 594.15278962) and (303.94572573, 587.73945645) .. (282.86572626, 577.75279003)
+    .. controls (223.78572774, 548.76612409) and (176.71906225, 493.71279213) .. (161.78572929, 429.11279374)
+    .. controls (149.99906292, 378.21946168) and (154.90572946, 323.12612973) .. (178.09239555, 276.07279757)
+    .. controls (192.53239519, 247.36613162) and (213.46572800, 222.12613225) .. (238.09239405, 201.59279943)
+    .. controls (263.25239342, 180.57946662) and (293.22572600, 165.37946700) .. (325.15905854, 157.91280052)
+    .. controls (375.03905729, 145.87280083) and (429.05238927, 150.95280070) .. (475.53238811, 172.84613348)
+    .. controls (499.71905417, 184.55279986) and (521.54572029, 200.91279945) .. (540.18571983, 220.23279897)
+    .. controls (557.53238606, 238.29946518) and (572.49238569, 258.88613133) .. (582.82571876, 281.77946409)
+    .. controls (605.98571818, 332.51279616) and (608.94571811, 391.84612801) .. (592.09238520, 444.89946002)
+    .. controls (582.54571877, 475.56612592) and (565.71905252, 503.83279188) .. (543.55905308, 527.05945796)
+    .. controls (521.82572029, 550.60612404) and (495.25238762, 569.84612356) .. (465.65238836, 582.24612325)
+    .. controls (449.98572208, 588.81945642) and (433.39905583, 592.84612298) .. (416.79905625, 596.25945623)
+    .. controls (394.66572347, 599.43278949) and (372.03905737, 599.48612282) .. (349.85239125, 596.91278955)}
+%    \end{macrocode}
+%
+% 外环。
+%    \begin{macrocode}
+\def\fdulogo at emblem@ring at outer@i{%
+  (368.57239079, 736.61945272)
+    -- (390.89239023, 736.61945272)
+    .. controls (400.37238999, 735.31278609) and (409.98572308, 735.60611942) .. (419.45238951, 734.27278612)
+    .. controls (471.66572154, 729.01945291) and (522.85238693, 712.13945334) .. (567.25238582, 684.00612071)
+    .. controls (616.45238459, 652.68612149) and (658.38571687, 609.85945589) .. (688.45238279, 559.87279048)
+    .. controls (704.79904905, 532.39279116) and (717.45238206, 502.64612524) .. (725.18571520, 471.59279268)
+    .. controls (732.34571502, 444.25946003) and (735.50571495, 416.08612740) .. (737.17238157, 387.93946144)
+    -- (737.17238157, 364.21946203)
+    .. controls (736.39904826, 358.60612884) and (736.11904826, 352.95279565) .. (735.83904827, 347.29946246)
+    .. controls (731.38571505, 289.00613058) and (713.05238217, 231.36613202) .. (680.23904966, 182.75279990)
+    .. controls (638.58571737, 120.48613479) and (578.70571887,  69.67280273) .. (508.59905395,  42.48613674)
+    .. controls (471.46572155,  28.04613710) and (431.73238921,  21.32613727) .. (392.06572353,  19.28613732)
+    -- (362.01239095,  19.28613732)
+    .. controls (301.01239247,  21.79280393) and (240.03906067,  38.79280350) .. (188.59906195,  72.15280267)
+    .. controls (137.71906322, 104.44613519) and ( 94.53239764, 148.89946742) .. ( 64.27906506, 201.05946611)
+    .. controls ( 39.81239900, 242.93946507) and ( 25.45239936, 290.41946388) .. ( 20.70573282, 338.60612934)
+    .. controls ( 16.61239958, 377.51279503) and ( 19.02573286, 416.99279405) .. ( 26.67906600, 455.32612642)
+    .. controls ( 38.51906570, 513.71279163) and ( 66.61239833, 568.51279026) .. (106.13239735, 612.99278915)
+    .. controls (125.09239687, 634.91278860) and (146.65239633, 654.56612144) .. (170.07906241, 671.60612102)
+    .. controls (218.11906121, 706.80612014) and (275.75905977, 728.24611960) .. (334.91905829, 734.28611945)
+    .. controls (346.09239135, 735.72611941) and (357.37239107, 735.51278608) .. (368.57239079, 736.61945272)}
+\def\fdulogo at emblem@ring at outer@ii{%
+  (354.53239114, 717.84611986)
+    .. controls (321.10572531, 715.17945326) and (287.69239281, 709.16612008) .. (256.34572692, 696.99278705)
+    .. controls (208.13239480, 678.63278751) and (164.83906255, 648.37945493) .. (129.51906343, 610.92612253)
+    .. controls (106.35906401, 586.08612315) and ( 86.22573118, 558.24612385) .. ( 71.11906489, 527.77945794)
+    .. controls ( 36.07906576, 456.27279307) and ( 28.85239928, 372.71279515) .. ( 46.18573218, 295.37946375)
+    .. controls ( 61.50573180, 225.76613216) and (102.38573077, 163.29946706) .. (155.91906277, 116.89946822)
+    .. controls (196.98572841,  80.45946913) and (247.34572715,  54.51280311) .. (301.01239247,  42.79280340)
+    .. controls (383.25239042,  25.40613717) and (472.61238818,  34.95280360) .. (546.25238634,  76.84613588)
+    .. controls (609.82571809, 113.67280163) and (662.57238344, 169.83280023) .. (692.95904934, 236.93946522)
+    .. controls (715.01238212, 285.51279733) and (723.18571525, 339.56612932) .. (721.19904864, 392.63279466)
+    .. controls (718.73238203, 452.08612650) and (701.41238246, 511.41945835) .. (668.46571662, 561.23279044)
+    .. controls (631.46571755, 617.03278905) and (579.43905218, 663.59278788) .. (517.91905372, 690.64612054)
+    .. controls (466.78572166, 713.11278664) and (410.05238975, 721.16611978) .. (354.53239114, 717.84611986)}
+%    \end{macrocode}
+%
+% \paragraph{校徽(重修版)}
+%
+% 核心图案。
+%    \begin{macrocode}
+\def\fdulogo at emblem@new at kernel{%
+  (284.68492622, 377.38587424)
+    .. controls (296.85159258, 374.46587432) and (317.35159207, 372.84454102) .. (328.85159178, 381.34454081)
+    .. controls (340.07825816, 389.64187394) and (342.01825812, 410.17787342) .. (336.41292492, 413.51120667)
+    .. controls (327.05025849, 419.07920653) and (273.18492650, 410.84454007) .. (263.01826009, 410.17787342)
+    .. controls (261.01826014, 399.01120704) and (271.06492656, 380.65520750) .. (284.68492622, 377.38587424)
+  (336.35159159, 441.01120599)
+    .. controls (336.35159159, 441.01120599) and (337.68492489, 455.17787230) .. (334.68625830, 462.27653879)
+    .. controls (329.13025844, 475.43120513) and (323.68492524, 480.17253834) .. (299.01825919, 480.17253834)
+    .. controls (282.14492628, 480.17253834) and (267.18492665, 476.01120511) .. (261.31159347, 461.96720546)
+    .. controls (257.23692690, 452.22453904) and (258.30759354, 437.71253940) .. (262.91292676, 437.06587275)
+    .. controls (270.44892657, 436.00720611) and (336.35159159, 441.01120599) .. (336.35159159, 441.01120599)
+  (246.59292717, 497.03520459)
+    .. controls (259.37426018, 506.15653769) and (276.74092641, 512.23387087) .. (300.29559249, 512.23387087)
+    .. controls (348.32492463, 512.23387087) and (363.12892426, 484.62187156) .. (364.18492423, 471.84453855)
+    -- (364.78892421, 471.84453855)
+    .. controls (368.40759079, 488.78853813) and (395.43425678, 511.51120422) .. (399.44359001,521.76720397)
+    .. controls (400.91825664, 525.54053721) and (395.33292345, 527.64187049) .. (392.01825687,525.67787054)
+    .. controls (389.01825694, 523.90053725) and (372.68492402, 506.42853768) .. (360.51825765,506.42853768)
+    .. controls (354.64359113, 506.42853768) and (344.76892471, 511.67787089) .. (344.76892471,520.02320401)
+    .. controls (344.76892471, 527.51120382) and (366.72892417, 547.37253666) .. (375.35159062,559.84453635)
+    .. controls (381.31959047, 568.47653613) and (388.58492362, 581.05386915) .. (391.51825688,595.84453545)
+    .. controls (395.51825678, 616.01120161) and (404.51825655, 623.17786810) .. (415.85158960,623.17786810)
+    .. controls (424.46225606, 623.17786810) and (437.85158905, 613.67786834) .. (429.85158925,588.01120231)
+    .. controls (425.73692269, 574.80853597) and (419.22092285, 550.54453658) .. (430.35158924,549.51120327)
+    .. controls (446.51825550, 548.01120331) and (563.19691925, 564.04320291) .. (582.07425211,556.90053642)
+    .. controls (592.35158519, 553.01120319) and (602.68491827, 540.51120350) .. (592.74091851,526.23387052)
+    .. controls (590.55558524, 523.09653727) and (546.51825300, 529.51120377) .. (514.51825380,529.51120377)
+    .. controls (502.89825409, 529.51120377) and (439.94758900, 527.47387049) .. (429.24358927,513.09253752)
+    .. controls (418.18492288, 498.23387122) and (433.51825583, 482.17787162) .. (433.51825583,471.17787190)
+    .. controls (433.51825583, 452.84453902) and (415.35158962, 427.34453966) .. (415.35158962,364.34454124)
+    .. controls (415.35158962, 329.84320877) and (418.18492288, 298.67787621) .. (422.96225609,221.78854480)
+    .. controls (424.97425604, 189.40721228) and (394.85159013, 194.47654548) .. (389.85159025,223.34454476)
+    .. controls (386.22225701, 244.30187757) and (382.29559044, 297.12187625) .. (382.07425711,314.23387582)
+    .. controls (336.68492492, 315.84454245) and (279.18492635, 309.56720927) .. (249.18492710,302.23387612)
+    .. controls (241.04359397, 300.24320951) and (230.30226091, 322.72854228) .. (232.73692751,328.19387547)
+    .. controls (237.18492740, 338.17787522) and (304.07292573, 341.84587513) .. (337.85159155,344.01120841)
+    .. controls (352.71159118, 344.96454172) and (362.68492427, 344.77654173) .. (382.07425711,343.78854175)
+    .. controls (382.24359044, 356.26587477) and (382.09159045, 361.90454130) .. (383.18492375,378.67787421)
+    .. controls (384.31292373, 395.98454045) and (387.89425697, 424.28187307) .. (391.45825688,437.71787274)
+    .. controls (396.07425676, 455.12187230) and (405.51825653, 466.34453869) .. (400.96225664,468.67787196)
+    .. controls (394.59159014, 471.94053855) and (374.85159063, 431.14587290) .. (370.35159074,409.49120677)
+    .. controls (367.44625748, 395.51120712) and (371.86359070, 373.07254102) .. (349.62892459,358.67787471)
+    .. controls (331.35159172, 346.84454167) and (282.04359295, 338.87787521) .. (256.35159359,354.84454147)
+    .. controls (238.74092736, 365.78854120) and (226.51826100, 381.78854080) .. (226.51826100,426.23387302)
+    .. controls (226.51826100, 452.40053904) and (225.85159435, 482.23387162) .. (246.59292717,497.03520459)
+  (519.40705368, 324.28907557)
+    .. controls (520.27772033, 321.35440898) and (522.26838694, 319.59440902) .. (524.01905357, 319.40640903)
+    .. controls (527.39772015, 319.04240904) and (544.90705304, 319.34507569) .. (546.76838633, 320.92774232)
+    .. controls (552.93238618, 326.17174219) and (554.93505279, 341.67840847) .. (551.93905287, 343.33840843)
+    .. controls (549.50438626, 344.68640839) and (532.46305336, 343.27307510) .. (523.78705357, 340.68507516)
+    .. controls (522.12038695, 340.18907517) and (519.07372036, 338.67840854) .. (518.75372036, 335.68107529)
+    .. controls (518.29638704, 331.41174206) and (518.48438704, 327.39974216) .. (519.40705368, 324.28907557)
+  (452.62972202, 377.89974090)
+    .. controls (454.40705531, 380.67840749) and (460.51772182, 383.39974076) .. (470.18438825, 383.89974075)
+    .. controls (482.77238793, 384.55174073) and (526.92305349, 388.98507395) .. (532.97372001, 387.58640732)
+    .. controls (536.18438660, 386.84507401) and (534.01771998, 379.17840753) .. (531.37772005, 375.70774095)
+    .. controls (529.41638676, 373.13040768) and (525.70172019, 369.17707445) .. (524.01772023, 366.92774117)
+    .. controls (522.12572028, 364.39974124) and (521.15772030, 361.51707464) .. (523.38305358, 360.27574134)
+    .. controls (525.85105352, 358.89974137) and (546.79638633, 361.95574130) .. (553.22705284, 363.09440793)
+    .. controls (558.79771936, 364.08107458) and (560.80971931, 369.80240777) .. (563.93505257, 374.26107432)
+    .. controls (569.21238577, 381.79040747) and (577.07371891, 386.01174069) .. (582.85105210, 386.01174069)
+    .. controls (589.62971859, 386.01174069) and (591.42305188, 374.38374099) .. (590.75238523, 366.33574119)
+    .. controls (589.71238526, 353.83574150) and (577.80438555, 312.07974254) .. (574.23505231, 303.75707608)
+    .. controls (573.29638567, 301.56640947) and (569.88438575, 300.01174284) .. (566.93505249, 300.01174284)
+    .. controls (562.33771927, 300.01174284) and (536.85105325, 301.92774280) .. (526.56705350, 298.69440954)
+    .. controls (524.00438690, 297.88907623) and (523.26838692, 295.76107628) .. (524.01772023, 290.26107642)
+    .. controls (524.61238688, 285.90107653) and (533.49905333, 247.55841082) .. (534.66171997, 239.50507769)
+    .. controls (536.96305324, 223.56641142) and (521.42305363, 220.83707816) .. (512.54305385, 232.40374453)
+    .. controls (504.74038738, 242.56641095) and (500.54705415, 254.53174398) .. (496.62305425, 267.26774366)
+    .. controls (491.90438770, 282.58240995) and (493.95505432, 293.84107633) .. (483.74038791, 292.78907636)
+    .. controls (470.72438823, 291.44774306) and (447.51772215, 274.87174347) .. (435.67372244, 274.87174347)
+    .. controls (427.17638932, 274.87174347) and (425.42038936, 289.38107644) .. (429.01772261, 295.34507629)
+    .. controls (435.35105578, 305.84507603) and (475.30972145, 316.46907577) .. (487.88172114, 317.47040907)
+    .. controls (488.71505445, 325.38774221) and (488.68438778, 330.42774208) .. (486.68438783, 337.09440858)
+    .. controls (479.43505468, 337.17840858) and (471.10172156, 335.26107530) .. (461.92172179, 331.04507540)
+    .. controls (450.90705539, 325.98640886) and (436.74438908, 322.49307562) .. (431.17372255, 322.49307562)
+    .. controls (425.06172271, 322.49307562) and (420.74038948, 337.89974190) .. (430.29638924, 345.12240838)
+    .. controls (435.23905579, 348.85840829) and (445.41505553, 351.63307489) .. (449.95372208, 352.43707487)
+    .. controls (458.85105520, 354.01174149) and (486.96305449, 353.34507484) .. (489.68172109, 359.03040804)
+    .. controls (490.40038774, 360.53574133) and (490.68438773, 364.39974124) .. (488.19772113, 365.49040787)
+    .. controls (485.73372119, 366.57174118) and (469.18438827, 363.01174127) .. (460.40705516, 363.89974125)
+    .. controls (451.95905537, 364.75574123) and (450.23372208, 374.15707432) .. (452.62972202, 377.89974090)
+  (465.02505504, 479.10973837)
+    .. controls (470.18505491, 476.67773843) and (560.01838600, 480.17773834) .. (564.76771921,482.34440495)
+    .. controls (570.23305241, 484.83640489) and (569.77571909, 493.67773800) .. (564.35171922,496.01107128)
+    .. controls (558.92771936, 498.34440455) and (473.45438816, 494.42840465) .. (468.18505496,492.56707136)
+    .. controls (461.68105512, 490.26840476) and (460.15705516, 481.40440498) .. (465.02505504,479.10973837)
+  (512.51838719, 517.56707074)
+    .. controls (550.96238623, 517.56707074) and (578.74105220, 517.56707074) .. (590.23038524,506.59240435)
+    .. controls (595.69438511, 501.37240448) and (599.18505169, 483.56707159) .. (588.92905194,472.13107188)
+    .. controls (579.25038552, 461.33773881) and (539.85171984, 459.34440553) .. (504.85972071,459.19507220)
+    .. controls (494.19305431, 459.14840553) and (455.35172195, 457.17773892) .. (449.05705544,461.39240548)
+    .. controls (429.26772260, 474.64440515) and (433.46105583, 495.05640464) .. (442.07438895,502.23373779)
+    .. controls (455.40772195, 513.34440418) and (467.40772165, 516.67773743) .. (512.51838719,517.56707074)
+  (469.51812160, 412.41240670)
+    .. controls (478.85145470, 412.22040671) and (551.62878621, 415.45640663) .. (562.58611927,417.44173991)
+    .. controls (572.83011901, 419.29907320) and (572.35145236, 428.51107297) .. (566.51811917,429.34440628)
+    .. controls (558.35945271, 430.50973958) and (474.17278815, 426.64840635) .. (466.69545500,424.28307307)
+    .. controls (460.51812182, 422.32973979) and (462.43545511, 412.55774003) .. (469.51812160,412.41240670)
+  (453.04878867, 444.45907257)
+    .. controls (474.88078813, 454.19773899) and (578.96211886, 454.67773898) .. (587.85145197,448.01107248)
+    .. controls (600.58211832, 438.46307272) and (600.43145166, 419.22840653) .. (595.50211845,409.49107344)
+    .. controls (586.74078533, 392.17774054) and (506.59678734, 392.17774054) .. (466.18478835,392.17774054)
+    .. controls (452.18478870, 392.17774054) and (435.68478911, 400.67774033) .. (435.68478911,416.51107327)
+    .. controls (435.68478911, 423.84440642) and (435.60612244, 436.67773943) .. (453.04878867,444.45907257)}
+%    \end{macrocode}
+%
+% 文字“FUDAN UNIVERSITY”。
+%    \begin{macrocode}
+\def\fdulogo at emblem@new at F{%
+  (128.08471915, 329.48133989)
+    -- (127.14177837, 332.01133349)
+    -- (105.95308200, 324.11420442)
+    -- (128.23005803, 264.34310569)
+    -- (130.86546803, 265.32533568)
+    .. controls (128.57617887, 272.75622407) and (129.41093008, 275.34847365) .. (134.89258287, 277.39151202)
+    -- (185.91412041, 296.40748451)
+    .. controls (191.39577320, 298.45052287) and (193.10540239, 297.40687447) .. (196.85613434, 289.92037447)
+    -- (199.49154434, 290.90260446)
+    -- (185.34743257, 328.85250841)
+    -- (182.71202258, 327.87027842)
+    .. controls (185.90496332, 318.01481284) and (185.34717211, 315.64584725) .. (179.54927011, 313.48494128)
+    -- (154.98724894, 304.33055784)
+    .. controls (151.19058341, 315.16160902) and (153.63728983, 320.51571619) .. (165.31554342, 326.54909292)
+    -- (164.33331344, 329.18450291)
+    -- (128.70257028, 315.90475353)
+    -- (129.68480027, 313.26934353)
+    .. controls (142.40947544, 315.85081706) and (147.47417141, 313.53636504) .. (151.40309135, 302.99472506)
+    -- (126.94648658, 293.87963081)
+    .. controls (123.04607978, 292.42593043) and (121.48115619, 293.40345164) .. (119.47740703, 298.77968803)
+    .. controls (111.81601315, 319.33588600) and (119.27761075, 323.79769475) .. (128.08471915, 329.48133989)}
+\def\fdulogo at emblem@new at U@i{%
+  (100.51870590, 377.96853391)
+    -- ( 97.71928261, 377.69763724)
+    -- (101.38180565, 339.84943428)
+    -- (104.18122894, 340.12033095)
+    .. controls (104.20655678, 348.03456725) and (105.53222649, 349.51915670) .. (113.59456558, 350.29933913)
+    -- (150.99486081, 353.91851870)
+    .. controls (161.96860013, 354.98043366) and (167.22791658, 357.86290671) .. (171.49391369, 365.17027770)
+    .. controls (174.89298469, 370.92442577) and (176.21507398, 378.28599501) .. (175.42405569, 386.46031104)
+    .. controls (173.33273336, 408.07185888) and (159.86303178, 414.11507061) .. (142.84253814, 412.46801883)
+    -- (107.12189689, 409.01137727)
+    .. controls (100.51525791, 408.37206111) and ( 98.57192487, 409.76636429) .. ( 96.75866006, 416.82452926)
+    -- ( 93.95923677, 416.55363258)
+    -- ( 96.34312750, 391.91870758)
+    -- ( 99.14255080, 392.18960425)
+    .. controls ( 98.96921476, 400.98882014) and (100.99203606, 403.44507611) .. (109.16635208, 404.23609440)
+    -- (143.31931629, 407.54103383)
+    .. controls (159.89190220, 409.14474215) and (168.22511905, 403.62170878) .. (169.51458722, 390.29645390)
+    .. controls (170.61984565, 378.87480685) and (164.50082069, 373.19652877) .. (149.27195796, 371.72285086)
+    -- (111.87166273, 368.10367129)
+    .. controls (103.02548511, 367.24763780) and (101.68899846, 369.37881776) .. (100.51870590, 377.96853391)}
+\def\fdulogo at emblem@new at D{%
+  (161.13377402, 431.77641390)
+    .. controls (165.99478812, 430.84205928) and (167.67345668, 427.65541280) .. (166.66276259, 421.20524173)
+    -- (169.42470242, 420.67435842)
+    -- (176.13506745, 455.58527790)
+    .. controls (180.72189924, 479.44843805) and (168.53387923, 498.28768735) .. (145.66501742, 502.68340115)
+    .. controls (122.90663320, 507.05787961) and (106.12398751, 494.24543310) .. (101.21862573, 468.72510905)
+    -- ( 94.74184936, 435.02944310)
+    -- ( 97.50378919, 434.49855979)
+    .. controls ( 99.52571602, 441.44171376) and (101.58635124, 443.22225805) .. (106.66832053, 442.24543276)
+  (143.62723349, 483.14176993)
+    .. controls (169.25803513, 478.21517282) and (174.20076693, 466.38197552) .. (171.99229236, 454.89230582)
+    .. controls (171.03670241, 449.92081412) and (169.32443437, 448.76066473) .. (164.35294268, 449.71625468)
+    -- (107.56745973, 460.63121552)
+    .. controls (105.02647508, 461.11962816) and (104.12545061, 463.58400402) .. (104.95362857, 467.89263016)
+    .. controls (106.86480848, 477.83561355) and (116.44974554, 488.36566169) .. (143.62723349, 483.14176993)}
+\def\fdulogo at emblem@new at A{%
+  (213.73056745, 560.05088194)
+    -- (213.52877972, 559.64866116)
+    .. controls (211.56134940, 555.72700852) and (208.64253939, 555.17751094) .. (194.25467970, 556.10248902)
+    -- (130.11298094, 560.21376615)
+    -- (128.70046687, 557.39822066)
+    -- (172.60549553, 507.43004883)
+    .. controls (180.04014537, 498.91738678) and (180.94311014, 496.95402046) .. (179.42665420, 491.67334867)
+    -- (181.94053410, 490.41217539)
+    -- (192.18126114, 510.82488017)
+    -- (189.66738124, 512.08605346)
+    .. controls (186.28879152, 506.35508462) and (184.02240494, 504.59723135) .. (181.40796985, 505.90885157)
+    .. controls (180.10075230, 506.56466167) and (177.99044785, 508.63027652) .. (173.61985282, 513.46606992)
+    -- (170.45490415, 516.94182818)
+    -- (181.80546368, 539.56674728)
+    .. controls (191.36396463, 539.05076331) and (195.58931486, 538.44133613) .. (197.80152917, 537.33150365)
+    .. controls (199.91318828, 536.27211809) and (200.26293014, 534.46043123) .. (198.69839794, 530.84010551)
+    .. controls (198.44616328, 530.33732953) and (197.89090837, 528.97966505) .. (197.38576172, 527.47099844)
+    -- (199.89964162, 526.20982516)
+    -- (216.24444735, 558.78970866)
+  (167.28995547, 520.41758644)
+    -- (147.59705438, 542.12837916)
+    -- (177.12710706, 540.02584966)}
+\def\fdulogo at emblem@new at N@i{%
+  (180.22686421, 631.40888576)
+    -- (163.64330505, 614.42493307)
+    -- (165.65562172, 612.46005639)
+    .. controls (167.22752306, 614.06990973) and (169.77102921, 614.25935906) .. (178.13167444, 613.64308824)
+    -- (216.28519850, 576.38902642)
+    .. controls (220.87328050, 571.90910759) and (220.82125183, 569.60138665) .. (215.80824593, 563.01806637)
+    -- (217.82056260, 561.05318969)
+    -- (235.66164284, 579.32502506)
+    -- (233.64932617, 581.28990174)
+    .. controls (226.87307200, 575.79932200) and (223.92900012, 575.84376027) .. (218.21402078, 581.42401004)
+    -- (185.85596873, 613.01922702)
+    -- (264.77597447, 606.24373256)
+    -- (266.97663635, 608.49752723)
+    -- (219.56645561, 654.79002177)
+    .. controls (214.97837360, 659.26994059) and (214.95370480, 661.33808113) .. (219.2574575, 667.35605515)
+    -- (217.24514083, 669.32093182)
+    -- (200.34720140, 652.01500846)
+    -- (202.35951807, 650.05013179)
+    .. controls (208.73900170, 655.45642366) and (211.92265398, 655.33528792) .. (217.63763332, 649.75503815)
+    -- (242.18789670, 625.78354268)}
+\def\fdulogo at emblem@new at U@ii{%
+  (331.45282512, 724.53468765)
+    -- (330.63705847, 727.22628423)
+    -- (294.24667267, 716.19711919)
+    -- (295.06243932, 713.50552261)
+    .. controls (302.82732441, 715.03602217) and (304.54348943, 714.02795994) .. (306.89289736, 706.27616178)
+    -- (317.79153974, 670.31643143)
+    .. controls (320.98934498, 659.76537283) and (324.84918874, 655.17508751) .. (332.85243369, 652.42834813)
+    .. controls (339.16237243, 650.22638488) and (346.64021167, 650.37679795) .. (354.49967369, 652.75883655)
+    .. controls (375.27879931, 659.05655505) and (378.55705453, 673.45122874) .. (373.59719333, 689.81613596)
+    -- (363.18801094, 724.16090836)
+    .. controls (361.26280166, 730.51307630) and (362.24800509, 732.69252743) .. (368.81218569, 735.85752868)
+    -- (367.99641904, 738.54912526)
+    -- (344.31036911, 731.37037878)
+    -- (345.12613576, 728.67878220)
+    .. controls (353.71970109, 730.57799095) and (356.52559167, 729.07732700) .. (358.90763028, 721.21786498)
+    -- (368.85998334, 688.38038667)
+    .. controls (373.68932188, 672.44613490) and (369.91166147, 663.19001105) .. (357.09966174, 659.30696182)
+    .. controls (346.11794768, 655.97863391) and (339.34786455, 660.86242188) .. (334.91009400, 675.50470729)
+    -- (324.01145163, 711.46443764)
+    .. controls (321.43362903, 719.96988284) and (323.26059964, 721.69913479) .. (331.45282512, 724.53468765)}
+\def\fdulogo at emblem@new at N@ii{%
+  (409.66623928, 741.32018157)
+    -- (385.93186303, 740.93540199)
+    -- (385.97745303, 738.12327211)
+    .. controls (388.22715694, 738.15974410) and (390.16675926, 736.50346737) .. (395.66999384, 730.17934402)
+    -- (396.53438018, 676.86136137)
+    .. controls (396.63832537, 670.44970523) and (394.97657784, 668.84755849) .. (386.78157096, 667.70206894)
+    -- (386.82716096, 664.88993905)
+    -- (412.36130033, 665.30389623)
+    -- (412.31571034, 668.11602611)
+    .. controls (403.63793789, 668.98797568) and (401.57855597, 671.09236960) .. (401.44908038, 679.07881848)
+    -- (400.71599323, 724.29786706)
+    -- (451.98891394, 663.92106986)
+    -- (455.13849941, 663.97213066)
+    -- (454.06439908, 730.22591079)
+    .. controls (453.96045389, 736.63756693) and (455.39905463, 738.12358127) .. (462.69235634, 739.36696722)
+    -- (462.64676634, 742.17909711)
+    -- (438.46244932, 741.78702313)
+    -- (438.50803931, 738.97489325)
+    .. controls (446.84470898, 738.32244327) and (449.02022329, 735.99490256) .. (449.14969888, 728.00845368)
+    -- (449.70589684, 693.70046907)}
+\def\fdulogo at emblem@new at I@i{%
+  (476.71960763, 671.89702757)
+    .. controls (475.48868767, 666.40836111) and (473.16811016, 665.31466569) .. (464.76278168, 666.39263232)
+    -- (464.14732170, 663.64829909)
+    -- (502.56798690, 655.03185940)
+    -- (503.18344687, 657.77619262)
+    .. controls (494.96376586, 660.19605760) and (493.22273019, 662.20063379) .. (494.50288695, 667.90884691)
+    -- (506.41819213, 721.03913821)
+    .. controls (507.69834888, 726.74735132) and (510.39748318, 727.98673821) .. (518.59456473, 726.49429666)
+    -- (519.21002471, 729.23862989)
+    -- (480.78935952, 737.85506958)
+    -- (480.17389954, 735.11073636)
+    .. controls (487.95448724, 732.78934497) and (489.89045116, 730.62575865) .. (488.63491281, 725.02731887)}
+\def\fdulogo at emblem@new at V{%
+  (602.12727238, 694.33228933)
+    -- (580.41288862, 704.46574992)
+    -- (579.22351531, 701.91711333)
+    .. controls (586.22376857, 698.02956582) and (587.41992600, 696.60232359) .. (585.89752816, 693.34006875)
+    .. controls (585.13632925, 691.70894133) and (584.25959367, 690.62832056) .. (580.48079869, 687.05343948)
+    -- (551.88157206, 659.55539834)
+    -- (553.70312548, 700.17052387)
+    .. controls (553.90703363, 705.66199345) and (554.07015096, 707.07563874) .. (554.78377495, 708.60482070)
+    .. controls (555.87799839, 710.94956636) and (557.93050460, 711.35734248) .. (561.89958209, 709.75338598)
+    .. controls (562.40930941, 709.51551131) and (563.78217537, 708.99898266) .. (565.35893225, 708.38730413)
+    -- (566.54830556, 710.93594073)
+    -- (532.29462977, 726.92111800)
+    -- (531.10525646, 724.37248141)
+    .. controls (535.86950512, 721.28011654) and (536.40641483, 720.03637844) .. (536.33843014, 713.24000463)
+    -- (533.93908436, 639.99548921)
+    -- (536.69161188, 638.71096604)
+    -- (587.86166289, 687.70586863)
+    .. controls (593.25799982, 692.88468900) and (595.30371044, 693.54393098) .. (600.93789907, 691.78365274)}
+\def\fdulogo at emblem@new at E{%
+  (594.15792842, 607.98334063)
+    .. controls (588.62449694, 612.58998385) and (587.91748388, 615.08155932) .. (591.01257229, 618.79933359)
+    -- (608.43144194, 639.72262136)
+    .. controls (617.85556742, 631.87693213) and (618.59324875, 625.55386652) .. (611.28122633, 614.66077637)
+    -- (613.52918286, 612.78932756)
+    -- (637.85801734, 642.01276254)
+    -- (635.61006080, 643.88421134)
+    .. controls (626.25153717, 635.28038827) and (620.30284663, 634.81656760) .. (611.22456061, 642.37434163)
+    -- (610.87872115, 642.66225683)
+    -- (627.57780280, 662.72094592)
+    .. controls (630.31299721, 666.00642086) and (632.08478468, 665.84883526) .. (636.58069775, 662.10593765)
+    .. controls (650.67365604, 650.37339321) and (652.46291030, 643.90679653) .. (645.05122654, 630.60816424)
+    -- (647.21272321, 628.80869424)
+    -- (661.68046206, 646.18712746)
+    -- (611.79311892, 687.71889519)
+    -- (609.99364891, 685.55739852)
+    .. controls (615.67146452, 680.24502184) and (616.16254119, 677.49406677) .. (612.49162238, 673.08461356)
+    -- (577.65388307, 631.23803803)
+    .. controls (573.91098546, 626.74212496) and (571.90878052, 626.79876963) .. (564.93491997, 631.43352191)
+    -- (563.13544997, 629.27202524)
+    -- (613.71447204, 587.16442711)
+    -- (632.14445716, 602.26892739)
+    -- (629.72358089, 604.28433380)
+    .. controls (618.15969086, 598.83394993) and (607.81858737, 596.61069020) .. (594.15792842, 607.98334063)}
+\def\fdulogo at emblem@new at R{%
+  (703.67107461, 556.48625378)
+    .. controls (714.47632067, 563.60142604) and (714.27048109, 576.80121049) .. (702.94807655, 593.99564552)
+    -- (683.02559423, 624.25033449)
+    -- (680.67662770, 622.70355791)
+    .. controls (684.78529306, 615.44126165) and (684.24210802, 613.19777445) .. (677.47708440, 608.74305790)
+    -- (635.94735607, 581.39604802)
+    .. controls (629.08837379, 576.87946042) and (627.53007655, 577.20033640) .. (621.85850567, 583.97227242)
+    -- (619.50953914, 582.42549584)
+    -- (640.42195846, 550.66746829)
+    -- (642.77092499, 552.21424487)
+    .. controls (638.88456869, 560.16173109) and (639.29940333, 561.78189940) .. (645.97046829, 566.17474488)
+    -- (664.38636592, 578.30147324)
+    -- (666.05688463, 575.76458938)
+    -- (649.45513367, 536.94950373)
+    -- (662.13870160, 517.68797815)
+    -- (664.48766814, 519.23475473)
+    .. controls (663.37398900, 520.92601063) and (663.13341715, 522.51869961) .. (663.73616912, 524.26261004)
+    -- (678.07830393, 560.78155396)
+    .. controls (685.19134232, 555.09351361) and (693.42958052, 549.74230791) .. (703.67107461, 556.48625378)
+  (698.63980292, 593.58328528)
+    .. controls (704.33194073, 584.93908843) and (702.58094762, 578.80216225) .. (692.71528818, 572.30570063)
+    .. controls (681.25233149, 564.75743093) and (676.11916711, 567.43879411) .. (667.39304309, 580.28134726)
+    -- (691.35250174, 596.05846835)
+    .. controls (694.64105489, 598.22395555) and (696.72179997, 596.49600378) .. (698.63980292, 593.58328528)}
+\def\fdulogo at emblem@new at S{%
+  (743.20312975, 515.46936653)
+    .. controls (738.43076287, 530.00602567) and (727.28790107, 536.17566139) .. (713.82011393, 531.75420384)
+    .. controls (704.41404037, 528.66620174) and (699.50487531, 520.89733859) .. (697.58812596, 506.17757866)
+    -- (696.51882808, 497.89322644)
+    .. controls (695.11756780, 487.01333370) and (693.18068300, 483.53567665) .. (687.62254863, 481.71094814)
+    .. controls (680.24733186, 479.28967377) and (673.71795216, 482.94805456) .. (671.01595033, 491.17836892)
+    .. controls (665.64703758, 507.53211045) and (681.41553406, 517.20837331) .. (686.73126071, 520.49281728)
+    -- (685.71362365, 523.59254607)
+    -- (659.31248536, 514.92508563)
+    -- (660.33012242, 511.82535684)
+    .. controls (663.21284801, 512.06130697) and (664.45556027, 511.52202777) .. (665.01701519, 509.81183258)
+    .. controls (666.21010691, 506.17766779) and (664.11994318, 500.28153929) .. (667.38339994, 490.34102974)
+    .. controls (672.57685802, 474.52172420) and (685.17136327, 466.81573355) .. (698.63915042, 471.23719110)
+    .. controls (706.65569038, 473.86901107) and (713.05804743, 481.41764222) .. (714.23261811, 489.38133285)
+    -- (716.87701653, 507.65538929)
+    .. controls (718.31013894, 517.71688977) and (720.21031841, 520.94568148) .. (725.34090398, 522.63004626)
+    .. controls (731.96791036, 524.80568411) and (737.50344312, 521.64987718) .. (739.88962656, 514.38154761)
+    .. controls (742.55653747, 506.25812044) and (739.77220119, 496.34505570) .. (726.88804471, 487.26049550)
+    -- (727.87059083, 484.26765391)
+    -- (751.06511313, 491.88238636)
+    -- (750.01238514, 495.08900235)
+    .. controls (746.98768142, 494.92484849) and (745.85185636, 495.49921862) .. (745.25531050, 497.31630102)
+    .. controls (744.27276438, 500.30914260) and (746.11567718, 506.59772897) .. (743.20312975, 515.46936653)}
+\def\fdulogo at emblem@new at I@ii{%
+  (690.18650034, 451.64645084)
+    .. controls (684.60177379, 450.97454421) and (682.79616397, 452.79691191) .. (681.00644231, 461.07993480)
+    -- (678.21407904, 460.74398149)
+    -- (682.91742546, 421.65089566)
+    -- (685.70978873, 421.98684897)
+    .. controls (685.24696331, 430.54282399) and (686.55536222, 432.85315393) .. (692.36347783, 433.55193683)
+    -- (746.42363080, 440.05599302)
+    .. controls (752.23174641, 440.75477592) and (754.30105969, 438.62420089) .. (755.63056509, 430.39912000)
+    -- (758.42292837, 430.73507332)
+    -- (753.71958195, 469.82815914)
+    -- (750.92721867, 469.49220583)
+    .. controls (751.33629157, 461.38300894) and (749.94307439, 458.83585180) .. (744.24665331, 458.15050703)}
+\def\fdulogo at emblem@new at T{%
+  (695.27817006, 394.86431990)
+    .. controls (686.98727938, 395.61711698) and (685.86675195, 396.96144894) .. (685.95735078, 406.66801892)
+    -- (683.15637420, 406.92234225)
+    -- (679.52463696, 366.92439666)
+    -- (682.32561355, 366.67007332)
+    .. controls (683.88289314, 376.35643423) and (685.11518604, 377.48713459) .. (693.63015485, 376.71399165)
+    -- (752.67474121, 371.35285572)
+    .. controls (750.97531414, 357.61274267) and (745.29252469, 352.25466632) .. (731.78693629, 351.56058132)
+    -- (731.49192122, 348.31144849)
+    -- (754.03211881, 346.49076699)
+    -- (760.13587887, 413.71420497)
+    -- (737.64654595, 416.09508178)
+    -- (737.35153088, 412.84594895)
+    .. controls (750.51123954, 409.73070579) and (755.13604392, 403.43671956) .. (754.32275642, 389.50318398)}
+\def\fdulogo at emblem@new at Y{%
+  (727.37709643, 264.98714859)
+    -- (735.52753927, 288.35663423)
+    -- (732.87191590, 289.28282091)
+    .. controls (729.85861091, 282.35098762) and (728.37900448, 280.84154347) .. (725.29848138, 281.91592003)
+    .. controls (723.28020762, 282.61982191) and (720.08099945, 285.40363235) .. (716.65196381, 289.57820189)
+    -- (701.11261978, 308.22295111)
+    -- (730.20250072, 312.37493083)
+    .. controls (731.62538980, 312.35526096) and (735.02196252, 313.55357297) .. (737.35891108, 312.73852869)
+    .. controls (739.69585965, 311.92348440) and (739.98994711, 310.03373064) .. (738.47100095, 305.67850832)
+    -- (737.65103920, 302.98583749)
+    -- (740.30666256, 302.05965080)
+    -- (752.71756415, 337.64500393)
+    -- (750.06194078, 338.57119061)
+    .. controls (748.58987702, 335.03363777) and (745.60836911, 332.97569135) .. (741.25577198, 332.11080654)
+    -- (699.20940712, 324.97140268)
+    -- (683.59434172, 330.41738039)
+    .. controls (675.83992149, 333.12184551) and (675.07896935, 334.69784194) .. (677.26706220, 343.70466632)
+    -- (674.61143883, 344.63085301)
+    -- (661.75596764, 307.77080066)
+    -- (664.41159100, 306.84461398)
+    .. controls (668.29928281, 315.25867889) and (669.73200683, 315.95045356) .. (677.59265200, 313.20894097)
+    -- (697.13803998, 306.39220696)
+    -- (723.09792840, 274.58148207)
+    .. controls (725.02243735, 272.24224123) and (725.44996228, 269.71022039) .. (724.72147307, 265.91333528)}
+%    \end{macrocode}
+%
+% 年份“1905”。
+%    \begin{macrocode}
+\def\fdulogo at emblem@new at one{%
+  (274.53952078, 192.6967679)
+    .. controls (276.90649749, 191.17738787) and (276.61091282, 188.42592116) .. (273.75447837, 183.97600496)
+    -- (250.35602597, 147.52456373)
+    .. controls (245.37245949, 139.76088014) and (242.44569971, 139.36684000) .. (233.01169676, 145.28890583)
+    -- (231.55309194, 143.01660820)
+    -- (267.05774249, 120.22590781)
+    -- (268.51634731, 122.49820545)
+    .. controls (260.02210251, 128.21810688) and (259.32418637, 130.67147132) .. (264.00387685, 137.96175957)
+    -- (298.64574144, 191.92882841)
+    -- (297.03619728, 192.96200682)
+    -- (266.55257519, 197.95733905)
+    -- (264.97241997, 195.49568328)
+    .. controls (266.79116106, 194.99667541) and (272.07786501, 194.27692313) .. (274.53952078, 192.6967679)}
+\def\fdulogo at emblem@new at nine{%
+  (346.53719503,  87.17026768)
+    .. controls (362.44194107,  86.72957443) and (370.45737301,  88.21059494) .. (380.22737659,  93.27206544)
+    .. controls (393.00061366,  99.87385110) and (401.02069729, 110.71391337) .. (403.43237633, 124.79726455)
+    .. controls (406.71757692, 143.98167207) and (398.66128891, 158.25957093) .. (383.13633486, 160.91811476)
+    .. controls (369.27476873, 163.29181460) and (357.41447084, 154.02251812) .. (354.81289581, 138.83024165)
+    .. controls (352.57212316, 125.74492323) and (359.14810987, 115.48728020) .. (371.23539553, 113.41741394)
+    .. controls (375.44931164, 112.69580918) and (378.42746538, 112.75654226) .. (381.68741805, 113.79631850)
+    .. controls (374.03262029,  97.75720684) and (363.55014714,  90.53485455) .. (347.03092460,  90.05347343)
+  (387.19655934, 133.96962358)
+    .. controls (386.68384018, 130.97552530) and (385.85438796, 127.46494357) .. (384.66717843, 122.53174856)
+    -- (383.84077127,1 19.70551161)
+    .. controls (383.52099316, 118.50468339) and (383.51185796, 116.45164907) .. (378.18901657, 117.36314981)
+    .. controls (371.31367978, 118.54050493) and (369.88353794, 125.51992491) .. (372.86490494, 142.93005197)
+    .. controls (375.06769840, 155.79358533) and (376.96809671, 158.89248601) .. (382.40183063, 157.96199567)
+    .. controls (387.61377949, 157.06948453) and (390.23489515, 151.71242822) .. (387.19655934, 133.96962358)}
+\def\fdulogo at emblem@new at zero{%
+  (468.53843186, 119.70741769)
+    .. controls (473.74690799,  97.12388612) and (487.76874274,  83.38513668) .. (502.34937235,  86.74789069)
+    .. controls (516.49148678,  90.00950924) and (523.24855517, 108.77145056) .. (518.16649836, 130.80683817)
+    .. controls (513.10972541, 152.73259697) and (498.65786882, 166.83401000) .. (484.51575438, 163.57239145)
+    .. controls (470.37363995, 160.31077290) and (463.58279437, 141.19466133) .. (468.53843186, 119.70741769)
+  (501.64142414,  89.81749692)
+    .. controls (496.15998444,  88.55330369) and (492.58528933,  94.54100910) .. (488.84327735, 110.76607062)
+    -- (483.05327233, 135.87106446)
+    .. controls (479.23540876, 152.42501236) and (479.85189169, 159.26387584) .. (485.11407380, 160.47750135)
+    .. controls (490.48588471, 161.71641072) and (494.24606002, 155.42510278) .. (497.96278832, 139.30967006)
+    -- (503.75279334, 114.20467623)
+    .. controls (507.94991488,  96.00629641) and (506.02657590,  90.82885151) .. (501.64142414,  89.81749692)}
+\def\fdulogo at emblem@new at five{%
+  (596.81323106, 144.25778675)
+    .. controls (593.53398643, 141.88060609) and (592.81646298, 137.88650017) .. (595.12761085, 134.69834567)
+    .. controls (598.62734904, 129.87056885) and (606.22172437, 130.51231652) .. (614.32874582, 136.38923538)
+    .. controls (629.35861705, 147.28464673) and (633.41288249, 164.11949675) .. (624.10225824, 176.96320489)
+    .. controls (617.23484744, 186.43657827) and (606.12245552, 189.49768961) .. (594.14661482, 185.12390882)
+    .. controls (589.95882917, 183.61665399) and (586.87090400, 181.93399782) .. (579.07134947, 176.97475918)
+    -- (575.72667581, 185.80578112)
+    -- (601.04973158, 204.16289844)
+    -- (596.58044201, 218.57075501)
+    -- (567.24942058, 197.30819466)
+    -- (581.19499276, 159.47691905)
+    .. controls (590.31078455, 165.11240378) and (594.44167660, 167.27320765) .. (599.37410141, 168.90338888)
+    .. controls (609.33004115, 172.22978413) and (617.92168735, 170.53738499) .. (622.27985189, 164.52543650)
+    .. controls (625.97768848, 159.42438929) and (624.87516584, 152.51098060) .. (619.77411864, 148.81314402)
+    .. controls (613.94435040, 144.58704507) and (603.28063019, 148.94611527) .. (596.81323106, 144.25778675)}
+%    \end{macrocode}
+%
+% 内环。
+%    \begin{macrocode}
+\def\fdulogo at emblem@new at ring@inner at i{%
+  (427.28478932, 410.40467342) circle [radius=241.88932729]}
+\def\fdulogo at emblem@new at ring@inner at ii{%
+  (427.28478932, 410.40467342) circle [radius=226.77199428]}
+%    \end{macrocode}
+%
+% 外环。
+%    \begin{macrocode}
+\def\fdulogo at emblem@new at ring@outer at i{%
+  (427.28478932, 410.40467342) circle [radius=359.05469569]}
+\def\fdulogo at emblem@new at ring@outer at ii{%
+  (427.28478932, 410.40467342) circle [radius=343.93732473]}
+%    \end{macrocode}
+%
+% \paragraph{校训}
+%
+% 博。
+%    \begin{macrocode}
+\def\fdulogo at motto@bo{%
+  (446.44078884,  999.91565267)
+    .. controls (447.61812214, 1000.07431933) and (456.16345526, 1001.95698595) .. (459.29012185, 1001.31565264)
+    .. controls (462.45812177, 1000.66498599) and (466.03678835,  997.51565273) .. (466.58345500,  994.39565281)
+    .. controls (466.94345499,  992.40898619) and (463.75145507,  988.95165295) .. (461.25012180,  987.90231964)
+    .. controls (452.27412203,  984.13831973) and (442.91278893,  980.49831982) .. (442.91278893,  980.49831982)
+    .. controls (442.83012226,  967.45698682) and (443.36478892,  968.93832011) .. (444.83012221,  956.91298708)
+    .. controls (446.84478883,  940.36898749) and (445.10745554,  926.59832117) .. (444.86612221,  909.79965492)
+    .. controls (444.24612223,  900.95698848) and (440.71412232,  902.67165510) .. (438.57945570,  901.24898847)
+    .. controls (434.45412247,  898.49832187) and (433.83012249,  894.41565531) .. (429.68345592,  901.04098848)
+    .. controls (426.80745600,  905.63832169) and (420.49412282,  921.06898798) .. (424.47678939,  936.04898760)
+    .. controls (429.10745594,  953.47165383) and (434.23278914,  978.47565321) .. (433.49678916,  979.24898652)
+    .. controls (432.91545584,  979.85965317) and (422.17945611,  977.18765324) .. (413.71812299,  974.91565330)
+    .. controls (406.57945650,  972.99965334) and (404.51812322,  974.85431996) .. (404.16345656,  976.97165324)
+    .. controls (402.99678993,  983.91565307) and (425.50345603,  995.32898612) .. (429.25012260,  996.32898609)
+    .. controls (430.26345591, 1003.82231924) and (427.74345597, 1012.83565235) .. (433.50345583, 1018.02231889)
+    .. controls (435.66345578, 1019.96898550) and (445.62345553, 1020.43565216) .. (447.27678882, 1014.63565230)
+    .. controls (448.91678878, 1008.86231911) and (447.44078881, 1006.90231916) .. (446.44078884,  999.91565267)
+  (504.16305406,  912.58232152)
+    .. controls (502.92838743,  909.46365493) and (498.38572087,  907.08232166) .. (494.82972096,  907.85965497)
+    .. controls (491.09905439,  908.67565495) and (482.10838795,  915.89165477) .. (480.82972131,  920.52632132)
+    .. controls (479.89638800,  923.90898790) and (488.12438780,  925.41565453) .. (489.60705443,  925.35965454)
+    .. controls (498.44038754,  925.02632121) and (501.60705413,  921.81565462) .. (502.99638743,  919.69298801)
+    .. controls (504.38572072,  917.57165473) and (505.21905404,  915.24898812) .. (504.16305406,  912.58232152)
+  (487.05198782,  975.33231995)
+    .. controls (487.49865448,  974.51765331) and (488.71198778,  974.55231997) .. (490.13598775,  974.72165330)
+  (485.82932119,  957.10565374)
+    .. controls (485.94132118,  952.99898718) and (484.68132122,  952.39632053) .. (483.66265458,  949.99898725)
+    .. controls (482.81865460,  948.00832064) and (481.70665462,  945.06965404) .. (480.71865465,  944.74965405)
+  (495.41332095, 1000.22165266)
+    .. controls (494.64398763, 1000.57898599) and (492.11598770,  998.61231937) .. (491.45465438,  997.29098607)
+    .. controls (490.95465439,  996.29098610) and (490.28798774,  993.45765283) .. (490.99598773,  992.91631951)
+    .. controls (491.70532104,  992.37365286) and (494.96932096,  994.68965280) .. (495.78798761,  996.16565277)
+    .. controls (496.77465425,  997.94298605) and (496.19065426,  999.86031934) .. (495.41332095, 1000.22165266)
+  (494.57998764,  976.58165325)
+    .. controls (495.53865428,  977.18698657) and (495.93332094,  978.03098655) .. (496.24665426,  979.35098652)
+    .. controls (496.74665425,  981.45498647) and (496.53865425,  983.79098641) .. (496.03865427,  984.41498639)
+    .. controls (495.54132094,  985.03631971) and (492.46798769,  984.60965305) .. (490.51598774,  983.77231974)
+    .. controls (489.52798776,  983.34831975) and (488.04798780,  982.33498644) .. (487.69065447,  981.66565313)
+    .. controls (487.11598782,  980.58698649) and (486.61598783,  976.12831993) .. (487.05198782,  975.33231995)
+    .. controls (487.49865448,  974.51765331) and (488.75465445,  974.33631998) .. (490.13598775,  974.72165330)
+    .. controls (492.30132103,  975.32565329) and (493.25332100,  975.74565328) .. (494.57998764,  976.58165325)
+  (520.88532031,  963.13765359)
+    .. controls (524.19465356,  967.71765348) and (523.08932026,  983.79631974) .. (523.80665357,  995.49498612)
+    .. controls (523.94532023,  997.75898606) and (525.24665354, 1006.99898583) .. (523.16265359, 1009.24831910)
+    .. controls (521.97332028, 1010.53365241) and (513.52398716, 1009.74831909) .. (511.99598720, 1008.30431913)
+    .. controls (509.65198726, 1006.08698585) and (508.88132061, 1000.42298599) .. (509.94132058, 1000.13765267)
+    .. controls (512.82932051,  999.36031935) and (513.82932049,  999.47098602) .. (513.82932049,  996.41631943)
+    .. controls (513.82932049,  990.90031956) and (509.78132059,  991.59898621) .. (509.92532059,  987.34565299)
+    .. controls (510.05198725,  983.63765308) and (513.54265383,  986.85098633) .. (514.74665380,  986.24965301)
+    .. controls (516.74665375,  985.24831970) and (517.45732040,  982.63365310) .. (517.66265373,  980.83231982)
+    .. controls (517.99598705,  977.91498655) and (517.02665374,  975.56431995) .. (514.49598714,  975.41498662)
+    .. controls (511.66265388,  975.24965329) and (510.16265391,  973.54832000) .. (510.07732058,  971.16565339)
+    .. controls (509.99598725,  968.91632011) and (514.39198714,  969.35098677) .. (515.66265378,  966.99898683)
+    .. controls (517.32932040,  963.91498690) and (518.41332037,  961.24832030) .. (520.88532031,  963.13765359)
+  (483.99598790,  899.66565518)
+    .. controls (487.24665449,  903.33232175) and (507.74665397,  888.08165547) .. (511.30265388,  891.05765539)
+    .. controls (513.19465384,  892.64032202) and (511.71865387,  906.86432166) .. (512.18665386,  913.54298816)
+    .. controls (512.63732052,  919.98832134) and (515.78532044,  933.76832099) .. (514.72265380,  935.48565428)
+    .. controls (514.09598715,  936.49632092) and (501.18798747,  932.59232102) .. (496.16265426,  931.74832104)
+    .. controls (488.43332112,  930.45098774) and (478.10798805,  930.19365441) .. (474.21865481,  929.24832110)
+    .. controls (468.21732163,  927.79098781) and (456.01998860,  919.60298801) .. (453.84132199,  924.58165455)
+    .. controls (450.99598873,  931.08165439) and (458.29332188,  935.63898761) .. (462.16265511,  936.91632091)
+    .. controls (464.67465505,  937.74432089) and (478.34665471,  939.01632086) .. (489.07998777,  940.41632083)
+    .. controls (496.60132092,  941.39632080) and (507.15598732,  942.95632076) .. (513.44132050,  944.02698740)
+    .. controls (516.05198710,  944.47098739) and (516.43465376,  948.35098729) .. (516.59732042,  951.64698721)
+    .. controls (516.77465375,  955.24832045) and (514.17465381,  955.60298711) .. (512.23198719,  956.74832042)
+    .. controls (509.83865392,  958.16032038) and (510.12132058,  960.30698699) .. (507.41332065,  960.49898699)
+    .. controls (504.66265405,  960.69365365) and (504.12798740,  957.67765373) .. (501.38532080,  957.74832039)
+    .. controls (498.16265421,  957.83232039) and (501.09598747,  966.30165351) .. (497.32932090,  969.33232010)
+    .. controls (495.62132094,  970.70698673) and (487.37598782,  970.38298674) .. (485.87065452,  969.15898677)
+    .. controls (484.53732122,  968.07632013) and (485.74398786,  960.27498700) .. (485.82932119,  957.10565374)
+    .. controls (485.94132118,  952.99898718) and (484.79198788,  952.31365386) .. (483.77465457,  949.91632059)
+    .. controls (482.92932126,  947.92432064) and (481.70665462,  945.06965404) .. (480.71865465,  944.74965405)
+    .. controls (478.66265470,  944.08298740) and (472.59065485,  949.98965392) .. (469.74132159,  953.72698716)
+    .. controls (466.61065500,  957.83232039) and (467.63465498,  960.38298699) .. (468.94132161,  967.91632014)
+    .. controls (469.49465493,  971.10832006) and (471.41332155,  977.09365324) .. (471.41332155,  981.08165314)
+    .. controls (471.41332155,  986.33231968) and (472.23865486,  991.96165287) .. (473.07998817,  995.74965278)
+    .. controls (474.03465482, 1000.04965267) and (477.52798806, 1001.20031931) .. (479.45465468,  999.91498600)
+    .. controls (481.82932129,  998.33231938) and (481.97598795,  990.93898623) .. (482.67732127,  990.00565292)
+    .. controls (483.66265458,  988.69365295) and (485.42132120,  987.09631966) .. (486.37998784,  994.39498614)
+    .. controls (486.58132117,  995.93498610) and (487.43332115,  998.91098603) .. (488.38532112, 1000.41498599)
+    .. controls (489.42265443, 1002.05631928) and (492.01598770, 1004.67098589) .. (492.99598768, 1005.52698586)
+    .. controls (496.49598759, 1008.58165245) and (496.16265426, 1011.02698573) .. (494.88532096, 1012.08165237)
+    .. controls (493.79065432, 1012.98698568) and (483.77465457, 1009.74831909) .. (481.49598796, 1012.91498568)
+    .. controls (480.45732132, 1014.36031898) and (485.74265452, 1020.96165215) .. (489.34398777, 1022.80698543)
+    .. controls (492.48532102, 1024.41631873) and (496.27465426, 1024.33098539) .. (496.44132092, 1025.88831869)
+    .. controls (497.03865424, 1031.49898522) and (496.94532091, 1036.76165175) .. (500.86265415, 1037.07631841)
+    .. controls (504.53998739, 1037.37098507) and (506.16265401, 1031.02698523) .. (506.94132066, 1030.86031856)
+    .. controls (508.01198730, 1030.63098524) and (512.47198719, 1032.08965187) .. (514.41332047, 1030.91631856)
+    .. controls (516.65865375, 1028.92031861) and (517.26398707, 1026.54031867) .. (516.80932041, 1023.91231874)
+    .. controls (516.31332043, 1021.04565214) and (512.73732051, 1017.26031890) .. (513.41332050, 1016.66565225)
+    .. controls (514.63465380, 1015.59231895) and (525.93465352, 1018.33498554) .. (532.07998670, 1014.33365231)
+    .. controls (535.66265328, 1012.00031904) and (535.94265327, 1009.57498576) .. (536.58665325, 1005.58165253)
+    .. controls (538.77465320,  992.02698620) and (540.78798648,  985.29098637) .. (541.55198646,  979.91631984)
+    .. controls (542.38265311,  974.06965332) and (543.99598640,  967.41632015) .. (540.91331981,  961.91498695)
+    .. controls (539.51465318,  959.42032035) and (536.03465327,  957.03232041) .. (533.41332000,  954.83232047)
+    .. controls (531.54665338,  953.26565384) and (529.13465344,  949.64698726) .. (533.18265334,  950.15232058)
+    .. controls (536.95465324,  950.62432057) and (541.92398645,  952.08032053) .. (549.91331959,  953.24965384)
+    .. controls (555.96931943,  954.13498715) and (570.27465241,  955.47098712) .. (571.20665239,  949.68432059)
+    .. controls (571.71865237,  946.50965401) and (568.74398578,  945.94832069) .. (565.86131919,  945.04432071)
+    .. controls (563.78798591,  944.39498739) and (561.29065263,  942.25898745) .. (557.24665274,  941.41632080)
+    .. controls (551.87198620,  940.29498750) and (544.23198639,  941.14698747) .. (540.16265316,  940.83232082)
+    .. controls (532.11198670,  940.20965416) and (526.47332017,  939.24965419) .. (524.99598688,  938.02698755)
+    .. controls (523.46798691,  936.76298758) and (524.03465357,  929.96565442) .. (525.66265353,  923.74832124)
+    .. controls (528.00398680,  914.80965480) and (531.32265338,  900.78298848) .. (531.09598672,  891.45898872)
+    .. controls (530.84665340,  881.19365564) and (521.08132031,  876.64032242) .. (510.91332056,  877.16565574)
+    .. controls (501.17598747,  877.66832239) and (499.74665417,  883.16565559) .. (492.26265436,  888.25898880)
+    .. controls (486.28665451,  892.32432203) and (482.35332127,  897.81098856) .. (483.99598790,  899.66565518)
+  (534.55198664, 1039.13791836)
+    .. controls (543.04798642, 1039.49258502) and (549.71998626, 1035.34591845) .. (549.16265294, 1026.74725200)
+    .. controls (548.87598628, 1022.31791878) and (542.22665311, 1014.58591897) .. (540.43598649, 1014.33258564)
+    .. controls (538.85731986, 1014.10991898) and (526.66265350, 1026.91525200) .. (524.09732023, 1031.66991854)
+    .. controls (523.03732026, 1033.63525183) and (529.21865344, 1038.91525170) .. (534.55198664, 1039.13791836)}
+%    \end{macrocode}
+%
+% 学。
+%    \begin{macrocode}
+\def\fdulogo at motto@xue{%
+  (441.96958895,  769.22205844)
+    .. controls (449.34558877,  772.01539170) and (456.88558858,  744.13805907) .. (451.85358870,  731.95805937)
+    .. controls (450.76292206,  729.32072610) and (447.74692214,  726.46339284) .. (444.82958888,  726.49939284)
+    .. controls (442.41225561,  726.52872617) and (439.10692236,  728.52739279) .. (438.10692238,  733.74872599)
+    .. controls (437.51892240,  736.82472592) and (439.10692236,  768.13805847) .. (441.96958895,  769.22205844)
+  (527.62132014,  755.16565879)
+    .. controls (527.63065348,  757.19099207) and (526.74665350,  758.41632538) .. (525.24665354,  758.12432538)
+    .. controls (523.81998690,  757.84699206) and (522.13065361,  756.10565877) .. (522.80132026,  753.97099215)
+    .. controls (523.57998691,  751.49899222) and (525.21865354,  750.05499225) .. (525.78798686,  750.20699225)
+    .. controls (526.35732017,  750.36032558) and (527.60798681,  752.33232553) .. (527.62132014,  755.16565879)
+  (487.79865447,  742.41365911)
+    .. controls (490.32932108,  743.13765909) and (486.96798783,  751.05499223) .. (486.33998784,  750.40299224)
+    .. controls (485.70532119,  749.74565893) and (485.20932120,  747.66165898) .. (485.16265454,  746.41632568)
+    .. controls (485.05198787,  743.41499242) and (484.87332121,  741.57765913) .. (487.79865447,  742.41365911)
+  (493.82932099,  758.16565872)
+    .. controls (496.82932091,  757.58165873) and (496.82932091,  760.87365865) .. (496.78132091,  762.59099194)
+    .. controls (496.73332092,  764.27499190) and (496.70532092,  764.91499188) .. (495.07998762,  765.24832520)
+    .. controls (494.02932098,  765.46432520) and (491.57998771,  765.20699187) .. (490.20532108,  763.41499192)
+    .. controls (489.97198775,  763.11365859) and (489.53865443,  761.12432531) .. (489.82932109,  760.33232533)
+    .. controls (490.27998774,  759.10832536) and (492.20532103,  758.48165871) .. (493.82932099,  758.16565872)
+  (490.89598773,  727.51099281)
+    .. controls (489.52532110,  726.15365952) and (488.32932113,  724.58299289) .. (490.78798773,  724.49899289)
+    .. controls (493.61998766,  724.40299289) and (501.82932079,  726.29099285) .. (503.57998741,  727.16565949)
+    .. controls (504.53465405,  727.64299281) and (506.07998735,  730.58299274) .. (502.34532077,  731.84565937)
+    .. controls (498.24932088,  733.23365934) and (492.55065435,  729.14832611) .. (490.89598773,  727.51099281)
+  (536.09598660,  719.86165967)
+    .. controls (533.92931999,  720.36432633) and (512.19865386,  716.67765975) .. (499.91332084,  714.49899314)
+    .. controls (481.93332129,  711.31099322) and (470.32932158,  708.16565997) .. (462.88532176,  705.36032670)
+    .. controls (458.57198854,  703.73499341) and (445.98265552,  698.81366020) .. (440.94132231,  691.36032705)
+    .. controls (439.66265568,  689.47099377) and (439.80798900,  683.43632725) .. (439.44398901,  681.91632729)
+    .. controls (438.88532236,  679.58299401) and (437.19065574,  678.58432737) .. (434.18265581,  678.02299405)
+    .. controls (426.91332266,  676.66566075) and (419.64398951,  682.58299394) .. (419.66265618,  689.86032709)
+    .. controls (419.68532284,  698.31632688) and (425.60798936,  703.41499342) .. (429.55332259,  706.96966000)
+    .. controls (433.74398916,  710.74565990) and (447.44132215,  720.13765967) .. (448.70532212,  718.47099304)
+    .. controls (449.57065543,  717.33099307) and (444.53465555,  711.52699321) .. (445.32932220,  709.80432659)
+    .. controls (445.73732219,  708.92032661) and (451.32132205,  711.04432656) .. (452.85598868,  711.66432654)
+    .. controls (455.20532195,  712.61232652) and (461.95198845,  715.57632645) .. (463.49598841,  716.52699309)
+    .. controls (464.21865506,  716.97099308) and (462.32932178,  717.99899305) .. (460.57998849,  724.16565957)
+    .. controls (459.75065517,  727.08832616) and (459.89332184,  733.08832601) .. (460.10798850,  736.99765924)
+    .. controls (460.41332182,  742.58165910) and (461.99598845,  743.69365908) .. (462.88532176,  750.13765892)
+    .. controls (463.40932175,  753.94165882) and (463.21332175,  758.85099203) .. (463.24665509,  763.49899192)
+    .. controls (463.28798842,  769.28832510) and (462.91332176,  776.79099158) .. (461.28798847,  779.58165818)
+    .. controls (459.10398852,  783.33499142) and (459.16265519,  785.41499137) .. (461.56398846,  787.06165799)
+    .. controls (463.69598841,  788.52299129) and (467.03998832,  789.16299127) .. (469.55865493,  788.64032462)
+    .. controls (471.07332156,  788.32565796) and (473.38532150,  787.30432465) .. (472.97198818,  783.31899142)
+    .. controls (472.81198818,  781.77632479) and (471.38532155,  779.80432484) .. (470.74665490,  777.16565824)
+    .. controls (469.54398826,  772.19899170) and (468.71732162,  766.42432518) .. (468.66265495,  761.49899197)
+    .. controls (468.61732162,  757.31899207) and (472.82932151,  758.83232537) .. (473.66265483,  752.13765887)
+    .. controls (474.53732147,  745.11632571) and (474.95732146,  736.34032593) .. (474.99598813,  730.97099273)
+    .. controls (475.05465479,  722.92565960) and (474.30932148,  719.34165969) .. (474.71865480,  719.36032635)
+    .. controls (476.88398808,  719.45899302) and (483.88532124,  721.52699296) .. (483.99598790,  723.16565959)
+    .. controls (484.12798790,  725.10699287) and (480.57732132,  724.27899290) .. (479.80532134,  726.25499285)
+    .. controls (478.07998805,  730.66565940) and (478.49598804,  745.20699237) .. (479.41332135,  752.24832553)
+    .. controls (479.91865467,  756.13365877) and (480.64132132,  758.04299205) .. (480.78798798,  760.54032532)
+    .. controls (480.97598798,  763.72832524) and (480.49598799,  766.24965851) .. (480.70398798,  770.04032508)
+    .. controls (480.98932131,  775.22965829) and (484.05465457,  781.59499146) .. (485.17732120,  786.51099134)
+    .. controls (486.52398784,  792.40965786) and (487.44132115,  797.87499106) .. (496.07598760,  795.66699111)
+    .. controls (502.05198745,  794.13765782) and (500.72532082,  787.43099132) .. (499.95332083,  782.88432476)
+    .. controls (499.41332085,  779.70699151) and (496.60798758,  777.52699156) .. (497.66265423,  772.69365835)
+    .. controls (498.08265421,  770.77499173) and (501.99598745,  773.30432500) .. (506.21865401,  772.08299170)
+    .. controls (507.91465397,  771.59099171) and (508.25598729,  765.93632519) .. (508.05198730,  761.08165864)
+    .. controls (507.97332063,  759.21765869) and (507.81465397,  752.69899219) .. (507.82932064,  751.83232554)
+    .. controls (507.88532064,  748.66565895) and (511.99598720,  749.74965893) .. (512.80132051,  745.85232569)
+    .. controls (513.32798717,  743.29499242) and (513.53598716,  740.52565916) .. (513.21865384,  737.63765923)
+    .. controls (512.96798718,  735.35632595) and (510.01598725,  735.36832595) .. (509.66265393,  733.80432599)
+    .. controls (509.16398727,  731.59099271) and (508.98532061,  729.32832610) .. (510.21865391,  729.24965944)
+    .. controls (512.19065386,  729.12299277) and (519.91332034,  729.80432609) .. (525.11465354,  731.78299271)
+    .. controls (526.53998684,  732.32565936) and (525.49598686,  735.12432596) .. (523.71865357,  736.80432592)
+    .. controls (522.23465361,  738.20699255) and (521.82932029,  738.29099255) .. (519.10798702,  743.69365908)
+    .. controls (517.51465373,  746.85499233) and (515.41065378,  753.78565882) .. (515.16265379,  756.63765875)
+    .. controls (514.96132046,  758.96965870) and (517.07998707,  759.16032536) .. (517.83598705,  759.73765868)
+    .. controls (518.54398704,  760.28032533) and (518.53732037,  762.00432529) .. (518.32932038,  763.13765859)
+    .. controls (517.97332038,  765.08032521) and (515.11598712,  764.31099189) .. (514.99598713,  765.47099187)
+    .. controls (514.44132047,  770.86032506) and (518.88532036,  773.13765834) .. (522.85865360,  772.50165836)
+    .. controls (526.36132017,  771.94032504) and (529.00532011,  768.54165846) .. (530.20398674,  769.87365842)
+    .. controls (531.70532004,  771.54032505) and (531.45465338,  780.09632483) .. (531.03865339,  782.70699143)
+    .. controls (530.82532006,  784.04299140) and (528.88932011,  783.82299141) .. (527.10798682,  783.47099142)
+    .. controls (523.13732025,  782.68699144) and (517.91998705,  780.70699148) .. (517.25465374,  781.47899147)
+    .. controls (515.95998710,  782.98432476) and (521.16265364,  794.74832447) .. (531.75198671,  795.31232445)
+    .. controls (539.35731985,  795.71765778) and (542.37465311,  791.12832456) .. (544.21198639,  783.24565809)
+    .. controls (546.43865301,  773.70032499) and (548.21865296,  762.08165862) .. (546.05198635,  752.02699220)
+    .. controls (545.21331970,  748.13499230) and (539.41331985,  740.49899249) .. (535.16265329,  737.49899257)
+    .. controls (532.96798668,  735.94965927) and (532.85998668,  732.85099268) .. (533.66265333,  732.97099268)
+    .. controls (544.88531971,  734.64965930) and (554.99598613,  736.24832593) .. (566.55731917,  727.45899282)
+    .. controls (574.73198563,  721.24432630) and (574.61065230,  714.82165980) .. (565.06798587,  710.35899324)
+    .. controls (557.28265273,  706.71766000) and (548.89731961,  704.19232673) .. (540.56131982,  701.98566012)
+    .. controls (537.63065323,  701.20832681) and (531.57998671,  699.49899352) .. (529.82932009,  701.83232679)
+    .. controls (527.94265347,  704.34832673) and (531.13465339,  710.47632657) .. (533.77598666,  713.74832649)
+    .. controls (536.73998658,  717.41899307) and (539.21865319,  719.13765969) .. (536.09598660,  719.86165967)
+  (490.44078774,  696.97126024)
+    .. controls (487.89412114,  695.43659362) and (486.00745452,  693.61259366) .. (483.05145459,  690.91526040)
+    .. controls (482.00212128,  689.95792709) and (479.99412133,  686.74859383) .. (476.99678808,  685.85526052)
+    .. controls (474.50212147,  685.11126054) and (471.99678820,  687.91526047) .. (471.27412155,  690.13792708)
+    .. controls (470.29012158,  693.16726034) and (470.77412156,  698.66992687) .. (473.10745484,  699.75259351)
+    .. controls (475.92345477,  701.06059348) and (480.03812133,  700.83259348) .. (484.24612123,  702.16592678)
+    .. controls (488.11945446,  703.39259342) and (490.63545440,  704.66459339) .. (494.55945430,  706.37126001)
+    .. controls (501.39412080,  709.34459327) and (506.33012068,  710.69392657) .. (511.83012054,  710.69392657)
+    .. controls (518.55145370,  710.69392657) and (525.10078687,  706.36059334) .. (525.10745354,  702.91526010)
+    .. controls (525.12078687,  695.37392695) and (519.03145369,  693.97259365) .. (515.51145378,  691.53392705)
+    .. controls (512.77412051,  689.63792709) and (514.33012048,  683.41526058) .. (517.43545373,  684.01659390)
+    .. controls (521.96345362,  684.89126055) and (530.48745340,  684.91926055) .. (534.16345331,  684.74859388)
+    .. controls (540.16345316,  684.47126056) and (544.93145304,  682.47126061) .. (544.91278638,  679.08192736)
+    .. controls (544.89145304,  674.88592746) and (542.62745310,  670.13126092) .. (537.38478657,  667.86059431)
+    .. controls (533.95411998,  666.37392768) and (528.09945346,  667.61526098) .. (527.33012015,  666.41526101)
+    .. controls (526.74745350,  665.50859436) and (527.69012014,  659.94859450) .. (527.57945348,  654.74859463)
+    .. controls (527.48878681,  650.44326141) and (527.17945349,  646.96726150) .. (524.66345355,  643.13792826)
+    .. controls (522.54345360,  639.91259500) and (518.18478705,  633.90859515) .. (512.33012053,  628.91526195)
+    .. controls (507.59412064,  624.87659538) and (503.12078742,  621.70726213) .. (497.83012089,  621.70726213)
+    .. controls (490.16345441,  621.70726213) and (480.87145464,  628.54059529) .. (474.33012148,  633.99926182)
+    .. controls (465.15278837,  641.65526163) and (458.24612188,  649.79126142) .. (460.33012183,  651.91526137)
+    .. controls (461.24745514,  652.85126135) and (466.77545500,  651.87659471) .. (472.66345485,  649.87392809)
+    .. controls (476.99412141,  648.40059479) and (490.94878773,  639.93526167) .. (494.03145432,  638.97659503)
+    .. controls (497.28612090,  637.96459505) and (503.92612074,  644.68592822) .. (504.99678738,  654.41526131)
+    .. controls (505.51012070,  659.08192786) and (506.02078735,  671.32592755) .. (504.33012073,  671.02726089)
+    .. controls (500.71812082,  670.38859424) and (473.93678815,  661.41259447) .. (470.49678824,  659.97126117)
+    .. controls (468.10478830,  658.96992786) and (461.67145512,  656.10059460) .. (459.38478852,  655.02726129)
+    .. controls (455.24612195,  653.08192801) and (447.97945547,  653.66192799) .. (448.78745545,  661.70326113)
+    .. controls (449.37012210,  667.50326098) and (450.90078873,  671.64459421) .. (459.08745519,  672.16859420)
+    .. controls (472.32078819,  673.01792751) and (499.05412086,  678.70992737) .. (501.03812081,  679.37392735)
+    .. controls (501.72345412,  679.60326068) and (499.70478751,  682.41526061) .. (497.16345424,  685.47126053)
+    .. controls (495.04878762,  688.01259380) and (493.23012100,  689.90592709) .. (493.24612100,  692.20726036)
+    .. controls (493.27412100,  696.13792693) and (504.57145405,  694.69926030) .. (506.05145402,  695.91526027)
+    .. controls (507.53278731,  697.13259357) and (508.72078728,  701.09259348) .. (506.99678733,  701.52726013)
+    .. controls (502.35812077,  702.69392677) and (494.49678764,  699.41526018) .. (490.44078774,  696.97126024)}
+%    \end{macrocode}
+%
+% 而。
+%    \begin{macrocode}
+\def\fdulogo at motto@er at i{%
+  (461.66398846,  521.23979797)
+    .. controls (458.99598853,  527.08246449) and (472.53065485,  539.48513085) .. (475.21865479,  544.85979738)
+    .. controls (476.99598808,  548.41579729) and (475.94132143,  551.52646388) .. (472.38532152,  549.41579727)
+    .. controls (469.05465494,  547.43846398) and (458.63332187,  543.46246408) .. (456.42132192,  547.74913064)
+    .. controls (454.32932198,  551.80513054) and (460.82932181,  560.35979699) .. (466.95065499,  564.42246356)
+    .. controls (473.84532149,  568.99713011) and (490.41865441,  577.49579657) .. (502.87198743,  569.37446343)
+    .. controls (511.49598721,  563.74913024) and (511.32932055,  558.33179704) .. (505.56532069,  552.93046385)
+    .. controls (501.92398745,  549.51846393) and (496.83465425,  546.36113068) .. (493.24665434,  543.41579742)
+    .. controls (485.96265452,  537.43446423) and (478.11865471,  528.56513112) .. (473.66132149,  524.41713123)
+    .. controls (469.71865492,  520.74779798) and (462.48265510,  519.44779802) .. (461.66398846,  521.23979797)
+  (546.32931968,  518.98566469)
+    .. controls (546.61998633,  523.10033126) and (546.32931968,  527.41633115) .. (542.66265310,  527.65633114)
+    .. controls (537.49065323,  527.99499780) and (510.67465390,  525.49633120) .. (509.65598726,  521.49899797)
+    .. controls (508.91332061,  518.58299804) and (515.44132045,  517.13766474) .. (518.57998704,  507.58299831)
+    .. controls (520.01065367,  503.22566509) and (518.96798703,  496.66566525) .. (520.91332031,  494.33233198)
+    .. controls (523.59598691,  491.11366539) and (528.76398678,  488.95766545) .. (531.66265338,  488.08299880)
+    .. controls (534.60798663,  487.19366549) and (536.81465325,  490.43366541) .. (539.74665317,  494.83233197)
+    .. controls (544.41331972,  501.83233179) and (545.82931969,  511.90299821) .. (546.32931968,  518.98566469)
+  (498.49732087,  530.70833107)
+    .. controls (508.24665396,  533.74966433) and (529.91465342,  538.43633088) .. (543.32931975,  539.08299753)
+    .. controls (556.60798608,  539.72166418) and (567.39998582,  534.18699765) .. (568.66265245,  525.86033119)
+    .. controls (570.82931906,  511.58299821) and (570.88531906,  504.47099839) .. (563.89731924,  491.04966539)
+    .. controls (561.09331931,  485.66433219) and (556.52665275,  481.04699898) .. (551.93198620,  477.05099908)
+    .. controls (545.75065302,  471.67499921) and (541.49731980,  470.89633256) .. (536.21865326,  470.58299924)
+    .. controls (526.88532016,  470.02699925) and (520.67332032,  480.32966566) .. (518.57998704,  480.24966566)
+    .. controls (514.24665381,  480.08299900) and (511.57998721,  464.91633271) .. (506.83732066,  462.48966611)
+    .. controls (504.57865405,  461.33366614) and (502.17065411,  462.86433276) .. (501.41332080,  467.08299933)
+    .. controls (500.24665416,  473.58299916) and (500.84265415,  491.84966537) .. (500.22265416,  499.16699852)
+    .. controls (499.82932084,  503.80433174) and (495.77065427,  504.87633171) .. (495.12532096,  503.36833175)
+    .. controls (494.05198765,  500.86033181) and (495.27465428,  494.91633196) .. (494.46798764,  489.60966543)
+    .. controls (493.74532099,  484.84699888) and (490.16265441,  482.50299894) .. (487.44132115,  482.02699895)
+    .. controls (485.21065454,  481.63633230) and (481.55198796,  482.52699894) .. (479.49598801,  488.63766545)
+    .. controls (476.59865475,  497.25499857) and (477.41198806,  510.16433158) .. (483.77465457,  510.58299824)
+    .. controls (487.57998781,  510.83233157) and (490.55465440,  506.33366501) .. (491.91865437,  507.90699830)
+    .. controls (493.66265433,  509.91633159) and (496.05332093,  517.31233140) .. (493.71865432,  517.91633139)
+    .. controls (492.40132102,  518.25633138) and (485.25598787,  515.80299811) .. (477.91332139,  511.91633154)
+    .. controls (470.44398824,  507.96166497) and (463.58798841,  501.50166513) .. (460.88532181,  496.24966526)
+    .. controls (458.21998854,  491.07099873) and (459.75598851,  486.31899884) .. (459.16265519,  480.33233233)
+    .. controls (458.32932188,  471.91633254) and (452.09198870,  467.21099932) .. (447.79465547,  466.89633266)
+    .. controls (443.49598891,  466.58299934) and (437.99598905,  472.24966586) .. (437.07198907,  480.16566567)
+    .. controls (436.15998910,  487.98166547) and (437.70132239,  497.62033190) .. (439.57998901,  505.83233169)
+    .. controls (440.57998899,  510.20566491) and (443.49065558,  518.47899804) .. (447.27465548,  518.52699804)
+    .. controls (451.60798871,  518.58299804) and (455.63332194,  506.69366500) .. (457.10798857,  506.91633166)
+    .. controls (460.49598849,  507.42699832) and (467.16265499,  515.36433145) .. (471.71865487,  518.30433138)
+    .. controls (477.82932139,  522.24966461) and (485.80665452,  526.74966450) .. (498.49732087,  530.70833107)}
+%    \end{macrocode}
+%
+% 笃。
+%    \begin{macrocode}
+\def\fdulogo at motto@du{%
+  (491.26185439,364.0330019)
+    .. controls (490.21918774,  365.05433521) and (485.86052119,  365.21300187) .. (483.96852123,  364.85966855)
+    .. controls (482.05785462,  364.50366856) and (480.77652131,  361.88100196) .. (482.45518794,  361.16633531)
+    .. controls (484.01785457,  360.49966866) and (488.39652112,  360.37033533) .. (489.88185442,  360.56766866)
+    .. controls (491.13118772,  360.73433532) and (491.72185437,  363.58233525) .. (491.26185439,  364.03300190)
+  (498.07918755,  309.24900327)
+    .. controls (495.40718761,  308.81433662) and (494.07918765,  307.79033664) .. (494.82985430,  305.12367004)
+    .. controls (495.38718762,  303.13967009) and (497.10052091,  300.70767015) .. (499.20452085,  301.35300347)
+    .. controls (500.60318748,  301.78233679) and (501.00318747,  302.68633677) .. (501.07918747,  304.95700338)
+    .. controls (501.16318747,  307.43700332) and (499.87118750,  309.54100326) .. (498.07918755,  309.24900327)
+  (513.70452049,  390.37433458)
+    .. controls (513.75385382,  392.10633453) and (512.80585385,  393.27566784) .. (510.68052057,  391.91433454)
+    .. controls (509.81918725,  391.36366789) and (508.63385395,  389.53966793) .. (507.32985398,  387.94366797)
+    .. controls (506.33518734,  386.72633467) and (505.35785403,  385.49300137) .. (504.91252071,  384.44366806)
+    .. controls (503.66318741,  381.49966813) and (505.89252069,  379.53300151) .. (508.24585396,  381.02633481)
+    .. controls (509.30718727,  381.69966813) and (509.86718725,  383.61700141) .. (510.91252056,  385.24900137)
+    .. controls (512.14452053,  387.17166799) and (513.66318716,  388.91566795) .. (513.70452049,  390.37433458)
+  (496.44052092,  347.91566897)
+    .. controls (493.14852100,  342.35966911) and (487.07918782,  342.66633577) .. (482.74585460,  346.08233568)
+    .. controls (477.92052139,  349.88766892) and (479.77385467,  357.30233540) .. (477.27518807,  357.35700207)
+    .. controls (474.57918814,  357.41566873) and (474.95785479,  352.38100219) .. (474.49652147,  351.44366888)
+    .. controls (473.63518816,  349.69300226) and (471.25918822,  350.27033558) .. (468.88585494,  349.97166892)
+    .. controls (465.80185502,  349.58233560) and (465.21918837,  348.16633563) .. (463.74585507,  348.30500229)
+    .. controls (461.03252181,  348.56100229) and (460.10718850,  349.27700227) .. (457.91252189,  349.74900226)
+    .. controls (455.31252195,  350.30900224) and (450.94052206,  349.41566893) .. (450.44052207,  355.63833544)
+    .. controls (449.97918875,  361.37833530) and (454.17918865,  365.29966854) .. (457.82985522,  371.66633504)
+    .. controls (460.86985514,  376.96633491) and (461.78852179,  382.66633477) .. (464.32985506,  384.74900138)
+    .. controls (466.36718834,  386.41966801) and (469.16852160,  385.19700137) .. (471.32985488,  385.66633469)
+    .. controls (473.82985482,  386.20766801) and (475.22452145,  387.77966797) .. (476.57918809,  387.74900131)
+    .. controls (482.69918793,  387.61433465) and (483.38585458,  381.13833481) .. (488.16318780,  381.08233481)
+    .. controls (493.07652101,  381.02500148) and (506.05252068,  393.85966782) .. (511.32985388,  398.63833437)
+    .. controls (516.60718708,  403.41566758) and (526.18318685,  412.05033403) .. (534.27385331,  405.24900087)
+    .. controls (535.89118660,  403.88900091) and (538.52051987,  400.89300098) .. (538.27385321,  398.02633439)
+    .. controls (537.66318656,  390.91566790) and (529.43385343,  387.95833464) .. (531.07918672,  384.66633472)
+    .. controls (531.99652003,  382.83300143) and (536.99651991,  384.30500139) .. (541.85385312,  382.19700145)
+    .. controls (548.41118629,  379.35166819) and (549.44051960,  373.19300167) .. (542.82985310,  368.24900180)
+    .. controls (537.34718657,  364.14900190) and (531.04452006,  363.72500191) .. (534.22051998,  357.18633541)
+    .. controls (536.05251993,  353.41566883) and (536.30451993,  350.42900224) .. (533.28318667,  347.61433565)
+    .. controls (530.38585341,  344.91566905) and (525.47118686,  346.40500234) .. (524.07918690,  344.74900238)
+    .. controls (522.23518694,  342.55433577) and (525.44052020,  341.22233581) .. (525.32985353,  337.02633591)
+    .. controls (525.21918687,  332.80500268) and (517.32985373,  332.35966936) .. (517.32985373,  329.91566942)
+    .. controls (517.32985373,  328.06100280) and (517.00452041,  326.62233617) .. (518.37918704,  326.18100285)
+    .. controls (520.82985365,  325.39433620) and (525.69518686,  326.30766951) .. (526.10052018,  323.50233625)
+    .. controls (526.45118684,  321.08766964) and (526.44052017,  316.61033642) .. (524.99652021,  315.74900311)
+    .. controls (523.49385358,  314.85300313) and (520.01518700,  315.67166978) .. (519.57118701,  314.44900314)
+    .. controls (519.19785369,  313.42366983) and (519.28585368,  311.29433655) .. (520.05252033,  311.08233656)
+    .. controls (522.37385361,  310.43966991) and (526.12985351,  311.77966987) .. (528.99652011,  311.58233655)
+    .. controls (531.51518671,  311.40900322) and (532.50452002,  309.87300326) .. (532.45518669,  306.41567001)
+    .. controls (532.34852002,  299.02367019) and (526.09652018,  299.02900353) .. (522.49652027,  296.83300358)
+    .. controls (519.28852035,  294.87433696) and (518.28852038,  288.99967044) .. (521.06585364,  287.72500381)
+    .. controls (523.74318691,  286.49567051) and (532.77652001,  291.14233706) .. (541.38585313,  293.85967032)
+    .. controls (548.53651962,  296.11700360) and (554.31251948,  297.13300357) .. (560.75918598,  297.13833691)
+    .. controls (572.57651902,  297.14767024) and (579.51918551,  289.53033710) .. (579.20318552,  278.51967071)
+    .. controls (578.60185220,  257.56100456) and (564.04051923,  237.39967173) .. (545.09118637,  229.35300527)
+    .. controls (532.67518668,  224.07967207) and (522.02318695,  225.81567202) .. (513.44052050,  235.58233845)
+    .. controls (507.82985397,  241.96900495) and (499.03252086,  249.68633809) .. (496.38585426,  249.35967144)
+    .. controls (493.72185432,  249.03300478) and (482.01785462,  246.01167152) .. (473.93118815,  244.41033823)
+    .. controls (466.41918834,  242.92233826) and (446.60718883,  239.41567168) .. (436.60718908,  238.35967171)
+    .. controls (432.82718918,  237.96100505) and (431.32985588,  236.49967176) .. (428.49652262,  236.41567176)
+    .. controls (425.05652271,  236.31433843) and (422.24585611,  237.95700505) .. (419.66318951,  241.66633829)
+    .. controls (417.99918955,  244.05433823) and (416.92052291,  247.78500481) .. (417.28852290,  251.12367139)
+    .. controls (417.70452289,  254.91567130) and (421.87918945,  256.95833791) .. (428.66318928,  257.62367123)
+    .. controls (436.16318910,  258.35967121) and (438.25385571,  256.52100459) .. (446.88985549,  256.70900458)
+    .. controls (453.82985532,  256.85967125) and (472.74585485,  258.33300454) .. (481.45518796,  259.49967118)
+    .. controls (483.41785458,  259.76233784) and (485.44185453,  260.25567116) .. (486.83252116,  260.77167115)
+    .. controls (487.26585449,  260.93167115) and (485.01252121,  265.87167102) .. (485.82985452,  266.08233768)
+    .. controls (487.77385447,  266.58233767) and (492.26718769,  263.18367109) .. (494.82985430,  263.58233775)
+    .. controls (501.17118747,  264.57167105) and (510.05785392,  265.77833769) .. (516.13518710,  266.74900433)
+    .. controls (523.76585357,  267.96767097) and (532.82985335,  268.13833763) .. (533.53518666,  265.93967102)
+    .. controls (534.00451998,  264.47833772) and (528.48852012,  260.62500449) .. (522.77385360,  257.91567122)
+    .. controls (517.58452039,  255.45567128) and (511.47918721,  254.14900465) .. (512.32985386,  253.49967133)
+    .. controls (513.60185383,  252.52767136) and (530.44452007,  246.09833818) .. (534.49651997,  247.08233816)
+    .. controls (537.41251990,  247.79033814) and (543.77785307,  254.45700464) .. (549.55251959,  264.91567105)
+    .. controls (553.81251949,  272.63167085) and (558.50718604,  288.15433713) .. (556.57918609,  289.33300377)
+    .. controls (554.65251947,  290.51033707) and (541.27785313,  286.57700384) .. (534.14051998,  284.39833723)
+    .. controls (520.45918699,  279.91300400) and (507.27385398,  274.85967080) .. (492.93518768,  271.51167088)
+    .. controls (488.76185445,  270.53700424) and (481.10718797,  269.69567093) .. (478.88585469,  272.91567085)
+    .. controls (476.11518810,  276.93033741) and (476.04052143,  285.11433721) .. (476.32985476,  293.16633701)
+    .. controls (476.60852142,  300.93567015) and (477.15518807,  308.58766995) .. (479.77385467,  311.91566987)
+    .. controls (482.19918795,  314.99700313) and (490.84052106,  317.42366973) .. (493.74585432,  318.08233638)
+    .. controls (499.99652083,  319.49966968) and (498.51652087,  322.47033627) .. (498.51652087,  325.80500286)
+    .. controls (498.51652087,  328.13833613) and (494.71918763,  327.13833616) .. (490.66318773,  327.91566947)
+    .. controls (487.01652116,  328.61566945) and (485.28718787,  332.57566935) .. (489.75652109,  337.50100257)
+    .. controls (491.45918771,  339.37833585) and (495.38585428,  341.74900246) .. (496.49652092,  342.41566911)
+    .. controls (497.60718756,  343.08233576) and (503.04452076,  345.68900236) .. (507.21918732,  346.13833568)
+    .. controls (512.50318719,  346.70500233) and (514.66318713,  346.02633569) .. (517.44052040,  347.52633565)
+    .. controls (521.31518697,  349.61966893) and (521.26318697,  364.89166855) .. (520.91252031,  366.74900183)
+    .. controls (520.44185366,  369.25033510) and (515.92585377,  366.09566852) .. (514.05252048,  366.47166851)
+    .. controls (509.62585393,  367.47966848) and (507.55252064,  370.80500173) .. (503.71918741,  370.02633509)
+    .. controls (498.80452086,  369.03033511) and (495.55652094,  362.61833527) .. (495.71652094,  357.26366874)
+    .. controls (495.84185427,  353.03433551) and (499.10718752,  352.41566886) .. (496.44052092,  347.91566897)}
+%    \end{macrocode}
+%
+% 志。
+%    \begin{macrocode}
+\def\fdulogo at motto@zhi{%
+  (512.24638719,  153.66567383)
+    .. controls (512.47838719,  150.62834057) and (511.49705388,  146.99900733) .. (513.74638716,  147.41634065)
+    .. controls (518.23038704,  148.24567396) and (526.40638684,  149.32967394) .. (527.24638682,  145.37367403)
+    .. controls (527.95438680,  142.04034078) and (528.16238680,  138.71500753) .. (523.77438691,  135.19367429)
+    .. controls (520.66372032,  132.69767435) and (517.50372040,  132.90034101) .. (515.55172044,  130.47100774)
+    .. controls (513.99438715,  128.53500779) and (513.96905382,  119.16567469) .. (516.77438708,  119.63767468)
+    .. controls (519.48905368,  120.09500800) and (524.63572022,  121.27634130) .. (528.07972013,  121.41634130)
+    .. controls (533.64771999,  121.64034129) and (537.49438656,  118.33367471) .. (537.49571990,  113.41634150)
+    .. controls (537.49705323,  110.36034158) and (533.90638665,  106.28300835) .. (530.34105341,  105.88567502)
+    .. controls (526.60772017,  105.47100837) and (525.24638687,  108.58167495) .. (521.07972031,  108.62434162)
+    .. controls (515.94905377,  108.67500829) and (510.59972057,  106.95100833) .. (499.49572085,  104.08167507)
+    .. controls (493.72772099,  102.59234177) and (488.03838780,  100.72834182) .. (482.69705460,  99.520341850)
+    .. controls (477.65972139,   98.38034188) and (471.57838821,  96.480341920) .. (465.94105502,  96.248341930)
+    .. controls (463.30372175,   96.14034193) and (458.61438853,  96.236341930) .. (457.80238855,  100.31100849)
+    .. controls (457.05172191,  104.08167507) and (457.67972189,  107.07500833) .. (462.44105511,  109.24834160)
+    .. controls (467.55172164,  111.58300821) and (482.99705459,  112.86034151) .. (489.38505443,  114.30434148)
+    .. controls (492.46772102,  115.00167479) and (491.70505437,  123.16567459) .. (490.12105441,  123.70700791)
+    .. controls (487.46638781,  124.61634122) and (478.63838803,  121.42434130) .. (472.78238818,  122.42567461)
+    .. controls (469.96772158,  122.90700793) and (463.91305507,  123.10700792) .. (464.49572172,  129.33234110)
+    .. controls (465.10772171,  135.86034094) and (484.69438788,  137.48434090) .. (488.35172112,  138.72967420)
+    .. controls (491.99572103,  139.97100750) and (491.07438772,  146.65634067) .. (490.57972107,  149.11767394)
+    .. controls (488.73572111,  158.29634038) and (489.04505444,  164.86034021) .. (500.27838749,  165.97367352)
+    .. controls (511.62238721,  167.09767349) and (512.05572053,  156.16300710) .. (512.24638719,  153.66567383)
+  (477.14665474,   84.89994221)
+    .. controls (472.73998818,   81.22527564) and (467.58798831,   76.65460909) .. (463.99598840,   72.30394253)
+    .. controls (462.33465511,   70.29194258) and (463.05465509,   58.65327620) .. (463.10798842,   55.47060962)
+    .. controls (463.21865509,   48.80394312) and (460.37198849,   40.91594331) .. (453.45465533,   40.91594331)
+    .. controls (445.28798887,   40.91594331) and (444.20265556,   46.74927650) .. (443.32932225,   50.99860973)
+    .. controls (442.19732228,   56.51327626) and (443.66132224,   63.83994274) .. (445.21865554,   66.35994268)
+    .. controls (446.79598883,   68.91194261) and (452.75865535,   71.92527587) .. (457.92665522,   75.68794244)
+    .. controls (468.97065494,   83.72927558) and (482.18532128,   94.29727531) .. (483.77465457,   92.64660869)
+    .. controls (485.03865454,   91.33194205) and (479.27598802,   86.67460884) .. (477.14665474,   84.89994221)
+  (476.49638809,   72.74900918)
+    .. controls (480.21905466,   74.35967581) and (501.89638745,   50.07834308) .. (510.82972056,   47.24900982)
+    .. controls (515.82972044,   45.66634319) and (532.30172003,   46.16634318) .. (537.63505323,   46.24900985)
+    .. controls (538.76705320,   46.26634318) and (540.66305315,   46.49967651) .. (540.59505315,   47.73300981)
+    .. controls (540.52038649,   49.09834311) and (500.66305415,   75.58234245) .. (503.74572074,   79.16500902)
+    .. controls (505.18172070,   80.83300898) and (525.21905354,   70.58234257) .. (540.71905315,   64.52634272)
+    .. controls (556.74171941,   58.26634288) and (572.32971903,   53.35967634) .. (572.32971903,   48.58234312)
+    .. controls (572.32971903,   43.46367658) and (566.08038585,   43.41567658) .. (563.08038592,   39.49967668)
+    .. controls (561.54438596,   37.49567673) and (561.41371930,   34.58234347) .. (558.66305270,   32.58234352)
+    .. controls (549.60438626,   25.99434369) and (535.51105328,   25.81434369) .. (524.88572021,   26.15834368)
+    .. controls (504.88572071,   26.80501033) and (495.99638760,   29.91567692) .. (487.99638780,   40.91567665)
+    .. controls (478.70838803,   53.68767633) and (473.71505482,   71.54500921) .. (476.49638809,   72.74900918)
+  (507.10745399,   87.63794214)
+    .. controls (508.21812063,   90.80460873) and (515.55412044,   93.42460867) .. (524.74612021,   94.66594197)
+    .. controls (535.22878662,   96.08060860) and (548.44611962,   96.18060860) .. (551.57945288,   95.24860862)
+    .. controls (557.74611939,   93.41527533) and (560.91278598,   86.41527551) .. (560.49678599,   80.49927566)
+    .. controls (560.21945266,   76.56594242) and (556.38478609,   75.08194246) .. (553.55145283,   75.08194246)
+    .. controls (549.55145293,   75.08194246) and (543.79011974,   76.84460908) .. (539.55811984,   77.15260907)
+    .. controls (532.15012003,   77.69394239) and (524.42745356,   78.01127572) .. (520.71812032,   78.58194237)
+    .. controls (514.94078713,   79.47127568) and (505.79145402,   83.88727557) .. (507.10745399,   87.63794214)}
+%    \end{macrocode}
+%
+% 切。
+%    \begin{macrocode}
+\def\fdulogo at motto@qie{%
+  ( 70.41306491,  978.12405322)
+    .. controls ( 68.59973162,  977.99071989) and ( 61.77439846,  976.13738660) .. ( 56.44106526,  974.19338665)
+    .. controls ( 51.01039872,  972.21338670) and ( 47.16373215,  968.74938678) .. ( 42.77439893,  967.74938681)
+    .. controls ( 38.32373238,  966.73472017) and ( 27.71839931,  965.08272021) .. ( 25.59173269,  972.32672003)
+    .. controls ( 24.69706605,  975.37205328) and ( 31.35573255,  978.65738654) .. ( 35.71839911,  981.09738648)
+    .. controls ( 40.16373233,  983.58271975) and ( 50.54506540,  987.01471966) .. ( 56.73839858,  988.37605296)
+    .. controls ( 60.80639848,  989.26938627) and ( 70.49573157,  991.41605288) .. ( 72.62106485,  992.66538619)
+    .. controls ( 74.04239815,  993.50138617) and ( 73.41306483, 1004.24938590) .. ( 72.24639819, 1007.16538582)
+    .. controls ( 69.62239826, 1013.72405233) and ( 69.98906492, 1025.04271871) .. ( 79.22106469, 1025.33205204)
+    .. controls ( 87.39039782, 1025.58938536) and ( 88.54373112, 1019.55471885) .. ( 88.66373112, 1011.74938571)
+    .. controls ( 88.73039778, 1007.33605249) and ( 85.75306452,  999.49871935) .. ( 87.44106448,  996.69338609)
+    .. controls ( 89.12906444,  993.88805282) and ( 95.55173094,  997.80405272) .. ( 96.82639758,  996.37605276)
+    .. controls ( 98.79706420,  994.16671948) and ( 99.24373085,  989.33205294) .. ( 96.61173092,  988.43205296)
+    .. controls ( 90.38506441,  986.30405301) and ( 86.55173117,  986.91605300) .. ( 85.04773121,  978.98671986)
+    .. controls ( 84.33173123,  975.21471996) and ( 84.13839790,  971.34805339) .. ( 83.83039790,  966.74938683)
+    .. controls ( 83.38773125,  960.16272033) and ( 83.64373124,  956.11872043) .. ( 84.03173123,  955.66538711)
+    .. controls ( 85.20506454,  954.29072048) and (101.00239747,  967.46805348) .. (109.66239726,  973.83205332)
+    .. controls (119.56506368,  981.10938647) and (128.27839679,  988.06005297) .. (131.55173004,  989.97071959)
+    .. controls (133.45439666,  991.08271956) and (135.66906327,  994.46271947) .. (136.49706325,  993.99871949)
+    .. controls (138.57972987,  992.83205285) and (137.16372990,  989.69338626) .. (141.07972981,  989.66538626)
+    .. controls (146.73839633,  989.62538626) and (150.99706289,  989.74938626) .. (150.41306291,  983.16538642)
+    .. controls (149.91972959,  977.59471990) and (149.02906294,  971.76405338) .. (148.24639629,  966.99872016)
+    .. controls (147.24639632,  960.91605365) and (152.66372952,  965.49872020) .. (153.99972948,  959.75472034)
+    .. controls (154.93972946,  955.71338711) and (159.54106268,  956.39872043) .. (161.71306262,  958.37872038)
+    .. controls (163.88506257,  960.36005366) and (167.24372915,  970.34538674) .. (168.57972912,  981.08271981)
+    .. controls (169.87439575,  991.48805288) and (171.32772905, 1007.98271914) .. (169.68772909, 1009.37205243)
+    .. controls (167.74239581, 1011.02138573) and (157.99706272, 1000.24938600) .. (149.74639626, 1000.41605266)
+    .. controls (142.70639643,  999.65471934) and (137.03706324, 1002.73205260) .. (136.51572992, 1004.14138590)
+    .. controls (135.48372995, 1006.93471916) and (143.43439641, 1010.10538575) .. (147.18639632, 1011.49471905)
+    .. controls (154.63972947, 1014.25338565) and (161.57972929, 1014.66538564) .. (168.57972912, 1017.83205222)
+    .. controls (171.25039572, 1019.04005219) and (172.36639569, 1022.16405212) .. (173.91306232, 1021.83205212)
+    .. controls (181.62772879, 1020.17738550) and (191.32772855, 1014.26005231) .. (191.90772854, 1006.67205250)
+    .. controls (192.90639518,  993.61871950) and (192.74639518,  980.61738649) .. (190.68106190,  965.57872020)
+    .. controls (189.56506193,  957.44672040) and (184.02772873,  952.24005386) .. (178.35172887,  946.71472067)
+    .. controls (172.59039569,  941.10672081) and (157.91306272,  936.49872092) .. (152.73706285,  940.72538748)
+    .. controls (147.28239632,  945.18005404) and (145.86106302,  950.55472057) .. (144.49706305,  951.86005387)
+    .. controls (143.37972975,  952.92805385) and (141.25306314,  950.52005391) .. (139.24639652,  947.33205399)
+    .. controls (134.99706329,  940.58272082) and (127.31439682,  929.87605442) .. (121.49706363,  923.08272126)
+    .. controls (115.30639712,  915.85338811) and (111.05173056,  911.24938822) .. (109.11439727,  912.24938820)
+    .. controls (107.65439731,  913.00272151) and (116.65706375,  928.63472112) .. (123.88506357,  945.80405402)
+    .. controls (130.10106341,  960.57072032) and (135.21172995,  976.57605325) .. (134.44106331,  982.30405311)
+    .. controls (133.99572998,  985.60805303) and (131.79706337,  985.56138636) .. (129.92239675,  984.51471972)
+    .. controls (124.86506355,  981.68938646) and (118.97706369,  970.97472006) .. (114.49706380,  965.99872019)
+    .. controls (101.56239746,  951.63472055) and (100.63439748,  950.83205390) .. ( 87.21839782,  936.91605425)
+    .. controls ( 81.92773129,  931.42805438) and ( 71.99573153,  921.13738797) .. ( 69.28773160,  920.91605465)
+    .. controls ( 66.92506499,  920.72138798) and ( 66.88506499,  923.74938791) .. ( 64.83039838,  924.58272122)
+    .. controls ( 62.35306511,  925.58672120) and ( 60.49706515,  924.19338790) .. ( 57.99039855,  926.09872118)
+    .. controls ( 50.60506540,  931.71205438) and ( 62.66373177,  937.69338756) .. ( 66.88506499,  948.02672064)
+    .. controls ( 71.88239820,  960.25605366) and ( 73.33039817,  968.25205346) .. ( 73.83039815,  974.16538665)
+    .. controls ( 74.15306481,  977.99338655) and ( 72.20506486,  978.25605321) .. ( 70.41306491,  978.12405322)}
+%    \end{macrocode}
+%
+% 问。
+%    \begin{macrocode}
+\def\fdulogo at motto@wen{%
+  (113.88533049,  800.33232433)
+    .. controls (113.88533049,  792.49899119) and (103.44133075,  785.91499135) .. ( 93.77466432,  787.69365798)
+    .. controls ( 91.97599770,  788.02432464) and ( 91.99599770,  790.54032457) .. ( 92.36799769,  792.02699120)
+    .. controls ( 93.00133101,  794.55499114) and ( 94.03866432,  794.79099113) .. ( 94.21866431,  797.41499107)
+    .. controls ( 94.41999764,  800.34565766) and ( 90.55199774,  798.87365770) .. ( 90.55199774,  802.45765761)
+    .. controls ( 90.55199774,  807.73499081) and ( 91.41999771,  813.70699066) .. ( 93.82799765,  814.61899064)
+    .. controls ( 95.18533095,  815.13232396) and ( 99.94266417,  810.02832409) .. (104.23466406,  809.80299076)
+    .. controls (109.99599725,  809.49899077) and (113.88533049,  808.05499080) .. (113.88533049,  800.33232433)
+  ( 68.24639829,  746.24899235)
+    .. controls ( 76.02373143,  746.24899235) and ( 76.30906476,  717.77832639) .. ( 76.32906476,  695.74899361)
+    .. controls ( 76.34639809,  678.91566070) and ( 73.70373149,  668.63299429) .. ( 68.82639828,  668.61832762)
+    .. controls ( 65.44106503,  668.60899429) and ( 58.49173187,  673.23166084) .. ( 57.54506523,  683.24899392)
+    .. controls ( 55.93039860,  700.35032683) and ( 58.49706520,  720.08232633) .. ( 62.50239844,  732.20499270)
+    .. controls ( 63.84106507,  736.25832593) and ( 65.57973169,  746.24899235) .. ( 68.24639829,  746.24899235)
+  (117.19559707,  733.34792600)
+    .. controls (114.83026380,  735.24925929) and ( 94.68759763,  733.44392600) .. ( 94.49693097,  732.49859269)
+    .. controls ( 93.99693098,  730.02659275) and ( 98.73693086,  730.33459274) .. ( 99.60759751,  726.35992618)
+    .. controls (100.98626414,  720.06125967) and (103.24626409,  712.70792652) .. (105.56093069,  712.68259319)
+    .. controls (106.91293066,  712.66792652) and (110.07293058,  717.64525973) .. (112.74626385,  722.74925960)
+    .. controls (115.32226378,  727.66792614) and (118.09959705,  732.62125935) .. (117.19559707,  733.34792600)
+  (125.07959687,  717.74925973)
+    .. controls (125.16359687,  710.58259324) and (136.33026326,  717.41592640) .. (136.33026326,  709.91592659)
+    .. controls (136.33026326,  706.99859333) and (134.99692996,  703.58259341) .. (132.91293001,  703.16526009)
+    .. controls (128.86226345,  702.35592678) and (122.66493027,  701.93192679) .. (122.83026360,  700.99859348)
+    .. controls (123.33026358,  698.16526022) and (134.45826331,  690.91192706) .. (137.88492989,  690.69326040)
+    .. controls (139.35426318,  690.59992707) and (141.45292980,  694.44792697) .. (141.41292980,  701.24926014)
+    .. controls (141.33026313,  715.33192645) and (141.46226313,  737.09459258) .. (141.41292980,  747.83192564)
+    .. controls (141.33026313,  766.24925851) and (140.87559648,  775.70525828) .. (135.57959661,  774.99859163)
+    .. controls (130.28359674,  774.29192498) and (125.66359686,  768.83192512) .. (123.01693026,  763.93192524)
+    .. controls (119.17693035,  756.81859208) and (114.00093048,  755.98125877) .. (107.77559731,  760.51859199)
+    .. controls (103.80893074,  763.40925858) and ( 98.44093087,  763.85725857) .. ( 95.31426428,  763.30525859)
+    .. controls ( 91.04359772,  762.55192527) and ( 89.00626444,  756.68125875) .. ( 87.94093113,  755.30392545)
+    .. controls ( 85.66359786,  752.35992553) and ( 82.55159794,  750.35992558) .. ( 78.55159804,  751.41592555)
+    .. controls ( 74.74493146,  752.41992553) and ( 68.07959830,  757.89592539) .. ( 68.07959830,  764.08259190)
+    .. controls ( 68.07959830,  770.26925841) and ( 73.10359817,  771.43059172) .. ( 75.41826478,  770.34659174)
+    .. controls ( 78.83026470,  768.74925845) and ( 80.62226465,  763.49992525) .. ( 86.29693118,  765.48925853)
+    .. controls ( 89.41293110,  766.58259184) and ( 95.18626429,  773.48792500) .. (102.21826411,  775.08259163)
+    .. controls (106.99693066,  776.16525827) and (113.86626382,  773.31725834) .. (116.63959708,  776.18925826)
+    .. controls (122.11293028,  781.85592479) and (125.22626354,  780.03192484) .. (130.24626341,  783.74925808)
+    .. controls (133.91559665,  786.46659134) and (136.36892992,  790.42792458) .. (144.21826306,  790.47059124)
+    .. controls (150.91292956,  790.50792457) and (155.77292944,  786.62259134) .. (160.33026266,  779.80392484)
+    .. controls (164.95292921,  772.88792501) and (165.57559586,  766.17059185) .. (165.99692918,  757.80392539)
+    .. controls (166.52626250,  747.25325899) and (165.26626254,  744.26125906) .. (165.66359586,  734.41592598)
+    .. controls (166.04092918,  725.02125954) and (169.01826244,  708.54259329) .. (169.90626242,  696.58259359)
+    .. controls (171.03426239,  681.39592730) and (156.09159610,  668.34259429) .. (145.21826304,  666.42526101)
+    .. controls (136.66359658,  664.91592771) and (132.88493001,  670.47059424) .. (130.10759675,  675.24926079)
+    .. controls (123.69826357,  686.27192718) and (115.95026377,  694.92259363) .. (110.10759725,  698.24926021)
+    .. controls (106.83959733,  700.10926017) and (101.64359746,  698.15726022) .. ( 96.44093092,  699.02659353)
+    .. controls ( 89.31159777,  700.21726016) and ( 86.33293118,  709.19592661) .. ( 85.74626452,  719.16525969)
+    .. controls ( 85.49693120,  723.41592625) and ( 89.71026442,  729.00125944) .. ( 90.50226440,  730.49725941)
+    .. controls ( 91.91293104,  733.16525934) and ( 90.13959775,  736.64125925) .. ( 92.66359768,  738.58259254)
+    .. controls (100.24626416,  744.41592573) and (111.62759721,  747.60659231) .. (119.89826367,  748.24125896)
+    .. controls (123.97026357,  748.55325896) and (129.79693009,  746.79459233) .. (132.24626336,  743.41592575)
+    .. controls (134.66359663,  740.08259250) and (134.83026330,  735.58259261) .. (133.07559667,  730.62659274)
+    .. controls (131.31159672,  725.63992619) and (125.03826354,  721.36525964) .. (125.07959687,  717.74925973)}
+%    \end{macrocode}
+%
+% 而。
+%    \begin{macrocode}
+\def\fdulogo at motto@er at ii{%
+  (108.90466394,  536.58766425)
+    .. controls (109.87666392,  538.57566420) and (102.97266409,  537.08499758) .. ( 98.66333087,  536.37433093)
+    .. controls ( 94.84066430,  535.74366428) and ( 88.89133111,  534.12899765) .. ( 86.55266450,  538.04633088)
+    .. controls ( 84.44066456,  541.58233080) and ( 89.92999775,  547.88499731) .. ( 94.20733098,  550.49299724)
+    .. controls ( 99.89399750,  553.95833049) and (111.29533055,  558.12099705) .. (118.74599703,  558.49966371)
+    .. controls (125.64599686,  558.84899703) and (133.83799665,  551.11166389) .. (133.85132999,  544.52899739)
+    .. controls (133.85932999,  539.75166418) and (127.88866347,  534.22766431) .. (126.31133018,  532.76633102)
+    .. controls (121.78999696,  528.57966445) and ( 98.29533088,  509.82766492) .. ( 92.82999768,  505.85966502)
+    .. controls ( 88.25133113,  502.53566511) and ( 86.05133118,  503.03566509) .. ( 85.59266453,  503.66499841)
+    .. controls ( 85.02466454,  504.44366506) and ( 86.99666449,  508.74899828) .. ( 91.82999770,  514.91566480)
+    .. controls ( 98.69266420,  523.67166458) and (106.80599733,  532.29699770) .. (108.90466394,  536.58766425)
+  (133.85066332,  493.80459866)
+    .. controls (134.29466331,  488.91526545) and (146.75732966,  471.29926589) .. (155.10399612,  472.01393254)
+    .. controls (160.93732931,  472.51393252) and (165.88532919,  481.74859896) .. (167.66266248,  488.19393213)
+    .. controls (168.81732911,  492.37926536) and (169.31332910,  501.70726513) .. (168.63866245,  502.65793177)
+    .. controls (167.98799580,  503.57259841) and (159.59866268,  500.35793183) .. (151.99599620,  498.87393186)
+    .. controls (143.42132975,  497.20059857) and (133.68132999,  495.66459861) .. (133.85066332,  493.80459866)
+  (119.70533034,  486.04059885)
+    .. controls (118.57999704,  486.62459884) and (116.17199710,  486.29259885) .. (115.62133044,  485.54059886)
+    .. controls (115.16266379,  484.91526555) and (116.61999708,  465.61526603) .. (113.77733049,  461.77526612)
+    .. controls (110.88399723,  457.86993289) and (102.49199744,  457.94193289) .. ( 99.68399751,  460.35259949)
+    .. controls ( 96.45466426,  463.12459942) and ( 94.27733098,  467.76593264) .. ( 94.44133097,  472.47126586)
+    .. controls ( 94.62133097,  477.66593239) and ( 97.28666423,  483.17793226) .. ( 95.79999761,  484.01126557)
+    .. controls ( 94.97599763,  484.47393222) and ( 86.97466449,  480.91259898) .. ( 82.37199794,  480.20726566)
+    .. controls ( 75.94133143,  479.22059902) and ( 74.85066480,  485.58193220) .. ( 73.28799817,  485.33259887)
+    .. controls ( 70.95599823,  484.95926555) and ( 72.57999819,  474.64459914) .. ( 73.60799816,  468.02726597)
+    .. controls ( 74.32133148,  463.43126608) and ( 75.78533144,  458.58059954) .. ( 75.32933145,  455.63793294)
+    .. controls ( 74.49599814,  450.24859975) and ( 71.07999822,  448.08193313) .. ( 66.74399833,  447.52726648)
+    .. controls ( 62.58933177,  446.99659983) and ( 58.03866522,  450.99926639) .. ( 55.91333194,  456.29126626)
+    .. controls ( 54.88399863,  458.85259953) and ( 53.27866533,  461.95393279) .. ( 53.38933200,  475.23793245)
+    .. controls ( 53.47866533,  485.96859885) and ( 56.64133192,  504.78593172) .. ( 61.67199846,  508.24993163)
+    .. controls ( 67.35733165,  512.16326487) and ( 70.84266490,  506.77793167) .. ( 71.96133153,  503.75393174)
+    .. controls ( 73.07999817,  500.72993182) and ( 71.44799821,  494.38059864) .. ( 73.20533150,  493.24859867)
+    .. controls ( 74.21866481,  492.59659869) and ( 85.44933120,  497.09259858) .. ( 99.66266418,  500.83259848)
+    .. controls (114.55199714,  504.74859838) and (131.64933004,  508.53526496) .. (143.95466307,  510.95793156)
+    .. controls (156.87199608,  513.49926483) and (174.41332897,  516.70726475) .. (181.47199546,  514.83393147)
+    .. controls (187.07332866,  513.34859817) and (191.83332854,  505.08059838) .. (193.02266184,  499.35526519)
+    .. controls (194.44132847,  492.52726536) and (194.20799514,  479.94593234) .. (188.99599528,  470.13793258)
+    .. controls (185.57732869,  463.70459941) and (180.38532882,  460.47126616) .. (173.56799566,  457.37926623)
+    .. controls (169.12932911,  455.36726629) and (158.60132937,  452.72859968) .. (153.71866282,  453.13793301)
+    .. controls (145.77466302,  453.80459966) and (142.66399643,  465.36459937) .. (139.82932984,  465.58193270)
+    .. controls (136.21866326,  465.86059936) and (133.63332999,  458.01526622) .. (130.27466341,  452.41526636)
+    .. controls (127.86533014,  448.40059979) and (124.58533022,  445.84059986) .. (123.16266359,  446.02726652)
+    .. controls (120.82933031,  446.33259984) and (121.47333030,  457.59259956) .. (121.60799696,  467.80459931)
+    .. controls (121.71866362,  476.24859910) and (120.89599698,  485.42326553) .. (119.70533034,  486.04059885)}
+%    \end{macrocode}
+%
+% 近。
+%    \begin{macrocode}
+\def\fdulogo at motto@jin{%
+  (147.52999631,  311.63046988)
+    .. controls (148.58999629,  309.42913660) and (152.49666285,  307.13846999) .. (155.99532943,  297.70780356)
+    .. controls (158.12599605,  291.96247037) and (159.99666267,  280.74913732) .. (159.64332934,  273.74780416)
+    .. controls (159.23266269,  265.59180436) and (157.10066274,  260.92113781) .. (154.41532947,  257.01847124)
+    .. controls (150.25666291,  250.97713806) and (146.14599635,  247.36913815) .. (147.32999632,  247.08247149)
+    .. controls (150.07932958,  246.41580484) and (181.78199546,  246.25847151) .. (191.17132855,  248.63447145)
+    .. controls (201.71799496,  251.30513805) and (223.91666107,  249.58647143) .. (224.21799439,  243.24913825)
+    .. controls (224.52066105,  236.91180508) and (214.10332798,  233.82647182) .. (202.32999494,  231.99847187)
+    .. controls (191.77399521,  230.35980524) and (153.31132950,  227.27047199) .. (134.81932996,  228.33180529)
+    .. controls (111.10733056,  229.69313859) and ( 94.27533098,  234.98247179) .. ( 80.55133132,  240.13847167)
+    .. controls ( 70.49666490,  243.91580490) and ( 62.00199845,  249.09180478) .. ( 55.44066528,  249.69313809)
+    .. controls ( 50.32866541,  250.16247142) and ( 46.21799884,  248.13847147) .. ( 42.82999893,  244.69313822)
+    .. controls ( 39.36333235,  241.17047164) and ( 34.71799913,  241.69313829) .. ( 32.66333252,  244.24913823)
+    .. controls ( 31.71666587,  245.42647153) and ( 29.24599927,  249.70780476) .. ( 31.59799921,  254.44247131)
+    .. controls ( 33.57133249,  258.41313788) and ( 37.53133240,  261.19180447) .. ( 41.82999895,  262.62380444)
+    .. controls ( 47.16333215,  264.40113773) and ( 54.84866530,  263.66647108) .. ( 54.91266529,  265.66513769)
+    .. controls ( 55.03799862,  269.54113760) and ( 50.16333208,  275.91580410) .. ( 47.32999882,  284.91580388)
+    .. controls ( 45.24466554,  291.53713705) and ( 44.63399888,  303.49313675) .. ( 44.74599888,  312.16513653)
+    .. controls ( 44.79666555,  316.04113643) and ( 45.49933220,  319.51446968) .. ( 45.44066553,  322.30513628)
+    .. controls ( 45.32999887,  327.63846948) and ( 43.71533224,  330.87180273) .. ( 43.77133224,  334.48246931)
+    .. controls ( 43.83799890,  338.86646920) and ( 44.82733221,  343.80513574) .. ( 48.99666544,  343.91580240)
+    .. controls ( 55.24599862,  344.08246907) and ( 57.56066523,  337.90380256) .. ( 58.24599854,  331.83180271)
+    .. controls ( 58.82999853,  326.66513617) and ( 56.79799858,  319.75846968) .. ( 56.75133191,  314.24913648)
+    .. controls ( 56.66333192,  303.58247008) and ( 59.79266517,  301.92113679) .. ( 63.00733176,  295.52513695)
+    .. controls ( 66.16333168,  289.24913710) and ( 66.24466501,  276.24913743) .. ( 66.24466501,  265.97180435)
+    .. controls ( 66.24466501,  262.88780443) and ( 71.16733155,  260.61713782) .. ( 78.21799804,  257.80513789)
+    .. controls ( 84.61666455,  255.25180462) and ( 92.80599768,  252.25713803) .. (100.57933082,  250.49847141)
+    .. controls (110.16333058,  248.33180479) and (137.50332990,  246.89447150) .. (138.89132986,  247.36647149)
+    .. controls (141.16332980,  248.13847147) and (137.05132991,  250.52647141) .. (136.85932991,  256.47047126)
+    .. controls (136.64999658,  262.92113776) and (136.15666326,  308.45713662) .. (135.71532994,  308.55313662)
+    .. controls (132.49666335,  309.24913660) and (118.69266370,  301.95047012) .. (118.55133037,  293.58247033)
+    .. controls (118.41266371,  285.33180387) and (116.57933042,  277.41580407) .. (112.66466385,  268.59847095)
+    .. controls (109.55666393,  261.59980446) and (104.05666407,  254.43580464) .. ( 99.10999752,  255.39847128)
+    .. controls ( 93.57799766,  256.47447126) and ( 89.94599775,  263.78247107) .. ( 89.47133110,  271.23847089)
+    .. controls ( 88.99666444,  278.69313737) and ( 91.36733105,  295.31580362) .. ( 94.57799764,  309.33313660)
+    .. controls ( 97.74599756,  323.16513626) and (104.65399738,  336.30380260) .. (107.88466397,  341.63846913)
+    .. controls (109.72599726,  344.67713572) and (112.85266385,  350.43046891) .. (116.38466376,  358.30513538)
+    .. controls (118.76999703,  363.61980191) and (119.21799702,  369.63846843) .. (123.07933026,  370.91580173)
+    .. controls (127.88866347,  372.50646836) and (130.19533008,  369.12780177) .. (133.12199667,  368.58246845)
+    .. controls (135.57932994,  368.12380180) and (138.91266319,  368.54113512) .. (141.18599647,  367.05313516)
+    .. controls (142.73132977,  366.04246852) and (143.94066307,  364.24913523) .. (143.85399640,  359.57980201)
+    .. controls (143.76199641,  354.61713547) and (140.43399649,  350.66780224) .. (135.32999662,  347.63846898)
+    .. controls (130.22599674,  344.60780239) and (118.23266371,  338.83313587) .. (116.71799708,  335.08246929)
+    .. controls (116.09933043,  333.54780266) and (116.42466376,  327.45046948) .. (116.66333042,  321.74913629)
+    .. controls (116.91666374,  315.68780311) and (117.13933040,  310.05313658) .. (118.41266371,  310.08246992)
+    .. controls (119.71799701,  310.11180325) and (125.09799687,  319.04113636) .. (132.78866335,  324.87446955)
+    .. controls (138.17266321,  328.95846945) and (144.78466305,  331.71446938) .. (149.10732961,  333.74913599)
+    .. controls (154.41799614,  336.24913593) and (162.34866261,  337.07046924) .. (165.78866252,  335.24913595)
+    .. controls (170.03799575,  332.99846934) and (172.99666234,  329.83180276) .. (173.16332900,  325.99846952)
+    .. controls (173.30732900,  322.66780294) and (172.03799570,  320.29046966) .. (169.21799577,  317.74913639)
+    .. controls (166.46066251,  315.26246979) and (162.63532927,  314.11046982) .. (158.74599603,  313.88780316)
+    .. controls (153.96466282,  313.61446983) and (146.78332966,  313.18246984) .. (147.52999631,  311.63046988)}
+%    \end{macrocode}
+%
+% 思。
+%    \begin{macrocode}
+\def\fdulogo at motto@si{%
+  (106.49093067,  108.99527494)
+    .. controls (107.99626397,  108.66594162) and (109.39359727,  109.32060827) .. (110.41359724,  111.66594154)
+    .. controls (112.08026386,  115.49927478) and (112.58026385,  120.99927464) .. (111.08026389,  121.66594129)
+    .. controls (109.64693059,  122.30327461) and (104.98826404,  120.65127465) .. (104.03359740,  120.00460800)
+    .. controls (102.34959744,  118.86460803) and (105.34026403,  109.24727494) .. (106.49093067,  108.99527494)
+  ( 93.55226433,   38.30461004)
+    .. controls ( 91.74159771,   33.33527684) and ( 87.66293114,   27.77527697) .. ( 79.82959800,   27.80461031)
+    .. controls ( 74.49759814,   27.82461031) and ( 71.40826488,   31.66327688) .. ( 69.12159827,   36.40061009)
+    .. controls ( 66.58026500,   41.66594329) and ( 68.38293162,   53.36727634) .. ( 71.54026488,   59.73527618)
+    .. controls ( 76.03759810,   68.80594262) and ( 85.36026453,   77.49794240) .. ( 85.16693120,   78.80327570)
+    .. controls ( 84.83893121,   81.01527564) and ( 79.32959802,   82.33260894) .. ( 78.16293138,   86.70727550)
+    .. controls ( 76.04826477,   94.63794197) and ( 89.88559775,   94.02727532) .. ( 90.00826442,   96.90727525)
+    .. controls ( 90.17359775,  100.80327515) and ( 80.55226465,  107.13794166) .. ( 80.24693133,  118.99927469)
+    .. controls ( 79.98826467,  129.03394111) and ( 82.75626460,  143.82727407) .. ( 85.77359786,  144.24860740)
+    .. controls ( 87.65226448,  144.51127406) and ( 98.21893088,  128.58194112) .. (101.22559747,  129.59527443)
+    .. controls (103.59626408,  130.39260774) and (107.60693064,  133.24860767) .. (109.16293060,  135.36060762)
+    .. controls (110.87093056,  137.67660756) and (111.02693056,  140.45927416) .. (111.60693054,  143.52727408)
+    .. controls (112.38559719,  147.63794064) and (119.11893036,  149.52327393) .. (121.90026362,  148.91527395)
+    .. controls (125.71893019,  148.08194063) and (128.20959679,  143.25127409) .. (129.77359676,  141.63794079)
+    .. controls (131.55226338,  139.80460751) and (134.96692996,  139.03794086) .. (134.98426329,  134.57794097)
+    .. controls (134.99626329,  131.19394106) and (132.67226335,  130.15794108) .. (131.78826337,  128.12460780)
+    .. controls (130.95493006,  126.20727451) and (130.85093006,  124.21527456) .. (130.12159675,  122.58194127)
+    .. controls (128.01093013,  117.86060806) and (125.46959686,  112.70860818) .. (126.91359683,  112.66594152)
+    .. controls (129.74693009,  112.58194152) and (135.20426329,  125.02727454) .. (142.32959644,  136.91527425)
+    .. controls (148.52026295,  147.24194065) and (151.95492953,  152.08194053) .. (151.95492953,  155.20727379)
+    .. controls (151.95492953,  157.78460706) and (139.55226318,  156.80460708) .. (128.66293012,  155.97127377)
+    .. controls (120.72559698,  155.36327379) and (105.30026403,  154.68727380) .. (105.06293071,  155.59527378)
+    .. controls (104.41359739,  158.08194038) and (107.78293064,  163.07260693) .. (118.44026371,  166.24860685)
+    .. controls (123.65626358,  167.80327347) and (143.06559642,  168.37794013) .. (152.58026285,  165.99927352)
+    .. controls (160.91359598,  163.91527357) and (172.26826236,  150.59127390) .. (174.74692896,  146.41527401)
+    .. controls (176.73626225,  143.06327409) and (175.10692896,  138.36060754) .. (171.26426239,  131.99527437)
+    .. controls (168.19492913,  126.91260783) and (160.09092933,  118.71260803) .. (153.99626282,  111.69394154)
+    .. controls (150.84292956,  108.06194163) and (148.52026295,  103.64327508) .. (146.05226302,  100.86060848)
+    .. controls (142.99626309,   97.41527523) and (132.12159670,   94.86060863) .. (124.58026355,   92.99927534)
+    .. controls (118.95359703,   91.60994205) and (106.72959733,   87.84860881) .. (103.41359741,   86.33260884)
+    .. controls (101.65893079,   85.52994220) and ( 98.92026419,   81.12727564) .. ( 98.98426419,   76.91394241)
+    .. controls ( 99.10693086,   68.86060928) and ( 98.60693087,   63.08194276) .. ( 97.66293089,   55.83260961)
+    .. controls ( 96.79493091,   49.16860977) and ( 96.03493093,   45.12060987) .. ( 93.55226433,   38.30461004)
+  (100.89439748,   57.58234290)
+    .. controls (101.56773079,   59.78367617) and (110.22639724,   56.74234292) .. (114.57306380,   54.50500964)
+    .. controls (123.16373025,   50.08234308) and (132.66373002,   41.41567663) .. (140.20506316,   39.04101003)
+    .. controls (143.06772976,   38.13967672) and (158.71839603,   37.29034340) .. (158.83039603,   39.58234335)
+    .. controls (158.94639603,   41.98367662) and (148.73839628,   46.95167650) .. (144.33039639,   50.74900973)
+    .. controls (140.16906316,   54.33167631) and (130.74639673,   62.99834276) .. (132.24106336,   65.39700937)
+    .. controls (133.55972999,   67.51167598) and (143.95706307,   62.07167612) .. (149.83039625,   60.49967616)
+    .. controls (154.49706280,   59.24900952) and (163.29172925,   58.37167621) .. (171.74639571,   56.66634292)
+    .. controls (181.79706212,   54.63834297) and (192.89039518,   51.46900972) .. (199.00639502,   48.75967645)
+    .. controls (206.71039483,   45.34634320) and (207.40239481,   43.34900992) .. (202.28639494,   37.40901007)
+    .. controls (197.58372839,   31.94767687) and (190.61039523,   25.90234369) .. (183.41306208,   23.33301042)
+    .. controls (169.41306243,   18.33301054) and (150.69039623,   18.54634387) .. (136.69706325,   20.04767717)
+    .. controls (120.84639698,   21.74634379) and (113.83039715,   31.41567688) .. (110.24639724,   37.24901007)
+    .. controls (107.79973064,   41.23167664) and (104.83573071,   49.55034310) .. (103.57973074,   52.16634303)
+    .. controls (102.32373078,   54.78234297) and (100.67573082,   56.86634291) .. (100.89439748,   57.58234290)
+  (128.04773013,   74.22207581)
+    .. controls (126.84373016,   74.84474246) and (132.99706334,   84.33274223) .. (142.83039643,   90.16607542)
+    .. controls (150.18506291,   94.52874197) and (161.83039595,   99.36074185) .. (170.55172907,   99.36074185)
+    .. controls (176.49706225,   99.36074185) and (181.49706213,   96.74874192) .. (184.56239539,   93.83274199)
+    .. controls (187.18772865,   91.33540872) and (188.57306195,   88.19274213) .. (188.28106196,   83.24874225)
+    .. controls (187.99706197,   78.41540904) and (183.91306207,   75.57407578) .. (178.07572888,   75.45407578)
+    .. controls (163.99706257,   75.16607579) and (146.80906300,   79.21140902) .. (141.89306312,   79.04474236)
+    .. controls (135.37706328,   78.82340903) and (130.41306341,   72.99940918) .. (128.04773013,   74.22207581)}
+%</logo>
+%    \end{macrocode}
+%
+% \end{implementation}
+%


Property changes on: trunk/Master/texmf-dist/source/latex/fduthesis/fduthesis-logo.dtx
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/source/latex/fduthesis/fduthesis.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/fduthesis/fduthesis.dtx	                        (rev 0)
+++ trunk/Master/texmf-dist/source/latex/fduthesis/fduthesis.dtx	2018-04-09 21:17:26 UTC (rev 47408)
@@ -0,0 +1,6205 @@
+% \iffalse meta-comment
+% !TeX program  = XeLaTeX
+% !TeX encoding = UTF-8
+%
+% Copyright (C) 2017, 2018 by Xiangdong Zeng <xdzeng96 at gmail.com>
+%
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either
+% version 1.3c of this license or (at your option) any later
+% version. The latest version of this license is in:
+%
+%   http://www.latex-project.org/lppl.txt
+%
+% and version 1.3 or later is part of all distributions of
+% LaTeX version 2005/12/01 or later.
+%
+% This work has the LPPL maintenance status `maintained'.
+%
+% The Current Maintainer of this work is Xiangdong Zeng.
+%
+% This work consists of the files fduthesis.dtx,
+%                                 fduthesis-doc.dtx,
+%                                 fduthesis-logo.dtx,
+%                                 fduthesis-template.tex,
+%           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,
+%                                 fduthesis.pdf,
+%                                 fduthesis-en.pdf,
+%                                 fduthesis-code.pdf,
+%                                 latexmkrc,
+%                                 latexmkrc-en,
+%                             and README.md.
+%
+%<*internal>
+\iffalse
+%</internal>
+%
+%<*readme>
+The `fduthesis` Class
+=====================
+
+*LaTeX thesis template for Fudan University, v0.7a*
+
+Overview
+--------
+
+`fduthesis` is a thesis template for Fudan University. This template
+is mostly written in LaTeX3, with a simple interface for users.
+
+At present, only XeTeX, LuaTeX and [ApTeX](https://github.com/clerkma/ptex-ng)
+(experimental) are supported.
+
+The documentation can be found in
+[fduthesis.pdf](https://github.com/Stone-Zeng/fduthesis/releases/download/v0.7a/fduthesis.pdf)
+(in Chinese) or
+[fduthesis-en.pdf](https://github.com/Stone-Zeng/fduthesis/releases/download/v0.7a/fduthesis-en.pdf)
+(in English).
+
+Installation
+------------
+
+To install `fduthesis`, you can use one of the following methods:
+
+- Download
+  [fduthesis.tds.zip](https://github.com/Stone-Zeng/fduthesis/releases/download/v0.7a/fduthesis.tds.zip)
+  from GitHub, extract it in the root of one of your TDS trees, and
+  update the filename database.
+
+- Get the source (`fduthesis.zip`) from GitHub:
+
+      git clone https://github.com/Stone-Zeng/fduthesis.git
+
+  Run
+
+      xetex fduthesis.dtx
+
+  to generate the templates and configuration files. Then 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`
+
+  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, 2018 by Xiangdong Zeng <xdzeng96 at gmail.com>.
+%</readme>
+%
+%<*internal>
+\fi
+\begingroup
+  \def\NameOfLaTeXe{LaTeX2e}
+\expandafter\endgroup\ifx\NameOfLaTeXe\fmtname\else
+\csname fi\endcsname
+%</internal>
+%
+%<*install>
+\input l3docstrip.tex
+\keepsilent
+\askforoverwritefalse
+
+\preamble
+
+    Copyright (C) 2017, 2018 by Xiangdong Zeng <xdzeng96 at gmail.com>
+
+    This work may be distributed and/or modified under the
+    conditions of the LaTeX Project Public License, either
+    version 1.3c of this license or (at your option) any later
+    version. The latest version of this license is in:
+
+      http://www.latex-project.org/lppl.txt
+
+    and version 1.3 or later is part of all distributions of
+    LaTeX version 2005/12/01 or later.
+
+    This work has the LPPL maintenance status `maintained'.
+
+    The Current Maintainer of this work is Xiangdong Zeng.
+
+    This work consists of the files fduthesis.dtx,
+                                    fduthesis-doc.dtx,
+                                    fduthesis-logo.dtx,
+                                    fduthesis-template.tex,
+              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,
+                                    fduthesis.pdf,
+                                    fduthesis-en.pdf,
+                                    fduthesis-code.pdf,
+                                    latexmkrc,
+                                    latexmkrc-en,
+                                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}}
+%</install>
+%<*internal>
+  \usedir{source/latex/fduthesis}
+    \file{\jobname.ins}        {\from{\jobname.dtx}{install}}
+%</internal>
+%<*install>
+  \usedir{doc/latex/fduthesis}
+  \nopreamble\nopostamble
+    \file{README.md}           {\from{\jobname.dtx}{readme}}
+    % ``.cfg'' is only for internal/temporal use.
+    % They will be renamed by external scripts.
+    \file{latexmkrc.cfg}       {\from{\jobname-doc.dtx}{latexmk}}
+    \file{latexmkrc-en.cfg}    {\from{\jobname-doc.dtx}{latexmk-en}}
+}
+
+\obeyspaces
+\Msg{*************************************************************}
+\Msg{*                                                           *}
+\Msg{* To finish the installation you have to move the following *}
+\Msg{* files into a directory searched by TeX:                   *}
+\Msg{*                                                           *}
+\Msg{* The recommended directory is TDS:tex/latex/fduthesis      *}
+\Msg{*                                                           *}
+\Msg{*     fduthesis.cls                                         *}
+\Msg{*     fduthesis-en.cls                                      *}
+\Msg{*     fduthesis.def                                         *}
+\Msg{*     fdudoc.cls                                            *}
+\Msg{*     fdulogo.sty                                           *}
+\Msg{*                                                           *}
+\Msg{* To produce the documentation, run the file fduthesis.dtx  *}
+\Msg{* through XeLaTeX.                                          *}
+\Msg{*                                                           *}
+\Msg{* Happy TeXing!                                             *}
+\Msg{*                                                           *}
+\Msg{*************************************************************}
+
+\endbatchfile
+%</install>
+%
+%<*internal>
+\fi
+%</internal>
+%
+%<class|class-en|doc|logo>\NeedsTeXFormat{LaTeX2e}
+%<class|class-en|doc|logo>\RequirePackage{expl3}
+%<*!(driver|install|ex-logo|cover)>
+%<!readme>\GetIdInfo $Id: fduthesis.dtx 0.7a 2018-04-09 12:00:00Z Xiangdong Zeng <xdzeng96 at gmail.com> $
+%<class>  {Thesis template for Fudan University}
+%<class>\ProvidesExplClass{\ExplFileName}
+%<class-en>  {Thesis template for Fudan University (English version)}
+%<class-en>\ProvidesExplClass{\ExplFileName-en}
+%<definition>  {Definition file for fduthesis}
+%<definition>\ProvidesExplFile{\ExplFileName.def}
+%<doc>  {Documentation class for fduthesis}
+%<doc>\ProvidesExplClass{fdudoc}
+%<logo>  {Fudan University's Visual Identity}
+%<logo>\ProvidesExplPackage{fdulogo}
+%<!readme>  {\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription}
+%</!(driver|install|ex-logo|cover)>
+%<*driver>
+%\PassOptionsToPackage{showframe}{geometry}
+\documentclass{fdudoc}
+\usepackage{xpinyin}
+\hypersetup
+  {
+    pdftitle  = {fduthesis: 复旦大学论文模板},
+    pdfauthor = {曾祥东}
+  }
+\renewcommand*\expstar{\hyperlink{expstar}{$\mfrake$}}
+\renewcommand*\rexpstar{\hyperlink{rexpstar}{$\mfrakc$}}
+% 全角标点放在引号中,需要改成半角式,否则间距过大,不好看
+\newcommand\FSID{“{\xeCJKsetup{PunctStyle=banjiao}。}”} ^^A U+3002
+\newcommand\FSFW{“{\xeCJKsetup{PunctStyle=banjiao}.}”} ^^A U+FF0E
+\newcommand\COFW{“{\xeCJKsetup{PunctStyle=banjiao}:}”} ^^A U+FF1A
+\newcommand\SCFW{“{\xeCJKsetup{PunctStyle=banjiao};}”} ^^A U+FF1B
+\begin{document}
+  \DisableImplementation
+%<!--CODEDOC-->  \EnableImplementation
+%<!--CODEDOC-->  \def\FDUCODEDOC{}
+  \DocInput{fduthesis.dtx}
+%<!--CODEDOC-->  \DocInput{fduthesis-doc.dtx,fduthesis-logo.dtx}
+  \IndexLayout
+  \PrintChanges
+  \PrintIndex
+\end{document}
+%</driver>
+% \fi
+%
+% \changes{v0.1}{2017/02/15}{开始编写模板。}
+% \changes{v0.2}{2017/02/19}{使用 Git 进行版本控制,并发布至 GitHub。}
+% \changes{v0.3}{2017/02/21}{使用 \cls{doc} 和 \pkg{DocStrip}。}
+% \changes{v0.3}{2017/03/04}{支持 \LuaLaTeX{}。}
+% \changes{v0.3}{2017/03/20}{添加测试文件。}
+% \changes{v0.3}{2017/05/26}{使用 Travis CI 进行持续集成。}
+% \changes{v0.3}{2017/06/23}{添加复旦大学视觉识别系统。}
+% \changes{v0.3}{2017/07/05}{新增声明页。}
+% \changes{v0.3}{2017/07/10}{添加英文模板。}
+% \changes{v0.3}{2017/07/19}{使用 \pkg{l3docstrip} 管理名字空间。}
+% \changes{v0.3}{2017/07/28}{整理代码,编写用户文档。}
+% \changes{v0.4}{2017/08/03}{拆分 \file{dtx} 文件。}
+% \changes{v0.4}{2017/08/11}{添加错误信息提示。}
+% \changes{v0.6}{2017/11/23}{同步 \pkg{ctex} v2.4.11。}
+% \changes{v0.6}{2017/11/29}{添加英文版用户文档。}
+% \changes{v0.7}{2018/01/26}{使用 \pkg{l3build} 进行回归测试。}
+% \changes{v0.7}{2018/01/31}{不再需要 \file{fduthesis-user.def}。}
+% \changes{v0.7}{2018/03/04}{所有选项更改为用连字符隔开的形式。}
+% \changes{v0.7a}{2018/04/09}{更新文档,发布至 CTAN。}
+%
+% \CheckSum{0}
+%
+% \CharacterTable
+%  {Upper-case    \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+%   Lower-case    \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+%   Digits        \0\1\2\3\4\5\6\7\8\9
+%   Exclamation   \!     Double quote  \"     Hash (number) \#
+%   Dollar        \$     Percent       \%     Ampersand     \&
+%   Acute accent  \'     Left paren    \(     Right paren   \)
+%   Asterisk      \*     Plus          \+     Comma         \,
+%   Minus         \-     Point         \.     Solidus       \/
+%   Colon         \:     Semicolon     \;     Less than     \<
+%   Equals        \=     Greater than  \>     Question mark \?
+%   Commercial at \@     Left bracket  \[     Backslash     \\
+%   Right bracket \]     Circumflex    \^     Underscore    \_
+%   Grave accent  \`     Left brace    \{     Vertical bar  \|
+%   Right brace   \}     Tilde         \~}
+%
+%^^A! \PassOptionsToPackage{scheme=plain, linespread=1.1}{ctex}
+%^^A! \documentclass{fdudoc}
+%^^A! \hypersetup
+%^^A!   {
+%^^A!     pdftitle  = {fduthesis: LaTeX Thesis Template for Fudan University},
+%^^A!     pdfauthor = {Xiangdong Zeng}
+%^^A!   }
+%^^A! \ctexset
+%^^A!   {
+%^^A!     section = {name = {}, format+ = \raggedright},
+%^^A!     subsubsection/tocline = {\CTEXnumberline{#1}#2}
+%^^A!   }
+%^^A! \pagestyle{headings}
+%^^A! \renewcommand*\expstar{\hyperlink{expstar}{$\mfrake$}}
+%^^A! \renewcommand*\rexpstar{\hyperlink{rexpstar}{$\mfrakc$}}
+%^^A! \newcommand\FSID{{\xeCJKsetup{PunctStyle=banjiao}。}}
+%^^A! \newcommand\FSFW{{\xeCJKsetup{PunctStyle=banjiao}.}}
+%^^A! \IndexPrologue{\section{Index}}
+%^^A! \def\IndexLayout{%
+%^^A!   \setlength\IndexMin{0.5\textheight}%
+%^^A!   \ctexset{section/numbering=false}%
+%^^A!   \StopSpecialIndexModule}
+%^^A! \def\indexname{Index}
+%^^A! \let\usage\relax
+%^^A!
+%
+% \title{\textcolor{MaterialIndigo800}{^^A
+%   \textbf{fduthesis: 复旦大学论文^^A
+%     \xpinyin[font=\sffamily]{模}{mu2}板}}}
+% \author{曾祥东}
+% \date{\today \quad v0.7a^^A
+%   \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{\today \quad v0.7a%
+%^^A!   \thanks{\url{https://github.com/Stone-Zeng/fduthesis}.}}
+%^^A!
+%^^A! \begin{document}
+%^^A!
+%
+%^^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.75 in,
+%   right  = 1.00 in,
+%   top    = 1.25 in,
+%   bottom = 1.00 in
+% }
+%
+%^^A-
+%
+% \section{介绍}
+%^^A! \section{Introduction}
+%^^A!
+%
+% 目前,在网上可以找到的复旦大学 \LaTeX{} 论文模板主要有以下这些:
+% \begin{itemize}
+%   \item 数学科学学院 2001 级的何力同学和李湛同学在 2005 年根据
+%     学校要求所设计的 \cls{毕业论文格式 tex04 版},以及 2008 年
+%     张越同学修改之后的 \cls{毕业论文格式 tex08 版},这是专为
+%     数院本科生撰写毕业论文而设计的
+%     \scite{数院毕业论文格式,数院毕业论文格式更新};
+%   \item Pandoxie 编写的 \cls{FDU-Thesis-Latex}
+%     \scite{pandoxie2014fduthesislatex},基本满足了博士(硕士)
+%     毕业论文格式要求,使用人数较多;
+%   \item richarddzh 编写的硕士论文模板 \cls{fudan-thesis}
+%     \scite{richard2016fudanthesis};
+%   \item hmshan 编写的博士论文模板 \cls{FDU_PhD_Thesis_Template}
+%     \scite{hmshan2017fduphdthesistemplate}。
+% \end{itemize}
+% 以上这些模板大都没有经过系统的设计,也鲜有后续维护。相比之下,
+% 清华大学 \scite{thuthesis}、重庆大学 \scite{cquthesis}、
+% 中国科学技术大学 \scite{zepinglee2017ustcthesis} 以及友校
+% 上海交通大学 \scite{weijianwen2017sjtuthesis}等,都有成熟、
+% 稳定的解决方案,值得参考。
+%
+% 本模板将借鉴前辈经验,重新设计,并使用 \LaTeX3
+% \scite{interfaces3,source3} 编写,以适应 \TeX{} 技术发展潮流;
+% 同时还将构建一套简洁的接口,方便用户使用。
+%^^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{} 入门》
+% \scite{刘海洋2013latex入门} 第一章,或大名鼎鼎的“\pkg{lshort}”
+% \scite{lshort} 及其中文翻译版 \scite{lshort-zh-cn}。当然,
+% 网络上的入门教程多如牛毛,您可以自行选取。
+%^^A! This documentation is \emph{not} a \LaTeX{} tutorial at
+%^^A! starter's level. If you are totally a newbie, please read some
+%^^A! introductions like the famous \pkg{lshort}. Of course, there
+%^^A! are countless \LaTeX{} tutorials on the Internet. You can
+%^^A! choose whatever you like.
+%^^A!
+%
+% \subsection*{关于本文档}
+%^^A! \subsection*{About this documentation}
+%^^A!
+%
+% 本文采用不同字体表示不同内容。无衬线字体表示宏包名称,如
+% \pkg{xeCJK} 宏包、\cls{fduthesis} 文档类等;等宽字体表示代码或
+% 文件名,如 \cs{fdusetup} 命令、\env{abstract} 环境、\TeX{} 文档
+% \file{thesis.tex} 等;带有尖括号的楷体(或西文斜体)表示命令参数,
+% 如 \meta{模板选项}、\meta{English title} 等。在使用时,参数两侧
+% 的尖括号不必输入。示例代码进行了语法高亮处理,以方便阅读。
+%^^A! In this documentation, different typefaces are used to
+%^^A! represent different contents. Packages and classes are shown
+%^^A! in sans-serif font, e.g.\ \pkg{xeCJK} package and
+%^^A! \cls{fduthesis} class. Commands and file names are shown in
+%^^A! monospaced font, e.g.\ command \cs{fdusetup}, environment
+%^^A! \env{abstract} and \TeX{} document \file{thesis.tex}.
+%^^A! Italic-shaped font with angle brackets outside means arguments,
+%^^A! e.g.\ \meta{English title}. However, you do not need to type
+%^^A! the brackets when using these commands. The example code has
+%^^A! proper syntax highlighting so it will be much easier to read.
+%^^A!
+%
+% 在用户手册中,带有蓝色侧边线的为 \LaTeX{} 代码,而带有粉色侧边线
+% 的则为命令行代码,请注意区分。模板提供的选项、命令、环境等,
+% 均用横线框起,同时给出使用语法和相关说明。
+%^^A! \LaTeX{} code lines will have a blue line on their left, while
+%^^A! for command lines there will be a pink line. The options,
+%^^A! commands and environments in \cls{fduthesis} will be surrounded
+%^^A! by two horizontal lines. Their usages and descriptions are
+%^^A! provided at the same time.
+%^^A!
+%
+% 本模板中的选项、命令或环境可以分为以下三类:
+% \begin{itemize}
+%   \item 名字后面带有 \rexptarget\rexpstar{} 的,表示只能在^^A
+%     \emph{中文模板}中使用;
+%   \item 名字后面带有 \exptarget\expstar{} 的,表示只能在^^A
+%     \emph{英文模板}中使用;
+%   \item 名字后面不带有特殊符号的,表示既可以在中文模板中使用,
+%     也可以在英文模板中使用。
+% \end{itemize}
+%^^A! The options, commands and environments in \cls{fduthesis} can be
+%^^A! divided into the following three types:
+%^^A! \begin{itemize}
+%^^A!   \item Those can be only used in \emph{Chinese templates} are
+%^^A!     indicated by \rexptarget\rexpstar{}.
+%^^A!   \item Those can be only used in \emph{English templates} are
+%^^A!     indicated by \rexptarget\expstar{}.
+%^^A!   \item If they do not have special characters afterwards, then
+%^^A!     you can use them in both Chinese and English templates.
+%^^A! \end{itemize}
+%^^A!
+%
+% 代码实现主要面向对 \LaTeX{} 宏包开发感兴趣的用户。如果您有任何改进
+% 意见或者功能需求,欢迎前往 GitHub 仓库
+% \href{https://github.com/Stone-Zeng/fduthesis/issues}{提交 issue}。
+%^^A! If you want to read the implementation part, please turn to the
+%^^A! Chinese version. Any issues or feature requests can be submitted
+%^^A! in the \href{https://github.com/Stone-Zeng/fduthesis/issues}%
+%^^A! {GitHub repository}.
+%^^A!
+%
+% 文档的最后还提供了版本历史和代码索引,以供查阅。
+%
+% \section{安装}
+%^^A! \section{Installation}
+%^^A!
+%
+% \subsection{获取 \cls{fduthesis}}
+%^^A! \subsection{Obtaining \cls{fduthesis}}
+%^^A!
+%
+% \subsubsection{标准安装}
+%^^A! \subsubsection{Standard installation}
+%^^A!
+%
+% 如果没有特殊理由,始终建议您使用宏包管理器安装 \cls{fduthesis}。
+% 例如在 \TeXLive{} 中,执行(可能需要管理员权限)
+% \begin{shellexample}[morekeywords={tlmgr,install}]
+%   tlmgr install fduthesis
+% \end{shellexample}
+% 即可完成安装。
+%^^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!
+%
+% 如果您需要从 GitHub 上自行下载并手动安装,较好的方法是使用 TDS
+% 安装包:
+% \begin{itemize}
+%   \item 从 GitHub 上下载 \cls{fduthesis} 的
+%     \href{https://github.com/Stone-Zeng/fduthesis/releases/download/v0.7a/fduthesis.tds.zip}{TDS 安装包};
+%   \item 按目录结构将 \file{fduthesis.tds.zip} 中的文件复制到 \TeX{}
+%     发行版的本地 TDS 根目录;
+%   \item 执行 \bashcmd{mktexlsr} 刷新文件名数据库以完成安装。
+% \end{itemize}
+%^^A! If you want to download the template from GitHub and install it
+%^^A! manually, the recommended way is to use the TDS ZIP file:
+%^^A! \begin{itemize}
+%^^A!   \item Download the \href{https://github.com/Stone-Zeng/fduthesis/releases/download/v0.7a/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 \bashcmd{mktexlsr} to update the ls-R database.
+%^^A! \end{itemize}
+%^^A
+% 您也可以从源代码直接生成模板(不推荐):
+% \begin{itemize}
+%   \item 打开 \href{https://github.com/Stone-Zeng/fduthesis}^^A
+%     {项目主页},点击“Clone or download”,并选择“Download ZIP”,
+%     下载 \file{fduthesis-master.zip};如果您的电脑中安装有 git
+%     程序,也可通过以下命令直接克隆代码仓库:
+%     \begin{shellexample}[gobble=7,alsoletter={.},^^A
+%         morekeywords={git,clone}]
+%       git clone https://github.com/Stone-Zeng/fduthesis.git
+%     \end{shellexample}
+%   \item 解压并进入到 \file{source} 文件夹,执行以下命令以生成
+%     模板的各组件:
+%     \begin{shellexample}[gobble=7,morekeywords={xetex}]
+%       xetex fduthesis.dtx
+%     \end{shellexample}
+%   \item 将生成的文档类(\file{.cls})、宏包(\file{.sty})以及
+%     参数配置文件(\file{.def})复制到 \TeX{} 发行版本地 TDS 树
+%     的 \path{texmf-local/tex/latex/fduthesis/} 目录下,并执行
+%     \bashcmd{mktexlsr} 刷新文件名数据库,方可完成安装。
+% \end{itemize}
+%^^A! Although not recommended, you may generate the whole template
+%^^A! from source code as well:
+%^^A! \begin{itemize}
+%^^A!   \item Open the project's \href{https://github.com/Stone-Zeng/fduthesis}%
+%^^A!     {homepage}, click ``Clone or download'' and choose
+%^^A!     ``Download ZIP'' to download \file{fduthesis-master.zip}.
+%^^A!     If you have git program on your computer, you can also
+%^^A!     clone the repository directly:
+%^^A!     \begin{shellexample}[gobble=5,alsoletter={.},%
+%^^A!         morekeywords={git,clone}]
+%^^A!       git clone https://github.com/Stone-Zeng/fduthesis.git
+%^^A!     \end{shellexample}
+%^^A!   \item Extract files, and get into the \file{source} directory.
+%^^A!     Run the following command to generate all the components:
+%^^A!     \begin{shellexample}[gobble=5,morekeywords={xetex}]
+%^^A!       xetex fduthesis.dtx
+%^^A!     \end{shellexample}
+%^^A!   \item Copy the generated document classes (\file{.cls}),
+%^^A!     packages (\file{.sty}) and configuration files (\file{.def})
+%^^A!     into \path{texmf-local/tex/latex/fduthesis/} under the local
+%^^A!     TDS tree of \TeX{} distribution. Then run \bashcmd{mktexlsr}
+%^^A!     to update the ls-R database.
+%^^A! \end{itemize}
+%^^A!
+%
+% \subsubsection{扁平化安装}
+%^^A! \subsubsection{\cls{fduthesis} on the fly}
+%^^A!
+%
+% 如果您不希望安装本模板,但需要立刻使用,也可以使用模板提供的安装脚本。
+% 从 GitHub 上获取代码仓库后,执行 \file{install-win.bat}(Windows 系统)
+% 或 \file{install-linux.sh}(Linux 系统),所有需要的文件便会在
+% \file{thesis} 文件夹中生成。
+%^^A! If you don't want to install \cls{fduthesis} but need to use it
+%^^A! at once, you can try the installation scripts. Download the
+%^^A! repository from GitHub, run \file{install-win.bat} (on Windows)
+%^^A! or \file{install-linux.sh} (on Linux), then all the necessary
+%^^A! files will be found in the \file{thesis} folder.
+%^^A!
+%
+% \subsection{模板组成}
+%^^A! \subsection{Composition of the template}
+%^^A!
+%
+% 本模板主要包含核心文档类、配置文件、附属宏包以及用户文档等几个
+% 部分,其具体组成见表~\ref{tab:fduthesis-components}。
+%^^A! There are several parts in \cls{fduthesis}, including kernel
+%^^A! template classes, configuration files, affiliated packages and
+%^^A! user's guides. More details are listed in table~%
+%^^A! \ref{tab:fduthesis-components}.
+%^^A!
+%
+% \begin{table}[ht]
+%   \caption{\cls{fduthesis} 的主要组成部分}
+%   \label{tab:fduthesis-components}
+%   \centering
+%   \begin{tabular}{lp{24em}}
+%     \toprule
+%     \textbf{文件} & \textbf{功能说明} \\
+%     \midrule
+%     \file{fduthesis.cls}          & 中文模板文档类 \\
+%     \file{fduthesis-en.cls}       & 英文模板文档类 \\
+%     \file{fduthesis.def}          & 参数配置文件,用于设定
+%       \cls{fduthesis} 的初始参数,不建议您自行改动 \\
+%     \file{fdudoc.cls}             & 用户手册文档类 \\
+%     \file{fdulogo.sty}            & 复旦大学视觉识别系统 \\
+%     \file{README.md}              & 简要自述 \\
+%     \ifdefined\FDUCODEDOC
+%       \file{fduthesis.pdf}        & 中文用户手册 \\
+%       \file{fduthesis-en.pdf}     & 英文用户手册 \\
+%       \file{fduthesis-code.pdf}   & 模板实现代码(本文档) \\
+%     \else
+%       \file{fduthesis.pdf}        & 中文用户手册(本文档) \\
+%       \file{fduthesis-en.pdf}     & 英文用户手册 \\
+%       \file{fduthesis-code.pdf}   & 模板实现代码 \\
+%     \fi
+%     \file{fduthesis-template.tex} & 空白模板,可据此为基础完成论文
+%       撰写 \\
+%     \bottomrule
+%   \end{tabular}
+% \end{table}
+%^^A! \begin{table}[ht]
+%^^A!   \caption{The main components of \cls{fduthesis}}
+%^^A!   \label{tab:fduthesis-components}
+%^^A!   \centering
+%^^A!   \begin{tabular}{lp{24em}}
+%^^A!     \toprule
+%^^A!     \textbf{Files} & \textbf{Descriptions} \\
+%^^A!     \midrule
+%^^A!     \file{fduthesis.cls}          & Document class for Chinese thesis. \\
+%^^A!     \file{fduthesis-en.cls}       & Document class for English thesis.\\
+%^^A!     \file{fduthesis.def}          & Configuration parameters file
+%^^A!       for \cls{fduthesis}. Please do \emph{not} modify it. \\
+%^^A!     \file{fdudoc.cls}             & Document class for user guides. \\
+%^^A!     \file{fdulogo.sty}            & Fudan University's visual identity. \\
+%^^A!     \file{README.md}              & The brief introduction. \\
+%^^A!     \file{fduthesis.pdf}          & User's guide in Chinese. \\
+%^^A!     \file{fduthesis-en.pdf}       & User's guide in English (this
+%^^A!       document). \\
+%^^A!     \file{fduthesis-code.pdf}     & Code implementation. \\
+%^^A!     \file{fduthesis-template.tex} & An empty thesis template, and you can
+%^^A!       write your thesis based on it. \\
+%^^A!     \bottomrule
+%^^A!   \end{tabular}
+%^^A! \end{table}
+%^^A!
+%
+% 如需生成用户手册 \file{fduthesis.pdf},可在命令行中执行
+% \begin{shellexample}[morekeywords={xelatex,makeindex},emph={-o,-s,-t}]
+%   xelatex fduthesis.dtx
+%   makeindex -s gind.ist -o fduthesis.ind fduthesis.idx
+%   makeindex -s gglo.ist -o fduthesis.gls -t fduthesis.glg fduthesis.glo
+%   xelatex fduthesis.dtx
+%   xelatex fduthesis.dtx
+% \end{shellexample}
+% 也可使用 \pkg{latexmk}:
+% \begin{shellexample}[morekeywords={latexmk}]
+%   latexmk fduthesis.dtx
+% \end{shellexample}
+% 本模板已经为编译用户手册提供了 \pkg{latexmk} 配置文件
+% \file{latexmkrc}。
+%
+% \section{使用说明}
+%^^A! \section{User's guide}
+%^^A!
+%
+% \subsection{基本用法}
+%^^A! \subsection{Getting started}
+%^^A!
+%
+% 以下是一份简单的 \TeX{} 文档,它演示了 \cls{fduthesis}
+% 的最基本用法:
+%^^A! Here is a minimal \TeX{} file for \cls{fduthesis}:
+%^^A+
+% \begin{latexexample}[deletetexcs={\documentclass},%
+%     moretexcs={\chapter},morekeywords={\documentclass},%
+%     emph={[2]document}]
+%   % thesis.tex
+%   \documentclass{fduthesis}
+%   \begin{document}
+%     \chapter{欢迎}
+%     \section{Welcome to fduthesis!}
+%     你好,\LaTeX{}!
+%   \end{document}
+% \end{latexexample}
+%^^A-
+%^^A!
+%
+% 按照 \ref{subsec:编译方式}~小节中的方式编译该文档,您应当得到
+% 一篇 5 页的文章。当然,这篇文章的绝大部分都是空白的。
+%^^A! Compile this file under the instructions in subsection~%
+%^^A! \ref{subsec:compilation}, you will get a 5-page article.
+%^^A! Of course, most of it will be blank, as you may predicate.
+%^^A!
+%
+% 英文模板可以用类似的方式使用:
+%^^A! The English version can be used in the same way:
+%^^A+
+% \begin{latexexample}[deletetexcs={\documentclass},%
+%     moretexcs={\chapter},morekeywords={\documentclass},%
+%     emph={[2]document}]
+%   % thesis-en.tex
+%   \documentclass{fduthesis-en}
+%   \begin{document}
+%     \chapter{Welcome}
+%     \section{Welcome to fduthesis!}
+%     Hello, \LaTeX{}!
+%   \end{document}
+% \end{latexexample}
+%^^A-
+% 英文模板只对正文部分进行了改动,封面、指导小组成员以及声明页仍将
+% 显示为中文。
+%^^A! The differences between English and Chinese version only
+%^^A! live in the main body. Thesis cover, instructors list and
+%^^A! declaration page are still printed in Chinese.
+%^^A!
+%
+% \subsection{编译方式} \label{subsec:编译方式}
+%^^A! \subsection{Compilation} \label{subsec:compilation}
+%^^A!
+%
+% 本模板不支持 \pdfTeX{} 引擎,请使用 \XeLaTeX{} 或 \LuaLaTeX{}
+% 编译。推荐使用 \XeLaTeX{}。为了生成正确的目录、脚注以及交叉引用,
+% 您至少需要连续编译两次。
+%^^A! \cls{fduthesis} does NOT support \pdfTeX{}. Please use
+%^^A! \XeLaTeX{} or \LuaLaTeX{} to compile, and \XeLaTeX{} is
+%^^A! recommended. To get the correct table of contents, footnotes
+%^^A! and cross-references, you need to compile the source file at
+%^^A! least twice.
+%^^A!
+%
+% 以下代码中,假设您的 \TeX{} 源文件名为 \file{thesis.tex}。
+% 使用 \XeLaTeX{} 编译论文,请在命令行中执行
+% \begin{shellexample}[morekeywords={xelatex}]
+%   xelatex thesis
+%   xelatex thesis
+% \end{shellexample}
+% 或使用 \pkg{latexmk}:
+% \begin{shellexample}[morekeywords={latexmk},emph={-xelatex}]
+%   latexmk -xelatex thesis
+% \end{shellexample}
+%^^A! In the following example, suppose your \TeX{} source file is
+%^^A! \file{thesis.tex}. Please execute the following commands if
+%^^A! you want to use \XeLaTeX{}:
+%^^A! \begin{shellexample}[morekeywords={xelatex}]
+%^^A!   xelatex thesis
+%^^A!   xelatex thesis
+%^^A! \end{shellexample}
+%^^A! You can use \pkg{latexmk} as well:
+%^^A! \begin{shellexample}[morekeywords={latexmk},emph={-xelatex}]
+%^^A!   latexmk -xelatex thesis
+%^^A! \end{shellexample}
+%^^A!
+%
+% 使用 \LuaLaTeX{} 编译论文,请在命令行中执行
+% \begin{shellexample}[morekeywords={lualatex}]
+%   lualatex thesis
+%   lualatex thesis
+% \end{shellexample}
+% 或者
+% \begin{shellexample}[morekeywords={latexmk},emph={-lualatex}]
+%   latexmk -lualatex thesis
+% \end{shellexample}
+%^^A! \LuaLaTeX{} can be used in a similar way:
+%^^A! \begin{shellexample}[morekeywords={lualatex}]
+%^^A!   lualatex thesis
+%^^A!   lualatex thesis
+%^^A! \end{shellexample}
+%^^A! or
+%^^A! \begin{shellexample}[morekeywords={latexmk},emph={-lualatex}]
+%^^A!   latexmk -lualatex thesis
+%^^A! \end{shellexample}
+%^^A!
+%
+% 需要注意,请不要把模板中的配置文件 \file{latexmkrc} 放置在工作
+% 文件夹下。该配置文件仅适用于生成模板用户手册。
+%^^A! Note that you should not put the profile \file{latexmkrc} in
+%^^A! your working directory. This file is meant to generate the
+%^^A! user's guide.
+%^^A!
+%
+% \subsection{模板选项}
+%^^A! \subsection{Options of the template}
+%^^A!
+%
+% 所谓“模板选项”,指需要在引入文档类的时候指定的选项:
+% \begin{latexexample}[deletetexcs={\documentclass},%
+%     morekeywords={\documentclass}]
+%   \documentclass(*\oarg{模板选项}*){fduthesis}
+%   \documentclass(*\oarg{模板选项}*){fduthesis-en}
+% \end{latexexample}
+%^^A! You can specify some \emph{template options} when loading
+%^^A! \cls{fduthesis}:
+%^^A! \begin{latexexample}[deletetexcs={\documentclass},%
+%^^A!     morekeywords={\documentclass}]
+%^^A!   \documentclass(*\oarg{options}*){fduthesis}
+%^^A!   \documentclass(*\oarg{options}*){fduthesis-en}
+%^^A! \end{latexexample}
+%^^A!
+%
+% 有些模板选项为布尔型,它们只能在 \opt{true} 和 \opt{false}
+% 中取值。对于这些选项,\kvopt{\meta{选项}}{true} 中的“|= true|”
+% 可以省略。
+%^^A! Some options are \emph{boolean} --- they only take the value
+%^^A! \opt{true} or \opt{false}. For these options, you can
+%^^A! abbreviate ``\kvopt{\meta{option}}{true}'' simply to
+%^^A! ``\opt{\meta{option}}''.
+%^^A!
+%
+%^^A+
+% \begin{function}[added=2018-02-01]{type}
+%   \begin{fdusyntax}[emph={[1]type}]
+%     type = (*<doctor|master|(bachelor)>*)
+%   \end{fdusyntax}
+%^^A-
+%   选择论文类型。三种选项分别代表博士学位论文、硕士学位论文和本科
+%   毕业论文。
+% \end{function}
+%^^A!   Choose the type of your thesis. The three options represent
+%^^A!   doctoral dissertation, master degree thesis and undergraduate
+%^^A!   thesis, respectively.
+%^^A! \end{function}
+%^^A!
+%
+% \begin{function}{oneside,twoside}
+%   指明论文的单双面模式,默认为 \opt{twoside}。该选项会影响每章
+%   的开始位置,还会影响页眉样式。
+% \end{function}
+%^^A! \begin{function}{oneside,twoside}
+%^^A!   Specify whether single or double sided output should be
+%^^A!   generated. \opt{twoside} will be chosen by default. These
+%^^A!   option will determine where the new chapters begin and how
+%^^A!   the headers display. The option \opt{twoside} does
+%^^A!   \emph{not} tell the printer to actually make a two-sided
+%^^A!   printout.
+%^^A! \end{function}
+%^^A!
+%
+% 在双面模式(\opt{twoside})下,按照通常的排版惯例,每章应只从
+% 奇数页(在右)开始;而在单页模式(\opt{oneside})下,则可以从
+% 任意页面开始。本模板中,目录、摘要、符号表等均视作章,也按相同
+% 方式排版。
+%^^A! If choosing \opt{twoside}, chapters will begin at the odd pages
+%^^A! (right hand). However, they will begin at arbitrary pages
+%^^A! available when choosing \opt{oneside}. Table of contents,
+%^^A! abstract and the list of symbols are considered as chapters and
+%^^A! processed in the same way.
+%^^A!
+%
+% 双面模式下,正文部分偶数页(在左)的左页眉显示章标题,奇数页
+% (在右)的右页眉显示节标题;前置部分的页眉按同样格式显示,但文字
+% 均为对应标题(如“{\kaishu 目\textvisiblespace{}录}”、
+% “{\kaishu 摘\textvisiblespace{}要}”等)。
+% 而在单面模式下,正文部分则页面不分奇偶,均同时显示左、右页眉,
+% 文字分别为章标题和节标题;前置部分只有中间页眉,显示对应标题。
+%^^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
+%^^A! ``\textit{Contents}'', ``\textit{Abstract}'', etc.
+%^^A!
+%^^A! At one-sided mode, both left and right headers on \emph{all}
+%^^A! pages in main body will be shown. The text is the title of
+%^^A! chapters and sections, respectively. In front matter, there
+%^^A! are only middle headers, which show the corresponding titles.
+%^^A!
+%
+% \begin{function}{draft}
+%   \begin{fdusyntax}[emph={[1]draft}]
+%     draft = (*<\TFF>*)
+%   \end{fdusyntax}
+%   选择是否开启草稿模式,默认关闭。
+% \end{function}
+%^^A! \begin{function}{draft}
+%^^A!   \begin{fdusyntax}[emph={[1]draft}]
+%^^A!     draft = (*<\TFF>*)
+%^^A!   \end{fdusyntax}
+%^^A!   Enable draft mode. Default off.
+%^^A! \end{function}
+%^^A!
+%
+% 草稿模式为全局选项,会影响到很多宏包的工作方式。
+% 开启之后,主要的变化有:
+% \begin{itemize}
+%   \item 把行溢出的盒子显示为黑色方块;
+%   \item 不实际插入图片,只输出一个占位方框;
+%   \item 关闭超链接渲染,也不再生成 PDF 书签;
+%   \item 显示页面边框。
+% \end{itemize}
+%^^A! \opt{draft} is a global option and will affect many packages.
+%^^A! You may notice the following changes when using \opt{draft}:
+%^^A! \begin{itemize}
+%^^A!   \item Lines with overfull \tn{hbox}'s will be marked with
+%^^A!     a thick black square on the right margin.
+%^^A!   \item Will not include graphics files actually, but instead
+%^^A!     print a box of the size the graphic would take up, as well
+%^^A!     as the file name.
+%^^A!   \item Will not make hyperlinks and PDF bookmarks.
+%^^A!   \item Show the page frames.
+%^^A! \end{itemize}
+%^^A!
+%
+% \begin{function}[added=2018-01-31]{config}
+%   \begin{fdusyntax}[emph={[1]config}]
+%     config = (*\marg{文件}*)
+%   \end{fdusyntax}
+%   用户配置文件的文件名。默认为空,即不载入用户配置文件。
+% \end{function}
+%^^A! \begin{function}[added=2018-01-31]{config}
+%^^A!   \begin{fdusyntax}[emph={[1]config}]
+%^^A!     config = (*\marg{file}*)
+%^^A!   \end{fdusyntax}
+%^^A!   File name of user profile. Default value is empty, so no
+%^^A!   profile is loaded automatically.
+%^^A! \end{function}
+%^^A!
+%
+% \subsection{参数设置}
+%^^A! \subsection{More options}
+%^^A!
+%
+% \begin{function}{\fdusetup}
+%   \begin{fdusyntax}[morekeywords={\fdusetup}]
+%     \fdusetup(*\marg{键值列表}*)
+%   \end{fdusyntax}
+%   本模板提供了一系列选项,可由您自行配置。载入文档类之后,以下
+%   所有选项均可通过统一的命令 \cs{fdusetup} 来设置。
+% \end{function}
+%^^A! \begin{function}{\fdusetup}
+%^^A!   \begin{fdusyntax}[morekeywords={\fdusetup}]
+%^^A!     \fdusetup(*\marg{key-value list}*)
+%^^A!   \end{fdusyntax}
+%^^A!   \cls{fduthesis} has provided a number of options, which
+%^^A!   can be given via the general command \cs{fdusetup}.
+%^^A! \end{function}
+%^^A!
+%
+% \cs{fdusetup} 的参数是一组由(英文)逗号隔开的选项列表,列表中的
+% 选项通常是 \kvopt{\meta{key}}{\meta{value}} 的形式。部分选项的
+% \meta{value} 可以省略。对于同一项,后面的设置将会覆盖前面的设置。
+% 在下文的说明中,将用\textbf{粗体}表示默认值。
+%^^A! The argument of \cs{fdusetup} is a set of comma-separated option
+%^^A! list. The options usually have the form of \kvopt{\meta{key}}%
+%^^A! {\meta{value}} and in some cases \meta{value} can be omitted.
+%^^A! For the same option, the values given later will override the
+%^^A! the previous ones. Default values are indicated in
+%^^A! \textbf{boldface} in the following descriptions.
+%^^A!
+%
+% \cs{fdusetup} 采用 \LaTeX3 风格的键值设置,支持不同类型以及多种
+% 层次的选项设定。键值列表中,“|=|”左右的空格不影响设置;但需注意,
+% 参数列表中不可以出现空行。
+%^^A! \cs{fdusetup} follows \LaTeX3 key-value style, and different
+%^^A! types as well as various levels options are supported. In the
+%^^A! key-value list, spaces around ``|=|'' will be trimmed; however,
+%^^A! blank lines should never appear in the argument.
+%^^A!
+%
+% 与模板选项相同,布尔型的参数可以省略 \kvopt{\meta{选项}}{true}
+% 中的“|= 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 a Heuristic Viewpoint Concerning the Production
+%         and Transformation of Light},
+%       author     = {阿尔伯特·爱因斯坦},
+%       author*    = {Albert Einstein},
+%       department = {物理学系}
+%     }
+%   }
+% \end{latexexample}
+%^^A-
+% 或者
+%^^A! or
+%^^A+
+% \begin{latexexample}[morekeywords={\fdusetup},%
+%     emph={[1]style,cjk-font,font-size,info,title,title*,author,author*,department}]
+%   \fdusetup{
+%     style/cjk-font  = adobe,
+%     style/font-size = -4,
+%     info/title      = {关于光产生和转变的一个启发性观点},
+%     info/title*     = {On a Heuristic Viewpoint Concerning the Production
+%       and Transformation of Light},
+%     info/author     = {阿尔伯特·爱因斯坦},
+%     info/author*    = {Albert Einstein},
+%     info/department = {物理学系}
+%   }
+% \end{latexexample}
+%^^A-
+%^^A!
+%
+% 注意 “|/|” 的前后均不可以出现空白字符。
+%^^A! Note that you may \emph{not} put spaces around ``|/|''.
+%^^A!
+%
+% \subsubsection{论文格式} \label{subsubsec:论文格式}
+%^^A! \subsubsection{Style and format} \label{subsubsec:style-and-format}
+%^^A!
+%
+% \begin{function}{style}
+%   \begin{fdusyntax}[emph={[1]style}]
+%     style = (*\marg{键值列表}*)
+%     style/(*\meta{key}*) = (*\meta{value}*)
+%   \end{fdusyntax}
+%   该选项包含许多子项目,用于设置论文格式。具体内容见下。
+% \end{function}
+%^^A! \begin{function}{style}
+%^^A!   \begin{fdusyntax}[emph={[1]style}]
+%^^A!     style = (*\marg{key-value list}*)
+%^^A!     style/(*\meta{key}*) = (*\meta{value}*)
+%^^A!   \end{fdusyntax}
+%^^A!   This general option is for setting the thesis style and format.
+%^^A!   See the following details.
+%^^A! \end{function}
+%^^A!
+%
+%^^A+
+% \begin{function}[updated=2017-09-23]{style/font}
+%   \begin{fdusyntax}[emph={[1]font}]
+%     font = (*<libertinus|lm|palatino|(times)|none>*)
+%   \end{fdusyntax}
+%^^A-
+%   设置西文字体(包括数学字体)。
+% \end{function}
+%^^A!   Set the western fonts (including math fonts).
+%^^A! \end{function}
+%^^A!
+%
+%^^A+
+% \begin{function}[rEXP,updated=2017-09-23]{style/cjk-font}
+%   \begin{fdusyntax}[emph={[1]cjk-font}]
+%     cjk-font = (*<adobe|(fandol)|founder|mac|windows|none>*)
+%   \end{fdusyntax}
+%^^A-
+%   设置中文字体。
+% \end{function}
+%^^A!   Set CJK (Chinese, Japanese and Korean) fonts.
+%^^A! \end{function}
+%^^A!
+%
+% 启用 \kvopt{font}{none} 或 \kvopt{cjk-font}{none} 之后,模板将关闭
+% 默认西文 / 中文字体设置。此时,您需要自行使用 \cs{setmainfont}、
+% \cs{setCJKmainfont}、\cs{setmathfont} 等命令来配置字体。
+%^^A! When you choose \kvopt{font}{none} or \kvopt{cjk-font}{none},
+%^^A! \cls{fduthesis} will disable the default western/CJK font
+%^^A! settings. You may use \cs{setmainfont}, \cs{setCJKmainfont}
+%^^A! and \cs{set\-math\-font}, etc.\ to configure the fonts manually.
+%^^A!
+%
+%^^A+
+% \begin{function}{style/font-size}
+%   \begin{fdusyntax}[emph={[1]font-size}]
+%     font-size = (*<(-4)|5>*)
+%   \end{fdusyntax}
+%^^A-
+%   设置论文的基础字号。
+% \end{function}
+%^^A!   Specify the basic font size in your thesis.
+%^^A! \end{function}
+%^^A!
+%
+%^^A+
+% \begin{function}[rEXP,updated=2017-10-14]{style/fullwidth-stop}
+%   \begin{fdusyntax}[emph={[1]fullwidth-stop}]
+%     fullwidth-stop = (*<catcode|mapping|(false)>*)
+%   \end{fdusyntax}
+%^^A-
+%   选择是否把全角实心句点\FSFW 作为默认的句号形状。
+%   这种句号一般用于科技类文章,以避免与下标“$_o$”或“$_0$”混淆。
+% \end{function}
+%^^A!   Let full-width full stop ``\FSFW'' as the default full stop.
+%^^A!   Generally, this punctuation is used for scientific articles,
+%^^A!   where ``\FSID'' is easily to be confused with subscript
+%^^A!   ``$_o$'' or ``$_0$''.
+%^^A! \end{function}
+%^^A!
+%
+% 选择 \kvopt{fullwidth-stop}{catcode} 或 \opt{mapping} 后,都会实现
+% 上述效果。有所不同的是,在选择 \opt{catcode} 后,只有^^A
+% \emph{显式的}\FSID 会被替换为\FSFW,但在选择 \opt{mapping} 后,
+% \emph{所有的}\FSID 都会被替换。例如,如果您用宏保存了一些含有^^A
+% \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} 后仍需要临时显示^^A
+% \FSID,可以按如下方法操作:
+% \begin{latexexample}[moretexcs={\CJKfontspec},emph={[1]Mapping}]
+%   % 请使用 XeTeX 编译
+%   % 外侧的花括号表示分组
+%   这是一个句号{\CJKfontspec{(*\meta{字体名}*)}[Mapping=full-stop]。}
+% \end{latexexample}
+%^^A! If you want to display ``\FSID'' temporarily after setting
+%^^A! \kvopt{fullwidth-stop}{mapping}, the following code snippet
+%^^A! will be helpful:
+%^^A! \begin{latexexample}[moretexcs={\CJKfontspec},emph={[1]Mapping}]
+%^^A!   % Compiled with XeTeX
+%^^A!   % The outside braces is used for group
+%^^A!   这是一个句号{\CJKfontspec{(*\meta{font name}*)}[Mapping=full-stop]。}
+%^^A! \end{latexexample}
+%^^A!
+%
+% \begin{function}{style/footnote-style}
+%^^A 这里奇怪的东西是用来控制对齐的。fdusyntax 会吃掉开头的几个
+%^^A 空格,因此这里用 X 来占位。
+%   \begin{fdusyntax}[emph={[1]footnote-style}]
+%     footnote-style = (*<plain|\\
+%       XXXXXX\mbox{}~~~~~~~~~~~~~~~~~libertinus|libertinus*|libertinus-sans|\\
+%       XXXXXX\mbox{}~~~~~~~~~~~~~~~~~pifont|pifont*|pifont-sans|pifont-sans*|\\
+%       XXXXXX\mbox{}~~~~~~~~~~~~~~~~~xits|xits-sans|xits-sans*>*)
+%   \end{fdusyntax}
+%   设置脚注编号样式。西文字体设置会影响其默认取值(见
+%   表~\ref{tab:footnote-font})。因此,要使得该选项生效,需将其
+%   放置在 \opt{font} 选项之后。带有 |sans| 的为相应的无衬线字体
+%   版本;带有 |*| 的为阴文样式(即黑底白字)。
+% \end{function}
+%^^A! \begin{function}{style/footnote-style}
+%^^A!   \begin{fdusyntax}[emph={[1]footnote-style}]
+%^^A!     footnote-style = (*<plain|\\
+%^^A!       XXXX\mbox{}~~~~~~~~~~~~~~~~~libertinus|libertinus*|libertinus-sans|\\
+%^^A!       XXXX\mbox{}~~~~~~~~~~~~~~~~~pifont|pifont*|pifont-sans|pifont-sans*|\\
+%^^A!       XXXX\mbox{}~~~~~~~~~~~~~~~~~xits|xits-sans|xits-sans*>*)
+%^^A!   \end{fdusyntax}
+%^^A!   Set the style of footnote numbers. Note that western fonts
+%^^A!   will affect its default value (see table~\ref{tab:footnote-font}),
+%^^A!   so you may put it after |font| option. The one with |sans|
+%^^A!   is for the corresponding sans-serif version, while |*|
+%^^A!   for white on black version.
+%^^A! \end{function}
+%^^A!
+%
+% \begin{table}[ht]
+%   \caption{西文字体与脚注编号样式默认值的对应关系}
+%   \label{tab:footnote-font}
+%   \centering
+%   \begin{tabular}{ccccc}
+%     \toprule
+%     \textbf{西文字体设置} &
+%       |libertinus| & |lm|     & |palatino| & |times| \\
+%     \midrule
+%     \textbf{脚注编号样式默认值} &
+%       |libertinus| & |pifont| & |pifont|   & |xits|  \\
+%     \bottomrule
+%   \end{tabular}
+% \end{table}
+%^^A! \begin{table}[ht]
+%^^A!   \caption{Relationship between option \opt{font} and the
+%^^A!     default value of \opt{footnote-style}}
+%^^A!   \label{tab:footnote-font}
+%^^A!   \centering
+%^^A!   \begin{tabular}{ccccc}
+%^^A!     \toprule
+%^^A!     \textbf{Western fonts settings} &
+%^^A!       |libertinus| & |lm|     & |palatino| & |times| \\
+%^^A!     \midrule
+%^^A!     \textbf{Default value of footnote number style} &
+%^^A!       |libertinus| & |pifont| & |pifont|   & |xits|  \\
+%^^A!     \bottomrule
+%^^A!   \end{tabular}
+%^^A! \end{table}
+%^^A!
+%
+%^^A+
+% \begin{function}[added=2017-08-13]{style/hyperlink}
+%   \begin{fdusyntax}[emph={[1]hyperlink}]
+%     hyperlink = (*<border|(color)|none>*)
+%   \end{fdusyntax}
+%^^A-
+%   设置超链接样式。\opt{border} 表示在超链接四周绘制方框;
+%   \opt{color} 表示用彩色显示超链接;\opt{none} 表示没有特殊装饰,
+%   可用于生成最终的打印版文稿。
+% \end{function}
+%^^A!   Set the style of hyperlinks. \opt{border} draws borders around
+%^^A!   hyperlinks; \opt{color} displays hyperlinks in colorful text;
+%^^A!   \opt{none} leads to plain text, which is useful when printing
+%^^A!   the final document.
+%^^A! \end{function}
+%^^A!
+%
+% \begin{function}[added=2017-08-13,updated=2017-12-08]{style/hyperlink-color}
+%   \begin{fdusyntax}[emph={[1]hyperlink-color}]
+%     hyperlink-color = (*<(default)|classic|elegant|fantasy|material|\\
+%       XXXXXX\mbox{}~~~~~~~~~~~~~~~~~~business|science|summer|autumn|graylevel|prl>*)
+%   \end{fdusyntax}
+%   设置超链接颜色。该选项在 \kvopt{hyperlink}{none} 时无效。
+%   各选项所代表的颜色见表~\ref{tab:hyperlink-color}。
+% \end{function}
+%^^A! \begin{function}[added=2017-08-13,updated=2017-12-08]{style/hyperlink-color}
+%^^A!   \begin{fdusyntax}[emph={[1]hyperlink-color}]
+%^^A!     hyperlink-color = (*<(default)|classic|elegant|fantasy|material|\\
+%^^A!       XXXX\mbox{}~~~~~~~~~~~~~~~~~~business|science|summer|autumn|graylevel|prl>*)
+%^^A!   \end{fdusyntax}
+%^^A!   Set the color of hyperlinks. It is invalid if
+%^^A!   \kvopt{hyperlink}{none}. The related colors can be found
+%^^A!   in table~\ref{tab:hyperlink-color}.
+%^^A! \end{function}
+%^^A!
+%
+%^^A+
+% \begin{table}[ht]
+% \centering
+%^^A-
+% \newcommand\linkcolorexam[3]{^^A
+%   {\small 图~\textcolor[HTML]{#1}{1-2},
+%     (\textcolor[HTML]{#1}{3.4})~式} &
+%   {\small \textcolor[HTML]{#2}{\texttt{http://g.cn}}} &
+%   {\small 文献~[\textcolor[HTML]{#3}{1}],
+%     (\textcolor[HTML]{#3}{Knuth~1986})}}
+%^^A! \newcommand\linkcolorexam[3]{%
+%^^A!   {\small Fig.~\textcolor[HTML]{#1}{1-2},
+%^^A!     Eq.~(\textcolor[HTML]{#1}{3.4})} &
+%^^A!   {\small \textcolor[HTML]{#2}{\texttt{http://g.cn}}} &
+%^^A!   {\small Ref.~[\textcolor[HTML]{#3}{1}],
+%^^A!     (\textcolor[HTML]{#3}{Knuth~1986})}}
+% \begin{threeparttable}
+% \caption{预定义的超链接颜色方案}
+% \label{tab:hyperlink-color}
+%^^A! \begin{threeparttable}
+%^^A! \caption{Pre-defined hyperlink color schemes}
+%^^A! \label{tab:hyperlink-color}
+% \begin{tabular}{c*{3}{>{\hspace{0.2cm}}c<{\hspace{0.2cm}}}}
+%   \toprule
+%   \textsf{选项} & \textsf{链接} & \textsf{URL} & \textsf{引用} \\
+%^^A! \begin{tabular}{c*{3}{>{\hspace{0.2cm}}c<{\hspace{0.2cm}}}}
+%^^A!   \toprule
+%^^A!   \textsf{Options} & \textsf{Cross references} & \textsf{URL} & \textsf{Citation} \\
+%^^A+
+%   \midrule
+%   \opt{default}            & \linkcolorexam{990000}{0000B2}{007F00} \\
+%   \opt{classic}            & \linkcolorexam{FF0000}{0000FF}{00FF00} \\
+%   \opt{elegant}\tnote{a}   & \linkcolorexam{961212}{C31818}{9B764F} \\
+%   \opt{fantasy}\tnote{b}   & \linkcolorexam{FF4A19}{FF3F94}{934BA1} \\
+%   \opt{material}\tnote{c}  & \linkcolorexam{E91E63}{009688}{4CAF50} \\
+%   \opt{business}\tnote{d}  & \linkcolorexam{D14542}{295497}{1F6E43} \\
+%   \opt{science}\tnote{e}   & \linkcolorexam{CA0619}{389F9D}{FF8920} \\
+%   \opt{summer}\tnote{f}    & \linkcolorexam{00AFAF}{5F5FAF}{5F8700} \\
+%   \opt{autumn}\tnote{f}    & \linkcolorexam{D70000}{D75F00}{AF8700} \\
+%   \opt{graylevel}\tnote{c} & \linkcolorexam{616161}{616161}{616161} \\
+%   \opt{prl}\tnote{g}       & \linkcolorexam{2D3092}{2D3092}{2D3092} \\
+%   \bottomrule
+% \end{tabular}
+% \begin{tablenotes}
+%^^A-
+%   \item[a] 来自 \href{https://tex.stackexchange.com/}^^A
+%     {\TeX{} - \LaTeX{} Stack Exchange 网站}。
+%   \item[b] Adobe CC 产品配色。
+%   \item[c] 取自 Material 色彩方案
+%     (见 \url{https://material.io/guidelines/style/color.html})。
+%   \item[d] Microsoft Office 2016 产品配色。
+%   \item[e] 来自 \href{https://www.wolfram.com/}{Wolfram Research 网站}。
+%   \item[f] 均取自 Solarized 色彩方案
+%     (见 \url{http://ethanschoonover.com/solarized})。
+%   \item[g] \textit{Physical Review Letter} 杂志配色。
+%^^A!   \item[a] From \href{https://tex.stackexchange.com/}%
+%^^A!     {\TeX{} - \LaTeX{} Stack Exchange}.
+%^^A!   \item[b] Adobe CC.
+%^^A!   \item[c] Material Design color palette
+%^^A!     (See \url{https://material.io/guidelines/style/color.html}).
+%^^A!   \item[d] Microsoft Office 2016.
+%^^A!   \item[e] From \href{https://www.wolfram.com/}{Wolfram Research website}.
+%^^A!   \item[f] Solarized color palette
+%^^A!     (See \url{http://ethanschoonover.com/solarized}).
+%^^A!   \item[g] \textit{Physical Review Letter} magazine.
+%^^A+
+% \end{tablenotes}
+% \end{threeparttable}
+% \end{table}
+%^^A-
+%^^A!
+%
+%^^A+
+% \begin{function}[added=2018-01-25]{style/bib-backend}
+%   \begin{fdusyntax}[emph={[1]bib-backend}]
+%     bib-backend = (*<bibtex|biblatex>*)
+%   \end{fdusyntax}
+%^^A-
+%   选择参考文献的支持方式。选择 \opt{bibtex} 后,将使用 \BibTeX{}
+%   处理文献,样式由 \pkg{natbib} 宏包负责;选择 \opt{biblatex} 后,
+%   将使用 \biber{} 处理文献,样式则由 \pkg{biblatex} 宏包负责。
+% \end{function}
+%^^A!   Specify the backend or driver of bibliography processing.
+%^^A!   \BibTeX{} and \pkg{natbib} package will be used if you choose
+%^^A!   \opt{bibtex}, while \biber{} and \pkg{biblatex} will be used
+%^^A!   if you choose \opt{biblatex}.
+%^^A! \end{function}
+%^^A!
+%
+% \begin{function}[added=2017-10-28,updated=2018-01-25]^^A
+%     {style/bib-style}
+%   \begin{fdusyntax}[emph={[1]bib-style}]
+%     bib-style = (*<author-year|(numerical)|\meta{其他样式}>*)
+%   \end{fdusyntax}
+%   设置参考文献样式。\opt{author-year} 和 \opt{numerical} 分别对应
+%   国家标准 GB/T 7714--2015 \scite{gb-t-7714-2015} 中的著者—出版年制
+%   和顺序编码制。选择 \meta{其他样式} 时,如果 \kvopt{bib-backend}^^A
+%   {bibtex},需保证相应的 \file{.bst} 格式文件能被调用;而如果
+%   \kvopt{bib-backend}{biblatex},则需保证相应的 \file{.bbx} 格式文件
+%   能被调用。
+% \end{function}
+%^^A! \begin{function}[added=2017-10-28,updated=2018-01-25]%
+%^^A!     {style/bib-style}
+%^^A!   \begin{fdusyntax}[emph={[1]bib-style}]
+%^^A!     bib-style = (*<author-year|(numerical)|\meta{other style}>*)
+%^^A!   \end{fdusyntax}
+%^^A!   Set the style of bibliography. \opt{author-year} and
+%^^A!   \opt{numerical} will follow the standard GB/T 7714--2015.
+%^^A!   By setting \kvopt{bib-style}{\meta{other style}}, you can use
+%^^A!   other bibliography style (\file{.bst} file for
+%^^A!   \kvopt{bib-backend}{bibtex} and \file{.bbx} file for
+%^^A!   \kvopt{bib-backend}{biblatex}). Suffix is not needed.
+%^^A! \end{function}
+%^^A!
+%
+% \begin{function}[added=2018-01-25]{style/cite-style}
+%   \begin{fdusyntax}[emph={[1]cite-style}]
+%     cite-style = (*\marg{引用样式}*)
+%   \end{fdusyntax}
+%   选择引用格式。默认为空,即与参考文献样式(著者—出版年制或顺序
+%   编码制)保持一致。如果手动填写,需保证相应的 \file{.cbx} 格式文件
+%   能被调用。该选项在 \kvopt{bib-backend}{bibtex} 时无效。
+% \end{function}
+%^^A! \begin{function}[added=2018-01-25]{style/cite-style}
+%^^A!   \begin{fdusyntax}[emph={[1]cite-style}]
+%^^A!     cite-style = (*\marg{style}*)
+%^^A!   \end{fdusyntax}
+%^^A!   Select citation style. Default value is empty, which means
+%^^A!   the citation style will follow your bibliography style
+%^^A!   (author-year or numeric). If you want change the citation
+%^^A!   style, the corresponding \file{.cbx} file must be available.
+%^^A!   This option is invalid when \kvopt{bib-backend}{bibtex}.
+%^^A! \end{function}
+%^^A!
+%
+% \begin{function}[added=2018-01-25]{style/bib-resource}
+%   \begin{fdusyntax}[emph={[1]bib-resource}]
+%     bib-resource = (*\marg{文件}*)
+%   \end{fdusyntax}
+%   参考文献数据源。可以是单个文件,也可以是用英文逗号隔开的一组文件。
+%   如果 \kvopt{bib-backend}{biblatex},则必须明确给出 \file{.bib}
+%   后缀名。
+% \end{function}
+%^^A! \begin{function}[added=2018-01-25]{style/bib-resource}
+%^^A!   \begin{fdusyntax}[emph={[1]bib-resource}]
+%^^A!     bib-resource = (*\marg{bib file(s)}*)
+%^^A!   \end{fdusyntax}
+%^^A!   Specify the bibliography database (usually in \file{.bib}
+%^^A!   format). If using more than one files, the file names should
+%^^A!   be separated with comma. When \kvopt{bib-backend}{biblatex},
+%^^A!   you must type in the ``\file{.bib}'' suffix.
+%^^A! \end{function}
+%^^A!
+%
+% \begin{function}[added=2017-08-10]{style/logo}
+%   \begin{fdusyntax}[emph={[1]logo}]
+%     logo = (*\marg{文件}*)
+%   \end{fdusyntax}
+%   封面中校名图片的文件名。默认值为 \file{fudan-name.pdf}。
+% \end{function}
+%^^A! \begin{function}[added=2017-08-10]{style/logo}
+%^^A!   \begin{fdusyntax}[emph={[1]logo}]
+%^^A!     logo = (*\marg{file}*)
+%^^A!   \end{fdusyntax}
+%^^A!   File name of the logo in thesis cover. Default value is
+%^^A!   \file{fudan-name.pdf}.
+%^^A! \end{function}
+%^^A!
+%
+% \begin{function}[added=2017-08-10]{style/logo-size}
+%   \begin{fdusyntax}[emph={[1]logo-size}]
+%     logo-size = (*\marg{宽度}*)
+%     logo-size = {(*\meta{宽度}*), (*\meta{高度}*)}
+%   \end{fdusyntax}
+%   校名图片的大小。默认仅指定了宽度,为 |0.5\textwidth|\/。
+%   如果仅需指定高度,可在 \meta{宽度} 处填入一个空的分组 |{}|。
+% \end{function}
+%^^A! \begin{function}[added=2017-08-10]{style/logo-size}
+%^^A!   \begin{fdusyntax}[emph={[1]logo-size}]
+%^^A!     logo-size = (*\marg{width}*)
+%^^A!     logo-size = {(*\meta{width}*), (*\meta{height}*)}
+%^^A!   \end{fdusyntax}
+%^^A!   Size of the logo. By default, only width is set to
+%^^A!   |0.5\textwidth|. To set height only, you can put an
+%^^A!   empty group ``|{}|'' at \meta{width}.
+%^^A! \end{function}
+%^^A!
+%
+%^^A+
+% \begin{function}[added=2017-07-06]{style/auto-make-cover}
+%   \begin{fdusyntax}[emph={[1]auto-make-cover}]
+%     auto-make-cover = (*<\TTF>*)
+%   \end{fdusyntax}
+%^^A-
+%   是否自动生成论文封面(封一)、指导小组成员名单(封二)和
+%   声明页(封三)。封面中的各项信息,可通过 \cs{fdusetup} 录入,
+%   具体请参阅 \ref{subsubsec:信息录入}~节。
+% \end{function}
+%^^A!   Whether generate thesis cover, list of instructors (inside
+%^^A!   front cover) and declaration page (inside back cover)
+%^^A!   automatically. Entries in the cover can be specified also
+%^^A!   via \cs{fdusetup}, and you can find more details in
+%^^A!   subsubsection~\ref{subsubsec:information}.
+%^^A! \end{function}
+%^^A!
+%
+% \begin{function}{\makecoveri,\makecoverii,\makecoveriii}
+%   用于手动生成论文封面、指导小组成员名单和声明页。这几个命令不能
+%   确保页码的正确编排,因此除非必要,您应当始终使用自动生成的封面。
+% \end{function}
+%^^A! \begin{function}{\makecoveri,\makecoverii,\makecoveriii}
+%^^A!   For generating thesis cover, list of instructors and
+%^^A!   declaration page manually. These commands cannot ensure
+%^^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]{info/degree}
+%   \begin{fdusyntax}[emph={[1]degree}]
+%     degree = (*<(academic)|professional>*)
+%   \end{fdusyntax}
+%^^A-
+%   学位类型。本选项仅用于硕士学位论文,\opt{academic} 和
+%   \opt{professional} 分表表示学术学位和专业学位。
+% \end{function}
+%^^A!   Degree type. This option can only be used in master degree
+%^^A!   thesis.
+%^^A! \end{function}
+%^^A!
+%
+% \begin{function}{info/title,info/title*}
+%   \begin{fdusyntax}[emph={[1]title,title*}]
+%     title  = (*\marg{中文标题}*)
+%     title* = (*\marg{英文标题}*)
+%   \end{fdusyntax}
+%   论文标题。默认会在约 20 个汉字字宽处强制断行,但为了语义的
+%   连贯以及排版的美观,如果您的标题长于一行,建议使用“|\\|”
+%   手动断行。
+% \end{function}
+%^^A! \begin{function}{info/title,info/title*}
+%^^A!   \begin{fdusyntax}[emph={[1]title,title*}]
+%^^A!     title  = (*\marg{title in Chinese}*)
+%^^A!     title* = (*\marg{title in English}*)
+%^^A!   \end{fdusyntax}
+%^^A!   Title of your thesis. The line width is about \SI{30}{em} by
+%^^A!   default, but you may break it with |\\| manually.
+%^^A! \end{function}
+%^^A!
+%
+% \begin{function}{info/author,info/author*}
+%   \begin{fdusyntax}[emph={[1]author,author*}]
+%     author  = (*\marg{姓名}*)
+%     author* = (*\marg{英文姓名(或拼音)}*)
+%   \end{fdusyntax}
+%   作者姓名。
+% \end{function}
+%^^A! \begin{function}{info/author,info/author*}
+%^^A!   \begin{fdusyntax}[emph={[1]author,author*}]
+%^^A!     author  = (*\marg{name in Chinese}*)
+%^^A!     author* = (*\marg{name in English \lparen or Pinyin\rparen}*)
+%^^A!   \end{fdusyntax}
+%^^A!   Author's name.
+%^^A! \end{function}
+%^^A!
+%
+% \begin{function}{info/supervisor}
+%   \begin{fdusyntax}[emph={[1]supervisor}]
+%     supervisor = (*\marg{姓名}*)
+%   \end{fdusyntax}
+%   导师姓名。
+% \end{function}
+%^^A! \begin{function}{info/supervisor}
+%^^A!   \begin{fdusyntax}[emph={[1]supervisor}]
+%^^A!     supervisor = (*\marg{name}*)
+%^^A!   \end{fdusyntax}
+%^^A!   Supervisor's name.
+%^^A! \end{function}
+%^^A!
+%
+% \begin{function}{info/department}
+%   \begin{fdusyntax}[emph={[1]department}]
+%     department = (*\marg{名称}*)
+%   \end{fdusyntax}
+%   院系名称。
+% \end{function}
+%^^A! \begin{function}{info/department}
+%^^A!   \begin{fdusyntax}[emph={[1]department}]
+%^^A!     department = (*\marg{name}*)
+%^^A!   \end{fdusyntax}
+%^^A!   Name of the department.
+%^^A! \end{function}
+%^^A!
+%
+% \begin{function}{info/major}
+%   \begin{fdusyntax}[emph={[1]major}]
+%     major = (*\marg{名称}*)
+%   \end{fdusyntax}
+%   专业名称。
+% \end{function}
+%^^A! \begin{function}{info/major}
+%^^A!   \begin{fdusyntax}[emph={[1]major}]
+%^^A!     major = (*\marg{name}*)
+%^^A!   \end{fdusyntax}
+%^^A!   Name of the major.
+%^^A! \end{function}
+%^^A!
+%
+% \begin{function}{info/student-id}
+%   \begin{fdusyntax}[emph={[1]student-id}]
+%     student-id = (*\marg{数字}*)
+%   \end{fdusyntax}
+%   作者学号。
+% \end{function}
+%^^A! \begin{function}{info/student-id}
+%^^A!   \begin{fdusyntax}[emph={[1]student-id}]
+%^^A!     student-id = (*\marg{number}*)
+%^^A!   \end{fdusyntax}
+%^^A!   Author's student ID.
+%^^A! \end{function}
+%^^A!
+%
+% 复旦大学学号共 11 位,前两位为入学年份,之后一位为学生类型
+% 代码(博士生为 1,硕士生为 2,本科生为 3),接下来的五位为
+% 专业代码,最后三位为顺序号。
+%^^A! In Fudan University, student ID has 11 digits. The first two
+%^^A! are the year of attendance; next one represents the student's
+%^^A! type (1 for doctor, 2 for master and 3 for bachelor); the
+%^^A! following five digits are major ID while the last three are
+%^^A! serial number.
+%^^A!
+%
+% \begin{function}{info/school-id}
+%   \begin{fdusyntax}[emph={[1]school-id}]
+%     school-id = (*\marg{数字}*)
+%   \end{fdusyntax}
+%   学校代码。默认值为 10246(这是复旦大学的学校代码)。
+% \end{function}
+%^^A! \begin{function}{info/school-id}
+%^^A!   \begin{fdusyntax}[emph={[1]school-id}]
+%^^A!     school-id = (*\marg{number}*)
+%^^A!   \end{fdusyntax}
+%^^A!   School ID. Default value is 10246 (school ID of Fudan University).
+%^^A! \end{function}
+%^^A!
+%
+% \begin{function}{info/date}
+%   \begin{fdusyntax}[emph={[1]date}]
+%     date = (*\marg{日期}*)
+%   \end{fdusyntax}
+%   论文完成日期。默认值为文档编译日期(\tn{today})。
+% \end{function}
+%^^A! \begin{function}{info/date}
+%^^A!   \begin{fdusyntax}[emph={[1]date}]
+%^^A!     date = (*\marg{date}*)
+%^^A!   \end{fdusyntax}
+%^^A!   Finish date of your thesis. Default value is the compilation
+%^^A!   date (\tn{today}).
+%^^A! \end{function}
+%^^A!
+%
+%^^A+
+% \begin{function}[added=2017-07-04]{info/secret-level}
+%   \begin{fdusyntax}[emph={[1]secret-level}]
+%     secret-level = (*<(none)|i|ii|iii>*)
+%   \end{fdusyntax}
+%^^A-
+%   密级。\opt{i}、\opt{ii}、\opt{iii} 分别表示秘密、机密、绝密;
+%   \opt{none} 表示论文不涉密,即不显示密级与保密年限。
+% \end{function}
+%^^A!   Secret level. \opt{i}, \opt{ii} and \opt{iii} means
+%^^A!   ``秘密'' (secret), ``机密'' (confidential) and ``绝密''
+%^^A!   (top secret) respectively. \opt{none} means your thesis is
+%^^A!   not secret-related and secret level and year will not be
+%^^A!   shown.
+%^^A! \end{function}
+%^^A!
+%
+% \begin{function}[added=2017-07-04]{info/secret-year}
+%   \begin{fdusyntax}[emph={[1]secret-year}]
+%     secret-year = (*\marg{年限}*)
+%   \end{fdusyntax}
+%   保密年限。建议您使用中文,如“五年”。该选项在设置
+%   \kvopt{secret-level}{none} 时无效。
+% \end{function}
+%^^A! \begin{function}[added=2017-07-04]{info/secret-year}
+%^^A!   \begin{fdusyntax}[emph={[1]secret-year}]
+%^^A!     secret-year = (*\marg{year}*)
+%^^A!   \end{fdusyntax}
+%^^A!   Secret year. It's recommended to use Chinese word as ``五年''
+%^^A!   (5 years) here. This option is invalid if you have set
+%^^A!   \kvopt{secret-level}{none}.
+%^^A! \end{function}
+%^^A!
+%
+% \begin{function}{info/instructors}
+%   \begin{fdusyntax}[emph={[1]instructors}]
+%     instructors = (*\marg{成员 1, 成员 2, ...}*)
+%   \end{fdusyntax}
+%   指导小组成员。各成员之间需使用英文逗号隔开。为防止歧义,
+%   可以用分组括号“|{...}|”把各成员字段括起来。
+% \end{function}
+%^^A! \begin{function}{info/instructors}
+%^^A!   \begin{fdusyntax}[emph={[1]instructors}]
+%^^A!     instructors = (*\marg{member 1, member 2, ...}*)
+%^^A!   \end{fdusyntax}
+%^^A!   Instructors' name. Each name should be separated with
+%^^A!   comma. To disambiguate, you may put text containing comma
+%^^A!   into a group ``|{...}|''.
+%^^A! \end{function}
+%^^A!
+%
+% \begin{function}{info/keywords,info/keywords*}
+%   \begin{fdusyntax}[emph={[1]keywords,keywords*}]
+%     keywords  = (*\marg{中文关键字}*)
+%     keywords* = (*\marg{英文关键字}*)
+%   \end{fdusyntax}
+%   关键字列表。各关键字之间需使用英文逗号隔开。为防止歧义,
+%   可以用分组括号“|{...}|”把各字段括起来。
+% \end{function}
+%^^A! \begin{function}{info/keywords,info/keywords*}
+%^^A!   \begin{fdusyntax}[emph={[1]keywords,keywords*}]
+%^^A!     keywords  = (*\marg{keywords in Chinese}*)
+%^^A!     keywords* = (*\marg{keywords in English}*)
+%^^A!   \end{fdusyntax}
+%^^A!   Keywords list. Each keyword should be separated with comma.
+%^^A!   To disambiguate, you may put text containing comma into a
+%^^A!   group ``|{...}|''.
+%^^A! \end{function}
+%^^A!
+%
+% \begin{function}{info/clc}
+%   \begin{fdusyntax}[emph={[1]clc}]
+%     clc = (*\marg{分类号}*)
+%   \end{fdusyntax}
+%   中图分类号(CLC)。
+% \end{function}
+%^^A! \begin{function}{info/clc}
+%^^A!   \begin{fdusyntax}[emph={[1]clc}]
+%^^A!     clc = (*\marg{classification codes}*)
+%^^A!   \end{fdusyntax}
+%^^A!   Chinese Library Classification (CLC).
+%^^A! \end{function}
+%^^A!
+%
+% \subsection{正文编写}
+%^^A! \subsection{Writing your thesis}
+%^^A!
+%
+% \begin{quote*}[喬孟符][宋]
+%   作樂府亦有法,曰\CJKunderdot{鳳頭豬肚豹尾}六字是也。
+%   大概起要美麗,中要浩蕩,結要響亮。尤貴在首尾貫穿,意思清新。
+%   茍能若是,斯可以言樂府矣。
+% \end{quote*}
+%
+% \subsubsection{凤头}
+%^^A! \subsubsection{Front matter}
+%^^A!
+%
+% \begin{function}{\frontmatter}
+%   声明前置部分开始。
+% \end{function}
+%^^A! \begin{function}{\frontmatter}
+%^^A!   Declare the beginning of front matter.
+%^^A! \end{function}
+%^^A!
+%
+% 在本模板中,前置部分包含目录、中英文摘要以及符号表等。
+% 前置部分的页码采用小写罗马字母,并且与正文分开计数。
+%^^A! Front matter contains table of contents, abstracts and notation
+%^^A! list. The page numbers in front matter will be shown in
+%^^A! lowercase Roman numerals, and will be counted separately with
+%^^A! main matter.
+%^^A!
+%
+% \begin{function}{\tableofcontents}
+%   生成目录。为了生成完整、正确的目录,您至少需要编译\emph{两次}。
+% \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! \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)。
+% 这两项可通过 \cs{fdusetup} 录入,具体
+% 请参阅 \ref{subsubsec:信息录入}~节。
+%^^A! At the end of abstract (both Chinese and English, if available),
+%^^A! keywords list and CLC number will be shown. They can be
+%^^A! specified via command \cs{fdusetup} and you may refer to
+%^^A! subsubsection~\ref{subsubsec:information} for more details.
+%^^A!
+%
+%^^A TODO: \DescribeEnv{notation}
+% \begin{function}{notation}
+%   \begin{fdusyntax}[emph={[2]notation}]
+%     \begin{notation}(*\oarg{列格式说明}*)
+%       (*\meta{符号 1}*)  &  (*\meta{说明}*)  \\
+%       (*\meta{符号 2}*)  &  (*\meta{说明}*)  \\
+%       (*\phantom{\meta{符号 $n$}}*)  (*$\vdots$*)
+%       (*\meta{符号\ \kern-0.1em$n$}*)  &  (*\meta{说明}*)
+%     \end{notation}
+%   \end{fdusyntax}
+%   符号表。可选参数\meta{列格式说明}与 \LaTeX{} 中标准表格的列格
+%   式说明语法一致,默认值为“|lp{7.5cm}|”,即第一列宽度自动调整,
+%   第二列限宽 \SI{7.5}{cm},两列均为左对齐。
+% \end{function}
+%^^A! \begin{function}{notation}
+%^^A!   \begin{fdusyntax}[emph={[2]notation}]
+%^^A!     \begin{notation}(*\oarg{column format}*)
+%^^A!       (*\meta{symbol 1}*)  &  (*\meta{description}*)  \\
+%^^A!       (*\meta{symbol 2}*)  &  (*\meta{description}*)  \\
+%^^A!       (*\phantom{\meta{symbol $n$}}*)  (*$\vdots$*)
+%^^A!       (*\meta{symbol \kern-0.1em$n$}*)  &  (*\meta{description}*)
+%^^A!     \end{notation}
+%^^A!   \end{fdusyntax}
+%^^A!   Notation list (or symbol list, nomenclature) environment.
+%^^A!   The optional argument \meta{column format} is the same as
+%^^A!   in a standard \LaTeX{} table. The default value is
+%^^A!   ``|lp{7.5cm}|'', which means auto-width for the first column
+%^^A!   and fix-width (\SI{7.5}{cm}) for the second; both columns will
+%^^A!   be left-aligned.
+%^^A! \end{function}
+%^^A!
+%
+% \subsubsection{猪肚}
+%^^A! \subsubsection{Main matter}
+%^^A!
+%
+% \begin{function}{\mainmatter}
+%   声明主体部分开始。
+% \end{function}
+%^^A! \begin{function}{\mainmatter}
+%^^A!   Declare the beginning of main matter.
+%^^A! \end{function}
+%^^A!
+%
+% 主体部分是论文的核心,您可以分章节撰写。如有需求,也可以采用
+% 多文件编译的方式。主体部分的页码采用阿拉伯数字。
+%^^A! As the name suggests, ``main matter'' is the main body of your
+%^^A! thesis. When working on a big projects, it's usually a good
+%^^A! idea to split the source file into several parts. The page
+%^^A! numbers in main matter are shown in arabic numerals.
+%^^A!
+%
+% \begin{function}[updated=2018-01-15]{\footnote}
+%   \begin{fdusyntax}[deletetexcs={\footnote},%
+%       morekeywords={\footnote}]
+%     \footnote(*\marg{脚注文字}*)
+%   \end{fdusyntax}
+%   插入脚注。脚注编号样式可利用 \opt{style/footnote-style} 选项控制,
+%   具体见 \ref{subsubsec:论文格式}~小节。
+% \end{function}
+%^^A! \begin{function}[updated=2018-01-15]{\footnote}
+%^^A!   \begin{fdusyntax}[deletetexcs={\footnote},%
+%^^A!       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 subsubsection~%
+%^^A!   \ref{subsubsec:style-and-format} for more details.
+%^^A! \end{function}
+%^^A!
+%
+%^^A TODO: \DescribeEnv{proof}
+% \begin{function}{axiom,corollary,definition,example,lemma,
+%   proof,theorem}
+%   \begin{fdusyntax}[emph={[2]proof}]
+%     \begin{proof}(*\oarg{小标题}*)
+%       (*\meta{证明过程}*)
+%     \end{proof}
+%   \end{fdusyntax}
+%   一系列预定义的数学环境。具体含义见表~\ref{tab:theorem}。
+% \end{function}
+%^^A! \begin{function}{axiom,corollary,definition,example,lemma,
+%^^A!   proof,theorem}
+%^^A!   \begin{fdusyntax}[emph={[2]proof}]
+%^^A!     \begin{proof}(*\oarg{subheading}*)
+%^^A!       (*\meta{procedure of proof}*)
+%^^A!     \end{proof}
+%^^A!   \end{fdusyntax}
+%^^A!   A series of pre-defined math environments.
+%^^A! \end{function}
+%^^A!
+%
+% \begin{table}[ht]
+%   \caption{预定义的数学环境} \label{tab:theorem}
+%   \centering
+%   \begin{tabular}{cccccccc}
+%     \toprule
+%     \textbf{名称} &
+%       \env{axiom}   & \env{corollary} & \env{definition} &
+%       \env{example} & \env{lemma}     & \env{proof}      &
+%       \env{theorem} \\
+%     \midrule
+%     \textbf{含义} &
+%       公理 & 推论 & 定义 & 例 & 引理 & 证明 & 定理 \\
+%     \bottomrule
+%   \end{tabular}
+% \end{table}
+%
+% 证明环境(\env{proof})的最后会添加证毕符号“$\QED$”。要确保
+% 该符号在正确的位置显示,您需要按照 \ref{subsec:编译方式}~节
+% 中的有关说明编译\emph{两次}。
+%^^A! A QED\footnote{Abbreviation of Latin phrase \emph{quod erat
+%^^A!   demonstrandum}, means ``what was to be demonstrated''.}
+%^^A! symbol ``$\QED$'' will be added at the end of \env{proof}
+%^^A! environment. You need to compile the source file \emph{twice}
+%^^A! as in subsection~\ref{subsec:compilation} in order to make
+%^^A! the position of QED symbol correct.
+%^^A!
+%
+% \begin{function}[updated=2017-12-12]{\newtheorem}
+%   \begin{fdusyntax}[deletetexcs={\newtheorem},
+%       morekeywords={\newtheorem,\newtheorem*}]
+%     \newtheorem(*\oarg{选项}\marg{环境名}\marg{标题}*)
+%     \newtheorem*(*\oarg{选项}\marg{环境名}\marg{标题}*)
+%     \begin(*\marg{环境名}\oarg{小标题}*)
+%       (*\meta{内容}*)
+%     \end(*\marg{环境名}*)
+%   \end{fdusyntax}
+%   声明新的定理类环境(数学环境)。带星号的版本表示不进行编号,
+%   并且会默认添加证毕符号“$\QED$”。声明后,即可同预定义的数学环境
+%   一样使用。
+% \end{function}
+%^^A! \begin{function}[updated=2017-12-12]{\newtheorem}
+%^^A!   \begin{fdusyntax}[deletetexcs={\newtheorem},
+%^^A!       morekeywords={\newtheorem,\newtheorem*}]
+%^^A!     \newtheorem(*\oarg{options}\marg{environment}\marg{title}*)
+%^^A!     \newtheorem*(*\oarg{options}\marg{environment}\marg{title}*)
+%^^A!     \begin(*\marg{environment}\oarg{subheading}*)
+%^^A!       (*\meta{contents}*)
+%^^A!     \end(*\marg{environment}*)
+%^^A!   \end{fdusyntax}
+%^^A!   Declare new math environments (theorems). If you use
+%^^A!   \cs{newtheorem*}, then the theorem will not be numbered, and
+%^^A!   a QED symbol ``$\QED$'' will be added at the end of the
+%^^A!   environment. All the theorem environments defined by yourself
+%^^A!   can be used as the pre-defined ones.
+%^^A! \end{function}
+%^^A!
+%
+% 事实上,表~\ref{tab:theorem} 中预定义的环境正是通过以下方式定义的:
+% \begin{latexexample}[deletetexcs={\newtheorem},
+%     morekeywords={\newtheorem,\newtheorem*}]
+%   \newtheorem*{proof}{证明}
+%   \newtheorem{axiom}{公理}
+%   \newtheorem{corollary}{定理}
+%   ...
+% \end{latexexample}
+%^^A! Actually, the pre-defined math environments are just defined
+%^^A! with \cs{newtheorem} and \cs{newtheorem*}:
+%^^A! \begin{latexexample}[deletetexcs={\newtheorem},
+%^^A!     morekeywords={\newtheorem,\newtheorem*}]
+%^^A!   \newtheorem*{proof}{proof}
+%^^A!   \newtheorem{axiom}{axiom}
+%^^A!   \newtheorem{corollary}{corollary}
+%^^A!   ...
+%^^A! \end{latexexample}
+%^^A!
+%
+% 与 \cs{fdusetup} 相同,\cs{newtheorem} 的可选参数 \meta{选项}
+% 也为一组键值列表。可用的选项见下。注意您无需输入“|theorem/|”。
+%^^A! Similar with \cs{fdusetup}, the optional argument \meta{options}
+%^^A! of \cs{newtheorem} is a key-value list as well. The available
+%^^A! are described below. Note that you don't need to type in the
+%^^A! ``|theorem/|'' prefix.
+%^^A!
+%
+% \begin{function}{theorem/style}
+%   \begin{fdusyntax}[emph={[1]style}]
+%     style = (*<(plain)|margin|change|\\
+%       XXXXXX\mbox{}~~~~~~~~break|marginbreak|changebreak>*)
+%   \end{fdusyntax}
+%   定理类环境的总体样式。
+% \end{function}
+%^^A! \begin{function}{theorem/style}
+%^^A!   \begin{fdusyntax}[emph={[1]style}]
+%^^A!     style = (*<(plain)|margin|change|\\
+%^^A!       XXXX\mbox{}~~~~~~~~break|marginbreak|changebreak>*)
+%^^A!   \end{fdusyntax}
+%^^A!   The overall style of the theorem environment.
+%^^A! \end{function}
+%^^A!
+%
+% \begin{function}{theorem/header-font}
+%   \begin{fdusyntax}[emph={[1]header-font}]
+%     header-font = (*\marg{字体}*)
+%   \end{fdusyntax}
+%   定理头(即标题)的字体。中文模板默认为 \tn{sffamily},即无衬线体
+%   (黑体);英文模板默认为 |\bfseries\upshape|,即加粗直立体。
+% \end{function}
+%^^A! \begin{function}{theorem/header-font}
+%^^A!   \begin{fdusyntax}[emph={[1]header-font}]
+%^^A!     header-font = (*\marg{font}*)
+%^^A!   \end{fdusyntax}
+%^^A!   Font of the theorem header. Default value is \tn{sffamily}
+%^^A!   and |\bfseries\upshape| for Chinese and English template,
+%^^A!   respectively.
+%^^A! \end{function}
+%^^A!
+%
+% \begin{function}{theorem/body-font}
+%   \begin{fdusyntax}[emph={[1]body-font}]
+%     body-font = (*\marg{字体}*)
+%   \end{fdusyntax}
+%   定理内容的字体。中文模板默认为 \tn{fdu at 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 at kai}
+%^^A!   (\textit{楷体}) and \tn{itshape} for Chinese and English
+%^^A!   template, respectively.
+%^^A! \end{function}
+%^^A!
+%
+% \begin{function}{theorem/qed}
+%   \begin{fdusyntax}[emph={[1]qed}]
+%     qed = (*\marg{符号}*)
+%   \end{fdusyntax}
+%   定理结束标记(即证毕符号)。如果用 \cs{newtheorem} 声明定理,
+%   则默认为空;用 \cs{newtheorem*} 声明,则默认为
+%   |\ensuremath{\QED}|,即“$\QED$”。
+% \end{function}
+%^^A! \begin{function}{theorem/qed}
+%^^A!   \begin{fdusyntax}[emph={[1]qed}]
+%^^A!     qed = (*\marg{symbol}*)
+%^^A!   \end{fdusyntax}
+%^^A!   Theorem end mark. For \cs{newtheorem}, default value is
+%^^A!   empty; for \cs{newtheorem*}, default value is
+%^^A!   |\ensuremath{\QED}| (i.e.\ ``$\QED$'').
+%^^A! \end{function}
+%^^A!
+%
+% \begin{function}{theorem/counter}
+%   \begin{fdusyntax}[emph={[1]counter}]
+%     counter = (*\marg{计数器}*)
+%   \end{fdusyntax}
+%   定理计数器,表示定理编号在 \meta{计数器} 的下一级,并会随
+%   \meta{计数器} 的变化而清零。\scite{刘海洋2013latex入门}
+%   默认为 |chapter|,表示按章编号。使用 \cs{newtheorem*} 时,
+%   该选项无效。
+% \end{function}
+%^^A! \begin{function}{theorem/counter}
+%^^A!   \begin{fdusyntax}[emph={[1]counter}]
+%^^A!     counter = (*\marg{counter}*)
+%^^A!   \end{fdusyntax}
+%^^A!   The theorem will be enumerated within \meta{counter}. For
+%^^A!   example, the default value is |chapter|, which means with
+%^^A!   each new \tn{chapter}, the enumeration begins again with 1.
+%^^A!   This option is invalid for \cs{newtheorem*}.
+%^^A! \end{function}
+%^^A!
+%
+% \begin{function}{\caption}
+%   \begin{fdusyntax}[deletetexcs={\caption},morekeywords={\caption}]
+%     \caption(*\marg{图表标题}*)
+%     \caption(*\oarg{短标题}\marg{长标题}*)
+%   \end{fdusyntax}
+%   插入图表标题。可选参数 \meta{短标题} 用于图表目录。在
+%   \meta{长标题} 中,您可以进行长达多段的叙述;但 \meta{短标题}
+%   和单独的 \meta{图表标题} 中则不允许分段。
+%   \scite{刘海洋2013latex入门}
+% \end{function}
+%^^A! \begin{function}{\caption}
+%^^A!   \begin{fdusyntax}[deletetexcs={\caption},morekeywords={\caption}]
+%^^A!     \caption(*\marg{caption}*)
+%^^A!     \caption(*\oarg{short caption}\marg{long caption}*)
+%^^A!   \end{fdusyntax}
+%^^A!   Insert the caption of figure or table. The optional argument
+%^^A!   \meta{short caption} will be shown in the list of figures/tables.
+%^^A!   In \meta{long caption}, you can write descriptions for several
+%^^A!   paragraphs, but \meta{short caption} and the single
+%^^A!   \meta{caption} will not allow multi-paragraph text (i.e.\
+%^^A!   text containing \tn{par}) inside.
+%^^A! \end{function}
+%^^A!
+%
+% 按照排版惯例,建议您将表格的标题放置在绘制表格的命令之前,
+% 而将图片的标题放置在绘图或插图的命令之后。另需注意,
+% \tn{caption} 命令必须放置在浮动体环境(如 \env{table} 和
+% \env{figure})中。
+%^^A! By convention, caption of a table is usually put \emph{before}
+%^^A! the table itself, while for figure it's the opposite.
+%^^A! In addition, command \tn{caption} must be put inside float
+%^^A! environments (e.g.\ \env{table} and \env{figure}).
+%^^A!
+%
+% \subsubsection{豹尾}
+%^^A! \subsubsection{Back matter}
+%^^A!
+%
+% \begin{function}{\backmatter}
+%   声明后置部分开始。
+% \end{function}
+%^^A! \begin{function}{\backmatter}
+%^^A!   Declare the beginning of back matter.
+%^^A! \end{function}
+%^^A!
+%
+% 后置部分包含参考文献、声明页等。
+%^^A! Back matter contains bibliography, declaration page, etc.
+%^^A!
+%
+% \begin{function}[updated=2018-01-25]{\printbibliography}
+%   \begin{fdusyntax}[morekeywords={\printbibliography}]
+%     \printbibliography(*\oarg{选项}*)
+%   \end{fdusyntax}
+%   打印参考文献列表。如果 \kvopt{bib-backend}{bibtex},则 \meta{选项}
+%   无效,相当于 \tn{bibliography} \texttt{\marg{文献数据库}},其中的
+%   \meta{文献数据库} 可利用 \opt{style/bib-resource} 选项指定,具体见
+%   \ref{subsubsec:论文格式}~小节;而如果 \kvopt{bib-backend}^^A
+%   {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
+%^^A!   \meta{bib files} should be specified with option
+%^^A!   \opt{style/bib-resource} (see subsubsection~%
+%^^A!   \ref{subsubsec:style-and-format}). When \kvopt{bib-backend}%
+%^^A!   {bibtex}, then \tn{printbibliography} is provided by
+%^^A!   \pkg{biblatex} and the available options can be found in its
+%^^A!   documentation.
+%^^A! \end{function}
+%^^A!
+%
+% \section{宏包依赖情况}
+%^^A! \section{Packages dependencies}
+%^^A!
+%
+% 使用不同编译方式、指定不同选项,会导致宏包依赖情况有所不同。
+% 具体如下:
+% \begin{itemize}
+%   \item 在任何情况下,本模板都会\emph{显式}调用以下宏包
+%     (或文档类):
+%     \begin{itemize}
+%       \item \pkg{expl3}、\pkg{xparse}、\pkg{xtemplate} 和
+%         \pkg{l3keys2e},用于构建 \LaTeX3 编程环境
+%         \scite{interfaces3,source3}。它们分属 \pkg{l3kernel} 和
+%         \pkg{l3packages} 宏集。
+%       \item \cls{ctexbook},提供中文排版的通用框架。属于 \CTeX{}
+%         宏集 \scite{CTeX}。
+%       \item \pkg{amsmath},对 \LaTeX{} 的数学排版功能进行了
+%         全面扩展。属于 \AmSLaTeX{} 套件。
+%       \item \pkg{unicode-math},负责处理 Unicode 编码的
+%         OpenType 数学字体。
+%       \item \pkg{geometry},用于调整页面尺寸。
+%       \item \pkg{fancyhdr},处理页眉页脚。
+%       \item \pkg{footmisc},处理脚注。
+%       \item \pkg{ntheorem},提供增强版的定理类环境。
+%       \item \pkg{graphicx},提供图形插入的接口。
+%       \item \pkg{longtable},长表格(允许跨页)支持。
+%       \item \pkg{caption},用于设置题注。
+%       \item \pkg{natbib},提供增强的参考文献著录及引用支持。
+%       \item \pkg{xcolor},提供彩色支持。
+%       \item \pkg{hyperref},提供交叉引用、超链接、电子书签等功能。
+%     \end{itemize}
+%   \item 开启 \kvopt{style/footnote-style}{pifont} 后,会调用
+%     \pkg{pifont} 宏包。它属于 \pkg{psnfss} 套件。
+%   \item 开启 \kvopt{style/bib-backend}{bibtex} 后,会调用
+%     \pkg{natbib} 宏包,并依赖 \BibTeX{} 程序。参考文献样式由
+%     \pkg{gbt7714} 宏包提供 \scite{natbib,gbt7714}。
+%   \item 开启 \kvopt{style/bib-backend}{biblatex} 后,会调用
+%     \pkg{biblatex} 宏包,并依赖 \biber{} 程序。参考文献样式由
+%     \pkg{biblatex-gb7714-2015} 宏包提供
+%     \scite{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{expl3}, \pkg{xparse}, \pkg{xtemplate} and
+%^^A!         \pkg{l3keys2e}, belong to \pkg{l3kernel} and
+%^^A!         \pkg{l3packages} bundles
+%^^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{natbib}
+%^^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[1]{{\small\OldUrl{#1}}}
+% \newcommand\CTANurl[1]{{\small\href{http://mirror.ctan.org/#1}^^A
+%   {\ttfamily CTAN://#1}}}
+%
+% \bibitem{source2e}
+% \textsc{Braams J}, \textsc{Carlisle D}, \textsc{Jeffrey A}, et al.
+% \newblock \textit{The \LaTeXe{} Sources} [CP/OL].
+% \newblock (2018-04-01) \urlprefix
+%   \CTANurl{macros/latex/base/source2e.pdf}
+%
+% \bibitem{CTeX}
+% \textsc{CTEX.ORG}.
+% \newblock \textit{\CTeX{} 宏集手册} [EB/OL].
+% \newblock version 2.4.12,
+% \newblock (2018-01-28) \urlprefix
+%   \CTANurl{language/chinese/ctex/ctex.pdf}
+%
+% \bibitem{xeCJK}
+% \textsc{CTEX.ORG}.
+% \newblock \textit{\pkg{xeCJK} 宏包} [EB/OL].
+% \newblock version 3.7.0,
+% \newblock (2018-04-07) \urlprefix
+%   \CTANurl{macros/xetex/latex/xecjk/xeCJK.pdf}
+%
+% \bibitem{natbib}
+% \textsc{Daly P W}.
+% \newblock \textit{Natural Sciences Citations and References} [EB/OL].
+% \newblock version 8.31b,
+% \newblock (2010-09-13) \urlprefix
+%   \CTANurl{macros/latex/contrib/natbib/natbib.pdf}
+%
+% \bibitem{hmshan2017fduphdthesistemplate}
+% \textsc{hmshan}.
+% \newblock \textit{复旦博士论文模板} [EB/OL].
+% \newblock (2017-04-04) \urlprefix
+%   \url{https://github.com/hmshan/FDU_PhD_Thesis_Template}
+%
+% \bibitem{knuth1986texbook}
+% \textsc{Knuth D E}.
+% \newblock \textit{The \TeX book: Computers \& Typesetting, volumn A} [M].
+% \newblock Boston: Addison--Wesley Publishing Company, 1986
+%   \urlprefix {\small {\kaishu 源代码
+%     \footnote{此代码只可作为学习之用。未经 Knuth 本人同意,您不应当编译此文档。}:}
+%     \CTANurl{systems/knuth/dist/tex/texbook.tex}}
+%
+% \bibitem{interfaces3}
+% \textsc{The \LaTeX3 Project}.
+% \newblock \textit{The \LaTeX3 Interfaces} [EB/OL].
+% \newblock (2018-03-05) \urlprefix
+%   \CTANurl{macros/latex/contrib/l3kernel/interface3.pdf}
+%
+% \bibitem{source3}
+% \textsc{The \LaTeX3 Project}.
+% \newblock \textit{The \LaTeX3 Sources} [CP/OL].
+% \newblock (2018-03-05) \urlprefix
+%   \CTANurl{macros/latex/contrib/l3kernel/source3.pdf}
+%
+% \bibitem{biblatex}
+% \textsc{Lehman P}, \textsc{Kime P}, \textsc{Boruvka A}, et al.
+% \newblock \textit{The \pkg{biblatex} Package} [EB/OL].
+% \newblock version 3.11,
+% \newblock (2018-03-01) \urlprefix
+%   \CTANurl{macros/latex/contrib/biblatex/doc/biblatex.pdf}
+%
+% \bibitem{mittelbach2004latexcompanion}
+% \textsc{Mittelbach F} and \textsc{Goossens M}.
+% \newblock \textit{The \LaTeX{} Companion} [M].
+% \newblock 2nd ed.
+% \newblock Boston: Addison--Wesley Publishing Company, 2004
+%
+% \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.2,
+% \newblock (2018-02-28) \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{} 介绍: 或 102 分钟了解 \LaTeXe{}} [EB/OL].
+% \newblock China\TeX{} 论坛, 译.
+% \newblock 原版版本 version 5.05, 中文版本 version 5.10,
+% \newblock (2017-03-26) \urlprefix
+%   \CTANurl{info/lshort/chinese/lshort-zh-cn.pdf}
+%
+% \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{weijianwen2017sjtuthesis}
+% \textsc{weijianwen}.
+% \newblock \textit{A \XeLaTeX{} template for Shanghai Jiao Tong University (SJTU) thesis} [EB/OL].
+% \newblock version 0.10,
+% \newblock (2018-02-11) \urlprefix
+%   \url{https://github.com/weijianwen/SJTUThesis}
+%
+% \bibitem{wright2009dtxfile}
+% \textsc{Wright J}.
+% \newblock \textit{A model dtx file} [EB/OL].
+% \newblock (2009-10-06) \urlprefix
+%   \url{http://www.texdev.net/2009/10/06/a-model-dtx-file}
+%
+% \bibitem{gbt7714}
+% \textsc{Zeping Lee}.
+% \newblock \textit{GB/T 7714-2015 \BibTeX{} Style} [EB/OL].
+% \newblock version 1.0.3,
+% \newblock (2018-03-16) \urlprefix
+%   \CTANurl{biblio/bibtex/contrib/gbt7714/gbt7714.pdf}
+%
+% \bibitem{zepinglee2017ustcthesis}
+% \textsc{Zeping Lee} and \textsc{seisman}.
+% \newblock \textit{\LaTeX{} template for USTC thesis v3.0} [EB/OL].
+% \newblock version 3.0.4,
+% \newblock (2018-04-03) \urlprefix
+%   \url{https://github.com/ustctug/ustcthesis}
+%
+% \bibitem{数院毕业论文格式}
+% 复旦大学数学科学学院.
+% \newblock \textit{毕业论文格式 tex 版和 word 版} [EB/OL]. \urlprefix
+%   \url{http://math.fudan.edu.cn/show.aspx?info_lb=664&flag=101&info_id=1816}
+%
+% \bibitem{数院毕业论文格式更新}
+% 复旦大学数学科学学院.
+% \newblock \textit{毕业论文格式: Word、\TeX{} 模板更新} [EB/OL]. \urlprefix
+%   \url{http://math.fudan.edu.cn/Show.aspx?info_lb=664&info_id=1855&flag=101}
+%
+% \bibitem{复旦大学论文规范}
+% 复旦大学图书馆, 复旦大学研究生院.
+% \newblock \textit{复旦大学博士、硕士学位论文规范} [EB/OL].
+% \newblock 2017 年 3 月修订版.
+% \newblock (2017-03-27) \urlprefix
+%   \url{http://www.gs.fudan.edu.cn/_upload/article/4c/a8/a82545ef443b9c057c14ba13782c/c883c6f3-6d7f-410c-8f30-d8bde6fcb990.doc}
+%
+% \bibitem{gb-t-7713.1-2006}
+% 国务院学位委员会办公室, 全国信息与文献标准化技术委员会.
+% \newblock \textit{学位论文编写规则: GB/T 7713.1--2006} [S].
+% \newblock 北京: 中国标准出版社, 2007
+%
+% \bibitem{胡伟2017latex2e}
+% 胡伟.
+% \newblock \textit{\LaTeXe{} 文类和宏包学习手册} [M].
+% \newblock 北京: 清华大学出版社, 2017
+%
+% \bibitem{biblatex-gb7714-2015}
+% 胡振震.
+% \newblock \textit{符合 GB/T 7714-2015 标准的 biblatex 参考文献样式} [EB/OL].
+% \newblock version 1.0i,
+% \newblock (2018-01-14) \urlprefix
+% {\small\href{http://mirror.ctan.org/macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/biblatex-gb7714-2015.pdf}^^A
+%   {\ttfamily CTAN://macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/biblatex-gb77 14-2015.pdf}}
+%
+% \bibitem{gb-t-15834-2011}
+% 教育部语言文字信息管理司.
+% \newblock \textit{标点符号用法: GB/T 15834--2011} [S].
+% \newblock 北京: 中国标准出版社, 2012
+%
+% \bibitem{cquthesis}
+% 李振楠.
+% \newblock \textit{\textsc{CquThesis}:重庆大学毕业论文 \LaTeX{} 模板} [EB/OL].
+% \newblock version 1.30,
+% \newblock (2018-02-23) \urlprefix
+%   \CTANurl{macros/latex/contrib/cquthesis/cquthesis.pdf}
+%
+% \bibitem{刘海洋2013latex入门}
+% 刘海洋.
+% \newblock \textit{\LaTeX{} 入门} [M].
+% \newblock 北京: 电子工业出版社, 2013
+%
+% \bibitem{gb-t-7714-2015}
+% 全国信息与文献标准化技术委员会.
+% \newblock \textit{信息与文献 参考文献著录规则: GB/T 7714--2015} [S].
+% \newblock 北京: 中国标准出版社, 2015
+%
+% \bibitem{thuthesis}
+% 薛瑞尼.
+% \newblock \textit{\textsc{ThuThesis}:清华大学学位论文模板} [EB/OL].
+% \newblock version 5.4.3,
+% \newblock (2017-12-24) \urlprefix
+%   \CTANurl{macros/latex/contrib/thuthesis/thuthesis.pdf}
+%
+% \end{thebibliography}
+%
+% \clearpage
+%
+%^^A! \end{document}
+%
+% \end{documentation}
+%
+%^^A \EnableImplementation
+%^^A \DisableImplementation
+%
+% \begin{implementation}
+%
+%^^A 代码部分的页边距
+% \newgeometry{
+%   left      = 2.25 in,
+%   right     = 1.00 in,
+%   top       = 1.25 in,
+%   bottom    = 1.00 in,
+%   marginpar = 2.25 in
+% }
+%
+% \section{实现细节}
+%
+% 本模板使用 \LaTeX3 语法编写,依赖 \pkg{expl3} 环境,
+% 并需调用 \pkg{l3packages} 中的相关宏包。
+%
+% 按照 \LaTeX3 语法,代码中的空格、换行、回车与制表符完全忽略,
+% 而下划线“|_|”和冒号“|:|”则可作为一般字母使用。
+% 正常的空格可以使用“|~|”代替;至于 |~| 原来所表示的“带子”,
+% 则要用 \LaTeXe{} 的原始命令 \tn{nobreakspace} 代替。
+%
+% 以下代码中有一些形如 \textcolor[HTML]{2E3191}^^A
+% {\textsf{\textlangle *class\textrangle}} 的标记,这是
+% \pkg{DocStrip} 中的“guard”,用来选择性地提取文件。
+% “\textsf{*}”和“\textsf{/}”分别表示该部分的开始和结束。不含
+% “\textsf{*}”和“\textsf{/}”的 guard 出现在行号右侧,它们用来确定
+% 单独一行代码的归属。这些 guard 的颜色深浅不一,用以明确嵌套关系。
+%
+% 另有若干形如 \textcolor{MaterialPink}^^A
+% {\textsf{\textlangle @@=fdu\textrangle}} 的 guard ,它们由
+% \pkg{l3docstrip} 定义,用来指示名字空间(模块)。
+%
+% \subsection{准备}
+%
+%    \begin{macrocode}
+%<@@=fdu>
+%<*class|class-en>
+%    \end{macrocode}
+%
+% 检查 \LaTeX3 编程环境。
+%    \begin{macrocode}
+\RequirePackage { xparse, xtemplate, l3keys2e }
+\clist_map_inline:nn { expl3, xparse, xtemplate, l3keys2e }
+  {
+    \@ifpackagelater {#1} { 2017/12/16 }
+      { } { \msg_error:nnn { fduthesis } { l3-too-old } {#1} }
+  }
+\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.
+  }
+%    \end{macrocode}
+%
+% 目前 \cls{fduthesis} 仅支持 \XeTeX{} 和 \LuaTeX{}。
+%    \begin{macrocode}
+\sys_if_engine_xetex:F
+  {
+    \sys_if_engine_luatex:F
+      {
+        \msg_fatal:nnx { fduthesis } { unsupported-engine }
+          { \c_sys_engine_str }
+      }
+  }
+\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".
+  }
+%    \end{macrocode}
+%
+% \subsubsection{内部变量声明}
+%
+% \begin{variable}{\l_@@_tmpa_box,
+%   \l_@@_tmpa_clist,\l_@@_tmpb_clist,
+%   \l_@@_tmpa_dim,\l_@@_tmpb_dim,
+%   \l_@@_tmpa_skip,
+%   \l_@@_tmpa_tl,\l_@@_tmpb_tl}
+% 临时变量。
+%    \begin{macrocode}
+\box_new:N   \l_@@_tmpa_box
+\clist_new:N \l_@@_tmpa_clist
+\clist_new:N \l_@@_tmpb_clist
+\dim_new:N   \l_@@_tmpa_dim
+\dim_new:N   \l_@@_tmpb_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_int}
+% 论文类型。取值 1、2、3 分别对应博士、硕士、本科(学士),这与学号
+% 第三位是一致的。
+%    \begin{macrocode}
+\int_new:N \g_@@_thesis_type_int
+%    \end{macrocode}
+% \end{variable}
+%
+% \begin{variable}{\g_@@_to_ctexbook_clist,\g_@@_to_hyperref_clist}
+% 分别保存由 \cls{fduthesis} 传入 \cls{ctexbook} 文档类和
+% \pkg{hyperref} 宏包的选项列表。
+%    \begin{macrocode}
+\clist_new:N \g_@@_to_ctexbook_clist
+\clist_new:N \g_@@_to_hyperref_clist
+%    \end{macrocode}
+% \end{variable}
+%
+% \begin{variable}{\g_@@_twoside_bool}
+% 是否开启双页模式(默认打开)。
+%    \begin{macrocode}
+\bool_new:N \g_@@_twoside_bool
+\bool_set_true:N \g_@@_twoside_bool
+%    \end{macrocode}
+% \end{variable}
+%
+% \begin{variable}{\g_@@_draft_bool}
+% 是否开启草稿模式。
+%    \begin{macrocode}
+\bool_new:N \g_@@_draft_bool
+%    \end{macrocode}
+% \end{variable}
+%
+% \begin{variable}{\g_@@_config_tl}
+% 保存配置文件名称。默认为空。
+%    \begin{macrocode}
+\tl_new:N \g_@@_config_tl
+%    \end{macrocode}
+% \end{variable}
+%
+% \subsubsection{内部函数}
+%
+% \begin{macro}{\cs_generate_variant:cn,
+%   \file_input:V,
+%   \int_to_arabic:v,
+%   \keys_define:nx,
+%   \tl_map_inline:xn}
+% \begin{macro}[TF]{\tl_if_eq:Vn}
+% \LaTeX3{} 函数变体。
+%    \begin{macrocode}
+\cs_generate_variant:Nn \cs_generate_variant:Nn { cn }
+\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 \tl_map_inline:nn       { xn }
+\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}
+%
+% \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_sep:nn,
+%   \@@_define_format:nn,
+%   \@@_define_name:nn,
+%   \@@_define_name:nnn}
+% 用来定义脚注样式、标点、默认名称的辅助函数。
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_define_fn_style:nn #1#2
+  { \tl_const:cn { c_@@_fn_style_ #1 _tl } {#2} }
+\cs_new_protected:Npn \@@_define_punct:nn #1#2
+  { \tl_const:cn { c_@@_ #1 _tl } { \@@_symbol:n {#2} } }
+% \cs_new_protected:Npn \@@_define_sep:nn #1#2
+%   { \tl_const:cn { c_@@_ #1 _sep_tl } {#2} }
+% \cs_new_protected:Npn \@@_define_format:nn #1#2
+%   { \tl_const:cn { c_@@_ #1 _format_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,
+%   \@@_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 \@@_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 .choice:,
+    type .value_required:n = true,
+    type .choices:nn = 
+      { doctor, master, bachelor }
+      { \int_set_eq:NN \g_@@_thesis_type_int \l_keys_choice_int },
+    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_tl"~ is~ unknown. }
+%    \end{macrocode}
+%
+% 将文档类选项传给 |fdu/option|。
+%    \begin{macrocode}
+\ProcessKeysOptions { fdu / option }
+%    \end{macrocode}
+%
+% 载入参数配置文件。
+%    \begin{macrocode}
+\file_input:n { fduthesis.def }
+\tl_if_empty:NF \g_@@_config_tl
+  {
+    \file_input:V \g_@@_config_tl
+    \@@_info:nx { load-config-file } { \g_@@_config_tl }
+  }
+\@@_msg_new:nn { load-config-file }
+  { You~ are~ loading~ config~ file~ '#1'. }
+%    \end{macrocode}
+%
+% \subsection{载入宏包、文档类}
+%
+% \changes{v0.7}{2018/01/19}{使用 \cls{ctexbook} 文档类,而非直接使用
+%   标准文档类 \cls{book}。}
+%
+% 将选项传入 \cls{ctexbook} 文档类。\\
+%    \begin{macrocode}
+% TODO: (2017/07/22) Chinese fonts in fduthesis-en
+\PassOptionsToClass
+  {
+    UTF8,
+%<class-en>    scheme     = plain,
+    heading    = true,
+%<class>    fontset    = none,
+%<class-en>    fontset    = fandol,
+    zihao      = -4,
+%<class>    linespread = \c_@@_line_spread_fp,
+    \g_@@_to_ctexbook_clist
+  }
+  { ctexbook }
+%    \end{macrocode}
+%
+% 传入各宏包选项。
+%    \begin{macrocode}
+\clist_map_inline:nn
+  {
+    { no-math           } { fontspec },
+    { perpage           } { footmisc },
+    { amsmath, thmmarks } { ntheorem }
+  }
+  { \PassOptionsToPackage #1 }
+%    \end{macrocode}
+%
+% 本模板会在 \pkg{ctexhook} 提供的钩子 \cs{ctex_at_end_preamble:n}
+% 中调用 \pkg{biblatex},而 \pkg{biblatex} 自身又会使用 \pkg{etoolbox}
+% 的钩子 \tn{AtEndPreamble},因此需要在载入 \cls{ctexbook} 之前调用
+% \pkg{etoolbox}。
+%
+% 钩子的顺序为:$\text{\tn{CTEX at document@left at hook}} \prec
+% \text{\tn{@endpreamblehook}} \prec
+% \text{\texttt{\textbackslash begin\{document\}}}$。
+%    \begin{macrocode}
+\RequirePackage { etoolbox }
+%    \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}
+%
+% \begin{macro}{\@@_check_package:nnn}
+% 检查过时宏包。
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_check_package:nnn #1#2#3
+  {
+    \@ifpackagelater {#1} {#2}
+      { } { \@@_error:nnn { package-too-old } {#1} {#3} }
+  }
+\@@_msg_new:nn { package-too-old }
+  {
+    Package~ "#1"~ is~ too~ old. \\
+    The~ fduthesis~ class~ only~ supports~ "#1"~ with~ a~ version \\
+    higher~ than~ v#2. \\\\
+    Please~ update~ an~ up-to-date~ version~ of~ it~ using~ your \\
+    TeX~ package~ manager~ or~ from~ CTAN.
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+%    \begin{macrocode}
+\@@_check_package:nnn { ctex         } { 2017/08/07 } { 2.4.10 }
+\@@_check_package:nnn { fontspec     } { 2017/09/22 } { 2.6e   }
+\@@_check_package:nnn { unicode-math } { 2017/11/18 } { 0.8i   }
+\sys_if_engine_xetex:T
+  { \@@_check_package:nnn { xeCJK } { 2017/08/07 } { 3.5.0 } }
+%    \end{macrocode}
+%
+% \subsection{页面布局}
+%
+% 利用 \pkg{geometry} 宏包设置纸张大小、页面边距以及页眉高度。这里,
+% $\SI{2.54}{\centi\meter}=\SI{1}{in}$,
+% $\SI{3.18}{\centi\meter}=\SI{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{字体}
+%
+% \changes{v0.5}{2017/09/09}{重新实现字体调用。核心内容是分离
+%   字体的声明与设定,并按照宋、黑、仿、楷划分中文字体。}
+%
+% 为了避免不必要的字体调用开销
+% \footnote{事实上,此处的修正对性能的提升并不大。},
+% 本模板把字体的\emph{声明}与\emph{设定}分离了开来。使用
+% \cs{fdusetup} 设置的字体选项,以及导言区中通过 \cs{setmainfont}、
+% \cs{setCJKmainfont} 等命令设置的字体,均按照字体\emph{声明}处理。
+% 此时,字体名及其选项被存入相关变量中,但不进行实际调用。导言区
+% 末尾,再进行统一调用。本模板将重新定义 \cs{setmainfont}、
+% \cs{setCJKmainfont} 等命令。
+%
+% 对于中文字体,\pkg{ctex} 宏包及其底层 \pkg{xeCJK} 和
+% \pkg{LuaTeX-ja},均与 \pkg{fontspec} 保持一致,以
+% |main|、|sans|、|mono| 三类进行划分;而本模板则按照
+% 宋、黑、仿、楷等进行划分。为此,需要额外建立二者之间的对应关系。
+%
+% \begin{variable}{\g_@@_font_name_prop,\g_@@_font_options_prop}
+% 存放西文字体名称及选项。
+%    \begin{macrocode}
+\prop_new:N \g_@@_font_name_prop
+\prop_new:N \g_@@_font_options_prop
+%    \end{macrocode}
+% \end{variable}
+%
+% \begin{variable}{\g_@@_cjk_font_name_prop,
+%   \g_@@_cjk_font_options_prop}
+% 存放中文字体及选项。
+%    \begin{macrocode}
+\prop_new:N \g_@@_cjk_font_name_prop
+\prop_new:N \g_@@_cjk_font_options_prop
+%    \end{macrocode}
+% \end{variable}
+%
+% \subsubsection{选项处理}
+%
+% 定义 |fdu/style| 键值类。
+%    \begin{macrocode}
+\keys_define:nn { fdu / style }
+  {
+%    \end{macrocode}
+%
+% \begin{macro}{style/font}
+% 预定义西文字体。部分等宽字体(TeX Gyre Cursor)使用
+% \kvopt{Ligatures}{Common\-Off} 选项以禁用连字。
+%    \begin{macrocode}
+    font .choice:,
+    font .value_required:n = true,
+%    \end{macrocode}
+% Libertinus 系列。
+%    \begin{macrocode}
+    font / libertinus .code:n =
+      {
+        \fdu_choose_font:nn { main } { Libertinus~ Serif }
+        \fdu_choose_font:nn { sans } { Libertinus~ Sans  }
+        \fdu_choose_font_with_option:nnn { mono }
+          { TeX~ Gyre~ Cursor } { Ligatures = Common Off }
+        \fdu_choose_font:nn { math } { Libertinus~ Math  }
+        \keys_set:nn { fdu / style } { footnote-style = libertinus }
+      },
+%    \end{macrocode}
+% Latin Modern 系列。
+%    \begin{macrocode}
+    font / lm .code:n =
+      {
+        \fdu_choose_font:nn { main } { Latin~ Modern~ Roman }
+        \fdu_choose_font:nn { sans } { Latin~ Modern~ Sans  }
+        \fdu_choose_font:nn { mono } { Latin~ Modern~ Mono  }
+        \fdu_choose_font:nn { math } { Latin~ Modern~ Math  }
+        \keys_set:nn { fdu / style } { footnote-style = pifont }
+      },
+%    \end{macrocode}
+% Palatino 系列。
+%    \begin{macrocode}
+    font / palatino .code:n =
+      {
+        \fdu_choose_font:nn { main } { TeX~ Gyre~ Pagella }
+        \fdu_choose_font:nn { sans } { TeX~ Gyre~ Heros   }
+        \fdu_choose_font_with_option:nnn { mono }
+          { TeX~ Gyre~ Cursor } { Ligatures = Common Off }
+        \fdu_choose_font:nn { math } { TeX~ Gyre~ Pagella~ Math }
+        \keys_set:nn { fdu / style } { footnote-style = pifont }
+      },
+%    \end{macrocode}
+% \changes{v0.6}{2017/11/11}{额外处理 XITS 字体的小型大写字母。}
+% Times Roman 系列。XITS 字体没有小型大写字母,因此使用普通字体代替。
+%    \begin{macrocode}
+    font / times .code:n =
+      {
+        \fdu_choose_font_with_option:nnn { main } { XITS }
+          {
+            UprightFeatures    = { SmallCapsFont = *               },
+            BoldFeatures       = { SmallCapsFont = *~ Bold         },
+            ItalicFeatures     = { SmallCapsFont = *~ Italic       },
+            BoldItalicFeatures = { SmallCapsFont = *~ Bold~ Italic },
+          }
+        \fdu_choose_font:nn { sans } { TeX~ Gyre~ Heros  }
+        \fdu_choose_font_with_option:nnn { mono }
+          { TeX~ Gyre~ Cursor } { Ligatures = Common Off }
+        \fdu_choose_font:nn { math } { XITS~ Math        }
+        \keys_set:nn { fdu / style } { footnote-style = xits }
+      },
+%    \end{macrocode}
+% \changes{v0.5}{2017/09/23}{新增 \kvopt{font}{none} 选项。}
+% 不设置西文字体。
+%    \begin{macrocode}
+    font / none .code:n =
+      {
+        \@@_initialize_prop:Nn \g_@@_font_name_prop
+          { main, sans, mono, math }
+        \@@_initialize_prop:Nn \g_@@_font_options_prop
+          { main, sans, mono, math }
+        \keys_set:nn { fdu / style } { footnote-style = plain }
+%<*class>
+      },
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{style/cjk-font}
+% 预定义中文(CJK)字体。Adobe 和中易系列没有粗宋体。
+%    \begin{macrocode}
+    cjk-font .choice:,
+    cjk-font .value_required:n = true,
+%    \end{macrocode}
+% Adobe 系列。
+%    \begin{macrocode}
+    cjk-font / adobe .code:n =
+      {
+        \fdu_choose_cjk_font:nn { song } { Adobe~ Song~     Std }
+        \fdu_choose_cjk_font:nn { hei  } { Adobe~ Heiti~    Std }
+        \fdu_choose_cjk_font:nn { fang } { Adobe~ Fangsong~ Std }
+        \fdu_choose_cjk_font:nn { kai  } { Adobe~ Kaiti~    Std }
+      },
+%    \end{macrocode}
+% Fandol 系列。
+%    \begin{macrocode}
+    cjk-font / fandol .code:n =
+      {
+        \fdu_choose_cjk_font_with_option:nnn { song }
+          { FandolSong } { BoldFont = FandolSong~ Bold }
+        \fdu_choose_cjk_font:nn { hei  } { FandolHei  }
+        \fdu_choose_cjk_font:nn { fang } { FandolFang }
+        \fdu_choose_cjk_font:nn { kai  } { FandolKai  }
+      },
+%    \end{macrocode}
+% 方正系列。
+%    \begin{macrocode}
+    cjk-font / founder .code:n =
+      {
+        \fdu_choose_cjk_font_with_option:nnn { song }
+          { FZShuSong-Z01 } { BoldFont = FZXiaoBiaoSong-B05 }
+        \fdu_choose_cjk_font:nn { hei  } { FZHei-B01      }
+        \fdu_choose_cjk_font:nn { fang } { FZFangSong-Z02 }
+        \fdu_choose_cjk_font:nn { kai  } { FZKai-Z03      }
+      },
+%    \end{macrocode}
+% Mac (华文)系列。
+%    \begin{macrocode}
+    cjk-font / mac .code:n =
+      {
+        \fdu_choose_cjk_font_with_option:nnn { song }
+          { STSong } { BoldFont = STZhongsong }
+        \fdu_choose_cjk_font:nn { hei  } { STHeiti    }
+        \fdu_choose_cjk_font:nn { fang } { STFangsong }
+        \fdu_choose_cjk_font:nn { kai  } { STKaiti    }
+      },
+%    \end{macrocode}
+% Windows (中易)系列。
+%    \begin{macrocode}
+    cjk-font / windows .code:n =
+      {
+        \fdu_choose_cjk_font:nn { song } { SimSun   }
+        \fdu_choose_cjk_font:nn { hei  } { SimHei   }
+        \fdu_choose_cjk_font:nn { fang } { FangSong }
+        \fdu_choose_cjk_font:nn { kai  } { KaiTi    }
+      },
+%    \end{macrocode}
+% \changes{v0.5}{2017/09/23}{新增 \kvopt{cjk-font}{none} 选项。}
+% 不设置中文字体。
+%    \begin{macrocode}
+    cjk-font / none .code:n =
+      {
+        \@@_initialize_prop:Nn \g_@@_cjk_font_name_prop
+          { rm, sf, tt, kai }
+        \@@_initialize_prop:Nn \g_@@_cjk_font_options_prop
+          { rm, sf, tt, kai }
+%</class>
+      }
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_initialize_prop:Nn}
+% 把 |prop-list| 清空,将其并设置为 |main={},| |sans={}| 等。
+% \begin{arguments}
+%   \item |prop-list|
+%   \item {\meta{family 1}, \meta{family 2}, \ldots},如
+%     |{main,| |sans,| |mono,| |math}|
+% \end{arguments}
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_initialize_prop:Nn #1#2
+  {
+    \prop_gclear:N #1
+    \clist_map_inline:nn {#2} { \prop_gput:Nnn #1 {##1} { } }
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{字体声明}
+%
+% 重定义文档命令,使其只声明字体,而不进行实际调用。
+%
+% \begin{macro}{\setmainfont,\setsansfont,\setmonofont,\setmathfont}
+% 声明西文字体。参数按照 \pkg{fontspec} 的风格,字体选项
+% 在前在后均可。
+%    \begin{macrocode}
+\clist_map_inline:nn
+  { main, sans, mono, math }
+  {
+    \exp_args:Nc \RenewDocumentCommand { set #1 font } { O { } m O { } }
+      { \fdu_choose_font_with_option:nnn { #1 } {##2} { ##1, ##3 } }
+  }
+% \RenewDocumentCommand \setmainfont { O { } m O { } }
+%   { \fdu_choose_font_with_option:nnn { main } {#2} { #1, #3 } }
+% \RenewDocumentCommand \setsansfont { O { } m O { } }
+%   { \fdu_choose_font_with_option:nnn { sans } {#2} { #1, #3 } }
+% \RenewDocumentCommand \setmonofont { O { } m O { } }
+%   { \fdu_choose_font_with_option:nnn { mono } {#2} { #1, #3 } }
+% \RenewDocumentCommand \setmathfont { O { } m O { } }
+%   { \fdu_choose_font_with_option:nnn { math } {#2} { #1, #3 } }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\setCJKmainfont,\setCJKsansfont,\setCJKmonofont,
+%   \setCJKfamilyfont}
+% 声明中文字体。参数同样按照 \pkg{fontspec} 的风格
+% \footnote{\pkg{xeCJK} 和 \pkg{ctex} 与之稍有区别,它们要求字体
+% 选项只能位于字体名的\emph{前或后},而不能同时出现(即不允许形如
+% \cs{setCJKmainfont}\texttt{\oarg{选项 1}\marg{字体}\oarg{选项 2}}
+% 这样的语句)。}。
+%    \begin{macrocode}
+%<*class>
+\RenewDocumentCommand \setCJKmainfont { O { } m O { } }
+  { \fdu_choose_cjk_font_with_option:nnn { rm } {#2} { #1, #3 } }
+\RenewDocumentCommand \setCJKsansfont { O { } m O { } }
+  { \fdu_choose_cjk_font_with_option:nnn { sf } {#2} { #1, #3 } }
+\RenewDocumentCommand \setCJKmonofont { O { } m O { } }
+  { \fdu_choose_cjk_font_with_option:nnn { tt } {#2} { #1, #3 } }
+\RenewDocumentCommand \setCJKfamilyfont { m O { } m O { } }
+  { \fdu_choose_cjk_font_with_option:nnn {#1} {#3} { #2, #4 } }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\setCJKsongfont,\setCJKheifont,
+%   \setCJKfangfont,\setCJKkaifont}
+% 声明中文宋、黑、仿、楷字体,暂时不用。
+%    \begin{macrocode}
+% \DeclareDocumentCommand \setCJKsongfont { O { } m O { } }
+%   { \fdu_choose_cjk_font_with_option:nnn { song } {#2} { #1, #3 } }
+% \DeclareDocumentCommand \setCJKheifont  { O { } m O { } }
+%   { \fdu_choose_cjk_font_with_option:nnn { hei  } {#2} { #1, #3 } }
+% \DeclareDocumentCommand \setCJKfangfont { O { } m O { } }
+%   { \fdu_choose_cjk_font_with_option:nnn { fang } {#2} { #1, #3 } }
+% \DeclareDocumentCommand \setCJKkaifont  { O { } m O { } }
+%   { \fdu_choose_cjk_font_with_option:nnn { kai  } {#2} { #1, #3 } }
+%</class>
+%    \end{macrocode}
+% \end{macro}
+%
+% 字体选择只需将字体名及选项存入相应变量即可。
+%
+% \begin{macro}{\fdu_choose_font_with_option:nnn,\fdu_choose_font:nn}
+% 选择西文字体。
+% \begin{arguments}
+%   \item |main| / |sans| / |mono| / |math|
+%   \item 字体名
+%   \item 选项
+% \end{arguments}
+%    \begin{macrocode}
+\cs_new_protected:Npn \fdu_choose_font_with_option:nnn #1#2#3
+  {
+    \prop_gput:Nnn \g_@@_font_name_prop    {#1} {#2}
+    \prop_gput:Nnn \g_@@_font_options_prop {#1} {#3}
+  }
+\cs_new_protected:Npn \fdu_choose_font:nn #1#2
+  {
+    \prop_gput:Nnn \g_@@_font_name_prop    {#1} {#2}
+    \prop_gput:Nnn \g_@@_font_options_prop {#1} {  }
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\fdu_choose_cjk_font_with_option:nnn,
+%   \fdu_choose_cjk_font:nn}
+% 选择中文字体。
+% \begin{arguments}
+%   \item |rm| / |sf| / |tt| 或 |song| / |hei| / |fang| / |kai|
+%   \item 字体名
+%   \item 选项
+% \end{arguments}
+%    \begin{macrocode}
+\cs_new_protected:Npn \fdu_choose_cjk_font_with_option:nnn #1#2#3
+  {
+    \prop_gput:Nnn \g_@@_cjk_font_name_prop    {#1} {#2}
+    \prop_gput:Nnn \g_@@_cjk_font_options_prop {#1} {#3}
+  }
+\cs_new_protected:Npn \fdu_choose_cjk_font:nn #1#2
+  {
+    \prop_gput:Nnn \g_@@_cjk_font_name_prop    {#1} {#2}
+    \prop_gput:Nnn \g_@@_cjk_font_options_prop {#1} {  }
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{字体设定}
+%
+% 此时需要利用 \pkg{fontspec}、\pkg{unicode-math}、\pkg{xeCJK}、
+% \pkg{ctex} 等宏包完成实际的字体调用。会在导言区末尾统一进行。
+%
+% \begin{macro}{\@@_set_font:}
+% 设定西文字体。
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_set_font:
+  {
+    \clist_map_inline:nn { main, sans, mono, math }
+      {
+        \prop_get:NnN \g_@@_font_name_prop    {##1} \l_@@_tmpa_tl
+        \prop_get:NnN \g_@@_font_options_prop {##1} \l_@@_tmpb_tl
+        \tl_if_empty:NT \l_@@_tmpa_tl
+          { \@@_error:nn { font-not-defined } {##1} }
+        \use:c { @@_set_ ##1 _font:VV } \l_@@_tmpa_tl \l_@@_tmpb_tl
+      }
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+% \changes{v0.5}{2017/09/23}{同步 \pkg{fontspec} v2.6e。}
+%
+% \begin{macro}{\@@_set_main_font:nn,
+%   \@@_set_sans_font:nn,
+%   \@@_set_mono_font:nn}
+% 拷贝 \cs{__fontspec_main_setmainfont:nn} 等命令。注意参数顺序
+% 是相反的。
+% \begin{arguments}
+%   \item 字体名
+%   \item 选项
+% \end{arguments}
+%    \begin{macrocode}
+\clist_map_inline:nn { main, sans, mono }
+  {
+    \cs_new_protected:cpx { @@_set_ #1 _font:nn } ##1 ##2
+      { \exp_not:c { __fontspec_main_set #1 font:nn } {##2} {##1} }
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+% \changes{v0.6}{2017/10/11}{同步 \pkg{unicode-math} v0.8h。}
+%
+% \begin{macro}{\@@_set_math_font:nn}
+% 拷贝 \pkg{unicode-math} 中的 \cs{setmathfont} 命令。参数同上。
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_set_math_font:nn #1#2
+  { \__um_setmathfont:nn {#2} {#1} }
+%    \end{macrocode}
+% \end{macro}
+%
+% 生成字体设定函数的变体。
+%    \begin{macrocode}
+\clist_map_inline:nn { main, sans, mono, math }
+  { \cs_generate_variant:cn { @@_set_ #1 _font:nn } { VV } }
+%    \end{macrocode}
+%
+% \begin{macro}{\@@_set_cjk_font:}
+% 设定中文字体。复杂之处在于需要建立宋、黑、仿、楷到
+% |rm| / |sf| / |tt| 的映照,如表~\ref{tab:cjk-font} 所示。
+% \begin{table}[ht]
+%   \caption{宋、黑、仿、楷到 \texttt{rm} / \texttt{sf} /
+%     \texttt{tt} 的映照}
+%   \label{tab:cjk-font}
+%   \centering
+%   \begin{tabular}{ccccc}
+%     \toprule
+%        & Normal & Bold & Italic & Bold-italic \\
+%     \midrule
+%       |rm| & 宋体 & [粗宋] /  \textsf{黑体}  & \textit{楷体} & (\textit{粗楷}) \\
+%       |sf| & \textsf{黑体} & (\textsf{粗黑}) & \textsf{黑体} &  \textsf{黑体}  \\
+%       |tt| & \texttt{仿体} & (\texttt{粗仿}) & \textit{楷体} & (\textit{粗楷}) \\
+%     \bottomrule
+%   \end{tabular}
+% \end{table}
+%    \begin{macrocode}
+%<*class>
+\cs_new_protected:Npn \@@_set_cjk_font:
+  {
+    \clist_map_inline:nn { rm, sf, tt, kai }
+      {
+        \use:c { @@_parse_cjk_ ##1 _font: }
+        \@@_check_cjk_font:n   {##1}
+        \@@_set_cjk_font_aux:n {##1}
+      }
+%    \end{macrocode}
+% 清除冗余键值对。
+%    \begin{macrocode}
+    \clist_map_inline:nn { song, hei, fang }
+      {
+        \prop_gremove:Nn \g_@@_cjk_font_name_prop    {##1}
+        \prop_gremove:Nn \g_@@_cjk_font_options_prop {##1}
+      }
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{variable}{\l_@@_font_name_tl,\l_@@_font_options_clist}
+% 临时存放字体名称和选项。
+%    \begin{macrocode}
+\tl_new:N    \l_@@_font_name_tl
+\clist_new:N \l_@@_font_options_clist
+%    \end{macrocode}
+% \end{variable}
+%
+% \begin{macro}{\@@_parse_cjk_rm_font:}
+% 解析 |rm| 字体族。未设置 |rm| 字体族(即未调用 \cs{setmainfont})
+% 时,传入 |song| 对应的字体名和选项。|sf| 和 |tt| 字体族的解析
+% 基本类似。
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_parse_cjk_rm_font:
+  {
+    \prop_get:NnNF \g_@@_cjk_font_name_prop
+      { rm } \l_@@_font_name_tl
+      {
+        \@@_get_cjk_font_name_options:nn { rm } { song }
+%    \end{macrocode}
+% 根据 \opt{粗宋/黑} 选项来进行操作。目前暂未定义该选项,利用
+% \cs{use_ii:nn} 充当条件判断。使用黑体。
+%    \begin{macrocode}
+        \use_ii:nn
+          {
+%    \end{macrocode}
+% 粗宋。判断是否定义 \opt{BoldFont},若未定义,则设置 \opt{BoldFont}
+% 为普通宋体。
+%    \begin{macrocode}
+            \tl_if_in:NnF \l_@@_font_options_clist { BoldFont = }
+              {
+                \clist_put_right:Nx \l_@@_font_options_clist
+                  { BoldFont = \l_@@_font_name_tl }
+              }
+          }
+          {
+%    \end{macrocode}
+% 黑体。注意右侧选项会覆盖左侧选项。\\
+%    \begin{macrocode}
+% TODO: (2017/09/18) `hei` or `sans`?
+            \prop_get:NnN \g_@@_cjk_font_name_prop { hei }
+              \l_@@_tmpa_tl
+            \clist_put_right:Nx \l_@@_font_options_clist
+              { BoldFont = \l_@@_tmpa_tl }
+          }
+        \@@_get_cjk_kai_font:
+        \@@_set_cjk_font_options:n { rm }
+      }
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_parse_cjk_sf_font:}
+% 解析 |sf| 字体族。未设置 |sf| 字体族(即未调用 \cs{setsansfont})
+% 时,传入 |hei| 对应的字体名和选项。
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_parse_cjk_sf_font:
+  {
+    \prop_get:NnNF \g_@@_cjk_font_name_prop
+      { sf } \l_@@_font_name_tl
+      {
+        \@@_get_cjk_font_name_options:nn { sf } { hei }
+%    \end{macrocode}
+% 黑体的 \opt{BoldFont}、\opt{ItalicFont}、\opt{BoldItalicFont}
+% 都使用普通字体。不需要载入楷体。
+%    \begin{macrocode}
+        \clist_put_right:Nx \l_@@_font_options_clist
+          {
+            BoldFont       = \l_@@_font_name_tl,
+            ItalicFont     = \l_@@_font_name_tl,
+            BoldItalicFont = \l_@@_font_name_tl
+          }
+        \@@_set_cjk_font_options:n { sf }
+      }
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_parse_cjk_tt_font:}
+% 解析 |tt| 字体族。未设置 |tt| 字体族(即未调用 \cs{setmonofont})
+% 时,传入 |fang| 对应的字体名和选项。
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_parse_cjk_tt_font:
+  {
+    \prop_get:NnNF \g_@@_cjk_font_name_prop
+      { tt } \l_@@_font_name_tl
+      {
+        \@@_get_cjk_font_name_options:nn { tt } { fang }
+        \clist_put_right:Nx \l_@@_font_options_clist
+          { BoldFont = \l_@@_font_name_tl }
+        \@@_get_cjk_kai_font:
+        \@@_set_cjk_font_options:n { tt }
+      }
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_parse_cjk_kai_font:}
+% 解析 |kai| 字体族。
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_parse_cjk_kai_font:
+  {
+    \prop_get:NnN \g_@@_cjk_font_name_prop { kai }
+      \l_@@_font_name_tl
+%    \end{macrocode}
+% 与黑体类似,楷体的 \opt{BoldFont}、\opt{ItalicFont}、
+% \opt{BoldItalicFont} 也都使用普通字体。
+%    \begin{macrocode}
+    \clist_set:Nx \l_@@_font_options_clist
+      {
+        BoldFont       = \l_@@_font_name_tl,
+        ItalicFont     = \l_@@_font_name_tl,
+        BoldItalicFont = \l_@@_font_name_tl
+      }
+    \@@_set_cjk_font_options:n { kai }
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_get_cjk_font_name_options:nn}
+% 处理字体名称和选项。字体名存入 \cs{l_@@_font_name_tl},字体
+% 选项存入 \cs{l_@@_font_options_clist}。注意字体名还被存入了
+% |prop-list| 中(对应的 \meta{key} = |#1|),但选项则在
+% |\__fdu_parse_cjk_..._font:| 的最后才会被存入 |prop-list| 中。
+% 因此还需要有 \cs{@@_set_cjk_font_options:n} 来设置选项。
+% \begin{arguments}
+%   \item |rm| / |sf| / |tt|
+%   \item |song| / |hei| / |fang|
+% \end{arguments}
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_get_cjk_font_name_options:nn #1#2
+  {
+    \prop_get:NnN  \g_@@_cjk_font_name_prop    {#2} \l_@@_font_name_tl
+    \prop_gput:NnV \g_@@_cjk_font_name_prop    {#1} \l_@@_font_name_tl
+    \prop_get:NnN  \g_@@_cjk_font_options_prop {#2} \l_@@_tmpa_tl
+    \clist_set:NV  \l_@@_font_options_clist \l_@@_tmpa_tl
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_get_cjk_kai_font:}
+% 补齐斜体、粗斜体(都设置为楷体)。
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_get_cjk_kai_font:
+  {
+    \prop_get:NnN \g_@@_cjk_font_name_prop { kai }
+      \l_@@_tmpa_tl
+    \clist_put_right:Nx \l_@@_font_options_clist
+      {
+        ItalicFont     = \l_@@_tmpa_tl,
+        BoldItalicFont = \l_@@_tmpa_tl
+      }
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_set_cjk_font_options:n}
+%    \begin{macrocode}
+% 设置选项,即把选项存入 |prop-list|,对应 \meta{key} = |#1|。
+% |#1| = |rm| / |sf| / |tt|。
+\cs_new_protected:Npn \@@_set_cjk_font_options:n #1
+  {
+    \prop_put:NnV \g_@@_cjk_font_options_prop {#1}
+      \l_@@_font_options_clist
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_check_cjk_font:n}
+% 检查 CJK 字体族是否已定义。
+% |#1| = |rm| / |sf| / |tt|。
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_check_cjk_font:n #1
+  {
+    \prop_get:NnN \g_@@_cjk_font_name_prop {#1}
+      \l_@@_font_name_tl
+    \tl_if_empty:NT \l_@@_font_name_tl
+      { \@@_error:nn { cjk-font-not-defined } {#1} }
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\xeCJK_set_family:nVV,\ctex_ltj_set_family:nVV}
+% 生成 \pkg{xeCJK} 和 \pkg{ctex} 中字体族设定函数的变体。
+% 由于 \cs{@@_set_cjk_font_aux:nnnn} 使用了
+% \cs{cs_new_protected:Npx} 定义,因此必须在它之前给出变体形式。
+%    \begin{macrocode}
+\cs_generate_variant:Nn \xeCJK_set_family:nnn    { nVV }
+\cs_generate_variant:Nn \ctex_ltj_set_family:nnn { nVV }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_set_cjk_font_aux:n}
+% 利用 \pkg{xeCJK} 或 \pkg{ctex-ltj} 调用字体,需按照引擎的不同
+% 分别处理。使用 |Npx| 型来定义是为了在定义时直接确定引擎,以避开
+% 调用时的判断。
+% |#1| = |rm| / |sf| / |tt|。
+%    \begin{macrocode}
+\cs_new_protected:Npx \@@_set_cjk_font_aux:n #1
+  {
+    \prop_get:NnN \exp_not:N \g_@@_cjk_font_name_prop    {#1}
+      \exp_not:N \l_@@_tmpa_tl
+    \prop_get:NnN \exp_not:N \g_@@_cjk_font_options_prop {#1}
+      \exp_not:N \l_@@_tmpb_tl
+    \sys_if_engine_xetex:TF
+      { \xeCJK_set_family:nVV }
+      { \sys_if_engine_luatex:T { \ctex_ltj_set_family:nVV } }
+    {#1} \exp_not:n { \l_@@_tmpb_tl \l_@@_tmpa_tl }
+  }
+%</class>
+%    \end{macrocode}
+% \end{macro}
+%
+% 字体族未定义信息。
+%    \begin{macrocode}
+\@@_msg_new:nn { font-not-defined }
+  {
+    \str_upper_case:f { \tl_head:n {#1} } \tl_tail:n {#1} ~
+    font~ is~ not~ defined. \\\\
+    You~ can~ set~ option~ "font"~ via~ "\string\fdusetup",~
+    or~ use~ command~ \\
+    "\string\set #1 font"~ to~ define~ new~ font~ families.
+  }
+%<*class>
+\@@_msg_new:nn { cjk-font-not-defined }
+  {
+    CJK~ font~ family~ "#1"~ is~ not~ defined. \\\\
+    You~ can~ set~ option~ "cjk-font"~ via~ "\string\fdusetup",~
+    or~ use~ commands~ \\
+    "\string\setCJKmainfont",~ "\string\setCJKsansfont"~ or~
+    "\string\setCJKmonofont",~ etc~ \\
+    to~ define~ new~ CJK~ font~ families.
+  }
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+\sys_if_engine_xetex:T
+  {
+%    \end{macrocode}
+% 这里给这两个 |prop-list| 变量赋一个空值,使得 \pkg{xeCJK} 认为
+% |rm| 字体族已定义,从而避免警告。\LuaTeX{} 引擎下,
+% \pkg{ctex-ltj} 不会给出警告,暂且不管。
+%    \begin{macrocode}
+    \prop_gput:Nnn \g__xeCJK_family_font_name_prop { rm } { }
+    \prop_gput:Nnn \g__xeCJK_family_name_prop      { rm } { }
+%    \end{macrocode}
+% 关闭 \pkg{xeCJK} 中重定义字体族的警告。
+%    \begin{macrocode}
+    \msg_redirect_name:nnn { xeCJK } { CJKfamily-redef } { none }
+  }
+%</class>
+%    \end{macrocode}
+%
+% 在导言区末尾载入字体。
+%    \begin{macrocode}
+\ctex_at_end_preamble:n
+  {
+    \@@_set_font:
+%<class>    \@@_set_cjk_font:
+  }
+%    \end{macrocode}
+%
+% \subsubsection{字体切换(楷体)}
+%
+% 一般情况下,楷体被用作中文斜体。但有时需要保持西文部分不被倾斜,
+% 因此需要额外定义楷体切换命令。
+%
+% \begin{macro}[TF]{\fdu_family_if_exist:n}
+% \changes{v0.4}{2017/08/10}{修复 \LuaTeX{} 下的展开错误。}
+% 判断字体族是否存在。
+% \XeTeX{} 引擎下直接利用 \pkg{xeCJK} 宏包提供的函数。
+%    \begin{macrocode}
+%<*class>
+\sys_if_engine_xetex:TF
+  {
+    \prg_new_protected_conditional:Npnn
+      \fdu_family_if_exist:n #1 { TF }
+      {
+        \xeCJK_family_if_exist:nTF {#1}
+          { \prg_return_true: } { \prg_return_false: }
+      }
+  }
+  {
+%    \end{macrocode}
+% \LuaTeX{} 引擎下需要利用 \pkg{ctex} 宏包提供的函数。这两个函数
+% 的参数略有不同。
+%    \begin{macrocode}
+    \sys_if_engine_luatex:T
+      {
+        \prg_new_protected_conditional:Npnn
+          \fdu_family_if_exist:n #1 { TF }
+          {
+            \ctex_ltj_family_if_exist:nNTF {#1} \l_@@_tmpa_tl
+              { \prg_return_true: } { \prg_return_false: }
+          }
+      }
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\fdu_cjk_font_kai:}
+% 楷体切换命令。
+%    \begin{macrocode}
+\cs_new_protected:Npx \fdu_cjk_font_kai:
+  {
+    \fdu_family_if_exist:nTF { kai }
+      {
+        \sys_if_engine_xetex:TF
+          { \xeCJK_switch_family:n { kai } }
+          {
+            \sys_if_engine_luatex:T
+              { \ctex_ltj_switch_family:n { kai } }
+          }
+      }
+      { \exp_not:n { \rmfamily \itshape } }
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[int]{\fdu at kai}
+% 命令 \cs{fdu_cjk_font_kai:} 采用 \LaTeX3 风格,在 \file{.toc}
+% 文件里无法正常使用,因此重新定义为 \LaTeXe{} 风格的命令。
+%    \begin{macrocode}
+\cs_new_eq:NN \fdu at kai \fdu_cjk_font_kai:
+%</class>
+%    \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{数学字体设置}
+%
+% 根据 GB 3102.11--93 以及 ISO 80000-2:2009 的规定,数学表达式中
+% 表示变量的拉丁字母和希腊字母均应当使用斜体。
+% 这里的 |\keys_set:nn{unicode-math}| 实际相当于 \cs{unimathsetup}。\\
+%    \begin{macrocode}
+% TODO: (2018/01/19) do we need `mathrm=sym`?
+\keys_set:nn { unicode-math }
+  {
+    math-style = ISO,
+    bold-style = ISO,
+%   mathrm     = sym
+  }
+%    \end{macrocode}
+%
+% \subsubsection{字号}
+%
+%    \begin{macrocode}
+\keys_define:nn { fdu / style }
+  {
+%    \end{macrocode}
+%
+% \begin{macro}{style/font-size}
+% |font-size| 不是文档类选项,不能传给 \cls{ctexbook} 文档类,因此
+% 只能手动重定义字号命令。
+%    \begin{macrocode}
+    font-size .choice:,
+    font-size .value_required:n = true,
+    font-size / -4 .code:n = { },
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tiny,\scriptsize,\footnotesize,\small,
+%   \normalsize,\large,\Large,\LARGE,\huge,\Huge}
+% 默认使用小四号字,所以只有五号字需要重新设置。
+%    \begin{macrocode}
+    font-size /  5 .code:n =
+      {
+        \RenewDocumentCommand \tiny         { } { \zihao {  7 } }
+        \RenewDocumentCommand \scriptsize   { } { \zihao { -6 } }
+        \RenewDocumentCommand \footnotesize { } { \zihao {  6 } }
+        \RenewDocumentCommand \small        { } { \zihao { -5 } }
+        \RenewDocumentCommand \normalsize   { } { \zihao {  5 } }
+        \RenewDocumentCommand \large        { } { \zihao { -4 } }
+        \RenewDocumentCommand \Large        { } { \zihao { -3 } }
+        \RenewDocumentCommand \LARGE        { } { \zihao { -2 } }
+        \RenewDocumentCommand \huge         { } { \zihao {  2 } }
+        \RenewDocumentCommand \Huge         { } { \zihao {  1 } }
+%<class-en>      }
+%<class-en>  }
+%<*class>
+      },
+%    \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{句号}
+%
+% \begin{macro}{style/fullwidth-stop}
+% \changes{v0.6}{2017/10/14}{支持类别码和 TECKit 映射两种机制。}
+% 设置句号形状(圆圈或是圆点)。
+%    \begin{macrocode}
+    fullwidth-stop .choice:,
+    fullwidth-stop .value_required:n = true,
+%    \end{macrocode}
+% 利用类别码机制切换,只有显式的\FSID 会被替换。
+%    \begin{macrocode}
+    fullwidth-stop / catcode .code:n =
+      { \@@_set_fullwidth_stop_catcode: },
+%    \end{macrocode}
+% 利用 TECKit 映射机制切换,相当于设置了 \tn{defaultCJKfontfeatures}
+% |{|\kvopt{Map\-ping}{fullwidth-stop}|}|。这种手段会
+% 替换所有出现的\FSID,并且将影响所有字体。只在 \XeTeX{}
+% 下可用。
+%    \begin{macrocode}
+    fullwidth-stop / mapping .code:n =
+      {
+        \sys_if_engine_xetex:TF
+          {
+            \clist_gset:Nn \g__xeCJK_default_features_clist
+              { Mapping = fullwidth-stop }
+          }
+          {
+%    \end{macrocode}
+% \LuaTeX{} 下改用类别码机制代替,并给出警告。
+%    \begin{macrocode}
+            \sys_if_engine_luatex:T
+              {
+                \@@_warning:n { mapping-not-available }
+                \@@_set_fullwidth_stop_catcode:
+              }
+          }
+      },
+    fullwidth-stop / false .code:n = { }
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+% 提示信息。
+%    \begin{macrocode}
+\@@_msg_new:nn { mapping-not-available }
+  {
+    Option~ "fullwidth-stop = mapping"~ is~ not~ available~ in~ LuaTeX. \\
+    "fullwidth-stop = catcode"~ will~ be~ set~ instead.
+  }
+%    \end{macrocode}
+%
+% \begin{macro}{\@@_set_fullwidth_stop_catcode:}
+% 将\FSID 设置为活动符,并定义为句点\FSFW。
+%    \begin{macrocode}
+\cs_new:Npn \@@_set_fullwidth_stop_catcode:
+  {
+    \char_set_active_eq:nN { "3002 } \c_@@_fullwidth_full_stop_tl
+    \char_set_catcode_active:n { "3002 }
+  }
+%</class>
+%    \end{macrocode}
+% \end{macro}
+%
+% \changes{v0.6}{2017/10/28}{优化 \LuaTeX{} 下希腊字母、西里尔字母
+%   和带圈数字的显示(\pkg{ctex} v2.4.11 已默认进行处理)。}
+%
+% \subsection{章节标题结构}
+%
+% |\keys_set:nn{ctex}| 实际相当于 \cs{ctexset}。
+%    \begin{macrocode}
+\keys_set:nn { ctex }
+  {
+%    \end{macrocode}
+%
+% 设置章(chapter)、节(section)与小节(sub-section)标题样式。
+% 此处使用 \kvopt{fixskip}{true} 选项来抑制前后的多余间距。
+%    \begin{macrocode}
+    chapter =
+      {
+%<class>        format      = \huge \normalfont \sffamily \centering,
+%<*class-en>
+        format      = \centering,
+        nameformat  = \LARGE \bfseries,
+        titleformat = \huge \bfseries,
+        aftername   = \par \nobreak \vskip 10 pt,
+%</class-en>
+        beforeskip  = 50 pt,
+        afterskip   = 40 pt,
+        number      = \@@_arabic:n { chapter },
+        fixskip     = true
+      },
+    section =
+      {
+%<class>        format      = \Large \normalfont \sffamily \raggedright,
+%<class-en>        format      = \Large \bfseries \raggedright,
+        beforeskip  = 3.5 ex plus 1.0 ex minus 0.2 ex,
+        afterskip   = 2.7 ex plus 0.5 ex,
+        fixskip     = true
+      },
+    subsection =
+      {
+%<class>        format      = \large \normalfont \sffamily \raggedright,
+%<class-en>        format      = \large \bfseries \raggedright,
+        beforeskip  = 3.25 ex plus 1.0 ex minus 0.2 ex,
+        afterskip   = 2.5  ex plus 0.3 ex,
+        fixskip     = true
+      }
+  }
+%    \end{macrocode}
+%
+% \subsection{页眉页脚}
+%
+% 清除默认页眉页脚格式。
+%    \begin{macrocode}
+\fancyhf { }
+%    \end{macrocode}
+%
+% \begin{variable}{\l_@@_header_center_mark_tl}
+% 保存中间页眉的文字。正文中设置为空,目录、摘要、符号表等设置为
+% 相应标题。
+%    \begin{macrocode}
+\tl_new:N \l_@@_header_center_mark_tl
+%    \end{macrocode}
+% \end{variable}
+%
+% 构建页眉,要在单面或双面下分别设置。
+%
+% \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
+%<*class>
+  {
+    \fancyhead [ EL ] { \small \nouppercase { \fdu at kai \leftmark  } }
+    \fancyhead [ OR ] { \small \nouppercase { \fdu at kai \rightmark } }
+  }
+  {
+    \fancyhead [ L ] { \small \nouppercase { \fdu at kai \leftmark  } }
+    \fancyhead [ R ] { \small \nouppercase { \fdu at kai \rightmark } }
+    \fancyhead [ C ]
+      {
+        \small \nouppercase
+          { \fdu at kai \l_@@_header_center_mark_tl }
+      }
+  }
+%</class>
+%<*class-en>
+  {
+    \fancyhead [ EL ] { \small \nouppercase { \itshape \leftmark  } }
+    \fancyhead [ OR ] { \small \nouppercase { \itshape \rightmark } }
+  }
+  {
+    \fancyhead [ L ] { \small \nouppercase { \itshape \leftmark  } }
+    \fancyhead [ R ] { \small \nouppercase { \itshape \rightmark } }
+    \fancyhead [ C ]
+      {
+        \small \nouppercase
+          { \itshape \l_@@_header_center_mark_tl }
+      }
+  }
+%</class-en>
+%    \end{macrocode}
+%
+% 构建页脚,用来显示页码。选项 \opt{C} 表示居中(center)。
+%    \begin{macrocode}
+\fancyfoot [ C ] { \small \thepage }
+%    \end{macrocode}
+%
+% 关闭横线显示(未启用)。
+%    \begin{macrocode}
+% \RenewDocumentCommand \headrulewidth { } { 0 pt }
+%    \end{macrocode}
+%
+% \begin{macro}{\fdu_front_matter_header:n}
+% 在单页模式下,设置前导部分(包括目录、摘要、符号表等)的页眉中间
+% 为相应标题,左右为空。
+%    \begin{macrocode}
+\cs_new:Npn \fdu_front_matter_header:n #1
+  {
+    \bool_if:NTF \g_@@_twoside_bool
+      { \markboth {#1} {#1} }
+      {
+        \markboth { } { }
+        \tl_gset:Nn \l_@@_header_center_mark_tl {#1}
+      }
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\cleardoublepage}
+% 重定义 \tn{cleardoublepage},使得偶数页面在没有内容时也不显示
+% 页眉页脚。\\
+% 见 http://tex.stackexchange.com/q/1681 \\
+% 最后清空中间页眉,确保正文部分页眉显示正确。
+%    \begin{macrocode}
+\RenewDocumentCommand \cleardoublepage { }
+  {
+    \clearpage
+    \bool_if:NT \g_@@_twoside_bool
+      {
+        \int_if_odd:nF \c at page
+          { \hbox:n { } \thispagestyle { empty } \newpage }
+      }
+    \tl_gset:Nn \l_@@_header_center_mark_tl { }
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+% \pkg{ctex} 宏包使用 \opt{heading} 选项后,会把页面格式设置为
+% |headings|。因此必须在 \pkg{ctex} 调用之后重新设置 \cs{pagestyle}
+% 为 |fancy|。
+%    \begin{macrocode}
+\pagestyle { fancy }
+%    \end{macrocode}
+%
+% \subsection{脚注}
+%
+% \changes{v0.3}{2017/02/21}{支持脚注。}
+%
+% \subsubsection{编号样式}
+%
+% 各种脚注编号样式的名称。
+%    \begin{macrocode}
+\clist_map_inline:nn
+  {
+    { plain           } { plain           },
+    { libertinus      } { libertinus      },
+    { libertinus_neg  } { libertinus*     },
+    { libertinus_sans } { libertinus-sans },
+    { pifont          } { pifont          },
+    { pifont_neg      } { pifont*         },
+    { pifont_sans     } { pifont-sans     },
+    { pifont_sans_neg } { pifont-sans*    },
+    { xits            } { xits            },
+    { xits_sans       } { xits-sans       },
+    { xits_sans_neg   } { xits-sans*      }
+  }
+  { \@@_define_fn_style:nn #1 }
+%    \end{macrocode}
+%
+% \begin{variable}{\l_@@_fn_style_tl}
+% 保存当前使用的脚注编号样式。
+%    \begin{macrocode}
+\tl_new:N \l_@@_fn_style_tl
+%    \end{macrocode}
+% \end{variable}
+%
+%    \begin{macrocode}
+\keys_define:nn { fdu / style }
+  {
+%    \end{macrocode}
+%
+% \begin{macro}{style/footnote-style}
+% 脚注类型共分四大类:
+% \begin{itemize}
+%   \item \opt{plain}:使用当前字体;
+%   \item \opt{libertinus}:取自 Libertinus Serif 和 Libertinus Sans
+%     字体;
+%   \item \opt{pifont}:使用 \pkg{pifont} 宏包;
+%   \item \opt{xits}:取自 XITS 字体。
+% \end{itemize}
+% 不带任何修饰的为衬线阳文符号,带“|sans|”的为无衬线符号,带“|*|”的
+% 为阴文版本。
+%    \begin{macrocode}
+    footnote-style .choices:nn =
+      {
+        plain,
+        libertinus, libertinus*, libertinus-sans,
+        pifont,     pifont*,     pifont-sans,     pifont-sans*,
+        xits,                    xits-sans,       xits-sans*
+      }
+%    \end{macrocode}
+% \changes{v0.6}{2017/11/12}{不再依赖 XITS-Math 字体。}
+% 若使用 \opt{pifont} 类型,则需引入 \pkg{pifont} 宏包。
+%    \begin{macrocode}
+      {
+        \tl_gset_eq:NN \l_@@_fn_style_tl \l_keys_choice_tl
+        \int_compare:nT { 5 <= \l_keys_choice_int <= 8 }
+          { \RequirePackage { pifont } }
+      },
+    footnote-style .value_required:n = true
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_fn_symbol_libertinus:n}
+% \opt{libertinus} 普通版。\numrange{1}{20} 为数字,\numrange{21}{46}
+% 为小写英文字母,\numrange{47}{72} 为大写英文字母。
+%    \begin{macrocode}
+\cs_new:Npn \@@_fn_symbol_libertinus:n #1
+  {
+    \int_compare:nTF { #1 >= 21 }
+      {
+        \int_compare:nTF { #1 >= 47 }
+          { \@@_symbol:n { \int_eval:n { "24B6 - 47 + #1 } } }
+          { \@@_symbol:n { \int_eval:n { "24D0 - 21 + #1 } } }
+      }
+      { \@@_symbol:n { \int_eval:n { "2460 - 1 + #1 } } }
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_fn_symbol_libertinus_neg:n}
+% \opt{libertinus} 阴文衬线版。只含 \numrange{1}{20}。
+%    \begin{macrocode}
+\cs_new:Npn \@@_fn_symbol_libertinus_neg:n #1
+  {
+    \int_compare:nTF { #1 >= 11 }
+      { \@@_symbol:n { \int_eval:n { "24EB - 11 + #1 } } }
+      { \@@_symbol:n { \int_eval:n { "2776 -  1 + #1 } } }
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_fn_symbol_libertinus_sans:n}
+% \opt{libertinus} 阳文无衬线版。符号排列与普通版相同。
+%    \begin{macrocode}
+\cs_new_eq:NN \@@_fn_symbol_libertinus_sans:n
+  \@@_fn_symbol_libertinus:n
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_fn_symbol_pifont:n}
+% \opt{pifont} 普通版。以下四种都只包含 \numrange{1}{10}。
+%    \begin{macrocode}
+\cs_new:Npn \@@_fn_symbol_pifont:n #1
+  { \ding { \int_eval:n { 171 + #1 } } }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_fn_symbol_pifont_neg:n}
+% \opt{pifont} 阴文衬线版。
+%    \begin{macrocode}
+\cs_new:Npn \@@_fn_symbol_pifont_neg:n #1
+  { \ding { \int_eval:n { 181 + #1 } } }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_fn_symbol_pifont_sans:n}
+% \opt{pifont} 阳文无衬线版。
+%    \begin{macrocode}
+\cs_new:Npn \@@_fn_symbol_pifont_sans:n #1
+  { \ding { \int_eval:n { 191 + #1 } } }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_fn_symbol_pifont_sans_neg:n}
+% \opt{pifont} 阴文无衬线版。
+%    \begin{macrocode}
+\cs_new:Npn \@@_fn_symbol_pifont_sans_neg:n #1
+  { \ding { \int_eval:n { 201 + #1 } } }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_fn_symbol_xits:n}
+% \opt{xits} 普通版。\numrange{1}{9} 为数字,\numrange{10}{35}
+% 为小写英文字母,\numrange{36}{61} 为大写英文字母。
+%    \begin{macrocode}
+\cs_new:Npn \@@_fn_symbol_xits:n #1
+  {
+    \int_compare:nTF { #1 >= 10 }
+      {
+        \int_compare:nTF { #1 >= 36 }
+          { \@@_symbol:n { \int_eval:n { "24B6 - 36 + #1 } } }
+          { \@@_symbol:n { \int_eval:n { "24D0 - 10 + #1 } } }
+      }
+      { \@@_symbol:n { \int_eval:n { "2460 - 1 + #1 } } }
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_fn_symbol_xits_sans:n}
+% \opt{xits} 阳文无衬线版。只包含 \numrange{1}{10}。
+%    \begin{macrocode}
+\cs_new:Npn \@@_fn_symbol_xits_sans:n #1
+  { \@@_symbol:n { \int_eval:n { "2780 - 1 + #1 } } }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_fn_symbol_xits_sans_neg:n}
+% \opt{xits} 阴文无衬线版。也只包含 \numrange{1}{10}。
+%    \begin{macrocode}
+\cs_new:Npn \@@_fn_symbol_xits_sans_neg:n #1
+  { \@@_symbol:n { \int_eval:n { "278A - 1 + #1 } } }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\thefootnote}
+% \changes{v0.7}{2018/01/17}{改为可完全展开的命令。}
+% 重定义脚注编号。
+%    \begin{macrocode}
+\cs_set:Npn \thefootnote { \fdu_footnote_number:N \c at footnote }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\fdu_footnote_number:N}
+% 脚注编号样式。
+%    \begin{macrocode}
+\cs_new:Npn \fdu_footnote_number:N #1
+  {
+    \tl_case:NnF \l_@@_fn_style_tl
+      {
+%    \end{macrocode}
+% \opt{plain} 类型直接使用计数器 |footnote| 的值。
+%    \begin{macrocode}
+        \c_@@_fn_style_plain_tl
+          { \int_use:N #1 }
+%    \end{macrocode}
+% \opt{libertinus} 类型需要使用 Libertinus Serif 或
+% Libertinus Sans 字体。
+%    \begin{macrocode}
+        \c_@@_fn_style_libertinus_tl
+          {
+            \fontspec { Libertinus~ Serif }
+            \@@_fn_symbol_libertinus:n {#1}
+          }
+        \c_@@_fn_style_libertinus_neg_tl
+          {
+            \fontspec { Libertinus~ Serif }
+            \@@_fn_symbol_libertinus_neg:n {#1}
+          }
+        \c_@@_fn_style_libertinus_sans_tl
+          {
+            \fontspec { Libertinus~ Sans }
+            \@@_fn_symbol_libertinus_sans:n {#1}
+          }
+%    \end{macrocode}
+% \opt{pifont} 类型无需进行额外的操作。
+%    \begin{macrocode}
+        \c_@@_fn_style_pifont_tl
+          { \@@_fn_symbol_pifont:n {#1} }
+        \c_@@_fn_style_pifont_neg_tl
+          { \@@_fn_symbol_pifont_neg:n {#1} }
+        \c_@@_fn_style_pifont_sans_tl
+          { \@@_fn_symbol_pifont_sans:n {#1} }
+        \c_@@_fn_style_pifont_sans_neg_tl
+          { \@@_fn_symbol_pifont_sans_neg:n {#1} }
+%    \end{macrocode}
+% \opt{xits} 类型需要临时切换数学字体。
+%    \begin{macrocode}
+        \c_@@_fn_style_xits_tl
+          {
+            \fontspec { XITS }
+            \@@_fn_symbol_xits:n {#1}
+          }
+        \c_@@_fn_style_xits_sans_tl
+          {
+            \fontspec { XITS }
+            \@@_fn_symbol_xits_sans:n {#1}
+          }
+        \c_@@_fn_style_xits_sans_neg_tl
+          {
+            \fontspec { XITS }
+            \@@_fn_symbol_xits_sans_neg:n {#1}
+          }
+      }
+%    \end{macrocode}
+% 变量 \cs{l_@@_fn_style_tl} 保存的类型未知时,默认使用 \opt{plain}
+% 类型。
+%    \begin{macrocode}
+      { \int_use:N #1 }
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{整体样式}
+%
+% \begin{macro}[int]{\@makefntext}
+% \changes{v0.7}{2018/01/18}{简化实现,兼容 \pkg{fancyvrb} 宏包。
+%   不再使用悬挂缩进。}
+% 重定义内部脚注文字命令,使脚注编号不使用上标,宽度为 \SI{1.5}{em}。
+% 见 \url{http://tex.stackexchange.com/q/19844} 和
+% \url{https://www.zhihu.com/question/53030087}。
+%    \begin{macrocode}
+\cs_set:Npn \@makefntext #1
+  {
+    \mode_leave_vertical:
+    \hbox_to_wd:nn { 1.5 em } { \@thefnmark \hfil }
+    #1
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+% \subsection{定理环境}
+%
+% \changes{v0.3}{2017/05/07}{新增定理环境。}
+%
+% \begin{variable}{\c_@@_thm_style_plain_clist,
+%   \c_@@_thm_style_break_clist}
+% 保存 \opt{plain}、\opt{break} 两种类型的定理样式名称。
+%    \begin{macrocode}
+\clist_const:Nn \c_@@_thm_style_plain_clist
+  { plain, margin, change }
+\clist_const:Nn \c_@@_thm_style_break_clist
+  { break, marginbreak, changebreak }
+%    \end{macrocode}
+% \end{variable}
+%
+% \begin{variable}{\l_@@_thm_style_tl,
+%   \l_@@_thm_header_font_tl,
+%   \l_@@_thm_body_font_tl,
+%   \l_@@_thm_qed_tl,
+%   \l_@@_thm_counter_tl}
+% 定理所需的一些字段。
+%    \begin{macrocode}
+\tl_new:N \l_@@_thm_style_tl
+\tl_new:N \l_@@_thm_header_font_tl
+\tl_new:N \l_@@_thm_body_font_tl
+\tl_new:N \l_@@_thm_qed_tl
+\tl_new:N \l_@@_thm_counter_tl
+%    \end{macrocode}
+% \end{variable}
+%
+% \begin{macro}{theorem/style,
+%   theorem/header-font,
+%   theorem/body-font,
+%   theorem/qed,
+%   theorem/counter}
+% 定义 |fdu/theorem| 键值类。
+%    \begin{macrocode}
+\keys_define:nn { fdu / theorem }
+  {
+    style       .tl_set:N  = \l_@@_thm_style_tl,
+    header-font .tl_set:N  = \l_@@_thm_header_font_tl,
+    body-font   .tl_set:N  = \l_@@_thm_body_font_tl,
+    qed         .tl_set:N  = \l_@@_thm_qed_tl,
+    counter     .tl_set:N  = \l_@@_thm_counter_tl
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_thm_ntheorem_style:n,\@@_thm_ntheorem_new:w}
+% 拷贝 \pkg{ntheorem} 命令。
+%    \begin{macrocode}
+\cs_new_eq:NN \@@_thm_ntheorem_style:n \theoremstyle
+\cs_new_eq:NN \@@_thm_ntheorem_new:w   \newtheorem
+%    \end{macrocode}
+% \end{macro}
+%
+% \changes{v0.7}{2017/12/12}{原 \cs{fdunewtheorem} 命令更名为
+%   \cs{new\-the\-orem}。}
+%
+% \begin{macro}{\newtheorem}
+% 定义新的定理环境。
+%    \begin{macrocode}
+\RenewDocumentCommand \newtheorem { s o m m }
+  {
+%    \end{macrocode}
+% 默认情况下,由 \cs{newtheorem*} 创建的定理其证毕符号为 \cs{QED},
+% 而由 \cs{new\-the\-orem} 创建的则不带证毕符号。符号 \cs{QED} 由
+% \pkg{unicode-math} 宏包提供。
+%    \begin{macrocode}
+    \IfBooleanTF {#1}
+      { \tl_set:Nn \l_@@_thm_qed_tl { \ensuremath { \QED } } }
+      { \tl_set:Nn \l_@@_thm_qed_tl { } }
+%    \end{macrocode}
+% 设置默认样式为 \opt{plain}。
+%    \begin{macrocode}
+% TODO: (2017/12/07) move to interface
+    \tl_set:Nn \l_@@_thm_style_tl { plain }
+%    \end{macrocode}
+% 处理可选参数。利用 |fdu/theorem| 键值对设置,并按此修改证毕符号、
+% 定理头字体和定理正文字体。
+%    \begin{macrocode}
+    \IfValueT {#2} { \keys_set:nn { fdu / theorem } {#2} }
+    \fdu_thm_set_header_font:V \l_@@_thm_header_font_tl
+    \fdu_thm_set_body_font:V   \l_@@_thm_body_font_tl
+    \fdu_thm_set_qed:V         \l_@@_thm_qed_tl
+%    \end{macrocode}
+% \cs{newtheorem} 负责创建编号定理,而 \cs{newtheorem*}
+% 则负责创建无编号定理。以下分这两种情况处理。
+%    \begin{macrocode}
+    \IfBooleanTF {#1}
+      {
+%    \end{macrocode}
+% 带 |*| 的版本原则上只接受 \opt{plain} 和 \opt{break} 两种样式,
+% 其余样式将被转换成这两者其中之一。
+%    \begin{macrocode}
+        \clist_if_in:nVF { plain, break } \l_@@_thm_style_tl
+          {
+            \clist_if_in:NVTF
+              \c_@@_thm_style_plain_clist \l_@@_thm_style_tl
+              { \@@_thm_redefine_style:n { plain } }
+              {
+                \clist_if_in:NVTF
+                  \c_@@_thm_style_break_clist \l_@@_thm_style_tl
+                  { \@@_thm_redefine_style:n { break } }
+                  {
+                    \@@_error:nx { unknown-theorem-style }
+                      { \l_@@_thm_style_tl }
+                  }
+              }
+          }
+%    \end{macrocode}
+% \pkg{ntheorem} 宏包提供的无编号定理带有 |nonumber| 前缀,
+% 这里将其加上。
+%    \begin{macrocode}
+        \tl_put_left:Nn \l_@@_thm_style_tl { nonumber }
+        \fdu_thm_new_no_number:Vxx \l_@@_thm_style_tl {#3} {#4}
+      }
+      {
+%    \end{macrocode}
+% 不带 |*| 的版本支持不含“|nonumber|”的所有定理样式。
+%    \begin{macrocode}
+        \clist_clear:N \l_@@_tmpa_clist
+        \clist_concat:NNN \l_@@_tmpa_clist
+          \c_@@_thm_style_plain_clist \c_@@_thm_style_break_clist
+        \clist_if_in:NVF \l_@@_tmpa_clist \l_@@_thm_style_tl
+          {
+            \@@_error:nx { unknown-theorem-style }
+              { \l_@@_thm_style_tl }
+          }
+        \fdu_thm_new:VVxx \l_@@_thm_style_tl \l_@@_thm_counter_tl
+          {#3} {#4}
+      }
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_thm_redefine_style:n}
+% 重定义定理样式,并给出警告。
+%    \begin{macrocode}
+\cs_new:Npn \@@_thm_redefine_style:n #1
+  {
+    \@@_warning:nxx { redefine-theorem-style }
+      {#1} { \l_@@_thm_style_tl }
+    \tl_set:Nn \l_@@_thm_style_tl {#1}
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+% 提示信息。
+%    \begin{macrocode}
+\@@_msg_new:nn { redefine-theorem-style }
+  { Theorem~ style~ "#2"~ will~ be~ redefined~ as~ "#1". }
+\@@_msg_new:nn { unknown-theorem-style }
+  { Theorem~ style~ "#1"~ is~ unknown. }
+%    \end{macrocode}
+%
+% \begin{macro}{\fdu_thm_new:nnnn,\fdu_thm_new:VVxx}
+% 带编号的定理环境。
+% \begin{arguments}
+%   \item 样式
+%   \item 计数器
+%   \item 定理环境名称
+%   \item 定理头文字
+% \end{arguments}
+%    \begin{macrocode}
+\cs_new:Npn \fdu_thm_new:nnnn #1#2#3#4
+  {
+    \@@_thm_ntheorem_style:n {#1}
+    \@@_thm_ntheorem_new:w   {#3} {#4} [#2]
+  }
+\cs_generate_variant:Nn \fdu_thm_new:nnnn { VVxx }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\fdu_thm_new_no_number:nnn,
+%   \fdu_thm_new_no_number:Vxx}
+% 不带编号的定理环境。
+% \begin{arguments}
+%   \item 样式
+%   \item 定理环境名称
+%   \item 定理头文字
+% \end{arguments}
+%    \begin{macrocode}
+\cs_new:Npn \fdu_thm_new_no_number:nnn #1#2#3
+  {
+    \@@_thm_ntheorem_style:n {#1}
+    \@@_thm_ntheorem_new:w   {#2} {#3}
+  }
+\cs_generate_variant:Nn \fdu_thm_new_no_number:nnn { Vxx }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\fdu_thm_set_qed:n,
+%   \fdu_thm_set_header_font:n,
+%   \fdu_thm_set_body_font:n,
+%   \fdu_thm_set_qed:V,
+%   \fdu_thm_set_header_font:V,
+%   \fdu_thm_set_body_font:V}
+% 封装 \pkg{ntheorem} 宏包提供的若干命令,分别用以设置证毕符号、
+% 定理头字体和定理正文字体。
+%    \begin{macrocode}
+\cs_new:Npn \fdu_thm_set_qed:n         #1 { \theoremsymbol     {#1} }
+\cs_new:Npn \fdu_thm_set_header_font:n #1 { \theoremheaderfont {#1} }
+\cs_new:Npn \fdu_thm_set_body_font:n   #1 { \theorembodyfont   {#1} }
+\cs_generate_variant:Nn \fdu_thm_set_qed:n         { V }
+\cs_generate_variant:Nn \fdu_thm_set_header_font:n { V }
+\cs_generate_variant:Nn \fdu_thm_set_body_font:n   { V }
+%    \end{macrocode}
+% \end{macro}
+%
+% \subsection{图表绘制;浮动体}
+%
+% \changes{v0.3}{2017/07/09}{支持浮动体。}
+%
+% 分别设置浮动体 \env{figure} 和 \env{table} 的标题样式。
+%    \begin{macrocode}
+\captionsetup [ figure ]
+  {
+    font     = small,
+    labelsep = quad
+  }
+\captionsetup [ table  ]
+  {
+    font     = { small, sf },
+    labelsep = quad
+  }
+%    \end{macrocode}
+%
+% \begin{macro}{\thefigure,\thetable}
+% \changes{v0.7}{2018/01/17}{改为可完全展开的命令。}
+% 重定义图表编号。
+%    \begin{macrocode}
+\cs_set:Npn \thefigure
+  { \@@_arabic:n { chapter } - \@@_arabic:n { figure } }
+\cs_set:Npn \thetable
+  { \@@_arabic:n { chapter } - \@@_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_instructors_clist,
+%   \l_@@_info_keywords_clist}
+% 封面所需的一些字段。
+%    \begin{macrocode}
+\clist_map_inline:nn
+  {
+    title, date, author, supervisor, department, major, student_id,
+    school_id, clc
+  }
+  { \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_int}
+% 学位类型。1 为学术学位,2 为专业学位。
+%    \begin{macrocode}
+\int_new:N \l_@@_info_degree_type_int
+%    \end{macrocode}
+% \end{variable}
+%
+% 定义 |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 }
+      { \int_set_eq:NN \l_@@_info_degree_type_int \l_keys_choice_int },
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{info/title,info/title*}
+% 论文题目。以下带星号的项目均表示相应的英文字段。
+%    \begin{macrocode}
+    title       .tl_set:N    = \l_@@_info_title_tl,
+    title*      .tl_set:N    = \l_@@_info_title_en_tl,
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{info/date}
+% 论文完成日期。
+%    \begin{macrocode}
+    date        .tl_set:N    = \l_@@_info_date_tl,
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{info/author,info/author*}
+% 作者姓名。
+%    \begin{macrocode}
+    author      .tl_set:N    = \l_@@_info_author_tl,
+    author*     .tl_set:N    = \l_@@_info_author_en_tl,
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{info/supervisor,info/supervisor*}
+% 导师姓名。
+%    \begin{macrocode}
+    supervisor  .tl_set:N    = \l_@@_info_supervisor_tl,
+%   supervisor* .tl_set:N    = \l_@@_info_supervisor_en_tl,
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{info/instructors}
+% 指导小组成员。
+%    \begin{macrocode}
+    instructors .clist_set:N = \l_@@_info_instructors_clist,
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{info/department,info/department*}
+% 院系。
+%    \begin{macrocode}
+    department  .tl_set:N    = \l_@@_info_department_tl,
+%   department* .tl_set:N    = \l_@@_info_department_en_tl,
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{info/major,info/major*}
+% 专业。
+%    \begin{macrocode}
+    major       .tl_set:N    = \l_@@_info_major_tl,
+%   major*      .tl_set:N    = \l_@@_info_major_en_tl,
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{info/student-id}
+% 学号。
+%    \begin{macrocode}
+    student-id  .tl_set:N    = \l_@@_info_student_id_tl,
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{info/school-id}
+% 学校代码。
+%    \begin{macrocode}
+    school-id   .tl_set:N    = \l_@@_info_school_id_tl,
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{info/keywords,info/keywords*}
+% 论文关键字。
+%    \begin{macrocode}
+    keywords    .clist_set:N = \l_@@_info_keywords_clist,
+    keywords*   .clist_set:N = \l_@@_info_keywords_en_clist,
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{info/clc}
+% 中图分类号。
+%    \begin{macrocode}
+    clc         .tl_set:N    = \l_@@_info_clc_tl
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+% \changes{v0.4}{2017/08/10}{新增 \opt{style/logo} 与
+%   \opt{style/logo-size} 选项。}
+%
+% \begin{variable}{\l_@@_cover_logo_tl,\l_@@_cover_logo_size_clist}
+%    \begin{macrocode}
+\tl_new:N    \l_@@_cover_logo_tl
+\clist_new:N \l_@@_cover_logo_size_clist
+%    \end{macrocode}
+% \end{variable}
+%
+% \begin{macro}{style/logo,style/logo-size}
+% 校名图片的文件名和尺寸。
+%    \begin{macrocode}
+\keys_define:nn { fdu / style }
+  {
+    logo      .tl_set:N    = \l_@@_cover_logo_tl,
+    logo-size .clist_set:N = \l_@@_cover_logo_size_clist
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{密级}
+%
+% \changes{v0.3}{2017/07/04}{新增 \opt{info/secret-level} 与
+%   \opt{info/secret-year} 选项。}
+%
+% \begin{variable}{\l_@@_secret_bool}
+% 是否显示密级。
+%    \begin{macrocode}
+\bool_new:N \l_@@_secret_bool
+%    \end{macrocode}
+% \end{variable}
+%
+% \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 }
+      {
+        \int_compare:nTF
+          { \l_keys_choice_int >= 2 }
+          {
+            \bool_set_true:N \l_@@_secret_bool
+            \tl_set:Nn \l_@@_info_secret_level_tl
+              {
+                \clist_item:Nn \c_@@_secret_clist
+                  { \l_keys_choice_int - 1 }
+              }
+          }
+          { \bool_set_false:N \l_@@_secret_bool }
+      },
+    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}
+% 分散对齐的水平盒子。
+% \begin{arguments}
+%   \item 宽度
+%   \item 内容
+% \end{arguments}
+% 利用 \cs{tl_map_inline:nn} 在字符间插入 \tn{hfil};紧随其后的
+% \tn{unskip} 将会去掉最后一个 \tn{hfil}。见
+% \url{http://tex.stackexchange.com/q/169689}。|#2| 需要完全展开以
+% 避免 underfull 警告。
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_spread_box:nn #1#2
+  {
+    \mode_leave_vertical:
+    \hbox_to_wd:nn {#1}
+      { \tl_map_inline:xn {#2} { ##1 \hfil } \unskip }
+  }
+%    \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}{\@@_get_max_text_width:NN}
+% \changes{v0.6}{2017/11/24}{移除不必要的字号设置。}
+% 获取多个文本中的最大宽度,并存入 |dim| 型变量。
+% \begin{arguments}
+%   \item |dim| 型变量
+%   \item 文本 |clist|
+% \end{arguments}
+% 当 \cs{l_@@_tmpa_clist} 非空时,弹出最后一个元素
+% 赋给 \cs{l_@@_tmpa_tl},获取其长度后与 |#1| 进行比较,
+% 二者中较大的那一个将成为 |#1| 的新值。
+% 不断循环,直至 \cs{l_@@_tmpa_clist} 为空。
+%    \begin{macrocode}
+\cs_new:Npn \@@_get_max_text_width:NN #1#2
+  {
+%    \end{macrocode}
+% 这里用 |group| 确保局部变量不会被污染。
+%    \begin{macrocode}
+    \group_begin:
+      \clist_set_eq:NN \l_@@_tmpa_clist #2
+      \bool_until_do:nn { \clist_if_empty_p:N \l_@@_tmpa_clist }
+        {
+          \clist_pop:NN \l_@@_tmpa_clist \l_@@_tmpa_tl
+          \@@_get_text_width:NV \l_@@_tmpa_dim \l_@@_tmpa_tl
+          \dim_gset:Nn #1 { \dim_max:nn {#1} { \l_@@_tmpa_dim } }
+        }
+    \group_end:
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_blank_underline:n}
+% \changes{v0.4}{2017/08/14}{改用 \tn{rule} 绘制下划线,不再依赖
+%   \pkg{ulem} 宏包。}
+% 下划线占位符。|#1|: 长度。
+%    \begin{macrocode}
+\cs_new:Npn \@@_blank_underline:n #1
+  { \rule [ -0.5 ex ] {#1} { 0.4 pt } }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_line_spread:N,\@@_line_spread:n}
+% 设置行距。|#1|: 行距倍数 |fp| 变量。
+%    \begin{macrocode}
+\cs_new:Npn \@@_line_spread:N #1
+  { \linespread { \fp_use:N #1 } \selectfont }
+\cs_new:Npn \@@_line_spread:n #1
+  { \linespread {#1} \selectfont }
+%    \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{封面各部件}
+%
+% \changes{v0.5}{2017/09/19}{使用 \pkg{expl3} 以及内部函数改写
+%   封面,减少对 \LaTeXe{} 的依赖。}
+%
+% \begin{macro}{\@@_cover_id:,\@@_cover_id_aux:n}
+% 右上角的学校代码和学号。
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_cover_id:
+  {
+    \@@_fixed_width_box:nn { 120 pt }
+      {
+        \bool_if:NT \l_@@_secret_bool
+          {
+            \group_begin:
+              \sffamily
+              \@@_cover_id_aux:n { secret_level }
+              \c_@@_name_secret_star_tl
+              \l_@@_info_secret_year_tl
+            \group_end:
+            \par
+          }
+        \@@_cover_id_aux:n { school_id  } \par
+        \@@_cover_id_aux:n { student_id }
+      }
+%    \end{macrocode}
+% 插入一个宽度为负的水平盒子以减少右侧边距。
+%    \begin{macrocode}
+    \hbox_to_wd:nn { -24 pt } { }
+  }
+\cs_new:Npn \@@_cover_id_aux:n #1
+  {
+    \tl_use:c { c_@@_name_ #1 _tl }
+    \c_@@_fullwidth_colon_tl
+    \tl_use:c { l_@@_info_ #1 _tl }
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_cover_logo:}
+% 插入校名图片。根据参数 \opt{width} 和 \opt{height} 是否为空依次
+% 判断。\cs{l_@@_cover_logo_size_clist} 中超过两个的参数将被忽略。
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_cover_logo:
+  {
+    \clist_pop:NN   \l_@@_cover_logo_size_clist \l_@@_tmpa_tl
+    \clist_pop:NNTF \l_@@_cover_logo_size_clist \l_@@_tmpb_tl
+      {
+        \tl_if_empty:NTF \l_@@_tmpa_tl
+          { \includegraphics [ height = \l_@@_tmpb_tl ] }
+          {
+            \includegraphics
+              [ width  = \l_@@_tmpa_tl, height = \l_@@_tmpb_tl ]
+          }
+      }
+      { \includegraphics [ width = \l_@@_tmpa_tl ] }
+    { \l_@@_cover_logo_tl }
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_cover_type:}
+% 论文类型。
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_cover_type:
+  {
+    \tl_set:Nx \l_@@_tmpa_tl
+      {
+        \clist_item:Nn \c_@@_thesis_type_clist
+          { \g_@@_thesis_type_int }
+      }
+    \@@_spread_box:nn { 0.45 \textwidth } { \l_@@_tmpa_tl }
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_cover_degree:}
+% 学位类型。
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_cover_degree:
+  {
+    \int_compare:nNnT \g_@@_thesis_type_int = \c_two
+      {
+        \tl_set:Nx \l_@@_tmpa_tl
+          {
+            \clist_item:Nn \c_@@_degree_type_clist
+              { \l_@@_info_degree_type_int }
+          }
+        \c_@@_fullwidth_left_paren_tl
+        \l_@@_tmpa_tl
+        \c_@@_fullwidth_right_paren_tl
+      }
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_cover_info:}
+% 信息栏。
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_cover_info:
+  {
+    \begin{minipage} [ c ] { \textwidth }
+      \centering \zihao { 4 }
+%    \end{macrocode}
+% 读取左侧名称字段。
+%    \begin{macrocode}
+      \clist_set:Nx \l_@@_tmpa_clist
+        {
+          \c_@@_name_department_tl,
+          \c_@@_name_major_tl,
+          \c_@@_name_author_tl,
+          \c_@@_name_supervisor_tl,
+          \c_@@_name_date_tl,
+        }
+%    \end{macrocode}
+% 设置信息栏右侧宽度。读取各字段,并将最宽者的宽度赋给
+% \cs{l_@@_tmpb_dim}。
+%    \begin{macrocode}
+      \clist_set:Nx \l_@@_tmpb_clist
+        {
+          { \l_@@_info_department_tl },
+          { \l_@@_info_major_tl      },
+          { \l_@@_info_author_tl     },
+          { \l_@@_info_supervisor_tl },
+          { \l_@@_info_date_tl       }
+        }
+      \@@_get_max_text_width:NN \l_@@_tmpb_dim \l_@@_tmpb_clist
+%    \end{macrocode}
+% 用循环输出各字段。
+%    \begin{macrocode}
+      \bool_until_do:nn
+        { \clist_if_empty_p:N \l_@@_tmpa_clist }
+        {
+          \clist_pop:NN \l_@@_tmpa_clist \l_@@_tmpa_tl
+          \clist_pop:NN \l_@@_tmpb_clist \l_@@_tmpb_tl
+          \@@_spread_box:nn { 6 em } { \l_@@_tmpa_tl }
+          \c_@@_fullwidth_colon_tl
+          \@@_center_box:Vn \l_@@_tmpb_dim { \l_@@_tmpb_tl }
+          \skip_vertical:n { 1 ex }
+        }
+    \end{minipage}
+  }
+%    \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_@@_fullwidth_colon_tl
+        \@@_blank_underline:n { 6 em }
+        \@@_quad:
+      }
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{封面模板}
+%
+% \changes{v0.7}{2018/02/27}{使用 \pkg{xtemplate} 重构封面布局。}
+%
+% 声明封面对象。不需要带参数。
+%    \begin{macrocode}
+%<@@=fdu_cover>
+\DeclareObjectType { fdu / cover } { \c_zero }
+%    \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}
+% 声明模板代码。
+%    \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 } {#2} }
+\cs_new_protected:Npn \@@_declare_template_code:nnn #1#2#3
+  { \DeclareTemplateCode { fdu / cover } {#1} { \c_zero } {#2} {#3} }
+\cs_generate_variant:Nn \@@_declare_template_interface:nn { nx  }
+\cs_generate_variant:Nn \@@_declare_template_code:nnn     { nxn }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_key_type:n}
+%    \begin{macrocode}
+\cs_new:Npn \@@_key_type:n #1
+  {
+    #1 / content     : tokenlist,
+    #1 / format      : tokenlist,
+    #1 / bottom-skip : skip,
+    #1 / align       : choice { left, right, center, normal } = normal,
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_key_binding:n}
+%    \begin{macrocode}
+\cs_new:Npn \@@_key_binding:n #1
+  {
+    #1 / content     =
+      \exp_not:c
+        { l_@@ / \l_@@_template_tl / #1 / content_tl  },
+    #1 / format      =
+      \exp_not:c
+        { l_@@ / \l_@@_template_tl / #1 / format_tl   },
+    #1 / bottom-skip =
+      \exp_not:c
+        { l_@@ / \l_@@_template_tl / #1 / bottom_skip },
+    #1 / align       =
+      {
+        left   =
+          \exp_not:N \cs_set_protected:cpn
+            { @@ / \l_@@_template_tl / #1 / align:n }
+            \exp_not:n {##1}
+            {
+              \exp_not:n
+                {
+                  \group_begin:
+                    \flushleft ##1 \endflushleft
+                  \group_end:
+                }
+            },
+        right  =
+          \exp_not:N \cs_set_protected:cpn
+            { @@ / \l_@@_template_tl / #1 / align:n }
+            \exp_not:n {##1}
+            {
+              \exp_not:n
+                {
+                  \group_begin:
+                    \flushright ##1 \endflushright
+                  \group_end:
+                }
+            },
+        center =
+          \exp_not:N \cs_set_protected:cpn
+            { @@ / \l_@@_template_tl / #1 / align:n }
+            \exp_not:n {##1}
+            {
+              \exp_not:n
+                {
+                  \group_begin:
+                    \center ##1 \endcenter
+                  \group_end:
+                }
+            },
+        normal =
+          \exp_not:N \cs_set_protected:cpn
+            { @@ / \l_@@_template_tl / #1 / align:n }
+            \exp_not:n {##1}
+            { \exp_not:n { \group_begin: ##1 \group_end: } }
+      },
+  }
+%<@@=fdu>
+%    \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{绘制封面}
+%
+% \begin{macro}{\makecoveri,\makecoverii,\makecoveriii}
+% 使用实例(instance)构建封一、封二、封三。
+%    \begin{macrocode}
+\NewDocumentCommand \makecoveri { }
+  {
+    \thispagestyle { empty }
+    \UseInstance { fdu / cover } { cover-i-default }
+  }
+\NewDocumentCommand \makecoverii { }
+  {
+    \thispagestyle { empty }
+    \UseInstance { fdu / cover } { cover-ii-default }
+  }
+\NewDocumentCommand \makecoveriii { }
+  {
+    \cleardoublepage
+    \thispagestyle { empty }
+    \UseInstance { fdu / cover } { cover-iii-default }
+  }
+%    \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}
+%
+% 定义封面的具体配置参数。
+%    \begin{macrocode}
+\DeclareInstance { fdu / cover } { cover-i-default } { cover-i }
+  {
+%<class-en>    format                 =
+%<class-en>      \@@_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 } \sffamily,
+    title-en / format      =
+      \@@_line_spread:n { 1.2 } \zihao { 4 } \bfseries,
+    id       / bottom-skip = 0 pt plus 1.6 fill,
+    logo     / bottom-skip = 0 pt plus 0.3 fill,
+    type     / bottom-skip = -18 pt,
+    degree   / bottom-skip = 0 pt plus 0.8 fill,
+    title-en / bottom-skip = 0 pt plus 2.5 fill,
+    id       / align       = right,
+    logo     / align       = center,
+    type     / align       = center,
+    degree   / align       = center,
+    title    / align       = center,
+    title-en / align       = center,
+    info     / align       = center,
+  }
+\DeclareInstance { fdu / cover } { cover-ii-default } { cover-ii }
+  {
+%<class-en>    format              =
+%<class-en>      \@@_line_spread:N \c_@@_line_spread_fp,
+    title     / content =
+      \@@_spread_box:nn { 7 em } { \c_@@_name_instructors_tl },
+    name-list / content =
+      \clist_use:Nn \l_@@_info_instructors_clist { \par },
+    title     / format  = \zihao { 2 } \sffamily,
+    name-list / format  = \large,
+    title     / align   = center,
+    name-list / align   = center,
+  }
+\DeclareInstance { fdu / cover } { cover-iii-default } { cover-iii }
+  {
+    format                                =
+%<class>      \@@_line_spread:n { 1.8 },
+%<class-en>      \@@_line_spread:n { 1.8 } \dim_set:Nn \parindent { 2 \ccwd },
+    top-skip                              = 0 pt plus 0.2 fill,
+    bottom-skip                           = 0 pt plus 2.5 fill,
+    originality-decl-name   / content     = \c_@@_name_orig_decl_tl,
+    originality-decl-text   / content     = \c_@@_orig_decl_text_tl,
+    originality-decl-sig    / content     =
+      \@@_cover_signature:N \c_@@_orig_decl_sign_clist,
+    authorization-decl-name / content     = \c_@@_name_auth_decl_tl,
+    authorization-decl-text / content     = \c_@@_auth_decl_text_tl,
+    authorization-decl-sig  / content     =
+      \@@_cover_signature:N \c_@@_auth_decl_sign_clist,
+    originality-decl-name   / format      =
+      \@@_line_spread:n { 1.2 } \zihao { -2 } \sffamily,
+    authorization-decl-name / format      =
+      \@@_line_spread:n { 1.2 } \zihao { -2 } \sffamily,
+    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{macro}{style/auto-make-cover}
+% \begin{variable}{\l_@@_auto_make_cover_bool}
+% 是否自动生成封面。
+%    \begin{macrocode}
+\bool_new:N \l_@@_auto_make_cover_bool
+\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{variable}
+% \end{macro}
+%
+% 在 \env{document} 开始位置添加封面以及指导小组成员名单。
+%    \begin{macrocode}
+\AtBeginDocument
+  {
+    \bool_if:NT \l_@@_auto_make_cover_bool
+      {
+        \begin{titlepage}
+          \makecoveri \newpage \makecoverii
+        \end{titlepage}
+      }
+  }
+%    \end{macrocode}
+%
+% 在 \env{document} 结束位置添加声明页。
+%    \begin{macrocode}
+\AtEndDocument
+  { \bool_if:NT \l_@@_auto_make_cover_bool { \makecoveriii } }
+%    \end{macrocode}
+%
+% \subsection{目录}
+%
+% \begin{variable}{\@@_chapter_toc_format:,\@@_chapter_toc_en_format:}
+% 目录中章标题的样式还要用在摘要、符号表中。因为摘要分中英文,所以这里
+% 需要分别定义其样式。
+%    \begin{macrocode}
+\tl_const:Nn \@@_chapter_toc_format:    { \normalfont \sffamily }
+\tl_const:Nn \@@_chapter_toc_en_format: { \bfseries }
+%    \end{macrocode}
+% \end{variable}
+%
+% 设置目录标题。
+%    \begin{macrocode}
+\keys_set:nn { ctex }
+  {
+%<class>    contentsname = \c_@@_name_toc_tl,
+%<class-en>    contentsname = \c_@@_name_toc_en_tl,
+%    \end{macrocode}
+%
+% 设置目录中章节标题的样式。
+%    \begin{macrocode}
+    chapter / tocline =
+      {
+%<class>        \@@_chapter_toc_format:
+%<class-en>        \@@_chapter_toc_en_format:
+        \CTEXnumberline {#1} #2
+      },
+    section / tocline =
+      {
+%<class-en>        \bfseries
+         \CTEXnumberline {#1} #2
+      },
+    subsection / tocline =
+      {
+%<class>        \fdu at kai
+         \CTEXnumberline {#1} #2
+      }
+  }
+%    \end{macrocode}
+%
+% \begin{macro}{\tableofcontents}
+% 修改 \tn{tableofcontents} 的定义,使得页眉正确显示。第二个参数中的
+% 代码来源于 \LaTeXe{} 标准文档类 \file{book.cls}。
+%    \begin{macrocode}
+\@@_patch_cmd:Nnn \tableofcontents
+  {
+    \chapter*{\contentsname
+      \@mkboth{%
+        \MakeUppercase\contentsname}{\MakeUppercase\contentsname}}%
+  }
+  {
+    \chapter* { \contentsname }
+%<class>    \fdu_front_matter_header:n { \c_@@_name_toc_tl }
+%<class-en>    \fdu_front_matter_header:n { \c_@@_name_toc_en_tl }
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[int]{\@starttoc}
+% 修改 \tn{@starttoc} 的定义以调整英文模板中的目录行距。
+%    \begin{macrocode}
+%<*class-en>
+\@@_patch_cmd:Nnn \@starttoc
+  { \begingroup }
+  {
+    \begingroup
+      \@@_line_spread:N \c_@@_line_spread_fp
+  }
+%</class-en>
+%    \end{macrocode}
+% \end{macro}
+%
+% \subsection{摘要}
+%
+% \begin{environment}{abstract}
+% \begin{environment}{abstract*}
+% \changes{v0.7}{2018/03/05}{整理代码。}
+% 摘要环境。在中文模板定义了中英文双语摘要,但在英文模板中则没有
+% 定义中文摘要。
+%    \begin{macrocode}
+\NewDocumentEnvironment { abstract  } { }
+%<class>  { \@@_abstract_begin:    } { \@@_abstract_end:      }
+%<class-en>  { \@@_abstract_en_begin: } { \@@_abstract_en_end:   }
+%<*class>
+\NewDocumentEnvironment { abstract* } { }
+  { \@@_abstract_en_begin: } { \@@_abstract_en_end:   }
+%</class>
+%    \end{macrocode}
+% \end{environment}
+% \end{environment}
+%
+% \begin{macro}{\@@_abstract_begin:,\@@_abstract_en_begin:}
+% 摘要页需要修改页眉,并添加到目录。
+%    \begin{macrocode}
+%<*class>
+\cs_new_protected:Npn \@@_abstract_begin:
+  {
+    \chapter* { \c_@@_name_abstract_tl }
+    \fdu_front_matter_header:n { \c_@@_name_abstract_tl }
+    \addcontentsline { toc } { chapter }
+      {
+        \@@_chapter_toc_format:
+        \c_@@_name_abstract_tl
+      }
+  }
+%</class>
+\cs_new_protected:Npn \@@_abstract_en_begin:
+  {
+    \chapter* { \c_@@_name_abstract_en_tl }
+    \fdu_front_matter_header:n { \c_@@_name_abstract_en_tl }
+    \addcontentsline { toc } { chapter }
+      {
+%<class>        \@@_chapter_toc_format:
+%<class-en>        \@@_chapter_toc_en_format:
+        \c_@@_name_abstract_en_tl
+      }
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_abstract_end:,\@@_abstract_en_end:}
+% 摘要正文完成后,输出关键字列表和中图分类号(CLC)。
+%    \begin{macrocode}
+%<*class>
+\cs_new_protected:Npn \@@_abstract_end:
+  {
+    \@@_keywords_par:
+    \textsf { \c_@@_name_keywords_tl \c_@@_fullwidth_colon_tl }
+    \clist_use:Nn \l_@@_info_keywords_clist
+      { \c_@@_fullwidth_semicolon_tl }
+    \@@_clc_par:
+    \textsf { \c_@@_name_clc_tl \c_@@_fullwidth_colon_tl }
+    \l_@@_info_clc_tl
+  }
+%</class>
+\cs_new_protected:Npn \@@_abstract_en_end:
+  {
+    \@@_keywords_par:
+    \textbf { \c_@@_name_keywords_en_tl } \@@_quad:
+    \clist_use:Nn \l_@@_info_keywords_en_clist { \@@_quad: }
+    \@@_clc_par:
+    \textbf { \c_@@_name_clc_en_tl } \@@_quad:
+    \l_@@_info_clc_tl
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_keywords_par:,\@@_clc_par:}
+% 关键字列表前要空一行,使用悬挂缩进;中图分类号不缩进。
+%    \begin{macrocode}
+\cs_new:Npn \@@_keywords_par:
+  {
+    \par \mode_leave_vertical: \par
+    \noindent \hangindent = 4 em  \hangafter = 1
+  }
+\cs_new:Npn \@@_clc_par:
+  { \par \noindent }
+%    \end{macrocode}
+% \end{macro}
+%
+% \subsection{符号表}
+%
+% \begin{environment}{notation}
+% \changes{v0.7}{2018/03/05}{整理代码。}
+% 符号表环境,利用 \env{longtable} 封装。可选参数为表格列格式说明符。
+%    \begin{macrocode}
+\NewDocumentEnvironment { notation } { O { l p { 7.5 cm } } }
+  {
+    \@@_notation_begin:
+    \group_begin:
+      \@@_notation_long_table_setup:
+      \longtable {#1}
+  }
+  {
+      \endlongtable
+    \group_end:
+  }
+%    \end{macrocode}
+% \end{environment}
+%
+% \begin{macro}{\@@_notation_begin:}
+% 与摘要类似,符号表页需要修改页眉,并添加到目录。
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_notation_begin:
+  {
+%<*class>
+    \chapter* { \c_@@_name_notation_tl }
+    \fdu_front_matter_header:n { \c_@@_name_notation_tl }
+    \addcontentsline { toc } { chapter }
+      {
+        \@@_chapter_toc_format:
+        \c_@@_name_notation_tl
+      }
+%</class>
+%<*class-en>
+    \chapter* { \c_@@_name_notation_en_tl }
+    \fdu_front_matter_header:n { \c_@@_name_notation_en_tl }
+    \addcontentsline { toc } { chapter }
+      {
+        \@@_chapter_toc_en_format:
+        \c_@@_name_notation_en_tl
+      }
+%</class-en>
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_notation_long_table_setup:}
+% 调整 \cs{LTpre} 和 \cs{LTpost},以删去 \env{longtable} 前后的空白。
+% 英文模板中还需要调整表格的行距。注意 \tn{arraystretch} 只是一个简单
+% 宏,不能使用 \cs{fp_set:Nn}。
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_notation_long_table_setup:
+  {
+%<class-en>      \tl_set:Nn \arraystretch { 1.3 }
+      \dim_set_eq:NN \LTpre  \c_zero_dim
+      \dim_set_eq:NN \LTpost \c_zero_dim
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+% \subsection{参考文献著录与引用}
+%
+% \changes{v0.6}{2017/10/27}{支持 \BibTeX{},以实现参考文献的著录
+%   与引用。}
+% \changes{v0.7}{2018/01/25}{支持 \biber{} 与 \pkg{biblatex}。}
+%
+% \begin{variable}{\l_@@_bibtex_bool}
+% 是否使用 \BibTeX{} 作为参考文献处理程序。若为否,则使用
+% \pkg{biblatex}/\biber{}。
+%    \begin{macrocode}
+\bool_new:N \l_@@_bibtex_bool
+%    \end{macrocode}
+% \end{variable}
+%
+% \begin{variable}{\l_@@_bib_style_tl,\l_@@_bib_gb_style_tl,
+%   \l_@@_cite_style_tl}
+% 保存参考文献及引用样式。
+%    \begin{macrocode}
+\tl_new:N \l_@@_bib_style_tl
+\tl_new:N \l_@@_bib_gb_style_tl
+\tl_new:N \l_@@_cite_style_tl
+%    \end{macrocode}
+% \end{variable}
+%
+% \begin{variable}{\l_@@_bib_resource_tl}
+% 保存参考文献数据库列表。
+%    \begin{macrocode}
+\tl_new:N \l_@@_bib_resource_tl
+%    \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} 选项。}
+%
+%    \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 =
+      { \bool_set_true:N  \l_@@_bibtex_bool },
+    bib-backend / biblatex .code:n =
+      { \bool_set_false:N \l_@@_bibtex_bool },
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{style/bib-style}
+% 参考文献样式。
+%    \begin{macrocode}
+    bib-style .choice:,
+    bib-style .value_required:n = true,
+    bib-style / numerical    .code:n =
+      {
+        \tl_set:Nn  \l_@@_bib_gb_style_tl { numerical  }
+        \tl_clear:N \l_@@_bib_style_tl
+      },
+    bib-style / author-year .code:n =
+      {
+        \tl_set:Nn  \l_@@_bib_gb_style_tl { author-year }
+        \tl_clear:N \l_@@_bib_style_tl
+      },
+    bib-style / unknown     .code:n =
+      { \tl_set_eq:NN \l_@@_bib_style_tl \l_keys_value_tl },
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{style/cite-style}
+% 引用样式。
+%    \begin{macrocode}
+    cite-style .code:n =
+      {
+        \bool_if:NTF \l_@@_bibtex_bool
+          { \@@_warning:n { cite-style-not-available } }
+          { \tl_set:Nn \l_@@_cite_style_tl {#1} }
+      },
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{style/bib-resource}
+% 参考文献数据源。
+%    \begin{macrocode}
+    bib-resource .tl_set:N = \l_@@_bib_resource_tl
+  }
+\@@_msg_new:nn { cite-style-not-available }
+  { Option~ "cite-style"~ is~ not~ available~ in~ BibTeX. }
+%    \end{macrocode}
+% \end{macro}
+%
+% 为了保证导言区中的设置能起作用,\pkg{natbib} 或 \pkg{biblatex} 宏包
+% 均需要在导言区末尾载入(仍在 \pkg{hyperref} 之前)。
+%    \begin{macrocode}
+\ctex_at_end_preamble:n
+  {
+%    \end{macrocode}
+%
+% 调用 \pkg{natbib} 宏包并进行配置。
+%    \begin{macrocode}
+    \bool_if:NTF \l_@@_bibtex_bool
+      {
+        \RequirePackage [ sort & compress ] { natbib }
+        \@@_bibtex_setup:
+%    \end{macrocode}
+%
+% \changes{v0.7}{2018/01/25}{统一使用 \cs{printbibliography} 命令
+%   生成参考文献列表。}
+%
+% \begin{macro}{\printbibliography}
+% \BibTeX{} 下接口与 \pkg{biblatex} 统一。
+%    \begin{macrocode}
+        \NewDocumentCommand \printbibliography { o }
+          {
+            \exp_args:NV \bibliography \l_@@_bib_resource_tl
+            \IfValueT {#1}
+              { \@@_warning:nn { invalid-option-in-bibtex } {#1} }
+          }
+      }
+%    \end{macrocode}
+% \end{macro}
+%
+% 调用 \pkg{biblatex} 宏包,并载入参考文献数据库。
+% \cs{@@_biblatex_setup:} 依靠传入宏包选项,因此要放在
+% \tn{RequirePackage} 之前。
+%    \begin{macrocode}
+      {
+        \@@_biblatex_setup:
+        \RequirePackage [ backend = biber, hyperref = manual, natbib ]
+          { biblatex }
+        \exp_args:NV \addbibresource \l_@@_bib_resource_tl
+        \@@_biblatex_allow_url_break:
+%    \end{macrocode}
+% 英文模板需要重定义参考文献标题。
+%    \begin{macrocode}
+%<*class-en>
+        \exp_args:Nnx \DefineBibliographyStrings { english }
+          { bibliography = { \c_@@_name_bib_en_tl } }
+%</class-en>
+      }
+  }
+\@@_msg_new:nn { invalid-option-in-bibtex }
+  { Option(s)~ "#1"~ are~ invalid~ in~ BibTeX. }
+%    \end{macrocode}
+%
+% \begin{macro}{\@@_bibtex_setup:}
+% \BibTeX{} 设置。
+%    \begin{macrocode}
+\cs_new:Npn \@@_bibtex_setup:
+  {
+    \tl_if_empty:NTF \l_@@_bib_style_tl
+      {
+        \tl_if_eq:VnTF \l_@@_bib_gb_style_tl { numerical }
+          {
+            \bibliographystyle { gbt7714-unsrt }
+            \@@_set_cite_style_numerical:
+          }
+          {
+            \tl_if_eq:VnT \l_@@_bib_gb_style_tl { author-year }
+              {
+                \bibliographystyle { gbt7714-plain }
+                \@@_set_cite_style_author_year:
+                \cs_set_eq:NN \cite \citep
+              }
+          }
+      }
+      { \exp_args:NV \bibliographystyle \l_@@_bib_style_tl }
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_biblatex_setup:}
+% \pkg{biblatex} 设置。
+%    \begin{macrocode}
+\cs_new:Npn \@@_biblatex_setup:
+  {
+%    \end{macrocode}
+% 参考文献样式。
+%    \begin{macrocode}
+    \tl_if_empty:NTF \l_@@_bib_style_tl
+      {
+        \tl_if_eq:VnTF \l_@@_bib_gb_style_tl { numerical }
+          { \PassOptionsToPackage { style = gb7714-2015 } }
+          {
+            \tl_if_eq:VnT \l_@@_bib_gb_style_tl { author-year }
+              { \PassOptionsToPackage { style = gb7714-2015ay } }
+          }
+      }
+      { \PassOptionsToPackage { style = \l_@@_bib_style_tl } }
+    { biblatex }
+%    \end{macrocode}
+% 引用样式。
+%    \begin{macrocode}
+    \tl_if_empty:NF \l_@@_cite_style_tl
+      {
+        \PassOptionsToPackage { citestyle = \l_@@_bib_style_tl }
+          { biblatex }
+      }
+  }
+%    \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 at biburlucpenalty  \c_one
+    \int_set_eq:NN \c at biburlnumpenalty \c_one
+    \int_set_eq:NN \c at biburllcpenalty  \c_one
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_set_cite_style_numerical:}
+% 顺序编码制下的引用样式。
+%    \begin{macrocode}
+\cs_new:Npn \@@_set_cite_style_numerical:
+  {
+    \NAT at numberstrue \NAT at supertrue
+    \cs_set:Npn \NAT at open  { [  }
+    \cs_set:Npn \NAT at close { ]  }
+    \cs_set:Npn \NAT at sep   { ,~ }
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_set_cite_style_author_year:}
+% 著者—出版年制下的引用样式。
+%    \begin{macrocode}
+\cs_new:Npn \@@_set_cite_style_author_year:
+  {
+    \NAT at numbersfalse
+%<*class>
+    \cs_set_eq:NN \NAT at open  \c_@@_fullwidth_left_paren_tl
+    \cs_set_eq:NN \NAT at close \c_@@_fullwidth_right_paren_tl
+    \cs_set_eq:NN \NAT at sep   \c_@@_fullwidth_semicolon_tl
+    \cs_set_eq:NN \NAT at aysep \c_@@_fullwidth_comma_tl
+    \cs_set_eq:NN \NAT at yrsep \c_@@_ideographic_comma_tl
+%</class>
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\bibsection}
+% 修改参考文献部分的页眉,并将其添加到目录。
+%    \begin{macrocode}
+\cs_set:Npn \bibsection
+  {
+    \chapter* { \bibname }
+    \fdu_front_matter_header:n { \bibname }
+    \addcontentsline { toc } { chapter }
+      { \@@_chapter_toc_format: \bibname }
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+% \changes{v0.7}{2018/01/25}{同步 \pkg{gbt7714} v1.0,移除有关超链接
+%   的额外设置。}
+%
+% \subsection{\pkg{hyperref} 相关配置}
+%
+% \changes{v0.4}{2017/08/13}{新增 \pkg{hyperref} 相关配置,包括超链接
+%   样式(\opt{style/hyperlink} 与 \opt{style/hyperlink-color} 选项)
+%   及 PDF 元信息等。}
+% \changes{v0.7}{2018/01/23}{将 \pkg{hyperref} 相关配置移至模板末尾,
+%   以减少冲突。}
+%
+% \begin{macro}{\hypersetup,\fdu_hyperref_setup:n}
+% \pkg{hyperref} 宏包是在导言区之后才引入的。若要在导言区中使用
+% \tn{hypersetup} 命令,必须另行定义。
+%    \begin{macrocode}
+\NewDocumentCommand \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}
+%
+% \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 at link, linkbordercolor = fdu at link,
+            urlcolor  = fdu at url,  urlbordercolor  = fdu at url,
+            citecolor = fdu at cite, citebordercolor = fdu at 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}
+% 超链接样式。
+%    \begin{macrocode}
+    hyperlink .choice:,
+    hyperlink .value_required:n = true,
+    hyperlink / border .code:n = { },
+    hyperlink / color  .code:n =
+      { \fdu_hyperref_setup:n { colorlinks = true } },
+    hyperlink / none   .code:n =
+      { \fdu_hyperref_setup:n { hidelinks  = true } },
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{style/hyperlink-color}
+% 超链接颜色。
+%    \begin{macrocode}
+    hyperlink-color .choice:,
+    hyperlink-color .value_required:n = true,
+    \clist_map_function:nN
+      {
+        { autumn,    D70000, D75F00, AF8700 },
+        { business,  D14542, 295497, 1F6E43 },
+        { classic,   FF0000, 0000FF, 00FF00 },
+        { default,   990000, 0000B2, 007F00 },
+        { elegant,   961212, C31818, 9B764F },
+        { fantasy,   FF4A19, FF3F94, 934BA1 },
+        { material,  E91E63, 009688, 4CAF50 },
+        { science,   CA0619, 389F9D, FF8920 },
+        { summer,    00AFAF, 5F5FAF, 5F8700 },
+        { 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}
+%
+% 在导言区末尾引入 \pkg{hyperref} 宏包。
+%    \begin{macrocode}
+\ctex_at_end_preamble:n
+  {
+    \RequirePackage { hyperref }
+%    \end{macrocode}
+% 此后 \tn{hypersetup} 命令由 \pkg{hyperref} 宏包接管。
+%    \begin{macrocode}
+    \hypersetup
+      {
+        bookmarksnumbered = true,
+%    \end{macrocode}
+% 填写 PDF 元信息。
+%    \begin{macrocode}
+%<*class>
+        pdftitle    = \l_@@_info_title_tl,
+        pdfauthor   = \l_@@_info_author_tl,
+        pdfkeywords = \l_@@_info_keywords_clist,
+%</class>
+%<*class-en>
+        pdftitle    = \l_@@_info_title_en_tl,
+        pdfauthor   = \l_@@_info_author_en_tl,
+        pdfkeywords = \l_@@_info_keywords_en_clist,
+%</class-en>
+%       pdfsubject  = ,
+        pdfcreator  = \c_@@_name_pdf_creator_tl
+      }
+%    \end{macrocode}
+% 将导言区中通过 \cs{fdu_hyperref_setup:n} 进行的设置传入
+% \tn{hypersetup}。
+%    \begin{macrocode}
+    \exp_args:NV \hypersetup \g_@@_to_hyperref_clist
+%    \end{macrocode}
+% URL 断行处理。
+%    \begin{macrocode}
+    \fdu_allow_url_break:
+%    \end{macrocode}
+% 手动开启 \pkg{biblatex} 的 \pkg{hyperref} 支持。
+%    \begin{macrocode}
+    \bool_if:NF \l_@@_bibtex_bool { \BiblatexManualHyperrefOn }
+  }
+%    \end{macrocode}
+%
+% 在 PDF 字符串中设置 \tn{fdu at kai} 命令为空,以抑制 \pkg{hyperref}
+% 的警告信息。
+%    \begin{macrocode}
+\ctex_at_end_package:nn { hyperref }
+  {
+    \pdfstringdefDisableCommands
+      {
+        \cs_set_eq:NN \fdu at kai \prg_do_nothing:
+        \cs_set_eq:NN \quad    \c_space_tl
+        \cs_set_eq:NN \qquad   \c_space_tl
+      }
+  }
+%    \end{macrocode}
+%
+% \subsection{用户接口}
+%
+% \begin{macro}{info,style}
+% 定义元(meta)键值对。
+%    \begin{macrocode}
+\keys_define:nn { fdu }
+  {
+    info  .meta:nn = { fdu / info  } {#1},
+    style .meta:nn = { fdu / style } {#1}
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+% 文档类初始设置。
+%    \begin{macrocode}
+\keys_set:nn { fdu }
+  {
+    style   / font            = times,
+%<class>    style   / cjk-font        = fandol,
+    style   / font-size       = -4,
+%<class>    style   / fullwidth-stop  = false,
+    style   / auto-make-cover = true,
+    style   / logo            = { fudan-name.pdf },
+    style   / logo-size       = { 0.5 \textwidth },
+    style   / hyperlink       = color,
+    style   / hyperlink-color = default,
+    style   / bib-style       = numerical,
+    info    / degree          = academic,
+    info    / secret-level    = none,
+    info    / school-id       = { 10246 },
+    info    / date            = { \zhtoday },
+%<class>    theorem / header-font     = { \sffamily },
+%<class-en>    theorem / header-font     = { \bfseries \upshape },
+%<class>    theorem / body-font       = { \fdu at kai },
+%<class-en>    theorem / body-font       = { \itshape },
+    theorem / counter         = { chapter }
+  }
+%    \end{macrocode}
+%
+% \begin{macro}{\fdusetup}
+% 用户设置接口。
+%    \begin{macrocode}
+\NewDocumentCommand \fdusetup { m }
+  { \keys_set:nn { fdu } {#1} }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{environment}{proof}
+% \begin{environment}{axiom}
+% \begin{environment}{corollary}
+% \begin{environment}{definition}
+% \begin{environment}{example}
+% \begin{environment}{lemma}
+% \begin{environment}{theorem}
+% 模板预定义的常用数学环境。
+% 其中的“证明”比较特殊,它不编号,但会添加证毕符号。
+%    \begin{macrocode}
+%<*class>
+\newtheorem* { proof       } { \c_@@_name_proof_tl      }
+\newtheorem  { axiom       } { \c_@@_name_axiom_tl      }
+\newtheorem  { corollary   } { \c_@@_name_corollary_tl  }
+\newtheorem  { definition  } { \c_@@_name_definition_tl }
+\newtheorem  { example     } { \c_@@_name_example_tl    }
+\newtheorem  { lemma       } { \c_@@_name_lemma_tl      }
+\newtheorem  { theorem     } { \c_@@_name_theorem_tl    }
+%</class>
+%<*class-en>
+\newtheorem* { proof       } { \c_@@_name_proof_en_tl      }
+\newtheorem  { axiom       } { \c_@@_name_axiom_en_tl      }
+\newtheorem  { corollary   } { \c_@@_name_corollary_en_tl  }
+\newtheorem  { definition  } { \c_@@_name_definition_en_tl }
+\newtheorem  { example     } { \c_@@_name_example_en_tl    }
+\newtheorem  { lemma       } { \c_@@_name_lemma_en_tl      }
+\newtheorem  { theorem     } { \c_@@_name_theorem_en_tl    }
+%</class-en>
+%</class|class-en>
+%    \end{macrocode}
+% \end{environment}
+% \end{environment}
+% \end{environment}
+% \end{environment}
+% \end{environment}
+% \end{environment}
+% \end{environment}
+%
+% \subsection{模板参数配置文件}
+%
+% \changes{v0.3}{2017/06/27}{分离文档类与参数配置文件。}
+%
+%    \begin{macrocode}
+%<*definition>
+%    \end{macrocode}
+%
+% \subsubsection{通用配置}
+%
+% \begin{variable}{\c_@@_name_simp_tl,\c_@@_name_trad_tl,
+%   \c_@@_name_en_tl}
+% 学校名称。
+%    \begin{macrocode}
+\tl_const:Nn \c_@@_name_simp_tl { 复旦大学          }
+\tl_const:Nn \c_@@_name_trad_tl { 復旦大學          }
+\tl_const:Nn \c_@@_name_en_tl   { Fudan~ University }
+%    \end{macrocode}
+% \end{variable}
+%
+% 常用标点符号,见表~\ref{tab:punctuations}。
+%    \begin{macrocode}
+\clist_map_inline:nn
+  {
+    { ideographic_comma     } { "3001 },
+    { ideographic_full_stop } { "3002 },
+    { fullwidth_comma       } { "FF0C },
+    { fullwidth_full_stop   } { "FF0E },
+    { fullwidth_colon       } { "FF1A },
+    { fullwidth_semicolon   } { "FF1B },
+    { fullwidth_left_paren  } { "FF08 },
+    { fullwidth_right_paren } { "FF09 }
+  }
+  { \@@_define_punct:nn #1 }
+%    \end{macrocode}
+%
+% \begin{table}[ht]
+%   \caption{常用标点符号}
+%   \label{tab:punctuations}
+%   \centering
+%   \begin{tabular}{cccc}
+%     \toprule
+%       \textbf{中文名称} & \textbf{英文名称} & \textbf{符号} & \textbf{Unicode} \\
+%     \midrule
+%       中文顿号     & Ideographic comma           & \symbol{"3001} & U+3001 \\
+%       中文句号     & Ideographic full stop       & \symbol{"3002} & U+3002 \\
+%       中文逗号     & Fullwidth comma             & \symbol{"FF0C} & U+FF0C \\
+%       全角西文句点 & Fullwidth full stop         & \symbol{"FF0E} & U+FF0E \\
+%       中文冒号     & Fullwidth colon             & \symbol{"FF1A} & U+FF1A \\
+%       中文分号     & Fullwidth semicolon         & \symbol{"FF1B} & U+FF1B \\
+%       中文左圆括号 & Fullwidth left parenthesis  & \symbol{"FF08} & U+FF08 \\
+%       中文右圆括号 & Fullwidth right parenthesis & \symbol{"FF09} & U+FF09 \\
+%     \bottomrule
+%   \end{tabular}
+% \end{table}
+%
+% \begin{variable}{\c_@@_line_spread_fp}
+% 行距倍数。行距倍数 $k$ 由下式确定:
+% \begin{equation*}
+%   \num{1.2} \times k \times \SI{12}{bp} = \SI{20}{pt}.
+% \end{equation*}
+% 式中,\num{1.2} 是基本行距与文字大小之比,\SI{12}{bp} 是小四号字
+% 的大小,\SI{20}{pt} 是行距固定值。
+%    \begin{macrocode}
+\fp_const:Nn \c_@@_line_spread_fp
+  { \dim_ratio:nn { 20 pt } { 12 bp } / 1.2 }
+%    \end{macrocode}
+% \end{variable}
+%
+% \subsubsection{声明页}
+%
+% \begin{variable}{\c_@@_orig_decl_text_tl}
+% 论文独创性声明。
+%    \begin{macrocode}
+\tl_const:Nn \c_@@_orig_decl_text_tl
+  {
+    本人郑重声明:所呈交的学位论文,是本人在导师的指导下,独立进行研究
+    工作所取得的成果。论文中除特别标注的内容外,不包含任何其他个人或机
+    构已经发表或撰写过的研究成果。对本研究做出重要贡献的个人和集体,均
+    已在论文中作了明确的声明并表示了谢意。本声明的法律结果由本人承担。
+  }
+%    \end{macrocode}
+% \end{variable}
+%
+% \begin{variable}{\c_@@_auth_decl_text_tl}
+% 论文使用授权声明。
+%    \begin{macrocode}
+\tl_const:Nn \c_@@_auth_decl_text_tl
+  {
+    本人完全了解复旦大学有关收藏和利用博士、硕士学位论文的规定,即:学
+    校有权收藏、使用并向国家有关部门或机构送交论文的印刷本和电子版本;
+    允许论文被查阅和借阅;学校可以公布论文的全部或部分内容,可以采用影
+    印、缩印或其它复制手段保存论文。涉密学位论文在解密后遵守此规定。
+  }
+%    \end{macrocode}
+% \end{variable}
+%
+% \begin{variable}{\c_@@_orig_decl_sign_clist,
+%   \c_@@_auth_decl_sign_clist}
+% 声明页签名项目。
+%    \begin{macrocode}
+\clist_const:Nn \c_@@_orig_decl_sign_clist
+  { 作者签名, 日期 }
+\clist_const:Nn \c_@@_auth_decl_sign_clist
+  { 作者签名, 导师签名, 日期 }
+%    \end{macrocode}
+% \end{variable}
+%
+% \subsubsection{杂项}
+%
+% \begin{variable}{\c_@@_thesis_type_clist,
+%   \c_@@_degree_type_clist}
+% 论文类型与学位类型。
+%    \begin{macrocode}
+\clist_const:Nn \c_@@_thesis_type_clist
+  { 博士学位论文, 硕士学位论文, 本科毕业论文 }
+\clist_const:Nn \c_@@_degree_type_clist
+  { 学术学位, 专业学位 }
+%    \end{macrocode}
+% \end{variable}
+%
+% \begin{variable}{\c_@@_secret_clist}
+% 三种密级。
+%    \begin{macrocode}
+\clist_const:Nn \c_@@_secret_clist { 秘密, 机密, 绝密 }
+%    \end{macrocode}
+% \end{variable}
+%
+% 默认名称。注意空格是忽略掉的。
+%    \begin{macrocode}
+\clist_map_inline:nn
+  {
+    { secret_level    } { 密 \qquad 级                  },
+    { secret_star     } { \textrm { \bigstar }          },
+    { school_id       } { 学校代码                      },
+    { student_id      } { 学 \qquad 号                  },
+    { department      } { 院系                          },
+    { major           } { 专业                          },
+    { author          } { 姓名                          },
+    { supervisor      } { 指导教师                      },
+    { date            } { 完成日期                      },
+    { instructors     } { 指导小组成员                  },
+    { author_sign     } { 作者签名                      },
+    { supervisor_sign } { 导师签名                      },
+    { sign_date       } { 日期                          },
+    { 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~ number:      },
+    { toc      } { 目 \quad 录 } { Contents          },
+    { notation } { 符号表      } { List~ of~ Symbols }
+  }
+  { \@@_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 }
+%</definition>
+%<@@=>
+%    \end{macrocode}
+%
+% \clearpage
+%
+% \end{implementation}
+%


Property changes on: trunk/Master/texmf-dist/source/latex/fduthesis/fduthesis.dtx
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/source/latex/fduthesis/fduthesis.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex/fduthesis/fduthesis.ins	                        (rev 0)
+++ trunk/Master/texmf-dist/source/latex/fduthesis/fduthesis.ins	2018-04-09 21:17:26 UTC (rev 47408)
@@ -0,0 +1,135 @@
+%%
+%% This is file `fduthesis.ins',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% fduthesis.dtx  (with options: `install')
+%% 
+%%     Copyright (C) 2017, 2018 by Xiangdong Zeng <xdzeng96 at gmail.com>
+%% 
+%%     This work may be distributed and/or modified under the
+%%     conditions of the LaTeX Project Public License, either
+%%     version 1.3c of this license or (at your option) any later
+%%     version. The latest version of this license is in:
+%% 
+%%       http://www.latex-project.org/lppl.txt
+%% 
+%%     and version 1.3 or later is part of all distributions of
+%%     LaTeX version 2005/12/01 or later.
+%% 
+%%     This work has the LPPL maintenance status `maintained'.
+%% 
+%%     The Current Maintainer of this work is Xiangdong Zeng.
+%% 
+%%     This work consists of the files fduthesis.dtx,
+%%                                     fduthesis-doc.dtx,
+%%                                     fduthesis-logo.dtx,
+%%                                     fduthesis-template.tex,
+%%               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,
+%%                                     fduthesis.pdf,
+%%                                     fduthesis-en.pdf,
+%%                                     fduthesis-code.pdf,
+%%                                     latexmkrc,
+%%                                     latexmkrc-en,
+%%                                 and README.md.
+%% 
+\input l3docstrip.tex
+\keepsilent
+\askforoverwritefalse
+
+\preamble
+
+    Copyright (C) 2017, 2018 by Xiangdong Zeng <xdzeng96 at gmail.com>
+
+    This work may be distributed and/or modified under the
+    conditions of the LaTeX Project Public License, either
+    version 1.3c of this license or (at your option) any later
+    version. The latest version of this license is in:
+
+      http://www.latex-project.org/lppl.txt
+
+    and version 1.3 or later is part of all distributions of
+    LaTeX version 2005/12/01 or later.
+
+    This work has the LPPL maintenance status `maintained'.
+
+    The Current Maintainer of this work is Xiangdong Zeng.
+
+    This work consists of the files fduthesis.dtx,
+                                    fduthesis-doc.dtx,
+                                    fduthesis-logo.dtx,
+                                    fduthesis-template.tex,
+              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,
+                                    fduthesis.pdf,
+                                    fduthesis-en.pdf,
+                                    fduthesis-code.pdf,
+                                    latexmkrc,
+                                    latexmkrc-en,
+                                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}}
+  \usedir{doc/latex/fduthesis}
+  \nopreamble\nopostamble
+    \file{README.md}           {\from{\jobname.dtx}{readme}}
+    % ``.cfg'' is only for internal/temporal use.
+    % They will be renamed by external scripts.
+    \file{latexmkrc.cfg}       {\from{\jobname-doc.dtx}{latexmk}}
+    \file{latexmkrc-en.cfg}    {\from{\jobname-doc.dtx}{latexmk-en}}
+}
+
+\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
+\endinput
+%%
+%% End of file `fduthesis.ins'.

Added: trunk/Master/texmf-dist/tex/latex/fduthesis/fdudoc.cls
===================================================================
--- trunk/Master/texmf-dist/tex/latex/fduthesis/fdudoc.cls	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/fduthesis/fdudoc.cls	2018-04-09 21:17:26 UTC (rev 47408)
@@ -0,0 +1,1067 @@
+%%
+%% This is file `fdudoc.cls',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% fduthesis.dtx  (with options: `doc')
+%% fduthesis-doc.dtx  (with options: `doc')
+%% 
+%%     Copyright (C) 2017, 2018 by Xiangdong Zeng <xdzeng96 at gmail.com>
+%% 
+%%     This work may be distributed and/or modified under the
+%%     conditions of the LaTeX Project Public License, either
+%%     version 1.3c of this license or (at your option) any later
+%%     version. The latest version of this license is in:
+%% 
+%%       http://www.latex-project.org/lppl.txt
+%% 
+%%     and version 1.3 or later is part of all distributions of
+%%     LaTeX version 2005/12/01 or later.
+%% 
+%%     This work has the LPPL maintenance status `maintained'.
+%% 
+%%     The Current Maintainer of this work is Xiangdong Zeng.
+%% 
+%%     This work consists of the files fduthesis.dtx,
+%%                                     fduthesis-doc.dtx,
+%%                                     fduthesis-logo.dtx,
+%%                                     fduthesis-template.tex,
+%%               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,
+%%                                     fduthesis.pdf,
+%%                                     fduthesis-en.pdf,
+%%                                     fduthesis-code.pdf,
+%%                                     latexmkrc,
+%%                                     latexmkrc-en,
+%%                                 and README.md.
+%% 
+\NeedsTeXFormat{LaTeX2e}
+\RequirePackage{expl3}
+\GetIdInfo $Id: fduthesis.dtx 0.7a 2018-04-09 12:00:00Z Xiangdong Zeng <xdzeng96 at gmail.com> $
+  {Documentation class for fduthesis}
+\ProvidesExplClass{fdudoc}
+  {\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription}
+\ExplSyntaxOff
+\@namedef{ver at thumbpdf.sty}{9999/99/99}
+\PassOptionsToPackage{log-declarations = false}{xparse}
+\LoadClass[a4paper, full]{l3doc}
+\RequirePackage[UTF8, heading, sub3section, fontset = none]{ctex}
+\RequirePackage{graphicx}
+\RequirePackage{caption}
+\RequirePackage{geometry}
+\RequirePackage{listings}
+\RequirePackage{makecell}
+\RequirePackage[toc]{multitoc}
+\RequirePackage{siunitx}
+\RequirePackage{tabularx}
+\RequirePackage{threeparttable}
+\RequirePackage{unicode-math}
+\RequirePackage{xcolor}
+\RequirePackage{xcolor-material}
+\RequirePackage{zref-base}
+\def\macro at code{%
+   \topsep \MacrocodeTopsep
+   \@beginparpenalty \predisplaypenalty
+   \partopsep \z at skip
+   \trivlist \parskip \z@ \item[]%
+   \MacroFont
+   \leftskip\@totalleftmargin \advance\leftskip\MacroIndent
+   \rightskip\z@ \parindent\z@ \parfillskip\@flushglue
+   \blank at linefalse \def\par{\ifblank at line
+                             \leavevmode\fi
+                             \blank at linetrue\@@par
+                             \penalty\interlinepenalty}
+   \obeylines
+   \let\do\do at noligs \verbatim at nolig@list
+   \let\do\@makeother \dospecials
+   \global\@newlistfalse
+   \global\@minipagefalse
+   \init at crossref}
+\ExplSyntaxOn
+\tl_new:N \l__fdudoc_tmpa_tl
+\tl_new:N \l__fdudoc_tmpb_tl
+\cs_new_protected:Npn \__fdudoc_patch_cmd:Nnn #1#2#3
+  {
+    \ctex_patch_cmd_once:NnnnTF #1 { } {#2} {#3}
+      { } { \ctex_patch_failure:N #1 }
+  }
+\cs_new_protected:Npn \__fdudoc_preto_cmd:Nn #1#2
+  {
+    \ctex_preto_cmd:NnnTF #1 { } {#2}
+      { } { \ctex_patch_failure:N #1 }
+  }
+\cs_new_protected:Npn \__fdudoc_appto_cmd:Nn #1#2
+  {
+    \ctex_appto_cmd:NnnTF #1 { } {#2}
+      { } { \ctex_patch_failure:N #1 }
+  }
+\cs_set_protected_nopar:Npn \xmacro at code
+  { \__fdudoc_marco_code:w }
+\cs_set_protected_nopar:Npn \sxmacro at code
+  {
+    \fontspec_print_visible_spaces:
+    \xmacro at code
+  }
+\cs_new_protected_nopar:Npn \__fdudoc_marco_code:w
+  {
+    \ifcodeline at index
+      \__fdudoc_marco_code_every_par:n { \__fdudoc_code_line_no: }
+    \else:
+      \__fdudoc_marco_code_every_par:n { }
+    \fi:
+    \__fdudoc_make_finish_tag:x { \@currenvir }
+    \__fdudoc_macro_code_start:w
+  }
+\cs_new_protected:Npn \__fdudoc_marco_code_every_par:n #1
+  {
+    \everypar
+      {
+        \everypar {#1}
+        \if at inlabel
+          \global \@inlabelfalse \@noparlistfalse
+          \llap { \box \@labels \hskip \leftskip }
+        \fi
+        #1
+      }
+  }
+\group_begin:
+  \int_set:Nn \tex_endlinechar:D { -1 }
+  \use:n
+    {
+      \char_set_catcode_active:n { 32 }
+      \tl_const:Nn \c__fdudoc_active_space_tl
+    }
+    { }
+\group_end:
+\group_begin:
+  \char_set_catcode_active:n { 13 }
+  \cs_new_protected:Npx \__fdudoc_make_finish_tag:n #1
+    {
+      \tl_set:Nn \exp_not:N \l__fdudoc_macro_code_finish_tl
+        {
+          \c_percent_str
+          \prg_replicate:nn { 4 }
+            { \exp_not:o { \c__fdudoc_active_space_tl } }
+          \exp_not:o { \active at escape@char } end
+          \c_left_brace_str #1 \c_right_brace_str
+          \exp_not:N ^^M
+        }
+    }
+  \cs_generate_variant:Nn \__fdudoc_make_finish_tag:n { x }
+  \cs_new_protected:Npn \__fdudoc_macro_code_start:w #1
+    {
+      \str_if_eq:nnTF {#1} { ^^M }
+        { \__fdudoc_macro_code_read_line:w }
+        { \__fdudoc_macro_code_read_line:w #1 }
+    }
+  \cs_new_protected:Npn \__fdudoc_macro_code_read_line:w #1 ^^M
+    {
+      \tl_set:Nn \l__fdudoc_macro_code_line_tl { #1 ^^M }
+      \tl_if_eq:NNTF
+        \l__fdudoc_macro_code_line_tl \l__fdudoc_macro_code_finish_tl
+        { \exp_args:Nx \end { \@currenvir } }
+        {
+          \__fdudoc_macro_code_process_line:
+          \__fdudoc_macro_code_read_line:w
+        }
+    }
+  \cs_new_protected:Npn \__fdudoc_swap_cr:
+    {
+      \exp_after:wN
+        \__fdudoc_swap_cr_aux:w \l__fdudoc_macro_code_line_tl
+    }
+  \cs_new_protected:Npn \__fdudoc_swap_cr_aux:w #1 ^^M
+    {
+      \group_insert_after:N ^^M
+      \tl_set:Nn \l__fdudoc_macro_code_line_tl {#1}
+    }
+  \tl_const:Nn \c__fdudoc_active_cr_tl { ^^M }
+\group_end:
+\tl_new:N \l__fdudoc_macro_code_line_tl
+\tl_new:N \l__fdudoc_macro_code_finish_tl
+\tl_new:N \g__fdudoc_macro_code_verbatim_stop_tl
+\cs_new_protected_nopar:Npn \__fdudoc_process_normal_line:
+  {
+    \str_case_x:nnF
+      { \str_head:N \l__fdudoc_macro_code_line_tl }
+      {
+        { \c_percent_str }
+        {
+          \__fdudoc_check_angle:x
+            { \tl_tail:N \l__fdudoc_macro_code_line_tl }
+        }
+        { \c_hash_str }
+        { \__fdudoc_output_comment_line: }
+      }
+      { \__fdudoc_output_line: }
+  }
+\cs_new_protected_nopar:Npn \__fdudoc_process_verbatim_line:
+  {
+    \tl_if_eq:NNTF \l__fdudoc_macro_code_line_tl
+        \g__fdudoc_macro_code_verbatim_stop_tl
+      {
+        \tl_gclear:N \g__fdudoc_macro_code_verbatim_stop_tl
+        \cs_gset_eq:NN \__fdudoc_macro_code_process_line:
+          \__fdudoc_process_normal_line:
+        \__fdudoc_output_module:nn
+          { \color { verb at guard } }
+          {
+            \__fdudoc_swap_cr:
+            \__fdudoc_module_pop:n { \l__fdudoc_macro_code_line_tl }
+          }
+      }
+      { \tl_use:N \l__fdudoc_macro_code_line_tl }
+  }
+\cs_new_eq:NN \__fdudoc_macro_code_process_line:
+  \__fdudoc_process_normal_line:
+\DeclareDocumentCommand \CheckModules { }
+  {
+    \cs_set_eq:NN \__fdudoc_macro_code_process_line:
+      \__fdudoc_process_normal_line:
+  }
+\DeclareDocumentCommand \DontCheckModules { }
+  {
+    \cs_set_eq:NN \__fdudoc_macro_code_process_line:
+      \__fdudoc_output_line:
+  }
+\cs_new_protected:Npn \__fdudoc_check_angle:n #1
+  {
+    \str_if_eq_x:nnTF { \str_head:n {#1} } { < }
+      { \__fdudoc_check_module:x { \tl_tail:n {#1} } }
+      { \__fdudoc_output_comment_line: }
+  }
+\cs_generate_variant:Nn \__fdudoc_check_angle:n { x }
+\cs_new_protected:Npn \__fdudoc_check_module:n #1
+  {
+    \str_case_x:nnF { \str_head:n {#1} }
+      {
+        { * } { \__fdudoc_module_star:w }
+        { / } { \__fdudoc_module_slash:w }
+        { @ } { \__fdudoc_module_at:w }
+        { < } { \__fdudoc_module_verb:w }
+      }
+      { \__fdudoc_module_pm:w }
+    #1 \q_stop
+  }
+\cs_generate_variant:Nn \__fdudoc_check_module:n { x }
+\group_begin:
+  \char_set_catcode_active:N \>
+  \cs_new_protected:Npn \__fdudoc_module_star:w #1 > #2 \q_stop
+    {
+      \tl_set:Nn \l__fdudoc_tmpa_tl {#2}
+      \tl_if_eq:NNTF \l__fdudoc_tmpa_tl \c__fdudoc_active_cr_tl
+        {
+          \__fdudoc_output_module:nn
+            { \__fdudoc_star_color: }
+            {
+              \__fdudoc_module_push:n
+                { \__fdudoc_module_angle:n {#1} }
+            }
+        }
+        {
+          \__fdudoc_output_module_left:nn
+            { \__fdudoc_star_color: }
+            {
+              \__fdudoc_module_push:n
+                { \__fdudoc_module_angle:n {#1} }
+            }
+        }
+      \__fdudoc_output_line:n {#2}
+    }
+  \cs_new_protected:Npn \__fdudoc_module_slash:w #1 > #2 \q_stop
+    {
+      \tl_set:Nn \l__fdudoc_tmpa_tl {#2}
+      \tl_if_eq:NNTF \l__fdudoc_tmpa_tl \c__fdudoc_active_cr_tl
+        {
+          \__fdudoc_output_module:nn
+            { \__fdudoc_slash_color: }
+            {
+              \__fdudoc_module_pop:n
+                { \__fdudoc_module_angle:n {#1} }
+            }
+        }
+        {
+          \__fdudoc_output_module_left:nn
+            { \__fdudoc_slash_color: }
+            {
+              \__fdudoc_module_pop:n
+                { \__fdudoc_module_angle:n {#1} }
+            }
+        }
+      \__fdudoc_output_line:n {#2}
+    }
+  \cs_new_protected:Npn \__fdudoc_module_at:w @ @ = #1 > #2 \q_stop
+    {
+      \__fdudoc_output_module:nn
+        { \color { at at guard } }
+        { \__fdudoc_module_angle:n { @ @ = #1 } }
+      \tl_gset:Nn \g__codedoc_module_name_tl {#1}
+      \__fdudoc_output_line:n {#2}
+    }
+  \cs_new_protected:Npn \__fdudoc_module_verb:w #1 \q_stop
+    {
+      \cs_gset_eq:NN \__fdudoc_macro_code_process_line:
+        \__fdudoc_process_verbatim_line:
+      \tl_gset:Nx \g__fdudoc_macro_code_verbatim_stop_tl
+        { \c_percent_str \tl_tail:n {#1} }
+      \__fdudoc_output_module:nn
+        { \color { verb at guard } }
+        {
+          \__fdudoc_swap_cr:
+          \__fdudoc_module_push:n { \l__fdudoc_macro_code_line_tl }
+        }
+    }
+  \cs_new_protected:Npn \__fdudoc_module_pm:w #1 > #2 \q_stop
+    {
+      \__fdudoc_output_module_left:nn
+        { \__fdudoc_pm_color: }
+        { \__fdudoc_module_angle:n {#1} }
+      \__fdudoc_output_line:n {#2}
+    }
+\group_end:
+\cs_new_protected:Npn \__fdudoc_output_line:n #1
+  {
+    \tl_set:Nn \l__fdudoc_macro_code_line_tl {#1}
+    \tl_if_eq:NNTF
+      \l__fdudoc_macro_code_line_tl \c__fdudoc_active_cr_tl
+      { \tl_use:N \l__fdudoc_macro_code_line_tl }
+      {
+        \str_if_eq_x:nnTF
+          { \str_head:N \l__fdudoc_macro_code_line_tl } { \c_percent_str }
+          { \__fdudoc_output_comment_line: } { \__fdudoc_output_line: }
+      }
+  }
+\cs_new_protected_nopar:Npn \__fdudoc_output_line:
+  {
+    \tex_noindent:D
+    \__fdudoc_replace_at_at:N \l__fdudoc_macro_code_line_tl
+    \tl_use:N \l__fdudoc_macro_code_line_tl
+  }
+\cs_new_protected:Npn \__fdudoc_output_comment_line:
+  {
+    \tex_noindent:D
+    \group_begin:
+      \__fdudoc_swap_cr:
+      \color { code at gray } \slshape \__fdudoc_output_line:
+    \group_end:
+  }
+\cs_new_protected:Npn \__fdudoc_replace_at_at:N #1
+  {
+    \tl_if_empty:NF \g__codedoc_module_name_tl
+      { \__fdudoc_replace_at_at_aux:No #1 \g__codedoc_module_name_tl }
+  }
+\cs_new_protected:Npn \__fdudoc_replace_at_at_aux:Nn #1#2
+  {
+    \tl_replace_all:Nnn #1 { _ @ @ } { _ _ #2 }
+    \tl_replace_all:Nnn #1 {   @ @ } { _ _ #2 }
+  }
+\cs_generate_variant:Nn \__fdudoc_replace_at_at_aux:Nn { No }
+\cs_new_protected_nopar:Npn \__fdudoc_module_push:n
+  { \__fdudoc_module_push_aux:on { \int_use:N \c at HD@hypercount } }
+\cs_new_protected:Npn \__fdudoc_module_push_aux:nn #1
+  {
+    \seq_gpush:Nn \g__fdudoc_module_dest_seq {#1}
+    \hypersetup { hidelinks }
+    \exp_args:Nx \hdclindex
+      { \zref at extractdefault { HD.#1 } { guard at end } { 1 } } { }
+  }
+\cs_generate_variant:Nn \__fdudoc_module_push_aux:nn { on }
+\cs_new_protected_nopar:Npn \__fdudoc_module_pop:n
+  {
+    \seq_gpop:NNTF \g__fdudoc_module_dest_seq \l__fdudoc_tmpa_tl
+      { \__fdudoc_module_pop_aux:on { \l__fdudoc_tmpa_tl } }
+      { \BOOM \use:n }
+  }
+\cs_new_protected:Npn \__fdudoc_module_pop_aux:nn #1
+  {
+    \zref at labelbylist { HD.#1 } { fdudoc }
+    \hypersetup { hidelinks }
+    \hdclindex {#1} { }
+  }
+\cs_generate_variant:Nn \__fdudoc_module_pop_aux:nn { on }
+\seq_new:N \g__fdudoc_module_dest_seq
+\zref at newlist { fdudoc }
+\zref at newprop { guard at end } [ 1 ]
+  { \int_eval:n { \c at HD@hypercount - 1 } }
+\zref at addprop { fdudoc } { guard at end }
+\cs_set_protected:Npn \MacroFont
+  {
+    \linespread { 1.05 }
+    \small \ttfamily \mdseries \upshape
+    \__fdudoc_verb_addon:
+  }
+\cs_new_protected:Npn \__fdudoc_output_module:nn #1#2
+  {
+    \tex_noindent:D
+    \group_begin:
+      #1
+      \footnotesize \normalfont \sffamily #2
+    \group_end:
+  }
+\cs_new_protected:Npn \__fdudoc_output_module_left:nn #1#2
+  {
+    \tex_noindent:D
+    \hbox_overlap_left:n
+      {
+        \__fdudoc_output_module:nn {#1} {#2}
+        \skip_horizontal:n { \leftskip + \smallskipamount }
+      }
+  }
+\cs_new_protected_nopar:Npn \__fdudoc_star_color:
+  {
+    \seq_gpop:NNTF \g__fdudoc_star_color_seq \current at color
+      { \set at color }
+      { \__fdudoc_select_color: }
+    \seq_gpush:No \g__fdudoc_slash_color_seq { \current at color }
+  }
+\cs_new_protected_nopar:Npn \__fdudoc_slash_color:
+  {
+    \seq_gpop:NNTF \g__fdudoc_slash_color_seq \current at color
+      {
+        \set at color
+        \seq_gpush:No \g__fdudoc_star_color_seq { \current at color }
+      }
+      { \BOOM }
+  }
+\cs_new_protected_nopar:Npn \__fdudoc_pm_color:
+  {
+    \seq_get:NNTF \g__fdudoc_star_color_seq \current at color
+      { \set at color }
+      {
+        \__fdudoc_select_color:
+        \seq_gpush:No \g__fdudoc_star_color_seq { \current at color }
+      }
+  }
+\seq_new:N \g__fdudoc_star_color_seq
+\seq_new:N \g__fdudoc_slash_color_seq
+\cs_new_protected_nopar:Npn \__fdudoc_select_color:
+  { \color { guard at series!!+ } }
+\definecolorseries { guard at series }
+  { cmyk } { last } { blue } { purple }
+\resetcolorseries [ 3 ] { guard at series }
+\definecolor { verb at guard } { named } { MaterialLime600 }
+\definecolor { at at guard   } { named } { MaterialPink    }
+\definecolor { code at gray  } { named } { MaterialGrey    }
+\cs_new_protected:Npn \__fdudoc_module_angle:n #1
+  { \textlangle #1 \textrangle }
+\cs_new_protected_nopar:Npn \__fdudoc_code_line_no:
+  {
+    \int_gincr:N \c at CodelineNo
+    \hbox_overlap_left:n
+      {
+        \hbox_to_wd:nn
+          { \MacroIndent }
+          {
+            \HD at target
+            \tex_hss:D \__fdudoc_code_line_no_style:
+            \theCodelineNo \enspace
+          }
+        \tex_kern:D \@totalleftmargin
+      }
+  }
+\tl_set:Nn \theCodelineNo { \arabic { CodelineNo } }
+\cs_new_protected_nopar:Npn \__fdudoc_code_line_no_style:
+  { \color { code at gray } \normalfont \sffamily \tiny }
+\cs_set_protected:Npn \HD at SetMacroIndent #1
+  {
+    \group_begin:
+      \settowidth \MacroIndent
+        {
+          \__fdudoc_code_line_no_style:
+          \prg_replicate:nn { \tl_count:n {#1} } { 0 }
+          \enspace
+        }
+      \dim_gset_eq:NN \MacroIndent \MacroIndent
+    \group_end:
+  }
+\sys_if_engine_xetex:TF
+  {
+    \cs_set_eq:NN \__fdudoc_verb_addon: \xeCJKVerbAddon
+    \cs_set:Nn \__fdudoc_plain_punct_style:
+      { \xeCJKsetup { PunctStyle = plain } }
+    \cs_set:Nn \__fdudoc_disable_ecglue:
+      { \xeCJKsetup { CJKecglue } }
+    \__fdudoc_appto_cmd:Nn \meta at font@select
+      { \mode_if_inner:T { \__fdudoc_disable_ecglue: } }
+  }
+  {
+    \cs_set_eq:NN \__fdudoc_verb_addon:        \prg_do_nothing:
+    \cs_set_eq:NN \__fdudoc_plain_punct_style: \prg_do_nothing:
+    \cs_set:Nn \__fdudoc_disable_ecglue:
+      { \ltjsetparameter { autoxspacing = false } }
+    \__fdudoc_appto_cmd:Nn \meta at font@select
+      { \__fdudoc_disable_ecglue: }
+  }
+\BeforeBeginEnvironment { function }
+  { \par \nointerlineskip }
+\AtEndEnvironment { function }
+  {
+    \par
+    \cs_gset:Nx \__fdudoc_fix_previous_depth:
+      { \prevdepth = \the \prevdepth \space }
+  }
+\AfterEndEnvironment { function }
+  { \__fdudoc_fix_previous_depth: }
+\AtBeginEnvironment { syntax }
+  {
+    \linespread { 1.2 }
+    \__fdudoc_plain_punct_style:
+    \__fdudoc_disable_ecglue:
+  }
+\AtBeginEnvironment { fdusyntax }
+  {
+    \cs_set:Npn \lparen { \textup { ( } }
+    \cs_set:Npn \rparen { \textup { ) } }
+    \char_set_catcode_active:N |
+    \char_set_catcode_active:N <
+    \char_set_catcode_active:N (
+    \char_set_active_eq:NN | \orbar
+    \char_set_active_eq:NN < \syntaxopt at aux
+    \char_set_active_eq:NN ( \defaultval at aux
+  }
+\cs_new_eq:NN \__fdudoc_ltx_changes:nnn \changes@
+\cs_set_protected:Npn \changes@ #1#2
+  {
+    \__fdudoc_save_version_date:nn {#1} {#2}
+    \__fdudoc_ltx_changes:nnn {#1} {#2}
+  }
+\prop_new:N \g__fdudoc_version_date_prop
+\cs_new_protected:Npn \__fdudoc_save_version_date:nn #1#2
+  {
+    \prop_get:NnNTF \g__fdudoc_version_date_prop
+      {#1} \l__fdudoc_tmpa_tl
+      {
+        \exp_after:wN
+          \__fdudoc_save_version_date_aux:nnnn \l__fdudoc_tmpa_tl
+        {#2} {#1}
+      }
+      { \__fdudoc_save_version_date_aux:nnn {#1} {#2} {#2} }
+  }
+\cs_new_protected:Npn \__fdudoc_save_version_date_aux:nnnn #1#2#3#4
+  {
+    \__fdudoc_if_date_later:nnTF {#1} {#3}
+      { \__fdudoc_save_version_date_aux:nnn {#4} {#3} {#2} }
+      {
+        \__fdudoc_if_date_later:nnT {#3} {#2}
+          { \__fdudoc_save_version_date_aux:nnn {#4} {#1} {#3} }
+      }
+  }
+\cs_new_protected:Npn \__fdudoc_save_version_date_aux:nnn #1#2#3
+  { \prop_gput:Nnn \g__fdudoc_version_date_prop {#1} { {#2} {#3} } }
+\prg_new_conditional:Npnn \__fdudoc_if_date_later:nn #1#2 { TF, T }
+  {
+    \if_int_compare:w
+        \__fdudoc_parse_date:w #1 / / / 0 \q_stop >
+        \__fdudoc_parse_date:w #2 / / / 0 \q_stop \exp_stop_f:
+      \prg_return_true:
+    \else:
+      \prg_return_false:
+    \fi:
+  }
+\cs_new:Npn \__fdudoc_parse_date:w #1/#2/#3/ #4 \q_stop
+  { #1#2#3 }
+\cs_new_protected:Npn \CTEX at versionitem #1 \efill
+  {
+    \@idxitem
+    \prop_get:NnNTF \g__fdudoc_version_date_prop
+      {#1} \l__fdudoc_tmpa_tl
+      {
+        \exp_after:wN
+          \__fdudoc_print_version_date:nnn \l__fdudoc_tmpa_tl
+        {#1}
+      }
+      { \BOOM }
+  }
+\cs_new_protected:Npn \__fdudoc_print_version_date:nnn #1#2#3
+  {
+    \noindent
+    \Hy at raisedlink { \belowpdfbookmark {#3} { HD.#3 } }
+    \textbf {#3} \hfill
+    \hbox:n
+      {
+        \footnotesize
+        \str_if_eq:nnTF {#1} {#2}
+          { ( #1 ) } { ( #1 ~ -- ~ #2 ) }
+      }
+    \par \nopagebreak
+  }
+\ctex_patch_cmd:Nnn \HDorg at theglossary
+  { \let \item \@idxitem }
+  { \let \item \CTEX at versionitem }
+\ctex_patch_cmd:Nnn \@wrglossary
+  { hdpindex }
+  {
+    \ifnum \c at HD@hypercount = \z@
+      hdpindex
+    \else
+      hdclindex { \the \c at HD@hypercount }
+    \fi
+  }
+\ctex_patch_cmd:Nnn \@addtocurcol
+  { \vskip \intextsep }
+  {
+    \edef \save at first@penalty { \the \lastpenalty } \unpenalty
+    \ifnum \lastpenalty = \@M
+      \unpenalty
+    \else
+      \penalty \save at first@penalty \relax
+    \fi
+    \ifnum \outputpenalty < -\@Mii
+      \addvspace\intextsep
+      \vskip\parskip
+    \else
+      \addvspace\intextsep
+    \fi
+  }
+\ctex_patch_cmd:Nnn \@addtocurcol
+  {
+    \vskip \intextsep
+    \ifnum \outputpenalty < -\@Mii
+      \vskip -\parskip
+    \fi
+  }
+  {
+    \ifnum \outputpenalty < -\@Mii
+      \aftergroup \vskip \aftergroup \intextsep
+      \aftergroup \nointerlineskip
+    \else
+      \vskip \intextsep
+    \fi
+  }
+\ctex_patch_cmd:Nnn \@getpen { \@M } { \@Mi }
+\ctex_patch_cmd:Nnn \l at section    { 2.5em } { 1.5em }
+\ctex_patch_cmd:Nnn \l at subsection { 2.5em } { 1.5em }
+\__fdudoc_preto_cmd:Nn \@thehead
+  { \cs_set_eq:cN { MakeUppercase \space } \@iden }
+\ctex_patch_cmd:Nnn \HDorg at thebibliography
+  { \section* } { \section }
+\cs_set_eq:NN \thebibliography \HDorg at thebibliography
+\__fdudoc_appto_cmd:Nn \GlossaryParms
+  {
+    \raggedcolumns
+    \cs_set_eq:NN \Hy at writebookmark \HDorg at writebookmark
+    \cs_set:Npn \@idxitem   { \par \hangindent 2em }
+    \cs_set:Npn \subitem    { \@idxitem \hspace* { 1em } }
+    \cs_set:Npn \subsubitem { \@idxitem \hspace* { 2em } }
+  }
+\ctex_patch_cmd:Nnn \HoLogo at LaTeXe
+  { \hbox { \HOLOGO at MathSetup 2 $ _{ \textstyle \varepsilon } $ } }
+  {
+    \hbox
+      {
+        \mathsurround 0pt \relax
+        2
+        \if b \expandafter \@car \f at series \@nil
+          $ _{ \textstyle \symbf { \varepsilon } } $
+        \else
+          $ _{ \textstyle \varepsilon } $
+        \fi
+      }
+  }
+\ctex_patch_cmd:Nnn \SpecialMainEnvIndex
+  { (environment) } { ~ 环境 }
+\ctex_patch_cmd:Nnn \SpecialMainEnvIndex
+  { environments: } { 环境: }
+\ctex_patch_cmd:Nnn \HDorg at SpecialEnvIndex
+  { (environment) } { ~ 环境 }
+\ctex_patch_cmd:Nnn \HDorg at SpecialEnvIndex
+  { environments: } { 环境: }
+\cs_set_eq:NN \list \__codedoc_oldlist:nn
+\__fdudoc_patch_cmd:Nnn \__codedoc_function_descr_start:w
+  { \noindent }
+  { \skip_vertical:n { -\parskip } \noindent }
+\__fdudoc_preto_cmd:Nn \__codedoc_function_assemble:
+  {
+    \box_if_empty:NTF \g__codedoc_syntax_box
+      { \skip_zero:N \medskipamount }
+      { \skip_add:Nn \medskipamount { \parskip } }
+  }
+\__fdudoc_patch_cmd:Nnn \__codedoc_typeset_functions:
+  { \small \ttfamily } { \footnotesize \CodeFont }
+\__fdudoc_preto_cmd:Nn \__codedoc_typeset_functions:
+  { \MacroFont }
+\__fdudoc_patch_cmd:Nnn \__codedoc_macro_init:
+  { \hbox:n } { \MacroFont \hbox:n }
+\__fdudoc_patch_cmd:Nnn \__codedoc_macro_dump:
+  { \hbox_unpack_clear:N } { \MacroFont \hbox_unpack_clear:N }
+\cs_set_eq:NN \__codedoc_macro_end_style:n \use_none:n
+\cs_set_protected:Npn \__codedoc_typeset_TF:
+  {
+    \group_begin:
+      \exp_args:No \__codedoc_if_macro_internal:nT \l__codedoc_tmpa_tl
+        { \color [ gray ] { 0.5 } }
+      \itshape TF
+      \makebox [ 0 pt ] [ r ]
+        {
+          \color { red }
+          \underline { \phantom { \itshape TF } \kern -0.1 em }
+        }
+    \group_end:
+  }
+\cs_set_protected:Npn \__codedoc_macro_typeset_one:nN #1#2
+  {
+    \vbox_set:Nn \l__codedoc_macro_box
+      {
+        \MacroFont
+        \vbox_unpack_clear:N \l__codedoc_macro_box
+        \hbox_set:Nn \l_tmpa_box
+          { \__codedoc_print_macroname:nN {#1} #2 }
+        \dim_set:Nn \l_tmpa_dim
+          { \marginparwidth - \labelsep - \marginparsep }
+        \dim_compare:nNnT { \box_wd:N \l_tmpa_box } > \l_tmpa_dim
+          {
+            \box_resize_to_wd_and_ht:Nnn \l_tmpa_box
+              { \l_tmpa_dim } { \box_ht:N \l_tmpa_box }
+          }
+        \hbox_overlap_left:n
+          {
+            \box_use:N \l_tmpa_box
+            \skip_horizontal:n { \marginparsep - \labelsep }
+          }
+      }
+    \int_incr:N \l__codedoc_macro_int
+  }
+\cs_set_protected:Npn \__codedoc_print_macroname:nN #1#2
+  {
+    \strut
+    \__codedoc_get_hyper_target:xN
+      {
+        \exp_not:n {#1}
+        \bool_if:NT #2 { \tl_to_str:n {TF} }
+      }
+      \l__codedoc_tmpa_tl
+    \cs_if_exist:cTF { r@ \l__codedoc_tmpa_tl }
+      { \exp_args:NNo \label at hyperref [ \l__codedoc_tmpa_tl ] }
+      { \use:n }
+      {
+        \tl_set:Nn \l__codedoc_tmpa_tl {#1}
+        \tl_replace_all:Non \l__codedoc_tmpa_tl
+          { \c_catcode_other_space_tl }
+          { \fontspec_visible_space: }
+        \__codedoc_macroname_prefix:o \l__codedoc_tmpa_tl
+        \__codedoc_macroname_suffix:N #2
+      }
+  }
+\cs_set_protected:Npn \__codedoc_special_index_module:nnnnN #1#2#3#4#5
+  {
+    \use:x
+      {
+        \exp_not:n { \__codedoc_special_index_aux:nnnnnnn {#1} {#2} }
+          \tl_if_empty:nTF {#3}
+            { { } { } { } { } }
+            {
+              \str_if_eq_x:nnTF {#3} { TeX }
+                {
+                  { TeX~ and~ LaTeX2e }
+                  { \string \TeX{}~ 和~ \string \LaTeXe{} }
+                }
+                { {#3} { \string \pkg {#3} } }
+              \bool_if:NTF #5
+                { { commands~ internal } { ~ 内部命令: } }
+                { { commands           } { ~ 命令:     } }
+            }
+      }
+    {#4}
+  }
+\cs_new_protected:Npn \__codedoc_special_index_aux:nnnnnnn #1#2#3#4#5#6#7
+  {
+    \tl_set:Nn \l__codedoc_index_escaped_key_tl {#1}
+    \__codedoc_quote_special_char:N \l__codedoc_index_escaped_key_tl
+    \__codedoc_special_index_set:Nn
+      \l__codedoc_index_escaped_macro_tl {#2}
+    \str_if_eq:onTF { \@currenvir } { macrocode }
+      { \codeline at wrindex }
+      {
+        \str_case:nnF {#7}
+          {
+            { main  } { \codeline at wrindex }
+            { usage } { \index }
+          }
+          { \HD at target \index }
+      }
+      {
+        \tl_if_empty:nF { #3 #4 #5 #6 }
+          { #3 #5 \actualchar #4 #6 \levelchar }
+        \l__codedoc_index_escaped_key_tl
+        \actualchar
+        {
+          \token_to_str:N \verbatim at font \c_space_tl
+          \l__codedoc_index_escaped_macro_tl
+        }
+        \encapchar
+        hdclindex { \the \c at HD@hypercount } {#7}
+      }
+  }
+\DeclareDocumentCommand \StopSpecialIndexModule { }
+  {
+    \cs_set_eq:NN
+      \__codedoc_special_index_module:nnnnN \use_none:nnnnn
+  }
+\tl_map_inline:nn { \actualchar \encapchar \levelchar }
+  { \exp_args:Nx \DoNotIndex { \bslash \tl_to_str:N #1 } }
+\RenewDocumentCommand \meta { m }
+  {
+    \group_begin:
+      \sys_if_engine_xetex:T { \xeCJKsetup { CJKecglue = { } } }
+      \rmfamily \__codedoc_meta:n {#1}
+    \group_end:
+  }
+\msg_redirect_name:nnn { l3doc } { foreign-internal    } { log }
+\msg_redirect_name:nnn { l3doc } { print-changes-howto } { log }
+\msg_redirect_name:nnn { l3doc } { print-index-howto   } { log }
+\ExplSyntaxOff
+\AtBeginDocument{%
+  \addtocontents{toc}{\StopSpecialIndexModule}}
+\pdfstringdefDisableCommands{%
+  \let\path\meta
+  \let\opt\@firstofone
+  \let\kaishu\relax}
+\renewcommand\@makefntext[1]{\parindent 0em\noindent\@makefnmark~#1}
+\IndexPrologue{%
+  \section{\indexname}%
+  \textit{无衬线字体的数字表示对应索引项出现的页码;
+    带下划线的数字表示定义对应索引项的代码行号;
+    其他普通数字则表示使用对应索引项的代码行号.}}
+\def\IndexLayout{%
+  \newgeometry{%
+    left   = 0.85 in,
+    right  = 0.85 in,
+    top    = 1.25 in,
+    bottom = 1.00 in}%
+  \setlength\IndexMin{0.5\textheight}%
+  \ctexset{section/numbering=false}%
+  \StopSpecialIndexModule}
+\def\indexname{代码索引}
+\def\usage#1{\textsf{#1}}
+\GlossaryPrologue{\section{\glossaryname}}
+\def\glossaryname{修订记录}
+\setmainfont{TeX Gyre Pagella}
+\setsansfont{TeX Gyre Heros}
+\setmathfont{TeX Gyre Pagella Math}
+\setCJKmainfont{FZShuSong-Z01}%
+  [
+    BoldFont       = FZHei-B01,
+    ItalicFont     = FZKai-Z03,
+    BoldItalicFont = FZKai-Z03
+  ]
+\setCJKsansfont{FZHei-B01}%
+  [
+    BoldFont       = FZHei-B01,
+    ItalicFont     = FZKai-Z03,
+    BoldItalicFont = FZKai-Z03
+  ]
+\setCJKmonofont{FZFangSong-Z02}%
+  [
+    BoldFont       = FZHei-B01,
+    ItalicFont     = FZKai-Z03,
+    BoldItalicFont = FZKai-Z03
+  ]
+\newCJKfontfamily\kaishu{FZKai-Z03}%
+  [BoldFont = *, ItalicFont = *, BoldItalicFont = *]
+\newCJKfontfamily\fangsong{FZFangSong-Z02}%
+  [BoldFont = *, ItalicFont = *, BoldItalicFont = *]
+\setmonofont{CMU Typewriter Text}%
+  [
+    UprightFont = * Light,
+    BoldFont    = * Bold,
+    SlantedFont = * Light Oblique,
+    HyphenChar  = None
+  ]
+\newfontfamily\fdudoc at code@font{Source Code Pro}%
+  [BoldFont = * Semibold]
+\newCJKfontfamily\fdudoc at cjk@code at font{Source Han Sans SC}%
+  [BoldFont = * Bold, AutoFakeSlant = 0.22]
+\newcommand*\CodeFont{\fdudoc at code@font\fdudoc at cjk@code at font}
+\ctexset
+  {
+    section = {name = {第,节}, format+ = \raggedright},
+    subsubsection/tocline = {\kaishu\CTEXnumberline{#1}#2},
+    paragraph = {runin = false, numbering = false}
+  }
+\setcounter{secnumdepth}{4}
+\setcounter{tocdepth}{3}
+\sisetup
+  {
+    number-math-rm       = \ensuremath,
+    inter-unit-product   = \ensuremath{{}\cdot{}},
+    group-digits         = true,
+    group-minimum-digits = 4,
+    group-separator      = \text{~},
+    range-phrase         = \symbol{"FF5E},
+    separate-uncertainty = true
+  }
+\hypersetup
+  {
+    bookmarksdepth    = 4,
+    bookmarksnumbered = true,
+    colorlinks        = true,
+    citecolor         = MaterialGreen,
+    linkcolor         = MaterialPink,
+    urlcolor          = MaterialIndigo
+  }
+\captionsetup{labelsep = quad, labelfont+ = bf}
+\setlist{noitemsep, topsep=\smallskipamount}
+\setlist[1]{labelindent=\parindent}
+\setlist[enumerate]{leftmargin=*}
+\setlist[itemize]{leftmargin=*}
+\newlist{optdesc}{description}{3}
+\setlist[optdesc]{%
+  font=\mdseries\small\ttfamily, align=right,
+  listparindent=\parindent,
+  labelsep=\marginparsep, labelindent=-\marginparsep,
+  leftmargin=*}
+\renewlist{tablenotes}{description}{1}
+\setlist[tablenotes]{%
+  format=\normalfont\tnote at item, align=right,
+  listparindent=\parindent, labelindent=\tabcolsep,
+  leftmargin=*, rightmargin=\tabcolsep,
+  after=\@noparlisttrue}
+\AtBeginEnvironment{tablenotes}{%
+  \setlength\parindent{2\ccwd}%
+  \normalfont\footnotesize}
+\AtBeginEnvironment{threeparttable}{%
+  \stepcounter{tpt at id}%
+  \edef\curr at tpt@id{tpt@\arabic{tpt at id}}}
+\newcounter{tpt at id}
+\def\tnote at item#1{%
+  \Hy at raisedlink{\hyper at anchor{\curr at tpt@id-#1}}#1}
+\def\TPTtagStyle#1{\hyperlink{\curr at tpt@id-#1}{#1}}
+\def\UrlAlphabet{%
+  \do\a\do\b\do\c\do\d\do\e\do\f\do\g\do\h\do\i\do\j%
+  \do\k\do\l\do\m\do\n\do\o\do\p\do\q\do\r\do\s\do\t%
+  \do\u\do\v\do\w\do\x\do\y\do\z\do\A\do\B\do\C\do\D%
+  \do\E\do\F\do\G\do\H\do\I\do\J\do\K\do\L\do\M\do\N%
+  \do\O\do\P\do\Q\do\R\do\S\do\T\do\U\do\V\do\W\do\X%
+  \do\Y\do\Z}
+\def\UrlDigits{%
+  \do\1\do\2\do\3\do\4\do\5\do\6\do\7\do\8\do\9\do\0}
+\g at addto@macro\UrlBreaks{\UrlOrds}
+\g at addto@macro\UrlBreaks{\UrlAlphabet}
+\g at addto@macro\UrlBreaks{\UrlDigits}
+\DoNotIndex{\begin,\end,
+  \a,\b,\c,\d,\e,\f,\g,\h,\i,\j,\k,\l,\m,
+  \n,\o,\p,\q,\r,\s,\t,\u,\v,\w,\x,\y,\z,
+  \A,\B,\C,\D,\E,\F,\G,\H,\I,\J,\K,\L,\M,
+  \N,\O,\P,\Q,\R,\S,\T,\U,\V,\W,\X,\Y,\Z,
+  \0,\1,\2,\3,\4,\5,\6,\7,\8,\9}
+\EnableCrossrefs
+\CodelineIndex
+\RecordChanges
+\newcommand*\exptarget{\Hy at raisedlink{\hypertarget{expstar}{}}}
+\newcommand*\rexptarget{\Hy at raisedlink{\hypertarget{rexpstar}{}}}
+\newcommand*\expstar{\hyperlink{expstar}{$\star$}}
+\newcommand*\rexpstar{\hyperlink{rexpstar}{\ding{73}}}
+\renewcommand*\expstar{\hyperlink{expstar}{$\mfrake$}}
+\renewcommand*\rexpstar{\hyperlink{rexpstar}{$\mfrakc$}}
+\ExplSyntaxOn
+\cs_set_eq:NN \__codedoc_typeset_exp:  \expstar
+\cs_set_eq:NN \__codedoc_typeset_rexp: \rexpstar
+\ExplSyntaxOff
+\renewcommand*\marg[1]{\{\meta{#1}\}}
+\renewcommand*\oarg[1]{[\meta{#1}]}
+\renewcommand*\parg[1]{(\meta{#1})}
+\DeclareDocumentCommand\opt{m}{\texttt{#1}}
+\DeclareDocumentCommand\kvopt{mm}
+  {\texttt{#1\breakablethinspace=\breakablethinspace#2}}
+\def\breakablethinspace{\hskip 0.16667em\relax}
+\def\syntaxopt#1{\textit{#1}}
+\def\defaultval#1{\textbf{\textup{#1}}}
+\def\syntaxopt at aux#1>{\syntaxopt{#1}}
+\def\defaultval at aux#1){\defaultval{#1}}
+\def\orbar{\textup{\textbar}}
+\def\TF{true\orbar false}
+\def\TTF{\defaultval{true}\orbar false}
+\def\TFF{true\orbar\defaultval{false}}
+\DeclareDocumentEnvironment{arguments}{}
+  {\enumerate[%
+    label={\texttt{\#\arabic*:~}}, labelsep=0pt, nolistsep]}%
+  {\endenumerate}
+\def\TeX{\hologo{TeX}}
+\def\LaTeX{\hologo{LaTeX}}
+\def\LaTeXe{\hologo{LaTeXe}}
+\def\pdfTeX{\hologo{pdfTeX}}
+\def\pdfLaTeX{\hologo{pdfLaTeX}}
+\def\XeTeX{\hologo{XeTeX}}
+\def\XeLaTeX{\hologo{XeLaTeX}}
+\def\LuaTeX{\hologo{LuaTeX}}
+\def\LuaLaTeX{\hologo{LuaLaTeX}}
+\def\AmSLaTeX{\hologo{AmSLaTeX}}
+\def\TeXLive{\TeX\ Live}
+\def\MiKTeX{\hologo{MiKTeX}}
+\def\BibTeX{\hologo{BibTeX}}
+\def\BibTeX{\hologo{BibTeX}}
+\def\biber{\hologo{biber}}
+\def\TikZ{Ti\emph{k}Z}
+\renewcommand*\env[1]{\textbf{\texttt{#1}}}
+\newcommand*\bashcmd[1]{\texttt{#1}}
+\newcommand*\scite[1]{\textsuperscript{\cite{#1}}}
+\DeclareDocumentEnvironment{quote*}{oo}
+  {\quote\fangsong\qquad}%
+  {\endquote\IfNoValueF{#1}{%
+    \hfill —— \IfNoValueF{#2}{〔#2〕}#1}}
+\lst at CCPutMacro\lst at ProcessOther {"2D}{\lst at ttfamily{-{}}{-{}}}
+\@empty\z@\@empty
+\lstdefinestyle{style at base}
+  {
+    extendedchars   = true,
+    gobble          = 3,
+    lineskip        = 2 pt,
+    frame           = l,
+    framerule       = 1 pt,
+    framesep        = 0 pt,
+    escapeinside    = {(*}{*)},
+    basicstyle      = \small\CodeFont\color{MaterialGrey900},
+    keywordstyle    = \bfseries\color{MaterialIndigo},
+    commentstyle    = \itshape\color{MaterialGrey600},
+    stringstyle     = \color{MaterialRed},
+    backgroundcolor = \color{MaterialGrey50}
+  }
+\lstdefinestyle{style at shell}
+  {
+    style      = style at base,
+    rulecolor  = \color{MaterialPink},
+    language   = bash,
+    alsoletter = {-},
+    emphstyle  = \color{MaterialGreen800}
+  }
+\lstdefinestyle{style at latex}
+  {
+    style      = style at base,
+    rulecolor  = \color{MaterialIndigo},
+    language   = [LaTeX]TeX,
+    alsoletter = {*, -},
+    texcsstyle = *\color{MaterialDeepOrange},
+    emphstyle  = [1]\color{MaterialGreen800},
+    emphstyle  = [2]\color{MaterialTeal}
+  }
+\lstdefinestyle{style at syntax}
+  {
+    extendedchars = true,
+    gobble        = 6,
+    escapeinside  = {(*}{*)},
+    language      = [LaTeX]TeX,
+    alsoletter    = {*, -},
+    basicstyle    = \footnotesize\CodeFont\color{MaterialGrey900},
+    keywordstyle  = \bfseries\color{MaterialIndigo},
+    commentstyle  = \itshape\color{MaterialGrey600},
+    texcsstyle    = *\color{MaterialDeepOrange},
+    emphstyle     = [1]\color{MaterialGreen800},
+    emphstyle     = [2]\color{MaterialTeal}
+  }
+\lstnewenvironment{shellexample}[1][]{%
+  \lstset{style=style at shell, #1}}{}
+\lstnewenvironment{latexexample}[1][]{%
+  \lstset{style=style at latex, #1}}{}
+\lstnewenvironment{fdusyntax}[1][]{%
+  \lstset{style=style at syntax, #1}\vspace{-1.8ex}}{}
+\endinput
+%%
+%% End of file `fdudoc.cls'.


Property changes on: trunk/Master/texmf-dist/tex/latex/fduthesis/fdudoc.cls
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/fduthesis/fdulogo.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/fduthesis/fdulogo.sty	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/fduthesis/fdulogo.sty	2018-04-09 21:17:26 UTC (rev 47408)
@@ -0,0 +1,2253 @@
+%%
+%% This is file `fdulogo.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% fduthesis.dtx  (with options: `logo')
+%% fduthesis-logo.dtx  (with options: `logo')
+%% 
+%%     Copyright (C) 2017, 2018 by Xiangdong Zeng <xdzeng96 at gmail.com>
+%% 
+%%     This work may be distributed and/or modified under the
+%%     conditions of the LaTeX Project Public License, either
+%%     version 1.3c of this license or (at your option) any later
+%%     version. The latest version of this license is in:
+%% 
+%%       http://www.latex-project.org/lppl.txt
+%% 
+%%     and version 1.3 or later is part of all distributions of
+%%     LaTeX version 2005/12/01 or later.
+%% 
+%%     This work has the LPPL maintenance status `maintained'.
+%% 
+%%     The Current Maintainer of this work is Xiangdong Zeng.
+%% 
+%%     This work consists of the files fduthesis.dtx,
+%%                                     fduthesis-doc.dtx,
+%%                                     fduthesis-logo.dtx,
+%%                                     fduthesis-template.tex,
+%%               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,
+%%                                     fduthesis.pdf,
+%%                                     fduthesis-en.pdf,
+%%                                     fduthesis-code.pdf,
+%%                                     latexmkrc,
+%%                                     latexmkrc-en,
+%%                                 and README.md.
+%% 
+\NeedsTeXFormat{LaTeX2e}
+\RequirePackage{expl3}
+\GetIdInfo $Id: fduthesis.dtx 0.7a 2018-04-09 12:00:00Z Xiangdong Zeng <xdzeng96 at gmail.com> $
+  {Fudan University's Visual Identity}
+\ProvidesExplPackage{fdulogo}
+  {\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription}
+\RequirePackage { luatex85 }
+\RequirePackage { xcolor, tikz }
+\RequirePackage { xparse }
+\NewDocumentCommand \fduname { O { } }
+  {
+    \__fdulogo_tikz:Nx \fdulogo at name
+      { \l__fdulogo_default_arg_tl, #1 }
+  }
+\NewDocumentCommand \fduemblem { t+ s O { } }
+  {
+    \__fdulogo_tikz:cx
+      {
+        \IfBooleanTF {#1}
+          {
+            \IfBooleanTF {#2}
+              { fdulogo at emblem@new at reversed } { fdulogo at emblem@new }
+          }
+          {
+            \IfBooleanTF {#2}
+              { fdulogo at emblem@reversed } { fdulogo at emblem }
+          }
+      }
+      { \l__fdulogo_default_arg_tl, #3 }
+  }
+\NewDocumentCommand \fdumotto { O { } }
+  {
+    \__fdulogo_tikz:Nx \fdulogo at motto
+      { \l__fdulogo_default_arg_tl, #1 }
+  }
+\tl_const:Nn \l__fdulogo_default_arg_tl { x = 1 pt, y = 1 pt }
+\cs_new_protected:Npn \__fdulogo_tikz:Nn #1#2
+  {
+    \begin{tikzpicture} [#2]
+      #1
+    \end{tikzpicture}
+  }
+\cs_generate_variant:Nn \__fdulogo_tikz:Nn { Nx, cx }
+\definecolor { FudanBlue } { HTML } { 0E419C }
+\definecolor { FudanRed  } { HTML } { C80000 }
+\definecolor { MaterialGrey } { HTML } { 9E9E9E }
+\ExplSyntaxOff
+\def\fdulogo at name{%
+  \fill \fdulogo at name@fu
+        \fdulogo at name@dan
+        \fdulogo at name@da
+        \fdulogo at name@xue;}
+\def\fdulogo at emblem{%
+  \fill \fdulogo at emblem@kernel
+        \fdulogo at emblem@text
+        \fdulogo at emblem@year
+        \fdulogo at emblem@ring at inner@i
+        \fdulogo at emblem@ring at inner@ii
+        \fdulogo at emblem@ring at outer@i
+        \fdulogo at emblem@ring at outer@ii;}
+\def\fdulogo at emblem@reversed{%
+  \fill \fdulogo at emblem@text
+        \fdulogo at emblem@year;
+  \fill[even odd rule]
+        \fdulogo at emblem@kernel
+        \fdulogo at emblem@ring at inner@i
+        \fdulogo at emblem@ring at outer@i
+        \fdulogo at emblem@ring at outer@ii;}
+\def\fdulogo at emblem@text{%
+  \fdulogo at emblem@F
+  \fdulogo at emblem@U at i
+  \fdulogo at emblem@D
+  \fdulogo at emblem@A
+  \fdulogo at emblem@N at i
+  \fdulogo at emblem@U at ii
+  \fdulogo at emblem@N at ii
+  \fdulogo at emblem@I at i
+  \fdulogo at emblem@V
+  \fdulogo at emblem@E
+  \fdulogo at emblem@R
+  \fdulogo at emblem@S
+  \fdulogo at emblem@I at ii
+  \fdulogo at emblem@T
+  \fdulogo at emblem@Y}
+\def\fdulogo at emblem@year{%
+  \fdulogo at emblem@one
+  \fdulogo at emblem@nine
+  \fdulogo at emblem@zero
+  \fdulogo at emblem@five}
+\def\fdulogo at emblem@new{%
+  \fill \fdulogo at emblem@new at kernel
+        \fdulogo at emblem@new at text
+        \fdulogo at emblem@new at year;
+  \fill[even odd rule]
+        \fdulogo at emblem@new at ring@inner at i
+        \fdulogo at emblem@new at ring@inner at ii
+        \fdulogo at emblem@new at ring@outer at i
+        \fdulogo at emblem@new at ring@outer at ii;}
+\def\fdulogo at emblem@new at reversed{%
+  \fill \fdulogo at emblem@new at text
+        \fdulogo at emblem@new at year;
+  \fill[even odd rule]
+        \fdulogo at emblem@new at kernel
+        \fdulogo at emblem@new at ring@inner at i
+        \fdulogo at emblem@new at ring@outer at i
+        \fdulogo at emblem@new at ring@outer at ii;}
+\def\fdulogo at emblem@new at text{%
+  \fdulogo at emblem@new at F
+  \fdulogo at emblem@new at U@i
+  \fdulogo at emblem@new at D
+  \fdulogo at emblem@new at A
+  \fdulogo at emblem@new at N@i
+  \fdulogo at emblem@new at U@ii
+  \fdulogo at emblem@new at N@ii
+  \fdulogo at emblem@new at I@i
+  \fdulogo at emblem@new at V
+  \fdulogo at emblem@new at E
+  \fdulogo at emblem@new at R
+  \fdulogo at emblem@new at S
+  \fdulogo at emblem@new at I@ii
+  \fdulogo at emblem@new at T
+  \fdulogo at emblem@new at Y}
+\def\fdulogo at emblem@new at year{%
+  \fdulogo at emblem@new at one
+  \fdulogo at emblem@new at nine
+  \fdulogo at emblem@new at zero
+  \fdulogo at emblem@new at five}
+\def\fdulogo at motto{%
+  \fill \fdulogo at motto@i
+        \fdulogo at motto@ii;}
+\def\fdulogo at motto@i{%
+  \fdulogo at motto@bo
+  \fdulogo at motto@xue
+  \fdulogo at motto@er at i
+  \fdulogo at motto@du
+  \fdulogo at motto@zhi}
+\def\fdulogo at motto@ii{%
+  \fdulogo at motto@qie
+  \fdulogo at motto@wen
+  \fdulogo at motto@er at ii
+  \fdulogo at motto@jin
+  \fdulogo at motto@si}
+\def\fduthesis at cover{%
+  \hspace{1.5cm}
+  \begin{tikzpicture}[x=1pt, y=1pt, scale=1.1, color=MaterialGrey]
+    \useasboundingbox ( 100, -140) rectangle ( 800,  800);
+    \fdulogo at emblem@new
+  \end{tikzpicture}
+  \begin{tikzpicture}[x=1pt, y=1pt]
+    \useasboundingbox ( 750, -150) rectangle (1350,  850);
+    \fill \fdulogo at motto@i;
+  \end{tikzpicture}
+  \begin{tikzpicture}[x=1pt, y=1pt]
+    \useasboundingbox (1280,   10) rectangle (1880, 1210);
+    \fill \fdulogo at motto@ii;
+  \end{tikzpicture}
+  \hspace*{-42.5cm}}
+\def\fdulogo at name@fu{%
+  ( 86.79426450, 309.23000203)
+    .. controls ( 90.52759774, 306.43000210) and ( 95.27426428, 304.13666883) .. ( 96.80759758, 299.37666895)
+    .. controls (100.07426416, 292.95000244) and (100.74093081, 285.69666929) .. (101.08759747, 278.60333613)
+    .. controls ( 97.58093089, 266.51000310) and ( 89.47426443, 256.63000335) .. ( 83.27426458, 245.87000362)
+    .. controls ( 76.79426475, 235.84333720) and ( 70.78093156, 225.51000413) .. ( 64.22093173, 215.53667104)
+    .. controls ( 62.24759844, 212.88333778) and ( 62.18093178, 209.48333786) .. ( 61.44759846, 206.37667127)
+    .. controls ( 66.44759834, 207.63000457) and ( 71.00759822, 205.08333797) .. ( 75.68759811, 203.80333800)
+    .. controls ( 77.31426473, 200.65667142) and ( 78.78093136, 197.41667150) .. ( 80.55426465, 194.33667157)
+    .. controls ( 80.19426466, 188.60333838) and ( 77.71426472, 183.32333852) .. ( 74.72759813, 178.52333864)
+    .. controls ( 68.70093162, 167.31000558) and ( 62.86093176, 155.99000587) .. ( 56.75426525, 144.81667281)
+    .. controls ( 54.87426529, 140.92333958) and ( 54.19426531, 136.60333968) .. ( 52.91426534, 132.51000645)
+    .. controls ( 54.60759863, 129.12333987) and ( 56.99426524, 126.08333995) .. ( 58.50093187, 122.61667337)
+    .. controls ( 59.66093184, 116.97667351) and ( 61.08759847, 111.27000698) .. ( 60.52759849, 105.45667380)
+    .. controls ( 59.15426519,  78.25667448) and ( 58.22093188,  51.01667516) .. ( 56.68759858,  23.83000917)
+    .. controls ( 54.52759864,  19.44334261) and ( 53.56759866,  12.80334278) .. ( 47.75426547,  12.03000946)
+    .. controls ( 42.10093228,  14.51000940) and ( 39.03426569,  20.09667593) .. ( 37.23426574,  25.71000912)
+    .. controls ( 36.24759909,  37.23000883) and ( 41.36759897,  48.00334190) .. ( 42.15426561,  59.35000828)
+    .. controls ( 43.31426558,  69.33667470) and ( 41.59426563,  79.37667445) .. ( 41.47426563,  89.39000753)
+    .. controls ( 41.72759896,  92.87000744) and ( 39.83426567,  95.81667404) .. ( 38.20759904,  98.71000730)
+    .. controls ( 36.59426575,  98.21667398) and ( 34.98093246,  97.73667399) .. ( 33.35426583,  97.24334067)
+    .. controls ( 28.54093262,  89.83000752) and ( 23.40759941,  82.63000770) .. ( 18.54093287,  75.25667455)
+    .. controls ( 16.62093292,  75.76334120) and ( 14.67426630,  76.15000786) .. ( 12.80759968,  76.81667451)
+    .. controls ( 12.07426636,  78.93667446) and ( 11.02093306,  81.43000773) .. ( 12.54093302,  83.45667435)
+    .. controls ( 20.94093281,  99.43000728) and ( 29.63426593, 115.23000688) .. ( 38.19426571, 131.11000649)
+    .. controls ( 42.94093226, 140.45667292) and ( 48.59426545, 149.36333936) .. ( 52.68759868, 159.00333912)
+    .. controls ( 55.28759862, 168.04333890) and ( 60.40759849, 176.51000535) .. ( 59.79426517, 186.20333844)
+    .. controls ( 54.76759863, 185.93667178) and ( 51.83426537, 181.23000523) .. ( 47.56759881, 179.16333862)
+    .. controls ( 44.71426555, 181.43000523) and ( 41.87426562, 183.71000517) .. ( 39.04759902, 186.01667178)
+    .. controls ( 40.84759898, 191.27000498) and ( 41.78093229, 196.92333818) .. ( 44.86093221, 201.65667139)
+    .. controls ( 52.82093201, 215.04333772) and ( 60.74093181, 228.45667072) .. ( 68.78093161, 241.80333705)
+    .. controls ( 74.71426480, 252.79000345) and ( 83.66093124, 262.99000319) .. ( 83.84759790, 276.12333620)
+    .. controls ( 83.06093126, 284.17666933) and ( 81.95426462, 292.19000246) .. ( 81.08759797, 300.24333559)
+    .. controls ( 82.94093126, 303.27000218) and ( 84.82093121, 306.28333544) .. ( 86.79426450, 309.23000203)
+  (143.71426307,  60.96334157)
+    .. controls (144.87426304,  59.85667494) and (146.06092968,  58.77667496) .. (147.26092965,  57.72334166)
+    .. controls (149.38092960,  57.35000833) and (151.54092954,  57.99000832) .. (153.66092949,  58.11000831)
+    .. controls (154.46092947,  59.65667494) and (155.27426278,  61.20334157) .. (156.08759610,  62.75000820)
+    .. controls (152.87426284,  64.45667482) and (149.39426293,  65.55000813) .. (145.88759635,  66.47000810)
+    .. controls (145.16759637,  64.64334148) and (144.43426306,  62.80334153) .. (143.71426307,  60.96334157)
+  (144.91426304, 141.67000622)
+    .. controls (143.54092974, 139.96333960) and (143.79426307, 137.71000632) .. (143.52759641, 135.67000637)
+    .. controls (146.12759635, 135.72333971) and (148.42092962, 137.09667300) .. (150.07426291, 139.03000629)
+    .. controls (154.63426280, 143.33667285) and (153.22092950, 150.21667268) .. (154.36759614, 155.79000587)
+    .. controls (151.31426288, 151.01667266) and (148.14092963, 146.32333944) .. (144.91426304, 141.67000622)
+  (139.83426317, 253.56333676)
+    .. controls (153.16759617, 263.92333650) and (166.98092916, 273.65666959) .. (180.19426216, 284.17666933)
+    .. controls (184.74092871, 283.19000269) and (188.98092861, 281.07000274) .. (192.24759519, 277.71000282)
+    .. controls (182.23426211, 263.05666986) and (165.90092919, 254.75000340) .. (153.84759615, 242.09667038)
+    .. controls (146.96759633, 233.00333727) and (139.40759651, 224.41667082) .. (132.67426335, 215.21667105)
+    .. controls (126.63426350, 204.79000465) and (121.22093030, 194.00333825) .. (115.50093045, 183.39000518)
+    .. controls (113.88759715, 181.04333857) and (113.86093049, 178.20333864) .. (113.84759715, 175.44333871)
+    .. controls (120.24759699, 184.61667182) and (126.19426351, 194.09667158) .. (132.54093002, 203.31000468)
+    .. controls (140.58092982, 217.01667101) and (152.38092952, 229.56333736) .. (167.99426247, 234.25667058)
+    .. controls (172.19426236, 231.63000397) and (176.00759560, 228.21667073) .. (178.48759554, 223.88333750)
+    .. controls (178.03426222, 208.04333790) and (170.72759573, 193.64333826) .. (166.24759584, 178.71000530)
+    .. controls (159.55426268, 161.00333907) and (159.48759601, 141.69667289) .. (154.91426279, 123.47000668)
+    .. controls (152.00759620, 118.13667348) and (151.20759622, 111.04334032) .. (145.19426304, 108.15000706)
+    .. controls (142.22092978, 112.72334028) and (137.62092989, 115.56334021) .. (132.30093003, 116.57667352)
+    .. controls (129.06093011, 111.89667363) and (125.34093020, 107.51000708) .. (122.47426360, 102.59000720)
+    .. controls (120.10093033,  96.57667402) and (117.70093039,  90.31000751) .. (118.26093038,  83.71000767)
+    .. controls (126.60759683,  88.87000754) and (134.99426329,  93.95000742) .. (143.28759642,  99.20334062)
+    .. controls (149.03426294, 101.97667388) and (155.03426279, 104.23000716) .. (160.84759598, 106.89667376)
+    .. controls (165.36759587, 109.01667371) and (171.96759570, 109.15000704) .. (174.74092896, 104.25667383)
+    .. controls (180.14092883,  99.07000729) and (179.06092886,  91.27000748) .. (179.26092885,  84.47000765)
+    .. controls (176.34092892,  77.25667450) and (172.12759570,  70.45667467) .. (170.91426239,  62.64334153)
+    .. controls (177.99426222,  55.12334172) and (184.76759538,  47.13667525) .. (193.68759516,  41.68334206)
+    .. controls (194.34092847,  38.95000879) and (195.18092845,  36.17667553) .. (194.71426180,  33.32334227)
+    .. controls (192.94092851,  33.12334227) and (191.18092855,  32.92334228) .. (189.42092860,  32.71000895)
+    .. controls (185.27426203,  35.52334221) and (180.14092883,  37.20334217) .. (177.14092890,  41.41667540)
+    .. controls (173.59426233,  46.16334194) and (168.66092912,  49.52334186) .. (163.82092924,  52.81667511)
+    .. controls (161.22092930,  47.79000857) and (157.30092940,  43.59000868) .. (152.34092952,  40.83000874)
+    .. controls (145.87426302,  45.28334197) and (139.71426317,  50.23000851) .. (134.72759663,  56.35000836)
+    .. controls (132.92759668,  59.23000828) and (132.14093003,  62.59000820) .. (130.94093006,  65.73667479)
+    .. controls (132.47426335,  69.56334136) and (134.59426330,  73.12334127) .. (137.24759657,  76.27000786)
+    .. controls (143.88759640,  74.47000790) and (150.47426290,  72.52334129) .. (157.11426274,  70.73667466)
+    .. controls (160.58092932,  73.36334126) and (164.75426255,  75.89667453) .. (166.18092918,  80.25667443)
+    .. controls (168.00759580,  85.73667429) and (170.20759574,  91.05667416) .. (172.34092902,  96.43000735)
+    .. controls (169.06092911,  96.77667401) and (165.74092919,  98.00334065) .. (162.46092927,  97.59000733)
+    .. controls (155.74092944,  94.68334073) and (148.95426294,  91.79000747) .. (142.84759643,  87.72334091)
+    .. controls (137.52759656,  84.17667433) and (131.24759672,  81.96334105) .. (126.76759683,  77.24334117)
+    .. controls (121.84759695,  72.37667462) and (116.75426375,  67.65667474) .. (111.88759720,  62.72334153)
+    .. controls (106.62093067,  55.99000837) and (101.46093080,  49.15000854) .. ( 96.48759759,  42.20334204)
+    .. controls ( 93.54093099,  36.41667552) and ( 90.70093107,  30.57667567) .. ( 87.42093115,  24.96334247)
+    .. controls ( 83.87426457,  26.44334244) and ( 79.19426469,  28.04334240) .. ( 78.46093137,  32.35000896)
+    .. controls ( 80.48759799,  37.96334215) and ( 83.39426458,  43.21667535) .. ( 85.60759786,  48.75000855)
+    .. controls ( 87.51426448,  54.04334175) and ( 92.48759769,  57.36334166) .. ( 95.11426429,  62.25667488)
+    .. controls ( 96.75426425,  65.41667480) and ( 98.54093087,  68.48334139) .. (100.08759750,  71.68334131)
+    .. controls (102.40759744,  76.51000785) and (102.58093077,  82.07000771) .. (105.12759737,  86.80334093)
+    .. controls (109.44759726,  94.08334075) and (113.92759715, 101.27000723) .. (118.08759705, 108.63000705)
+    .. controls (121.11426364, 116.92334018) and (125.23426354, 124.81667331) .. (127.67426347, 133.31000643)
+    .. controls (127.40759681, 142.21667288) and (125.86093019, 151.13667265) .. (127.35426348, 160.04333910)
+    .. controls (126.95426349, 166.37667227) and (130.68759673, 171.60333881) .. (133.59426333, 176.88333868)
+    .. controls (135.03426329, 179.41667195) and (138.31426321, 179.64333861) .. (140.76759648, 180.61667192)
+    .. controls (145.40759636, 173.87000542) and (150.78092956, 167.68333891) .. (155.87426277, 161.28333907)
+    .. controls (154.00759615, 168.75000555) and (157.66092939, 175.69667204) .. (159.02092936, 182.88333853)
+    .. controls (161.96759595, 195.19000489) and (167.38092915, 207.07000459) .. (167.04759582, 219.96333760)
+    .. controls (164.47426255, 219.76333760) and (161.64759596, 220.45667092) .. (159.34092935, 219.03000429)
+    .. controls (154.63426280, 216.43000435) and (149.44759626, 214.25667108) .. (146.07426301, 209.87000452)
+    .. controls (141.96759645, 204.55000465) and (136.86092991, 200.01667143) .. (133.08759667, 194.44333824)
+    .. controls (126.78093016, 180.76333858) and (120.64759698, 166.89667226) .. (117.15426374, 152.17667263)
+    .. controls (111.54093054, 136.29667302) and (108.63426395, 119.43000678) .. (100.72759748, 104.43000715)
+    .. controls ( 99.18093085, 102.67000720) and ( 96.75426425, 101.97667388) .. ( 94.79426430, 100.76334058)
+    .. controls ( 93.07426434, 102.04334055) and ( 91.35426438, 103.32334052) .. ( 89.62093109, 104.59000715)
+    .. controls ( 88.06093113, 110.39000701) and ( 84.32759789, 116.45667352) .. ( 86.74093116, 122.52334004)
+    .. controls ( 92.48759769, 139.11000629) and ( 97.71426422, 155.87000587) .. (103.47426408, 172.44333879)
+    .. controls (111.64759721, 187.41667175) and (119.76759701, 202.41667137) .. (127.88759680, 217.41667100)
+    .. controls (139.84759650, 232.69667061) and (152.04759620, 247.83000357) .. (163.92759590, 263.19000319)
+    .. controls (153.66092949, 255.16333672) and (145.20759637, 245.01667031) .. (135.38092995, 236.47000385)
+    .. controls (130.47426340, 233.84333725) and (124.72759688, 232.63000395) .. (120.52759699, 228.76333738)
+    .. controls (115.07426379, 223.92333750) and (109.78093059, 218.89667096) .. (104.15426406, 214.25667108)
+    .. controls (101.86093079, 217.11000434) and ( 99.04759752, 219.79000427) .. ( 97.95426422, 223.39000418)
+    .. controls ( 96.06093093, 230.88333733) and ( 96.82093091, 239.12333712) .. (100.50093082, 245.96333695)
+    .. controls (104.34093072, 255.28333672) and (108.88759728, 264.28333649) .. (112.63426385, 273.64333626)
+    .. controls (113.75426382, 277.21666950) and (116.74093041, 279.49666944) .. (119.50093035, 281.76333605)
+    .. controls (121.56759696, 280.59000275) and (123.74093024, 279.56333611) .. (125.63426353, 278.11000281)
+    .. controls (128.27426346, 274.76333623) and (129.70093009, 270.69666966) .. (131.18093005, 266.76333643)
+    .. controls (129.26093010, 259.37666995) and (126.90093016, 252.08333680) .. (125.56759686, 244.55000365)
+    .. controls (131.00759672, 246.40333694) and (135.18092995, 250.37667017) .. (139.83426317, 253.56333676)}
+\def\fdulogo at name@dan{%
+  (318.28759204,  86.52334094)
+    .. controls (328.19425846,  87.00334092) and (337.14092490,  91.81667414) .. (346.11425801,  95.59000738)
+    .. controls (351.20759122,  94.93667406) and (356.20759109,  93.69667409) .. (360.83425765,  91.41667415)
+    .. controls (361.59425763,  89.11000754) and (362.34092427,  86.79000760) .. (363.11425759,  84.47000765)
+    .. controls (357.78092439,  79.79000777) and (350.70092457,  78.47000780) .. (344.07425806,  76.67000785)
+    .. controls (343.51425808,  77.64334116) and (342.42092477,  79.59000778) .. (341.87425812,  80.56334108)
+    .. controls (332.26092503,  77.56334116) and (322.44759194,  75.27000788) .. (312.82092551,  72.32334129)
+    .. controls (306.68759233,  70.84334133) and (301.54092579,  66.97667476) .. (296.48759259,  63.39000818)
+    .. controls (292.74092601,  58.63000830) and (291.00759272,  52.12334180) .. (285.50092620,  48.87000854)
+    .. controls (279.98092633,  44.65667532) and (272.30092653,  47.80334190) .. (268.44759329,  52.75000845)
+    .. controls (266.51426000,  56.84334168) and (264.15426006,  60.80334158) .. (262.72759343,  65.11000814)
+    .. controls (262.96759343,  67.80334140) and (263.51426008,  70.45667467) .. (263.96759340,  73.12334127)
+    .. controls (267.08759332,  73.39000793) and (270.23425991,  73.53667459) .. (273.32759317,  74.08334125)
+    .. controls (288.47425945,  77.64334116) and (303.11425909,  83.09667435) .. (318.28759204,  86.52334094)
+  (347.60759131, 212.41667112)
+    .. controls (352.20759119, 214.71000440) and (357.26092440, 212.57667112) .. (362.04759095, 212.12333780)
+    .. controls (363.84759090, 209.92333785) and (365.60759086, 207.69667124) .. (367.28759082, 205.39000463)
+    .. controls (364.44759089, 193.92333825) and (356.31425776, 184.75000515) .. (353.11425784, 173.41667210)
+    .. controls (350.19425791, 164.27000566) and (347.51425798, 155.04333922) .. (344.23425806, 146.01667278)
+    .. controls (342.48759144, 141.53667289) and (342.50092477, 136.68333968) .. (341.74092479, 132.00333980)
+    .. controls (340.55425815, 124.59000665) and (339.36759152, 117.16334017) .. (338.18092488, 109.73667369)
+    .. controls (336.31425826, 108.56334038) and (334.43425831, 107.39000708) .. (332.59425835, 106.17667378)
+    .. controls (329.91425842, 108.37667372) and (326.87425849, 110.39000701) .. (325.35425853, 113.61667359)
+    .. controls (323.51425858, 117.24334017) and (321.70092529, 121.09667340) .. (317.79425872, 122.88334003)
+    .. controls (314.35425881, 120.28334009) and (311.04759222, 117.48334016) .. (307.38092565, 115.20334022)
+    .. controls (303.08759242, 121.15000674) and (307.50092565, 127.88333990) .. (309.52759226, 133.76333975)
+    .. controls (308.32759229, 143.05667286) and (300.79425915, 151.83000597) .. (304.55425905, 161.37667240)
+    .. controls (305.95425902, 164.12333900) and (308.52759229, 166.09667228) .. (310.39425891, 168.52333889)
+    .. controls (313.00759217, 167.01667226) and (315.76759211, 165.71000562) .. (318.16759205, 163.84333900)
+    .. controls (322.47425860, 158.48333914) and (326.20759184, 152.29667262) .. (327.11425849, 145.35000613)
+    .. controls (327.94092513, 140.35000626) and (328.71425845, 135.32333972) .. (329.59425843, 130.32333984)
+    .. controls (330.34092507, 130.55000650) and (331.83425837, 131.00333982) .. (332.59425835, 131.21667315)
+    .. controls (335.83425827, 146.37667277) and (340.43425816, 161.20333907) .. (343.70092474, 176.35000536)
+    .. controls (345.04759137, 181.07000524) and (345.90092469, 185.93667178) .. (347.64759131, 190.53667167)
+    .. controls (350.00759125, 194.93667156) and (353.07425784, 199.07000479) .. (353.80759115, 204.15000466)
+    .. controls (347.32759132, 204.91000464) and (341.32759147, 201.87000472) .. (335.78092494, 198.93667146)
+    .. controls (331.47425838, 196.45667152) and (326.50092517, 195.12333822) .. (322.70092527, 191.79000497)
+    .. controls (315.19425879, 185.56333846) and (307.60759231, 179.45667195) .. (300.19425916, 173.12333877)
+    .. controls (296.47425925, 170.24333884) and (294.80759263, 165.69667229) .. (291.99425937, 162.05667238)
+    .. controls (292.47425935, 156.11000586) and (295.62092594, 150.99000599) .. (297.87425922, 145.64333946)
+    .. controls (299.80759250, 137.37667300) and (302.00759245, 127.76333990) .. (297.06092591, 120.15000676)
+    .. controls (295.79425927, 117.40334016) and (293.94092598, 115.01667356) .. (291.96759270, 112.76334028)
+    .. controls (289.50092610, 118.09667348) and (285.55425953, 123.29667335) .. (286.28759284, 129.49667319)
+    .. controls (286.84759283, 138.20333964) and (284.63425955, 146.71000610) .. (283.44759291, 155.27000588)
+    .. controls (286.83425950, 162.61667237) and (286.67425950, 170.93667216) .. (288.94092611, 178.63000530)
+    .. controls (291.67425937, 180.88333858) and (293.70092599, 183.88333850) .. (296.54092592, 186.00333845)
+    .. controls (306.46092567, 191.56333831) and (316.12759210, 197.56333816) .. (325.99425852, 203.21667135)
+    .. controls (333.27425833, 206.09667128) and (340.30092483, 209.61667119) .. (347.60759131, 212.41667112)}
+\def\fdulogo at name@da{%
+  (500.52758749, 206.59000460)
+    .. controls (503.94092073, 220.15000426) and (500.12758750, 234.41667057) .. (504.03425407, 247.92333690)
+    .. controls (511.07425389, 246.55000360) and (517.44758706, 242.07000371) .. (519.55425368, 234.97667056)
+    .. controls (516.83425375, 217.67000432) and (512.24758719, 200.72333808) .. (509.44758726, 183.43000518)
+    .. controls (505.98092068, 167.81667224) and (503.00758742, 152.09667263) .. (499.86092084, 136.41667302)
+    .. controls (505.75425402, 140.20333959) and (512.02092053, 143.41667285) .. (517.80758705, 147.37667275)
+    .. controls (519.20758702, 148.73667271) and (519.98092033, 150.59000600) .. (521.03425364, 152.20333929)
+    .. controls (519.78092034, 156.32333919) and (518.88758703, 160.77667241) .. (522.32758694, 164.09667233)
+    .. controls (528.04758680, 164.07000566) and (533.75425332, 164.08333900) .. (539.46091985, 164.07000566)
+    .. controls (541.24758647, 162.17667238) and (544.28758639, 160.44333909) .. (542.76758643, 157.40333916)
+    .. controls (541.94091978, 149.95000602) and (534.75425330, 146.48333944) .. (529.51425343, 142.35000621)
+    .. controls (520.10092033, 136.29667302) and (510.22092058, 131.00333982) .. (500.80758748, 124.93667331)
+    .. controls (503.71425407, 118.32334014) and (507.70092064, 112.28334029) .. (510.84758723, 105.77667379)
+    .. controls (515.51425378,  95.17667405) and (524.40758689,  87.40334091) .. (531.72758671,  78.67000780)
+    .. controls (538.30091988,  74.05667458) and (544.99425304,  69.55000803) .. (551.88758620,  65.37667480)
+    .. controls (556.27425276,  63.48334151) and (560.44758599,  61.11000824) .. (564.12758590,  58.03000831)
+    .. controls (558.10091938,  53.81667509) and (550.71425290,  52.76334178) .. (543.98091973,  50.16334184)
+    .. controls (539.66091984,  48.55000855) and (534.92758663,  48.35000856) .. (530.38092007,  48.51000855)
+    .. controls (520.74092031,  51.48334181) and (513.10092051,  59.24334162) .. (509.72758726,  68.72334138)
+    .. controls (504.24758739,  85.40334096) and (500.02092083, 102.44334054) .. (494.66092097, 119.16334012)
+    .. controls (491.66092104, 110.84334033) and (488.38092112, 102.61667387) .. (485.64758786,  94.20334074)
+    .. controls (481.35425463,  87.89667423) and (477.18092140,  81.47000773) .. (472.75425485,  75.24334122)
+    .. controls (465.78092169,  65.49667479) and (454.34092197,  59.77667494) .. (442.62092227,  58.23000831)
+    .. controls (439.51425568,  58.68334163) and (436.43425576,  59.39000828) .. (433.48758916,  60.48334159)
+    .. controls (430.78092256,  61.73667489) and (429.92758925,  64.85667481) .. (428.51425595,  67.21667475)
+    .. controls (434.07425581,  68.15000806) and (439.74092234,  68.56334138) .. (445.26092220,  69.84334135)
+    .. controls (455.00758862,  73.60334126) and (464.20758839,  79.99000777) .. (469.18092160,  89.41667420)
+    .. controls (473.36758817,  98.01667398) and (479.90092134, 105.60334046) .. (481.12758797, 115.40334021)
+    .. controls (475.23425479, 113.83000692) and (470.84758823, 109.43000703) .. (466.18092168, 105.79000712)
+    .. controls (460.79425515, 100.05667393) and (457.03425524,  91.63000747) .. (448.46092212,  90.15000751)
+    .. controls (445.51425553,  95.32334072) and (444.71425555, 101.31000723) .. (443.67425557, 107.07000709)
+    .. controls (446.92758883, 106.27000711) and (450.19425541, 105.51000713) .. (453.47425533, 104.79000715)
+    .. controls (462.60758843, 111.72334031) and (470.71425490, 120.11000676) .. (480.90092131, 125.56333996)
+    .. controls (485.82092119, 128.04333990) and (487.58092114, 133.69667309) .. (488.79425445, 138.65667297)
+    .. controls (493.14092100, 161.23000573) and (496.22092093, 184.00333850) .. (500.52758749, 206.59000460)}
+\def\fdulogo at name@xue{%
+  (747.62091464, 258.36333664)
+    .. controls (750.15424791, 256.21667003) and (752.74091451, 254.15000341) .. (755.38091445, 252.13667013)
+    .. controls (750.84758123, 243.33667035) and (742.26091478, 238.23000381) .. (734.47424830, 232.65667062)
+    .. controls (736.20758159, 230.40333734) and (737.98091488, 228.19000406) .. (739.79424817, 226.00333745)
+    .. controls (743.27424808, 226.81667076) and (746.76758133, 227.55000408) .. (750.28758124, 228.23000406)
+    .. controls (751.46091455, 225.40333746) and (752.64758118, 222.57667087) .. (753.86091449, 219.76333760)
+    .. controls (750.62091457, 213.24333777) and (748.54091462, 206.27000461) .. (746.78091466, 199.23000478)
+    .. controls (748.22091463, 197.71000482) and (749.67424792, 196.17667153) .. (751.14091455, 194.67000490)
+    .. controls (760.71424765, 211.47000448) and (769.88758075, 228.49667072) .. (779.47424718, 245.29667030)
+    .. controls (773.42091400, 244.24333699) and (767.28758082, 243.89667033) .. (761.19424764, 243.24333702)
+    .. controls (760.47424765, 248.00333690) and (766.58091417, 249.36333686) .. (769.60758076, 251.87000347)
+    .. controls (775.06091396, 251.71000347) and (782.16758045, 254.05667008) .. (786.15424701, 249.12333687)
+    .. controls (787.15424699, 247.96333690) and (788.06091363, 246.71000360) .. (788.99424694, 245.47000363)
+    .. controls (786.26091368, 234.07000391) and (778.42091387, 225.05667081) .. (772.88758068, 214.99000439)
+    .. controls (768.59424745, 208.51000455) and (764.74091421, 201.75000472) .. (760.55424765, 195.21667155)
+    .. controls (758.16758105, 190.29667167) and (756.44758109, 185.07000514) .. (754.07424781, 180.13667193)
+    .. controls (759.44758101, 179.95000527) and (764.83424755, 179.33667195) .. (770.22091408, 179.47000528)
+    .. controls (776.19424726, 180.55000525) and (781.90091379, 182.84333853) .. (787.99424697, 183.31000518)
+    .. controls (792.42091352, 184.25667183) and (796.32758009, 181.16333857) .. (800.31424666, 179.72333861)
+    .. controls (800.47424665, 177.73667199) and (800.64757998, 175.75000537) .. (800.83424665, 173.76333875)
+    .. controls (790.94091356, 167.73667224) and (782.19424711, 159.31000578) .. (770.64758073, 156.49667252)
+    .. controls (756.94091441, 154.17667258) and (743.36758142, 151.12333932) .. (729.70091509, 148.53667272)
+    .. controls (723.98091523, 147.25667275) and (717.72758206, 145.35000613) .. (714.59424880, 139.93667293)
+    .. controls (723.31424858, 140.35000626) and (731.92758170, 145.47000613) .. (740.60758148, 142.33667287)
+    .. controls (742.23424811, 139.56333961) and (743.82091474, 136.75000635) .. (745.38091470, 133.92333975)
+    .. controls (743.54091474, 131.48333981) and (742.03424812, 128.80333988) .. (740.20758149, 126.36333994)
+    .. controls (735.48758161, 121.79000672) and (729.54091509, 118.80334013) .. (723.72758191, 115.85667354)
+    .. controls (728.02091513, 114.00334025) and (732.62091502, 115.64334021) .. (737.06091491, 115.85667354)
+    .. controls (744.58091472, 116.27000686) and (752.03424787, 117.36334016) .. (759.52758101, 118.15000681)
+    .. controls (762.92758093, 116.28334019) and (766.28758084, 114.35000691) .. (769.48758076, 112.13667363)
+    .. controls (770.55424740, 108.49667372) and (771.60758071, 104.85667381) .. (772.66091402, 101.21667390)
+    .. controls (771.22091405,  98.23000731) and (769.11424744,  95.67000737) .. (766.28758084,  93.91000742)
+    .. controls (756.02091443,  97.39000733) and (745.16758137,  96.35000736) .. (734.52758164,  96.37667402)
+    .. controls (729.95424842,  95.96334070) and (725.63424853,  94.23000741) .. (721.18091530,  93.17667410)
+    .. controls (717.24758207,  83.47000768) and (718.54091537,  72.91000794) .. (717.83424872,  62.71000820)
+    .. controls (717.24758207,  53.75000842) and (722.64758193,  43.71000867) .. (716.04758210,  35.91000887)
+    .. controls (712.07424886,  35.36334221) and (708.03424897,  33.52334226) .. (704.04758240,  34.85667556)
+    .. controls (697.94091588,  36.35000886) and (691.66091604,  37.27000883) .. (685.71424952,  39.37667545)
+    .. controls (678.32758304,  44.67000865) and (670.20758324,  49.53667519) .. (665.38091670,  57.52334166)
+    .. controls (673.52758316,  53.41667510) and (681.47424963,  48.71000855) .. (690.28758274,  46.15000861)
+    .. controls (694.52758264,  44.61667532) and (698.95424919,  46.32334194) .. (703.22091575,  46.88334193)
+    .. controls (704.35424906,  49.84334185) and (705.78091569,  52.71000845) .. (706.66091567,  55.76334170)
+    .. controls (707.98091563,  66.84334143) and (706.18091568,  78.27000781) .. (709.15424894,  89.13667420)
+    .. controls (708.72758228,  89.65667419) and (707.86091564,  90.69667416) .. (707.43424898,  91.21667415)
+    .. controls (695.24758262,  90.37667417) and (683.74091624,  85.91000762) .. (673.22091650,  79.89667443)
+    .. controls (667.54091664,  76.23000786) and (660.62091682,  76.04334120) .. (654.28758364,  74.23000791)
+    .. controls (648.38091712,  73.23000793) and (643.48758391,  77.65667449) .. (639.82091734,  81.69667439)
+    .. controls (638.15425071,  84.59000765) and (637.00758407,  87.73667424) .. (635.58091744,  90.75000750)
+    .. controls (641.15425064,  95.83000737) and (649.06091711,  94.83000739) .. (655.91425027,  96.53667402)
+    .. controls (669.07424994,  99.97667393) and (682.16758295, 103.71000717) .. (695.24758262, 107.53667374)
+    .. controls (700.00758250, 109.08334037) and (706.22091568, 108.84334038) .. (709.24758227, 113.48334026)
+    .. controls (713.56758216, 119.85667344) and (721.44758196, 123.11000669) .. (724.18091523, 130.64333983)
+    .. controls (717.19424874, 130.88333983) and (710.54091557, 128.16333989) .. (703.74091574, 127.00333992)
+    .. controls (700.96758248, 129.33667320) and (700.46091582, 132.96333977) .. (699.67424917, 136.28333969)
+    .. controls (702.44758244, 139.24333962) and (705.16758237, 142.28333954) .. (708.15424896, 145.04333947)
+    .. controls (713.63424883, 149.91000602) and (720.66091532, 152.35000596) .. (727.23424849, 155.35000588)
+    .. controls (731.56758171, 157.07000584) and (731.92758170, 162.24333904) .. (732.67424835, 166.16333894)
+    .. controls (723.46091525, 167.77667224) and (714.14091548, 164.72333898) .. (705.96758235, 160.63000575)
+    .. controls (700.03424917, 157.68333916) and (693.82091599, 155.39000588) .. (687.82091614, 152.59000595)
+    .. controls (684.79424955, 153.49667259) and (682.08758295, 155.12333922) .. (679.58091634, 157.03000584)
+    .. controls (680.38091632, 167.76333890) and (682.68758293, 178.51000530) .. (681.42091630, 189.31000503)
+    .. controls (680.79424965, 193.81667159) and (681.86091629, 198.25667148) .. (682.78091626, 202.64333803)
+    .. controls (683.50091625, 202.24333804) and (684.95424954, 201.45667140) .. (685.67424952, 201.05667141)
+    .. controls (687.36758282, 198.41667147) and (689.34091610, 195.97667153) .. (691.35424938, 193.57667159)
+    .. controls (694.04758265, 194.40333824) and (696.83424925, 195.01667156) .. (699.39424918, 196.21667153)
+    .. controls (701.24758247, 198.09667148) and (702.44758244, 200.47000475) .. (704.11424906, 202.49667137)
+    .. controls (709.31424893, 207.03000459) and (715.47424878, 210.37667117) .. (722.04758195, 212.47000445)
+    .. controls (724.15424856, 214.63000440) and (726.15424851, 216.88333768) .. (728.10091513, 219.19000429)
+    .. controls (727.86091514, 220.85667091) and (727.62091514, 222.52333754) .. (727.40758181, 224.19000416)
+    .. controls (723.18091525, 223.24333752) and (719.78091534, 220.56333758) .. (716.82091541, 217.55000433)
+    .. controls (716.16758210, 224.28333749) and (713.46091550, 231.16333732) .. (716.06091543, 237.81667049)
+    .. controls (718.95424869, 236.79000385) and (721.88758195, 235.89667053) .. (724.86091521, 235.07000389)
+    .. controls (732.74091501, 242.52333704) and (743.15424809, 247.96333690) .. (747.62091464, 258.36333664)
+  (696.82091591, 220.16333759)
+    .. controls (700.36758249, 219.00333762) and (703.24758242, 216.63000435) .. (705.64758236, 213.81667109)
+    .. controls (704.32758239, 210.63000450) and (703.11424909, 207.39000458) .. (702.15424911, 204.07000466)
+    .. controls (700.64758248, 203.27000468) and (699.14091585, 202.45667137) .. (697.63424923, 201.64333806)
+    .. controls (696.60758258, 203.37667135) and (695.56758261, 205.08333797) .. (694.55424930, 206.80333793)
+    .. controls (695.31424928, 211.25667115) and (696.06091593, 215.71000437) .. (696.82091591, 220.16333759)
+  (749.11424794, 167.77667224)
+    .. controls (747.63424798, 165.07000564) and (746.10091468, 162.37667237) .. (744.63424805, 159.67000577)
+    .. controls (755.00758112, 160.13667243) and (764.79424755, 163.65667234) .. (774.58091397, 166.85667226)
+    .. controls (778.28758054, 167.81667224) and (780.35424716, 171.29667215) .. (782.99424709, 173.76333875)
+    .. controls (771.44758071, 174.45667207) and (759.56758101, 172.97667211) .. (749.11424794, 167.77667224)
+  (742.71424810, 179.96333860)
+    .. controls (740.74091481, 176.05667203) and (747.15424799, 179.88333860) .. (742.71424810, 179.96333860)
+  (713.83424882, 188.16333839)
+    .. controls (711.34091555, 184.93667181) and (709.32758227, 181.25667190) .. (706.18091568, 178.57667197)
+    .. controls (699.63424918, 177.63000532) and (692.48758269, 178.65667197) .. (687.60758281, 183.47000518)
+    .. controls (687.67424947, 177.49667199) and (687.62091614, 171.52333881) .. (687.64758281, 165.53667229)
+    .. controls (699.67424917, 169.11000554) and (711.88758220, 172.00333880) .. (723.98091523, 175.37667205)
+    .. controls (721.91424862, 176.56333868) and (719.84758200, 177.75000532) .. (717.79424872, 178.93667196)
+    .. controls (718.16758205, 181.56333856) and (718.52758204, 184.19000516) .. (718.88758203, 186.81667176)
+    .. controls (717.19424874, 187.27000508) and (715.51424878, 187.71000507) .. (713.83424882, 188.16333839)
+  (741.00758147, 214.85667106)
+    .. controls (737.16758157, 207.41667125) and (733.72758166, 199.53667144) .. (734.23424831, 190.96333832)
+    .. controls (735.32758162, 190.33667167) and (736.43424826, 189.69667169) .. (737.55424823, 189.07000504)
+    .. controls (738.12758155, 193.45667160) and (738.30091488, 197.91000482) .. (739.31424818, 202.21667138)
+    .. controls (740.48758149, 206.29667127) and (743.34091475, 210.61667117) .. (741.00758147, 214.85667106)
+  (701.99424912, 258.20333664)
+    .. controls (704.94091571, 255.97667003) and (708.68758228, 254.55000340) .. (711.04758222, 251.68333681)
+    .. controls (711.56758221, 247.73667024) and (712.63424885, 242.96333702) .. (709.48758226, 239.81667044)
+    .. controls (703.08758242, 233.87000392) and (696.68758258, 227.91000407) .. (690.47424940, 221.77667089)
+    .. controls (689.72758276, 223.44333751) and (688.99424944, 225.11000414) .. (688.27424946, 226.76333743)
+    .. controls (691.99424937, 232.81667061) and (695.06091596, 239.23000378) .. (698.54091587, 245.41667030)
+    .. controls (700.23424916, 249.49667019) and (700.87424914, 253.93667008) .. (701.99424912, 258.20333664)
+  (654.71425030, 137.15000634)
+    .. controls (658.28758354, 146.24333944) and (659.68758351, 156.59000585) .. (667.11424999, 163.60333901)
+    .. controls (667.80758330, 160.27000576) and (668.83424995, 157.00333917) .. (669.26091660, 153.63000592)
+    .. controls (668.40758329, 150.57667267) and (666.80758333, 147.80333940) .. (665.84758335, 144.79000615)
+    .. controls (665.35425003, 140.60333958) and (665.68758336, 136.36333969) .. (665.72758336, 132.15000646)
+    .. controls (664.06091673, 130.12333985) and (662.02091678, 128.45667322) .. (659.56758351, 127.47000658)
+    .. controls (657.88758355, 130.67000650) and (656.24758359, 133.88333975) .. (654.71425030, 137.15000634)}
+\def\fdulogo at emblem@kernel{%
+  (351.02572456, 574.53945678)
+    .. controls (353.31905783, 587.19278979) and (370.06572408, 593.55278963) .. (380.65239048, 586.95278980)
+    .. controls (386.01239035, 582.31278991) and (389.51905693, 574.99279010) .. (388.22572363, 567.81945694)
+    .. controls (386.66572367, 555.08612393) and (380.57239049, 543.57945755) .. (377.06572391, 531.37945785)
+    .. controls (375.69239061, 525.83279133) and (379.82572384, 521.44612477) .. (382.75905710, 517.29945821)
+    .. controls (419.97238950, 519.71279148) and (457.09238857, 523.61945805) .. (494.39905431, 524.81945802)
+    .. controls (505.81238735, 525.81945799) and (517.31905373, 525.21945801) .. (528.69238678, 524.05945804)
+    .. controls (539.05238652, 523.29945806) and (548.67905295, 513.85945829) .. (547.86571964, 503.17945856)
+    .. controls (547.22571965, 497.11279204) and (542.46571977, 490.89945887) .. (535.86571994, 491.12612553)
+    .. controls (523.49238691, 491.00612553) and (511.29238722, 493.79279213) .. (498.93238753, 494.09945879)
+    .. controls (478.77238803, 495.83279208) and (458.51905520, 495.72612541) .. (438.31905571, 495.01945876)
+    .. controls (427.34572265, 493.97945879) and (416.13238960, 494.20612545) .. (405.57238986, 490.60612554)
+    .. controls (398.26572338, 488.08612560) and (390.46572357, 486.52612564) .. (383.90572374, 482.24612575)
+    .. controls (379.85239050, 479.57945915) and (376.14572393, 475.11279259) .. (376.97239058, 469.93945939)
+    .. controls (378.22572388, 458.71279300) and (386.95905699, 449.31279324) .. (386.15905701, 437.71279353)
+    .. controls (383.69239041, 424.51279386) and (378.01239055, 412.21946083) .. (374.45239064, 399.31279449)
+    .. controls (371.06572406, 387.49946145) and (370.10572408, 375.17946176) .. (368.23905746, 363.07279540)
+    .. controls (367.66572414, 356.96612888) and (366.55905750, 350.91279570) .. (366.34572417, 344.76612919)
+    .. controls (363.49239091, 318.55279651) and (365.89239085, 292.17946383) .. (366.31905751, 265.91279782)
+    .. controls (366.58572417, 249.05946491) and (367.50572415, 232.21946533) .. (369.07905744, 215.44613242)
+    .. controls (369.79905742, 204.24613270) and (372.17239070, 193.21946631) .. (372.89239068, 182.01946659)
+    .. controls (372.62572402, 175.80613341) and (371.38572405, 167.51280028) .. (364.62572422, 165.19280034)
+    .. controls (358.59905770, 163.63280038) and (350.94572456, 163.64613371) .. (346.71905800, 168.96613358)
+    .. controls (338.13239155, 178.77946667) and (337.71905822, 192.48613299) .. (335.77239161, 204.72613269)
+    .. controls (331.25239172, 230.40613205) and (330.90572506, 256.55279806) .. (331.15905839, 282.55279741)
+    .. controls (288.67905945, 280.91279745) and (245.66572719, 283.05946406) .. (203.82572824, 274.09946429)
+    .. controls (200.02572833, 273.43279764) and (195.38572845, 270.87279770) .. (192.34572852, 274.64613094)
+    .. controls (185.49239536, 281.73946410) and (184.87906204, 292.20613050) .. (182.30572878, 301.25946361)
+    .. controls (185.73239536, 303.24613022) and (188.99906194, 305.72613016) .. (192.98572851, 306.45946348)
+    .. controls (217.54572789, 311.79279668) and (242.75906060, 313.05946331) .. (267.81239330, 313.27279664)
+    .. controls (289.33239277, 313.92612996) and (310.87905889, 315.92612991) .. (332.42572502, 314.57946327)
+    .. controls (332.63905835, 354.81946227) and (336.22572493, 396.36612790) .. (353.90572449, 433.12612698)
+    .. controls (355.45239111, 435.01946026) and (353.79905782, 436.64612689) .. (352.65239118, 438.15279352)
+    .. controls (344.61239138, 431.49946035) and (339.75905817, 422.07279392) .. (335.77239161, 412.61946082)
+    .. controls (331.29239172, 401.53946110) and (322.95905859, 391.68612801) .. (322.25239194, 379.32612832)
+    .. controls (320.61239198, 363.93946204) and (319.06572536, 347.01946246) .. (308.14572563, 335.00612943)
+    .. controls (294.86572596, 321.71279643) and (275.35905978, 317.88612986) .. (257.25239357, 317.31279654)
+    .. controls (244.57239389, 317.01946321) and (231.38572755, 315.24612992) .. (219.17239452, 319.59279648)
+    .. controls (199.06572836, 326.67279631) and (183.39906208, 345.41946250) .. (180.62572882, 366.63279531)
+    .. controls (176.82572891, 393.49946130) and (177.69239556, 421.24612727) .. (185.07906204, 447.43279329)
+    .. controls (187.31906198, 454.19279312) and (188.82572861, 462.31279291) .. (195.33239512, 466.37945948)
+    .. controls (225.99906102, 487.49945895) and (267.79905997, 488.05945894) .. (300.91905914, 472.39279266)
+    .. controls (312.34572552, 465.79279283) and (313.77239216, 451.15279319) .. (315.38572545, 439.37946015)
+    .. controls (318.67905870, 442.36612675) and (320.02572533, 446.68612664) .. (322.13239195, 450.47279321)
+    .. controls (330.99905839, 465.63279283) and (344.74572471, 477.15279254) .. (354.63905780, 491.48612552)
+    .. controls (353.30572450, 493.36612547) and (350.90572456, 494.19279212) .. (349.06572461, 495.49945875)
+    .. controls (339.71905817, 486.91279230) and (328.70572512, 479.15279249) .. (315.81239210, 477.43279254)
+    .. controls (308.29239229, 476.05945924) and (300.81239248, 482.25945908) .. (300.05239250, 489.71279223)
+    .. controls (300.29239249, 493.88612546) and (303.38572575, 496.91279205) .. (305.75905902, 500.05945864)
+    .. controls (316.66572542, 513.49945830) and (329.54572509, 525.39279134) .. (338.87905819, 540.08612430)
+    .. controls (345.31905803, 550.57945737) and (348.10572463, 562.72612374) .. (351.02572456, 574.53945678)
+  (211.99906137, 380.15279497)
+    .. controls (213.41239466, 369.35279524) and (216.90572791, 357.49946220) .. (226.42572767, 351.12612903)
+    .. controls (238.31906071, 346.09946249) and (251.69239371, 345.40612917) .. (264.37239339, 347.04612913)
+    .. controls (269.66572659, 347.21946246) and (275.17239312, 348.29946243) .. (279.49239301, 351.53946235)
+    .. controls (289.10572611, 358.76612884) and (292.73239268, 371.93946184) .. (290.85239273, 383.45946155)
+    .. controls (264.70572672, 389.28612807) and (238.03906072, 383.60612822) .. (211.99906137, 380.15279497)
+  (220.85239448, 442.37946008)
+    .. controls (211.53239471, 434.35279361) and (209.46572810, 421.25946061) .. (209.38572810, 409.60612757)
+    .. controls (235.99906077, 409.13946091) and (262.61239343, 411.53946085) .. (289.21239277, 412.67279416)
+    .. controls (289.95905942, 420.89946062) and (289.99905942, 429.51279373) .. (286.93239283, 437.32612687)
+    .. controls (284.69239288, 443.07279340) and (279.74572634, 448.15279327) .. (273.42572650, 449.03279325)
+    .. controls (266.31906001, 450.25945988) and (259.06572686, 450.32612655) .. (251.90572704, 451.01945986)
+    .. controls (241.14572730, 450.67279321) and (229.57239426, 449.28612657) .. (220.85239448, 442.37946008)
+  (450.54572207, 484.52612569)
+    .. controls (463.87905507, 485.19279234) and (477.23905474, 484.59279236) .. (490.58572107, 484.91279235)
+    .. controls (506.99905399, 486.12612565) and (524.78572021, 485.08612568) .. (538.90571986, 475.72612591)
+    .. controls (546.77238633, 470.17945938) and (548.85238628, 459.53945965) .. (547.14571965, 450.56612654)
+    .. controls (546.15905301, 446.07279332) and (545.11905304, 440.93946012) .. (541.03905314, 438.16612685)
+    .. controls (528.78572011, 428.23279377) and (512.14572053, 427.39279379) .. (497.05238757, 427.35279379)
+    .. controls (466.02572168, 428.56612709) and (434.85238913, 425.24612717) .. (403.91905657, 428.87279375)
+    .. controls (397.62572339, 429.84612706) and (392.70572352, 435.05946026) .. (390.78572356, 440.95279345)
+    .. controls (388.53239029, 447.27279329) and (388.27905696, 454.15279312) .. (388.61239028, 460.79279295)
+    .. controls (390.07905691, 469.07279275) and (397.18572340, 474.97945926) .. (404.33238989, 478.60612584)
+    .. controls (418.87905619, 485.12612568) and (435.21238912, 482.07279242) .. (450.54572207, 484.52612569)
+  (415.59905628, 458.27279302)
+    .. controls (412.73238968, 456.53945973) and (413.49238966, 452.84612648) .. (413.25238967, 450.03279322)
+    .. controls (414.81238963, 448.92612658) and (416.33238959, 447.43279329) .. (418.39905621, 447.41945995)
+    .. controls (447.37238882, 446.75279330) and (476.33238809, 448.08612660) .. (505.29238737, 448.96612658)
+    .. controls (510.42572057, 449.33945991) and (515.23905379, 451.27279319) .. (520.01238700, 453.05945981)
+    .. controls (519.62572034, 456.45945973) and (518.38572037, 459.73945965) .. (515.66572044, 461.93945959)
+    .. controls (487.70572114, 462.57945957) and (459.71905517, 462.08612625) .. (431.78572254, 460.81945962)
+    .. controls (426.35905601, 460.52612629) and (420.41238949, 461.31279294) .. (415.59905628, 458.27279302)
+  (434.01238915,419.45946065)
+    .. controls (450.58572207, 421.12612728) and (467.27905498, 420.31279396) .. (483.87905457, 421.35279394)
+    .. controls (500.83905415, 422.59279391) and (517.85238705, 420.91279395) .. (534.57238664, 418.08612735)
+    .. controls (542.10571978, 417.03279405) and (547.46571965, 410.41946088) .. (549.71905292, 403.55279438)
+    .. controls (552.38571952, 395.33946126) and (553.19905284, 385.84612816) .. (548.91905294, 378.03279502)
+    .. controls (544.65238638, 370.49946188) and (536.97238658, 364.72612869) .. (528.23905346, 363.79279538)
+    .. controls (491.77238771, 359.75279548) and (454.99905529, 362.17946208) .. (418.42572287, 360.08612880)
+    .. controls (411.46572305, 358.71279550) and (403.94572323, 360.21946213) .. (398.41239004, 364.75279535)
+    .. controls (389.18572360, 372.11279517) and (385.21239037, 385.13946151) .. (388.13239030, 396.48612789)
+    .. controls (389.59905693, 400.72612779) and (392.98572351, 403.88612771) .. (395.93239010, 407.13946096)
+    .. controls (400.77238998, 412.32612750) and (407.02572316, 416.53946073) .. (414.21238964, 417.44612737)
+    .. controls (420.79905615, 418.16612735) and (427.35905598, 419.32612732) .. (434.01238915, 419.45946065)
+  (434.35905581, 393.23279464)
+    .. controls (427.49238931, 392.47279466) and (420.30572283, 393.41946130) .. (413.71905632, 390.99279470)
+    .. controls (413.31905633, 390.03279472) and (412.51905635, 388.11279477) .. (412.13238970, 387.15279479)
+    .. controls (413.11905634, 385.65946150) and (413.75905632, 383.40612822) .. (415.87905627, 383.20612823)
+    .. controls (424.22572273, 380.80612829) and (432.86572251, 383.40612822) .. (441.34572230, 383.33946156)
+    .. controls (465.45238836, 385.19279484) and (489.63905443, 385.57946150) .. (513.75905382, 387.15279479)
+    .. controls (517.51905373, 387.05946146) and (519.97238700, 390.40612805) .. (521.50572030, 393.41946130)
+    .. controls (509.73238726, 396.53946123) and (497.45238756, 395.43279459) .. (485.46572120, 394.75279460)
+    .. controls (468.42572162, 394.47279461) and (451.41238871, 393.20612798) .. (434.35905581, 393.23279464)
+  (409.93238975, 351.67279568)
+    .. controls (434.37238914, 354.71279560) and (459.05238852, 354.63279561) .. (483.62572124, 355.91279557)
+    .. controls (485.82572119, 350.48612904) and (483.75905457, 344.68612919) .. (479.95905467, 340.59279596)
+    .. controls (476.77238808, 336.71279605) and (472.75905485, 333.45946280) .. (470.66572157, 328.76612959)
+    .. controls (481.29238797, 329.64612956) and (491.83905437, 331.35279619) .. (502.50572077, 331.65946285)
+    .. controls (510.19905391, 333.91279612) and (513.45238716, 342.01946259) .. (519.03905369, 346.97946246)
+    .. controls (523.06572026, 349.80612906) and (527.89238680, 353.35279564) .. (533.07905334, 351.55279568)
+    .. controls (540.77238648, 348.75279575) and (544.71905305, 339.03279600) .. (542.39905311, 331.43279619)
+    .. controls (536.53238659, 309.72613006) and (530.59905340, 287.99279727) .. (522.91905359, 266.85946447)
+    .. controls (511.78572054, 262.21946458) and (499.50572085, 266.01946449) .. (487.89238780, 265.24613117)
+    .. controls (483.34572125, 264.73946452) and (478.39905471, 265.49946450) .. (474.30572148, 263.07279790)
+    .. controls (474.23905481, 261.36613127) and (474.34572147, 259.65946465) .. (474.65238813, 257.96613136)
+    .. controls (478.51905470, 242.35279841) and (481.25238797, 226.47279881) .. (485.98572118, 211.08613253)
+    .. controls (487.06572116, 204.00613271) and (487.67905447, 196.05946624) .. (484.25238789, 189.51279973)
+    .. controls (476.31905476, 184.71279985) and (465.85238835, 189.35279974) .. (460.89238848, 196.41946623)
+    .. controls (451.43905538, 210.80613254) and (446.58572217, 227.61946545) .. (443.34572225, 244.36613170)
+    .. controls (442.22572228, 249.07279825) and (441.66572229, 254.07279812) .. (438.85238903, 258.15279802)
+    .. controls (419.99905617, 259.47279799) and (405.93238985, 243.37946505) .. (387.73239031, 241.71279843)
+    .. controls (379.39905718, 242.19279842) and (375.17239062, 251.88613151) .. (376.69239058, 259.24613132)
+    .. controls (377.26572390, 264.15279787) and (381.23905714, 267.63279778) .. (385.10572371, 270.17946438)
+    .. controls (391.30572355, 273.80613096) and (398.41239004, 275.27279759) .. (405.15905654, 277.51279753)
+    .. controls (415.71905627, 280.60613079) and (426.22572268, 284.92613068) .. (437.39905573, 284.68613069)
+    .. controls (437.42572240, 291.23279719) and (437.54572239, 297.80613036) .. (436.70572242, 304.32613020)
+    .. controls (418.06572288, 303.93946354) and (402.18572328, 292.19279717) .. (383.91905707, 289.95279722)
+    .. controls (379.93239050, 289.39279724) and (376.61239058, 292.69946382) .. (375.42572395, 296.21946373)
+    .. controls (373.71905732, 301.08613028) and (374.13239065, 306.87279680) .. (376.93239058, 311.27279669)
+    .. controls (384.66572372, 317.89946319) and (395.17239012, 320.05946314) .. (405.07905654, 320.76612979)
+    .. controls (417.17238957, 322.07279642) and (429.94572258, 321.69946310) .. (441.02572231, 327.49946295)
+    .. controls (440.74572231, 329.12612958) and (440.49238899, 330.76612954) .. (440.25238899, 332.37946283)
+    .. controls (429.37238927, 333.83279613) and (417.82572289, 328.43279626) .. (407.47905648, 333.69946280)
+    .. controls (400.06572333, 337.24612937) and (401.46572330, 350.71279570) .. (409.93238975, 351.67279568)
+  (470.38572157, 306.49946348)
+    .. controls (470.22572158, 300.08613030) and (470.13238825, 293.64613046) .. (470.43905491, 287.23279729)
+    .. controls (479.91905467, 288.63279726) and (489.97238775, 287.17946396) .. (499.06572086, 290.41946388)
+    .. controls (502.74572076, 295.76613041) and (502.45238744, 302.59279691) .. (502.78572076, 308.79279675)
+    .. controls (491.93238770, 310.05946339) and (481.17238797, 307.24613012) .. (470.38572157, 306.49946348)}
+\def\fdulogo at emblem@F{%
+  ( 85.70573119, 304.00613021)
+    .. controls ( 90.07906441, 311.59279668) and (100.06573083, 314.24612995) .. (108.09239730, 311.64613001)
+    .. controls (103.82573074, 301.69946360) and (107.82573064, 290.84613053) .. (112.17239720, 281.68613076)
+    .. controls (119.41239701, 280.19279747) and (126.06573018, 284.45946403) .. (132.95906334, 285.88613066)
+    .. controls (137.94572988, 286.45946398) and (139.27906318, 291.77946384) .. (141.21239647, 295.53946375)
+    .. controls (142.14572978, 295.53946375) and (144.01239640, 295.52613042) .. (144.94572971, 295.52613042)
+    .. controls (148.49239629, 287.19279729) and (154.53239614, 279.35279749) .. (153.91906282, 269.83279773)
+    .. controls (149.89239625, 270.88613103) and (145.59906303, 272.07279767) .. (141.47906313, 270.85946437)
+    .. controls (125.89239685, 265.43279784) and (110.17239725, 260.40613130) .. ( 94.46573097, 255.35279809)
+    .. controls ( 89.01239777, 253.68613146) and ( 84.71906455, 249.71279823) .. ( 80.70573132, 245.81946499)
+    .. controls ( 73.74573149, 252.05946484) and ( 70.87906489, 261.25946461) .. ( 68.05239830, 269.87279773)
+    .. controls ( 64.50573172, 280.96613078) and ( 57.47906523, 291.33946386) .. ( 58.22573188, 303.44613022)
+    .. controls ( 62.19906511, 305.32613017) and ( 65.98573168, 307.81946344) .. ( 70.30573158, 308.83279675)
+    .. controls ( 74.57239814, 304.05946354) and ( 71.82573154, 297.28613037) .. ( 71.27906488, 291.71279718)
+    .. controls ( 72.87906484, 283.55279738) and ( 77.30573140, 276.27279757) .. ( 80.70573132, 268.76613109)
+    .. controls ( 88.21239779, 270.85946437) and ( 96.07906426, 272.48613099) .. (102.67906410, 276.83279755)
+    .. controls (102.70573077, 283.04613073) and ( 99.11906419, 288.36613060) .. ( 97.53239756, 294.19279712)
+    .. controls ( 95.97239760, 299.61946365) and ( 90.13239775, 301.51279693) .. ( 85.70573119, 304.00613021)}
+\def\fdulogo at emblem@U at i{%
+  ( 50.99906539, 392.96612798)
+    .. controls ( 54.67906530, 390.99279470) and ( 58.05239855, 387.84612811) .. ( 62.49239844, 387.95279477)
+    .. controls ( 76.31906476, 388.51279476) and ( 90.14573108, 389.13946141) .. (103.97239740, 389.69946140)
+    .. controls (110.18573058, 389.12612808) and (117.35906373, 390.09946139) .. (122.42573027, 385.65946150)
+    .. controls (129.65239676, 379.60612832) and (131.54573004, 369.59279523) .. (131.63906338, 360.61946212)
+    .. controls (131.19906339, 353.85946229) and (131.29239672, 346.59279581) .. (127.78573014, 340.53946263)
+    .. controls (126.01239685, 337.35279604) and (122.75906360, 335.13946276) .. (119.15906369, 334.52612944)
+    .. controls (101.30573080, 331.45946285) and ( 83.07906459, 332.15279617) .. ( 65.17239837, 329.57946290)
+    .. controls ( 61.19906514, 328.36612960) and ( 57.73239856, 324.13946304) .. ( 53.25239867, 325.91279632)
+    .. controls ( 51.42573205, 332.44612949) and ( 51.81239870, 339.35279599) .. ( 53.03906534, 345.95279582)
+    .. controls ( 74.42573147, 345.69946250) and ( 95.83906427, 346.47279581) .. (117.07906374, 348.97946241)
+    .. controls (119.71906367, 350.11279572) and (120.93239698, 353.23279564) .. (121.71906362, 355.83279558)
+    .. controls (123.27906358, 362.08612875) and (121.62573029, 368.72612859) .. (119.06573036, 374.47279511)
+    .. controls (117.10573041, 378.72612834) and (111.81239720, 378.75279500) .. (107.82573064, 378.64612834)
+    .. controls ( 92.15906436, 378.25946168) and ( 76.47906475, 377.84612836) .. ( 60.86573181, 376.51279506)
+    .. controls ( 58.59906520, 373.07279515) and ( 56.30573193, 366.75279530) .. ( 51.03906539, 368.65946192)
+    .. controls ( 50.62573207, 369.13946191) and ( 49.82573209, 370.11279522) .. ( 49.41239876, 370.59279521)
+    .. controls ( 47.93239880, 378.00612836) and ( 46.78573216, 386.17946148) .. ( 50.99906539, 392.96612798)}
+\def\fdulogo at emblem@D{%
+  (64.02573173, 473.6194593)
+    .. controls ( 78.02573138, 477.27279254) and ( 92.67906435, 474.61945927) .. (106.45239734, 471.21945936)
+    .. controls (111.21239722, 469.93945939) and (116.33239709, 469.28612607) .. (120.49239699, 466.43279281)
+    .. controls (127.27906348, 462.27279292) and (131.21239672, 454.53945978) .. (132.19906336, 446.80612664)
+    .. controls (133.41239666, 440.40612680) and (130.65239673, 434.23279362) .. (129.90573009, 427.96612711)
+    .. controls (128.55906345, 418.87279400) and (127.78573014, 408.80612759) .. (121.33239697, 401.63279443)
+    .. controls (114.69239713, 407.53946095) and (105.42573070, 407.83279428) .. ( 97.10573091, 409.17946091)
+    .. controls ( 80.67906465, 411.91279417) and ( 63.93239840, 417.91279402) .. ( 47.22573215, 413.43279414)
+    .. controls ( 48.17239880, 428.72612709) and ( 50.41239874, 443.89946004) .. ( 52.57239869, 459.05945966)
+    .. controls ( 53.59906533, 465.39279284) and ( 57.58573189, 471.75279268) .. ( 64.02573173, 473.61945930)
+  ( 67.21239832, 459.93945964)
+    .. controls ( 60.79906515, 452.17945983) and ( 60.07906516, 441.68612676) .. ( 58.89239853, 432.11279367)
+    .. controls ( 78.57239804, 427.71279378) and ( 98.43906421, 424.23279387) .. (118.22573038, 420.35279396)
+    .. controls (119.94573033, 426.56612714) and (122.21239694, 432.80612699) .. (122.02573028, 439.35279349)
+    .. controls (121.94573028, 443.07279340) and (121.23906364, 447.20612663) .. (118.14573038, 449.64612656)
+    .. controls (107.43906398, 459.37945965) and ( 92.27906436, 460.72612629) .. ( 78.53239804, 462.00612626)
+    .. controls ( 74.75906480, 461.88612626) and ( 69.99906492, 463.28612622) .. ( 67.21239832, 459.93945964)}
+\def\fdulogo at emblem@A{%
+  (107.38573065, 530.41945788)
+    .. controls (111.05239722, 526.09945799) and (114.81239713, 521.85945809) .. (118.71906370, 517.76612486)
+    .. controls (120.58573032, 520.44612479) and (122.43906361, 523.13945806) .. (124.26573023, 525.84612466)
+    .. controls (118.67906370, 527.49945795) and (113.02573051, 528.93945792) .. (107.38573065, 530.41945788)
+  ( 89.70573109, 544.55279086)
+    .. controls ( 91.74573104, 545.16612418) and ( 93.89239765, 544.69945752) .. ( 95.93239760, 544.41945753)
+    .. controls (115.55906378, 540.88612428) and (134.86572996, 535.79279108) .. (154.51906280, 532.49945783)
+    .. controls (160.10572933, 531.44612452) and (167.25239582, 533.00612448) .. (170.87906239, 527.48612462)
+    .. controls (168.58572912, 523.08612473) and (165.61239586, 519.11279149) .. (162.43906261, 515.32612492)
+    .. controls (157.33239607, 519.85945814) and (150.53239624, 521.39279144) .. (144.02572973, 522.69945807)
+    .. controls (139.35906318, 516.29945823) and (134.78572996, 509.81945839) .. (130.29239674, 503.28612522)
+    .. controls (132.79906335, 500.36612530) and (135.02572996, 497.21945871) .. (137.59906323, 494.33945878)
+    .. controls (140.86572981, 490.48612554) and (146.43906301, 490.76612554) .. (150.51906290, 488.17945893)
+    .. controls (145.53239636, 481.44612577) and (143.07906309, 472.28612600) .. (135.02572996, 468.32612610)
+    .. controls (120.83906365, 493.68612546) and (101.47906413, 515.53945825) .. ( 85.14573120, 539.44612432)
+    .. controls ( 86.58573117, 541.20612428) and ( 87.99906447, 543.03279090) .. ( 89.70573109, 544.55279086)}
+\def\fdulogo at emblem@N at i{%
+  (153.31906283, 624.63278886)
+    .. controls (156.06572943, 630.35278871) and (161.94572928, 633.68612196) .. (167.59906248, 635.97945524)
+    .. controls (179.55906218, 618.63278901) and (194.97239513, 604.12612270) .. (208.77239478, 588.31278976)
+    .. controls (212.86572801, 584.17945653) and (219.05239452, 578.93945667) .. (215.43906128, 572.49945683)
+    .. controls (210.57239474, 572.80612349) and (206.01239485, 574.61945677) .. (201.35906163, 575.87279008)
+    .. controls (183.07906209, 581.17945661) and (165.26572920, 588.16612310) .. (146.61239633, 592.09945634)
+    .. controls (156.63906275, 580.55278996) and (168.83906245, 571.23279019) .. (179.42572885, 560.24612380)
+    .. controls (183.30572875, 555.93945724) and (189.82572859, 557.67279053) .. (194.91906179, 556.27279057)
+    .. controls (192.39906186, 547.75279078) and (184.19906206, 542.28612425) .. (177.15906224, 537.52612437)
+    .. controls (172.38572902, 539.67279098) and (172.66572902, 546.39279081) .. (168.70572912, 549.51279073)
+    .. controls (157.05239607, 560.07279047) and (146.07906301, 571.32612352) .. (134.61239663, 582.08612325)
+    .. controls (131.57239671, 585.24612317) and (126.90573016, 585.17945651) .. (122.93239693, 586.12612315)
+    -- (119.852397, 589.08612308)
+    .. controls (124.66573022, 596.48612289) and (131.69239671, 601.99278942) .. (137.39906323, 608.63278926)
+    .. controls (154.65239613, 603.63278938) and (171.90572904, 598.63278951) .. (189.26572860, 594.00612296)
+    .. controls (183.41239541, 601.83278943) and (175.70572894, 608.04612260) .. (169.03906244, 615.16612243)
+    .. controls (165.26572920, 619.17945566) and (159.41239601, 617.56612237) .. (154.55906280, 618.04612235)
+    .. controls (152.37239619, 619.28612232) and (152.86572951, 622.55278891) .. (153.31906283, 624.63278886)}
+\def\fdulogo at emblem@U at ii{%
+  (258.77239353, 689.04612058)
+    .. controls (263.03906009, 694.20612045) and (270.21239324, 695.88612041) .. (276.62572642, 694.88612043)
+    .. controls (276.59905975, 690.75278720) and (275.33239312, 686.48612064) .. (276.51905975, 682.41945408)
+    .. controls (282.11905961, 665.88612116) and (289.74572609, 649.93945489) .. (293.02572601, 632.69945532)
+    .. controls (294.21239264, 626.47278881) and (291.66572604, 619.00612233) .. (285.58572619, 616.32612240)
+    .. controls (278.66572637, 613.15278914) and (271.43905988, 610.23278922) .. (263.81239340, 609.36612257)
+    .. controls (254.57239364, 608.23278927) and (245.35906053, 614.29945578) .. (241.86572729, 622.75278890)
+    .. controls (236.78572741, 634.63278861) and (232.09239420, 646.68612164) .. (227.06572766, 658.57945467)
+    .. controls (224.87906104, 664.13945454) and (217.69239456, 665.99278782) .. (216.43906126, 672.12612100)
+    .. controls (224.42572772, 675.79278758) and (232.47906085, 680.09945414) .. (241.53239396, 680.01945414)
+    .. controls (240.37239399, 674.65945427) and (235.95906077, 669.33945441) .. (238.66572737, 663.75278788)
+    .. controls (244.29239389, 650.99278820) and (248.97239378, 637.77945519) .. (255.50572695, 625.41945550)
+    .. controls (257.49239356, 621.37945560) and (262.10572678, 619.03278900) .. (266.54572667, 619.45945565)
+    .. controls (273.71905982, 620.08612230) and (280.29239299, 623.95278887) .. (285.22572620, 629.05945541)
+    .. controls (285.79905952, 636.09945524) and (282.41239294, 642.45945508) .. (280.02572633, 648.84612158)
+    .. controls (275.86572644, 658.92612133) and (272.35905986, 669.28612107) .. (267.86572664, 679.23278749)
+    .. controls (266.06572668, 683.59278738) and (260.81239348, 684.91278735) .. (258.77239353, 689.04612058)}
+\def\fdulogo at emblem@N at ii{%
+  (345.57239136, 707.99278677)
+    .. controls (351.03905789, 715.44611992) and (361.02572431, 712.24612000) .. (368.81239078, 712.56611999)
+    .. controls (367.34572415, 708.07278677) and (363.99905757, 704.12612020) .. (363.83905757, 699.28612032)
+    .. controls (365.07905754, 679.73945415) and (367.55905748, 660.25945463) .. (368.05239080, 640.65945512)
+    .. controls (368.63905745, 636.84612188) and (362.54572427, 633.19278864) .. (360.34572432, 637.16612188)
+    .. controls (349.19905794, 652.40612150) and (338.90572486, 668.24612110) .. (328.15905846, 683.76612071)
+    .. controls (326.07905851, 686.48612064) and (324.19905856, 690.83278720) .. (320.06572533, 690.09945389)
+    .. controls (319.41239201, 685.96612066) and (319.43905868, 681.75278743) .. (320.21239199, 677.63278753)
+    .. controls (322.09239195, 666.87278780) and (322.53239194, 655.93945474) .. (324.17239190, 645.15278834)
+    .. controls (325.58572519, 640.72612179) and (329.97239175, 638.20612185) .. (332.14572503, 634.19278862)
+    .. controls (326.27905851, 628.95278875) and (317.94572538, 628.97945541) .. (310.55905890, 628.49945543)
+    .. controls (305.85239235, 632.85945532) and (311.27905888, 638.31278851) .. (311.17239222, 643.37945505)
+    .. controls (310.53239224, 656.73945472) and (307.94572563, 669.89945439) .. (306.62572567, 683.19278739)
+    .. controls (306.25239234, 686.61945397) and (306.75905900, 690.33945388) .. (304.94572571, 693.44612047)
+    .. controls (302.85239243, 697.00612038) and (300.17239250, 700.25945363) .. (298.98572586, 704.29945353)
+    .. controls (306.07905901, 706.59278681) and (314.30572548, 709.81945339) .. (321.50572530, 706.32612015)
+    .. controls (335.55905828, 694.53945378) and (342.13239145, 675.93945424) .. (356.90572441, 664.89945452)
+    .. controls (356.95905774, 675.96612091) and (354.50572447, 686.87278730) .. (354.14572448, 697.93945369)
+    .. controls (353.74572449, 702.85945357) and (348.65239128, 704.89945352) .. (345.57239136, 707.99278677)}
+\def\fdulogo at emblem@I at i{%
+  (393.63905683, 711.84612001)
+    .. controls (401.78572329, 713.56611997) and (410.42572307, 711.12612003) .. (418.22572288, 708.49945343)
+    .. controls (419.49238951, 706.96612013) and (420.79905615, 704.49945353) .. (418.99905619, 702.80612024)
+    .. controls (417.34572290, 700.15278697) and (413.27905633, 699.49945365) .. (412.61238968, 696.23278707)
+    .. controls (410.30572308, 680.88612078) and (409.26572310, 665.35278784) .. (406.74572316, 650.01945489)
+    .. controls (407.15905649, 644.20612170) and (412.57238969, 639.67278848) .. (411.42572305, 633.57945530)
+    .. controls (402.90572326, 634.09945529) and (393.87905682, 633.55278863) .. (385.95905702, 637.24612187)
+    .. controls (382.23905711, 642.79278840) and (392.01239020, 645.07278835) .. (392.18572353, 650.45945488)
+    .. controls (394.46572347, 666.68612114) and (395.21239012, 683.08612073) .. (397.15905674, 699.33945366)
+    .. controls (396.67905675, 703.57945355) and (388.99905694, 707.79278678) .. (393.63905683, 711.84612001)}
+\def\fdulogo at emblem@V{%
+  (441.78572229, 703.56612022)
+    .. controls (448.49238879, 702.35278691) and (455.27905528, 701.24612027) .. (461.71905512, 698.95278700)
+    .. controls (463.45238841, 698.27278702) and (465.39905503, 697.71278703) .. (466.45238834, 696.01945374)
+    .. controls (466.90572166, 691.77945384) and (462.97238843, 688.87278725) .. (461.18572180, 685.39278734)
+    .. controls (460.79905515, 673.55278763) and (460.79905515, 661.69945460) .. (461.15905514, 649.85945489)
+    .. controls (460.83905515, 646.92612163) and (463.10572176, 644.73945502) .. (464.71905505, 642.59278841)
+    .. controls (473.78572149, 651.93945484) and (480.62572132, 663.12612123) .. (488.50572112, 673.44612097)
+    .. controls (491.79905437, 677.59278753) and (488.85238778, 683.29945406) .. (491.63905438, 687.63278728)
+    .. controls (498.55905420, 687.17945396) and (507.41238731, 686.35278731) .. (511.02572056, 679.44612082)
+    .. controls (503.19905409, 674.83278760) and (496.61238758, 668.47278776) .. (491.50572105, 660.96612128)
+    .. controls (480.99905464, 647.37945495) and (471.69238821, 632.75278865) .. (459.53238851, 620.52612229)
+    .. controls (456.67905525, 622.16612225) and (453.65238866, 623.43278889) .. (450.57238874, 624.53945553)
+    .. controls (448.95905544, 641.12612178) and (447.43905548, 657.71278803) .. (445.82572219, 674.29945428)
+    .. controls (445.07905554, 679.45945415) and (445.34572220, 684.76612069) .. (443.85238890, 689.79278723)
+    .. controls (442.51905560, 694.27278712) and (441.53238896, 698.87278700) .. (441.78572229, 703.56612022)}
+\def\fdulogo at emblem@E{%
+  (526.98572016, 668.59278776)
+    .. controls (530.17238675, 669.21945441) and (532.65238668, 666.80612114) .. (535.09238662, 665.19278784)
+    .. controls (547.45238631, 655.96612141) and (561.49238596, 649.28612157) .. (573.99905232, 640.27278847)
+    .. controls (578.85238553, 635.77945524) and (575.13238562, 627.07278880) .. (569.21238577, 625.37945550)
+    .. controls (565.73238586, 639.41945515) and (550.83905290, 644.23278837) .. (539.90571984, 651.08612153)
+    .. controls (535.22571995, 646.21945498) and (529.57238676, 641.72612176) .. (527.15905349, 635.21945526)
+    .. controls (529.51905343, 629.52612207) and (535.87905327, 627.33945546) .. (540.77238648, 624.31278886)
+    .. controls (546.33238634, 620.17945563) and (553.49238616, 625.57945550) .. (559.19905269, 622.00612226)
+    .. controls (557.10571941, 614.04612245) and (552.87905284, 605.24612267) .. (544.41238639, 602.64612274)
+    .. controls (542.49238644, 612.75278915) and (533.62571999, 619.48612232) .. (524.83905355, 623.59278888)
+    .. controls (521.87905362, 625.23278884) and (519.13238702, 622.43278891) .. (517.53238706, 620.20612230)
+    .. controls (514.90572046, 616.47278906) and (511.87905387, 612.81945582) .. (510.49238724, 608.40612260)
+    .. controls (509.59905393, 605.47278934) and (511.30572055, 602.61945607) .. (513.65238716, 600.96612278)
+    .. controls (519.42572035, 596.49945623) and (525.18572020, 591.80612301) .. (531.94572003, 588.91278975)
+    .. controls (536.98571991, 588.85945642) and (541.79905312, 590.76612304) .. (546.73238633, 591.63278968)
+    .. controls (550.63905290, 583.88612321) and (541.33238647, 575.32612342) .. (533.66571999, 578.12612335)
+    .. controls (521.42572030, 583.35278989) and (511.61238721, 592.63278966) .. (500.49238749, 599.72612281)
+    .. controls (495.63905428, 603.19278939) and (489.46572110, 605.95278932) .. (487.42572115, 612.03278917)
+    .. controls (495.85238760, 615.57945575) and (501.03905414, 623.43278889) .. (505.39905403, 631.05945536)
+    .. controls (511.77238721, 642.09945509) and (521.27905363, 651.56612152) .. (524.62572022, 664.15278787)
+    .. controls (525.11905354, 665.76612116) and (525.31905353, 667.68612111) .. (526.98572016, 668.59278776)}
+\def\fdulogo at emblem@R{%
+  (594.53238514, 624.33945553)
+    .. controls (604.35905156, 620.15278897) and (610.29238474, 610.84612253) .. (618.54571787, 604.51278936)
+    .. controls (626.91905099, 597.44612287) and (634.30571748, 587.99278977) .. (635.51905078, 576.76612339)
+    .. controls (636.38571742, 567.01945696) and (628.43905096, 557.52612387) .. (618.63905120, 556.84612388)
+    .. controls (612.81238468, 556.05945724) and (607.19905149, 559.85945714) .. (601.46571830, 557.91279052)
+    .. controls (599.13238502, 548.69945742) and (595.37238512, 539.60612432) .. (596.02571843, 529.89945789)
+    .. controls (596.55905175, 525.01945801) and (590.23905191, 525.37945800) .. (587.15905199, 526.69945797)
+    .. controls (579.63905218, 528.67279126) and (576.29238559, 538.76612434) .. (580.51905215, 545.09945751)
+    .. controls (584.26571873, 550.67279071) and (587.94571863, 556.56612389) .. (589.05238527, 563.32612372)
+    .. controls (589.65238526, 567.80612361) and (587.42571865, 572.03279017) .. (584.82571871, 575.51279008)
+    .. controls (584.02571873, 575.35279009) and (582.41238544, 575.04612343) .. (581.61238546, 574.88612343)
+    .. controls (576.83905225, 570.57945687) and (571.67905237, 566.53945698) .. (567.95905247, 561.21945711)
+    .. controls (567.26571915, 557.91279052) and (567.86571914, 553.57945730) .. (564.86571921, 551.31279069)
+    .. controls (561.95905262, 550.63279071) and (560.17238600, 553.53945730) .. (558.30571938, 555.21945726)
+    .. controls (554.73238613, 559.59279048) and (550.77238623, 563.65945705) .. (547.39905298, 568.17945693)
+    .. controls (545.87905302, 569.69945690) and (546.42571967, 571.96612351) .. (546.21238634, 573.85945679)
+    .. controls (549.82571959, 575.89945674) and (554.03905282, 574.81945677) .. (557.94571938, 575.44612342)
+    .. controls (561.51905263, 577.15279004) and (563.70571924, 580.59278996) .. (566.37238584, 583.36612322)
+    .. controls (574.14571898, 591.17945636) and (581.69238546, 599.20612283) .. (589.57238526, 606.91278930)
+    .. controls (594.50571847, 611.35278919) and (593.13238517, 618.48612234) .. (594.53238514, 624.33945553)
+  (592.65238518, 585.5394565)
+    .. controls (591.53238521, 581.93945659) and (593.85238515, 578.40612335) .. (596.10571843, 575.77945674)
+    .. controls (598.30571838, 573.47279014) and (600.42571832, 570.77945687) .. (603.53238491, 569.68612356)
+    .. controls (612.70571802, 566.64612364) and (624.47905105, 576.00612341) .. (621.10571781, 585.80612316)
+    .. controls (617.58571789, 591.11278969) and (613.22571800, 596.53945623) .. (606.97238483, 598.64612284)
+    .. controls (601.49238496, 595.15278959) and (596.38571842, 590.89945637) .. (592.65238518, 585.53945650)}
+\def\fdulogo at emblem@S{%
+  (638.23905071, 535.65945775)
+    .. controls (644.62571722, 539.87279098) and (653.18571700, 542.09945759) .. (660.43905016, 538.80612434)
+    .. controls (669.22571660, 534.85945777) and (674.87904979, 525.96612466) .. (676.86571641, 516.77945822)
+    .. controls (677.59904973, 511.88612501) and (677.78571639, 506.92612513) .. (678.57238304, 502.03279192)
+    .. controls (679.25238302, 497.08612538) and (683.17238292, 493.05945881) .. (682.65238293, 487.87279228)
+    .. controls (676.70571642, 483.33945906) and (669.71904992, 479.61945915) .. (661.99905012, 480.09945914)
+    .. controls (660.69238348, 487.24612562) and (669.39904993, 491.04612553) .. (669.37238327, 497.92612536)
+    .. controls (669.99904992, 507.01945846) and (667.61238331, 516.13945824) .. (663.41238341, 524.16612470)
+    .. controls (660.99905014, 528.63279126) and (654.89238363, 529.96612456) .. (650.89238373, 526.83279130)
+    .. controls (645.69238386, 512.75279165) and (649.19905044, 497.60612537) .. (650.66571707, 483.17945906)
+    .. controls (651.43905038, 478.12612585) and (648.98571711, 473.13945931) .. (645.39905053, 469.73945940)
+    .. controls (634.13238415, 460.97945961) and (616.05238460, 463.81945954) .. (607.49238481, 475.07279260)
+    .. controls (599.98571833, 484.69945902) and (597.97238505, 497.76612536) .. (599.85238500, 509.60612507)
+    .. controls (597.17238507, 510.68612504) and (594.49238514, 511.72612501) .. (591.83905187, 512.81945832)
+    .. controls (591.82571854, 514.47279161) and (591.81238520, 516.12612490) .. (591.81238520, 517.77945819)
+    .. controls (599.25238502, 521.72612476) and (606.35905151, 526.57945797) .. (614.50571797, 528.99279125)
+    .. controls (618.49238454, 530.51279121) and (621.70571779, 524.55279136) .. (618.77238453, 521.79279143)
+    .. controls (615.51905128, 517.81945819) and (610.41238474, 514.41945828) .. (610.30571808, 508.77945842)
+    .. controls (609.93238475, 501.56612527) and (609.59905143, 493.80612546) .. (613.13238467, 487.24612562)
+    .. controls (615.38571795, 482.81945907) and (620.01238450, 479.41945915) .. (625.03905104, 479.24612582)
+    .. controls (630.01238425, 480.01945914) and (632.85238418, 485.43279234) .. (633.13238417, 490.04612555)
+    .. controls (632.71905085, 499.36612532) and (629.99905092, 508.51279176) .. (630.45238424, 517.88612486)
+    .. controls (630.45238424, 524.44612469) and (632.39905086, 531.89945784) .. (638.23905071, 535.65945775)}
+\def\fdulogo at emblem@I at ii{%
+  (693.17238267, 460.65945962)
+    .. controls (695.39904928, 458.89945967) and (698.14571588, 457.08612638) .. (698.39904921, 453.96612646)
+    .. controls (700.21238249, 444.25946003) and (703.63904908, 434.81946027) .. (704.10571573, 424.88612718)
+    .. controls (702.42571577, 424.35279386) and (700.77238248, 423.80612721) .. (699.13238252, 423.24612722)
+    .. controls (696.71904925, 426.16612715) and (694.93238263, 430.25946038) .. (690.86571606, 431.11279369)
+    .. controls (676.33238309, 429.47279374) and (662.25238344, 425.27279384) .. (647.78571714, 423.21946056)
+    .. controls (642.43905061, 422.31279391) and (636.83905075, 421.92612726) .. (632.07905086, 419.04612733)
+    .. controls (631.17238422, 414.68612744) and (630.98571756, 409.28612757) .. (626.54571767, 406.89946097)
+    .. controls (625.27905103, 407.88612761) and (623.54571774, 408.52612759) .. (622.90571776, 410.12612755)
+    .. controls (618.81238453, 419.75279398) and (617.74571789, 430.27279372) .. (615.85238460, 440.47279346)
+    .. controls (615.19905129, 444.11279337) and (616.45238459, 449.79279323) .. (621.06571781, 449.76612656)
+    .. controls (626.46571767, 447.93945994) and (625.82571769, 440.51279346) .. (630.81238423, 438.12612685)
+    .. controls (649.21238377, 441.15279344) and (667.62571664, 444.21946003) .. (685.87904952, 447.96612661)
+    .. controls (691.09238272, 449.81945989) and (691.13238272, 456.33945973) .. (693.17238267, 460.65945962)}
+\def\fdulogo at emblem@T{%
+  (687.11904949, 391.40612802)
+    .. controls (692.18571603, 396.44612789) and (700.15904916, 398.43279451) .. (706.61238233, 394.81946127)
+    .. controls (706.78571566, 374.25946178) and (705.19904904, 353.75279563) .. (703.82571574, 333.25946281)
+    .. controls (700.34571582, 329.09946291) and (694.30571598, 327.64612961) .. (689.37238277, 329.96612956)
+    .. controls (688.77238278, 331.28612952) and (686.81238283, 333.12612948) .. (688.65238278, 334.40612945)
+    .. controls (693.03904934, 338.87279600) and (696.07904926, 344.75279585) .. (696.21238259, 351.11279569)
+    .. controls (676.75904975, 354.25946228) and (656.98571691, 354.79279560) .. (637.30571740, 354.53946228)
+    .. controls (634.55905080, 351.79279568) and (633.61238416, 346.79279580) .. (629.33238427, 345.80612916)
+    .. controls (626.47905100, 344.97946251) and (624.83905105, 348.13946244) .. (624.63905105, 350.49946238)
+    .. controls (623.18571775, 359.37946215) and (623.46571775, 368.61946192) .. (625.85238435, 377.31279504)
+    .. controls (626.31905101, 378.97946166) and (627.93238430, 379.81946164) .. (629.11905094, 380.89946162)
+    .. controls (632.85238418, 378.88612833) and (634.81238413, 374.55279511) .. (638.83905070, 373.08612848)
+    .. controls (652.43905036, 371.25946186) and (666.17238335, 370.56612854) .. (679.85238300, 369.60612857)
+    .. controls (683.91904957, 369.20612858) and (688.18571613, 368.07279527) .. (692.10571603, 369.79279523)
+    .. controls (696.71904925, 371.05946186) and (698.61238253, 377.13946171) .. (696.22571593, 381.05946161)
+    .. controls (694.06571598, 385.20612818) and (690.09238275, 387.91279477) .. (687.11904949, 391.40612802)}
+\def\fdulogo at emblem@Y{%
+  (617.57238456, 308.67279676)
+    .. controls (618.33238454, 308.65946342) and (619.85238450, 308.63279676) .. (620.61238448, 308.63279676)
+    .. controls (623.38571775, 305.37946350) and (624.41238439, 301.15279694) .. (625.58571769, 297.15279704)
+    .. controls (633.54571749, 294.43279711) and (641.94571728, 290.29946388) .. (650.53238374, 292.67279716)
+    .. controls (660.39905016, 294.88613043) and (670.37238324, 296.63279706) .. (680.22571633, 298.93946367)
+    .. controls (686.91904949, 299.96613031) and (690.85238273, 306.43279681) .. (697.30571590, 308.08613010)
+    .. controls (698.06571588, 299.28613032) and (694.90571596, 290.91279720) .. (692.13238270, 282.73946407)
+    .. controls (691.75904937, 281.24613077) and (690.83904940, 280.21946413) .. (689.37238277, 279.64613081)
+    .. controls (686.74571616, 280.49946413) and (685.17238287, 282.87279740) .. (683.39904958, 284.80613069)
+    .. controls (673.79904982, 282.88613073) and (664.23905006, 280.71279745) .. (654.85238363, 277.89946419)
+    .. controls (662.07905011, 271.45946435) and (667.39904998, 262.52613124) .. (676.59904975, 258.60613134)
+    .. controls (678.67904970, 257.53946470) and (681.47904963, 257.63279803) .. (683.17238292, 255.99279807)
+    .. controls (684.90571621, 248.51279826) and (682.79904960, 238.67279851) .. (674.89238313, 235.51279858)
+    .. controls (669.46571660, 249.71279823) and (655.46571695, 257.24613137) .. (646.86571716, 269.09946441)
+    .. controls (641.23905064, 276.16613090) and (631.89238420, 278.01946419) .. (623.53238441, 279.72613081)
+    .. controls (617.95905122, 280.92613078) and (613.19905134, 272.47279766) .. (607.85238480, 276.92613088)
+    .. controls (608.41238479, 285.40613067) and (611.27905138, 293.47279714) .. (613.22571800, 301.68613026)
+    .. controls (613.77238466, 304.49946353) and (615.46571795, 306.80613014) .. (617.57238456, 308.67279676)}
+\def\fdulogo at emblem@one{%
+  (210.6390614,174.63280011)
+    .. controls (216.67906125, 175.21946676) and (221.81239445, 178.87280000) .. (227.55906098, 180.56613329)
+    .. controls (232.15906086, 177.80613336) and (236.70572742, 174.56613344) .. (239.37239402, 169.75280023)
+    .. controls (238.14572738, 166.88613363) and (236.77239408, 164.03280037) .. (234.83906080, 161.55280043)
+    .. controls (221.77239446, 143.96613421) and (209.17239477, 126.04613465) .. (196.18572843, 108.40613510)
+    .. controls (194.77239513, 106.56613514) and (193.47906183, 104.56613519) .. (191.71906187, 103.00613523)
+    .. controls (187.97239530, 101.52613527) and (184.55906205, 104.48613519) .. (181.98572878, 106.81946847)
+    .. controls (179.35906218, 109.25946841) and (175.50572895, 112.13946834) .. (177.26572890, 116.21946823)
+    .. controls (185.81239535, 129.96613456) and (196.33239509, 142.37946758) .. (204.86572821, 156.15280057)
+    .. controls (200.26572833, 159.91280047) and (195.41239511, 163.57946705) .. (191.87906187, 168.41946693)
+    .. controls (191.99906187, 173.07280015) and (195.02572846, 177.91280002) .. (199.63906168, 179.32613332)
+    .. controls (203.25239492, 177.65946670) and (206.67906150, 175.33946676) .. (210.63906140, 174.63280011)}
+\def\fdulogo at emblem@nine{%
+  (293.61239266, 125.28613467)
+    .. controls (287.66572614, 121.88613476) and (283.09239292, 113.28613497) .. (287.54572614, 106.99280180)
+    .. controls (291.95905937, 100.09946864) and (301.35905913,  98.67280201) .. (308.67905895, 100.99280195)
+    .. controls (313.38572550, 103.20613523) and (316.67905875, 108.65946842) .. (315.75905877, 113.87280163)
+    .. controls (314.18572548, 118.32613485) and (309.63905893, 120.55280146) .. (305.89239235, 122.89946807)
+    .. controls (302.19905911, 124.79280135) and (297.74572589, 127.05946796) .. (293.61239266, 125.28613467)
+  (283.21239292, 137.61946770)
+    .. controls (289.81239275, 139.92613431) and (297.09239257, 139.31280099) .. (303.86572574, 138.12613435)
+    .. controls (314.97239213, 136.04613440) and (326.23905851, 129.27280124) .. (330.05239175, 118.11280152)
+    .. controls (332.94572501, 105.13946851) and (328.85239178,  92.08613550) .. (324.65239188,  79.88613581)
+    .. controls (321.90572529,  69.68613606) and (312.95905884,  62.39280291) .. (303.49239241,  58.59280301)
+    .. controls (296.41239259,  55.49946975) and (288.41239279,  57.07280305) .. (281.25239297,  59.04613633)
+    .. controls (270.17239325,  62.33946958) and (260.70572682,  71.61946935) .. (258.78572686,  83.21946906)
+    .. controls (258.14572688,  88.32613560) and (261.02572681,  92.88613548) .. (265.11906004,  95.67280208)
+    .. controls (271.74572654,  93.39280214) and (272.38572652,  85.77946899) .. (275.58572644,  80.55280246)
+    .. controls (281.01239297,  73.16613598) and (292.19905936,  70.15280272) .. (300.31905916,  74.83280260)
+    .. controls (303.61239241,  76.65946922) and (306.47905900,  80.12613580) .. (306.43905901,  84.04613570)
+    .. controls (296.22572593,  85.09946901) and (285.02572621,  86.75280230) .. (277.26572640,  94.09946879)
+    .. controls (271.26572655, 100.64613529) and (266.10572668, 110.17946838) .. (269.73239326, 119.12613483)
+    .. controls (272.42572652, 126.23280132) and (275.69239311, 134.44613444) .. (283.21239292, 137.61946770)}
+\def\fdulogo at emblem@zero{%
+  (411.01238972, 111.88613501)
+    .. controls (404.38572322, 109.99280172) and (402.09238995, 102.60613524) .. (401.35905663,  96.49946873)
+    .. controls (400.65238998,  86.93946897) and (400.89238998,  76.60613589) .. (406.01238985,  68.15280277)
+    .. controls (408.30572313,  64.69946952) and (411.50572305,  61.23280294) .. (415.78572294,  60.48613629)
+    .. controls (424.71905605,  58.92613633) and (433.35905583,  66.55280281) .. (434.53238914,  75.23280259)
+    .. controls (435.43905578,  84.84613568) and (432.83905585,  94.45946878) .. (429.02572261, 103.20613523)
+    .. controls (425.89238935, 109.53946840) and (418.07905621, 114.51280161) .. (411.01238972, 111.88613501)
+  (405.74572319, 127.83280128)
+    .. controls (415.94572293, 129.47280124) and (427.99905597, 129.88613456) .. (436.03905577, 122.24613475)
+    .. controls (447.95905547, 108.76613509) and (453.13238867,  90.09946889) .. (451.81238870,  72.33946933)
+    .. controls (450.19905541,  58.21946968) and (438.79905570,  43.93947004) .. (423.73238941,  43.91280337)
+    .. controls (411.93238970,  44.16613670) and (398.71905670,  47.67280328) .. (391.73239021,  57.95280302)
+    .. controls (384.51905705,  68.47280276) and (383.82572374,  81.67280243) .. (382.77239043,  93.95280212)
+    .. controls (382.50572377, 108.28613510) and (390.71905690, 124.67280136) .. (405.74572319, 127.83280128)}
+\def\fdulogo at emblem@five{%
+  (521.86572029, 172.09946684)
+    .. controls (529.15905344, 177.17946671) and (539.82571984, 165.40613367) .. (533.55905333, 158.84613383)
+    .. controls (531.37238672, 156.05946724) and (528.26572013, 154.12613395) .. (525.10572021, 152.59280066)
+    .. controls (518.22572038, 149.35280074) and (511.30572055, 146.17946748) .. (504.49238739, 142.79280090)
+    .. controls (505.89238735, 138.48613434) and (507.39905398, 134.20613445) .. (509.29238727, 130.08613455)
+    .. controls (513.69238716, 132.57946782) and (518.31905371, 134.84613443) .. (521.93238695, 138.48613434)
+    .. controls (531.25238672, 148.75280075) and (549.73238626, 147.07280080) .. (557.66571939, 135.93946774)
+    .. controls (564.54571922, 127.15280129) and (566.22571918, 114.91280160) .. (563.05238592, 104.33946853)
+    .. controls (560.75905265,  96.36613540) and (554.18571948,  90.75280220) .. (547.63905298,  86.16613565)
+    .. controls (536.71905325,  79.13946916) and (521.10572031,  79.37946915) .. (511.09238722,  87.96613561)
+    .. controls (506.94572066,  92.15280217) and (511.54572054,  97.87280203) .. (515.22572045, 100.51280196)
+    .. controls (522.31905361, 102.40613525) and (528.73238678,  95.71280208) .. (535.89238660,  98.12613535)
+    .. controls (541.66571979, 101.15280194) and (546.25238634, 106.04613515) .. (549.17238627, 111.84613501)
+    .. controls (550.74571956, 119.79280148) and (545.49238636, 128.76613459) .. (537.27905323, 130.08613455)
+    .. controls (532.50572002, 130.93946787) and (529.15905344, 126.76613464) .. (525.82572019, 124.11280137)
+    .. controls (519.34572035, 118.00613486) and (511.38572055, 113.83280163) .. (503.55905408, 109.76613506)
+    .. controls (496.57238759, 123.39280139) and (487.81238780, 136.40613440) .. (484.21238789, 151.49946735)
+    .. controls (496.54572092, 158.76613384) and (509.27905393, 165.29946701) .. (521.86572029, 172.09946684)}
+\def\fdulogo at emblem@ring at inner@i{%
+  (361.25239097, 616.49945573)
+    .. controls (394.65239013, 618.07278902) and (428.63905595, 615.12612243) .. (460.33238849, 603.93945604)
+    .. controls (533.42572000, 578.20612335) and (592.38571852, 515.31279159) .. (612.77238468, 440.47279346)
+    .. controls (618.50571787, 421.04612728) and (619.83905117, 400.69946112) .. (620.91905114, 380.57946162)
+    .. controls (621.31905113, 350.97946236) and (617.47905123, 321.11279644) .. (607.53238481, 293.12613048)
+    .. controls (581.78571879, 222.35279891) and (521.59905363, 164.84613368) .. (449.29238877, 143.36613422)
+    .. controls (411.30572305, 132.47280116) and (370.74572406, 131.20613453) .. (331.93239170, 138.13946769)
+    .. controls (299.90572584, 143.89946754) and (269.06572661, 156.40613390) .. (242.41239394, 175.12613343)
+    .. controls (198.49239504, 205.71279933) and (163.47906258, 250.28613155) .. (147.89239630, 301.81946359)
+    .. controls (138.98572986, 331.20612953) and (135.87906327, 362.25946208) .. (138.06572988, 392.84612798)
+    .. controls (139.77239651, 425.36612717) and (148.53239629, 457.45945970) .. (163.30572925, 486.47279231)
+    .. controls (189.25239527, 536.12612440) and (232.15906086, 577.09945671) .. (283.82572624, 599.16612283)
+    .. controls (308.26572563, 609.68612256) and (334.66572497, 615.49945575) .. (361.25239097, 616.49945573)}
+\def\fdulogo at emblem@ring at inner@ii{%
+  (349.85239125, 596.91278955)
+    .. controls (326.69239183, 594.15278962) and (303.94572573, 587.73945645) .. (282.86572626, 577.75279003)
+    .. controls (223.78572774, 548.76612409) and (176.71906225, 493.71279213) .. (161.78572929, 429.11279374)
+    .. controls (149.99906292, 378.21946168) and (154.90572946, 323.12612973) .. (178.09239555, 276.07279757)
+    .. controls (192.53239519, 247.36613162) and (213.46572800, 222.12613225) .. (238.09239405, 201.59279943)
+    .. controls (263.25239342, 180.57946662) and (293.22572600, 165.37946700) .. (325.15905854, 157.91280052)
+    .. controls (375.03905729, 145.87280083) and (429.05238927, 150.95280070) .. (475.53238811, 172.84613348)
+    .. controls (499.71905417, 184.55279986) and (521.54572029, 200.91279945) .. (540.18571983, 220.23279897)
+    .. controls (557.53238606, 238.29946518) and (572.49238569, 258.88613133) .. (582.82571876, 281.77946409)
+    .. controls (605.98571818, 332.51279616) and (608.94571811, 391.84612801) .. (592.09238520, 444.89946002)
+    .. controls (582.54571877, 475.56612592) and (565.71905252, 503.83279188) .. (543.55905308, 527.05945796)
+    .. controls (521.82572029, 550.60612404) and (495.25238762, 569.84612356) .. (465.65238836, 582.24612325)
+    .. controls (449.98572208, 588.81945642) and (433.39905583, 592.84612298) .. (416.79905625, 596.25945623)
+    .. controls (394.66572347, 599.43278949) and (372.03905737, 599.48612282) .. (349.85239125, 596.91278955)}
+\def\fdulogo at emblem@ring at outer@i{%
+  (368.57239079, 736.61945272)
+    -- (390.89239023, 736.61945272)
+    .. controls (400.37238999, 735.31278609) and (409.98572308, 735.60611942) .. (419.45238951, 734.27278612)
+    .. controls (471.66572154, 729.01945291) and (522.85238693, 712.13945334) .. (567.25238582, 684.00612071)
+    .. controls (616.45238459, 652.68612149) and (658.38571687, 609.85945589) .. (688.45238279, 559.87279048)
+    .. controls (704.79904905, 532.39279116) and (717.45238206, 502.64612524) .. (725.18571520, 471.59279268)
+    .. controls (732.34571502, 444.25946003) and (735.50571495, 416.08612740) .. (737.17238157, 387.93946144)
+    -- (737.17238157, 364.21946203)
+    .. controls (736.39904826, 358.60612884) and (736.11904826, 352.95279565) .. (735.83904827, 347.29946246)
+    .. controls (731.38571505, 289.00613058) and (713.05238217, 231.36613202) .. (680.23904966, 182.75279990)
+    .. controls (638.58571737, 120.48613479) and (578.70571887,  69.67280273) .. (508.59905395,  42.48613674)
+    .. controls (471.46572155,  28.04613710) and (431.73238921,  21.32613727) .. (392.06572353,  19.28613732)
+    -- (362.01239095,  19.28613732)
+    .. controls (301.01239247,  21.79280393) and (240.03906067,  38.79280350) .. (188.59906195,  72.15280267)
+    .. controls (137.71906322, 104.44613519) and ( 94.53239764, 148.89946742) .. ( 64.27906506, 201.05946611)
+    .. controls ( 39.81239900, 242.93946507) and ( 25.45239936, 290.41946388) .. ( 20.70573282, 338.60612934)
+    .. controls ( 16.61239958, 377.51279503) and ( 19.02573286, 416.99279405) .. ( 26.67906600, 455.32612642)
+    .. controls ( 38.51906570, 513.71279163) and ( 66.61239833, 568.51279026) .. (106.13239735, 612.99278915)
+    .. controls (125.09239687, 634.91278860) and (146.65239633, 654.56612144) .. (170.07906241, 671.60612102)
+    .. controls (218.11906121, 706.80612014) and (275.75905977, 728.24611960) .. (334.91905829, 734.28611945)
+    .. controls (346.09239135, 735.72611941) and (357.37239107, 735.51278608) .. (368.57239079, 736.61945272)}
+\def\fdulogo at emblem@ring at outer@ii{%
+  (354.53239114, 717.84611986)
+    .. controls (321.10572531, 715.17945326) and (287.69239281, 709.16612008) .. (256.34572692, 696.99278705)
+    .. controls (208.13239480, 678.63278751) and (164.83906255, 648.37945493) .. (129.51906343, 610.92612253)
+    .. controls (106.35906401, 586.08612315) and ( 86.22573118, 558.24612385) .. ( 71.11906489, 527.77945794)
+    .. controls ( 36.07906576, 456.27279307) and ( 28.85239928, 372.71279515) .. ( 46.18573218, 295.37946375)
+    .. controls ( 61.50573180, 225.76613216) and (102.38573077, 163.29946706) .. (155.91906277, 116.89946822)
+    .. controls (196.98572841,  80.45946913) and (247.34572715,  54.51280311) .. (301.01239247,  42.79280340)
+    .. controls (383.25239042,  25.40613717) and (472.61238818,  34.95280360) .. (546.25238634,  76.84613588)
+    .. controls (609.82571809, 113.67280163) and (662.57238344, 169.83280023) .. (692.95904934, 236.93946522)
+    .. controls (715.01238212, 285.51279733) and (723.18571525, 339.56612932) .. (721.19904864, 392.63279466)
+    .. controls (718.73238203, 452.08612650) and (701.41238246, 511.41945835) .. (668.46571662, 561.23279044)
+    .. controls (631.46571755, 617.03278905) and (579.43905218, 663.59278788) .. (517.91905372, 690.64612054)
+    .. controls (466.78572166, 713.11278664) and (410.05238975, 721.16611978) .. (354.53239114, 717.84611986)}
+\def\fdulogo at emblem@new at kernel{%
+  (284.68492622, 377.38587424)
+    .. controls (296.85159258, 374.46587432) and (317.35159207, 372.84454102) .. (328.85159178, 381.34454081)
+    .. controls (340.07825816, 389.64187394) and (342.01825812, 410.17787342) .. (336.41292492, 413.51120667)
+    .. controls (327.05025849, 419.07920653) and (273.18492650, 410.84454007) .. (263.01826009, 410.17787342)
+    .. controls (261.01826014, 399.01120704) and (271.06492656, 380.65520750) .. (284.68492622, 377.38587424)
+  (336.35159159, 441.01120599)
+    .. controls (336.35159159, 441.01120599) and (337.68492489, 455.17787230) .. (334.68625830, 462.27653879)
+    .. controls (329.13025844, 475.43120513) and (323.68492524, 480.17253834) .. (299.01825919, 480.17253834)
+    .. controls (282.14492628, 480.17253834) and (267.18492665, 476.01120511) .. (261.31159347, 461.96720546)
+    .. controls (257.23692690, 452.22453904) and (258.30759354, 437.71253940) .. (262.91292676, 437.06587275)
+    .. controls (270.44892657, 436.00720611) and (336.35159159, 441.01120599) .. (336.35159159, 441.01120599)
+  (246.59292717, 497.03520459)
+    .. controls (259.37426018, 506.15653769) and (276.74092641, 512.23387087) .. (300.29559249, 512.23387087)
+    .. controls (348.32492463, 512.23387087) and (363.12892426, 484.62187156) .. (364.18492423, 471.84453855)
+    -- (364.78892421, 471.84453855)
+    .. controls (368.40759079, 488.78853813) and (395.43425678, 511.51120422) .. (399.44359001,521.76720397)
+    .. controls (400.91825664, 525.54053721) and (395.33292345, 527.64187049) .. (392.01825687,525.67787054)
+    .. controls (389.01825694, 523.90053725) and (372.68492402, 506.42853768) .. (360.51825765,506.42853768)
+    .. controls (354.64359113, 506.42853768) and (344.76892471, 511.67787089) .. (344.76892471,520.02320401)
+    .. controls (344.76892471, 527.51120382) and (366.72892417, 547.37253666) .. (375.35159062,559.84453635)
+    .. controls (381.31959047, 568.47653613) and (388.58492362, 581.05386915) .. (391.51825688,595.84453545)
+    .. controls (395.51825678, 616.01120161) and (404.51825655, 623.17786810) .. (415.85158960,623.17786810)
+    .. controls (424.46225606, 623.17786810) and (437.85158905, 613.67786834) .. (429.85158925,588.01120231)
+    .. controls (425.73692269, 574.80853597) and (419.22092285, 550.54453658) .. (430.35158924,549.51120327)
+    .. controls (446.51825550, 548.01120331) and (563.19691925, 564.04320291) .. (582.07425211,556.90053642)
+    .. controls (592.35158519, 553.01120319) and (602.68491827, 540.51120350) .. (592.74091851,526.23387052)
+    .. controls (590.55558524, 523.09653727) and (546.51825300, 529.51120377) .. (514.51825380,529.51120377)
+    .. controls (502.89825409, 529.51120377) and (439.94758900, 527.47387049) .. (429.24358927,513.09253752)
+    .. controls (418.18492288, 498.23387122) and (433.51825583, 482.17787162) .. (433.51825583,471.17787190)
+    .. controls (433.51825583, 452.84453902) and (415.35158962, 427.34453966) .. (415.35158962,364.34454124)
+    .. controls (415.35158962, 329.84320877) and (418.18492288, 298.67787621) .. (422.96225609,221.78854480)
+    .. controls (424.97425604, 189.40721228) and (394.85159013, 194.47654548) .. (389.85159025,223.34454476)
+    .. controls (386.22225701, 244.30187757) and (382.29559044, 297.12187625) .. (382.07425711,314.23387582)
+    .. controls (336.68492492, 315.84454245) and (279.18492635, 309.56720927) .. (249.18492710,302.23387612)
+    .. controls (241.04359397, 300.24320951) and (230.30226091, 322.72854228) .. (232.73692751,328.19387547)
+    .. controls (237.18492740, 338.17787522) and (304.07292573, 341.84587513) .. (337.85159155,344.01120841)
+    .. controls (352.71159118, 344.96454172) and (362.68492427, 344.77654173) .. (382.07425711,343.78854175)
+    .. controls (382.24359044, 356.26587477) and (382.09159045, 361.90454130) .. (383.18492375,378.67787421)
+    .. controls (384.31292373, 395.98454045) and (387.89425697, 424.28187307) .. (391.45825688,437.71787274)
+    .. controls (396.07425676, 455.12187230) and (405.51825653, 466.34453869) .. (400.96225664,468.67787196)
+    .. controls (394.59159014, 471.94053855) and (374.85159063, 431.14587290) .. (370.35159074,409.49120677)
+    .. controls (367.44625748, 395.51120712) and (371.86359070, 373.07254102) .. (349.62892459,358.67787471)
+    .. controls (331.35159172, 346.84454167) and (282.04359295, 338.87787521) .. (256.35159359,354.84454147)
+    .. controls (238.74092736, 365.78854120) and (226.51826100, 381.78854080) .. (226.51826100,426.23387302)
+    .. controls (226.51826100, 452.40053904) and (225.85159435, 482.23387162) .. (246.59292717,497.03520459)
+  (519.40705368, 324.28907557)
+    .. controls (520.27772033, 321.35440898) and (522.26838694, 319.59440902) .. (524.01905357, 319.40640903)
+    .. controls (527.39772015, 319.04240904) and (544.90705304, 319.34507569) .. (546.76838633, 320.92774232)
+    .. controls (552.93238618, 326.17174219) and (554.93505279, 341.67840847) .. (551.93905287, 343.33840843)
+    .. controls (549.50438626, 344.68640839) and (532.46305336, 343.27307510) .. (523.78705357, 340.68507516)
+    .. controls (522.12038695, 340.18907517) and (519.07372036, 338.67840854) .. (518.75372036, 335.68107529)
+    .. controls (518.29638704, 331.41174206) and (518.48438704, 327.39974216) .. (519.40705368, 324.28907557)
+  (452.62972202, 377.89974090)
+    .. controls (454.40705531, 380.67840749) and (460.51772182, 383.39974076) .. (470.18438825, 383.89974075)
+    .. controls (482.77238793, 384.55174073) and (526.92305349, 388.98507395) .. (532.97372001, 387.58640732)
+    .. controls (536.18438660, 386.84507401) and (534.01771998, 379.17840753) .. (531.37772005, 375.70774095)
+    .. controls (529.41638676, 373.13040768) and (525.70172019, 369.17707445) .. (524.01772023, 366.92774117)
+    .. controls (522.12572028, 364.39974124) and (521.15772030, 361.51707464) .. (523.38305358, 360.27574134)
+    .. controls (525.85105352, 358.89974137) and (546.79638633, 361.95574130) .. (553.22705284, 363.09440793)
+    .. controls (558.79771936, 364.08107458) and (560.80971931, 369.80240777) .. (563.93505257, 374.26107432)
+    .. controls (569.21238577, 381.79040747) and (577.07371891, 386.01174069) .. (582.85105210, 386.01174069)
+    .. controls (589.62971859, 386.01174069) and (591.42305188, 374.38374099) .. (590.75238523, 366.33574119)
+    .. controls (589.71238526, 353.83574150) and (577.80438555, 312.07974254) .. (574.23505231, 303.75707608)
+    .. controls (573.29638567, 301.56640947) and (569.88438575, 300.01174284) .. (566.93505249, 300.01174284)
+    .. controls (562.33771927, 300.01174284) and (536.85105325, 301.92774280) .. (526.56705350, 298.69440954)
+    .. controls (524.00438690, 297.88907623) and (523.26838692, 295.76107628) .. (524.01772023, 290.26107642)
+    .. controls (524.61238688, 285.90107653) and (533.49905333, 247.55841082) .. (534.66171997, 239.50507769)
+    .. controls (536.96305324, 223.56641142) and (521.42305363, 220.83707816) .. (512.54305385, 232.40374453)
+    .. controls (504.74038738, 242.56641095) and (500.54705415, 254.53174398) .. (496.62305425, 267.26774366)
+    .. controls (491.90438770, 282.58240995) and (493.95505432, 293.84107633) .. (483.74038791, 292.78907636)
+    .. controls (470.72438823, 291.44774306) and (447.51772215, 274.87174347) .. (435.67372244, 274.87174347)
+    .. controls (427.17638932, 274.87174347) and (425.42038936, 289.38107644) .. (429.01772261, 295.34507629)
+    .. controls (435.35105578, 305.84507603) and (475.30972145, 316.46907577) .. (487.88172114, 317.47040907)
+    .. controls (488.71505445, 325.38774221) and (488.68438778, 330.42774208) .. (486.68438783, 337.09440858)
+    .. controls (479.43505468, 337.17840858) and (471.10172156, 335.26107530) .. (461.92172179, 331.04507540)
+    .. controls (450.90705539, 325.98640886) and (436.74438908, 322.49307562) .. (431.17372255, 322.49307562)
+    .. controls (425.06172271, 322.49307562) and (420.74038948, 337.89974190) .. (430.29638924, 345.12240838)
+    .. controls (435.23905579, 348.85840829) and (445.41505553, 351.63307489) .. (449.95372208, 352.43707487)
+    .. controls (458.85105520, 354.01174149) and (486.96305449, 353.34507484) .. (489.68172109, 359.03040804)
+    .. controls (490.40038774, 360.53574133) and (490.68438773, 364.39974124) .. (488.19772113, 365.49040787)
+    .. controls (485.73372119, 366.57174118) and (469.18438827, 363.01174127) .. (460.40705516, 363.89974125)
+    .. controls (451.95905537, 364.75574123) and (450.23372208, 374.15707432) .. (452.62972202, 377.89974090)
+  (465.02505504, 479.10973837)
+    .. controls (470.18505491, 476.67773843) and (560.01838600, 480.17773834) .. (564.76771921,482.34440495)
+    .. controls (570.23305241, 484.83640489) and (569.77571909, 493.67773800) .. (564.35171922,496.01107128)
+    .. controls (558.92771936, 498.34440455) and (473.45438816, 494.42840465) .. (468.18505496,492.56707136)
+    .. controls (461.68105512, 490.26840476) and (460.15705516, 481.40440498) .. (465.02505504,479.10973837)
+  (512.51838719, 517.56707074)
+    .. controls (550.96238623, 517.56707074) and (578.74105220, 517.56707074) .. (590.23038524,506.59240435)
+    .. controls (595.69438511, 501.37240448) and (599.18505169, 483.56707159) .. (588.92905194,472.13107188)
+    .. controls (579.25038552, 461.33773881) and (539.85171984, 459.34440553) .. (504.85972071,459.19507220)
+    .. controls (494.19305431, 459.14840553) and (455.35172195, 457.17773892) .. (449.05705544,461.39240548)
+    .. controls (429.26772260, 474.64440515) and (433.46105583, 495.05640464) .. (442.07438895,502.23373779)
+    .. controls (455.40772195, 513.34440418) and (467.40772165, 516.67773743) .. (512.51838719,517.56707074)
+  (469.51812160, 412.41240670)
+    .. controls (478.85145470, 412.22040671) and (551.62878621, 415.45640663) .. (562.58611927,417.44173991)
+    .. controls (572.83011901, 419.29907320) and (572.35145236, 428.51107297) .. (566.51811917,429.34440628)
+    .. controls (558.35945271, 430.50973958) and (474.17278815, 426.64840635) .. (466.69545500,424.28307307)
+    .. controls (460.51812182, 422.32973979) and (462.43545511, 412.55774003) .. (469.51812160,412.41240670)
+  (453.04878867, 444.45907257)
+    .. controls (474.88078813, 454.19773899) and (578.96211886, 454.67773898) .. (587.85145197,448.01107248)
+    .. controls (600.58211832, 438.46307272) and (600.43145166, 419.22840653) .. (595.50211845,409.49107344)
+    .. controls (586.74078533, 392.17774054) and (506.59678734, 392.17774054) .. (466.18478835,392.17774054)
+    .. controls (452.18478870, 392.17774054) and (435.68478911, 400.67774033) .. (435.68478911,416.51107327)
+    .. controls (435.68478911, 423.84440642) and (435.60612244, 436.67773943) .. (453.04878867,444.45907257)}
+\def\fdulogo at emblem@new at F{%
+  (128.08471915, 329.48133989)
+    -- (127.14177837, 332.01133349)
+    -- (105.95308200, 324.11420442)
+    -- (128.23005803, 264.34310569)
+    -- (130.86546803, 265.32533568)
+    .. controls (128.57617887, 272.75622407) and (129.41093008, 275.34847365) .. (134.89258287, 277.39151202)
+    -- (185.91412041, 296.40748451)
+    .. controls (191.39577320, 298.45052287) and (193.10540239, 297.40687447) .. (196.85613434, 289.92037447)
+    -- (199.49154434, 290.90260446)
+    -- (185.34743257, 328.85250841)
+    -- (182.71202258, 327.87027842)
+    .. controls (185.90496332, 318.01481284) and (185.34717211, 315.64584725) .. (179.54927011, 313.48494128)
+    -- (154.98724894, 304.33055784)
+    .. controls (151.19058341, 315.16160902) and (153.63728983, 320.51571619) .. (165.31554342, 326.54909292)
+    -- (164.33331344, 329.18450291)
+    -- (128.70257028, 315.90475353)
+    -- (129.68480027, 313.26934353)
+    .. controls (142.40947544, 315.85081706) and (147.47417141, 313.53636504) .. (151.40309135, 302.99472506)
+    -- (126.94648658, 293.87963081)
+    .. controls (123.04607978, 292.42593043) and (121.48115619, 293.40345164) .. (119.47740703, 298.77968803)
+    .. controls (111.81601315, 319.33588600) and (119.27761075, 323.79769475) .. (128.08471915, 329.48133989)}
+\def\fdulogo at emblem@new at U@i{%
+  (100.51870590, 377.96853391)
+    -- ( 97.71928261, 377.69763724)
+    -- (101.38180565, 339.84943428)
+    -- (104.18122894, 340.12033095)
+    .. controls (104.20655678, 348.03456725) and (105.53222649, 349.51915670) .. (113.59456558, 350.29933913)
+    -- (150.99486081, 353.91851870)
+    .. controls (161.96860013, 354.98043366) and (167.22791658, 357.86290671) .. (171.49391369, 365.17027770)
+    .. controls (174.89298469, 370.92442577) and (176.21507398, 378.28599501) .. (175.42405569, 386.46031104)
+    .. controls (173.33273336, 408.07185888) and (159.86303178, 414.11507061) .. (142.84253814, 412.46801883)
+    -- (107.12189689, 409.01137727)
+    .. controls (100.51525791, 408.37206111) and ( 98.57192487, 409.76636429) .. ( 96.75866006, 416.82452926)
+    -- ( 93.95923677, 416.55363258)
+    -- ( 96.34312750, 391.91870758)
+    -- ( 99.14255080, 392.18960425)
+    .. controls ( 98.96921476, 400.98882014) and (100.99203606, 403.44507611) .. (109.16635208, 404.23609440)
+    -- (143.31931629, 407.54103383)
+    .. controls (159.89190220, 409.14474215) and (168.22511905, 403.62170878) .. (169.51458722, 390.29645390)
+    .. controls (170.61984565, 378.87480685) and (164.50082069, 373.19652877) .. (149.27195796, 371.72285086)
+    -- (111.87166273, 368.10367129)
+    .. controls (103.02548511, 367.24763780) and (101.68899846, 369.37881776) .. (100.51870590, 377.96853391)}
+\def\fdulogo at emblem@new at D{%
+  (161.13377402, 431.77641390)
+    .. controls (165.99478812, 430.84205928) and (167.67345668, 427.65541280) .. (166.66276259, 421.20524173)
+    -- (169.42470242, 420.67435842)
+    -- (176.13506745, 455.58527790)
+    .. controls (180.72189924, 479.44843805) and (168.53387923, 498.28768735) .. (145.66501742, 502.68340115)
+    .. controls (122.90663320, 507.05787961) and (106.12398751, 494.24543310) .. (101.21862573, 468.72510905)
+    -- ( 94.74184936, 435.02944310)
+    -- ( 97.50378919, 434.49855979)
+    .. controls ( 99.52571602, 441.44171376) and (101.58635124, 443.22225805) .. (106.66832053, 442.24543276)
+  (143.62723349, 483.14176993)
+    .. controls (169.25803513, 478.21517282) and (174.20076693, 466.38197552) .. (171.99229236, 454.89230582)
+    .. controls (171.03670241, 449.92081412) and (169.32443437, 448.76066473) .. (164.35294268, 449.71625468)
+    -- (107.56745973, 460.63121552)
+    .. controls (105.02647508, 461.11962816) and (104.12545061, 463.58400402) .. (104.95362857, 467.89263016)
+    .. controls (106.86480848, 477.83561355) and (116.44974554, 488.36566169) .. (143.62723349, 483.14176993)}
+\def\fdulogo at emblem@new at A{%
+  (213.73056745, 560.05088194)
+    -- (213.52877972, 559.64866116)
+    .. controls (211.56134940, 555.72700852) and (208.64253939, 555.17751094) .. (194.25467970, 556.10248902)
+    -- (130.11298094, 560.21376615)
+    -- (128.70046687, 557.39822066)
+    -- (172.60549553, 507.43004883)
+    .. controls (180.04014537, 498.91738678) and (180.94311014, 496.95402046) .. (179.42665420, 491.67334867)
+    -- (181.94053410, 490.41217539)
+    -- (192.18126114, 510.82488017)
+    -- (189.66738124, 512.08605346)
+    .. controls (186.28879152, 506.35508462) and (184.02240494, 504.59723135) .. (181.40796985, 505.90885157)
+    .. controls (180.10075230, 506.56466167) and (177.99044785, 508.63027652) .. (173.61985282, 513.46606992)
+    -- (170.45490415, 516.94182818)
+    -- (181.80546368, 539.56674728)
+    .. controls (191.36396463, 539.05076331) and (195.58931486, 538.44133613) .. (197.80152917, 537.33150365)
+    .. controls (199.91318828, 536.27211809) and (200.26293014, 534.46043123) .. (198.69839794, 530.84010551)
+    .. controls (198.44616328, 530.33732953) and (197.89090837, 528.97966505) .. (197.38576172, 527.47099844)
+    -- (199.89964162, 526.20982516)
+    -- (216.24444735, 558.78970866)
+  (167.28995547, 520.41758644)
+    -- (147.59705438, 542.12837916)
+    -- (177.12710706, 540.02584966)}
+\def\fdulogo at emblem@new at N@i{%
+  (180.22686421, 631.40888576)
+    -- (163.64330505, 614.42493307)
+    -- (165.65562172, 612.46005639)
+    .. controls (167.22752306, 614.06990973) and (169.77102921, 614.25935906) .. (178.13167444, 613.64308824)
+    -- (216.28519850, 576.38902642)
+    .. controls (220.87328050, 571.90910759) and (220.82125183, 569.60138665) .. (215.80824593, 563.01806637)
+    -- (217.82056260, 561.05318969)
+    -- (235.66164284, 579.32502506)
+    -- (233.64932617, 581.28990174)
+    .. controls (226.87307200, 575.79932200) and (223.92900012, 575.84376027) .. (218.21402078, 581.42401004)
+    -- (185.85596873, 613.01922702)
+    -- (264.77597447, 606.24373256)
+    -- (266.97663635, 608.49752723)
+    -- (219.56645561, 654.79002177)
+    .. controls (214.97837360, 659.26994059) and (214.95370480, 661.33808113) .. (219.2574575, 667.35605515)
+    -- (217.24514083, 669.32093182)
+    -- (200.34720140, 652.01500846)
+    -- (202.35951807, 650.05013179)
+    .. controls (208.73900170, 655.45642366) and (211.92265398, 655.33528792) .. (217.63763332, 649.75503815)
+    -- (242.18789670, 625.78354268)}
+\def\fdulogo at emblem@new at U@ii{%
+  (331.45282512, 724.53468765)
+    -- (330.63705847, 727.22628423)
+    -- (294.24667267, 716.19711919)
+    -- (295.06243932, 713.50552261)
+    .. controls (302.82732441, 715.03602217) and (304.54348943, 714.02795994) .. (306.89289736, 706.27616178)
+    -- (317.79153974, 670.31643143)
+    .. controls (320.98934498, 659.76537283) and (324.84918874, 655.17508751) .. (332.85243369, 652.42834813)
+    .. controls (339.16237243, 650.22638488) and (346.64021167, 650.37679795) .. (354.49967369, 652.75883655)
+    .. controls (375.27879931, 659.05655505) and (378.55705453, 673.45122874) .. (373.59719333, 689.81613596)
+    -- (363.18801094, 724.16090836)
+    .. controls (361.26280166, 730.51307630) and (362.24800509, 732.69252743) .. (368.81218569, 735.85752868)
+    -- (367.99641904, 738.54912526)
+    -- (344.31036911, 731.37037878)
+    -- (345.12613576, 728.67878220)
+    .. controls (353.71970109, 730.57799095) and (356.52559167, 729.07732700) .. (358.90763028, 721.21786498)
+    -- (368.85998334, 688.38038667)
+    .. controls (373.68932188, 672.44613490) and (369.91166147, 663.19001105) .. (357.09966174, 659.30696182)
+    .. controls (346.11794768, 655.97863391) and (339.34786455, 660.86242188) .. (334.91009400, 675.50470729)
+    -- (324.01145163, 711.46443764)
+    .. controls (321.43362903, 719.96988284) and (323.26059964, 721.69913479) .. (331.45282512, 724.53468765)}
+\def\fdulogo at emblem@new at N@ii{%
+  (409.66623928, 741.32018157)
+    -- (385.93186303, 740.93540199)
+    -- (385.97745303, 738.12327211)
+    .. controls (388.22715694, 738.15974410) and (390.16675926, 736.50346737) .. (395.66999384, 730.17934402)
+    -- (396.53438018, 676.86136137)
+    .. controls (396.63832537, 670.44970523) and (394.97657784, 668.84755849) .. (386.78157096, 667.70206894)
+    -- (386.82716096, 664.88993905)
+    -- (412.36130033, 665.30389623)
+    -- (412.31571034, 668.11602611)
+    .. controls (403.63793789, 668.98797568) and (401.57855597, 671.09236960) .. (401.44908038, 679.07881848)
+    -- (400.71599323, 724.29786706)
+    -- (451.98891394, 663.92106986)
+    -- (455.13849941, 663.97213066)
+    -- (454.06439908, 730.22591079)
+    .. controls (453.96045389, 736.63756693) and (455.39905463, 738.12358127) .. (462.69235634, 739.36696722)
+    -- (462.64676634, 742.17909711)
+    -- (438.46244932, 741.78702313)
+    -- (438.50803931, 738.97489325)
+    .. controls (446.84470898, 738.32244327) and (449.02022329, 735.99490256) .. (449.14969888, 728.00845368)
+    -- (449.70589684, 693.70046907)}
+\def\fdulogo at emblem@new at I@i{%
+  (476.71960763, 671.89702757)
+    .. controls (475.48868767, 666.40836111) and (473.16811016, 665.31466569) .. (464.76278168, 666.39263232)
+    -- (464.14732170, 663.64829909)
+    -- (502.56798690, 655.03185940)
+    -- (503.18344687, 657.77619262)
+    .. controls (494.96376586, 660.19605760) and (493.22273019, 662.20063379) .. (494.50288695, 667.90884691)
+    -- (506.41819213, 721.03913821)
+    .. controls (507.69834888, 726.74735132) and (510.39748318, 727.98673821) .. (518.59456473, 726.49429666)
+    -- (519.21002471, 729.23862989)
+    -- (480.78935952, 737.85506958)
+    -- (480.17389954, 735.11073636)
+    .. controls (487.95448724, 732.78934497) and (489.89045116, 730.62575865) .. (488.63491281, 725.02731887)}
+\def\fdulogo at emblem@new at V{%
+  (602.12727238, 694.33228933)
+    -- (580.41288862, 704.46574992)
+    -- (579.22351531, 701.91711333)
+    .. controls (586.22376857, 698.02956582) and (587.41992600, 696.60232359) .. (585.89752816, 693.34006875)
+    .. controls (585.13632925, 691.70894133) and (584.25959367, 690.62832056) .. (580.48079869, 687.05343948)
+    -- (551.88157206, 659.55539834)
+    -- (553.70312548, 700.17052387)
+    .. controls (553.90703363, 705.66199345) and (554.07015096, 707.07563874) .. (554.78377495, 708.60482070)
+    .. controls (555.87799839, 710.94956636) and (557.93050460, 711.35734248) .. (561.89958209, 709.75338598)
+    .. controls (562.40930941, 709.51551131) and (563.78217537, 708.99898266) .. (565.35893225, 708.38730413)
+    -- (566.54830556, 710.93594073)
+    -- (532.29462977, 726.92111800)
+    -- (531.10525646, 724.37248141)
+    .. controls (535.86950512, 721.28011654) and (536.40641483, 720.03637844) .. (536.33843014, 713.24000463)
+    -- (533.93908436, 639.99548921)
+    -- (536.69161188, 638.71096604)
+    -- (587.86166289, 687.70586863)
+    .. controls (593.25799982, 692.88468900) and (595.30371044, 693.54393098) .. (600.93789907, 691.78365274)}
+\def\fdulogo at emblem@new at E{%
+  (594.15792842, 607.98334063)
+    .. controls (588.62449694, 612.58998385) and (587.91748388, 615.08155932) .. (591.01257229, 618.79933359)
+    -- (608.43144194, 639.72262136)
+    .. controls (617.85556742, 631.87693213) and (618.59324875, 625.55386652) .. (611.28122633, 614.66077637)
+    -- (613.52918286, 612.78932756)
+    -- (637.85801734, 642.01276254)
+    -- (635.61006080, 643.88421134)
+    .. controls (626.25153717, 635.28038827) and (620.30284663, 634.81656760) .. (611.22456061, 642.37434163)
+    -- (610.87872115, 642.66225683)
+    -- (627.57780280, 662.72094592)
+    .. controls (630.31299721, 666.00642086) and (632.08478468, 665.84883526) .. (636.58069775, 662.10593765)
+    .. controls (650.67365604, 650.37339321) and (652.46291030, 643.90679653) .. (645.05122654, 630.60816424)
+    -- (647.21272321, 628.80869424)
+    -- (661.68046206, 646.18712746)
+    -- (611.79311892, 687.71889519)
+    -- (609.99364891, 685.55739852)
+    .. controls (615.67146452, 680.24502184) and (616.16254119, 677.49406677) .. (612.49162238, 673.08461356)
+    -- (577.65388307, 631.23803803)
+    .. controls (573.91098546, 626.74212496) and (571.90878052, 626.79876963) .. (564.93491997, 631.43352191)
+    -- (563.13544997, 629.27202524)
+    -- (613.71447204, 587.16442711)
+    -- (632.14445716, 602.26892739)
+    -- (629.72358089, 604.28433380)
+    .. controls (618.15969086, 598.83394993) and (607.81858737, 596.61069020) .. (594.15792842, 607.98334063)}
+\def\fdulogo at emblem@new at R{%
+  (703.67107461, 556.48625378)
+    .. controls (714.47632067, 563.60142604) and (714.27048109, 576.80121049) .. (702.94807655, 593.99564552)
+    -- (683.02559423, 624.25033449)
+    -- (680.67662770, 622.70355791)
+    .. controls (684.78529306, 615.44126165) and (684.24210802, 613.19777445) .. (677.47708440, 608.74305790)
+    -- (635.94735607, 581.39604802)
+    .. controls (629.08837379, 576.87946042) and (627.53007655, 577.20033640) .. (621.85850567, 583.97227242)
+    -- (619.50953914, 582.42549584)
+    -- (640.42195846, 550.66746829)
+    -- (642.77092499, 552.21424487)
+    .. controls (638.88456869, 560.16173109) and (639.29940333, 561.78189940) .. (645.97046829, 566.17474488)
+    -- (664.38636592, 578.30147324)
+    -- (666.05688463, 575.76458938)
+    -- (649.45513367, 536.94950373)
+    -- (662.13870160, 517.68797815)
+    -- (664.48766814, 519.23475473)
+    .. controls (663.37398900, 520.92601063) and (663.13341715, 522.51869961) .. (663.73616912, 524.26261004)
+    -- (678.07830393, 560.78155396)
+    .. controls (685.19134232, 555.09351361) and (693.42958052, 549.74230791) .. (703.67107461, 556.48625378)
+  (698.63980292, 593.58328528)
+    .. controls (704.33194073, 584.93908843) and (702.58094762, 578.80216225) .. (692.71528818, 572.30570063)
+    .. controls (681.25233149, 564.75743093) and (676.11916711, 567.43879411) .. (667.39304309, 580.28134726)
+    -- (691.35250174, 596.05846835)
+    .. controls (694.64105489, 598.22395555) and (696.72179997, 596.49600378) .. (698.63980292, 593.58328528)}
+\def\fdulogo at emblem@new at S{%
+  (743.20312975, 515.46936653)
+    .. controls (738.43076287, 530.00602567) and (727.28790107, 536.17566139) .. (713.82011393, 531.75420384)
+    .. controls (704.41404037, 528.66620174) and (699.50487531, 520.89733859) .. (697.58812596, 506.17757866)
+    -- (696.51882808, 497.89322644)
+    .. controls (695.11756780, 487.01333370) and (693.18068300, 483.53567665) .. (687.62254863, 481.71094814)
+    .. controls (680.24733186, 479.28967377) and (673.71795216, 482.94805456) .. (671.01595033, 491.17836892)
+    .. controls (665.64703758, 507.53211045) and (681.41553406, 517.20837331) .. (686.73126071, 520.49281728)
+    -- (685.71362365, 523.59254607)
+    -- (659.31248536, 514.92508563)
+    -- (660.33012242, 511.82535684)
+    .. controls (663.21284801, 512.06130697) and (664.45556027, 511.52202777) .. (665.01701519, 509.81183258)
+    .. controls (666.21010691, 506.17766779) and (664.11994318, 500.28153929) .. (667.38339994, 490.34102974)
+    .. controls (672.57685802, 474.52172420) and (685.17136327, 466.81573355) .. (698.63915042, 471.23719110)
+    .. controls (706.65569038, 473.86901107) and (713.05804743, 481.41764222) .. (714.23261811, 489.38133285)
+    -- (716.87701653, 507.65538929)
+    .. controls (718.31013894, 517.71688977) and (720.21031841, 520.94568148) .. (725.34090398, 522.63004626)
+    .. controls (731.96791036, 524.80568411) and (737.50344312, 521.64987718) .. (739.88962656, 514.38154761)
+    .. controls (742.55653747, 506.25812044) and (739.77220119, 496.34505570) .. (726.88804471, 487.26049550)
+    -- (727.87059083, 484.26765391)
+    -- (751.06511313, 491.88238636)
+    -- (750.01238514, 495.08900235)
+    .. controls (746.98768142, 494.92484849) and (745.85185636, 495.49921862) .. (745.25531050, 497.31630102)
+    .. controls (744.27276438, 500.30914260) and (746.11567718, 506.59772897) .. (743.20312975, 515.46936653)}
+\def\fdulogo at emblem@new at I@ii{%
+  (690.18650034, 451.64645084)
+    .. controls (684.60177379, 450.97454421) and (682.79616397, 452.79691191) .. (681.00644231, 461.07993480)
+    -- (678.21407904, 460.74398149)
+    -- (682.91742546, 421.65089566)
+    -- (685.70978873, 421.98684897)
+    .. controls (685.24696331, 430.54282399) and (686.55536222, 432.85315393) .. (692.36347783, 433.55193683)
+    -- (746.42363080, 440.05599302)
+    .. controls (752.23174641, 440.75477592) and (754.30105969, 438.62420089) .. (755.63056509, 430.39912000)
+    -- (758.42292837, 430.73507332)
+    -- (753.71958195, 469.82815914)
+    -- (750.92721867, 469.49220583)
+    .. controls (751.33629157, 461.38300894) and (749.94307439, 458.83585180) .. (744.24665331, 458.15050703)}
+\def\fdulogo at emblem@new at T{%
+  (695.27817006, 394.86431990)
+    .. controls (686.98727938, 395.61711698) and (685.86675195, 396.96144894) .. (685.95735078, 406.66801892)
+    -- (683.15637420, 406.92234225)
+    -- (679.52463696, 366.92439666)
+    -- (682.32561355, 366.67007332)
+    .. controls (683.88289314, 376.35643423) and (685.11518604, 377.48713459) .. (693.63015485, 376.71399165)
+    -- (752.67474121, 371.35285572)
+    .. controls (750.97531414, 357.61274267) and (745.29252469, 352.25466632) .. (731.78693629, 351.56058132)
+    -- (731.49192122, 348.31144849)
+    -- (754.03211881, 346.49076699)
+    -- (760.13587887, 413.71420497)
+    -- (737.64654595, 416.09508178)
+    -- (737.35153088, 412.84594895)
+    .. controls (750.51123954, 409.73070579) and (755.13604392, 403.43671956) .. (754.32275642, 389.50318398)}
+\def\fdulogo at emblem@new at Y{%
+  (727.37709643, 264.98714859)
+    -- (735.52753927, 288.35663423)
+    -- (732.87191590, 289.28282091)
+    .. controls (729.85861091, 282.35098762) and (728.37900448, 280.84154347) .. (725.29848138, 281.91592003)
+    .. controls (723.28020762, 282.61982191) and (720.08099945, 285.40363235) .. (716.65196381, 289.57820189)
+    -- (701.11261978, 308.22295111)
+    -- (730.20250072, 312.37493083)
+    .. controls (731.62538980, 312.35526096) and (735.02196252, 313.55357297) .. (737.35891108, 312.73852869)
+    .. controls (739.69585965, 311.92348440) and (739.98994711, 310.03373064) .. (738.47100095, 305.67850832)
+    -- (737.65103920, 302.98583749)
+    -- (740.30666256, 302.05965080)
+    -- (752.71756415, 337.64500393)
+    -- (750.06194078, 338.57119061)
+    .. controls (748.58987702, 335.03363777) and (745.60836911, 332.97569135) .. (741.25577198, 332.11080654)
+    -- (699.20940712, 324.97140268)
+    -- (683.59434172, 330.41738039)
+    .. controls (675.83992149, 333.12184551) and (675.07896935, 334.69784194) .. (677.26706220, 343.70466632)
+    -- (674.61143883, 344.63085301)
+    -- (661.75596764, 307.77080066)
+    -- (664.41159100, 306.84461398)
+    .. controls (668.29928281, 315.25867889) and (669.73200683, 315.95045356) .. (677.59265200, 313.20894097)
+    -- (697.13803998, 306.39220696)
+    -- (723.09792840, 274.58148207)
+    .. controls (725.02243735, 272.24224123) and (725.44996228, 269.71022039) .. (724.72147307, 265.91333528)}
+\def\fdulogo at emblem@new at one{%
+  (274.53952078, 192.6967679)
+    .. controls (276.90649749, 191.17738787) and (276.61091282, 188.42592116) .. (273.75447837, 183.97600496)
+    -- (250.35602597, 147.52456373)
+    .. controls (245.37245949, 139.76088014) and (242.44569971, 139.36684000) .. (233.01169676, 145.28890583)
+    -- (231.55309194, 143.01660820)
+    -- (267.05774249, 120.22590781)
+    -- (268.51634731, 122.49820545)
+    .. controls (260.02210251, 128.21810688) and (259.32418637, 130.67147132) .. (264.00387685, 137.96175957)
+    -- (298.64574144, 191.92882841)
+    -- (297.03619728, 192.96200682)
+    -- (266.55257519, 197.95733905)
+    -- (264.97241997, 195.49568328)
+    .. controls (266.79116106, 194.99667541) and (272.07786501, 194.27692313) .. (274.53952078, 192.6967679)}
+\def\fdulogo at emblem@new at nine{%
+  (346.53719503,  87.17026768)
+    .. controls (362.44194107,  86.72957443) and (370.45737301,  88.21059494) .. (380.22737659,  93.27206544)
+    .. controls (393.00061366,  99.87385110) and (401.02069729, 110.71391337) .. (403.43237633, 124.79726455)
+    .. controls (406.71757692, 143.98167207) and (398.66128891, 158.25957093) .. (383.13633486, 160.91811476)
+    .. controls (369.27476873, 163.29181460) and (357.41447084, 154.02251812) .. (354.81289581, 138.83024165)
+    .. controls (352.57212316, 125.74492323) and (359.14810987, 115.48728020) .. (371.23539553, 113.41741394)
+    .. controls (375.44931164, 112.69580918) and (378.42746538, 112.75654226) .. (381.68741805, 113.79631850)
+    .. controls (374.03262029,  97.75720684) and (363.55014714,  90.53485455) .. (347.03092460,  90.05347343)
+  (387.19655934, 133.96962358)
+    .. controls (386.68384018, 130.97552530) and (385.85438796, 127.46494357) .. (384.66717843, 122.53174856)
+    -- (383.84077127,1 19.70551161)
+    .. controls (383.52099316, 118.50468339) and (383.51185796, 116.45164907) .. (378.18901657, 117.36314981)
+    .. controls (371.31367978, 118.54050493) and (369.88353794, 125.51992491) .. (372.86490494, 142.93005197)
+    .. controls (375.06769840, 155.79358533) and (376.96809671, 158.89248601) .. (382.40183063, 157.96199567)
+    .. controls (387.61377949, 157.06948453) and (390.23489515, 151.71242822) .. (387.19655934, 133.96962358)}
+\def\fdulogo at emblem@new at zero{%
+  (468.53843186, 119.70741769)
+    .. controls (473.74690799,  97.12388612) and (487.76874274,  83.38513668) .. (502.34937235,  86.74789069)
+    .. controls (516.49148678,  90.00950924) and (523.24855517, 108.77145056) .. (518.16649836, 130.80683817)
+    .. controls (513.10972541, 152.73259697) and (498.65786882, 166.83401000) .. (484.51575438, 163.57239145)
+    .. controls (470.37363995, 160.31077290) and (463.58279437, 141.19466133) .. (468.53843186, 119.70741769)
+  (501.64142414,  89.81749692)
+    .. controls (496.15998444,  88.55330369) and (492.58528933,  94.54100910) .. (488.84327735, 110.76607062)
+    -- (483.05327233, 135.87106446)
+    .. controls (479.23540876, 152.42501236) and (479.85189169, 159.26387584) .. (485.11407380, 160.47750135)
+    .. controls (490.48588471, 161.71641072) and (494.24606002, 155.42510278) .. (497.96278832, 139.30967006)
+    -- (503.75279334, 114.20467623)
+    .. controls (507.94991488,  96.00629641) and (506.02657590,  90.82885151) .. (501.64142414,  89.81749692)}
+\def\fdulogo at emblem@new at five{%
+  (596.81323106, 144.25778675)
+    .. controls (593.53398643, 141.88060609) and (592.81646298, 137.88650017) .. (595.12761085, 134.69834567)
+    .. controls (598.62734904, 129.87056885) and (606.22172437, 130.51231652) .. (614.32874582, 136.38923538)
+    .. controls (629.35861705, 147.28464673) and (633.41288249, 164.11949675) .. (624.10225824, 176.96320489)
+    .. controls (617.23484744, 186.43657827) and (606.12245552, 189.49768961) .. (594.14661482, 185.12390882)
+    .. controls (589.95882917, 183.61665399) and (586.87090400, 181.93399782) .. (579.07134947, 176.97475918)
+    -- (575.72667581, 185.80578112)
+    -- (601.04973158, 204.16289844)
+    -- (596.58044201, 218.57075501)
+    -- (567.24942058, 197.30819466)
+    -- (581.19499276, 159.47691905)
+    .. controls (590.31078455, 165.11240378) and (594.44167660, 167.27320765) .. (599.37410141, 168.90338888)
+    .. controls (609.33004115, 172.22978413) and (617.92168735, 170.53738499) .. (622.27985189, 164.52543650)
+    .. controls (625.97768848, 159.42438929) and (624.87516584, 152.51098060) .. (619.77411864, 148.81314402)
+    .. controls (613.94435040, 144.58704507) and (603.28063019, 148.94611527) .. (596.81323106, 144.25778675)}
+\def\fdulogo at emblem@new at ring@inner at i{%
+  (427.28478932, 410.40467342) circle [radius=241.88932729]}
+\def\fdulogo at emblem@new at ring@inner at ii{%
+  (427.28478932, 410.40467342) circle [radius=226.77199428]}
+\def\fdulogo at emblem@new at ring@outer at i{%
+  (427.28478932, 410.40467342) circle [radius=359.05469569]}
+\def\fdulogo at emblem@new at ring@outer at ii{%
+  (427.28478932, 410.40467342) circle [radius=343.93732473]}
+\def\fdulogo at motto@bo{%
+  (446.44078884,  999.91565267)
+    .. controls (447.61812214, 1000.07431933) and (456.16345526, 1001.95698595) .. (459.29012185, 1001.31565264)
+    .. controls (462.45812177, 1000.66498599) and (466.03678835,  997.51565273) .. (466.58345500,  994.39565281)
+    .. controls (466.94345499,  992.40898619) and (463.75145507,  988.95165295) .. (461.25012180,  987.90231964)
+    .. controls (452.27412203,  984.13831973) and (442.91278893,  980.49831982) .. (442.91278893,  980.49831982)
+    .. controls (442.83012226,  967.45698682) and (443.36478892,  968.93832011) .. (444.83012221,  956.91298708)
+    .. controls (446.84478883,  940.36898749) and (445.10745554,  926.59832117) .. (444.86612221,  909.79965492)
+    .. controls (444.24612223,  900.95698848) and (440.71412232,  902.67165510) .. (438.57945570,  901.24898847)
+    .. controls (434.45412247,  898.49832187) and (433.83012249,  894.41565531) .. (429.68345592,  901.04098848)
+    .. controls (426.80745600,  905.63832169) and (420.49412282,  921.06898798) .. (424.47678939,  936.04898760)
+    .. controls (429.10745594,  953.47165383) and (434.23278914,  978.47565321) .. (433.49678916,  979.24898652)
+    .. controls (432.91545584,  979.85965317) and (422.17945611,  977.18765324) .. (413.71812299,  974.91565330)
+    .. controls (406.57945650,  972.99965334) and (404.51812322,  974.85431996) .. (404.16345656,  976.97165324)
+    .. controls (402.99678993,  983.91565307) and (425.50345603,  995.32898612) .. (429.25012260,  996.32898609)
+    .. controls (430.26345591, 1003.82231924) and (427.74345597, 1012.83565235) .. (433.50345583, 1018.02231889)
+    .. controls (435.66345578, 1019.96898550) and (445.62345553, 1020.43565216) .. (447.27678882, 1014.63565230)
+    .. controls (448.91678878, 1008.86231911) and (447.44078881, 1006.90231916) .. (446.44078884,  999.91565267)
+  (504.16305406,  912.58232152)
+    .. controls (502.92838743,  909.46365493) and (498.38572087,  907.08232166) .. (494.82972096,  907.85965497)
+    .. controls (491.09905439,  908.67565495) and (482.10838795,  915.89165477) .. (480.82972131,  920.52632132)
+    .. controls (479.89638800,  923.90898790) and (488.12438780,  925.41565453) .. (489.60705443,  925.35965454)
+    .. controls (498.44038754,  925.02632121) and (501.60705413,  921.81565462) .. (502.99638743,  919.69298801)
+    .. controls (504.38572072,  917.57165473) and (505.21905404,  915.24898812) .. (504.16305406,  912.58232152)
+  (487.05198782,  975.33231995)
+    .. controls (487.49865448,  974.51765331) and (488.71198778,  974.55231997) .. (490.13598775,  974.72165330)
+  (485.82932119,  957.10565374)
+    .. controls (485.94132118,  952.99898718) and (484.68132122,  952.39632053) .. (483.66265458,  949.99898725)
+    .. controls (482.81865460,  948.00832064) and (481.70665462,  945.06965404) .. (480.71865465,  944.74965405)
+  (495.41332095, 1000.22165266)
+    .. controls (494.64398763, 1000.57898599) and (492.11598770,  998.61231937) .. (491.45465438,  997.29098607)
+    .. controls (490.95465439,  996.29098610) and (490.28798774,  993.45765283) .. (490.99598773,  992.91631951)
+    .. controls (491.70532104,  992.37365286) and (494.96932096,  994.68965280) .. (495.78798761,  996.16565277)
+    .. controls (496.77465425,  997.94298605) and (496.19065426,  999.86031934) .. (495.41332095, 1000.22165266)
+  (494.57998764,  976.58165325)
+    .. controls (495.53865428,  977.18698657) and (495.93332094,  978.03098655) .. (496.24665426,  979.35098652)
+    .. controls (496.74665425,  981.45498647) and (496.53865425,  983.79098641) .. (496.03865427,  984.41498639)
+    .. controls (495.54132094,  985.03631971) and (492.46798769,  984.60965305) .. (490.51598774,  983.77231974)
+    .. controls (489.52798776,  983.34831975) and (488.04798780,  982.33498644) .. (487.69065447,  981.66565313)
+    .. controls (487.11598782,  980.58698649) and (486.61598783,  976.12831993) .. (487.05198782,  975.33231995)
+    .. controls (487.49865448,  974.51765331) and (488.75465445,  974.33631998) .. (490.13598775,  974.72165330)
+    .. controls (492.30132103,  975.32565329) and (493.25332100,  975.74565328) .. (494.57998764,  976.58165325)
+  (520.88532031,  963.13765359)
+    .. controls (524.19465356,  967.71765348) and (523.08932026,  983.79631974) .. (523.80665357,  995.49498612)
+    .. controls (523.94532023,  997.75898606) and (525.24665354, 1006.99898583) .. (523.16265359, 1009.24831910)
+    .. controls (521.97332028, 1010.53365241) and (513.52398716, 1009.74831909) .. (511.99598720, 1008.30431913)
+    .. controls (509.65198726, 1006.08698585) and (508.88132061, 1000.42298599) .. (509.94132058, 1000.13765267)
+    .. controls (512.82932051,  999.36031935) and (513.82932049,  999.47098602) .. (513.82932049,  996.41631943)
+    .. controls (513.82932049,  990.90031956) and (509.78132059,  991.59898621) .. (509.92532059,  987.34565299)
+    .. controls (510.05198725,  983.63765308) and (513.54265383,  986.85098633) .. (514.74665380,  986.24965301)
+    .. controls (516.74665375,  985.24831970) and (517.45732040,  982.63365310) .. (517.66265373,  980.83231982)
+    .. controls (517.99598705,  977.91498655) and (517.02665374,  975.56431995) .. (514.49598714,  975.41498662)
+    .. controls (511.66265388,  975.24965329) and (510.16265391,  973.54832000) .. (510.07732058,  971.16565339)
+    .. controls (509.99598725,  968.91632011) and (514.39198714,  969.35098677) .. (515.66265378,  966.99898683)
+    .. controls (517.32932040,  963.91498690) and (518.41332037,  961.24832030) .. (520.88532031,  963.13765359)
+  (483.99598790,  899.66565518)
+    .. controls (487.24665449,  903.33232175) and (507.74665397,  888.08165547) .. (511.30265388,  891.05765539)
+    .. controls (513.19465384,  892.64032202) and (511.71865387,  906.86432166) .. (512.18665386,  913.54298816)
+    .. controls (512.63732052,  919.98832134) and (515.78532044,  933.76832099) .. (514.72265380,  935.48565428)
+    .. controls (514.09598715,  936.49632092) and (501.18798747,  932.59232102) .. (496.16265426,  931.74832104)
+    .. controls (488.43332112,  930.45098774) and (478.10798805,  930.19365441) .. (474.21865481,  929.24832110)
+    .. controls (468.21732163,  927.79098781) and (456.01998860,  919.60298801) .. (453.84132199,  924.58165455)
+    .. controls (450.99598873,  931.08165439) and (458.29332188,  935.63898761) .. (462.16265511,  936.91632091)
+    .. controls (464.67465505,  937.74432089) and (478.34665471,  939.01632086) .. (489.07998777,  940.41632083)
+    .. controls (496.60132092,  941.39632080) and (507.15598732,  942.95632076) .. (513.44132050,  944.02698740)
+    .. controls (516.05198710,  944.47098739) and (516.43465376,  948.35098729) .. (516.59732042,  951.64698721)
+    .. controls (516.77465375,  955.24832045) and (514.17465381,  955.60298711) .. (512.23198719,  956.74832042)
+    .. controls (509.83865392,  958.16032038) and (510.12132058,  960.30698699) .. (507.41332065,  960.49898699)
+    .. controls (504.66265405,  960.69365365) and (504.12798740,  957.67765373) .. (501.38532080,  957.74832039)
+    .. controls (498.16265421,  957.83232039) and (501.09598747,  966.30165351) .. (497.32932090,  969.33232010)
+    .. controls (495.62132094,  970.70698673) and (487.37598782,  970.38298674) .. (485.87065452,  969.15898677)
+    .. controls (484.53732122,  968.07632013) and (485.74398786,  960.27498700) .. (485.82932119,  957.10565374)
+    .. controls (485.94132118,  952.99898718) and (484.79198788,  952.31365386) .. (483.77465457,  949.91632059)
+    .. controls (482.92932126,  947.92432064) and (481.70665462,  945.06965404) .. (480.71865465,  944.74965405)
+    .. controls (478.66265470,  944.08298740) and (472.59065485,  949.98965392) .. (469.74132159,  953.72698716)
+    .. controls (466.61065500,  957.83232039) and (467.63465498,  960.38298699) .. (468.94132161,  967.91632014)
+    .. controls (469.49465493,  971.10832006) and (471.41332155,  977.09365324) .. (471.41332155,  981.08165314)
+    .. controls (471.41332155,  986.33231968) and (472.23865486,  991.96165287) .. (473.07998817,  995.74965278)
+    .. controls (474.03465482, 1000.04965267) and (477.52798806, 1001.20031931) .. (479.45465468,  999.91498600)
+    .. controls (481.82932129,  998.33231938) and (481.97598795,  990.93898623) .. (482.67732127,  990.00565292)
+    .. controls (483.66265458,  988.69365295) and (485.42132120,  987.09631966) .. (486.37998784,  994.39498614)
+    .. controls (486.58132117,  995.93498610) and (487.43332115,  998.91098603) .. (488.38532112, 1000.41498599)
+    .. controls (489.42265443, 1002.05631928) and (492.01598770, 1004.67098589) .. (492.99598768, 1005.52698586)
+    .. controls (496.49598759, 1008.58165245) and (496.16265426, 1011.02698573) .. (494.88532096, 1012.08165237)
+    .. controls (493.79065432, 1012.98698568) and (483.77465457, 1009.74831909) .. (481.49598796, 1012.91498568)
+    .. controls (480.45732132, 1014.36031898) and (485.74265452, 1020.96165215) .. (489.34398777, 1022.80698543)
+    .. controls (492.48532102, 1024.41631873) and (496.27465426, 1024.33098539) .. (496.44132092, 1025.88831869)
+    .. controls (497.03865424, 1031.49898522) and (496.94532091, 1036.76165175) .. (500.86265415, 1037.07631841)
+    .. controls (504.53998739, 1037.37098507) and (506.16265401, 1031.02698523) .. (506.94132066, 1030.86031856)
+    .. controls (508.01198730, 1030.63098524) and (512.47198719, 1032.08965187) .. (514.41332047, 1030.91631856)
+    .. controls (516.65865375, 1028.92031861) and (517.26398707, 1026.54031867) .. (516.80932041, 1023.91231874)
+    .. controls (516.31332043, 1021.04565214) and (512.73732051, 1017.26031890) .. (513.41332050, 1016.66565225)
+    .. controls (514.63465380, 1015.59231895) and (525.93465352, 1018.33498554) .. (532.07998670, 1014.33365231)
+    .. controls (535.66265328, 1012.00031904) and (535.94265327, 1009.57498576) .. (536.58665325, 1005.58165253)
+    .. controls (538.77465320,  992.02698620) and (540.78798648,  985.29098637) .. (541.55198646,  979.91631984)
+    .. controls (542.38265311,  974.06965332) and (543.99598640,  967.41632015) .. (540.91331981,  961.91498695)
+    .. controls (539.51465318,  959.42032035) and (536.03465327,  957.03232041) .. (533.41332000,  954.83232047)
+    .. controls (531.54665338,  953.26565384) and (529.13465344,  949.64698726) .. (533.18265334,  950.15232058)
+    .. controls (536.95465324,  950.62432057) and (541.92398645,  952.08032053) .. (549.91331959,  953.24965384)
+    .. controls (555.96931943,  954.13498715) and (570.27465241,  955.47098712) .. (571.20665239,  949.68432059)
+    .. controls (571.71865237,  946.50965401) and (568.74398578,  945.94832069) .. (565.86131919,  945.04432071)
+    .. controls (563.78798591,  944.39498739) and (561.29065263,  942.25898745) .. (557.24665274,  941.41632080)
+    .. controls (551.87198620,  940.29498750) and (544.23198639,  941.14698747) .. (540.16265316,  940.83232082)
+    .. controls (532.11198670,  940.20965416) and (526.47332017,  939.24965419) .. (524.99598688,  938.02698755)
+    .. controls (523.46798691,  936.76298758) and (524.03465357,  929.96565442) .. (525.66265353,  923.74832124)
+    .. controls (528.00398680,  914.80965480) and (531.32265338,  900.78298848) .. (531.09598672,  891.45898872)
+    .. controls (530.84665340,  881.19365564) and (521.08132031,  876.64032242) .. (510.91332056,  877.16565574)
+    .. controls (501.17598747,  877.66832239) and (499.74665417,  883.16565559) .. (492.26265436,  888.25898880)
+    .. controls (486.28665451,  892.32432203) and (482.35332127,  897.81098856) .. (483.99598790,  899.66565518)
+  (534.55198664, 1039.13791836)
+    .. controls (543.04798642, 1039.49258502) and (549.71998626, 1035.34591845) .. (549.16265294, 1026.74725200)
+    .. controls (548.87598628, 1022.31791878) and (542.22665311, 1014.58591897) .. (540.43598649, 1014.33258564)
+    .. controls (538.85731986, 1014.10991898) and (526.66265350, 1026.91525200) .. (524.09732023, 1031.66991854)
+    .. controls (523.03732026, 1033.63525183) and (529.21865344, 1038.91525170) .. (534.55198664, 1039.13791836)}
+\def\fdulogo at motto@xue{%
+  (441.96958895,  769.22205844)
+    .. controls (449.34558877,  772.01539170) and (456.88558858,  744.13805907) .. (451.85358870,  731.95805937)
+    .. controls (450.76292206,  729.32072610) and (447.74692214,  726.46339284) .. (444.82958888,  726.49939284)
+    .. controls (442.41225561,  726.52872617) and (439.10692236,  728.52739279) .. (438.10692238,  733.74872599)
+    .. controls (437.51892240,  736.82472592) and (439.10692236,  768.13805847) .. (441.96958895,  769.22205844)
+  (527.62132014,  755.16565879)
+    .. controls (527.63065348,  757.19099207) and (526.74665350,  758.41632538) .. (525.24665354,  758.12432538)
+    .. controls (523.81998690,  757.84699206) and (522.13065361,  756.10565877) .. (522.80132026,  753.97099215)
+    .. controls (523.57998691,  751.49899222) and (525.21865354,  750.05499225) .. (525.78798686,  750.20699225)
+    .. controls (526.35732017,  750.36032558) and (527.60798681,  752.33232553) .. (527.62132014,  755.16565879)
+  (487.79865447,  742.41365911)
+    .. controls (490.32932108,  743.13765909) and (486.96798783,  751.05499223) .. (486.33998784,  750.40299224)
+    .. controls (485.70532119,  749.74565893) and (485.20932120,  747.66165898) .. (485.16265454,  746.41632568)
+    .. controls (485.05198787,  743.41499242) and (484.87332121,  741.57765913) .. (487.79865447,  742.41365911)
+  (493.82932099,  758.16565872)
+    .. controls (496.82932091,  757.58165873) and (496.82932091,  760.87365865) .. (496.78132091,  762.59099194)
+    .. controls (496.73332092,  764.27499190) and (496.70532092,  764.91499188) .. (495.07998762,  765.24832520)
+    .. controls (494.02932098,  765.46432520) and (491.57998771,  765.20699187) .. (490.20532108,  763.41499192)
+    .. controls (489.97198775,  763.11365859) and (489.53865443,  761.12432531) .. (489.82932109,  760.33232533)
+    .. controls (490.27998774,  759.10832536) and (492.20532103,  758.48165871) .. (493.82932099,  758.16565872)
+  (490.89598773,  727.51099281)
+    .. controls (489.52532110,  726.15365952) and (488.32932113,  724.58299289) .. (490.78798773,  724.49899289)
+    .. controls (493.61998766,  724.40299289) and (501.82932079,  726.29099285) .. (503.57998741,  727.16565949)
+    .. controls (504.53465405,  727.64299281) and (506.07998735,  730.58299274) .. (502.34532077,  731.84565937)
+    .. controls (498.24932088,  733.23365934) and (492.55065435,  729.14832611) .. (490.89598773,  727.51099281)
+  (536.09598660,  719.86165967)
+    .. controls (533.92931999,  720.36432633) and (512.19865386,  716.67765975) .. (499.91332084,  714.49899314)
+    .. controls (481.93332129,  711.31099322) and (470.32932158,  708.16565997) .. (462.88532176,  705.36032670)
+    .. controls (458.57198854,  703.73499341) and (445.98265552,  698.81366020) .. (440.94132231,  691.36032705)
+    .. controls (439.66265568,  689.47099377) and (439.80798900,  683.43632725) .. (439.44398901,  681.91632729)
+    .. controls (438.88532236,  679.58299401) and (437.19065574,  678.58432737) .. (434.18265581,  678.02299405)
+    .. controls (426.91332266,  676.66566075) and (419.64398951,  682.58299394) .. (419.66265618,  689.86032709)
+    .. controls (419.68532284,  698.31632688) and (425.60798936,  703.41499342) .. (429.55332259,  706.96966000)
+    .. controls (433.74398916,  710.74565990) and (447.44132215,  720.13765967) .. (448.70532212,  718.47099304)
+    .. controls (449.57065543,  717.33099307) and (444.53465555,  711.52699321) .. (445.32932220,  709.80432659)
+    .. controls (445.73732219,  708.92032661) and (451.32132205,  711.04432656) .. (452.85598868,  711.66432654)
+    .. controls (455.20532195,  712.61232652) and (461.95198845,  715.57632645) .. (463.49598841,  716.52699309)
+    .. controls (464.21865506,  716.97099308) and (462.32932178,  717.99899305) .. (460.57998849,  724.16565957)
+    .. controls (459.75065517,  727.08832616) and (459.89332184,  733.08832601) .. (460.10798850,  736.99765924)
+    .. controls (460.41332182,  742.58165910) and (461.99598845,  743.69365908) .. (462.88532176,  750.13765892)
+    .. controls (463.40932175,  753.94165882) and (463.21332175,  758.85099203) .. (463.24665509,  763.49899192)
+    .. controls (463.28798842,  769.28832510) and (462.91332176,  776.79099158) .. (461.28798847,  779.58165818)
+    .. controls (459.10398852,  783.33499142) and (459.16265519,  785.41499137) .. (461.56398846,  787.06165799)
+    .. controls (463.69598841,  788.52299129) and (467.03998832,  789.16299127) .. (469.55865493,  788.64032462)
+    .. controls (471.07332156,  788.32565796) and (473.38532150,  787.30432465) .. (472.97198818,  783.31899142)
+    .. controls (472.81198818,  781.77632479) and (471.38532155,  779.80432484) .. (470.74665490,  777.16565824)
+    .. controls (469.54398826,  772.19899170) and (468.71732162,  766.42432518) .. (468.66265495,  761.49899197)
+    .. controls (468.61732162,  757.31899207) and (472.82932151,  758.83232537) .. (473.66265483,  752.13765887)
+    .. controls (474.53732147,  745.11632571) and (474.95732146,  736.34032593) .. (474.99598813,  730.97099273)
+    .. controls (475.05465479,  722.92565960) and (474.30932148,  719.34165969) .. (474.71865480,  719.36032635)
+    .. controls (476.88398808,  719.45899302) and (483.88532124,  721.52699296) .. (483.99598790,  723.16565959)
+    .. controls (484.12798790,  725.10699287) and (480.57732132,  724.27899290) .. (479.80532134,  726.25499285)
+    .. controls (478.07998805,  730.66565940) and (478.49598804,  745.20699237) .. (479.41332135,  752.24832553)
+    .. controls (479.91865467,  756.13365877) and (480.64132132,  758.04299205) .. (480.78798798,  760.54032532)
+    .. controls (480.97598798,  763.72832524) and (480.49598799,  766.24965851) .. (480.70398798,  770.04032508)
+    .. controls (480.98932131,  775.22965829) and (484.05465457,  781.59499146) .. (485.17732120,  786.51099134)
+    .. controls (486.52398784,  792.40965786) and (487.44132115,  797.87499106) .. (496.07598760,  795.66699111)
+    .. controls (502.05198745,  794.13765782) and (500.72532082,  787.43099132) .. (499.95332083,  782.88432476)
+    .. controls (499.41332085,  779.70699151) and (496.60798758,  777.52699156) .. (497.66265423,  772.69365835)
+    .. controls (498.08265421,  770.77499173) and (501.99598745,  773.30432500) .. (506.21865401,  772.08299170)
+    .. controls (507.91465397,  771.59099171) and (508.25598729,  765.93632519) .. (508.05198730,  761.08165864)
+    .. controls (507.97332063,  759.21765869) and (507.81465397,  752.69899219) .. (507.82932064,  751.83232554)
+    .. controls (507.88532064,  748.66565895) and (511.99598720,  749.74965893) .. (512.80132051,  745.85232569)
+    .. controls (513.32798717,  743.29499242) and (513.53598716,  740.52565916) .. (513.21865384,  737.63765923)
+    .. controls (512.96798718,  735.35632595) and (510.01598725,  735.36832595) .. (509.66265393,  733.80432599)
+    .. controls (509.16398727,  731.59099271) and (508.98532061,  729.32832610) .. (510.21865391,  729.24965944)
+    .. controls (512.19065386,  729.12299277) and (519.91332034,  729.80432609) .. (525.11465354,  731.78299271)
+    .. controls (526.53998684,  732.32565936) and (525.49598686,  735.12432596) .. (523.71865357,  736.80432592)
+    .. controls (522.23465361,  738.20699255) and (521.82932029,  738.29099255) .. (519.10798702,  743.69365908)
+    .. controls (517.51465373,  746.85499233) and (515.41065378,  753.78565882) .. (515.16265379,  756.63765875)
+    .. controls (514.96132046,  758.96965870) and (517.07998707,  759.16032536) .. (517.83598705,  759.73765868)
+    .. controls (518.54398704,  760.28032533) and (518.53732037,  762.00432529) .. (518.32932038,  763.13765859)
+    .. controls (517.97332038,  765.08032521) and (515.11598712,  764.31099189) .. (514.99598713,  765.47099187)
+    .. controls (514.44132047,  770.86032506) and (518.88532036,  773.13765834) .. (522.85865360,  772.50165836)
+    .. controls (526.36132017,  771.94032504) and (529.00532011,  768.54165846) .. (530.20398674,  769.87365842)
+    .. controls (531.70532004,  771.54032505) and (531.45465338,  780.09632483) .. (531.03865339,  782.70699143)
+    .. controls (530.82532006,  784.04299140) and (528.88932011,  783.82299141) .. (527.10798682,  783.47099142)
+    .. controls (523.13732025,  782.68699144) and (517.91998705,  780.70699148) .. (517.25465374,  781.47899147)
+    .. controls (515.95998710,  782.98432476) and (521.16265364,  794.74832447) .. (531.75198671,  795.31232445)
+    .. controls (539.35731985,  795.71765778) and (542.37465311,  791.12832456) .. (544.21198639,  783.24565809)
+    .. controls (546.43865301,  773.70032499) and (548.21865296,  762.08165862) .. (546.05198635,  752.02699220)
+    .. controls (545.21331970,  748.13499230) and (539.41331985,  740.49899249) .. (535.16265329,  737.49899257)
+    .. controls (532.96798668,  735.94965927) and (532.85998668,  732.85099268) .. (533.66265333,  732.97099268)
+    .. controls (544.88531971,  734.64965930) and (554.99598613,  736.24832593) .. (566.55731917,  727.45899282)
+    .. controls (574.73198563,  721.24432630) and (574.61065230,  714.82165980) .. (565.06798587,  710.35899324)
+    .. controls (557.28265273,  706.71766000) and (548.89731961,  704.19232673) .. (540.56131982,  701.98566012)
+    .. controls (537.63065323,  701.20832681) and (531.57998671,  699.49899352) .. (529.82932009,  701.83232679)
+    .. controls (527.94265347,  704.34832673) and (531.13465339,  710.47632657) .. (533.77598666,  713.74832649)
+    .. controls (536.73998658,  717.41899307) and (539.21865319,  719.13765969) .. (536.09598660,  719.86165967)
+  (490.44078774,  696.97126024)
+    .. controls (487.89412114,  695.43659362) and (486.00745452,  693.61259366) .. (483.05145459,  690.91526040)
+    .. controls (482.00212128,  689.95792709) and (479.99412133,  686.74859383) .. (476.99678808,  685.85526052)
+    .. controls (474.50212147,  685.11126054) and (471.99678820,  687.91526047) .. (471.27412155,  690.13792708)
+    .. controls (470.29012158,  693.16726034) and (470.77412156,  698.66992687) .. (473.10745484,  699.75259351)
+    .. controls (475.92345477,  701.06059348) and (480.03812133,  700.83259348) .. (484.24612123,  702.16592678)
+    .. controls (488.11945446,  703.39259342) and (490.63545440,  704.66459339) .. (494.55945430,  706.37126001)
+    .. controls (501.39412080,  709.34459327) and (506.33012068,  710.69392657) .. (511.83012054,  710.69392657)
+    .. controls (518.55145370,  710.69392657) and (525.10078687,  706.36059334) .. (525.10745354,  702.91526010)
+    .. controls (525.12078687,  695.37392695) and (519.03145369,  693.97259365) .. (515.51145378,  691.53392705)
+    .. controls (512.77412051,  689.63792709) and (514.33012048,  683.41526058) .. (517.43545373,  684.01659390)
+    .. controls (521.96345362,  684.89126055) and (530.48745340,  684.91926055) .. (534.16345331,  684.74859388)
+    .. controls (540.16345316,  684.47126056) and (544.93145304,  682.47126061) .. (544.91278638,  679.08192736)
+    .. controls (544.89145304,  674.88592746) and (542.62745310,  670.13126092) .. (537.38478657,  667.86059431)
+    .. controls (533.95411998,  666.37392768) and (528.09945346,  667.61526098) .. (527.33012015,  666.41526101)
+    .. controls (526.74745350,  665.50859436) and (527.69012014,  659.94859450) .. (527.57945348,  654.74859463)
+    .. controls (527.48878681,  650.44326141) and (527.17945349,  646.96726150) .. (524.66345355,  643.13792826)
+    .. controls (522.54345360,  639.91259500) and (518.18478705,  633.90859515) .. (512.33012053,  628.91526195)
+    .. controls (507.59412064,  624.87659538) and (503.12078742,  621.70726213) .. (497.83012089,  621.70726213)
+    .. controls (490.16345441,  621.70726213) and (480.87145464,  628.54059529) .. (474.33012148,  633.99926182)
+    .. controls (465.15278837,  641.65526163) and (458.24612188,  649.79126142) .. (460.33012183,  651.91526137)
+    .. controls (461.24745514,  652.85126135) and (466.77545500,  651.87659471) .. (472.66345485,  649.87392809)
+    .. controls (476.99412141,  648.40059479) and (490.94878773,  639.93526167) .. (494.03145432,  638.97659503)
+    .. controls (497.28612090,  637.96459505) and (503.92612074,  644.68592822) .. (504.99678738,  654.41526131)
+    .. controls (505.51012070,  659.08192786) and (506.02078735,  671.32592755) .. (504.33012073,  671.02726089)
+    .. controls (500.71812082,  670.38859424) and (473.93678815,  661.41259447) .. (470.49678824,  659.97126117)
+    .. controls (468.10478830,  658.96992786) and (461.67145512,  656.10059460) .. (459.38478852,  655.02726129)
+    .. controls (455.24612195,  653.08192801) and (447.97945547,  653.66192799) .. (448.78745545,  661.70326113)
+    .. controls (449.37012210,  667.50326098) and (450.90078873,  671.64459421) .. (459.08745519,  672.16859420)
+    .. controls (472.32078819,  673.01792751) and (499.05412086,  678.70992737) .. (501.03812081,  679.37392735)
+    .. controls (501.72345412,  679.60326068) and (499.70478751,  682.41526061) .. (497.16345424,  685.47126053)
+    .. controls (495.04878762,  688.01259380) and (493.23012100,  689.90592709) .. (493.24612100,  692.20726036)
+    .. controls (493.27412100,  696.13792693) and (504.57145405,  694.69926030) .. (506.05145402,  695.91526027)
+    .. controls (507.53278731,  697.13259357) and (508.72078728,  701.09259348) .. (506.99678733,  701.52726013)
+    .. controls (502.35812077,  702.69392677) and (494.49678764,  699.41526018) .. (490.44078774,  696.97126024)}
+\def\fdulogo at motto@er at i{%
+  (461.66398846,  521.23979797)
+    .. controls (458.99598853,  527.08246449) and (472.53065485,  539.48513085) .. (475.21865479,  544.85979738)
+    .. controls (476.99598808,  548.41579729) and (475.94132143,  551.52646388) .. (472.38532152,  549.41579727)
+    .. controls (469.05465494,  547.43846398) and (458.63332187,  543.46246408) .. (456.42132192,  547.74913064)
+    .. controls (454.32932198,  551.80513054) and (460.82932181,  560.35979699) .. (466.95065499,  564.42246356)
+    .. controls (473.84532149,  568.99713011) and (490.41865441,  577.49579657) .. (502.87198743,  569.37446343)
+    .. controls (511.49598721,  563.74913024) and (511.32932055,  558.33179704) .. (505.56532069,  552.93046385)
+    .. controls (501.92398745,  549.51846393) and (496.83465425,  546.36113068) .. (493.24665434,  543.41579742)
+    .. controls (485.96265452,  537.43446423) and (478.11865471,  528.56513112) .. (473.66132149,  524.41713123)
+    .. controls (469.71865492,  520.74779798) and (462.48265510,  519.44779802) .. (461.66398846,  521.23979797)
+  (546.32931968,  518.98566469)
+    .. controls (546.61998633,  523.10033126) and (546.32931968,  527.41633115) .. (542.66265310,  527.65633114)
+    .. controls (537.49065323,  527.99499780) and (510.67465390,  525.49633120) .. (509.65598726,  521.49899797)
+    .. controls (508.91332061,  518.58299804) and (515.44132045,  517.13766474) .. (518.57998704,  507.58299831)
+    .. controls (520.01065367,  503.22566509) and (518.96798703,  496.66566525) .. (520.91332031,  494.33233198)
+    .. controls (523.59598691,  491.11366539) and (528.76398678,  488.95766545) .. (531.66265338,  488.08299880)
+    .. controls (534.60798663,  487.19366549) and (536.81465325,  490.43366541) .. (539.74665317,  494.83233197)
+    .. controls (544.41331972,  501.83233179) and (545.82931969,  511.90299821) .. (546.32931968,  518.98566469)
+  (498.49732087,  530.70833107)
+    .. controls (508.24665396,  533.74966433) and (529.91465342,  538.43633088) .. (543.32931975,  539.08299753)
+    .. controls (556.60798608,  539.72166418) and (567.39998582,  534.18699765) .. (568.66265245,  525.86033119)
+    .. controls (570.82931906,  511.58299821) and (570.88531906,  504.47099839) .. (563.89731924,  491.04966539)
+    .. controls (561.09331931,  485.66433219) and (556.52665275,  481.04699898) .. (551.93198620,  477.05099908)
+    .. controls (545.75065302,  471.67499921) and (541.49731980,  470.89633256) .. (536.21865326,  470.58299924)
+    .. controls (526.88532016,  470.02699925) and (520.67332032,  480.32966566) .. (518.57998704,  480.24966566)
+    .. controls (514.24665381,  480.08299900) and (511.57998721,  464.91633271) .. (506.83732066,  462.48966611)
+    .. controls (504.57865405,  461.33366614) and (502.17065411,  462.86433276) .. (501.41332080,  467.08299933)
+    .. controls (500.24665416,  473.58299916) and (500.84265415,  491.84966537) .. (500.22265416,  499.16699852)
+    .. controls (499.82932084,  503.80433174) and (495.77065427,  504.87633171) .. (495.12532096,  503.36833175)
+    .. controls (494.05198765,  500.86033181) and (495.27465428,  494.91633196) .. (494.46798764,  489.60966543)
+    .. controls (493.74532099,  484.84699888) and (490.16265441,  482.50299894) .. (487.44132115,  482.02699895)
+    .. controls (485.21065454,  481.63633230) and (481.55198796,  482.52699894) .. (479.49598801,  488.63766545)
+    .. controls (476.59865475,  497.25499857) and (477.41198806,  510.16433158) .. (483.77465457,  510.58299824)
+    .. controls (487.57998781,  510.83233157) and (490.55465440,  506.33366501) .. (491.91865437,  507.90699830)
+    .. controls (493.66265433,  509.91633159) and (496.05332093,  517.31233140) .. (493.71865432,  517.91633139)
+    .. controls (492.40132102,  518.25633138) and (485.25598787,  515.80299811) .. (477.91332139,  511.91633154)
+    .. controls (470.44398824,  507.96166497) and (463.58798841,  501.50166513) .. (460.88532181,  496.24966526)
+    .. controls (458.21998854,  491.07099873) and (459.75598851,  486.31899884) .. (459.16265519,  480.33233233)
+    .. controls (458.32932188,  471.91633254) and (452.09198870,  467.21099932) .. (447.79465547,  466.89633266)
+    .. controls (443.49598891,  466.58299934) and (437.99598905,  472.24966586) .. (437.07198907,  480.16566567)
+    .. controls (436.15998910,  487.98166547) and (437.70132239,  497.62033190) .. (439.57998901,  505.83233169)
+    .. controls (440.57998899,  510.20566491) and (443.49065558,  518.47899804) .. (447.27465548,  518.52699804)
+    .. controls (451.60798871,  518.58299804) and (455.63332194,  506.69366500) .. (457.10798857,  506.91633166)
+    .. controls (460.49598849,  507.42699832) and (467.16265499,  515.36433145) .. (471.71865487,  518.30433138)
+    .. controls (477.82932139,  522.24966461) and (485.80665452,  526.74966450) .. (498.49732087,  530.70833107)}
+\def\fdulogo at motto@du{%
+  (491.26185439,364.0330019)
+    .. controls (490.21918774,  365.05433521) and (485.86052119,  365.21300187) .. (483.96852123,  364.85966855)
+    .. controls (482.05785462,  364.50366856) and (480.77652131,  361.88100196) .. (482.45518794,  361.16633531)
+    .. controls (484.01785457,  360.49966866) and (488.39652112,  360.37033533) .. (489.88185442,  360.56766866)
+    .. controls (491.13118772,  360.73433532) and (491.72185437,  363.58233525) .. (491.26185439,  364.03300190)
+  (498.07918755,  309.24900327)
+    .. controls (495.40718761,  308.81433662) and (494.07918765,  307.79033664) .. (494.82985430,  305.12367004)
+    .. controls (495.38718762,  303.13967009) and (497.10052091,  300.70767015) .. (499.20452085,  301.35300347)
+    .. controls (500.60318748,  301.78233679) and (501.00318747,  302.68633677) .. (501.07918747,  304.95700338)
+    .. controls (501.16318747,  307.43700332) and (499.87118750,  309.54100326) .. (498.07918755,  309.24900327)
+  (513.70452049,  390.37433458)
+    .. controls (513.75385382,  392.10633453) and (512.80585385,  393.27566784) .. (510.68052057,  391.91433454)
+    .. controls (509.81918725,  391.36366789) and (508.63385395,  389.53966793) .. (507.32985398,  387.94366797)
+    .. controls (506.33518734,  386.72633467) and (505.35785403,  385.49300137) .. (504.91252071,  384.44366806)
+    .. controls (503.66318741,  381.49966813) and (505.89252069,  379.53300151) .. (508.24585396,  381.02633481)
+    .. controls (509.30718727,  381.69966813) and (509.86718725,  383.61700141) .. (510.91252056,  385.24900137)
+    .. controls (512.14452053,  387.17166799) and (513.66318716,  388.91566795) .. (513.70452049,  390.37433458)
+  (496.44052092,  347.91566897)
+    .. controls (493.14852100,  342.35966911) and (487.07918782,  342.66633577) .. (482.74585460,  346.08233568)
+    .. controls (477.92052139,  349.88766892) and (479.77385467,  357.30233540) .. (477.27518807,  357.35700207)
+    .. controls (474.57918814,  357.41566873) and (474.95785479,  352.38100219) .. (474.49652147,  351.44366888)
+    .. controls (473.63518816,  349.69300226) and (471.25918822,  350.27033558) .. (468.88585494,  349.97166892)
+    .. controls (465.80185502,  349.58233560) and (465.21918837,  348.16633563) .. (463.74585507,  348.30500229)
+    .. controls (461.03252181,  348.56100229) and (460.10718850,  349.27700227) .. (457.91252189,  349.74900226)
+    .. controls (455.31252195,  350.30900224) and (450.94052206,  349.41566893) .. (450.44052207,  355.63833544)
+    .. controls (449.97918875,  361.37833530) and (454.17918865,  365.29966854) .. (457.82985522,  371.66633504)
+    .. controls (460.86985514,  376.96633491) and (461.78852179,  382.66633477) .. (464.32985506,  384.74900138)
+    .. controls (466.36718834,  386.41966801) and (469.16852160,  385.19700137) .. (471.32985488,  385.66633469)
+    .. controls (473.82985482,  386.20766801) and (475.22452145,  387.77966797) .. (476.57918809,  387.74900131)
+    .. controls (482.69918793,  387.61433465) and (483.38585458,  381.13833481) .. (488.16318780,  381.08233481)
+    .. controls (493.07652101,  381.02500148) and (506.05252068,  393.85966782) .. (511.32985388,  398.63833437)
+    .. controls (516.60718708,  403.41566758) and (526.18318685,  412.05033403) .. (534.27385331,  405.24900087)
+    .. controls (535.89118660,  403.88900091) and (538.52051987,  400.89300098) .. (538.27385321,  398.02633439)
+    .. controls (537.66318656,  390.91566790) and (529.43385343,  387.95833464) .. (531.07918672,  384.66633472)
+    .. controls (531.99652003,  382.83300143) and (536.99651991,  384.30500139) .. (541.85385312,  382.19700145)
+    .. controls (548.41118629,  379.35166819) and (549.44051960,  373.19300167) .. (542.82985310,  368.24900180)
+    .. controls (537.34718657,  364.14900190) and (531.04452006,  363.72500191) .. (534.22051998,  357.18633541)
+    .. controls (536.05251993,  353.41566883) and (536.30451993,  350.42900224) .. (533.28318667,  347.61433565)
+    .. controls (530.38585341,  344.91566905) and (525.47118686,  346.40500234) .. (524.07918690,  344.74900238)
+    .. controls (522.23518694,  342.55433577) and (525.44052020,  341.22233581) .. (525.32985353,  337.02633591)
+    .. controls (525.21918687,  332.80500268) and (517.32985373,  332.35966936) .. (517.32985373,  329.91566942)
+    .. controls (517.32985373,  328.06100280) and (517.00452041,  326.62233617) .. (518.37918704,  326.18100285)
+    .. controls (520.82985365,  325.39433620) and (525.69518686,  326.30766951) .. (526.10052018,  323.50233625)
+    .. controls (526.45118684,  321.08766964) and (526.44052017,  316.61033642) .. (524.99652021,  315.74900311)
+    .. controls (523.49385358,  314.85300313) and (520.01518700,  315.67166978) .. (519.57118701,  314.44900314)
+    .. controls (519.19785369,  313.42366983) and (519.28585368,  311.29433655) .. (520.05252033,  311.08233656)
+    .. controls (522.37385361,  310.43966991) and (526.12985351,  311.77966987) .. (528.99652011,  311.58233655)
+    .. controls (531.51518671,  311.40900322) and (532.50452002,  309.87300326) .. (532.45518669,  306.41567001)
+    .. controls (532.34852002,  299.02367019) and (526.09652018,  299.02900353) .. (522.49652027,  296.83300358)
+    .. controls (519.28852035,  294.87433696) and (518.28852038,  288.99967044) .. (521.06585364,  287.72500381)
+    .. controls (523.74318691,  286.49567051) and (532.77652001,  291.14233706) .. (541.38585313,  293.85967032)
+    .. controls (548.53651962,  296.11700360) and (554.31251948,  297.13300357) .. (560.75918598,  297.13833691)
+    .. controls (572.57651902,  297.14767024) and (579.51918551,  289.53033710) .. (579.20318552,  278.51967071)
+    .. controls (578.60185220,  257.56100456) and (564.04051923,  237.39967173) .. (545.09118637,  229.35300527)
+    .. controls (532.67518668,  224.07967207) and (522.02318695,  225.81567202) .. (513.44052050,  235.58233845)
+    .. controls (507.82985397,  241.96900495) and (499.03252086,  249.68633809) .. (496.38585426,  249.35967144)
+    .. controls (493.72185432,  249.03300478) and (482.01785462,  246.01167152) .. (473.93118815,  244.41033823)
+    .. controls (466.41918834,  242.92233826) and (446.60718883,  239.41567168) .. (436.60718908,  238.35967171)
+    .. controls (432.82718918,  237.96100505) and (431.32985588,  236.49967176) .. (428.49652262,  236.41567176)
+    .. controls (425.05652271,  236.31433843) and (422.24585611,  237.95700505) .. (419.66318951,  241.66633829)
+    .. controls (417.99918955,  244.05433823) and (416.92052291,  247.78500481) .. (417.28852290,  251.12367139)
+    .. controls (417.70452289,  254.91567130) and (421.87918945,  256.95833791) .. (428.66318928,  257.62367123)
+    .. controls (436.16318910,  258.35967121) and (438.25385571,  256.52100459) .. (446.88985549,  256.70900458)
+    .. controls (453.82985532,  256.85967125) and (472.74585485,  258.33300454) .. (481.45518796,  259.49967118)
+    .. controls (483.41785458,  259.76233784) and (485.44185453,  260.25567116) .. (486.83252116,  260.77167115)
+    .. controls (487.26585449,  260.93167115) and (485.01252121,  265.87167102) .. (485.82985452,  266.08233768)
+    .. controls (487.77385447,  266.58233767) and (492.26718769,  263.18367109) .. (494.82985430,  263.58233775)
+    .. controls (501.17118747,  264.57167105) and (510.05785392,  265.77833769) .. (516.13518710,  266.74900433)
+    .. controls (523.76585357,  267.96767097) and (532.82985335,  268.13833763) .. (533.53518666,  265.93967102)
+    .. controls (534.00451998,  264.47833772) and (528.48852012,  260.62500449) .. (522.77385360,  257.91567122)
+    .. controls (517.58452039,  255.45567128) and (511.47918721,  254.14900465) .. (512.32985386,  253.49967133)
+    .. controls (513.60185383,  252.52767136) and (530.44452007,  246.09833818) .. (534.49651997,  247.08233816)
+    .. controls (537.41251990,  247.79033814) and (543.77785307,  254.45700464) .. (549.55251959,  264.91567105)
+    .. controls (553.81251949,  272.63167085) and (558.50718604,  288.15433713) .. (556.57918609,  289.33300377)
+    .. controls (554.65251947,  290.51033707) and (541.27785313,  286.57700384) .. (534.14051998,  284.39833723)
+    .. controls (520.45918699,  279.91300400) and (507.27385398,  274.85967080) .. (492.93518768,  271.51167088)
+    .. controls (488.76185445,  270.53700424) and (481.10718797,  269.69567093) .. (478.88585469,  272.91567085)
+    .. controls (476.11518810,  276.93033741) and (476.04052143,  285.11433721) .. (476.32985476,  293.16633701)
+    .. controls (476.60852142,  300.93567015) and (477.15518807,  308.58766995) .. (479.77385467,  311.91566987)
+    .. controls (482.19918795,  314.99700313) and (490.84052106,  317.42366973) .. (493.74585432,  318.08233638)
+    .. controls (499.99652083,  319.49966968) and (498.51652087,  322.47033627) .. (498.51652087,  325.80500286)
+    .. controls (498.51652087,  328.13833613) and (494.71918763,  327.13833616) .. (490.66318773,  327.91566947)
+    .. controls (487.01652116,  328.61566945) and (485.28718787,  332.57566935) .. (489.75652109,  337.50100257)
+    .. controls (491.45918771,  339.37833585) and (495.38585428,  341.74900246) .. (496.49652092,  342.41566911)
+    .. controls (497.60718756,  343.08233576) and (503.04452076,  345.68900236) .. (507.21918732,  346.13833568)
+    .. controls (512.50318719,  346.70500233) and (514.66318713,  346.02633569) .. (517.44052040,  347.52633565)
+    .. controls (521.31518697,  349.61966893) and (521.26318697,  364.89166855) .. (520.91252031,  366.74900183)
+    .. controls (520.44185366,  369.25033510) and (515.92585377,  366.09566852) .. (514.05252048,  366.47166851)
+    .. controls (509.62585393,  367.47966848) and (507.55252064,  370.80500173) .. (503.71918741,  370.02633509)
+    .. controls (498.80452086,  369.03033511) and (495.55652094,  362.61833527) .. (495.71652094,  357.26366874)
+    .. controls (495.84185427,  353.03433551) and (499.10718752,  352.41566886) .. (496.44052092,  347.91566897)}
+\def\fdulogo at motto@zhi{%
+  (512.24638719,  153.66567383)
+    .. controls (512.47838719,  150.62834057) and (511.49705388,  146.99900733) .. (513.74638716,  147.41634065)
+    .. controls (518.23038704,  148.24567396) and (526.40638684,  149.32967394) .. (527.24638682,  145.37367403)
+    .. controls (527.95438680,  142.04034078) and (528.16238680,  138.71500753) .. (523.77438691,  135.19367429)
+    .. controls (520.66372032,  132.69767435) and (517.50372040,  132.90034101) .. (515.55172044,  130.47100774)
+    .. controls (513.99438715,  128.53500779) and (513.96905382,  119.16567469) .. (516.77438708,  119.63767468)
+    .. controls (519.48905368,  120.09500800) and (524.63572022,  121.27634130) .. (528.07972013,  121.41634130)
+    .. controls (533.64771999,  121.64034129) and (537.49438656,  118.33367471) .. (537.49571990,  113.41634150)
+    .. controls (537.49705323,  110.36034158) and (533.90638665,  106.28300835) .. (530.34105341,  105.88567502)
+    .. controls (526.60772017,  105.47100837) and (525.24638687,  108.58167495) .. (521.07972031,  108.62434162)
+    .. controls (515.94905377,  108.67500829) and (510.59972057,  106.95100833) .. (499.49572085,  104.08167507)
+    .. controls (493.72772099,  102.59234177) and (488.03838780,  100.72834182) .. (482.69705460,  99.520341850)
+    .. controls (477.65972139,   98.38034188) and (471.57838821,  96.480341920) .. (465.94105502,  96.248341930)
+    .. controls (463.30372175,   96.14034193) and (458.61438853,  96.236341930) .. (457.80238855,  100.31100849)
+    .. controls (457.05172191,  104.08167507) and (457.67972189,  107.07500833) .. (462.44105511,  109.24834160)
+    .. controls (467.55172164,  111.58300821) and (482.99705459,  112.86034151) .. (489.38505443,  114.30434148)
+    .. controls (492.46772102,  115.00167479) and (491.70505437,  123.16567459) .. (490.12105441,  123.70700791)
+    .. controls (487.46638781,  124.61634122) and (478.63838803,  121.42434130) .. (472.78238818,  122.42567461)
+    .. controls (469.96772158,  122.90700793) and (463.91305507,  123.10700792) .. (464.49572172,  129.33234110)
+    .. controls (465.10772171,  135.86034094) and (484.69438788,  137.48434090) .. (488.35172112,  138.72967420)
+    .. controls (491.99572103,  139.97100750) and (491.07438772,  146.65634067) .. (490.57972107,  149.11767394)
+    .. controls (488.73572111,  158.29634038) and (489.04505444,  164.86034021) .. (500.27838749,  165.97367352)
+    .. controls (511.62238721,  167.09767349) and (512.05572053,  156.16300710) .. (512.24638719,  153.66567383)
+  (477.14665474,   84.89994221)
+    .. controls (472.73998818,   81.22527564) and (467.58798831,   76.65460909) .. (463.99598840,   72.30394253)
+    .. controls (462.33465511,   70.29194258) and (463.05465509,   58.65327620) .. (463.10798842,   55.47060962)
+    .. controls (463.21865509,   48.80394312) and (460.37198849,   40.91594331) .. (453.45465533,   40.91594331)
+    .. controls (445.28798887,   40.91594331) and (444.20265556,   46.74927650) .. (443.32932225,   50.99860973)
+    .. controls (442.19732228,   56.51327626) and (443.66132224,   63.83994274) .. (445.21865554,   66.35994268)
+    .. controls (446.79598883,   68.91194261) and (452.75865535,   71.92527587) .. (457.92665522,   75.68794244)
+    .. controls (468.97065494,   83.72927558) and (482.18532128,   94.29727531) .. (483.77465457,   92.64660869)
+    .. controls (485.03865454,   91.33194205) and (479.27598802,   86.67460884) .. (477.14665474,   84.89994221)
+  (476.49638809,   72.74900918)
+    .. controls (480.21905466,   74.35967581) and (501.89638745,   50.07834308) .. (510.82972056,   47.24900982)
+    .. controls (515.82972044,   45.66634319) and (532.30172003,   46.16634318) .. (537.63505323,   46.24900985)
+    .. controls (538.76705320,   46.26634318) and (540.66305315,   46.49967651) .. (540.59505315,   47.73300981)
+    .. controls (540.52038649,   49.09834311) and (500.66305415,   75.58234245) .. (503.74572074,   79.16500902)
+    .. controls (505.18172070,   80.83300898) and (525.21905354,   70.58234257) .. (540.71905315,   64.52634272)
+    .. controls (556.74171941,   58.26634288) and (572.32971903,   53.35967634) .. (572.32971903,   48.58234312)
+    .. controls (572.32971903,   43.46367658) and (566.08038585,   43.41567658) .. (563.08038592,   39.49967668)
+    .. controls (561.54438596,   37.49567673) and (561.41371930,   34.58234347) .. (558.66305270,   32.58234352)
+    .. controls (549.60438626,   25.99434369) and (535.51105328,   25.81434369) .. (524.88572021,   26.15834368)
+    .. controls (504.88572071,   26.80501033) and (495.99638760,   29.91567692) .. (487.99638780,   40.91567665)
+    .. controls (478.70838803,   53.68767633) and (473.71505482,   71.54500921) .. (476.49638809,   72.74900918)
+  (507.10745399,   87.63794214)
+    .. controls (508.21812063,   90.80460873) and (515.55412044,   93.42460867) .. (524.74612021,   94.66594197)
+    .. controls (535.22878662,   96.08060860) and (548.44611962,   96.18060860) .. (551.57945288,   95.24860862)
+    .. controls (557.74611939,   93.41527533) and (560.91278598,   86.41527551) .. (560.49678599,   80.49927566)
+    .. controls (560.21945266,   76.56594242) and (556.38478609,   75.08194246) .. (553.55145283,   75.08194246)
+    .. controls (549.55145293,   75.08194246) and (543.79011974,   76.84460908) .. (539.55811984,   77.15260907)
+    .. controls (532.15012003,   77.69394239) and (524.42745356,   78.01127572) .. (520.71812032,   78.58194237)
+    .. controls (514.94078713,   79.47127568) and (505.79145402,   83.88727557) .. (507.10745399,   87.63794214)}
+\def\fdulogo at motto@qie{%
+  ( 70.41306491,  978.12405322)
+    .. controls ( 68.59973162,  977.99071989) and ( 61.77439846,  976.13738660) .. ( 56.44106526,  974.19338665)
+    .. controls ( 51.01039872,  972.21338670) and ( 47.16373215,  968.74938678) .. ( 42.77439893,  967.74938681)
+    .. controls ( 38.32373238,  966.73472017) and ( 27.71839931,  965.08272021) .. ( 25.59173269,  972.32672003)
+    .. controls ( 24.69706605,  975.37205328) and ( 31.35573255,  978.65738654) .. ( 35.71839911,  981.09738648)
+    .. controls ( 40.16373233,  983.58271975) and ( 50.54506540,  987.01471966) .. ( 56.73839858,  988.37605296)
+    .. controls ( 60.80639848,  989.26938627) and ( 70.49573157,  991.41605288) .. ( 72.62106485,  992.66538619)
+    .. controls ( 74.04239815,  993.50138617) and ( 73.41306483, 1004.24938590) .. ( 72.24639819, 1007.16538582)
+    .. controls ( 69.62239826, 1013.72405233) and ( 69.98906492, 1025.04271871) .. ( 79.22106469, 1025.33205204)
+    .. controls ( 87.39039782, 1025.58938536) and ( 88.54373112, 1019.55471885) .. ( 88.66373112, 1011.74938571)
+    .. controls ( 88.73039778, 1007.33605249) and ( 85.75306452,  999.49871935) .. ( 87.44106448,  996.69338609)
+    .. controls ( 89.12906444,  993.88805282) and ( 95.55173094,  997.80405272) .. ( 96.82639758,  996.37605276)
+    .. controls ( 98.79706420,  994.16671948) and ( 99.24373085,  989.33205294) .. ( 96.61173092,  988.43205296)
+    .. controls ( 90.38506441,  986.30405301) and ( 86.55173117,  986.91605300) .. ( 85.04773121,  978.98671986)
+    .. controls ( 84.33173123,  975.21471996) and ( 84.13839790,  971.34805339) .. ( 83.83039790,  966.74938683)
+    .. controls ( 83.38773125,  960.16272033) and ( 83.64373124,  956.11872043) .. ( 84.03173123,  955.66538711)
+    .. controls ( 85.20506454,  954.29072048) and (101.00239747,  967.46805348) .. (109.66239726,  973.83205332)
+    .. controls (119.56506368,  981.10938647) and (128.27839679,  988.06005297) .. (131.55173004,  989.97071959)
+    .. controls (133.45439666,  991.08271956) and (135.66906327,  994.46271947) .. (136.49706325,  993.99871949)
+    .. controls (138.57972987,  992.83205285) and (137.16372990,  989.69338626) .. (141.07972981,  989.66538626)
+    .. controls (146.73839633,  989.62538626) and (150.99706289,  989.74938626) .. (150.41306291,  983.16538642)
+    .. controls (149.91972959,  977.59471990) and (149.02906294,  971.76405338) .. (148.24639629,  966.99872016)
+    .. controls (147.24639632,  960.91605365) and (152.66372952,  965.49872020) .. (153.99972948,  959.75472034)
+    .. controls (154.93972946,  955.71338711) and (159.54106268,  956.39872043) .. (161.71306262,  958.37872038)
+    .. controls (163.88506257,  960.36005366) and (167.24372915,  970.34538674) .. (168.57972912,  981.08271981)
+    .. controls (169.87439575,  991.48805288) and (171.32772905, 1007.98271914) .. (169.68772909, 1009.37205243)
+    .. controls (167.74239581, 1011.02138573) and (157.99706272, 1000.24938600) .. (149.74639626, 1000.41605266)
+    .. controls (142.70639643,  999.65471934) and (137.03706324, 1002.73205260) .. (136.51572992, 1004.14138590)
+    .. controls (135.48372995, 1006.93471916) and (143.43439641, 1010.10538575) .. (147.18639632, 1011.49471905)
+    .. controls (154.63972947, 1014.25338565) and (161.57972929, 1014.66538564) .. (168.57972912, 1017.83205222)
+    .. controls (171.25039572, 1019.04005219) and (172.36639569, 1022.16405212) .. (173.91306232, 1021.83205212)
+    .. controls (181.62772879, 1020.17738550) and (191.32772855, 1014.26005231) .. (191.90772854, 1006.67205250)
+    .. controls (192.90639518,  993.61871950) and (192.74639518,  980.61738649) .. (190.68106190,  965.57872020)
+    .. controls (189.56506193,  957.44672040) and (184.02772873,  952.24005386) .. (178.35172887,  946.71472067)
+    .. controls (172.59039569,  941.10672081) and (157.91306272,  936.49872092) .. (152.73706285,  940.72538748)
+    .. controls (147.28239632,  945.18005404) and (145.86106302,  950.55472057) .. (144.49706305,  951.86005387)
+    .. controls (143.37972975,  952.92805385) and (141.25306314,  950.52005391) .. (139.24639652,  947.33205399)
+    .. controls (134.99706329,  940.58272082) and (127.31439682,  929.87605442) .. (121.49706363,  923.08272126)
+    .. controls (115.30639712,  915.85338811) and (111.05173056,  911.24938822) .. (109.11439727,  912.24938820)
+    .. controls (107.65439731,  913.00272151) and (116.65706375,  928.63472112) .. (123.88506357,  945.80405402)
+    .. controls (130.10106341,  960.57072032) and (135.21172995,  976.57605325) .. (134.44106331,  982.30405311)
+    .. controls (133.99572998,  985.60805303) and (131.79706337,  985.56138636) .. (129.92239675,  984.51471972)
+    .. controls (124.86506355,  981.68938646) and (118.97706369,  970.97472006) .. (114.49706380,  965.99872019)
+    .. controls (101.56239746,  951.63472055) and (100.63439748,  950.83205390) .. ( 87.21839782,  936.91605425)
+    .. controls ( 81.92773129,  931.42805438) and ( 71.99573153,  921.13738797) .. ( 69.28773160,  920.91605465)
+    .. controls ( 66.92506499,  920.72138798) and ( 66.88506499,  923.74938791) .. ( 64.83039838,  924.58272122)
+    .. controls ( 62.35306511,  925.58672120) and ( 60.49706515,  924.19338790) .. ( 57.99039855,  926.09872118)
+    .. controls ( 50.60506540,  931.71205438) and ( 62.66373177,  937.69338756) .. ( 66.88506499,  948.02672064)
+    .. controls ( 71.88239820,  960.25605366) and ( 73.33039817,  968.25205346) .. ( 73.83039815,  974.16538665)
+    .. controls ( 74.15306481,  977.99338655) and ( 72.20506486,  978.25605321) .. ( 70.41306491,  978.12405322)}
+\def\fdulogo at motto@wen{%
+  (113.88533049,  800.33232433)
+    .. controls (113.88533049,  792.49899119) and (103.44133075,  785.91499135) .. ( 93.77466432,  787.69365798)
+    .. controls ( 91.97599770,  788.02432464) and ( 91.99599770,  790.54032457) .. ( 92.36799769,  792.02699120)
+    .. controls ( 93.00133101,  794.55499114) and ( 94.03866432,  794.79099113) .. ( 94.21866431,  797.41499107)
+    .. controls ( 94.41999764,  800.34565766) and ( 90.55199774,  798.87365770) .. ( 90.55199774,  802.45765761)
+    .. controls ( 90.55199774,  807.73499081) and ( 91.41999771,  813.70699066) .. ( 93.82799765,  814.61899064)
+    .. controls ( 95.18533095,  815.13232396) and ( 99.94266417,  810.02832409) .. (104.23466406,  809.80299076)
+    .. controls (109.99599725,  809.49899077) and (113.88533049,  808.05499080) .. (113.88533049,  800.33232433)
+  ( 68.24639829,  746.24899235)
+    .. controls ( 76.02373143,  746.24899235) and ( 76.30906476,  717.77832639) .. ( 76.32906476,  695.74899361)
+    .. controls ( 76.34639809,  678.91566070) and ( 73.70373149,  668.63299429) .. ( 68.82639828,  668.61832762)
+    .. controls ( 65.44106503,  668.60899429) and ( 58.49173187,  673.23166084) .. ( 57.54506523,  683.24899392)
+    .. controls ( 55.93039860,  700.35032683) and ( 58.49706520,  720.08232633) .. ( 62.50239844,  732.20499270)
+    .. controls ( 63.84106507,  736.25832593) and ( 65.57973169,  746.24899235) .. ( 68.24639829,  746.24899235)
+  (117.19559707,  733.34792600)
+    .. controls (114.83026380,  735.24925929) and ( 94.68759763,  733.44392600) .. ( 94.49693097,  732.49859269)
+    .. controls ( 93.99693098,  730.02659275) and ( 98.73693086,  730.33459274) .. ( 99.60759751,  726.35992618)
+    .. controls (100.98626414,  720.06125967) and (103.24626409,  712.70792652) .. (105.56093069,  712.68259319)
+    .. controls (106.91293066,  712.66792652) and (110.07293058,  717.64525973) .. (112.74626385,  722.74925960)
+    .. controls (115.32226378,  727.66792614) and (118.09959705,  732.62125935) .. (117.19559707,  733.34792600)
+  (125.07959687,  717.74925973)
+    .. controls (125.16359687,  710.58259324) and (136.33026326,  717.41592640) .. (136.33026326,  709.91592659)
+    .. controls (136.33026326,  706.99859333) and (134.99692996,  703.58259341) .. (132.91293001,  703.16526009)
+    .. controls (128.86226345,  702.35592678) and (122.66493027,  701.93192679) .. (122.83026360,  700.99859348)
+    .. controls (123.33026358,  698.16526022) and (134.45826331,  690.91192706) .. (137.88492989,  690.69326040)
+    .. controls (139.35426318,  690.59992707) and (141.45292980,  694.44792697) .. (141.41292980,  701.24926014)
+    .. controls (141.33026313,  715.33192645) and (141.46226313,  737.09459258) .. (141.41292980,  747.83192564)
+    .. controls (141.33026313,  766.24925851) and (140.87559648,  775.70525828) .. (135.57959661,  774.99859163)
+    .. controls (130.28359674,  774.29192498) and (125.66359686,  768.83192512) .. (123.01693026,  763.93192524)
+    .. controls (119.17693035,  756.81859208) and (114.00093048,  755.98125877) .. (107.77559731,  760.51859199)
+    .. controls (103.80893074,  763.40925858) and ( 98.44093087,  763.85725857) .. ( 95.31426428,  763.30525859)
+    .. controls ( 91.04359772,  762.55192527) and ( 89.00626444,  756.68125875) .. ( 87.94093113,  755.30392545)
+    .. controls ( 85.66359786,  752.35992553) and ( 82.55159794,  750.35992558) .. ( 78.55159804,  751.41592555)
+    .. controls ( 74.74493146,  752.41992553) and ( 68.07959830,  757.89592539) .. ( 68.07959830,  764.08259190)
+    .. controls ( 68.07959830,  770.26925841) and ( 73.10359817,  771.43059172) .. ( 75.41826478,  770.34659174)
+    .. controls ( 78.83026470,  768.74925845) and ( 80.62226465,  763.49992525) .. ( 86.29693118,  765.48925853)
+    .. controls ( 89.41293110,  766.58259184) and ( 95.18626429,  773.48792500) .. (102.21826411,  775.08259163)
+    .. controls (106.99693066,  776.16525827) and (113.86626382,  773.31725834) .. (116.63959708,  776.18925826)
+    .. controls (122.11293028,  781.85592479) and (125.22626354,  780.03192484) .. (130.24626341,  783.74925808)
+    .. controls (133.91559665,  786.46659134) and (136.36892992,  790.42792458) .. (144.21826306,  790.47059124)
+    .. controls (150.91292956,  790.50792457) and (155.77292944,  786.62259134) .. (160.33026266,  779.80392484)
+    .. controls (164.95292921,  772.88792501) and (165.57559586,  766.17059185) .. (165.99692918,  757.80392539)
+    .. controls (166.52626250,  747.25325899) and (165.26626254,  744.26125906) .. (165.66359586,  734.41592598)
+    .. controls (166.04092918,  725.02125954) and (169.01826244,  708.54259329) .. (169.90626242,  696.58259359)
+    .. controls (171.03426239,  681.39592730) and (156.09159610,  668.34259429) .. (145.21826304,  666.42526101)
+    .. controls (136.66359658,  664.91592771) and (132.88493001,  670.47059424) .. (130.10759675,  675.24926079)
+    .. controls (123.69826357,  686.27192718) and (115.95026377,  694.92259363) .. (110.10759725,  698.24926021)
+    .. controls (106.83959733,  700.10926017) and (101.64359746,  698.15726022) .. ( 96.44093092,  699.02659353)
+    .. controls ( 89.31159777,  700.21726016) and ( 86.33293118,  709.19592661) .. ( 85.74626452,  719.16525969)
+    .. controls ( 85.49693120,  723.41592625) and ( 89.71026442,  729.00125944) .. ( 90.50226440,  730.49725941)
+    .. controls ( 91.91293104,  733.16525934) and ( 90.13959775,  736.64125925) .. ( 92.66359768,  738.58259254)
+    .. controls (100.24626416,  744.41592573) and (111.62759721,  747.60659231) .. (119.89826367,  748.24125896)
+    .. controls (123.97026357,  748.55325896) and (129.79693009,  746.79459233) .. (132.24626336,  743.41592575)
+    .. controls (134.66359663,  740.08259250) and (134.83026330,  735.58259261) .. (133.07559667,  730.62659274)
+    .. controls (131.31159672,  725.63992619) and (125.03826354,  721.36525964) .. (125.07959687,  717.74925973)}
+\def\fdulogo at motto@er at ii{%
+  (108.90466394,  536.58766425)
+    .. controls (109.87666392,  538.57566420) and (102.97266409,  537.08499758) .. ( 98.66333087,  536.37433093)
+    .. controls ( 94.84066430,  535.74366428) and ( 88.89133111,  534.12899765) .. ( 86.55266450,  538.04633088)
+    .. controls ( 84.44066456,  541.58233080) and ( 89.92999775,  547.88499731) .. ( 94.20733098,  550.49299724)
+    .. controls ( 99.89399750,  553.95833049) and (111.29533055,  558.12099705) .. (118.74599703,  558.49966371)
+    .. controls (125.64599686,  558.84899703) and (133.83799665,  551.11166389) .. (133.85132999,  544.52899739)
+    .. controls (133.85932999,  539.75166418) and (127.88866347,  534.22766431) .. (126.31133018,  532.76633102)
+    .. controls (121.78999696,  528.57966445) and ( 98.29533088,  509.82766492) .. ( 92.82999768,  505.85966502)
+    .. controls ( 88.25133113,  502.53566511) and ( 86.05133118,  503.03566509) .. ( 85.59266453,  503.66499841)
+    .. controls ( 85.02466454,  504.44366506) and ( 86.99666449,  508.74899828) .. ( 91.82999770,  514.91566480)
+    .. controls ( 98.69266420,  523.67166458) and (106.80599733,  532.29699770) .. (108.90466394,  536.58766425)
+  (133.85066332,  493.80459866)
+    .. controls (134.29466331,  488.91526545) and (146.75732966,  471.29926589) .. (155.10399612,  472.01393254)
+    .. controls (160.93732931,  472.51393252) and (165.88532919,  481.74859896) .. (167.66266248,  488.19393213)
+    .. controls (168.81732911,  492.37926536) and (169.31332910,  501.70726513) .. (168.63866245,  502.65793177)
+    .. controls (167.98799580,  503.57259841) and (159.59866268,  500.35793183) .. (151.99599620,  498.87393186)
+    .. controls (143.42132975,  497.20059857) and (133.68132999,  495.66459861) .. (133.85066332,  493.80459866)
+  (119.70533034,  486.04059885)
+    .. controls (118.57999704,  486.62459884) and (116.17199710,  486.29259885) .. (115.62133044,  485.54059886)
+    .. controls (115.16266379,  484.91526555) and (116.61999708,  465.61526603) .. (113.77733049,  461.77526612)
+    .. controls (110.88399723,  457.86993289) and (102.49199744,  457.94193289) .. ( 99.68399751,  460.35259949)
+    .. controls ( 96.45466426,  463.12459942) and ( 94.27733098,  467.76593264) .. ( 94.44133097,  472.47126586)
+    .. controls ( 94.62133097,  477.66593239) and ( 97.28666423,  483.17793226) .. ( 95.79999761,  484.01126557)
+    .. controls ( 94.97599763,  484.47393222) and ( 86.97466449,  480.91259898) .. ( 82.37199794,  480.20726566)
+    .. controls ( 75.94133143,  479.22059902) and ( 74.85066480,  485.58193220) .. ( 73.28799817,  485.33259887)
+    .. controls ( 70.95599823,  484.95926555) and ( 72.57999819,  474.64459914) .. ( 73.60799816,  468.02726597)
+    .. controls ( 74.32133148,  463.43126608) and ( 75.78533144,  458.58059954) .. ( 75.32933145,  455.63793294)
+    .. controls ( 74.49599814,  450.24859975) and ( 71.07999822,  448.08193313) .. ( 66.74399833,  447.52726648)
+    .. controls ( 62.58933177,  446.99659983) and ( 58.03866522,  450.99926639) .. ( 55.91333194,  456.29126626)
+    .. controls ( 54.88399863,  458.85259953) and ( 53.27866533,  461.95393279) .. ( 53.38933200,  475.23793245)
+    .. controls ( 53.47866533,  485.96859885) and ( 56.64133192,  504.78593172) .. ( 61.67199846,  508.24993163)
+    .. controls ( 67.35733165,  512.16326487) and ( 70.84266490,  506.77793167) .. ( 71.96133153,  503.75393174)
+    .. controls ( 73.07999817,  500.72993182) and ( 71.44799821,  494.38059864) .. ( 73.20533150,  493.24859867)
+    .. controls ( 74.21866481,  492.59659869) and ( 85.44933120,  497.09259858) .. ( 99.66266418,  500.83259848)
+    .. controls (114.55199714,  504.74859838) and (131.64933004,  508.53526496) .. (143.95466307,  510.95793156)
+    .. controls (156.87199608,  513.49926483) and (174.41332897,  516.70726475) .. (181.47199546,  514.83393147)
+    .. controls (187.07332866,  513.34859817) and (191.83332854,  505.08059838) .. (193.02266184,  499.35526519)
+    .. controls (194.44132847,  492.52726536) and (194.20799514,  479.94593234) .. (188.99599528,  470.13793258)
+    .. controls (185.57732869,  463.70459941) and (180.38532882,  460.47126616) .. (173.56799566,  457.37926623)
+    .. controls (169.12932911,  455.36726629) and (158.60132937,  452.72859968) .. (153.71866282,  453.13793301)
+    .. controls (145.77466302,  453.80459966) and (142.66399643,  465.36459937) .. (139.82932984,  465.58193270)
+    .. controls (136.21866326,  465.86059936) and (133.63332999,  458.01526622) .. (130.27466341,  452.41526636)
+    .. controls (127.86533014,  448.40059979) and (124.58533022,  445.84059986) .. (123.16266359,  446.02726652)
+    .. controls (120.82933031,  446.33259984) and (121.47333030,  457.59259956) .. (121.60799696,  467.80459931)
+    .. controls (121.71866362,  476.24859910) and (120.89599698,  485.42326553) .. (119.70533034,  486.04059885)}
+\def\fdulogo at motto@jin{%
+  (147.52999631,  311.63046988)
+    .. controls (148.58999629,  309.42913660) and (152.49666285,  307.13846999) .. (155.99532943,  297.70780356)
+    .. controls (158.12599605,  291.96247037) and (159.99666267,  280.74913732) .. (159.64332934,  273.74780416)
+    .. controls (159.23266269,  265.59180436) and (157.10066274,  260.92113781) .. (154.41532947,  257.01847124)
+    .. controls (150.25666291,  250.97713806) and (146.14599635,  247.36913815) .. (147.32999632,  247.08247149)
+    .. controls (150.07932958,  246.41580484) and (181.78199546,  246.25847151) .. (191.17132855,  248.63447145)
+    .. controls (201.71799496,  251.30513805) and (223.91666107,  249.58647143) .. (224.21799439,  243.24913825)
+    .. controls (224.52066105,  236.91180508) and (214.10332798,  233.82647182) .. (202.32999494,  231.99847187)
+    .. controls (191.77399521,  230.35980524) and (153.31132950,  227.27047199) .. (134.81932996,  228.33180529)
+    .. controls (111.10733056,  229.69313859) and ( 94.27533098,  234.98247179) .. ( 80.55133132,  240.13847167)
+    .. controls ( 70.49666490,  243.91580490) and ( 62.00199845,  249.09180478) .. ( 55.44066528,  249.69313809)
+    .. controls ( 50.32866541,  250.16247142) and ( 46.21799884,  248.13847147) .. ( 42.82999893,  244.69313822)
+    .. controls ( 39.36333235,  241.17047164) and ( 34.71799913,  241.69313829) .. ( 32.66333252,  244.24913823)
+    .. controls ( 31.71666587,  245.42647153) and ( 29.24599927,  249.70780476) .. ( 31.59799921,  254.44247131)
+    .. controls ( 33.57133249,  258.41313788) and ( 37.53133240,  261.19180447) .. ( 41.82999895,  262.62380444)
+    .. controls ( 47.16333215,  264.40113773) and ( 54.84866530,  263.66647108) .. ( 54.91266529,  265.66513769)
+    .. controls ( 55.03799862,  269.54113760) and ( 50.16333208,  275.91580410) .. ( 47.32999882,  284.91580388)
+    .. controls ( 45.24466554,  291.53713705) and ( 44.63399888,  303.49313675) .. ( 44.74599888,  312.16513653)
+    .. controls ( 44.79666555,  316.04113643) and ( 45.49933220,  319.51446968) .. ( 45.44066553,  322.30513628)
+    .. controls ( 45.32999887,  327.63846948) and ( 43.71533224,  330.87180273) .. ( 43.77133224,  334.48246931)
+    .. controls ( 43.83799890,  338.86646920) and ( 44.82733221,  343.80513574) .. ( 48.99666544,  343.91580240)
+    .. controls ( 55.24599862,  344.08246907) and ( 57.56066523,  337.90380256) .. ( 58.24599854,  331.83180271)
+    .. controls ( 58.82999853,  326.66513617) and ( 56.79799858,  319.75846968) .. ( 56.75133191,  314.24913648)
+    .. controls ( 56.66333192,  303.58247008) and ( 59.79266517,  301.92113679) .. ( 63.00733176,  295.52513695)
+    .. controls ( 66.16333168,  289.24913710) and ( 66.24466501,  276.24913743) .. ( 66.24466501,  265.97180435)
+    .. controls ( 66.24466501,  262.88780443) and ( 71.16733155,  260.61713782) .. ( 78.21799804,  257.80513789)
+    .. controls ( 84.61666455,  255.25180462) and ( 92.80599768,  252.25713803) .. (100.57933082,  250.49847141)
+    .. controls (110.16333058,  248.33180479) and (137.50332990,  246.89447150) .. (138.89132986,  247.36647149)
+    .. controls (141.16332980,  248.13847147) and (137.05132991,  250.52647141) .. (136.85932991,  256.47047126)
+    .. controls (136.64999658,  262.92113776) and (136.15666326,  308.45713662) .. (135.71532994,  308.55313662)
+    .. controls (132.49666335,  309.24913660) and (118.69266370,  301.95047012) .. (118.55133037,  293.58247033)
+    .. controls (118.41266371,  285.33180387) and (116.57933042,  277.41580407) .. (112.66466385,  268.59847095)
+    .. controls (109.55666393,  261.59980446) and (104.05666407,  254.43580464) .. ( 99.10999752,  255.39847128)
+    .. controls ( 93.57799766,  256.47447126) and ( 89.94599775,  263.78247107) .. ( 89.47133110,  271.23847089)
+    .. controls ( 88.99666444,  278.69313737) and ( 91.36733105,  295.31580362) .. ( 94.57799764,  309.33313660)
+    .. controls ( 97.74599756,  323.16513626) and (104.65399738,  336.30380260) .. (107.88466397,  341.63846913)
+    .. controls (109.72599726,  344.67713572) and (112.85266385,  350.43046891) .. (116.38466376,  358.30513538)
+    .. controls (118.76999703,  363.61980191) and (119.21799702,  369.63846843) .. (123.07933026,  370.91580173)
+    .. controls (127.88866347,  372.50646836) and (130.19533008,  369.12780177) .. (133.12199667,  368.58246845)
+    .. controls (135.57932994,  368.12380180) and (138.91266319,  368.54113512) .. (141.18599647,  367.05313516)
+    .. controls (142.73132977,  366.04246852) and (143.94066307,  364.24913523) .. (143.85399640,  359.57980201)
+    .. controls (143.76199641,  354.61713547) and (140.43399649,  350.66780224) .. (135.32999662,  347.63846898)
+    .. controls (130.22599674,  344.60780239) and (118.23266371,  338.83313587) .. (116.71799708,  335.08246929)
+    .. controls (116.09933043,  333.54780266) and (116.42466376,  327.45046948) .. (116.66333042,  321.74913629)
+    .. controls (116.91666374,  315.68780311) and (117.13933040,  310.05313658) .. (118.41266371,  310.08246992)
+    .. controls (119.71799701,  310.11180325) and (125.09799687,  319.04113636) .. (132.78866335,  324.87446955)
+    .. controls (138.17266321,  328.95846945) and (144.78466305,  331.71446938) .. (149.10732961,  333.74913599)
+    .. controls (154.41799614,  336.24913593) and (162.34866261,  337.07046924) .. (165.78866252,  335.24913595)
+    .. controls (170.03799575,  332.99846934) and (172.99666234,  329.83180276) .. (173.16332900,  325.99846952)
+    .. controls (173.30732900,  322.66780294) and (172.03799570,  320.29046966) .. (169.21799577,  317.74913639)
+    .. controls (166.46066251,  315.26246979) and (162.63532927,  314.11046982) .. (158.74599603,  313.88780316)
+    .. controls (153.96466282,  313.61446983) and (146.78332966,  313.18246984) .. (147.52999631,  311.63046988)}
+\def\fdulogo at motto@si{%
+  (106.49093067,  108.99527494)
+    .. controls (107.99626397,  108.66594162) and (109.39359727,  109.32060827) .. (110.41359724,  111.66594154)
+    .. controls (112.08026386,  115.49927478) and (112.58026385,  120.99927464) .. (111.08026389,  121.66594129)
+    .. controls (109.64693059,  122.30327461) and (104.98826404,  120.65127465) .. (104.03359740,  120.00460800)
+    .. controls (102.34959744,  118.86460803) and (105.34026403,  109.24727494) .. (106.49093067,  108.99527494)
+  ( 93.55226433,   38.30461004)
+    .. controls ( 91.74159771,   33.33527684) and ( 87.66293114,   27.77527697) .. ( 79.82959800,   27.80461031)
+    .. controls ( 74.49759814,   27.82461031) and ( 71.40826488,   31.66327688) .. ( 69.12159827,   36.40061009)
+    .. controls ( 66.58026500,   41.66594329) and ( 68.38293162,   53.36727634) .. ( 71.54026488,   59.73527618)
+    .. controls ( 76.03759810,   68.80594262) and ( 85.36026453,   77.49794240) .. ( 85.16693120,   78.80327570)
+    .. controls ( 84.83893121,   81.01527564) and ( 79.32959802,   82.33260894) .. ( 78.16293138,   86.70727550)
+    .. controls ( 76.04826477,   94.63794197) and ( 89.88559775,   94.02727532) .. ( 90.00826442,   96.90727525)
+    .. controls ( 90.17359775,  100.80327515) and ( 80.55226465,  107.13794166) .. ( 80.24693133,  118.99927469)
+    .. controls ( 79.98826467,  129.03394111) and ( 82.75626460,  143.82727407) .. ( 85.77359786,  144.24860740)
+    .. controls ( 87.65226448,  144.51127406) and ( 98.21893088,  128.58194112) .. (101.22559747,  129.59527443)
+    .. controls (103.59626408,  130.39260774) and (107.60693064,  133.24860767) .. (109.16293060,  135.36060762)
+    .. controls (110.87093056,  137.67660756) and (111.02693056,  140.45927416) .. (111.60693054,  143.52727408)
+    .. controls (112.38559719,  147.63794064) and (119.11893036,  149.52327393) .. (121.90026362,  148.91527395)
+    .. controls (125.71893019,  148.08194063) and (128.20959679,  143.25127409) .. (129.77359676,  141.63794079)
+    .. controls (131.55226338,  139.80460751) and (134.96692996,  139.03794086) .. (134.98426329,  134.57794097)
+    .. controls (134.99626329,  131.19394106) and (132.67226335,  130.15794108) .. (131.78826337,  128.12460780)
+    .. controls (130.95493006,  126.20727451) and (130.85093006,  124.21527456) .. (130.12159675,  122.58194127)
+    .. controls (128.01093013,  117.86060806) and (125.46959686,  112.70860818) .. (126.91359683,  112.66594152)
+    .. controls (129.74693009,  112.58194152) and (135.20426329,  125.02727454) .. (142.32959644,  136.91527425)
+    .. controls (148.52026295,  147.24194065) and (151.95492953,  152.08194053) .. (151.95492953,  155.20727379)
+    .. controls (151.95492953,  157.78460706) and (139.55226318,  156.80460708) .. (128.66293012,  155.97127377)
+    .. controls (120.72559698,  155.36327379) and (105.30026403,  154.68727380) .. (105.06293071,  155.59527378)
+    .. controls (104.41359739,  158.08194038) and (107.78293064,  163.07260693) .. (118.44026371,  166.24860685)
+    .. controls (123.65626358,  167.80327347) and (143.06559642,  168.37794013) .. (152.58026285,  165.99927352)
+    .. controls (160.91359598,  163.91527357) and (172.26826236,  150.59127390) .. (174.74692896,  146.41527401)
+    .. controls (176.73626225,  143.06327409) and (175.10692896,  138.36060754) .. (171.26426239,  131.99527437)
+    .. controls (168.19492913,  126.91260783) and (160.09092933,  118.71260803) .. (153.99626282,  111.69394154)
+    .. controls (150.84292956,  108.06194163) and (148.52026295,  103.64327508) .. (146.05226302,  100.86060848)
+    .. controls (142.99626309,   97.41527523) and (132.12159670,   94.86060863) .. (124.58026355,   92.99927534)
+    .. controls (118.95359703,   91.60994205) and (106.72959733,   87.84860881) .. (103.41359741,   86.33260884)
+    .. controls (101.65893079,   85.52994220) and ( 98.92026419,   81.12727564) .. ( 98.98426419,   76.91394241)
+    .. controls ( 99.10693086,   68.86060928) and ( 98.60693087,   63.08194276) .. ( 97.66293089,   55.83260961)
+    .. controls ( 96.79493091,   49.16860977) and ( 96.03493093,   45.12060987) .. ( 93.55226433,   38.30461004)
+  (100.89439748,   57.58234290)
+    .. controls (101.56773079,   59.78367617) and (110.22639724,   56.74234292) .. (114.57306380,   54.50500964)
+    .. controls (123.16373025,   50.08234308) and (132.66373002,   41.41567663) .. (140.20506316,   39.04101003)
+    .. controls (143.06772976,   38.13967672) and (158.71839603,   37.29034340) .. (158.83039603,   39.58234335)
+    .. controls (158.94639603,   41.98367662) and (148.73839628,   46.95167650) .. (144.33039639,   50.74900973)
+    .. controls (140.16906316,   54.33167631) and (130.74639673,   62.99834276) .. (132.24106336,   65.39700937)
+    .. controls (133.55972999,   67.51167598) and (143.95706307,   62.07167612) .. (149.83039625,   60.49967616)
+    .. controls (154.49706280,   59.24900952) and (163.29172925,   58.37167621) .. (171.74639571,   56.66634292)
+    .. controls (181.79706212,   54.63834297) and (192.89039518,   51.46900972) .. (199.00639502,   48.75967645)
+    .. controls (206.71039483,   45.34634320) and (207.40239481,   43.34900992) .. (202.28639494,   37.40901007)
+    .. controls (197.58372839,   31.94767687) and (190.61039523,   25.90234369) .. (183.41306208,   23.33301042)
+    .. controls (169.41306243,   18.33301054) and (150.69039623,   18.54634387) .. (136.69706325,   20.04767717)
+    .. controls (120.84639698,   21.74634379) and (113.83039715,   31.41567688) .. (110.24639724,   37.24901007)
+    .. controls (107.79973064,   41.23167664) and (104.83573071,   49.55034310) .. (103.57973074,   52.16634303)
+    .. controls (102.32373078,   54.78234297) and (100.67573082,   56.86634291) .. (100.89439748,   57.58234290)
+  (128.04773013,   74.22207581)
+    .. controls (126.84373016,   74.84474246) and (132.99706334,   84.33274223) .. (142.83039643,   90.16607542)
+    .. controls (150.18506291,   94.52874197) and (161.83039595,   99.36074185) .. (170.55172907,   99.36074185)
+    .. controls (176.49706225,   99.36074185) and (181.49706213,   96.74874192) .. (184.56239539,   93.83274199)
+    .. controls (187.18772865,   91.33540872) and (188.57306195,   88.19274213) .. (188.28106196,   83.24874225)
+    .. controls (187.99706197,   78.41540904) and (183.91306207,   75.57407578) .. (178.07572888,   75.45407578)
+    .. controls (163.99706257,   75.16607579) and (146.80906300,   79.21140902) .. (141.89306312,   79.04474236)
+    .. controls (135.37706328,   78.82340903) and (130.41306341,   72.99940918) .. (128.04773013,   74.22207581)}
+\endinput
+%%
+%% End of file `fdulogo.sty'.


Property changes on: trunk/Master/texmf-dist/tex/latex/fduthesis/fdulogo.sty
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/fduthesis/fduthesis-en.cls
===================================================================
--- trunk/Master/texmf-dist/tex/latex/fduthesis/fduthesis-en.cls	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/fduthesis/fduthesis-en.cls	2018-04-09 21:17:26 UTC (rev 47408)
@@ -0,0 +1,1474 @@
+%%
+%% This is file `fduthesis-en.cls',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% fduthesis.dtx  (with options: `class-en')
+%% 
+%%     Copyright (C) 2017, 2018 by Xiangdong Zeng <xdzeng96 at gmail.com>
+%% 
+%%     This work may be distributed and/or modified under the
+%%     conditions of the LaTeX Project Public License, either
+%%     version 1.3c of this license or (at your option) any later
+%%     version. The latest version of this license is in:
+%% 
+%%       http://www.latex-project.org/lppl.txt
+%% 
+%%     and version 1.3 or later is part of all distributions of
+%%     LaTeX version 2005/12/01 or later.
+%% 
+%%     This work has the LPPL maintenance status `maintained'.
+%% 
+%%     The Current Maintainer of this work is Xiangdong Zeng.
+%% 
+%%     This work consists of the files fduthesis.dtx,
+%%                                     fduthesis-doc.dtx,
+%%                                     fduthesis-logo.dtx,
+%%                                     fduthesis-template.tex,
+%%               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,
+%%                                     fduthesis.pdf,
+%%                                     fduthesis-en.pdf,
+%%                                     fduthesis-code.pdf,
+%%                                     latexmkrc,
+%%                                     latexmkrc-en,
+%%                                 and README.md.
+%% 
+\NeedsTeXFormat{LaTeX2e}
+\RequirePackage{expl3}
+\GetIdInfo $Id: fduthesis.dtx 0.7a 2018-04-09 12:00:00Z Xiangdong Zeng <xdzeng96 at gmail.com> $
+  {Thesis template for Fudan University (English version)}
+\ProvidesExplClass{\ExplFileName-en}
+  {\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription}
+\RequirePackage { xparse, xtemplate, l3keys2e }
+\clist_map_inline:nn { expl3, xparse, xtemplate, l3keys2e }
+  {
+    \@ifpackagelater {#1} { 2017/12/16 }
+      { } { \msg_error:nnn { fduthesis } { l3-too-old } {#1} }
+  }
+\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.
+  }
+\sys_if_engine_xetex:F
+  {
+    \sys_if_engine_luatex:F
+      {
+        \msg_fatal:nnx { fduthesis } { unsupported-engine }
+          { \c_sys_engine_str }
+      }
+  }
+\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".
+  }
+\box_new:N   \l__fdu_tmpa_box
+\clist_new:N \l__fdu_tmpa_clist
+\clist_new:N \l__fdu_tmpb_clist
+\dim_new:N   \l__fdu_tmpa_dim
+\dim_new:N   \l__fdu_tmpb_dim
+\skip_new:N  \l__fdu_tmpa_skip
+\tl_new:N    \l__fdu_tmpa_tl
+\tl_new:N    \l__fdu_tmpb_tl
+\int_new:N \g__fdu_thesis_type_int
+\clist_new:N \g__fdu_to_ctexbook_clist
+\clist_new:N \g__fdu_to_hyperref_clist
+\bool_new:N \g__fdu_twoside_bool
+\bool_set_true:N \g__fdu_twoside_bool
+\bool_new:N \g__fdu_draft_bool
+\tl_new:N \g__fdu_config_tl
+\cs_generate_variant:Nn \cs_generate_variant:Nn { cn }
+\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 \tl_map_inline:nn       { xn }
+\prg_generate_conditional_variant:Nnn \tl_if_eq:nn { Vn } { T, TF }
+\cs_new:Npn \__fdu_quad:  { \skip_horizontal:n { 1 em } }
+\cs_new:Npn \__fdu_qquad: { \skip_horizontal:n { 2 em } }
+\cs_new_protected:Npn \__fdu_vspace:N #1
+  {
+    \dim_set_eq:NN \l__fdu_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__fdu_tmpa_dim
+  }
+\cs_new_protected:Npn \__fdu_vspace:n #1
+  {
+    \skip_set:Nn \l__fdu_tmpa_skip {#1}
+    \__fdu_vspace:N \l__fdu_tmpa_skip
+  }
+\cs_generate_variant:Nn \__fdu_vspace:N { c }
+\cs_new:Npn \__fdu_symbol:n #1 { \tex_char:D #1 \scan_stop: }
+\cs_new:Npn \__fdu_arabic:n #1
+  { \int_to_arabic:v { c@ #1 } }
+\cs_new_protected:Npn \__fdu_patch_cmd:Nnn #1#2#3
+  {
+    \ctex_patch_cmd_once:NnnnTF #1 { } {#2} {#3}
+      { } { \ctex_patch_failure:N #1 }
+  }
+\cs_new_protected:Npn \__fdu_appto_cmd:Nn #1#2
+  {
+    \ctex_appto_cmd:NnnTF #1 { } {#2}
+      { } { \ctex_patch_failure:N #1 }
+  }
+\cs_new_protected:Npn \__fdu_define_fn_style:nn #1#2
+  { \tl_const:cn { c__fdu_fn_style_ #1 _tl } {#2} }
+\cs_new_protected:Npn \__fdu_define_punct:nn #1#2
+  { \tl_const:cn { c__fdu_ #1 _tl } { \__fdu_symbol:n {#2} } }
+\cs_new_protected:Npn \__fdu_define_name:nn #1#2
+  { \tl_const:cn { c__fdu_name_ #1 _tl } {#2} }
+\cs_new_protected:Npn \__fdu_define_name:nnn #1#2#3
+  {
+    \tl_const:cn { c__fdu_name_ #1    _tl } {#2}
+    \tl_const:cn { c__fdu_name_ #1 _en_tl } {#3}
+  }
+\cs_new:Npn \__fdu_msg_new:nn  { \msg_new:nnn      { fduthesis } }
+\cs_new:Npn \__fdu_error:n     { \msg_error:nn     { fduthesis } }
+\cs_new:Npn \__fdu_error:nn    { \msg_error:nnn    { fduthesis } }
+\cs_new:Npn \__fdu_error:nx    { \msg_error:nnx    { fduthesis } }
+\cs_new:Npn \__fdu_error:nnn   { \msg_error:nnnn   { fduthesis } }
+\cs_new:Npn \__fdu_warning:n   { \msg_warning:nn   { fduthesis } }
+\cs_new:Npn \__fdu_warning:nn  { \msg_warning:nnn  { fduthesis } }
+\cs_new:Npn \__fdu_warning:nxx { \msg_warning:nnxx { fduthesis } }
+\cs_new:Npn \__fdu_info:nx     { \msg_info:nnx     { fduthesis } }
+\keys_define:nn { fdu / option }
+  {
+    type .choice:,
+    type .value_required:n = true,
+    type .choices:nn =
+      { doctor, master, bachelor }
+      { \int_set_eq:NN \g__fdu_thesis_type_int \l_keys_choice_int },
+    type .initial:n = bachelor,
+    oneside .value_forbidden:n = true,
+    twoside .value_forbidden:n = true,
+    oneside .code:n =
+      {
+        \clist_gput_right:Nn \g__fdu_to_ctexbook_clist { oneside }
+        \bool_set_false:N    \g__fdu_twoside_bool
+      },
+    twoside .code:n =
+      {
+        \clist_gput_right:Nn \g__fdu_to_ctexbook_clist { twoside }
+        \bool_set_true:N     \g__fdu_twoside_bool
+      },
+    draft .choice:,
+    draft / true  .code:n =
+      {
+        \bool_set_true:N     \g__fdu_draft_bool
+        \clist_gput_right:Nn \g__fdu_to_ctexbook_clist { draft }
+      },
+    draft / false .code:n =
+      { \bool_set_false:N    \g__fdu_draft_bool },
+    draft .default:n = true,
+    draft .initial:n = false,
+    config .tl_set:N = \g__fdu_config_tl,
+    unknown .code:n = { \__fdu_error:n { unknown-option } }
+  }
+\__fdu_msg_new:nn { unknown-option }
+  { Class~ option~ "\l_keys_key_tl"~ is~ unknown. }
+\ProcessKeysOptions { fdu / option }
+\file_input:n { fduthesis.def }
+\tl_if_empty:NF \g__fdu_config_tl
+  {
+    \file_input:V \g__fdu_config_tl
+    \__fdu_info:nx { load-config-file } { \g__fdu_config_tl }
+  }
+\__fdu_msg_new:nn { load-config-file }
+  { You~ are~ loading~ config~ file~ '#1'. }
+\PassOptionsToClass
+  {
+    UTF8,
+    scheme     = plain,
+    heading    = true,
+    fontset    = fandol,
+    zihao      = -4,
+    \g__fdu_to_ctexbook_clist
+  }
+  { ctexbook }
+\clist_map_inline:nn
+  {
+    { no-math           } { fontspec },
+    { perpage           } { footmisc },
+    { amsmath, thmmarks } { ntheorem }
+  }
+  { \PassOptionsToPackage #1 }
+\RequirePackage { etoolbox }
+\LoadClass { ctexbook }
+\RequirePackage
+  {
+    amsmath,
+    unicode-math,
+    geometry,
+    fancyhdr,
+    footmisc,
+    ntheorem,
+    graphicx,
+    longtable,
+    caption,
+    xcolor
+  }
+\cs_new_protected:Npn \__fdu_check_package:nnn #1#2#3
+  {
+    \@ifpackagelater {#1} {#2}
+      { } { \__fdu_error:nnn { package-too-old } {#1} {#3} }
+  }
+\__fdu_msg_new:nn { package-too-old }
+  {
+    Package~ "#1"~ is~ too~ old. \\
+    The~ fduthesis~ class~ only~ supports~ "#1"~ with~ a~ version \\
+    higher~ than~ v#2. \\\\
+    Please~ update~ an~ up-to-date~ version~ of~ it~ using~ your \\
+    TeX~ package~ manager~ or~ from~ CTAN.
+  }
+\__fdu_check_package:nnn { ctex         } { 2017/08/07 } { 2.4.10 }
+\__fdu_check_package:nnn { fontspec     } { 2017/09/22 } { 2.6e   }
+\__fdu_check_package:nnn { unicode-math } { 2017/11/18 } { 0.8i   }
+\sys_if_engine_xetex:T
+  { \__fdu_check_package:nnn { xeCJK } { 2017/08/07 } { 3.5.0 } }
+\geometry
+  {
+    paper      = a4paper,
+    vmargin    = 2.54 cm,
+    hmargin    = 3.18 cm,
+    headheight = 15 pt
+  }
+\bool_if:NT \g__fdu_draft_bool { \geometry { showframe } }
+\prop_new:N \g__fdu_font_name_prop
+\prop_new:N \g__fdu_font_options_prop
+\prop_new:N \g__fdu_cjk_font_name_prop
+\prop_new:N \g__fdu_cjk_font_options_prop
+\keys_define:nn { fdu / style }
+  {
+    font .choice:,
+    font .value_required:n = true,
+    font / libertinus .code:n =
+      {
+        \fdu_choose_font:nn { main } { Libertinus~ Serif }
+        \fdu_choose_font:nn { sans } { Libertinus~ Sans  }
+        \fdu_choose_font_with_option:nnn { mono }
+          { TeX~ Gyre~ Cursor } { Ligatures = Common Off }
+        \fdu_choose_font:nn { math } { Libertinus~ Math  }
+        \keys_set:nn { fdu / style } { footnote-style = libertinus }
+      },
+    font / lm .code:n =
+      {
+        \fdu_choose_font:nn { main } { Latin~ Modern~ Roman }
+        \fdu_choose_font:nn { sans } { Latin~ Modern~ Sans  }
+        \fdu_choose_font:nn { mono } { Latin~ Modern~ Mono  }
+        \fdu_choose_font:nn { math } { Latin~ Modern~ Math  }
+        \keys_set:nn { fdu / style } { footnote-style = pifont }
+      },
+    font / palatino .code:n =
+      {
+        \fdu_choose_font:nn { main } { TeX~ Gyre~ Pagella }
+        \fdu_choose_font:nn { sans } { TeX~ Gyre~ Heros   }
+        \fdu_choose_font_with_option:nnn { mono }
+          { TeX~ Gyre~ Cursor } { Ligatures = Common Off }
+        \fdu_choose_font:nn { math } { TeX~ Gyre~ Pagella~ Math }
+        \keys_set:nn { fdu / style } { footnote-style = pifont }
+      },
+    font / times .code:n =
+      {
+        \fdu_choose_font_with_option:nnn { main } { XITS }
+          {
+            UprightFeatures    = { SmallCapsFont = *               },
+            BoldFeatures       = { SmallCapsFont = *~ Bold         },
+            ItalicFeatures     = { SmallCapsFont = *~ Italic       },
+            BoldItalicFeatures = { SmallCapsFont = *~ Bold~ Italic },
+          }
+        \fdu_choose_font:nn { sans } { TeX~ Gyre~ Heros  }
+        \fdu_choose_font_with_option:nnn { mono }
+          { TeX~ Gyre~ Cursor } { Ligatures = Common Off }
+        \fdu_choose_font:nn { math } { XITS~ Math        }
+        \keys_set:nn { fdu / style } { footnote-style = xits }
+      },
+    font / none .code:n =
+      {
+        \__fdu_initialize_prop:Nn \g__fdu_font_name_prop
+          { main, sans, mono, math }
+        \__fdu_initialize_prop:Nn \g__fdu_font_options_prop
+          { main, sans, mono, math }
+        \keys_set:nn { fdu / style } { footnote-style = plain }
+      }
+  }
+\cs_new_protected:Npn \__fdu_initialize_prop:Nn #1#2
+  {
+    \prop_gclear:N #1
+    \clist_map_inline:nn {#2} { \prop_gput:Nnn #1 {##1} { } }
+  }
+\clist_map_inline:nn
+  { main, sans, mono, math }
+  {
+    \exp_args:Nc \RenewDocumentCommand { set #1 font } { O { } m O { } }
+      { \fdu_choose_font_with_option:nnn { #1 } {##2} { ##1, ##3 } }
+  }
+\cs_new_protected:Npn \fdu_choose_font_with_option:nnn #1#2#3
+  {
+    \prop_gput:Nnn \g__fdu_font_name_prop    {#1} {#2}
+    \prop_gput:Nnn \g__fdu_font_options_prop {#1} {#3}
+  }
+\cs_new_protected:Npn \fdu_choose_font:nn #1#2
+  {
+    \prop_gput:Nnn \g__fdu_font_name_prop    {#1} {#2}
+    \prop_gput:Nnn \g__fdu_font_options_prop {#1} {  }
+  }
+\cs_new_protected:Npn \fdu_choose_cjk_font_with_option:nnn #1#2#3
+  {
+    \prop_gput:Nnn \g__fdu_cjk_font_name_prop    {#1} {#2}
+    \prop_gput:Nnn \g__fdu_cjk_font_options_prop {#1} {#3}
+  }
+\cs_new_protected:Npn \fdu_choose_cjk_font:nn #1#2
+  {
+    \prop_gput:Nnn \g__fdu_cjk_font_name_prop    {#1} {#2}
+    \prop_gput:Nnn \g__fdu_cjk_font_options_prop {#1} {  }
+  }
+\cs_new_protected:Npn \__fdu_set_font:
+  {
+    \clist_map_inline:nn { main, sans, mono, math }
+      {
+        \prop_get:NnN \g__fdu_font_name_prop    {##1} \l__fdu_tmpa_tl
+        \prop_get:NnN \g__fdu_font_options_prop {##1} \l__fdu_tmpb_tl
+        \tl_if_empty:NT \l__fdu_tmpa_tl
+          { \__fdu_error:nn { font-not-defined } {##1} }
+        \use:c { __fdu_set_ ##1 _font:VV } \l__fdu_tmpa_tl \l__fdu_tmpb_tl
+      }
+  }
+\clist_map_inline:nn { main, sans, mono }
+  {
+    \cs_new_protected:cpx { __fdu_set_ #1 _font:nn } ##1 ##2
+      { \exp_not:c { __fontspec_main_set #1 font:nn } {##2} {##1} }
+  }
+\cs_new_protected:Npn \__fdu_set_math_font:nn #1#2
+  { \__um_setmathfont:nn {#2} {#1} }
+\clist_map_inline:nn { main, sans, mono, math }
+  { \cs_generate_variant:cn { __fdu_set_ #1 _font:nn } { VV } }
+\__fdu_msg_new:nn { font-not-defined }
+  {
+    \str_upper_case:f { \tl_head:n {#1} } \tl_tail:n {#1} ~
+    font~ is~ not~ defined. \\\\
+    You~ can~ set~ option~ "font"~ via~ "\string\fdusetup",~
+    or~ use~ command~ \\
+    "\string\set #1 font"~ to~ define~ new~ font~ families.
+  }
+\ctex_at_end_preamble:n
+  {
+    \__fdu_set_font:
+  }
+\keys_set:nn { unicode-math }
+  {
+    math-style = ISO,
+    bold-style = ISO,
+  }
+\keys_define:nn { fdu / style }
+  {
+    font-size .choice:,
+    font-size .value_required:n = true,
+    font-size / -4 .code:n = { },
+    font-size /  5 .code:n =
+      {
+        \RenewDocumentCommand \tiny         { } { \zihao {  7 } }
+        \RenewDocumentCommand \scriptsize   { } { \zihao { -6 } }
+        \RenewDocumentCommand \footnotesize { } { \zihao {  6 } }
+        \RenewDocumentCommand \small        { } { \zihao { -5 } }
+        \RenewDocumentCommand \normalsize   { } { \zihao {  5 } }
+        \RenewDocumentCommand \large        { } { \zihao { -4 } }
+        \RenewDocumentCommand \Large        { } { \zihao { -3 } }
+        \RenewDocumentCommand \LARGE        { } { \zihao { -2 } }
+        \RenewDocumentCommand \huge         { } { \zihao {  2 } }
+        \RenewDocumentCommand \Huge         { } { \zihao {  1 } }
+      }
+  }
+\keys_set:nn { ctex }
+  {
+    chapter =
+      {
+        format      = \centering,
+        nameformat  = \LARGE \bfseries,
+        titleformat = \huge \bfseries,
+        aftername   = \par \nobreak \vskip 10 pt,
+        beforeskip  = 50 pt,
+        afterskip   = 40 pt,
+        number      = \__fdu_arabic:n { chapter },
+        fixskip     = true
+      },
+    section =
+      {
+        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 =
+      {
+        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
+      }
+  }
+\fancyhf { }
+\tl_new:N \l__fdu_header_center_mark_tl
+\bool_if:NTF \g__fdu_twoside_bool
+  {
+    \fancyhead [ EL ] { \small \nouppercase { \itshape \leftmark  } }
+    \fancyhead [ OR ] { \small \nouppercase { \itshape \rightmark } }
+  }
+  {
+    \fancyhead [ L ] { \small \nouppercase { \itshape \leftmark  } }
+    \fancyhead [ R ] { \small \nouppercase { \itshape \rightmark } }
+    \fancyhead [ C ]
+      {
+        \small \nouppercase
+          { \itshape \l__fdu_header_center_mark_tl }
+      }
+  }
+\fancyfoot [ C ] { \small \thepage }
+\cs_new:Npn \fdu_front_matter_header:n #1
+  {
+    \bool_if:NTF \g__fdu_twoside_bool
+      { \markboth {#1} {#1} }
+      {
+        \markboth { } { }
+        \tl_gset:Nn \l__fdu_header_center_mark_tl {#1}
+      }
+  }
+\RenewDocumentCommand \cleardoublepage { }
+  {
+    \clearpage
+    \bool_if:NT \g__fdu_twoside_bool
+      {
+        \int_if_odd:nF \c at page
+          { \hbox:n { } \thispagestyle { empty } \newpage }
+      }
+    \tl_gset:Nn \l__fdu_header_center_mark_tl { }
+  }
+\pagestyle { fancy }
+\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*      }
+  }
+  { \__fdu_define_fn_style:nn #1 }
+\tl_new:N \l__fdu_fn_style_tl
+\keys_define:nn { fdu / style }
+  {
+    footnote-style .choices:nn =
+      {
+        plain,
+        libertinus, libertinus*, libertinus-sans,
+        pifont,     pifont*,     pifont-sans,     pifont-sans*,
+        xits,                    xits-sans,       xits-sans*
+      }
+      {
+        \tl_gset_eq:NN \l__fdu_fn_style_tl \l_keys_choice_tl
+        \int_compare:nT { 5 <= \l_keys_choice_int <= 8 }
+          { \RequirePackage { pifont } }
+      },
+    footnote-style .value_required:n = true
+  }
+\cs_new:Npn \__fdu_fn_symbol_libertinus:n #1
+  {
+    \int_compare:nTF { #1 >= 21 }
+      {
+        \int_compare:nTF { #1 >= 47 }
+          { \__fdu_symbol:n { \int_eval:n { "24B6 - 47 + #1 } } }
+          { \__fdu_symbol:n { \int_eval:n { "24D0 - 21 + #1 } } }
+      }
+      { \__fdu_symbol:n { \int_eval:n { "2460 - 1 + #1 } } }
+  }
+\cs_new:Npn \__fdu_fn_symbol_libertinus_neg:n #1
+  {
+    \int_compare:nTF { #1 >= 11 }
+      { \__fdu_symbol:n { \int_eval:n { "24EB - 11 + #1 } } }
+      { \__fdu_symbol:n { \int_eval:n { "2776 -  1 + #1 } } }
+  }
+\cs_new_eq:NN \__fdu_fn_symbol_libertinus_sans:n
+  \__fdu_fn_symbol_libertinus:n
+\cs_new:Npn \__fdu_fn_symbol_pifont:n #1
+  { \ding { \int_eval:n { 171 + #1 } } }
+\cs_new:Npn \__fdu_fn_symbol_pifont_neg:n #1
+  { \ding { \int_eval:n { 181 + #1 } } }
+\cs_new:Npn \__fdu_fn_symbol_pifont_sans:n #1
+  { \ding { \int_eval:n { 191 + #1 } } }
+\cs_new:Npn \__fdu_fn_symbol_pifont_sans_neg:n #1
+  { \ding { \int_eval:n { 201 + #1 } } }
+\cs_new:Npn \__fdu_fn_symbol_xits:n #1
+  {
+    \int_compare:nTF { #1 >= 10 }
+      {
+        \int_compare:nTF { #1 >= 36 }
+          { \__fdu_symbol:n { \int_eval:n { "24B6 - 36 + #1 } } }
+          { \__fdu_symbol:n { \int_eval:n { "24D0 - 10 + #1 } } }
+      }
+      { \__fdu_symbol:n { \int_eval:n { "2460 - 1 + #1 } } }
+  }
+\cs_new:Npn \__fdu_fn_symbol_xits_sans:n #1
+  { \__fdu_symbol:n { \int_eval:n { "2780 - 1 + #1 } } }
+\cs_new:Npn \__fdu_fn_symbol_xits_sans_neg:n #1
+  { \__fdu_symbol:n { \int_eval:n { "278A - 1 + #1 } } }
+\cs_set:Npn \thefootnote { \fdu_footnote_number:N \c at footnote }
+\cs_new:Npn \fdu_footnote_number:N #1
+  {
+    \tl_case:NnF \l__fdu_fn_style_tl
+      {
+        \c__fdu_fn_style_plain_tl
+          { \int_use:N #1 }
+        \c__fdu_fn_style_libertinus_tl
+          {
+            \fontspec { Libertinus~ Serif }
+            \__fdu_fn_symbol_libertinus:n {#1}
+          }
+        \c__fdu_fn_style_libertinus_neg_tl
+          {
+            \fontspec { Libertinus~ Serif }
+            \__fdu_fn_symbol_libertinus_neg:n {#1}
+          }
+        \c__fdu_fn_style_libertinus_sans_tl
+          {
+            \fontspec { Libertinus~ Sans }
+            \__fdu_fn_symbol_libertinus_sans:n {#1}
+          }
+        \c__fdu_fn_style_pifont_tl
+          { \__fdu_fn_symbol_pifont:n {#1} }
+        \c__fdu_fn_style_pifont_neg_tl
+          { \__fdu_fn_symbol_pifont_neg:n {#1} }
+        \c__fdu_fn_style_pifont_sans_tl
+          { \__fdu_fn_symbol_pifont_sans:n {#1} }
+        \c__fdu_fn_style_pifont_sans_neg_tl
+          { \__fdu_fn_symbol_pifont_sans_neg:n {#1} }
+        \c__fdu_fn_style_xits_tl
+          {
+            \fontspec { XITS }
+            \__fdu_fn_symbol_xits:n {#1}
+          }
+        \c__fdu_fn_style_xits_sans_tl
+          {
+            \fontspec { XITS }
+            \__fdu_fn_symbol_xits_sans:n {#1}
+          }
+        \c__fdu_fn_style_xits_sans_neg_tl
+          {
+            \fontspec { XITS }
+            \__fdu_fn_symbol_xits_sans_neg:n {#1}
+          }
+      }
+      { \int_use:N #1 }
+  }
+\cs_set:Npn \@makefntext #1
+  {
+    \mode_leave_vertical:
+    \hbox_to_wd:nn { 1.5 em } { \@thefnmark \hfil }
+    #1
+  }
+\clist_const:Nn \c__fdu_thm_style_plain_clist
+  { plain, margin, change }
+\clist_const:Nn \c__fdu_thm_style_break_clist
+  { break, marginbreak, changebreak }
+\tl_new:N \l__fdu_thm_style_tl
+\tl_new:N \l__fdu_thm_header_font_tl
+\tl_new:N \l__fdu_thm_body_font_tl
+\tl_new:N \l__fdu_thm_qed_tl
+\tl_new:N \l__fdu_thm_counter_tl
+\keys_define:nn { fdu / theorem }
+  {
+    style       .tl_set:N  = \l__fdu_thm_style_tl,
+    header-font .tl_set:N  = \l__fdu_thm_header_font_tl,
+    body-font   .tl_set:N  = \l__fdu_thm_body_font_tl,
+    qed         .tl_set:N  = \l__fdu_thm_qed_tl,
+    counter     .tl_set:N  = \l__fdu_thm_counter_tl
+  }
+\cs_new_eq:NN \__fdu_thm_ntheorem_style:n \theoremstyle
+\cs_new_eq:NN \__fdu_thm_ntheorem_new:w   \newtheorem
+\RenewDocumentCommand \newtheorem { s o m m }
+  {
+    \IfBooleanTF {#1}
+      { \tl_set:Nn \l__fdu_thm_qed_tl { \ensuremath { \QED } } }
+      { \tl_set:Nn \l__fdu_thm_qed_tl { } }
+    \tl_set:Nn \l__fdu_thm_style_tl { plain }
+    \IfValueT {#2} { \keys_set:nn { fdu / theorem } {#2} }
+    \fdu_thm_set_header_font:V \l__fdu_thm_header_font_tl
+    \fdu_thm_set_body_font:V   \l__fdu_thm_body_font_tl
+    \fdu_thm_set_qed:V         \l__fdu_thm_qed_tl
+    \IfBooleanTF {#1}
+      {
+        \clist_if_in:nVF { plain, break } \l__fdu_thm_style_tl
+          {
+            \clist_if_in:NVTF
+              \c__fdu_thm_style_plain_clist \l__fdu_thm_style_tl
+              { \__fdu_thm_redefine_style:n { plain } }
+              {
+                \clist_if_in:NVTF
+                  \c__fdu_thm_style_break_clist \l__fdu_thm_style_tl
+                  { \__fdu_thm_redefine_style:n { break } }
+                  {
+                    \__fdu_error:nx { unknown-theorem-style }
+                      { \l__fdu_thm_style_tl }
+                  }
+              }
+          }
+        \tl_put_left:Nn \l__fdu_thm_style_tl { nonumber }
+        \fdu_thm_new_no_number:Vxx \l__fdu_thm_style_tl {#3} {#4}
+      }
+      {
+        \clist_clear:N \l__fdu_tmpa_clist
+        \clist_concat:NNN \l__fdu_tmpa_clist
+          \c__fdu_thm_style_plain_clist \c__fdu_thm_style_break_clist
+        \clist_if_in:NVF \l__fdu_tmpa_clist \l__fdu_thm_style_tl
+          {
+            \__fdu_error:nx { unknown-theorem-style }
+              { \l__fdu_thm_style_tl }
+          }
+        \fdu_thm_new:VVxx \l__fdu_thm_style_tl \l__fdu_thm_counter_tl
+          {#3} {#4}
+      }
+  }
+\cs_new:Npn \__fdu_thm_redefine_style:n #1
+  {
+    \__fdu_warning:nxx { redefine-theorem-style }
+      {#1} { \l__fdu_thm_style_tl }
+    \tl_set:Nn \l__fdu_thm_style_tl {#1}
+  }
+\__fdu_msg_new:nn { redefine-theorem-style }
+  { Theorem~ style~ "#2"~ will~ be~ redefined~ as~ "#1". }
+\__fdu_msg_new:nn { unknown-theorem-style }
+  { Theorem~ style~ "#1"~ is~ unknown. }
+\cs_new:Npn \fdu_thm_new:nnnn #1#2#3#4
+  {
+    \__fdu_thm_ntheorem_style:n {#1}
+    \__fdu_thm_ntheorem_new:w   {#3} {#4} [#2]
+  }
+\cs_generate_variant:Nn \fdu_thm_new:nnnn { VVxx }
+\cs_new:Npn \fdu_thm_new_no_number:nnn #1#2#3
+  {
+    \__fdu_thm_ntheorem_style:n {#1}
+    \__fdu_thm_ntheorem_new:w   {#2} {#3}
+  }
+\cs_generate_variant:Nn \fdu_thm_new_no_number:nnn { Vxx }
+\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 }
+\captionsetup [ figure ]
+  {
+    font     = small,
+    labelsep = quad
+  }
+\captionsetup [ table  ]
+  {
+    font     = { small, sf },
+    labelsep = quad
+  }
+\cs_set:Npn \thefigure
+  { \__fdu_arabic:n { chapter } - \__fdu_arabic:n { figure } }
+\cs_set:Npn \thetable
+  { \__fdu_arabic:n { chapter } - \__fdu_arabic:n { table  } }
+\clist_map_inline:nn
+  {
+    title, date, author, supervisor, department, major, student_id,
+    school_id, clc
+  }
+  { \tl_new:c { l__fdu_info_ #1 _tl } }
+\clist_new:N \l__fdu_info_instructors_clist
+\clist_new:N \l__fdu_info_keywords_clist
+\clist_map_inline:nn
+  { title, author, supervisor, department, major }
+  { \tl_new:c { l__fdu_info_ #1 _en_tl } }
+\clist_new:N \l__fdu_info_keywords_en_clist
+\int_new:N \l__fdu_info_degree_type_int
+\keys_define:nn { fdu / info }
+  {
+    degree      .choices:nn  =
+      { academic, professional }
+      { \int_set_eq:NN \l__fdu_info_degree_type_int \l_keys_choice_int },
+    title       .tl_set:N    = \l__fdu_info_title_tl,
+    title*      .tl_set:N    = \l__fdu_info_title_en_tl,
+    date        .tl_set:N    = \l__fdu_info_date_tl,
+    author      .tl_set:N    = \l__fdu_info_author_tl,
+    author*     .tl_set:N    = \l__fdu_info_author_en_tl,
+    supervisor  .tl_set:N    = \l__fdu_info_supervisor_tl,
+    instructors .clist_set:N = \l__fdu_info_instructors_clist,
+    department  .tl_set:N    = \l__fdu_info_department_tl,
+    major       .tl_set:N    = \l__fdu_info_major_tl,
+    student-id  .tl_set:N    = \l__fdu_info_student_id_tl,
+    school-id   .tl_set:N    = \l__fdu_info_school_id_tl,
+    keywords    .clist_set:N = \l__fdu_info_keywords_clist,
+    keywords*   .clist_set:N = \l__fdu_info_keywords_en_clist,
+    clc         .tl_set:N    = \l__fdu_info_clc_tl
+  }
+\tl_new:N    \l__fdu_cover_logo_tl
+\clist_new:N \l__fdu_cover_logo_size_clist
+\keys_define:nn { fdu / style }
+  {
+    logo      .tl_set:N    = \l__fdu_cover_logo_tl,
+    logo-size .clist_set:N = \l__fdu_cover_logo_size_clist
+  }
+\bool_new:N \l__fdu_secret_bool
+\tl_new:N \l__fdu_info_secret_level_tl
+\keys_define:nn { fdu / info }
+  {
+    secret-level .choices:nn  =
+      { none, i, ii, iii }
+      {
+        \int_compare:nTF
+          { \l_keys_choice_int >= 2 }
+          {
+            \bool_set_true:N \l__fdu_secret_bool
+            \tl_set:Nn \l__fdu_info_secret_level_tl
+              {
+                \clist_item:Nn \c__fdu_secret_clist
+                  { \l_keys_choice_int - 1 }
+              }
+          }
+          { \bool_set_false:N \l__fdu_secret_bool }
+      },
+    secret-level .value_required:n = true,
+    secret-year  .tl_set:N = \l__fdu_info_secret_year_tl
+  }
+\cs_new_protected:Npn \__fdu_spread_box:nn #1#2
+  {
+    \mode_leave_vertical:
+    \hbox_to_wd:nn {#1}
+      { \tl_map_inline:xn {#2} { ##1 \hfil } \unskip }
+  }
+\cs_new_protected:Npn \__fdu_center_box:nn #1#2
+  {
+    \mode_leave_vertical:
+    \hbox_to_wd:nn {#1} { \hfil #2 \hfil }
+  }
+\cs_generate_variant:Nn \__fdu_center_box:nn  { Vn }
+\cs_new:Npn \__fdu_fixed_width_box:nn #1#2
+  { \parbox {#1} {#2} }
+\cs_new:Npn \__fdu_fixed_width_center_box:nn #1#2
+  { \parbox {#1} { \centering #2 } }
+\cs_new:Npn \__fdu_get_text_width:Nn #1#2
+  {
+    \hbox_set:Nn \l__fdu_tmpa_box {#2}
+    \dim_set:Nn #1 { \box_wd:N \l__fdu_tmpa_box }
+  }
+\cs_generate_variant:Nn \__fdu_get_text_width:Nn { NV }
+\cs_new:Npn \__fdu_get_max_text_width:NN #1#2
+  {
+    \group_begin:
+      \clist_set_eq:NN \l__fdu_tmpa_clist #2
+      \bool_until_do:nn { \clist_if_empty_p:N \l__fdu_tmpa_clist }
+        {
+          \clist_pop:NN \l__fdu_tmpa_clist \l__fdu_tmpa_tl
+          \__fdu_get_text_width:NV \l__fdu_tmpa_dim \l__fdu_tmpa_tl
+          \dim_gset:Nn #1 { \dim_max:nn {#1} { \l__fdu_tmpa_dim } }
+        }
+    \group_end:
+  }
+\cs_new:Npn \__fdu_blank_underline:n #1
+  { \rule [ -0.5 ex ] {#1} { 0.4 pt } }
+\cs_new:Npn \__fdu_line_spread:N #1
+  { \linespread { \fp_use:N #1 } \selectfont }
+\cs_new:Npn \__fdu_line_spread:n #1
+  { \linespread {#1} \selectfont }
+\cs_new_protected:Npn \__fdu_cover_id:
+  {
+    \__fdu_fixed_width_box:nn { 120 pt }
+      {
+        \bool_if:NT \l__fdu_secret_bool
+          {
+            \group_begin:
+              \sffamily
+              \__fdu_cover_id_aux:n { secret_level }
+              \c__fdu_name_secret_star_tl
+              \l__fdu_info_secret_year_tl
+            \group_end:
+            \par
+          }
+        \__fdu_cover_id_aux:n { school_id  } \par
+        \__fdu_cover_id_aux:n { student_id }
+      }
+    \hbox_to_wd:nn { -24 pt } { }
+  }
+\cs_new:Npn \__fdu_cover_id_aux:n #1
+  {
+    \tl_use:c { c__fdu_name_ #1 _tl }
+    \c__fdu_fullwidth_colon_tl
+    \tl_use:c { l__fdu_info_ #1 _tl }
+  }
+\cs_new_protected:Npn \__fdu_cover_logo:
+  {
+    \clist_pop:NN   \l__fdu_cover_logo_size_clist \l__fdu_tmpa_tl
+    \clist_pop:NNTF \l__fdu_cover_logo_size_clist \l__fdu_tmpb_tl
+      {
+        \tl_if_empty:NTF \l__fdu_tmpa_tl
+          { \includegraphics [ height = \l__fdu_tmpb_tl ] }
+          {
+            \includegraphics
+              [ width  = \l__fdu_tmpa_tl, height = \l__fdu_tmpb_tl ]
+          }
+      }
+      { \includegraphics [ width = \l__fdu_tmpa_tl ] }
+    { \l__fdu_cover_logo_tl }
+  }
+\cs_new_protected:Npn \__fdu_cover_type:
+  {
+    \tl_set:Nx \l__fdu_tmpa_tl
+      {
+        \clist_item:Nn \c__fdu_thesis_type_clist
+          { \g__fdu_thesis_type_int }
+      }
+    \__fdu_spread_box:nn { 0.45 \textwidth } { \l__fdu_tmpa_tl }
+  }
+\cs_new_protected:Npn \__fdu_cover_degree:
+  {
+    \int_compare:nNnT \g__fdu_thesis_type_int = \c_two
+      {
+        \tl_set:Nx \l__fdu_tmpa_tl
+          {
+            \clist_item:Nn \c__fdu_degree_type_clist
+              { \l__fdu_info_degree_type_int }
+          }
+        \c__fdu_fullwidth_left_paren_tl
+        \l__fdu_tmpa_tl
+        \c__fdu_fullwidth_right_paren_tl
+      }
+  }
+\cs_new_protected:Npn \__fdu_cover_info:
+  {
+    \begin{minipage} [ c ] { \textwidth }
+      \centering \zihao { 4 }
+      \clist_set:Nx \l__fdu_tmpa_clist
+        {
+          \c__fdu_name_department_tl,
+          \c__fdu_name_major_tl,
+          \c__fdu_name_author_tl,
+          \c__fdu_name_supervisor_tl,
+          \c__fdu_name_date_tl,
+        }
+      \clist_set:Nx \l__fdu_tmpb_clist
+        {
+          { \l__fdu_info_department_tl },
+          { \l__fdu_info_major_tl      },
+          { \l__fdu_info_author_tl     },
+          { \l__fdu_info_supervisor_tl },
+          { \l__fdu_info_date_tl       }
+        }
+      \__fdu_get_max_text_width:NN \l__fdu_tmpb_dim \l__fdu_tmpb_clist
+      \bool_until_do:nn
+        { \clist_if_empty_p:N \l__fdu_tmpa_clist }
+        {
+          \clist_pop:NN \l__fdu_tmpa_clist \l__fdu_tmpa_tl
+          \clist_pop:NN \l__fdu_tmpb_clist \l__fdu_tmpb_tl
+          \__fdu_spread_box:nn { 6 em } { \l__fdu_tmpa_tl }
+          \c__fdu_fullwidth_colon_tl
+          \__fdu_center_box:Vn \l__fdu_tmpb_dim { \l__fdu_tmpb_tl }
+          \skip_vertical:n { 1 ex }
+        }
+    \end{minipage}
+  }
+\cs_new_protected:Npn \__fdu_cover_signature:N #1
+  {
+    \clist_map_inline:Nn #1
+      {
+        ##1 \c__fdu_fullwidth_colon_tl
+        \__fdu_blank_underline:n { 6 em }
+        \__fdu_quad:
+      }
+  }
+\DeclareObjectType { fdu / cover } { \c_zero }
+\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__fdu_cover_template_tl {#1}
+    \__fdu_cover_declare_template_interface:nx {#1}
+      {
+        format      : tokenlist,
+        top-skip    : skip,
+        bottom-skip : skip,
+        \clist_map_function:nN {#2} \__fdu_cover_key_type:n
+      }
+    \tl_new:c   { l__fdu_cover / #1 / format_tl   }
+    \skip_new:c { l__fdu_cover / #1 / top_skip    }
+    \skip_new:c { l__fdu_cover / #1 / bottom_skip }
+    \clist_map_inline:nn {#2}
+      {
+        \tl_new:c   { l__fdu_cover / #1 / ##1 / content_tl  }
+        \tl_new:c   { l__fdu_cover / #1 / ##1 / format_tl   }
+        \skip_new:c { l__fdu_cover / #1 / ##1 / bottom_skip }
+      }
+    \__fdu_cover_declare_template_code:nxn {#1}
+      {
+        format      = \exp_not:c { l__fdu_cover / #1 / format_tl   },
+        top-skip    = \use:c     { l__fdu_cover / #1 / top_skip    },
+        bottom-skip = \use:c     { l__fdu_cover / #1 / bottom_skip },
+        \clist_map_function:nN {#2} \__fdu_cover_key_binding:n
+      }
+      {
+        \AssignTemplateKeys
+        \tl_use:c       { l__fdu_cover / #1 / format_tl }
+        \__fdu_vspace:c { l__fdu_cover / #1 / top_skip  }
+        \clist_map_inline:nn {#2}
+          {
+            \use:c { __fdu_cover / #1 / ####1 / align:n }
+              {
+                \tl_use:c { l__fdu_cover / #1 / ####1 / format_tl  }
+                \tl_use:c { l__fdu_cover / #1 / ####1 / content_tl }
+                \par
+              }
+            \__fdu_vspace:c { l__fdu_cover / #1 / ####1 / bottom_skip }
+          }
+        \__fdu_vspace:c { l__fdu_cover / #1 / bottom_skip }
+      }
+  }
+\tl_new:N \l__fdu_cover_template_tl
+\cs_new_protected:Npn \__fdu_cover_declare_template_interface:nn #1#2
+  { \DeclareTemplateInterface { fdu / cover } {#1} { \c_zero } {#2} }
+\cs_new_protected:Npn \__fdu_cover_declare_template_code:nnn #1#2#3
+  { \DeclareTemplateCode { fdu / cover } {#1} { \c_zero } {#2} {#3} }
+\cs_generate_variant:Nn \__fdu_cover_declare_template_interface:nn { nx  }
+\cs_generate_variant:Nn \__fdu_cover_declare_template_code:nnn     { nxn }
+\cs_new:Npn \__fdu_cover_key_type:n #1
+  {
+    #1 / content     : tokenlist,
+    #1 / format      : tokenlist,
+    #1 / bottom-skip : skip,
+    #1 / align       : choice { left, right, center, normal } = normal,
+  }
+\cs_new:Npn \__fdu_cover_key_binding:n #1
+  {
+    #1 / content     =
+      \exp_not:c
+        { l__fdu_cover / \l__fdu_cover_template_tl / #1 / content_tl  },
+    #1 / format      =
+      \exp_not:c
+        { l__fdu_cover / \l__fdu_cover_template_tl / #1 / format_tl   },
+    #1 / bottom-skip =
+      \exp_not:c
+        { l__fdu_cover / \l__fdu_cover_template_tl / #1 / bottom_skip },
+    #1 / align       =
+      {
+        left   =
+          \exp_not:N \cs_set_protected:cpn
+            { __fdu_cover / \l__fdu_cover_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
+            { __fdu_cover / \l__fdu_cover_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
+            { __fdu_cover / \l__fdu_cover_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
+            { __fdu_cover / \l__fdu_cover_template_tl / #1 / align:n }
+            \exp_not:n {##1}
+            { \exp_not:n { \group_begin: ##1 \group_end: } }
+      },
+  }
+\NewDocumentCommand \makecoveri { }
+  {
+    \thispagestyle { empty }
+    \UseInstance { fdu / cover } { cover-i-default }
+  }
+\NewDocumentCommand \makecoverii { }
+  {
+    \thispagestyle { empty }
+    \UseInstance { fdu / cover } { cover-ii-default }
+  }
+\NewDocumentCommand \makecoveriii { }
+  {
+    \cleardoublepage
+    \thispagestyle { empty }
+    \UseInstance { fdu / cover } { cover-iii-default }
+  }
+\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
+  }
+\DeclareInstance { fdu / cover } { cover-i-default } { cover-i }
+  {
+    format                 =
+      \__fdu_line_spread:N \c__fdu_line_spread_fp,
+    bottom-skip            = 0 pt plus 1.5 fill,
+    id       / content     = \__fdu_cover_id:,
+    logo     / content     = \__fdu_cover_logo:,
+    type     / content     = \__fdu_cover_type:,
+    degree   / content     = \__fdu_cover_degree:,
+    title    / content     =
+      \__fdu_fixed_width_center_box:nn
+        { 0.9 \textwidth } { \l__fdu_info_title_tl },
+    title-en / content     =
+      \__fdu_fixed_width_center_box:nn
+        { 0.9 \textwidth } { \l__fdu_info_title_en_tl },
+    info     / content     = \__fdu_cover_info:,
+    id       / format      = \zihao { -5 },
+    type     / format      = \zihao {  2 },
+    degree   / format      = \zihao {  4 },
+    title    / format      = \zihao { -2 } \sffamily,
+    title-en / format      =
+      \__fdu_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 }
+  {
+    format              =
+      \__fdu_line_spread:N \c__fdu_line_spread_fp,
+    title     / content =
+      \__fdu_spread_box:nn { 7 em } { \c__fdu_name_instructors_tl },
+    name-list / content =
+      \clist_use:Nn \l__fdu_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                                =
+      \__fdu_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__fdu_name_orig_decl_tl,
+    originality-decl-text   / content     = \c__fdu_orig_decl_text_tl,
+    originality-decl-sig    / content     =
+      \__fdu_cover_signature:N \c__fdu_orig_decl_sign_clist,
+    authorization-decl-name / content     = \c__fdu_name_auth_decl_tl,
+    authorization-decl-text / content     = \c__fdu_auth_decl_text_tl,
+    authorization-decl-sig  / content     =
+      \__fdu_cover_signature:N \c__fdu_auth_decl_sign_clist,
+    originality-decl-name   / format      =
+      \__fdu_line_spread:n { 1.2 } \zihao { -2 } \sffamily,
+    authorization-decl-name / format      =
+      \__fdu_line_spread:n { 1.2 } \zihao { -2 } \sffamily,
+    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,
+  }
+\bool_new:N \l__fdu_auto_make_cover_bool
+\keys_define:nn { fdu / style }
+  {
+    auto-make-cover .bool_set:N = \l__fdu_auto_make_cover_bool,
+    auto-make-cover .default:n  = true
+  }
+\AtBeginDocument
+  {
+    \bool_if:NT \l__fdu_auto_make_cover_bool
+      {
+        \begin{titlepage}
+          \makecoveri \newpage \makecoverii
+        \end{titlepage}
+      }
+  }
+\AtEndDocument
+  { \bool_if:NT \l__fdu_auto_make_cover_bool { \makecoveriii } }
+\tl_const:Nn \__fdu_chapter_toc_format:    { \normalfont \sffamily }
+\tl_const:Nn \__fdu_chapter_toc_en_format: { \bfseries }
+\keys_set:nn { ctex }
+  {
+    contentsname = \c__fdu_name_toc_en_tl,
+    chapter / tocline =
+      {
+        \__fdu_chapter_toc_en_format:
+        \CTEXnumberline {#1} #2
+      },
+    section / tocline =
+      {
+        \bfseries
+         \CTEXnumberline {#1} #2
+      },
+    subsection / tocline =
+      {
+         \CTEXnumberline {#1} #2
+      }
+  }
+\__fdu_patch_cmd:Nnn \tableofcontents
+  {
+    \chapter*{\contentsname
+      \@mkboth{%
+        \MakeUppercase\contentsname}{\MakeUppercase\contentsname}}%
+  }
+  {
+    \chapter* { \contentsname }
+    \fdu_front_matter_header:n { \c__fdu_name_toc_en_tl }
+  }
+\__fdu_patch_cmd:Nnn \@starttoc
+  { \begingroup }
+  {
+    \begingroup
+      \__fdu_line_spread:N \c__fdu_line_spread_fp
+  }
+\NewDocumentEnvironment { abstract  } { }
+  { \__fdu_abstract_en_begin: } { \__fdu_abstract_en_end:   }
+\cs_new_protected:Npn \__fdu_abstract_en_begin:
+  {
+    \chapter* { \c__fdu_name_abstract_en_tl }
+    \fdu_front_matter_header:n { \c__fdu_name_abstract_en_tl }
+    \addcontentsline { toc } { chapter }
+      {
+        \__fdu_chapter_toc_en_format:
+        \c__fdu_name_abstract_en_tl
+      }
+  }
+\cs_new_protected:Npn \__fdu_abstract_en_end:
+  {
+    \__fdu_keywords_par:
+    \textbf { \c__fdu_name_keywords_en_tl } \__fdu_quad:
+    \clist_use:Nn \l__fdu_info_keywords_en_clist { \__fdu_quad: }
+    \__fdu_clc_par:
+    \textbf { \c__fdu_name_clc_en_tl } \__fdu_quad:
+    \l__fdu_info_clc_tl
+  }
+\cs_new:Npn \__fdu_keywords_par:
+  {
+    \par \mode_leave_vertical: \par
+    \noindent \hangindent = 4 em  \hangafter = 1
+  }
+\cs_new:Npn \__fdu_clc_par:
+  { \par \noindent }
+\NewDocumentEnvironment { notation } { O { l p { 7.5 cm } } }
+  {
+    \__fdu_notation_begin:
+    \group_begin:
+      \__fdu_notation_long_table_setup:
+      \longtable {#1}
+  }
+  {
+      \endlongtable
+    \group_end:
+  }
+\cs_new_protected:Npn \__fdu_notation_begin:
+  {
+    \chapter* { \c__fdu_name_notation_en_tl }
+    \fdu_front_matter_header:n { \c__fdu_name_notation_en_tl }
+    \addcontentsline { toc } { chapter }
+      {
+        \__fdu_chapter_toc_en_format:
+        \c__fdu_name_notation_en_tl
+      }
+  }
+\cs_new_protected:Npn \__fdu_notation_long_table_setup:
+  {
+      \tl_set:Nn \arraystretch { 1.3 }
+      \dim_set_eq:NN \LTpre  \c_zero_dim
+      \dim_set_eq:NN \LTpost \c_zero_dim
+  }
+\bool_new:N \l__fdu_bibtex_bool
+\tl_new:N \l__fdu_bib_style_tl
+\tl_new:N \l__fdu_bib_gb_style_tl
+\tl_new:N \l__fdu_cite_style_tl
+\tl_new:N \l__fdu_bib_resource_tl
+\keys_define:nn { fdu / style }
+  {
+    bib-backend .choice:,
+    bib-backend .value_required:n = true,
+    bib-backend / bibtex   .code:n =
+      { \bool_set_true:N  \l__fdu_bibtex_bool },
+    bib-backend / biblatex .code:n =
+      { \bool_set_false:N \l__fdu_bibtex_bool },
+    bib-style .choice:,
+    bib-style .value_required:n = true,
+    bib-style / numerical    .code:n =
+      {
+        \tl_set:Nn  \l__fdu_bib_gb_style_tl { numerical  }
+        \tl_clear:N \l__fdu_bib_style_tl
+      },
+    bib-style / author-year .code:n =
+      {
+        \tl_set:Nn  \l__fdu_bib_gb_style_tl { author-year }
+        \tl_clear:N \l__fdu_bib_style_tl
+      },
+    bib-style / unknown     .code:n =
+      { \tl_set_eq:NN \l__fdu_bib_style_tl \l_keys_value_tl },
+    cite-style .code:n =
+      {
+        \bool_if:NTF \l__fdu_bibtex_bool
+          { \__fdu_warning:n { cite-style-not-available } }
+          { \tl_set:Nn \l__fdu_cite_style_tl {#1} }
+      },
+    bib-resource .tl_set:N = \l__fdu_bib_resource_tl
+  }
+\__fdu_msg_new:nn { cite-style-not-available }
+  { Option~ "cite-style"~ is~ not~ available~ in~ BibTeX. }
+\ctex_at_end_preamble:n
+  {
+    \bool_if:NTF \l__fdu_bibtex_bool
+      {
+        \RequirePackage [ sort & compress ] { natbib }
+        \__fdu_bibtex_setup:
+        \NewDocumentCommand \printbibliography { o }
+          {
+            \exp_args:NV \bibliography \l__fdu_bib_resource_tl
+            \IfValueT {#1}
+              { \__fdu_warning:nn { invalid-option-in-bibtex } {#1} }
+          }
+      }
+      {
+        \__fdu_biblatex_setup:
+        \RequirePackage [ backend = biber, hyperref = manual, natbib ]
+          { biblatex }
+        \exp_args:NV \addbibresource \l__fdu_bib_resource_tl
+        \__fdu_biblatex_allow_url_break:
+        \exp_args:Nnx \DefineBibliographyStrings { english }
+          { bibliography = { \c__fdu_name_bib_en_tl } }
+      }
+  }
+\__fdu_msg_new:nn { invalid-option-in-bibtex }
+  { Option(s)~ "#1"~ are~ invalid~ in~ BibTeX. }
+\cs_new:Npn \__fdu_bibtex_setup:
+  {
+    \tl_if_empty:NTF \l__fdu_bib_style_tl
+      {
+        \tl_if_eq:VnTF \l__fdu_bib_gb_style_tl { numerical }
+          {
+            \bibliographystyle { gbt7714-unsrt }
+            \__fdu_set_cite_style_numerical:
+          }
+          {
+            \tl_if_eq:VnT \l__fdu_bib_gb_style_tl { author-year }
+              {
+                \bibliographystyle { gbt7714-plain }
+                \__fdu_set_cite_style_author_year:
+                \cs_set_eq:NN \cite \citep
+              }
+          }
+      }
+      { \exp_args:NV \bibliographystyle \l__fdu_bib_style_tl }
+  }
+\cs_new:Npn \__fdu_biblatex_setup:
+  {
+    \tl_if_empty:NTF \l__fdu_bib_style_tl
+      {
+        \tl_if_eq:VnTF \l__fdu_bib_gb_style_tl { numerical }
+          { \PassOptionsToPackage { style = gb7714-2015 } }
+          {
+            \tl_if_eq:VnT \l__fdu_bib_gb_style_tl { author-year }
+              { \PassOptionsToPackage { style = gb7714-2015ay } }
+          }
+      }
+      { \PassOptionsToPackage { style = \l__fdu_bib_style_tl } }
+    { biblatex }
+    \tl_if_empty:NF \l__fdu_cite_style_tl
+      {
+        \PassOptionsToPackage { citestyle = \l__fdu_bib_style_tl }
+          { biblatex }
+      }
+  }
+\cs_new:Npn \__fdu_biblatex_allow_url_break:
+  {
+    \int_set_eq:NN \c at biburlucpenalty  \c_one
+    \int_set_eq:NN \c at biburlnumpenalty \c_one
+    \int_set_eq:NN \c at biburllcpenalty  \c_one
+  }
+\cs_new:Npn \__fdu_set_cite_style_numerical:
+  {
+    \NAT at numberstrue \NAT at supertrue
+    \cs_set:Npn \NAT at open  { [  }
+    \cs_set:Npn \NAT at close { ]  }
+    \cs_set:Npn \NAT at sep   { ,~ }
+  }
+\cs_new:Npn \__fdu_set_cite_style_author_year:
+  {
+    \NAT at numbersfalse
+  }
+\cs_set:Npn \bibsection
+  {
+    \chapter* { \bibname }
+    \fdu_front_matter_header:n { \bibname }
+    \addcontentsline { toc } { chapter }
+      { \__fdu_chapter_toc_format: \bibname }
+  }
+\NewDocumentCommand \hypersetup { m }
+  { \fdu_hyperref_setup:n {#1} }
+\cs_new_protected:Npn \fdu_hyperref_setup:n #1
+  { \clist_gput_right:Nn \g__fdu_to_hyperref_clist {#1} }
+\cs_new:Npn \__fdu_set_hyperlink_color_key:n #1
+  {
+    hyperlink-color / \clist_item:nn {#1} {1} .code:n =
+      {
+        \__fdu_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 at link, linkbordercolor = fdu at link,
+            urlcolor  = fdu at url,  urlbordercolor  = fdu at url,
+            citecolor = fdu at cite, citebordercolor = fdu at cite
+          }
+      },
+  }
+\cs_new_protected:Npn \__fdu_define_hyperlink_color:nnn #1#2#3
+  {
+    \definecolorset { HTML } { fdu@ } { }
+      { link, #1; url, #2; cite, #3 }
+  }
+\keys_define:nx { fdu / style }
+  {
+    hyperlink .choice:,
+    hyperlink .value_required:n = true,
+    hyperlink / border .code:n = { },
+    hyperlink / color  .code:n =
+      { \fdu_hyperref_setup:n { colorlinks = true } },
+    hyperlink / none   .code:n =
+      { \fdu_hyperref_setup:n { hidelinks  = true } },
+    hyperlink-color .choice:,
+    hyperlink-color .value_required:n = true,
+    \clist_map_function:nN
+      {
+        { autumn,    D70000, D75F00, AF8700 },
+        { business,  D14542, 295497, 1F6E43 },
+        { classic,   FF0000, 0000FF, 00FF00 },
+        { default,   990000, 0000B2, 007F00 },
+        { elegant,   961212, C31818, 9B764F },
+        { fantasy,   FF4A19, FF3F94, 934BA1 },
+        { material,  E91E63, 009688, 4CAF50 },
+        { science,   CA0619, 389F9D, FF8920 },
+        { summer,    00AFAF, 5F5FAF, 5F8700 },
+        { graylevel, 616161, 616161, 616161 },
+        { prl,       2D3092, 2D3092, 2D3092 }
+      }
+      \__fdu_set_hyperlink_color_key:n
+  }
+\cs_new:Npn \fdu_allow_url_break:
+  {
+    \cs_new:Npn \__fdu_add_url_break_points:
+      { \tl_map_function:NN \c__fdu_url_break_points_tl \do }
+    \__fdu_appto_cmd:Nn \UrlBreaks
+      { \UrlOrds \__fdu_add_url_break_points: }
+  }
+\tl_const:Nn \c__fdu_url_break_points_tl
+  {
+    abcdefghijklmnopqrstuvwxyz
+    ABCDEFGHIJKLMNOPQRSTUVWXYZ
+    0123456789
+  }
+\ctex_at_end_preamble:n
+  {
+    \RequirePackage { hyperref }
+    \hypersetup
+      {
+        bookmarksnumbered = true,
+        pdftitle    = \l__fdu_info_title_en_tl,
+        pdfauthor   = \l__fdu_info_author_en_tl,
+        pdfkeywords = \l__fdu_info_keywords_en_clist,
+        pdfcreator  = \c__fdu_name_pdf_creator_tl
+      }
+    \exp_args:NV \hypersetup \g__fdu_to_hyperref_clist
+    \fdu_allow_url_break:
+    \bool_if:NF \l__fdu_bibtex_bool { \BiblatexManualHyperrefOn }
+  }
+\ctex_at_end_package:nn { hyperref }
+  {
+    \pdfstringdefDisableCommands
+      {
+        \cs_set_eq:NN \fdu at kai \prg_do_nothing:
+        \cs_set_eq:NN \quad    \c_space_tl
+        \cs_set_eq:NN \qquad   \c_space_tl
+      }
+  }
+\keys_define:nn { fdu }
+  {
+    info  .meta:nn = { fdu / info  } {#1},
+    style .meta:nn = { fdu / style } {#1}
+  }
+\keys_set:nn { fdu }
+  {
+    style   / font            = times,
+    style   / font-size       = -4,
+    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 },
+    theorem / header-font     = { \bfseries \upshape },
+    theorem / body-font       = { \itshape },
+    theorem / counter         = { chapter }
+  }
+\NewDocumentCommand \fdusetup { m }
+  { \keys_set:nn { fdu } {#1} }
+\newtheorem* { proof       } { \c__fdu_name_proof_en_tl      }
+\newtheorem  { axiom       } { \c__fdu_name_axiom_en_tl      }
+\newtheorem  { corollary   } { \c__fdu_name_corollary_en_tl  }
+\newtheorem  { definition  } { \c__fdu_name_definition_en_tl }
+\newtheorem  { example     } { \c__fdu_name_example_en_tl    }
+\newtheorem  { lemma       } { \c__fdu_name_lemma_en_tl      }
+\newtheorem  { theorem     } { \c__fdu_name_theorem_en_tl    }
+\endinput
+%%
+%% End of file `fduthesis-en.cls'.


Property changes on: trunk/Master/texmf-dist/tex/latex/fduthesis/fduthesis-en.cls
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/fduthesis/fduthesis.cls
===================================================================
--- trunk/Master/texmf-dist/tex/latex/fduthesis/fduthesis.cls	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/fduthesis/fduthesis.cls	2018-04-09 21:17:26 UTC (rev 47408)
@@ -0,0 +1,1743 @@
+%%
+%% This is file `fduthesis.cls',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% fduthesis.dtx  (with options: `class')
+%% 
+%%     Copyright (C) 2017, 2018 by Xiangdong Zeng <xdzeng96 at gmail.com>
+%% 
+%%     This work may be distributed and/or modified under the
+%%     conditions of the LaTeX Project Public License, either
+%%     version 1.3c of this license or (at your option) any later
+%%     version. The latest version of this license is in:
+%% 
+%%       http://www.latex-project.org/lppl.txt
+%% 
+%%     and version 1.3 or later is part of all distributions of
+%%     LaTeX version 2005/12/01 or later.
+%% 
+%%     This work has the LPPL maintenance status `maintained'.
+%% 
+%%     The Current Maintainer of this work is Xiangdong Zeng.
+%% 
+%%     This work consists of the files fduthesis.dtx,
+%%                                     fduthesis-doc.dtx,
+%%                                     fduthesis-logo.dtx,
+%%                                     fduthesis-template.tex,
+%%               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,
+%%                                     fduthesis.pdf,
+%%                                     fduthesis-en.pdf,
+%%                                     fduthesis-code.pdf,
+%%                                     latexmkrc,
+%%                                     latexmkrc-en,
+%%                                 and README.md.
+%% 
+\NeedsTeXFormat{LaTeX2e}
+\RequirePackage{expl3}
+\GetIdInfo $Id: fduthesis.dtx 0.7a 2018-04-09 12:00:00Z Xiangdong Zeng <xdzeng96 at gmail.com> $
+  {Thesis template for Fudan University}
+\ProvidesExplClass{\ExplFileName}
+  {\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription}
+\RequirePackage { xparse, xtemplate, l3keys2e }
+\clist_map_inline:nn { expl3, xparse, xtemplate, l3keys2e }
+  {
+    \@ifpackagelater {#1} { 2017/12/16 }
+      { } { \msg_error:nnn { fduthesis } { l3-too-old } {#1} }
+  }
+\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.
+  }
+\sys_if_engine_xetex:F
+  {
+    \sys_if_engine_luatex:F
+      {
+        \msg_fatal:nnx { fduthesis } { unsupported-engine }
+          { \c_sys_engine_str }
+      }
+  }
+\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".
+  }
+\box_new:N   \l__fdu_tmpa_box
+\clist_new:N \l__fdu_tmpa_clist
+\clist_new:N \l__fdu_tmpb_clist
+\dim_new:N   \l__fdu_tmpa_dim
+\dim_new:N   \l__fdu_tmpb_dim
+\skip_new:N  \l__fdu_tmpa_skip
+\tl_new:N    \l__fdu_tmpa_tl
+\tl_new:N    \l__fdu_tmpb_tl
+\int_new:N \g__fdu_thesis_type_int
+\clist_new:N \g__fdu_to_ctexbook_clist
+\clist_new:N \g__fdu_to_hyperref_clist
+\bool_new:N \g__fdu_twoside_bool
+\bool_set_true:N \g__fdu_twoside_bool
+\bool_new:N \g__fdu_draft_bool
+\tl_new:N \g__fdu_config_tl
+\cs_generate_variant:Nn \cs_generate_variant:Nn { cn }
+\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 \tl_map_inline:nn       { xn }
+\prg_generate_conditional_variant:Nnn \tl_if_eq:nn { Vn } { T, TF }
+\cs_new:Npn \__fdu_quad:  { \skip_horizontal:n { 1 em } }
+\cs_new:Npn \__fdu_qquad: { \skip_horizontal:n { 2 em } }
+\cs_new_protected:Npn \__fdu_vspace:N #1
+  {
+    \dim_set_eq:NN \l__fdu_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__fdu_tmpa_dim
+  }
+\cs_new_protected:Npn \__fdu_vspace:n #1
+  {
+    \skip_set:Nn \l__fdu_tmpa_skip {#1}
+    \__fdu_vspace:N \l__fdu_tmpa_skip
+  }
+\cs_generate_variant:Nn \__fdu_vspace:N { c }
+\cs_new:Npn \__fdu_symbol:n #1 { \tex_char:D #1 \scan_stop: }
+\cs_new:Npn \__fdu_arabic:n #1
+  { \int_to_arabic:v { c@ #1 } }
+\cs_new_protected:Npn \__fdu_patch_cmd:Nnn #1#2#3
+  {
+    \ctex_patch_cmd_once:NnnnTF #1 { } {#2} {#3}
+      { } { \ctex_patch_failure:N #1 }
+  }
+\cs_new_protected:Npn \__fdu_appto_cmd:Nn #1#2
+  {
+    \ctex_appto_cmd:NnnTF #1 { } {#2}
+      { } { \ctex_patch_failure:N #1 }
+  }
+\cs_new_protected:Npn \__fdu_define_fn_style:nn #1#2
+  { \tl_const:cn { c__fdu_fn_style_ #1 _tl } {#2} }
+\cs_new_protected:Npn \__fdu_define_punct:nn #1#2
+  { \tl_const:cn { c__fdu_ #1 _tl } { \__fdu_symbol:n {#2} } }
+\cs_new_protected:Npn \__fdu_define_name:nn #1#2
+  { \tl_const:cn { c__fdu_name_ #1 _tl } {#2} }
+\cs_new_protected:Npn \__fdu_define_name:nnn #1#2#3
+  {
+    \tl_const:cn { c__fdu_name_ #1    _tl } {#2}
+    \tl_const:cn { c__fdu_name_ #1 _en_tl } {#3}
+  }
+\cs_new:Npn \__fdu_msg_new:nn  { \msg_new:nnn      { fduthesis } }
+\cs_new:Npn \__fdu_error:n     { \msg_error:nn     { fduthesis } }
+\cs_new:Npn \__fdu_error:nn    { \msg_error:nnn    { fduthesis } }
+\cs_new:Npn \__fdu_error:nx    { \msg_error:nnx    { fduthesis } }
+\cs_new:Npn \__fdu_error:nnn   { \msg_error:nnnn   { fduthesis } }
+\cs_new:Npn \__fdu_warning:n   { \msg_warning:nn   { fduthesis } }
+\cs_new:Npn \__fdu_warning:nn  { \msg_warning:nnn  { fduthesis } }
+\cs_new:Npn \__fdu_warning:nxx { \msg_warning:nnxx { fduthesis } }
+\cs_new:Npn \__fdu_info:nx     { \msg_info:nnx     { fduthesis } }
+\keys_define:nn { fdu / option }
+  {
+    type .choice:,
+    type .value_required:n = true,
+    type .choices:nn =
+      { doctor, master, bachelor }
+      { \int_set_eq:NN \g__fdu_thesis_type_int \l_keys_choice_int },
+    type .initial:n = bachelor,
+    oneside .value_forbidden:n = true,
+    twoside .value_forbidden:n = true,
+    oneside .code:n =
+      {
+        \clist_gput_right:Nn \g__fdu_to_ctexbook_clist { oneside }
+        \bool_set_false:N    \g__fdu_twoside_bool
+      },
+    twoside .code:n =
+      {
+        \clist_gput_right:Nn \g__fdu_to_ctexbook_clist { twoside }
+        \bool_set_true:N     \g__fdu_twoside_bool
+      },
+    draft .choice:,
+    draft / true  .code:n =
+      {
+        \bool_set_true:N     \g__fdu_draft_bool
+        \clist_gput_right:Nn \g__fdu_to_ctexbook_clist { draft }
+      },
+    draft / false .code:n =
+      { \bool_set_false:N    \g__fdu_draft_bool },
+    draft .default:n = true,
+    draft .initial:n = false,
+    config .tl_set:N = \g__fdu_config_tl,
+    unknown .code:n = { \__fdu_error:n { unknown-option } }
+  }
+\__fdu_msg_new:nn { unknown-option }
+  { Class~ option~ "\l_keys_key_tl"~ is~ unknown. }
+\ProcessKeysOptions { fdu / option }
+\file_input:n { fduthesis.def }
+\tl_if_empty:NF \g__fdu_config_tl
+  {
+    \file_input:V \g__fdu_config_tl
+    \__fdu_info:nx { load-config-file } { \g__fdu_config_tl }
+  }
+\__fdu_msg_new:nn { load-config-file }
+  { You~ are~ loading~ config~ file~ '#1'. }
+\PassOptionsToClass
+  {
+    UTF8,
+    heading    = true,
+    fontset    = none,
+    zihao      = -4,
+    linespread = \c__fdu_line_spread_fp,
+    \g__fdu_to_ctexbook_clist
+  }
+  { ctexbook }
+\clist_map_inline:nn
+  {
+    { no-math           } { fontspec },
+    { perpage           } { footmisc },
+    { amsmath, thmmarks } { ntheorem }
+  }
+  { \PassOptionsToPackage #1 }
+\RequirePackage { etoolbox }
+\LoadClass { ctexbook }
+\RequirePackage
+  {
+    amsmath,
+    unicode-math,
+    geometry,
+    fancyhdr,
+    footmisc,
+    ntheorem,
+    graphicx,
+    longtable,
+    caption,
+    xcolor
+  }
+\cs_new_protected:Npn \__fdu_check_package:nnn #1#2#3
+  {
+    \@ifpackagelater {#1} {#2}
+      { } { \__fdu_error:nnn { package-too-old } {#1} {#3} }
+  }
+\__fdu_msg_new:nn { package-too-old }
+  {
+    Package~ "#1"~ is~ too~ old. \\
+    The~ fduthesis~ class~ only~ supports~ "#1"~ with~ a~ version \\
+    higher~ than~ v#2. \\\\
+    Please~ update~ an~ up-to-date~ version~ of~ it~ using~ your \\
+    TeX~ package~ manager~ or~ from~ CTAN.
+  }
+\__fdu_check_package:nnn { ctex         } { 2017/08/07 } { 2.4.10 }
+\__fdu_check_package:nnn { fontspec     } { 2017/09/22 } { 2.6e   }
+\__fdu_check_package:nnn { unicode-math } { 2017/11/18 } { 0.8i   }
+\sys_if_engine_xetex:T
+  { \__fdu_check_package:nnn { xeCJK } { 2017/08/07 } { 3.5.0 } }
+\geometry
+  {
+    paper      = a4paper,
+    vmargin    = 2.54 cm,
+    hmargin    = 3.18 cm,
+    headheight = 15 pt
+  }
+\bool_if:NT \g__fdu_draft_bool { \geometry { showframe } }
+\prop_new:N \g__fdu_font_name_prop
+\prop_new:N \g__fdu_font_options_prop
+\prop_new:N \g__fdu_cjk_font_name_prop
+\prop_new:N \g__fdu_cjk_font_options_prop
+\keys_define:nn { fdu / style }
+  {
+    font .choice:,
+    font .value_required:n = true,
+    font / libertinus .code:n =
+      {
+        \fdu_choose_font:nn { main } { Libertinus~ Serif }
+        \fdu_choose_font:nn { sans } { Libertinus~ Sans  }
+        \fdu_choose_font_with_option:nnn { mono }
+          { TeX~ Gyre~ Cursor } { Ligatures = Common Off }
+        \fdu_choose_font:nn { math } { Libertinus~ Math  }
+        \keys_set:nn { fdu / style } { footnote-style = libertinus }
+      },
+    font / lm .code:n =
+      {
+        \fdu_choose_font:nn { main } { Latin~ Modern~ Roman }
+        \fdu_choose_font:nn { sans } { Latin~ Modern~ Sans  }
+        \fdu_choose_font:nn { mono } { Latin~ Modern~ Mono  }
+        \fdu_choose_font:nn { math } { Latin~ Modern~ Math  }
+        \keys_set:nn { fdu / style } { footnote-style = pifont }
+      },
+    font / palatino .code:n =
+      {
+        \fdu_choose_font:nn { main } { TeX~ Gyre~ Pagella }
+        \fdu_choose_font:nn { sans } { TeX~ Gyre~ Heros   }
+        \fdu_choose_font_with_option:nnn { mono }
+          { TeX~ Gyre~ Cursor } { Ligatures = Common Off }
+        \fdu_choose_font:nn { math } { TeX~ Gyre~ Pagella~ Math }
+        \keys_set:nn { fdu / style } { footnote-style = pifont }
+      },
+    font / times .code:n =
+      {
+        \fdu_choose_font_with_option:nnn { main } { XITS }
+          {
+            UprightFeatures    = { SmallCapsFont = *               },
+            BoldFeatures       = { SmallCapsFont = *~ Bold         },
+            ItalicFeatures     = { SmallCapsFont = *~ Italic       },
+            BoldItalicFeatures = { SmallCapsFont = *~ Bold~ Italic },
+          }
+        \fdu_choose_font:nn { sans } { TeX~ Gyre~ Heros  }
+        \fdu_choose_font_with_option:nnn { mono }
+          { TeX~ Gyre~ Cursor } { Ligatures = Common Off }
+        \fdu_choose_font:nn { math } { XITS~ Math        }
+        \keys_set:nn { fdu / style } { footnote-style = xits }
+      },
+    font / none .code:n =
+      {
+        \__fdu_initialize_prop:Nn \g__fdu_font_name_prop
+          { main, sans, mono, math }
+        \__fdu_initialize_prop:Nn \g__fdu_font_options_prop
+          { main, sans, mono, math }
+        \keys_set:nn { fdu / style } { footnote-style = plain }
+      },
+    cjk-font .choice:,
+    cjk-font .value_required:n = true,
+    cjk-font / adobe .code:n =
+      {
+        \fdu_choose_cjk_font:nn { song } { Adobe~ Song~     Std }
+        \fdu_choose_cjk_font:nn { hei  } { Adobe~ Heiti~    Std }
+        \fdu_choose_cjk_font:nn { fang } { Adobe~ Fangsong~ Std }
+        \fdu_choose_cjk_font:nn { kai  } { Adobe~ Kaiti~    Std }
+      },
+    cjk-font / fandol .code:n =
+      {
+        \fdu_choose_cjk_font_with_option:nnn { song }
+          { FandolSong } { BoldFont = FandolSong~ Bold }
+        \fdu_choose_cjk_font:nn { hei  } { FandolHei  }
+        \fdu_choose_cjk_font:nn { fang } { FandolFang }
+        \fdu_choose_cjk_font:nn { kai  } { FandolKai  }
+      },
+    cjk-font / founder .code:n =
+      {
+        \fdu_choose_cjk_font_with_option:nnn { song }
+          { FZShuSong-Z01 } { BoldFont = FZXiaoBiaoSong-B05 }
+        \fdu_choose_cjk_font:nn { hei  } { FZHei-B01      }
+        \fdu_choose_cjk_font:nn { fang } { FZFangSong-Z02 }
+        \fdu_choose_cjk_font:nn { kai  } { FZKai-Z03      }
+      },
+    cjk-font / mac .code:n =
+      {
+        \fdu_choose_cjk_font_with_option:nnn { song }
+          { STSong } { BoldFont = STZhongsong }
+        \fdu_choose_cjk_font:nn { hei  } { STHeiti    }
+        \fdu_choose_cjk_font:nn { fang } { STFangsong }
+        \fdu_choose_cjk_font:nn { kai  } { STKaiti    }
+      },
+    cjk-font / windows .code:n =
+      {
+        \fdu_choose_cjk_font:nn { song } { SimSun   }
+        \fdu_choose_cjk_font:nn { hei  } { SimHei   }
+        \fdu_choose_cjk_font:nn { fang } { FangSong }
+        \fdu_choose_cjk_font:nn { kai  } { KaiTi    }
+      },
+    cjk-font / none .code:n =
+      {
+        \__fdu_initialize_prop:Nn \g__fdu_cjk_font_name_prop
+          { rm, sf, tt, kai }
+        \__fdu_initialize_prop:Nn \g__fdu_cjk_font_options_prop
+          { rm, sf, tt, kai }
+      }
+  }
+\cs_new_protected:Npn \__fdu_initialize_prop:Nn #1#2
+  {
+    \prop_gclear:N #1
+    \clist_map_inline:nn {#2} { \prop_gput:Nnn #1 {##1} { } }
+  }
+\clist_map_inline:nn
+  { main, sans, mono, math }
+  {
+    \exp_args:Nc \RenewDocumentCommand { set #1 font } { O { } m O { } }
+      { \fdu_choose_font_with_option:nnn { #1 } {##2} { ##1, ##3 } }
+  }
+\RenewDocumentCommand \setCJKmainfont { O { } m O { } }
+  { \fdu_choose_cjk_font_with_option:nnn { rm } {#2} { #1, #3 } }
+\RenewDocumentCommand \setCJKsansfont { O { } m O { } }
+  { \fdu_choose_cjk_font_with_option:nnn { sf } {#2} { #1, #3 } }
+\RenewDocumentCommand \setCJKmonofont { O { } m O { } }
+  { \fdu_choose_cjk_font_with_option:nnn { tt } {#2} { #1, #3 } }
+\RenewDocumentCommand \setCJKfamilyfont { m O { } m O { } }
+  { \fdu_choose_cjk_font_with_option:nnn {#1} {#3} { #2, #4 } }
+\cs_new_protected:Npn \fdu_choose_font_with_option:nnn #1#2#3
+  {
+    \prop_gput:Nnn \g__fdu_font_name_prop    {#1} {#2}
+    \prop_gput:Nnn \g__fdu_font_options_prop {#1} {#3}
+  }
+\cs_new_protected:Npn \fdu_choose_font:nn #1#2
+  {
+    \prop_gput:Nnn \g__fdu_font_name_prop    {#1} {#2}
+    \prop_gput:Nnn \g__fdu_font_options_prop {#1} {  }
+  }
+\cs_new_protected:Npn \fdu_choose_cjk_font_with_option:nnn #1#2#3
+  {
+    \prop_gput:Nnn \g__fdu_cjk_font_name_prop    {#1} {#2}
+    \prop_gput:Nnn \g__fdu_cjk_font_options_prop {#1} {#3}
+  }
+\cs_new_protected:Npn \fdu_choose_cjk_font:nn #1#2
+  {
+    \prop_gput:Nnn \g__fdu_cjk_font_name_prop    {#1} {#2}
+    \prop_gput:Nnn \g__fdu_cjk_font_options_prop {#1} {  }
+  }
+\cs_new_protected:Npn \__fdu_set_font:
+  {
+    \clist_map_inline:nn { main, sans, mono, math }
+      {
+        \prop_get:NnN \g__fdu_font_name_prop    {##1} \l__fdu_tmpa_tl
+        \prop_get:NnN \g__fdu_font_options_prop {##1} \l__fdu_tmpb_tl
+        \tl_if_empty:NT \l__fdu_tmpa_tl
+          { \__fdu_error:nn { font-not-defined } {##1} }
+        \use:c { __fdu_set_ ##1 _font:VV } \l__fdu_tmpa_tl \l__fdu_tmpb_tl
+      }
+  }
+\clist_map_inline:nn { main, sans, mono }
+  {
+    \cs_new_protected:cpx { __fdu_set_ #1 _font:nn } ##1 ##2
+      { \exp_not:c { __fontspec_main_set #1 font:nn } {##2} {##1} }
+  }
+\cs_new_protected:Npn \__fdu_set_math_font:nn #1#2
+  { \__um_setmathfont:nn {#2} {#1} }
+\clist_map_inline:nn { main, sans, mono, math }
+  { \cs_generate_variant:cn { __fdu_set_ #1 _font:nn } { VV } }
+\cs_new_protected:Npn \__fdu_set_cjk_font:
+  {
+    \clist_map_inline:nn { rm, sf, tt, kai }
+      {
+        \use:c { __fdu_parse_cjk_ ##1 _font: }
+        \__fdu_check_cjk_font:n   {##1}
+        \__fdu_set_cjk_font_aux:n {##1}
+      }
+    \clist_map_inline:nn { song, hei, fang }
+      {
+        \prop_gremove:Nn \g__fdu_cjk_font_name_prop    {##1}
+        \prop_gremove:Nn \g__fdu_cjk_font_options_prop {##1}
+      }
+  }
+\tl_new:N    \l__fdu_font_name_tl
+\clist_new:N \l__fdu_font_options_clist
+\cs_new_protected:Npn \__fdu_parse_cjk_rm_font:
+  {
+    \prop_get:NnNF \g__fdu_cjk_font_name_prop
+      { rm } \l__fdu_font_name_tl
+      {
+        \__fdu_get_cjk_font_name_options:nn { rm } { song }
+        \use_ii:nn
+          {
+            \tl_if_in:NnF \l__fdu_font_options_clist { BoldFont = }
+              {
+                \clist_put_right:Nx \l__fdu_font_options_clist
+                  { BoldFont = \l__fdu_font_name_tl }
+              }
+          }
+          {
+            \prop_get:NnN \g__fdu_cjk_font_name_prop { hei }
+              \l__fdu_tmpa_tl
+            \clist_put_right:Nx \l__fdu_font_options_clist
+              { BoldFont = \l__fdu_tmpa_tl }
+          }
+        \__fdu_get_cjk_kai_font:
+        \__fdu_set_cjk_font_options:n { rm }
+      }
+  }
+\cs_new_protected:Npn \__fdu_parse_cjk_sf_font:
+  {
+    \prop_get:NnNF \g__fdu_cjk_font_name_prop
+      { sf } \l__fdu_font_name_tl
+      {
+        \__fdu_get_cjk_font_name_options:nn { sf } { hei }
+        \clist_put_right:Nx \l__fdu_font_options_clist
+          {
+            BoldFont       = \l__fdu_font_name_tl,
+            ItalicFont     = \l__fdu_font_name_tl,
+            BoldItalicFont = \l__fdu_font_name_tl
+          }
+        \__fdu_set_cjk_font_options:n { sf }
+      }
+  }
+\cs_new_protected:Npn \__fdu_parse_cjk_tt_font:
+  {
+    \prop_get:NnNF \g__fdu_cjk_font_name_prop
+      { tt } \l__fdu_font_name_tl
+      {
+        \__fdu_get_cjk_font_name_options:nn { tt } { fang }
+        \clist_put_right:Nx \l__fdu_font_options_clist
+          { BoldFont = \l__fdu_font_name_tl }
+        \__fdu_get_cjk_kai_font:
+        \__fdu_set_cjk_font_options:n { tt }
+      }
+  }
+\cs_new_protected:Npn \__fdu_parse_cjk_kai_font:
+  {
+    \prop_get:NnN \g__fdu_cjk_font_name_prop { kai }
+      \l__fdu_font_name_tl
+    \clist_set:Nx \l__fdu_font_options_clist
+      {
+        BoldFont       = \l__fdu_font_name_tl,
+        ItalicFont     = \l__fdu_font_name_tl,
+        BoldItalicFont = \l__fdu_font_name_tl
+      }
+    \__fdu_set_cjk_font_options:n { kai }
+  }
+\cs_new_protected:Npn \__fdu_get_cjk_font_name_options:nn #1#2
+  {
+    \prop_get:NnN  \g__fdu_cjk_font_name_prop    {#2} \l__fdu_font_name_tl
+    \prop_gput:NnV \g__fdu_cjk_font_name_prop    {#1} \l__fdu_font_name_tl
+    \prop_get:NnN  \g__fdu_cjk_font_options_prop {#2} \l__fdu_tmpa_tl
+    \clist_set:NV  \l__fdu_font_options_clist \l__fdu_tmpa_tl
+  }
+\cs_new_protected:Npn \__fdu_get_cjk_kai_font:
+  {
+    \prop_get:NnN \g__fdu_cjk_font_name_prop { kai }
+      \l__fdu_tmpa_tl
+    \clist_put_right:Nx \l__fdu_font_options_clist
+      {
+        ItalicFont     = \l__fdu_tmpa_tl,
+        BoldItalicFont = \l__fdu_tmpa_tl
+      }
+  }
+\cs_new_protected:Npn \__fdu_set_cjk_font_options:n #1
+  {
+    \prop_put:NnV \g__fdu_cjk_font_options_prop {#1}
+      \l__fdu_font_options_clist
+  }
+\cs_new_protected:Npn \__fdu_check_cjk_font:n #1
+  {
+    \prop_get:NnN \g__fdu_cjk_font_name_prop {#1}
+      \l__fdu_font_name_tl
+    \tl_if_empty:NT \l__fdu_font_name_tl
+      { \__fdu_error:nn { cjk-font-not-defined } {#1} }
+  }
+\cs_generate_variant:Nn \xeCJK_set_family:nnn    { nVV }
+\cs_generate_variant:Nn \ctex_ltj_set_family:nnn { nVV }
+\cs_new_protected:Npx \__fdu_set_cjk_font_aux:n #1
+  {
+    \prop_get:NnN \exp_not:N \g__fdu_cjk_font_name_prop    {#1}
+      \exp_not:N \l__fdu_tmpa_tl
+    \prop_get:NnN \exp_not:N \g__fdu_cjk_font_options_prop {#1}
+      \exp_not:N \l__fdu_tmpb_tl
+    \sys_if_engine_xetex:TF
+      { \xeCJK_set_family:nVV }
+      { \sys_if_engine_luatex:T { \ctex_ltj_set_family:nVV } }
+    {#1} \exp_not:n { \l__fdu_tmpb_tl \l__fdu_tmpa_tl }
+  }
+\__fdu_msg_new:nn { font-not-defined }
+  {
+    \str_upper_case:f { \tl_head:n {#1} } \tl_tail:n {#1} ~
+    font~ is~ not~ defined. \\\\
+    You~ can~ set~ option~ "font"~ via~ "\string\fdusetup",~
+    or~ use~ command~ \\
+    "\string\set #1 font"~ to~ define~ new~ font~ families.
+  }
+\__fdu_msg_new:nn { cjk-font-not-defined }
+  {
+    CJK~ font~ family~ "#1"~ is~ not~ defined. \\\\
+    You~ can~ set~ option~ "cjk-font"~ via~ "\string\fdusetup",~
+    or~ use~ commands~ \\
+    "\string\setCJKmainfont",~ "\string\setCJKsansfont"~ or~
+    "\string\setCJKmonofont",~ etc~ \\
+    to~ define~ new~ CJK~ font~ families.
+  }
+\sys_if_engine_xetex:T
+  {
+    \prop_gput:Nnn \g__xeCJK_family_font_name_prop { rm } { }
+    \prop_gput:Nnn \g__xeCJK_family_name_prop      { rm } { }
+    \msg_redirect_name:nnn { xeCJK } { CJKfamily-redef } { none }
+  }
+\ctex_at_end_preamble:n
+  {
+    \__fdu_set_font:
+    \__fdu_set_cjk_font:
+  }
+\sys_if_engine_xetex:TF
+  {
+    \prg_new_protected_conditional:Npnn
+      \fdu_family_if_exist:n #1 { TF }
+      {
+        \xeCJK_family_if_exist:nTF {#1}
+          { \prg_return_true: } { \prg_return_false: }
+      }
+  }
+  {
+    \sys_if_engine_luatex:T
+      {
+        \prg_new_protected_conditional:Npnn
+          \fdu_family_if_exist:n #1 { TF }
+          {
+            \ctex_ltj_family_if_exist:nNTF {#1} \l__fdu_tmpa_tl
+              { \prg_return_true: } { \prg_return_false: }
+          }
+      }
+  }
+\cs_new_protected:Npx \fdu_cjk_font_kai:
+  {
+    \fdu_family_if_exist:nTF { kai }
+      {
+        \sys_if_engine_xetex:TF
+          { \xeCJK_switch_family:n { kai } }
+          {
+            \sys_if_engine_luatex:T
+              { \ctex_ltj_switch_family:n { kai } }
+          }
+      }
+      { \exp_not:n { \rmfamily \itshape } }
+  }
+\cs_new_eq:NN \fdu at kai \fdu_cjk_font_kai:
+\keys_set:nn { unicode-math }
+  {
+    math-style = ISO,
+    bold-style = ISO,
+  }
+\keys_define:nn { fdu / style }
+  {
+    font-size .choice:,
+    font-size .value_required:n = true,
+    font-size / -4 .code:n = { },
+    font-size /  5 .code:n =
+      {
+        \RenewDocumentCommand \tiny         { } { \zihao {  7 } }
+        \RenewDocumentCommand \scriptsize   { } { \zihao { -6 } }
+        \RenewDocumentCommand \footnotesize { } { \zihao {  6 } }
+        \RenewDocumentCommand \small        { } { \zihao { -5 } }
+        \RenewDocumentCommand \normalsize   { } { \zihao {  5 } }
+        \RenewDocumentCommand \large        { } { \zihao { -4 } }
+        \RenewDocumentCommand \Large        { } { \zihao { -3 } }
+        \RenewDocumentCommand \LARGE        { } { \zihao { -2 } }
+        \RenewDocumentCommand \huge         { } { \zihao {  2 } }
+        \RenewDocumentCommand \Huge         { } { \zihao {  1 } }
+      },
+    fullwidth-stop .choice:,
+    fullwidth-stop .value_required:n = true,
+    fullwidth-stop / catcode .code:n =
+      { \__fdu_set_fullwidth_stop_catcode: },
+    fullwidth-stop / mapping .code:n =
+      {
+        \sys_if_engine_xetex:TF
+          {
+            \clist_gset:Nn \g__xeCJK_default_features_clist
+              { Mapping = fullwidth-stop }
+          }
+          {
+            \sys_if_engine_luatex:T
+              {
+                \__fdu_warning:n { mapping-not-available }
+                \__fdu_set_fullwidth_stop_catcode:
+              }
+          }
+      },
+    fullwidth-stop / false .code:n = { }
+  }
+\__fdu_msg_new:nn { mapping-not-available }
+  {
+    Option~ "fullwidth-stop = mapping"~ is~ not~ available~ in~ LuaTeX. \\
+    "fullwidth-stop = catcode"~ will~ be~ set~ instead.
+  }
+\cs_new:Npn \__fdu_set_fullwidth_stop_catcode:
+  {
+    \char_set_active_eq:nN { "3002 } \c__fdu_fullwidth_full_stop_tl
+    \char_set_catcode_active:n { "3002 }
+  }
+\keys_set:nn { ctex }
+  {
+    chapter =
+      {
+        format      = \huge \normalfont \sffamily \centering,
+        beforeskip  = 50 pt,
+        afterskip   = 40 pt,
+        number      = \__fdu_arabic:n { chapter },
+        fixskip     = true
+      },
+    section =
+      {
+        format      = \Large \normalfont \sffamily \raggedright,
+        beforeskip  = 3.5 ex plus 1.0 ex minus 0.2 ex,
+        afterskip   = 2.7 ex plus 0.5 ex,
+        fixskip     = true
+      },
+    subsection =
+      {
+        format      = \large \normalfont \sffamily \raggedright,
+        beforeskip  = 3.25 ex plus 1.0 ex minus 0.2 ex,
+        afterskip   = 2.5  ex plus 0.3 ex,
+        fixskip     = true
+      }
+  }
+\fancyhf { }
+\tl_new:N \l__fdu_header_center_mark_tl
+\bool_if:NTF \g__fdu_twoside_bool
+  {
+    \fancyhead [ EL ] { \small \nouppercase { \fdu at kai \leftmark  } }
+    \fancyhead [ OR ] { \small \nouppercase { \fdu at kai \rightmark } }
+  }
+  {
+    \fancyhead [ L ] { \small \nouppercase { \fdu at kai \leftmark  } }
+    \fancyhead [ R ] { \small \nouppercase { \fdu at kai \rightmark } }
+    \fancyhead [ C ]
+      {
+        \small \nouppercase
+          { \fdu at kai \l__fdu_header_center_mark_tl }
+      }
+  }
+\fancyfoot [ C ] { \small \thepage }
+\cs_new:Npn \fdu_front_matter_header:n #1
+  {
+    \bool_if:NTF \g__fdu_twoside_bool
+      { \markboth {#1} {#1} }
+      {
+        \markboth { } { }
+        \tl_gset:Nn \l__fdu_header_center_mark_tl {#1}
+      }
+  }
+\RenewDocumentCommand \cleardoublepage { }
+  {
+    \clearpage
+    \bool_if:NT \g__fdu_twoside_bool
+      {
+        \int_if_odd:nF \c at page
+          { \hbox:n { } \thispagestyle { empty } \newpage }
+      }
+    \tl_gset:Nn \l__fdu_header_center_mark_tl { }
+  }
+\pagestyle { fancy }
+\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*      }
+  }
+  { \__fdu_define_fn_style:nn #1 }
+\tl_new:N \l__fdu_fn_style_tl
+\keys_define:nn { fdu / style }
+  {
+    footnote-style .choices:nn =
+      {
+        plain,
+        libertinus, libertinus*, libertinus-sans,
+        pifont,     pifont*,     pifont-sans,     pifont-sans*,
+        xits,                    xits-sans,       xits-sans*
+      }
+      {
+        \tl_gset_eq:NN \l__fdu_fn_style_tl \l_keys_choice_tl
+        \int_compare:nT { 5 <= \l_keys_choice_int <= 8 }
+          { \RequirePackage { pifont } }
+      },
+    footnote-style .value_required:n = true
+  }
+\cs_new:Npn \__fdu_fn_symbol_libertinus:n #1
+  {
+    \int_compare:nTF { #1 >= 21 }
+      {
+        \int_compare:nTF { #1 >= 47 }
+          { \__fdu_symbol:n { \int_eval:n { "24B6 - 47 + #1 } } }
+          { \__fdu_symbol:n { \int_eval:n { "24D0 - 21 + #1 } } }
+      }
+      { \__fdu_symbol:n { \int_eval:n { "2460 - 1 + #1 } } }
+  }
+\cs_new:Npn \__fdu_fn_symbol_libertinus_neg:n #1
+  {
+    \int_compare:nTF { #1 >= 11 }
+      { \__fdu_symbol:n { \int_eval:n { "24EB - 11 + #1 } } }
+      { \__fdu_symbol:n { \int_eval:n { "2776 -  1 + #1 } } }
+  }
+\cs_new_eq:NN \__fdu_fn_symbol_libertinus_sans:n
+  \__fdu_fn_symbol_libertinus:n
+\cs_new:Npn \__fdu_fn_symbol_pifont:n #1
+  { \ding { \int_eval:n { 171 + #1 } } }
+\cs_new:Npn \__fdu_fn_symbol_pifont_neg:n #1
+  { \ding { \int_eval:n { 181 + #1 } } }
+\cs_new:Npn \__fdu_fn_symbol_pifont_sans:n #1
+  { \ding { \int_eval:n { 191 + #1 } } }
+\cs_new:Npn \__fdu_fn_symbol_pifont_sans_neg:n #1
+  { \ding { \int_eval:n { 201 + #1 } } }
+\cs_new:Npn \__fdu_fn_symbol_xits:n #1
+  {
+    \int_compare:nTF { #1 >= 10 }
+      {
+        \int_compare:nTF { #1 >= 36 }
+          { \__fdu_symbol:n { \int_eval:n { "24B6 - 36 + #1 } } }
+          { \__fdu_symbol:n { \int_eval:n { "24D0 - 10 + #1 } } }
+      }
+      { \__fdu_symbol:n { \int_eval:n { "2460 - 1 + #1 } } }
+  }
+\cs_new:Npn \__fdu_fn_symbol_xits_sans:n #1
+  { \__fdu_symbol:n { \int_eval:n { "2780 - 1 + #1 } } }
+\cs_new:Npn \__fdu_fn_symbol_xits_sans_neg:n #1
+  { \__fdu_symbol:n { \int_eval:n { "278A - 1 + #1 } } }
+\cs_set:Npn \thefootnote { \fdu_footnote_number:N \c at footnote }
+\cs_new:Npn \fdu_footnote_number:N #1
+  {
+    \tl_case:NnF \l__fdu_fn_style_tl
+      {
+        \c__fdu_fn_style_plain_tl
+          { \int_use:N #1 }
+        \c__fdu_fn_style_libertinus_tl
+          {
+            \fontspec { Libertinus~ Serif }
+            \__fdu_fn_symbol_libertinus:n {#1}
+          }
+        \c__fdu_fn_style_libertinus_neg_tl
+          {
+            \fontspec { Libertinus~ Serif }
+            \__fdu_fn_symbol_libertinus_neg:n {#1}
+          }
+        \c__fdu_fn_style_libertinus_sans_tl
+          {
+            \fontspec { Libertinus~ Sans }
+            \__fdu_fn_symbol_libertinus_sans:n {#1}
+          }
+        \c__fdu_fn_style_pifont_tl
+          { \__fdu_fn_symbol_pifont:n {#1} }
+        \c__fdu_fn_style_pifont_neg_tl
+          { \__fdu_fn_symbol_pifont_neg:n {#1} }
+        \c__fdu_fn_style_pifont_sans_tl
+          { \__fdu_fn_symbol_pifont_sans:n {#1} }
+        \c__fdu_fn_style_pifont_sans_neg_tl
+          { \__fdu_fn_symbol_pifont_sans_neg:n {#1} }
+        \c__fdu_fn_style_xits_tl
+          {
+            \fontspec { XITS }
+            \__fdu_fn_symbol_xits:n {#1}
+          }
+        \c__fdu_fn_style_xits_sans_tl
+          {
+            \fontspec { XITS }
+            \__fdu_fn_symbol_xits_sans:n {#1}
+          }
+        \c__fdu_fn_style_xits_sans_neg_tl
+          {
+            \fontspec { XITS }
+            \__fdu_fn_symbol_xits_sans_neg:n {#1}
+          }
+      }
+      { \int_use:N #1 }
+  }
+\cs_set:Npn \@makefntext #1
+  {
+    \mode_leave_vertical:
+    \hbox_to_wd:nn { 1.5 em } { \@thefnmark \hfil }
+    #1
+  }
+\clist_const:Nn \c__fdu_thm_style_plain_clist
+  { plain, margin, change }
+\clist_const:Nn \c__fdu_thm_style_break_clist
+  { break, marginbreak, changebreak }
+\tl_new:N \l__fdu_thm_style_tl
+\tl_new:N \l__fdu_thm_header_font_tl
+\tl_new:N \l__fdu_thm_body_font_tl
+\tl_new:N \l__fdu_thm_qed_tl
+\tl_new:N \l__fdu_thm_counter_tl
+\keys_define:nn { fdu / theorem }
+  {
+    style       .tl_set:N  = \l__fdu_thm_style_tl,
+    header-font .tl_set:N  = \l__fdu_thm_header_font_tl,
+    body-font   .tl_set:N  = \l__fdu_thm_body_font_tl,
+    qed         .tl_set:N  = \l__fdu_thm_qed_tl,
+    counter     .tl_set:N  = \l__fdu_thm_counter_tl
+  }
+\cs_new_eq:NN \__fdu_thm_ntheorem_style:n \theoremstyle
+\cs_new_eq:NN \__fdu_thm_ntheorem_new:w   \newtheorem
+\RenewDocumentCommand \newtheorem { s o m m }
+  {
+    \IfBooleanTF {#1}
+      { \tl_set:Nn \l__fdu_thm_qed_tl { \ensuremath { \QED } } }
+      { \tl_set:Nn \l__fdu_thm_qed_tl { } }
+    \tl_set:Nn \l__fdu_thm_style_tl { plain }
+    \IfValueT {#2} { \keys_set:nn { fdu / theorem } {#2} }
+    \fdu_thm_set_header_font:V \l__fdu_thm_header_font_tl
+    \fdu_thm_set_body_font:V   \l__fdu_thm_body_font_tl
+    \fdu_thm_set_qed:V         \l__fdu_thm_qed_tl
+    \IfBooleanTF {#1}
+      {
+        \clist_if_in:nVF { plain, break } \l__fdu_thm_style_tl
+          {
+            \clist_if_in:NVTF
+              \c__fdu_thm_style_plain_clist \l__fdu_thm_style_tl
+              { \__fdu_thm_redefine_style:n { plain } }
+              {
+                \clist_if_in:NVTF
+                  \c__fdu_thm_style_break_clist \l__fdu_thm_style_tl
+                  { \__fdu_thm_redefine_style:n { break } }
+                  {
+                    \__fdu_error:nx { unknown-theorem-style }
+                      { \l__fdu_thm_style_tl }
+                  }
+              }
+          }
+        \tl_put_left:Nn \l__fdu_thm_style_tl { nonumber }
+        \fdu_thm_new_no_number:Vxx \l__fdu_thm_style_tl {#3} {#4}
+      }
+      {
+        \clist_clear:N \l__fdu_tmpa_clist
+        \clist_concat:NNN \l__fdu_tmpa_clist
+          \c__fdu_thm_style_plain_clist \c__fdu_thm_style_break_clist
+        \clist_if_in:NVF \l__fdu_tmpa_clist \l__fdu_thm_style_tl
+          {
+            \__fdu_error:nx { unknown-theorem-style }
+              { \l__fdu_thm_style_tl }
+          }
+        \fdu_thm_new:VVxx \l__fdu_thm_style_tl \l__fdu_thm_counter_tl
+          {#3} {#4}
+      }
+  }
+\cs_new:Npn \__fdu_thm_redefine_style:n #1
+  {
+    \__fdu_warning:nxx { redefine-theorem-style }
+      {#1} { \l__fdu_thm_style_tl }
+    \tl_set:Nn \l__fdu_thm_style_tl {#1}
+  }
+\__fdu_msg_new:nn { redefine-theorem-style }
+  { Theorem~ style~ "#2"~ will~ be~ redefined~ as~ "#1". }
+\__fdu_msg_new:nn { unknown-theorem-style }
+  { Theorem~ style~ "#1"~ is~ unknown. }
+\cs_new:Npn \fdu_thm_new:nnnn #1#2#3#4
+  {
+    \__fdu_thm_ntheorem_style:n {#1}
+    \__fdu_thm_ntheorem_new:w   {#3} {#4} [#2]
+  }
+\cs_generate_variant:Nn \fdu_thm_new:nnnn { VVxx }
+\cs_new:Npn \fdu_thm_new_no_number:nnn #1#2#3
+  {
+    \__fdu_thm_ntheorem_style:n {#1}
+    \__fdu_thm_ntheorem_new:w   {#2} {#3}
+  }
+\cs_generate_variant:Nn \fdu_thm_new_no_number:nnn { Vxx }
+\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 }
+\captionsetup [ figure ]
+  {
+    font     = small,
+    labelsep = quad
+  }
+\captionsetup [ table  ]
+  {
+    font     = { small, sf },
+    labelsep = quad
+  }
+\cs_set:Npn \thefigure
+  { \__fdu_arabic:n { chapter } - \__fdu_arabic:n { figure } }
+\cs_set:Npn \thetable
+  { \__fdu_arabic:n { chapter } - \__fdu_arabic:n { table  } }
+\clist_map_inline:nn
+  {
+    title, date, author, supervisor, department, major, student_id,
+    school_id, clc
+  }
+  { \tl_new:c { l__fdu_info_ #1 _tl } }
+\clist_new:N \l__fdu_info_instructors_clist
+\clist_new:N \l__fdu_info_keywords_clist
+\clist_map_inline:nn
+  { title, author, supervisor, department, major }
+  { \tl_new:c { l__fdu_info_ #1 _en_tl } }
+\clist_new:N \l__fdu_info_keywords_en_clist
+\int_new:N \l__fdu_info_degree_type_int
+\keys_define:nn { fdu / info }
+  {
+    degree      .choices:nn  =
+      { academic, professional }
+      { \int_set_eq:NN \l__fdu_info_degree_type_int \l_keys_choice_int },
+    title       .tl_set:N    = \l__fdu_info_title_tl,
+    title*      .tl_set:N    = \l__fdu_info_title_en_tl,
+    date        .tl_set:N    = \l__fdu_info_date_tl,
+    author      .tl_set:N    = \l__fdu_info_author_tl,
+    author*     .tl_set:N    = \l__fdu_info_author_en_tl,
+    supervisor  .tl_set:N    = \l__fdu_info_supervisor_tl,
+    instructors .clist_set:N = \l__fdu_info_instructors_clist,
+    department  .tl_set:N    = \l__fdu_info_department_tl,
+    major       .tl_set:N    = \l__fdu_info_major_tl,
+    student-id  .tl_set:N    = \l__fdu_info_student_id_tl,
+    school-id   .tl_set:N    = \l__fdu_info_school_id_tl,
+    keywords    .clist_set:N = \l__fdu_info_keywords_clist,
+    keywords*   .clist_set:N = \l__fdu_info_keywords_en_clist,
+    clc         .tl_set:N    = \l__fdu_info_clc_tl
+  }
+\tl_new:N    \l__fdu_cover_logo_tl
+\clist_new:N \l__fdu_cover_logo_size_clist
+\keys_define:nn { fdu / style }
+  {
+    logo      .tl_set:N    = \l__fdu_cover_logo_tl,
+    logo-size .clist_set:N = \l__fdu_cover_logo_size_clist
+  }
+\bool_new:N \l__fdu_secret_bool
+\tl_new:N \l__fdu_info_secret_level_tl
+\keys_define:nn { fdu / info }
+  {
+    secret-level .choices:nn  =
+      { none, i, ii, iii }
+      {
+        \int_compare:nTF
+          { \l_keys_choice_int >= 2 }
+          {
+            \bool_set_true:N \l__fdu_secret_bool
+            \tl_set:Nn \l__fdu_info_secret_level_tl
+              {
+                \clist_item:Nn \c__fdu_secret_clist
+                  { \l_keys_choice_int - 1 }
+              }
+          }
+          { \bool_set_false:N \l__fdu_secret_bool }
+      },
+    secret-level .value_required:n = true,
+    secret-year  .tl_set:N = \l__fdu_info_secret_year_tl
+  }
+\cs_new_protected:Npn \__fdu_spread_box:nn #1#2
+  {
+    \mode_leave_vertical:
+    \hbox_to_wd:nn {#1}
+      { \tl_map_inline:xn {#2} { ##1 \hfil } \unskip }
+  }
+\cs_new_protected:Npn \__fdu_center_box:nn #1#2
+  {
+    \mode_leave_vertical:
+    \hbox_to_wd:nn {#1} { \hfil #2 \hfil }
+  }
+\cs_generate_variant:Nn \__fdu_center_box:nn  { Vn }
+\cs_new:Npn \__fdu_fixed_width_box:nn #1#2
+  { \parbox {#1} {#2} }
+\cs_new:Npn \__fdu_fixed_width_center_box:nn #1#2
+  { \parbox {#1} { \centering #2 } }
+\cs_new:Npn \__fdu_get_text_width:Nn #1#2
+  {
+    \hbox_set:Nn \l__fdu_tmpa_box {#2}
+    \dim_set:Nn #1 { \box_wd:N \l__fdu_tmpa_box }
+  }
+\cs_generate_variant:Nn \__fdu_get_text_width:Nn { NV }
+\cs_new:Npn \__fdu_get_max_text_width:NN #1#2
+  {
+    \group_begin:
+      \clist_set_eq:NN \l__fdu_tmpa_clist #2
+      \bool_until_do:nn { \clist_if_empty_p:N \l__fdu_tmpa_clist }
+        {
+          \clist_pop:NN \l__fdu_tmpa_clist \l__fdu_tmpa_tl
+          \__fdu_get_text_width:NV \l__fdu_tmpa_dim \l__fdu_tmpa_tl
+          \dim_gset:Nn #1 { \dim_max:nn {#1} { \l__fdu_tmpa_dim } }
+        }
+    \group_end:
+  }
+\cs_new:Npn \__fdu_blank_underline:n #1
+  { \rule [ -0.5 ex ] {#1} { 0.4 pt } }
+\cs_new:Npn \__fdu_line_spread:N #1
+  { \linespread { \fp_use:N #1 } \selectfont }
+\cs_new:Npn \__fdu_line_spread:n #1
+  { \linespread {#1} \selectfont }
+\cs_new_protected:Npn \__fdu_cover_id:
+  {
+    \__fdu_fixed_width_box:nn { 120 pt }
+      {
+        \bool_if:NT \l__fdu_secret_bool
+          {
+            \group_begin:
+              \sffamily
+              \__fdu_cover_id_aux:n { secret_level }
+              \c__fdu_name_secret_star_tl
+              \l__fdu_info_secret_year_tl
+            \group_end:
+            \par
+          }
+        \__fdu_cover_id_aux:n { school_id  } \par
+        \__fdu_cover_id_aux:n { student_id }
+      }
+    \hbox_to_wd:nn { -24 pt } { }
+  }
+\cs_new:Npn \__fdu_cover_id_aux:n #1
+  {
+    \tl_use:c { c__fdu_name_ #1 _tl }
+    \c__fdu_fullwidth_colon_tl
+    \tl_use:c { l__fdu_info_ #1 _tl }
+  }
+\cs_new_protected:Npn \__fdu_cover_logo:
+  {
+    \clist_pop:NN   \l__fdu_cover_logo_size_clist \l__fdu_tmpa_tl
+    \clist_pop:NNTF \l__fdu_cover_logo_size_clist \l__fdu_tmpb_tl
+      {
+        \tl_if_empty:NTF \l__fdu_tmpa_tl
+          { \includegraphics [ height = \l__fdu_tmpb_tl ] }
+          {
+            \includegraphics
+              [ width  = \l__fdu_tmpa_tl, height = \l__fdu_tmpb_tl ]
+          }
+      }
+      { \includegraphics [ width = \l__fdu_tmpa_tl ] }
+    { \l__fdu_cover_logo_tl }
+  }
+\cs_new_protected:Npn \__fdu_cover_type:
+  {
+    \tl_set:Nx \l__fdu_tmpa_tl
+      {
+        \clist_item:Nn \c__fdu_thesis_type_clist
+          { \g__fdu_thesis_type_int }
+      }
+    \__fdu_spread_box:nn { 0.45 \textwidth } { \l__fdu_tmpa_tl }
+  }
+\cs_new_protected:Npn \__fdu_cover_degree:
+  {
+    \int_compare:nNnT \g__fdu_thesis_type_int = \c_two
+      {
+        \tl_set:Nx \l__fdu_tmpa_tl
+          {
+            \clist_item:Nn \c__fdu_degree_type_clist
+              { \l__fdu_info_degree_type_int }
+          }
+        \c__fdu_fullwidth_left_paren_tl
+        \l__fdu_tmpa_tl
+        \c__fdu_fullwidth_right_paren_tl
+      }
+  }
+\cs_new_protected:Npn \__fdu_cover_info:
+  {
+    \begin{minipage} [ c ] { \textwidth }
+      \centering \zihao { 4 }
+      \clist_set:Nx \l__fdu_tmpa_clist
+        {
+          \c__fdu_name_department_tl,
+          \c__fdu_name_major_tl,
+          \c__fdu_name_author_tl,
+          \c__fdu_name_supervisor_tl,
+          \c__fdu_name_date_tl,
+        }
+      \clist_set:Nx \l__fdu_tmpb_clist
+        {
+          { \l__fdu_info_department_tl },
+          { \l__fdu_info_major_tl      },
+          { \l__fdu_info_author_tl     },
+          { \l__fdu_info_supervisor_tl },
+          { \l__fdu_info_date_tl       }
+        }
+      \__fdu_get_max_text_width:NN \l__fdu_tmpb_dim \l__fdu_tmpb_clist
+      \bool_until_do:nn
+        { \clist_if_empty_p:N \l__fdu_tmpa_clist }
+        {
+          \clist_pop:NN \l__fdu_tmpa_clist \l__fdu_tmpa_tl
+          \clist_pop:NN \l__fdu_tmpb_clist \l__fdu_tmpb_tl
+          \__fdu_spread_box:nn { 6 em } { \l__fdu_tmpa_tl }
+          \c__fdu_fullwidth_colon_tl
+          \__fdu_center_box:Vn \l__fdu_tmpb_dim { \l__fdu_tmpb_tl }
+          \skip_vertical:n { 1 ex }
+        }
+    \end{minipage}
+  }
+\cs_new_protected:Npn \__fdu_cover_signature:N #1
+  {
+    \clist_map_inline:Nn #1
+      {
+        ##1 \c__fdu_fullwidth_colon_tl
+        \__fdu_blank_underline:n { 6 em }
+        \__fdu_quad:
+      }
+  }
+\DeclareObjectType { fdu / cover } { \c_zero }
+\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__fdu_cover_template_tl {#1}
+    \__fdu_cover_declare_template_interface:nx {#1}
+      {
+        format      : tokenlist,
+        top-skip    : skip,
+        bottom-skip : skip,
+        \clist_map_function:nN {#2} \__fdu_cover_key_type:n
+      }
+    \tl_new:c   { l__fdu_cover / #1 / format_tl   }
+    \skip_new:c { l__fdu_cover / #1 / top_skip    }
+    \skip_new:c { l__fdu_cover / #1 / bottom_skip }
+    \clist_map_inline:nn {#2}
+      {
+        \tl_new:c   { l__fdu_cover / #1 / ##1 / content_tl  }
+        \tl_new:c   { l__fdu_cover / #1 / ##1 / format_tl   }
+        \skip_new:c { l__fdu_cover / #1 / ##1 / bottom_skip }
+      }
+    \__fdu_cover_declare_template_code:nxn {#1}
+      {
+        format      = \exp_not:c { l__fdu_cover / #1 / format_tl   },
+        top-skip    = \use:c     { l__fdu_cover / #1 / top_skip    },
+        bottom-skip = \use:c     { l__fdu_cover / #1 / bottom_skip },
+        \clist_map_function:nN {#2} \__fdu_cover_key_binding:n
+      }
+      {
+        \AssignTemplateKeys
+        \tl_use:c       { l__fdu_cover / #1 / format_tl }
+        \__fdu_vspace:c { l__fdu_cover / #1 / top_skip  }
+        \clist_map_inline:nn {#2}
+          {
+            \use:c { __fdu_cover / #1 / ####1 / align:n }
+              {
+                \tl_use:c { l__fdu_cover / #1 / ####1 / format_tl  }
+                \tl_use:c { l__fdu_cover / #1 / ####1 / content_tl }
+                \par
+              }
+            \__fdu_vspace:c { l__fdu_cover / #1 / ####1 / bottom_skip }
+          }
+        \__fdu_vspace:c { l__fdu_cover / #1 / bottom_skip }
+      }
+  }
+\tl_new:N \l__fdu_cover_template_tl
+\cs_new_protected:Npn \__fdu_cover_declare_template_interface:nn #1#2
+  { \DeclareTemplateInterface { fdu / cover } {#1} { \c_zero } {#2} }
+\cs_new_protected:Npn \__fdu_cover_declare_template_code:nnn #1#2#3
+  { \DeclareTemplateCode { fdu / cover } {#1} { \c_zero } {#2} {#3} }
+\cs_generate_variant:Nn \__fdu_cover_declare_template_interface:nn { nx  }
+\cs_generate_variant:Nn \__fdu_cover_declare_template_code:nnn     { nxn }
+\cs_new:Npn \__fdu_cover_key_type:n #1
+  {
+    #1 / content     : tokenlist,
+    #1 / format      : tokenlist,
+    #1 / bottom-skip : skip,
+    #1 / align       : choice { left, right, center, normal } = normal,
+  }
+\cs_new:Npn \__fdu_cover_key_binding:n #1
+  {
+    #1 / content     =
+      \exp_not:c
+        { l__fdu_cover / \l__fdu_cover_template_tl / #1 / content_tl  },
+    #1 / format      =
+      \exp_not:c
+        { l__fdu_cover / \l__fdu_cover_template_tl / #1 / format_tl   },
+    #1 / bottom-skip =
+      \exp_not:c
+        { l__fdu_cover / \l__fdu_cover_template_tl / #1 / bottom_skip },
+    #1 / align       =
+      {
+        left   =
+          \exp_not:N \cs_set_protected:cpn
+            { __fdu_cover / \l__fdu_cover_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
+            { __fdu_cover / \l__fdu_cover_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
+            { __fdu_cover / \l__fdu_cover_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
+            { __fdu_cover / \l__fdu_cover_template_tl / #1 / align:n }
+            \exp_not:n {##1}
+            { \exp_not:n { \group_begin: ##1 \group_end: } }
+      },
+  }
+\NewDocumentCommand \makecoveri { }
+  {
+    \thispagestyle { empty }
+    \UseInstance { fdu / cover } { cover-i-default }
+  }
+\NewDocumentCommand \makecoverii { }
+  {
+    \thispagestyle { empty }
+    \UseInstance { fdu / cover } { cover-ii-default }
+  }
+\NewDocumentCommand \makecoveriii { }
+  {
+    \cleardoublepage
+    \thispagestyle { empty }
+    \UseInstance { fdu / cover } { cover-iii-default }
+  }
+\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
+  }
+\DeclareInstance { fdu / cover } { cover-i-default } { cover-i }
+  {
+    bottom-skip            = 0 pt plus 1.5 fill,
+    id       / content     = \__fdu_cover_id:,
+    logo     / content     = \__fdu_cover_logo:,
+    type     / content     = \__fdu_cover_type:,
+    degree   / content     = \__fdu_cover_degree:,
+    title    / content     =
+      \__fdu_fixed_width_center_box:nn
+        { 0.9 \textwidth } { \l__fdu_info_title_tl },
+    title-en / content     =
+      \__fdu_fixed_width_center_box:nn
+        { 0.9 \textwidth } { \l__fdu_info_title_en_tl },
+    info     / content     = \__fdu_cover_info:,
+    id       / format      = \zihao { -5 },
+    type     / format      = \zihao {  2 },
+    degree   / format      = \zihao {  4 },
+    title    / format      = \zihao { -2 } \sffamily,
+    title-en / format      =
+      \__fdu_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 }
+  {
+    title     / content =
+      \__fdu_spread_box:nn { 7 em } { \c__fdu_name_instructors_tl },
+    name-list / content =
+      \clist_use:Nn \l__fdu_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                                =
+      \__fdu_line_spread:n { 1.8 },
+    top-skip                              = 0 pt plus 0.2 fill,
+    bottom-skip                           = 0 pt plus 2.5 fill,
+    originality-decl-name   / content     = \c__fdu_name_orig_decl_tl,
+    originality-decl-text   / content     = \c__fdu_orig_decl_text_tl,
+    originality-decl-sig    / content     =
+      \__fdu_cover_signature:N \c__fdu_orig_decl_sign_clist,
+    authorization-decl-name / content     = \c__fdu_name_auth_decl_tl,
+    authorization-decl-text / content     = \c__fdu_auth_decl_text_tl,
+    authorization-decl-sig  / content     =
+      \__fdu_cover_signature:N \c__fdu_auth_decl_sign_clist,
+    originality-decl-name   / format      =
+      \__fdu_line_spread:n { 1.2 } \zihao { -2 } \sffamily,
+    authorization-decl-name / format      =
+      \__fdu_line_spread:n { 1.2 } \zihao { -2 } \sffamily,
+    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,
+  }
+\bool_new:N \l__fdu_auto_make_cover_bool
+\keys_define:nn { fdu / style }
+  {
+    auto-make-cover .bool_set:N = \l__fdu_auto_make_cover_bool,
+    auto-make-cover .default:n  = true
+  }
+\AtBeginDocument
+  {
+    \bool_if:NT \l__fdu_auto_make_cover_bool
+      {
+        \begin{titlepage}
+          \makecoveri \newpage \makecoverii
+        \end{titlepage}
+      }
+  }
+\AtEndDocument
+  { \bool_if:NT \l__fdu_auto_make_cover_bool { \makecoveriii } }
+\tl_const:Nn \__fdu_chapter_toc_format:    { \normalfont \sffamily }
+\tl_const:Nn \__fdu_chapter_toc_en_format: { \bfseries }
+\keys_set:nn { ctex }
+  {
+    contentsname = \c__fdu_name_toc_tl,
+    chapter / tocline =
+      {
+        \__fdu_chapter_toc_format:
+        \CTEXnumberline {#1} #2
+      },
+    section / tocline =
+      {
+         \CTEXnumberline {#1} #2
+      },
+    subsection / tocline =
+      {
+        \fdu at kai
+         \CTEXnumberline {#1} #2
+      }
+  }
+\__fdu_patch_cmd:Nnn \tableofcontents
+  {
+    \chapter*{\contentsname
+      \@mkboth{%
+        \MakeUppercase\contentsname}{\MakeUppercase\contentsname}}%
+  }
+  {
+    \chapter* { \contentsname }
+    \fdu_front_matter_header:n { \c__fdu_name_toc_tl }
+  }
+\NewDocumentEnvironment { abstract  } { }
+  { \__fdu_abstract_begin:    } { \__fdu_abstract_end:      }
+\NewDocumentEnvironment { abstract* } { }
+  { \__fdu_abstract_en_begin: } { \__fdu_abstract_en_end:   }
+\cs_new_protected:Npn \__fdu_abstract_begin:
+  {
+    \chapter* { \c__fdu_name_abstract_tl }
+    \fdu_front_matter_header:n { \c__fdu_name_abstract_tl }
+    \addcontentsline { toc } { chapter }
+      {
+        \__fdu_chapter_toc_format:
+        \c__fdu_name_abstract_tl
+      }
+  }
+\cs_new_protected:Npn \__fdu_abstract_en_begin:
+  {
+    \chapter* { \c__fdu_name_abstract_en_tl }
+    \fdu_front_matter_header:n { \c__fdu_name_abstract_en_tl }
+    \addcontentsline { toc } { chapter }
+      {
+        \__fdu_chapter_toc_format:
+        \c__fdu_name_abstract_en_tl
+      }
+  }
+\cs_new_protected:Npn \__fdu_abstract_end:
+  {
+    \__fdu_keywords_par:
+    \textsf { \c__fdu_name_keywords_tl \c__fdu_fullwidth_colon_tl }
+    \clist_use:Nn \l__fdu_info_keywords_clist
+      { \c__fdu_fullwidth_semicolon_tl }
+    \__fdu_clc_par:
+    \textsf { \c__fdu_name_clc_tl \c__fdu_fullwidth_colon_tl }
+    \l__fdu_info_clc_tl
+  }
+\cs_new_protected:Npn \__fdu_abstract_en_end:
+  {
+    \__fdu_keywords_par:
+    \textbf { \c__fdu_name_keywords_en_tl } \__fdu_quad:
+    \clist_use:Nn \l__fdu_info_keywords_en_clist { \__fdu_quad: }
+    \__fdu_clc_par:
+    \textbf { \c__fdu_name_clc_en_tl } \__fdu_quad:
+    \l__fdu_info_clc_tl
+  }
+\cs_new:Npn \__fdu_keywords_par:
+  {
+    \par \mode_leave_vertical: \par
+    \noindent \hangindent = 4 em  \hangafter = 1
+  }
+\cs_new:Npn \__fdu_clc_par:
+  { \par \noindent }
+\NewDocumentEnvironment { notation } { O { l p { 7.5 cm } } }
+  {
+    \__fdu_notation_begin:
+    \group_begin:
+      \__fdu_notation_long_table_setup:
+      \longtable {#1}
+  }
+  {
+      \endlongtable
+    \group_end:
+  }
+\cs_new_protected:Npn \__fdu_notation_begin:
+  {
+    \chapter* { \c__fdu_name_notation_tl }
+    \fdu_front_matter_header:n { \c__fdu_name_notation_tl }
+    \addcontentsline { toc } { chapter }
+      {
+        \__fdu_chapter_toc_format:
+        \c__fdu_name_notation_tl
+      }
+  }
+\cs_new_protected:Npn \__fdu_notation_long_table_setup:
+  {
+      \dim_set_eq:NN \LTpre  \c_zero_dim
+      \dim_set_eq:NN \LTpost \c_zero_dim
+  }
+\bool_new:N \l__fdu_bibtex_bool
+\tl_new:N \l__fdu_bib_style_tl
+\tl_new:N \l__fdu_bib_gb_style_tl
+\tl_new:N \l__fdu_cite_style_tl
+\tl_new:N \l__fdu_bib_resource_tl
+\keys_define:nn { fdu / style }
+  {
+    bib-backend .choice:,
+    bib-backend .value_required:n = true,
+    bib-backend / bibtex   .code:n =
+      { \bool_set_true:N  \l__fdu_bibtex_bool },
+    bib-backend / biblatex .code:n =
+      { \bool_set_false:N \l__fdu_bibtex_bool },
+    bib-style .choice:,
+    bib-style .value_required:n = true,
+    bib-style / numerical    .code:n =
+      {
+        \tl_set:Nn  \l__fdu_bib_gb_style_tl { numerical  }
+        \tl_clear:N \l__fdu_bib_style_tl
+      },
+    bib-style / author-year .code:n =
+      {
+        \tl_set:Nn  \l__fdu_bib_gb_style_tl { author-year }
+        \tl_clear:N \l__fdu_bib_style_tl
+      },
+    bib-style / unknown     .code:n =
+      { \tl_set_eq:NN \l__fdu_bib_style_tl \l_keys_value_tl },
+    cite-style .code:n =
+      {
+        \bool_if:NTF \l__fdu_bibtex_bool
+          { \__fdu_warning:n { cite-style-not-available } }
+          { \tl_set:Nn \l__fdu_cite_style_tl {#1} }
+      },
+    bib-resource .tl_set:N = \l__fdu_bib_resource_tl
+  }
+\__fdu_msg_new:nn { cite-style-not-available }
+  { Option~ "cite-style"~ is~ not~ available~ in~ BibTeX. }
+\ctex_at_end_preamble:n
+  {
+    \bool_if:NTF \l__fdu_bibtex_bool
+      {
+        \RequirePackage [ sort & compress ] { natbib }
+        \__fdu_bibtex_setup:
+        \NewDocumentCommand \printbibliography { o }
+          {
+            \exp_args:NV \bibliography \l__fdu_bib_resource_tl
+            \IfValueT {#1}
+              { \__fdu_warning:nn { invalid-option-in-bibtex } {#1} }
+          }
+      }
+      {
+        \__fdu_biblatex_setup:
+        \RequirePackage [ backend = biber, hyperref = manual, natbib ]
+          { biblatex }
+        \exp_args:NV \addbibresource \l__fdu_bib_resource_tl
+        \__fdu_biblatex_allow_url_break:
+      }
+  }
+\__fdu_msg_new:nn { invalid-option-in-bibtex }
+  { Option(s)~ "#1"~ are~ invalid~ in~ BibTeX. }
+\cs_new:Npn \__fdu_bibtex_setup:
+  {
+    \tl_if_empty:NTF \l__fdu_bib_style_tl
+      {
+        \tl_if_eq:VnTF \l__fdu_bib_gb_style_tl { numerical }
+          {
+            \bibliographystyle { gbt7714-unsrt }
+            \__fdu_set_cite_style_numerical:
+          }
+          {
+            \tl_if_eq:VnT \l__fdu_bib_gb_style_tl { author-year }
+              {
+                \bibliographystyle { gbt7714-plain }
+                \__fdu_set_cite_style_author_year:
+                \cs_set_eq:NN \cite \citep
+              }
+          }
+      }
+      { \exp_args:NV \bibliographystyle \l__fdu_bib_style_tl }
+  }
+\cs_new:Npn \__fdu_biblatex_setup:
+  {
+    \tl_if_empty:NTF \l__fdu_bib_style_tl
+      {
+        \tl_if_eq:VnTF \l__fdu_bib_gb_style_tl { numerical }
+          { \PassOptionsToPackage { style = gb7714-2015 } }
+          {
+            \tl_if_eq:VnT \l__fdu_bib_gb_style_tl { author-year }
+              { \PassOptionsToPackage { style = gb7714-2015ay } }
+          }
+      }
+      { \PassOptionsToPackage { style = \l__fdu_bib_style_tl } }
+    { biblatex }
+    \tl_if_empty:NF \l__fdu_cite_style_tl
+      {
+        \PassOptionsToPackage { citestyle = \l__fdu_bib_style_tl }
+          { biblatex }
+      }
+  }
+\cs_new:Npn \__fdu_biblatex_allow_url_break:
+  {
+    \int_set_eq:NN \c at biburlucpenalty  \c_one
+    \int_set_eq:NN \c at biburlnumpenalty \c_one
+    \int_set_eq:NN \c at biburllcpenalty  \c_one
+  }
+\cs_new:Npn \__fdu_set_cite_style_numerical:
+  {
+    \NAT at numberstrue \NAT at supertrue
+    \cs_set:Npn \NAT at open  { [  }
+    \cs_set:Npn \NAT at close { ]  }
+    \cs_set:Npn \NAT at sep   { ,~ }
+  }
+\cs_new:Npn \__fdu_set_cite_style_author_year:
+  {
+    \NAT at numbersfalse
+    \cs_set_eq:NN \NAT at open  \c__fdu_fullwidth_left_paren_tl
+    \cs_set_eq:NN \NAT at close \c__fdu_fullwidth_right_paren_tl
+    \cs_set_eq:NN \NAT at sep   \c__fdu_fullwidth_semicolon_tl
+    \cs_set_eq:NN \NAT at aysep \c__fdu_fullwidth_comma_tl
+    \cs_set_eq:NN \NAT at yrsep \c__fdu_ideographic_comma_tl
+  }
+\cs_set:Npn \bibsection
+  {
+    \chapter* { \bibname }
+    \fdu_front_matter_header:n { \bibname }
+    \addcontentsline { toc } { chapter }
+      { \__fdu_chapter_toc_format: \bibname }
+  }
+\NewDocumentCommand \hypersetup { m }
+  { \fdu_hyperref_setup:n {#1} }
+\cs_new_protected:Npn \fdu_hyperref_setup:n #1
+  { \clist_gput_right:Nn \g__fdu_to_hyperref_clist {#1} }
+\cs_new:Npn \__fdu_set_hyperlink_color_key:n #1
+  {
+    hyperlink-color / \clist_item:nn {#1} {1} .code:n =
+      {
+        \__fdu_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 at link, linkbordercolor = fdu at link,
+            urlcolor  = fdu at url,  urlbordercolor  = fdu at url,
+            citecolor = fdu at cite, citebordercolor = fdu at cite
+          }
+      },
+  }
+\cs_new_protected:Npn \__fdu_define_hyperlink_color:nnn #1#2#3
+  {
+    \definecolorset { HTML } { fdu@ } { }
+      { link, #1; url, #2; cite, #3 }
+  }
+\keys_define:nx { fdu / style }
+  {
+    hyperlink .choice:,
+    hyperlink .value_required:n = true,
+    hyperlink / border .code:n = { },
+    hyperlink / color  .code:n =
+      { \fdu_hyperref_setup:n { colorlinks = true } },
+    hyperlink / none   .code:n =
+      { \fdu_hyperref_setup:n { hidelinks  = true } },
+    hyperlink-color .choice:,
+    hyperlink-color .value_required:n = true,
+    \clist_map_function:nN
+      {
+        { autumn,    D70000, D75F00, AF8700 },
+        { business,  D14542, 295497, 1F6E43 },
+        { classic,   FF0000, 0000FF, 00FF00 },
+        { default,   990000, 0000B2, 007F00 },
+        { elegant,   961212, C31818, 9B764F },
+        { fantasy,   FF4A19, FF3F94, 934BA1 },
+        { material,  E91E63, 009688, 4CAF50 },
+        { science,   CA0619, 389F9D, FF8920 },
+        { summer,    00AFAF, 5F5FAF, 5F8700 },
+        { graylevel, 616161, 616161, 616161 },
+        { prl,       2D3092, 2D3092, 2D3092 }
+      }
+      \__fdu_set_hyperlink_color_key:n
+  }
+\cs_new:Npn \fdu_allow_url_break:
+  {
+    \cs_new:Npn \__fdu_add_url_break_points:
+      { \tl_map_function:NN \c__fdu_url_break_points_tl \do }
+    \__fdu_appto_cmd:Nn \UrlBreaks
+      { \UrlOrds \__fdu_add_url_break_points: }
+  }
+\tl_const:Nn \c__fdu_url_break_points_tl
+  {
+    abcdefghijklmnopqrstuvwxyz
+    ABCDEFGHIJKLMNOPQRSTUVWXYZ
+    0123456789
+  }
+\ctex_at_end_preamble:n
+  {
+    \RequirePackage { hyperref }
+    \hypersetup
+      {
+        bookmarksnumbered = true,
+        pdftitle    = \l__fdu_info_title_tl,
+        pdfauthor   = \l__fdu_info_author_tl,
+        pdfkeywords = \l__fdu_info_keywords_clist,
+        pdfcreator  = \c__fdu_name_pdf_creator_tl
+      }
+    \exp_args:NV \hypersetup \g__fdu_to_hyperref_clist
+    \fdu_allow_url_break:
+    \bool_if:NF \l__fdu_bibtex_bool { \BiblatexManualHyperrefOn }
+  }
+\ctex_at_end_package:nn { hyperref }
+  {
+    \pdfstringdefDisableCommands
+      {
+        \cs_set_eq:NN \fdu at kai \prg_do_nothing:
+        \cs_set_eq:NN \quad    \c_space_tl
+        \cs_set_eq:NN \qquad   \c_space_tl
+      }
+  }
+\keys_define:nn { fdu }
+  {
+    info  .meta:nn = { fdu / info  } {#1},
+    style .meta:nn = { fdu / style } {#1}
+  }
+\keys_set:nn { fdu }
+  {
+    style   / font            = times,
+    style   / cjk-font        = fandol,
+    style   / font-size       = -4,
+    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 },
+    theorem / header-font     = { \sffamily },
+    theorem / body-font       = { \fdu at kai },
+    theorem / counter         = { chapter }
+  }
+\NewDocumentCommand \fdusetup { m }
+  { \keys_set:nn { fdu } {#1} }
+\newtheorem* { proof       } { \c__fdu_name_proof_tl      }
+\newtheorem  { axiom       } { \c__fdu_name_axiom_tl      }
+\newtheorem  { corollary   } { \c__fdu_name_corollary_tl  }
+\newtheorem  { definition  } { \c__fdu_name_definition_tl }
+\newtheorem  { example     } { \c__fdu_name_example_tl    }
+\newtheorem  { lemma       } { \c__fdu_name_lemma_tl      }
+\newtheorem  { theorem     } { \c__fdu_name_theorem_tl    }
+\endinput
+%%
+%% End of file `fduthesis.cls'.


Property changes on: trunk/Master/texmf-dist/tex/latex/fduthesis/fduthesis.cls
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/fduthesis/fduthesis.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/fduthesis/fduthesis.def	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/fduthesis/fduthesis.def	2018-04-09 21:17:26 UTC (rev 47408)
@@ -0,0 +1,132 @@
+%%
+%% This is file `fduthesis.def',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% fduthesis.dtx  (with options: `definition')
+%% 
+%%     Copyright (C) 2017, 2018 by Xiangdong Zeng <xdzeng96 at gmail.com>
+%% 
+%%     This work may be distributed and/or modified under the
+%%     conditions of the LaTeX Project Public License, either
+%%     version 1.3c of this license or (at your option) any later
+%%     version. The latest version of this license is in:
+%% 
+%%       http://www.latex-project.org/lppl.txt
+%% 
+%%     and version 1.3 or later is part of all distributions of
+%%     LaTeX version 2005/12/01 or later.
+%% 
+%%     This work has the LPPL maintenance status `maintained'.
+%% 
+%%     The Current Maintainer of this work is Xiangdong Zeng.
+%% 
+%%     This work consists of the files fduthesis.dtx,
+%%                                     fduthesis-doc.dtx,
+%%                                     fduthesis-logo.dtx,
+%%                                     fduthesis-template.tex,
+%%               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,
+%%                                     fduthesis.pdf,
+%%                                     fduthesis-en.pdf,
+%%                                     fduthesis-code.pdf,
+%%                                     latexmkrc,
+%%                                     latexmkrc-en,
+%%                                 and README.md.
+%% 
+\GetIdInfo $Id: fduthesis.dtx 0.7a 2018-04-09 12:00:00Z Xiangdong Zeng <xdzeng96 at gmail.com> $
+  {Definition file for fduthesis}
+\ProvidesExplFile{\ExplFileName.def}
+  {\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription}
+\tl_const:Nn \c__fdu_name_simp_tl { 复旦大学          }
+\tl_const:Nn \c__fdu_name_trad_tl { 復旦大學          }
+\tl_const:Nn \c__fdu_name_en_tl   { Fudan~ University }
+\clist_map_inline:nn
+  {
+    { ideographic_comma     } { "3001 },
+    { ideographic_full_stop } { "3002 },
+    { fullwidth_comma       } { "FF0C },
+    { fullwidth_full_stop   } { "FF0E },
+    { fullwidth_colon       } { "FF1A },
+    { fullwidth_semicolon   } { "FF1B },
+    { fullwidth_left_paren  } { "FF08 },
+    { fullwidth_right_paren } { "FF09 }
+  }
+  { \__fdu_define_punct:nn #1 }
+\fp_const:Nn \c__fdu_line_spread_fp
+  { \dim_ratio:nn { 20 pt } { 12 bp } / 1.2 }
+\tl_const:Nn \c__fdu_orig_decl_text_tl
+  {
+    本人郑重声明:所呈交的学位论文,是本人在导师的指导下,独立进行研究
+    工作所取得的成果。论文中除特别标注的内容外,不包含任何其他个人或机
+    构已经发表或撰写过的研究成果。对本研究做出重要贡献的个人和集体,均
+    已在论文中作了明确的声明并表示了谢意。本声明的法律结果由本人承担。
+  }
+\tl_const:Nn \c__fdu_auth_decl_text_tl
+  {
+    本人完全了解复旦大学有关收藏和利用博士、硕士学位论文的规定,即:学
+    校有权收藏、使用并向国家有关部门或机构送交论文的印刷本和电子版本;
+    允许论文被查阅和借阅;学校可以公布论文的全部或部分内容,可以采用影
+    印、缩印或其它复制手段保存论文。涉密学位论文在解密后遵守此规定。
+  }
+\clist_const:Nn \c__fdu_orig_decl_sign_clist
+  { 作者签名, 日期 }
+\clist_const:Nn \c__fdu_auth_decl_sign_clist
+  { 作者签名, 导师签名, 日期 }
+\clist_const:Nn \c__fdu_thesis_type_clist
+  { 博士学位论文, 硕士学位论文, 本科毕业论文 }
+\clist_const:Nn \c__fdu_degree_type_clist
+  { 学术学位, 专业学位 }
+\clist_const:Nn \c__fdu_secret_clist { 秘密, 机密, 绝密 }
+\clist_map_inline:nn
+  {
+    { secret_level    } { 密 \qquad 级                  },
+    { secret_star     } { \textrm { \bigstar }          },
+    { school_id       } { 学校代码                      },
+    { student_id      } { 学 \qquad 号                  },
+    { department      } { 院系                          },
+    { major           } { 专业                          },
+    { author          } { 姓名                          },
+    { supervisor      } { 指导教师                      },
+    { date            } { 完成日期                      },
+    { instructors     } { 指导小组成员                  },
+    { author_sign     } { 作者签名                      },
+    { supervisor_sign } { 导师签名                      },
+    { sign_date       } { 日期                          },
+    { bib_en          } { Bibliography                  },
+    { pdf_creator     } { LaTeX~ with~ fduthesis~ class },
+    { orig_decl       } { \c__fdu_name_simp_tl \\ 学位论文独创性声明   },
+    { auth_decl       } { \c__fdu_name_simp_tl \\ 学位论文使用授权声明 }
+  }
+  { \__fdu_define_name:nn #1 }
+\clist_map_inline:nn
+  {
+    { abstract } { 摘 \quad 要 } { Abstract          },
+    { keywords } { 关键字      } { Keywords:         },
+    { clc      } { 中图分类号  } { CLC~ number:      },
+    { toc      } { 目 \quad 录 } { Contents          },
+    { notation } { 符号表      } { List~ of~ Symbols }
+  }
+  { \__fdu_define_name:nnn #1 }
+\clist_map_inline:nn
+  {
+    { proof      } { 证明 } { Proof      },
+    { axiom      } { 公理 } { Axiom      },
+    { corollary  } { 推论 } { Corollary  },
+    { definition } { 定义 } { Definition },
+    { example    } { 例   } { Example    },
+    { lemma      } { 引理 } { Lemma      },
+    { theorem    } { 定理 } { Theorem    }
+  }
+  { \__fdu_define_name:nnn #1 }
+\endinput
+%%
+%% End of file `fduthesis.def'.


Property changes on: trunk/Master/texmf-dist/tex/latex/fduthesis/fduthesis.def
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/tlpkg/bin/tlpkg-ctan-check
===================================================================
--- trunk/Master/tlpkg/bin/tlpkg-ctan-check	2018-04-09 21:16:36 UTC (rev 47407)
+++ trunk/Master/tlpkg/bin/tlpkg-ctan-check	2018-04-09 21:17:26 UTC (rev 47408)
@@ -260,7 +260,7 @@
     fancybox fancyhandout fancyhdr fancyhdr-it fancylabel fancynum fancypar
     fancyref fancyslides fancytabs fancytooltips fancyvrb fandol
     FAQ-en fast-diagram fbb fbithesis fbs
-    fc fcavtex fcltxdoc fcolumn fdsymbol featpost fei fenixpar
+    fc fcavtex fcltxdoc fcolumn fdsymbol fduthesis featpost fei fenixpar
     fetamont fetchcls feupphdteses feyn feynmf feynmp-auto
     ffslides fge fgruler
     fibeamer fifinddo-info fifo-stack fig4latex figbas figbib figflow figsize

Modified: trunk/Master/tlpkg/tlpsrc/collection-langchinese.tlpsrc
===================================================================
--- trunk/Master/tlpkg/tlpsrc/collection-langchinese.tlpsrc	2018-04-09 21:16:36 UTC (rev 47407)
+++ trunk/Master/tlpkg/tlpsrc/collection-langchinese.tlpsrc	2018-04-09 21:17:26 UTC (rev 47408)
@@ -13,6 +13,7 @@
 depend ctex
 depend ctex-faq
 depend fandol
+depend fduthesis
 depend hyphen-chinese
 depend impatient-cn
 depend latex-notes-zh-cn

Added: trunk/Master/tlpkg/tlpsrc/fduthesis.tlpsrc
===================================================================


More information about the tex-live-commits mailing list