summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/fduthesis
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/fduthesis
Initial commit
Diffstat (limited to 'macros/latex/contrib/fduthesis')
-rw-r--r--macros/latex/contrib/fduthesis/README.md81
-rw-r--r--macros/latex/contrib/fduthesis/fduthesis-code.pdfbin0 -> 916050 bytes
-rw-r--r--macros/latex/contrib/fduthesis/fduthesis-doc.dtx2156
-rw-r--r--macros/latex/contrib/fduthesis/fduthesis-en.pdfbin0 -> 162728 bytes
-rw-r--r--macros/latex/contrib/fduthesis/fduthesis-logo.dtx3537
-rw-r--r--macros/latex/contrib/fduthesis/fduthesis.dtx6024
-rw-r--r--macros/latex/contrib/fduthesis/fduthesis.pdfbin0 -> 410643 bytes
-rw-r--r--macros/latex/contrib/fduthesis/fudan-emblem-new.pdfbin0 -> 10688 bytes
-rw-r--r--macros/latex/contrib/fduthesis/fudan-emblem.pdfbin0 -> 15957 bytes
-rw-r--r--macros/latex/contrib/fduthesis/fudan-name.pdfbin0 -> 9952 bytes
10 files changed, 11798 insertions, 0 deletions
diff --git a/macros/latex/contrib/fduthesis/README.md b/macros/latex/contrib/fduthesis/README.md
new file mode 100644
index 0000000000..563fb4b89d
--- /dev/null
+++ b/macros/latex/contrib/fduthesis/README.md
@@ -0,0 +1,81 @@
+The `fduthesis` Class
+=====================
+
+*LaTeX thesis template for Fudan University, v0.7d*
+
+Overview
+--------
+
+This template supports doctoral or master dissertion and undergraduate
+thesis, both in Chinese or English. With the help of modern LaTeX
+technology, `fduthesis` aims to create a simple interface, a normative
+format, as well as a hackable class for the users.
+
+At present, `fduthesis` only supports XeTeX and LuaTeX engines.
+Support for pdfTeX and [ApTeX](https://github.com/clerkma/ptex-ng) is
+still under development. `fduthesis` only allows UTF-8 encoding.
+
+The documentation can be found in
+[fduthesis.pdf](http://mirrors.ctan.org/macros/latex/contrib/fduthesis/fduthesis.pdf)
+(in Chinese) or
+[fduthesis-en.pdf](http://mirrors.ctan.org/macros/latex/contrib/fduthesis/fduthesis-en.pdf)
+(in English).
+
+GitHub re­pos­i­tory: <https://github.com/stone-zeng/fduthesis>.
+
+Installation
+------------
+
+To install `fduthesis`, you can use one of the following methods:
+
+- If you are running TeX Live, the simplest way is to run
+
+ tlmgr install fduthesis
+
+- Download
+ [fduthesis.tds.zip](http://mirror.ctan.org/install/macros/latex/contrib/fduthesis.tds.zip)
+ from CTAN, extract it in the root of one of your TDS trees, and
+ update the filename database.
+
+- Get the source from GitHub:
+
+ git clone https://github.com/stone-zeng/fduthesis.git
+
+ Run `install-win.bat` (on Windows) or `install-linux.sh` (on Linux)
+ to generate the templates and configuration files. These files would
+ be found in a new-created `thesis` folder. You can enjoy `fduthesis`
+ here at once.
+
+ For permanent installation, you may move the following files into a
+ directory where LaTeX will find them (e.g.
+ `TEXMF/tex/latex/fduthesis/`):
+
+ - `fduthesis.cls`
+ - `fduthesis-en.cls`
+ - `fduthesis.def`
+ - `fdudoc.cls`
+ - `fdulogo.sty`
+ - `fudan-emblem.pdf`
+ - `fudan-emblem-new.pdf`
+ - `fudan-name.pdf`
+
+ Do not forget to update the filename database afterwards.
+
+Contributing
+------------
+
+[Issues](https://github.com/stone-zeng/fduthesis/issues) and
+[pull requests](https://github.com/stone-zeng/fduthesis/pulls)
+are always welcome.
+
+License
+-------
+
+This work may be distributed and/or modified under the conditions of
+the [LaTeX Project Public License](http://www.latex-project.org/lppl.txt),
+either version 1.3c of this license or (at your option) any later
+version.
+
+-----
+
+Copyright (C) 2017&ndash;2019 by Xiangdong Zeng <xdzeng96@gmail.com>.
diff --git a/macros/latex/contrib/fduthesis/fduthesis-code.pdf b/macros/latex/contrib/fduthesis/fduthesis-code.pdf
new file mode 100644
index 0000000000..6848703e9a
--- /dev/null
+++ b/macros/latex/contrib/fduthesis/fduthesis-code.pdf
Binary files differ
diff --git a/macros/latex/contrib/fduthesis/fduthesis-doc.dtx b/macros/latex/contrib/fduthesis/fduthesis-doc.dtx
new file mode 100644
index 0000000000..6952003bca
--- /dev/null
+++ b/macros/latex/contrib/fduthesis/fduthesis-doc.dtx
@@ -0,0 +1,2156 @@
+% \iffalse meta-comment
+%
+% Copyright (C) 2017--2019 by Xiangdong Zeng <xdzeng96@gmail.com>
+%
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either
+% version 1.3c of this license or (at your option) any later
+% version. The latest version of this license is in:
+%
+% http://www.latex-project.org/lppl.txt
+%
+% and version 1.3 or later is part of all distributions of
+% LaTeX version 2005/12/01 or later.
+%
+% This work has the LPPL maintenance status `maintained'.
+%
+% The Current Maintainer of this work is Xiangdong Zeng.
+%
+% \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@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{%
+ caption,
+ geometry,
+ graphicx,
+ listings,
+ makecell,
+ siunitx,
+ tabularx,
+ threeparttable,
+ unicode-math,
+ xcolor,
+ xcolor-material,
+ xunicode,
+ zref-base
+}
+% \end{macrocode}
+%
+% \subsubsection{\env{macrocode} 环境}
+%
+% \paragraph{继承的代码}
+%
+% \begin{macro}[int]{\macro@code}
+% 在 \pkg{doc} 宏包中,\env{macrocode} 环境的核心功能由命令
+% \tn{macro@code} 负责实现,而 \tn{xmacro@code} 只用来结束
+% \env{macrocode} 环境。但在 \cls{l3doc} 以及 \cls{ctxdoc} 中,
+% \tn{xmacro\-@\-code} 则基本接管了 \tn{macro@code} 的功能。
+% 后者此时只起辅助作用。
+% \begin{macrocode}
+\def\macro@code{%
+% \end{macrocode}
+% 调整前后间距,禁止 \env{macrocode} 环境前的分页。
+% \begin{macrocode}
+ \topsep \MacrocodeTopsep
+ \@beginparpenalty \predisplaypenalty
+% \end{macrocode}
+% 将列表前后的附加垂直空白设为 0。根据 \cls{ctxdoc} 修改。
+% \begin{macrocode}
+ \partopsep \z@skip
+% \if@inlabel\leavevmode\fi
+% \end{macrocode}
+% 构建 \env{trivlist} 环境,设置段间距为 0。
+% 之后修改字体,并调节左右间距。\tn{MacroIndent} 会根据代码行数
+% 更新,具体细节见后文。
+% \tn{macro@font} 用来在不同模块见切换字体。本文档类不使用
+% \tn{AltMacroFont},因此这里改用 \tn{MacroFont} 代替。
+% \begin{macrocode}
+ \trivlist \parskip \z@ \item[]%
+% \macro@font
+ \MacroFont
+ \leftskip\@totalleftmargin \advance\leftskip\MacroIndent
+ \rightskip\z@ \parindent\z@ \parfillskip\@flushglue
+% \end{macrocode}
+% 按照 \LaTeXe{} 中 \tn{verbatim} 环境中定义 \tn{par},使得空行
+% 可以原样输出,否则空行会被吃掉。
+% \begin{macrocode}
+ \blank@linefalse \def\par{\ifblank@line
+ \leavevmode\fi
+ \blank@linetrue\@@par
+ \penalty\interlinepenalty}
+% \end{macrocode}
+% \tn{obeylines} 将把回车符 |^^M| 变成 \tn{par}。
+% 接下来将所有特殊符号的类别码设为 12,即“其他”类。
+% \begin{macrocode}
+ \obeylines
+ \let\do\do@noligs \verbatim@nolig@list
+ \let\do\@makeother \dospecials
+% \end{macrocode}
+% 相当于退出 |\begin{list}| 和 |\begin{minipage}|。
+% \begin{macrocode}
+ \global\@newlistfalse
+ \global\@minipagefalse
+% \end{macrocode}
+% 初始化交叉引用功能。
+% \begin{macrocode}
+ \init@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@code,\sxmacro@code}
+% 重新实现 \env{macrocode} 与 \env{macrocode*} 环境的核心功能,
+% 将对代码逐行处理。后者会将空格显示为“\verb*| |”。
+% \begin{macrocode}
+\cs_set_protected_nopar:Npn \xmacro@code
+ { \@@_marco_code:w }
+\cs_set_protected_nopar:Npn \sxmacro@code
+ {
+ \fontspec_print_visible_spaces:
+ \xmacro@code
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_marco_code:w}
+% \begin{macrocode}
+\cs_new_protected_nopar:Npn \@@_marco_code:w
+ {
+% \end{macrocode}
+% 根据 \tn{codeline@index} 是否为 |true| 选择是否显示行号。
+% \begin{macrocode}
+ \ifcodeline@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@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@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_e: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@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:eeTF { \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_e: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@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@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:eeTF
+ { \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@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@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@extractdefault { HD.#1 } { guard@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@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@newlist { fdudoc }
+\zref@newprop { guard@end } [ 1 ]
+ { \int_eval:n { \c@HD@hypercount - 1 } }
+\zref@addprop { fdudoc } { guard@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@color
+ { \set@color }
+ { \@@_select_color: }
+ \seq_gpush:No \g_@@_slash_color_seq { \current@color }
+ }
+\cs_new_protected_nopar:Npn \@@_slash_color:
+ {
+ \seq_gpop:NNTF \g_@@_slash_color_seq \current@color
+ {
+ \set@color
+ \seq_gpush:No \g_@@_star_color_seq { \current@color }
+ }
+% TODO: 需要报错:star 与 slash 没有匹配
+ { \BOOM }
+ }
+\cs_new_protected_nopar:Npn \@@_pm_color:
+ {
+ \seq_get:NNTF \g_@@_star_color_seq \current@color
+ { \set@color }
+ {
+ \@@_select_color:
+ \seq_gpush:No \g_@@_star_color_seq { \current@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@series}
+% 设置模块标记的色系。
+% \begin{macrocode}
+\cs_new_protected_nopar:Npn \@@_select_color:
+ { \color { guard@series!!+ } }
+\definecolorseries { guard@series }
+ { cmyk } { last } { blue } { purple }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% 设置色系的增量大小。可选参数 |3| 意味着基色(blue)与
+% 末色(purple)之间将等分为三份。该数字比嵌套最大深度小 1。
+% \begin{macrocode}
+\resetcolorseries [ 3 ] { guard@series }
+% \end{macrocode}
+%
+% \begin{macro}[int]{verb@guard,at@guard,code@gray}
+% 设置颜色。
+% \begin{macrocode}
+\definecolor { verb@guard } { named } { MaterialLime600 }
+\definecolor { at@guard } { named } { MaterialPink }
+\definecolor { code@gray } { named } { MaterialGrey }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_module_angle:n}
+% 输出“$\langle\cdots\rangle$”。
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_module_angle:n #1
+ { < #1 > }
+% { \textlangle #1 \textrangle }
+% { \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@CodelineNo
+ \hbox_overlap_left:n
+ {
+ \hbox_to_wd:nn
+ { \MacroIndent }
+ {
+ \HD@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@gray } \normalfont \sffamily \tiny }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[int]{\HD@SetMacroIndent}
+% 设置代码缩进(行号一栏的宽度)。该命令会写进 |.aux| 辅助文件,
+% 以便在二次编译时确定最大行号宽度。
+% \begin{macrocode}
+\cs_set_protected:Npn \HD@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@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@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@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@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@aux
+ \char_set_active_eq:NN ( \defaultval@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@versionitem}
+% 版本条目标签。如果版本号不在 \cs{g_@@_version_date_prop} 的
+% key 里面,则利用未定义的 \cs{BOOM} 报错。
+% \begin{macrocode}
+\cs_new_protected:Npn \CTEX@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@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@theglossary}
+% 该命令由 \pkg{hypdoc} 宏包定义,用于存放标准文档类 \cls{book}
+% 中定义的 \tn{theindex} 命令。
+% 此处的补丁将在版本号一行最后加上修改日期。
+% \begin{macrocode}
+\ctex_patch_cmd:Nnn \HDorg@theglossary
+ { \let \item \@idxitem }
+ { \let \item \CTEX@versionitem }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[int]{\@wrglossary}
+% 该命令由 \LaTeXe{} 内核定义,又由 \pkg{hypdoc} 宏包作了修改。
+% 此处的补丁使得修订记录条目的页码能够指向对应行。
+% \begin{macrocode}
+\ctex_patch_cmd:Nnn \@wrglossary
+ { hdpindex }
+ {
+ \ifnum \c@HD@hypercount = \z@
+ hdpindex
+ \else
+ hdclindex { \the \c@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@first@penalty { \the \lastpenalty } \unpenalty
+ \ifnum \lastpenalty = \@M
+ \unpenalty
+ \else
+ \penalty \save@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@section,\l@subsection}
+% 修改目录条目的缩进。
+% \begin{macrocode}
+\ctex_patch_cmd:Nnn \l@section { 2.5em } { 1.5em }
+\ctex_patch_cmd:Nnn \l@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@thebibliography}
+% 参考文献一节需要编号。
+% \begin{macrocode}
+\ctex_patch_cmd:Nnn \HDorg@thebibliography
+ { \section* } { \section }
+\cs_set_eq:NN \thebibliography \HDorg@thebibliography
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\GlossaryParms}
+% 修改修订记录中的一些缩进。
+% \begin{macrocode}
+\@@_appto_cmd:Nn \GlossaryParms
+ {
+ \raggedcolumns
+ \cs_set_eq:NN \Hy@writebookmark \HDorg@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@LaTeXe}
+% 由于使用了 \pkg{unicode-math},需要额外修改 \pkg{hologo} 中的
+% \tn{LaTeXe} 命令,以使粗体正常显示。
+% \begin{macrocode}
+\ctex_patch_cmd:Nnn \HoLogo@LaTeXe
+ { \hbox { \HOLOGO@MathSetup 2 $ _{ \textstyle \varepsilon } $ } }
+ {
+ \hbox
+ {
+ \mathsurround 0pt \relax
+ 2
+ \if b \expandafter \@car \f@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@SpecialEnvIndex}
+% \pkg{hypdoc} 宏包重新定义了 \tn{SpecialEnvIndex} 命令,因此需要
+% 修改内部定义。
+% \begin{macrocode}
+\ctex_patch_cmd:Nnn \HDorg@SpecialEnvIndex
+ { (environment) } { ~ 环境 }
+\ctex_patch_cmd:Nnn \HDorg@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 \ttfamily }
+% \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_drop:N } { \MacroFont \hbox_unpack_drop:N }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_meta_original:n}
+% 改用文本模式显示尖括号。
+% \begin{macrocode}
+\__fdudoc_patch_cmd:Nnn \@@_meta_original:n
+ { \ensuremath \langle } { \textlangle }
+\__fdudoc_patch_cmd:Nnn \@@_meta_original:n
+ { \ensuremath \rangle } { \textrangle }
+% \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_drop: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@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:eeTF {#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@wrindex }
+ {
+ \str_case:nnF {#7}
+ {
+ { main } { \codeline@wrindex }
+ { usage } { \index }
+ }
+ { \HD@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@font \c_space_tl
+ \l_@@_index_escaped_macro_tl
+ }
+ \encapchar
+ hdclindex { \the \c@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 = { } } }
+ \@@_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}
+%
+% 设置 PDF 字符串中的命令替换。
+% \begin{macrocode}
+\pdfstringdefDisableCommands{%
+ \let\path\meta
+ \let\opt\@firstofone}
+% \end{macrocode}
+%
+% \begin{macro}[int]{\@multitoc@starttoc,\@starttoc}
+% 目录分栏,相当于调用 \pkg{multitoc} 宏包。
+% \begin{macrocode}
+\let\@multitoc@starttoc\@starttoc
+\renewcommand*\@starttoc[1]{%
+ \begin{multicols}{2}%
+ \@multitoc@starttoc{#1}%
+ \end{multicols}}
+% \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}
+%
+% \changes{v0.7c}{2019/02/08}{修改宏包手册主要字体。}
+%
+% 西文字体。为兼容 macOS,系统字体需使用字体名,而 \TeXLive{}
+% 中的字体需使用文件名。
+% \begin{macrocode}
+\setmainfont{libertinusserif}[%
+ Extension = .otf,
+ UprightFont = *-regular,
+ BoldFont = *-bold,
+ ItalicFont = *-italic,
+ BoldItalicFont = *-bolditalic,
+ Scale = 1.1]
+\setsansfont{IBMPlexSansCondensed}[%
+ Extension = .otf,
+ UprightFont = *-Regular,
+ BoldFont = *-Bold,
+ ItalicFont = *-Italic,
+ BoldItalicFont = *-BoldItalic]
+\setmonofont{Iosevka Slab}[%
+ UprightFont = * Light,
+ BoldFont = * Semibold,
+ Scale = MatchLowercase]
+\setmathfont{libertinusmath-regular.otf}
+% \end{macrocode}
+%
+% 中文字体。
+% \begin{macrocode}
+\setCJKmainfont{Source Han Serif SC}[%
+ ItalicFont = FZKai-Z03,
+ RawFeature = +fwid]
+\setCJKsansfont{Source Han Sans SC}[%
+ ItalicFont = *,
+ RawFeature = +fwid]
+\setCJKmonofont{Source Han Sans SC}[%
+ UprightFont = * Normal,
+ BoldFont = * Bold,
+ AutoFakeSlant = 0.1763, % = tan(10 deg)
+ Scale = 0.8903,
+ RawFeature = +fwid]
+% \end{macrocode}
+%
+% 版式排版格式。
+% \begin{macrocode}
+\ctexset{%
+ section/name = {第,节},
+ section/format+ = \raggedright,
+ paragraph/runin = false,
+ paragraph/numbering = false,
+ punct = kaiming}
+\setcounter{secnumdepth}{4}
+\setcounter{tocdepth}{3}
+\pagestyle{plain}
+% \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@id}
+% 重新定义 \pkg{threeparttable} 包的 \env{tablenotes} 环境,
+% 用于表格的注释。
+% \begin{macrocode}
+\renewlist{tablenotes}{description}{1}
+\setlist[tablenotes]{%
+ format=\normalfont\tnote@item, align=right,
+ listparindent=\parindent, labelindent=\tabcolsep,
+ leftmargin=*, rightmargin=\tabcolsep,
+ after=\@noparlisttrue}
+\AtBeginEnvironment{tablenotes}{%
+ \setlength\parindent{2\ccwd}%
+ \normalfont\footnotesize}
+\AtBeginEnvironment{threeparttable}{%
+ \stepcounter{tpt@id}%
+ \edef\curr@tpt@id{tpt@\arabic{tpt@id}}}
+\newcounter{tpt@id}
+% \end{macrocode}
+% \end{variable}
+% \end{environment}
+%
+% \begin{macro}[int]{\tnote@item,\TPTtagStyle}
+% 为 \tn{tnote} 增加超链接。
+% \begin{macrocode}
+\def\tnote@item#1{%
+ \Hy@raisedlink{\hyper@anchor{\curr@tpt@id-#1}}#1}
+\def\TPTtagStyle#1{\hyperlink{\curr@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@addto@macro\UrlBreaks{\UrlOrds}
+\g@addto@macro\UrlBreaks{\UrlAlphabet}
+\g@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:}
+% 部分命令之后的特殊符号($\symbol{"263A}$ 或 $\symbol{"263B}$),表明其不同用法。
+% 这里的“exp”和“rexp”分别源自 \LaTeX3 中的“expandable”
+% 和“restricted-expandable”。
+% \begin{macrocode}
+\newcommand*\exptarget{\Hy@raisedlink{\hypertarget{expstar}{}}}
+\newcommand*\rexptarget{\Hy@raisedlink{\hypertarget{rexpstar}{}}}
+\newcommand*\expstar{\hyperlink{expstar}{$\symbol{"263B}$}}
+\newcommand*\rexpstar{\hyperlink{rexpstar}{$\symbol{"263A}$}}
+\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@aux,\defaultval@aux}
+% \env{syntax} 中的选项及命令选项。
+% |aux| 结尾的两个命令用于定义利用 |<>| 和 |()| 的简写形式。
+% \begin{macrocode}
+\def\syntaxopt#1{\textit{#1}}
+\def\defaultval#1{\textbf{\textup{#1}}}
+\def\syntaxopt@aux#1>{\syntaxopt{#1}}
+\def\defaultval@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@cs,\codedoc@tn}
+% 控制序列。
+%^^A Colors are used for debug.
+% \begin{macrocode}
+% \let\codedoc@cs=\cs
+% \let\codedoc@tn=\tn
+% \renewcommand*\cs[2][]{%
+% \textcolor{MaterialIndigo}{\codedoc@cs[#1]{#2}}}
+% \renewcommand*\tn[2][]{%
+% \textcolor{MaterialPink}{\codedoc@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}
+%
+% \paragraph{示例代码环境}
+%
+% \pkg{listings} 宏包中连字符 |-| 原本以数学模式输出,此处改为普通文本。
+% 见 \url{https://tex.stackexchange.com/a/33188}。
+% \begin{macrocode}
+\lst@CCPutMacro\lst@ProcessOther {"2D}{\lst@ttfamily{-{}}{-{}}}
+\@empty\z@\@empty
+% \end{macrocode}
+%
+% \changes{v0.5}{2017/09/05}{[\pkg{fdudoc}] 移除 \pkg{listings}
+% 关键字定义文件。}
+%
+% 定义几种代码样式。
+% \begin{macro}[int]{style@base}
+% \begin{macrocode}
+\lstdefinestyle{style@base}
+ {
+ basewidth = 0.5 em,
+ gobble = 3,
+ lineskip = 2 pt,
+ frame = l,
+ framerule = 1 pt,
+ framesep = 0 pt,
+ escapeinside = {(*}{*)},
+ basicstyle = \small\ttfamily\color{MaterialGrey900},
+ keywordstyle = \bfseries\color{MaterialIndigo},
+ commentstyle = \itshape\color{MaterialGrey600},
+ stringstyle = \color{MaterialRed},
+ backgroundcolor = \color{MaterialGrey50}
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[int]{style@shell}
+% \begin{macrocode}
+\lstdefinestyle{style@shell}
+ {
+ style = style@base,
+ rulecolor = \color{MaterialPink},
+ language = bash,
+ alsoletter = {-},
+ emphstyle = \color{MaterialGreen800}
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[int]{style@latex}
+% \begin{macrocode}
+\lstdefinestyle{style@latex}
+ {
+ style = style@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@syntax}
+% \begin{macrocode}
+\lstdefinestyle{style@syntax}
+ {
+ basewidth = 0.5 em,
+ gobble = 6,
+ escapeinside = {(*}{*)},
+ language = [LaTeX]TeX,
+ alsoletter = {*, -},
+ basicstyle = \footnotesize\ttfamily\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@shell, #1}}{}
+\lstnewenvironment{latexexample}[1][]{%
+ \lstset{style=style@latex, #1}}{}
+% \end{macrocode}
+% \end{environment}
+% \end{environment}
+%
+% \begin{environment}{fdusyntax}
+% 语法说明。用于代替 \cls{l3doc} 中的 \env{syntax} 环境。
+% \begin{macrocode}
+\lstnewenvironment{fdusyntax}[1][]{%
+ \lstset{style=style@syntax, #1}\vspace{-1.8ex}}{}
+%</doc>
+% \end{macrocode}
+% \end{environment}
+%
+% \changes{v0.7c}{2019/03/15}{不再附带 \pkg{latexmk} 配置文件。}
+%
+% \clearpage
+%
+% \end{implementation}
+%
diff --git a/macros/latex/contrib/fduthesis/fduthesis-en.pdf b/macros/latex/contrib/fduthesis/fduthesis-en.pdf
new file mode 100644
index 0000000000..abbd146003
--- /dev/null
+++ b/macros/latex/contrib/fduthesis/fduthesis-en.pdf
Binary files differ
diff --git a/macros/latex/contrib/fduthesis/fduthesis-logo.dtx b/macros/latex/contrib/fduthesis/fduthesis-logo.dtx
new file mode 100644
index 0000000000..46edb6afca
--- /dev/null
+++ b/macros/latex/contrib/fduthesis/fduthesis-logo.dtx
@@ -0,0 +1,3537 @@
+% \iffalse meta-comment
+%
+% Copyright (C) 2017--2019 by Xiangdong Zeng <xdzeng96@gmail.com>
+%
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either
+% version 1.3c of this license or (at your option) any later
+% version. The latest version of this license is in:
+%
+% http://www.latex-project.org/lppl.txt
+%
+% and version 1.3 or later is part of all distributions of
+% LaTeX version 2005/12/01 or later.
+%
+% This work has the LPPL maintenance status `maintained'.
+%
+% The Current Maintainer of this work is Xiangdong Zeng.
+%
+% \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@name } { \c_@@_default_arg_tl, #1 } }
+% + new
+% - original
+\NewDocumentCommand \fduname { t+ t- O { } }
+ {
+ \@@_tikz:nx
+ {
+ \IfBooleanTF {#1}
+ { \fdulogo@name@new }
+ {
+ \IfBooleanTF {#2}
+ { \fdulogo@name@original } { \fdulogo@name }
+ }
+ }
+ { \c_@@_default_arg_tl, #3 }
+ }
+% \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:nx
+ {
+ \IfBooleanTF {#1}
+ {
+ \IfBooleanTF {#2}
+ { \fdulogo@emblem@new@reversed } { \fdulogo@emblem@new }
+ }
+ {
+ \IfBooleanTF {#2}
+ { \fdulogo@emblem@reversed } { \fdulogo@emblem }
+ }
+ }
+ { \c_@@_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@motto } { \c_@@_default_arg_tl, #1 } }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{variable}{\c_@@_default_arg_tl}
+% 默认参数。
+% \begin{macrocode}
+\tl_const:Nn \c_@@_default_arg_tl { x = 1 pt, y = 1 pt }
+% \end{macrocode}
+% \end{variable}
+%
+% \begin{macro}{\@@_tikz:nn,\@@_tikz:nx}
+% 对 \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 }
+% \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@name,
+% \fdulogo@name@original,
+% \fdulogo@name@new}
+% 各版本校名。
+% \begin{macrocode}
+\def\fdulogo@name{%
+ \fill \fdulogo@name@fu
+ \fdulogo@name@dan
+ \fdulogo@name@da
+ \fdulogo@name@xue;}
+\def\fdulogo@name@original{%
+ \fill \fdulogo@name@original@fu
+ \fdulogo@name@original@dan
+ \fdulogo@name@original@da
+ \fdulogo@name@original@xue;}
+\def\fdulogo@name@new{%
+ \fill \fdulogo@name@new@fu
+ \fdulogo@name@new@dan
+ \fdulogo@name@new@da
+ \fdulogo@name@new@xue;}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[int]{\fdulogo@emblem,
+% \fdulogo@emblem@reversed,
+% \fdulogo@emblem@text,
+% \fdulogo@emblem@year}
+% 校徽。
+% \begin{macrocode}
+\def\fdulogo@emblem{%
+ \fill \fdulogo@emblem@kernel
+ \fdulogo@emblem@text
+ \fdulogo@emblem@year
+ \fdulogo@emblem@ring@inner@i
+ \fdulogo@emblem@ring@inner@ii
+ \fdulogo@emblem@ring@outer@i
+ \fdulogo@emblem@ring@outer@ii;}
+\def\fdulogo@emblem@reversed{%
+ \fill \fdulogo@emblem@text
+ \fdulogo@emblem@year;
+ \fill[even odd rule]
+ \fdulogo@emblem@kernel
+ \fdulogo@emblem@ring@inner@i
+ \fdulogo@emblem@ring@outer@i
+ \fdulogo@emblem@ring@outer@ii;}
+\def\fdulogo@emblem@text{%
+ \fdulogo@emblem@F
+ \fdulogo@emblem@U@i
+ \fdulogo@emblem@D
+ \fdulogo@emblem@A
+ \fdulogo@emblem@N@i
+ \fdulogo@emblem@U@ii
+ \fdulogo@emblem@N@ii
+ \fdulogo@emblem@I@i
+ \fdulogo@emblem@V
+ \fdulogo@emblem@E
+ \fdulogo@emblem@R
+ \fdulogo@emblem@S
+ \fdulogo@emblem@I@ii
+ \fdulogo@emblem@T
+ \fdulogo@emblem@Y}
+\def\fdulogo@emblem@year{%
+ \fdulogo@emblem@one
+ \fdulogo@emblem@nine
+ \fdulogo@emblem@zero
+ \fdulogo@emblem@five}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[int]{\fdulogo@emblem@new,
+% \fdulogo@emblem@new@reversed,
+% \fdulogo@emblem@new@text,
+% \fdulogo@emblem@new@year}
+% 校徽(重修版)。
+% \begin{macrocode}
+\def\fdulogo@emblem@new{%
+ \fill \fdulogo@emblem@new@kernel
+ \fdulogo@emblem@new@text
+ \fdulogo@emblem@new@year;
+ \fill[even odd rule]
+ \fdulogo@emblem@new@ring@inner@i
+ \fdulogo@emblem@new@ring@inner@ii
+ \fdulogo@emblem@new@ring@outer@i
+ \fdulogo@emblem@new@ring@outer@ii;}
+\def\fdulogo@emblem@new@reversed{%
+ \fill \fdulogo@emblem@new@text
+ \fdulogo@emblem@new@year;
+ \fill[even odd rule]
+ \fdulogo@emblem@new@kernel
+ \fdulogo@emblem@new@ring@inner@i
+ \fdulogo@emblem@new@ring@outer@i
+ \fdulogo@emblem@new@ring@outer@ii;}
+\def\fdulogo@emblem@new@text{%
+ \fdulogo@emblem@new@F
+ \fdulogo@emblem@new@U@i
+ \fdulogo@emblem@new@D
+ \fdulogo@emblem@new@A
+ \fdulogo@emblem@new@N@i
+ \fdulogo@emblem@new@U@ii
+ \fdulogo@emblem@new@N@ii
+ \fdulogo@emblem@new@I@i
+ \fdulogo@emblem@new@V
+ \fdulogo@emblem@new@E
+ \fdulogo@emblem@new@R
+ \fdulogo@emblem@new@S
+ \fdulogo@emblem@new@I@ii
+ \fdulogo@emblem@new@T
+ \fdulogo@emblem@new@Y}
+\def\fdulogo@emblem@new@year{%
+ \fdulogo@emblem@new@one
+ \fdulogo@emblem@new@nine
+ \fdulogo@emblem@new@zero
+ \fdulogo@emblem@new@five}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[int]{\fdulogo@motto,
+% \fdulogo@motto@i,
+% \fdulogo@motto@ii}
+% 校训。
+% \begin{macrocode}
+\def\fdulogo@motto{%
+ \fill \fdulogo@motto@i
+ \fdulogo@motto@ii;}
+\def\fdulogo@motto@i{%
+ \fdulogo@motto@bo
+ \fdulogo@motto@xue
+ \fdulogo@motto@er@i
+ \fdulogo@motto@du
+ \fdulogo@motto@zhi}
+\def\fdulogo@motto@ii{%
+ \fdulogo@motto@qie
+ \fdulogo@motto@wen
+ \fdulogo@motto@er@ii
+ \fdulogo@motto@jin
+ \fdulogo@motto@si}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[int]{\fduthesis@cover}
+% \cls{fduthesis} 用户手册的封面图案。内部使用。
+% \begin{macrocode}
+\def\fduthesis@cover{%
+ \hspace{1.5cm}
+ \begin{tikzpicture}[x=1pt, y=1pt, scale=1.1, color=MaterialGrey]
+ \useasboundingbox ( 100, -140) rectangle ( 800, 800);
+ \fdulogo@emblem@new
+ \end{tikzpicture}
+ \begin{tikzpicture}[x=1pt, y=1pt]
+ \useasboundingbox ( 750, -150) rectangle (1350, 850);
+ \fill \fdulogo@motto@i;
+ \end{tikzpicture}
+ \begin{tikzpicture}[x=1pt, y=1pt]
+ \useasboundingbox (1280, 10) rectangle (1880, 1210);
+ \fill \fdulogo@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@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@name@fu{%
+ ( 86.7942, 309.2300)
+ .. controls ( 90.5275, 306.4300) and ( 95.2742, 304.1366) .. ( 96.8075, 299.3766)
+ .. controls ( 100.0742, 292.9500) and ( 100.7409, 285.6966) .. ( 101.0875, 278.6033)
+ .. controls ( 97.5809, 266.5100) and ( 89.4742, 256.6300) .. ( 83.2742, 245.8700)
+ .. controls ( 76.7942, 235.8433) and ( 70.7809, 225.5100) .. ( 64.2209, 215.5366)
+ .. controls ( 62.2475, 212.8833) and ( 62.1809, 209.4833) .. ( 61.4475, 206.3766)
+ .. controls ( 66.4475, 207.6300) and ( 71.0075, 205.0833) .. ( 75.6875, 203.8033)
+ .. controls ( 77.3142, 200.6566) and ( 78.7809, 197.4166) .. ( 80.5542, 194.3366)
+ .. controls ( 80.1942, 188.6033) and ( 77.7142, 183.3233) .. ( 74.7275, 178.5233)
+ .. controls ( 68.7009, 167.3100) and ( 62.8609, 155.9900) .. ( 56.7542, 144.8166)
+ .. controls ( 54.8742, 140.9233) and ( 54.1942, 136.6033) .. ( 52.9142, 132.5100)
+ .. controls ( 54.6075, 129.1233) and ( 56.9942, 126.0833) .. ( 58.5009, 122.6166)
+ .. controls ( 59.6609, 116.9766) and ( 61.0875, 111.2700) .. ( 60.5275, 105.4566)
+ .. controls ( 59.1542, 78.2566) and ( 58.2209, 51.0166) .. ( 56.6875, 23.8300)
+ .. controls ( 54.5275, 19.4433) and ( 53.5675, 12.8033) .. ( 47.7542, 12.0300)
+ .. controls ( 42.1009, 14.5100) and ( 39.0342, 20.0966) .. ( 37.2342, 25.7100)
+ .. controls ( 36.2475, 37.2300) and ( 41.3675, 48.0033) .. ( 42.1542, 59.3500)
+ .. controls ( 43.3142, 69.3366) and ( 41.5942, 79.3766) .. ( 41.4742, 89.3900)
+ .. controls ( 41.7275, 92.8700) and ( 39.8342, 95.8166) .. ( 38.2075, 98.7100)
+ .. controls ( 36.5942, 98.2166) and ( 34.9809, 97.7366) .. ( 33.3542, 97.2433)
+ .. controls ( 28.5409, 89.8300) and ( 23.4075, 82.6300) .. ( 18.5409, 75.2566)
+ .. controls ( 16.6209, 75.7633) and ( 14.6742, 76.1500) .. ( 12.8075, 76.8166)
+ .. controls ( 12.0742, 78.9366) and ( 11.0209, 81.4300) .. ( 12.5409, 83.4566)
+ .. controls ( 20.9409, 99.4300) and ( 29.6342, 115.2300) .. ( 38.1942, 131.1100)
+ .. controls ( 42.9409, 140.4566) and ( 48.5942, 149.3633) .. ( 52.6875, 159.0033)
+ .. controls ( 55.2875, 168.0433) and ( 60.4075, 176.5100) .. ( 59.7942, 186.2033)
+ .. controls ( 54.7675, 185.9366) and ( 51.8342, 181.2300) .. ( 47.5675, 179.1633)
+ .. controls ( 44.7142, 181.4300) and ( 41.8742, 183.7100) .. ( 39.0475, 186.0166)
+ .. controls ( 40.8475, 191.2700) and ( 41.7809, 196.9233) .. ( 44.8609, 201.6566)
+ .. controls ( 52.8209, 215.0433) and ( 60.7409, 228.4566) .. ( 68.7809, 241.8033)
+ .. controls ( 74.7142, 252.7900) and ( 83.6609, 262.9900) .. ( 83.8475, 276.1233)
+ .. controls ( 83.0609, 284.1766) and ( 81.9542, 292.1900) .. ( 81.0875, 300.2433)
+ .. controls ( 82.9409, 303.2700) and ( 84.8209, 306.2833) .. ( 86.7942, 309.2300)
+ ( 143.7142, 60.9633)
+ .. controls ( 144.8742, 59.8566) and ( 146.0609, 58.7766) .. ( 147.2609, 57.7233)
+ .. controls ( 149.3809, 57.3500) and ( 151.5409, 57.9900) .. ( 153.6609, 58.1100)
+ .. controls ( 154.4609, 59.6566) and ( 155.2742, 61.2033) .. ( 156.0875, 62.7500)
+ .. controls ( 152.8742, 64.4566) and ( 149.3942, 65.5500) .. ( 145.8875, 66.4700)
+ .. controls ( 145.1675, 64.6433) and ( 144.4342, 62.8033) .. ( 143.7142, 60.9633)
+ ( 144.9142, 141.6700)
+ .. controls ( 143.5409, 139.9633) and ( 143.7942, 137.7100) .. ( 143.5275, 135.6700)
+ .. controls ( 146.1275, 135.7233) and ( 148.4209, 137.0966) .. ( 150.0742, 139.0300)
+ .. controls ( 154.6342, 143.3366) and ( 153.2209, 150.2166) .. ( 154.3675, 155.7900)
+ .. controls ( 151.3142, 151.0166) and ( 148.1409, 146.3233) .. ( 144.9142, 141.6700)
+ ( 139.8342, 253.5633)
+ .. controls ( 153.1675, 263.9233) and ( 166.9809, 273.6566) .. ( 180.1942, 284.1766)
+ .. controls ( 184.7409, 283.1900) and ( 188.9809, 281.0700) .. ( 192.2475, 277.7100)
+ .. controls ( 182.2342, 263.0566) and ( 165.9009, 254.7500) .. ( 153.8475, 242.0966)
+ .. controls ( 146.9675, 233.0033) and ( 139.4075, 224.4166) .. ( 132.6742, 215.2166)
+ .. controls ( 126.6342, 204.7900) and ( 121.2209, 194.0033) .. ( 115.5009, 183.3900)
+ .. controls ( 113.8875, 181.0433) and ( 113.8609, 178.2033) .. ( 113.8475, 175.4433)
+ .. controls ( 120.2475, 184.6166) and ( 126.1942, 194.0966) .. ( 132.5409, 203.3100)
+ .. controls ( 140.5809, 217.0166) and ( 152.3809, 229.5633) .. ( 167.9942, 234.2566)
+ .. controls ( 172.1942, 231.6300) and ( 176.0075, 228.2166) .. ( 178.4875, 223.8833)
+ .. controls ( 178.0342, 208.0433) and ( 170.7275, 193.6433) .. ( 166.2475, 178.7100)
+ .. controls ( 159.5542, 161.0033) and ( 159.4875, 141.6966) .. ( 154.9142, 123.4700)
+ .. controls ( 152.0075, 118.1366) and ( 151.2075, 111.0433) .. ( 145.1942, 108.1500)
+ .. controls ( 142.2209, 112.7233) and ( 137.6209, 115.5633) .. ( 132.3009, 116.5766)
+ .. controls ( 129.0609, 111.8966) and ( 125.3409, 107.5100) .. ( 122.4742, 102.5900)
+ .. controls ( 120.1009, 96.5766) and ( 117.7009, 90.3100) .. ( 118.2609, 83.7100)
+ .. controls ( 126.6075, 88.8700) and ( 134.9942, 93.9500) .. ( 143.2875, 99.2033)
+ .. controls ( 149.0342, 101.9766) and ( 155.0342, 104.2300) .. ( 160.8475, 106.8966)
+ .. controls ( 165.3675, 109.0166) and ( 171.9675, 109.1500) .. ( 174.7409, 104.2566)
+ .. controls ( 180.1409, 99.0700) and ( 179.0609, 91.2700) .. ( 179.2609, 84.4700)
+ .. controls ( 176.3409, 77.2566) and ( 172.1275, 70.4566) .. ( 170.9142, 62.6433)
+ .. controls ( 177.9942, 55.1233) and ( 184.7675, 47.1366) .. ( 193.6875, 41.6833)
+ .. controls ( 194.3409, 38.9500) and ( 195.1809, 36.1766) .. ( 194.7142, 33.3233)
+ .. controls ( 192.9409, 33.1233) and ( 191.1809, 32.9233) .. ( 189.4209, 32.7100)
+ .. controls ( 185.2742, 35.5233) and ( 180.1409, 37.2033) .. ( 177.1409, 41.4166)
+ .. controls ( 173.5942, 46.1633) and ( 168.6609, 49.5233) .. ( 163.8209, 52.8166)
+ .. controls ( 161.2209, 47.7900) and ( 157.3009, 43.5900) .. ( 152.3409, 40.8300)
+ .. controls ( 145.8742, 45.2833) and ( 139.7142, 50.2300) .. ( 134.7275, 56.3500)
+ .. controls ( 132.9275, 59.2300) and ( 132.1409, 62.5900) .. ( 130.9409, 65.7366)
+ .. controls ( 132.4742, 69.5633) and ( 134.5942, 73.1233) .. ( 137.2475, 76.2700)
+ .. controls ( 143.8875, 74.4700) and ( 150.4742, 72.5233) .. ( 157.1142, 70.7366)
+ .. controls ( 160.5809, 73.3633) and ( 164.7542, 75.8966) .. ( 166.1809, 80.2566)
+ .. controls ( 168.0075, 85.7366) and ( 170.2075, 91.0566) .. ( 172.3409, 96.4300)
+ .. controls ( 169.0609, 96.7766) and ( 165.7409, 98.0033) .. ( 162.4609, 97.5900)
+ .. controls ( 155.7409, 94.6833) and ( 148.9542, 91.7900) .. ( 142.8475, 87.7233)
+ .. controls ( 137.5275, 84.1766) and ( 131.2475, 81.9633) .. ( 126.7675, 77.2433)
+ .. controls ( 121.8475, 72.3766) and ( 116.7542, 67.6566) .. ( 111.8875, 62.7233)
+ .. controls ( 106.6209, 55.9900) and ( 101.4609, 49.1500) .. ( 96.4875, 42.2033)
+ .. controls ( 93.5409, 36.4166) and ( 90.7009, 30.5766) .. ( 87.4209, 24.9633)
+ .. controls ( 83.8742, 26.4433) and ( 79.1942, 28.0433) .. ( 78.4609, 32.3500)
+ .. controls ( 80.4875, 37.9633) and ( 83.3942, 43.2166) .. ( 85.6075, 48.7500)
+ .. controls ( 87.5142, 54.0433) and ( 92.4875, 57.3633) .. ( 95.1142, 62.2566)
+ .. controls ( 96.7542, 65.4166) and ( 98.5409, 68.4833) .. ( 100.0875, 71.6833)
+ .. controls ( 102.4075, 76.5100) and ( 102.5809, 82.0700) .. ( 105.1275, 86.8033)
+ .. controls ( 109.4475, 94.0833) and ( 113.9275, 101.2700) .. ( 118.0875, 108.6300)
+ .. controls ( 121.1142, 116.9233) and ( 125.2342, 124.8166) .. ( 127.6742, 133.3100)
+ .. controls ( 127.4075, 142.2166) and ( 125.8609, 151.1366) .. ( 127.3542, 160.0433)
+ .. controls ( 126.9542, 166.3766) and ( 130.6875, 171.6033) .. ( 133.5942, 176.8833)
+ .. controls ( 135.0342, 179.4166) and ( 138.3142, 179.6433) .. ( 140.7675, 180.6166)
+ .. controls ( 145.4075, 173.8700) and ( 150.7809, 167.6833) .. ( 155.8742, 161.2833)
+ .. controls ( 154.0075, 168.7500) and ( 157.6609, 175.6966) .. ( 159.0209, 182.8833)
+ .. controls ( 161.9675, 195.1900) and ( 167.3809, 207.0700) .. ( 167.0475, 219.9633)
+ .. controls ( 164.4742, 219.7633) and ( 161.6475, 220.4566) .. ( 159.3409, 219.0300)
+ .. controls ( 154.6342, 216.4300) and ( 149.4475, 214.2566) .. ( 146.0742, 209.8700)
+ .. controls ( 141.9675, 204.5500) and ( 136.8609, 200.0166) .. ( 133.0875, 194.4433)
+ .. controls ( 126.7809, 180.7633) and ( 120.6475, 166.8966) .. ( 117.1542, 152.1766)
+ .. controls ( 111.5409, 136.2966) and ( 108.6342, 119.4300) .. ( 100.7275, 104.4300)
+ .. controls ( 99.1809, 102.6700) and ( 96.7542, 101.9766) .. ( 94.7942, 100.7633)
+ .. controls ( 93.0742, 102.0433) and ( 91.3542, 103.3233) .. ( 89.6209, 104.5900)
+ .. controls ( 88.0609, 110.3900) and ( 84.3275, 116.4566) .. ( 86.7409, 122.5233)
+ .. controls ( 92.4875, 139.1100) and ( 97.7142, 155.8700) .. ( 103.4742, 172.4433)
+ .. controls ( 111.6475, 187.4166) and ( 119.7675, 202.4166) .. ( 127.8875, 217.4166)
+ .. controls ( 139.8475, 232.6966) and ( 152.0475, 247.8300) .. ( 163.9275, 263.1900)
+ .. controls ( 153.6609, 255.1633) and ( 145.2075, 245.0166) .. ( 135.3809, 236.4700)
+ .. controls ( 130.4742, 233.8433) and ( 124.7275, 232.6300) .. ( 120.5275, 228.7633)
+ .. controls ( 115.0742, 223.9233) and ( 109.7809, 218.8966) .. ( 104.1542, 214.2566)
+ .. controls ( 101.8609, 217.1100) and ( 99.0475, 219.7900) .. ( 97.9542, 223.3900)
+ .. controls ( 96.0609, 230.8833) and ( 96.8209, 239.1233) .. ( 100.5009, 245.9633)
+ .. controls ( 104.3409, 255.2833) and ( 108.8875, 264.2833) .. ( 112.6342, 273.6433)
+ .. controls ( 113.7542, 277.2166) and ( 116.7409, 279.4966) .. ( 119.5009, 281.7633)
+ .. controls ( 121.5675, 280.5900) and ( 123.7409, 279.5633) .. ( 125.6342, 278.1100)
+ .. controls ( 128.2742, 274.7633) and ( 129.7009, 270.6966) .. ( 131.1809, 266.7633)
+ .. controls ( 129.2609, 259.3766) and ( 126.9009, 252.0833) .. ( 125.5675, 244.5500)
+ .. controls ( 131.0075, 246.4033) and ( 135.1809, 250.3766) .. ( 139.8342, 253.5633)}
+% \end{macrocode}
+%
+% 旦。
+% \begin{macrocode}
+\def\fdulogo@name@dan{%
+ ( 318.2875, 86.5233)
+ .. controls ( 328.1942, 87.0033) and ( 337.1409, 91.8166) .. ( 346.1142, 95.5900)
+ .. controls ( 351.2075, 94.9366) and ( 356.2075, 93.6966) .. ( 360.8342, 91.4166)
+ .. controls ( 361.5942, 89.1100) and ( 362.3409, 86.7900) .. ( 363.1142, 84.4700)
+ .. controls ( 357.7809, 79.7900) and ( 350.7009, 78.4700) .. ( 344.0742, 76.6700)
+ .. controls ( 343.5142, 77.6433) and ( 342.4209, 79.5900) .. ( 341.8742, 80.5633)
+ .. controls ( 332.2609, 77.5633) and ( 322.4475, 75.2700) .. ( 312.8209, 72.3233)
+ .. controls ( 306.6875, 70.8433) and ( 301.5409, 66.9766) .. ( 296.4875, 63.3900)
+ .. controls ( 292.7409, 58.6300) and ( 291.0075, 52.1233) .. ( 285.5009, 48.8700)
+ .. controls ( 279.9809, 44.6566) and ( 272.3009, 47.8033) .. ( 268.4475, 52.7500)
+ .. controls ( 266.5142, 56.8433) and ( 264.1542, 60.8033) .. ( 262.7275, 65.1100)
+ .. controls ( 262.9675, 67.8033) and ( 263.5142, 70.4566) .. ( 263.9675, 73.1233)
+ .. controls ( 267.0875, 73.3900) and ( 270.2342, 73.5366) .. ( 273.3275, 74.0833)
+ .. controls ( 288.4742, 77.6433) and ( 303.1142, 83.0966) .. ( 318.2875, 86.5233)
+ ( 347.6075, 212.4166)
+ .. controls ( 352.2075, 214.7100) and ( 357.2609, 212.5766) .. ( 362.0475, 212.1233)
+ .. controls ( 363.8475, 209.9233) and ( 365.6075, 207.6966) .. ( 367.2875, 205.3900)
+ .. controls ( 364.4475, 193.9233) and ( 356.3142, 184.7500) .. ( 353.1142, 173.4166)
+ .. controls ( 350.1942, 164.2700) and ( 347.5142, 155.0433) .. ( 344.2342, 146.0166)
+ .. controls ( 342.4875, 141.5366) and ( 342.5009, 136.6833) .. ( 341.7409, 132.0033)
+ .. controls ( 340.5542, 124.5900) and ( 339.3675, 117.1633) .. ( 338.1809, 109.7366)
+ .. controls ( 336.3142, 108.5633) and ( 334.4342, 107.3900) .. ( 332.5942, 106.1766)
+ .. controls ( 329.9142, 108.3766) and ( 326.8742, 110.3900) .. ( 325.3542, 113.6166)
+ .. controls ( 323.5142, 117.2433) and ( 321.7009, 121.0966) .. ( 317.7942, 122.8833)
+ .. controls ( 314.3542, 120.2833) and ( 311.0475, 117.4833) .. ( 307.3809, 115.2033)
+ .. controls ( 303.0875, 121.1500) and ( 307.5009, 127.8833) .. ( 309.5275, 133.7633)
+ .. controls ( 308.3275, 143.0566) and ( 300.7942, 151.8300) .. ( 304.5542, 161.3766)
+ .. controls ( 305.9542, 164.1233) and ( 308.5275, 166.0966) .. ( 310.3942, 168.5233)
+ .. controls ( 313.0075, 167.0166) and ( 315.7675, 165.7100) .. ( 318.1675, 163.8433)
+ .. controls ( 322.4742, 158.4833) and ( 326.2075, 152.2966) .. ( 327.1142, 145.3500)
+ .. controls ( 327.9409, 140.3500) and ( 328.7142, 135.3233) .. ( 329.5942, 130.3233)
+ .. controls ( 330.3409, 130.5500) and ( 331.8342, 131.0033) .. ( 332.5942, 131.2166)
+ .. controls ( 335.8342, 146.3766) and ( 340.4342, 161.2033) .. ( 343.7009, 176.3500)
+ .. controls ( 345.0475, 181.0700) and ( 345.9009, 185.9366) .. ( 347.6475, 190.5366)
+ .. controls ( 350.0075, 194.9366) and ( 353.0742, 199.0700) .. ( 353.8075, 204.1500)
+ .. controls ( 347.3275, 204.9100) and ( 341.3275, 201.8700) .. ( 335.7809, 198.9366)
+ .. controls ( 331.4742, 196.4566) and ( 326.5009, 195.1233) .. ( 322.7009, 191.7900)
+ .. controls ( 315.1942, 185.5633) and ( 307.6075, 179.4566) .. ( 300.1942, 173.1233)
+ .. controls ( 296.4742, 170.2433) and ( 294.8075, 165.6966) .. ( 291.9942, 162.0566)
+ .. controls ( 292.4742, 156.1100) and ( 295.6209, 150.9900) .. ( 297.8742, 145.6433)
+ .. controls ( 299.8075, 137.3766) and ( 302.0075, 127.7633) .. ( 297.0609, 120.1500)
+ .. controls ( 295.7942, 117.4033) and ( 293.9409, 115.0166) .. ( 291.9675, 112.7633)
+ .. controls ( 289.5009, 118.0966) and ( 285.5542, 123.2966) .. ( 286.2875, 129.4966)
+ .. controls ( 286.8475, 138.2033) and ( 284.6342, 146.7100) .. ( 283.4475, 155.2700)
+ .. controls ( 286.8342, 162.6166) and ( 286.6742, 170.9366) .. ( 288.9409, 178.6300)
+ .. controls ( 291.6742, 180.8833) and ( 293.7009, 183.8833) .. ( 296.5409, 186.0033)
+ .. controls ( 306.4609, 191.5633) and ( 316.1275, 197.5633) .. ( 325.9942, 203.2166)
+ .. controls ( 333.2742, 206.0966) and ( 340.3009, 209.6166) .. ( 347.6075, 212.4166)}
+% \end{macrocode}
+%
+% 大。
+% \begin{macrocode}
+\def\fdulogo@name@da{%
+ ( 500.5275, 206.5900)
+ .. controls ( 503.9409, 220.1500) and ( 500.1275, 234.4166) .. ( 504.0342, 247.9233)
+ .. controls ( 511.0742, 246.5500) and ( 517.4475, 242.0700) .. ( 519.5542, 234.9766)
+ .. controls ( 516.8342, 217.6700) and ( 512.2475, 200.7233) .. ( 509.4475, 183.4300)
+ .. controls ( 505.9809, 167.8166) and ( 503.0075, 152.0966) .. ( 499.8609, 136.4166)
+ .. controls ( 505.7542, 140.2033) and ( 512.0209, 143.4166) .. ( 517.8075, 147.3766)
+ .. controls ( 519.2075, 148.7366) and ( 519.9809, 150.5900) .. ( 521.0342, 152.2033)
+ .. controls ( 519.7809, 156.3233) and ( 518.8875, 160.7766) .. ( 522.3275, 164.0966)
+ .. controls ( 528.0475, 164.0700) and ( 533.7542, 164.0833) .. ( 539.4609, 164.0700)
+ .. controls ( 541.2475, 162.1766) and ( 544.2875, 160.4433) .. ( 542.7675, 157.4033)
+ .. controls ( 541.9409, 149.9500) and ( 534.7542, 146.4833) .. ( 529.5142, 142.3500)
+ .. controls ( 520.1009, 136.2966) and ( 510.2209, 131.0033) .. ( 500.8075, 124.9366)
+ .. controls ( 503.7142, 118.3233) and ( 507.7009, 112.2833) .. ( 510.8475, 105.7766)
+ .. controls ( 515.5142, 95.1766) and ( 524.4075, 87.4033) .. ( 531.7275, 78.6700)
+ .. controls ( 538.3009, 74.0566) and ( 544.9942, 69.5500) .. ( 551.8875, 65.3766)
+ .. controls ( 556.2742, 63.4833) and ( 560.4475, 61.1100) .. ( 564.1275, 58.0300)
+ .. controls ( 558.1009, 53.8166) and ( 550.7142, 52.7633) .. ( 543.9809, 50.1633)
+ .. controls ( 539.6609, 48.5500) and ( 534.9275, 48.3500) .. ( 530.3809, 48.5100)
+ .. controls ( 520.7409, 51.4833) and ( 513.1009, 59.2433) .. ( 509.7275, 68.7233)
+ .. controls ( 504.2475, 85.4033) and ( 500.0209, 102.4433) .. ( 494.6609, 119.1633)
+ .. controls ( 491.6609, 110.8433) and ( 488.3809, 102.6166) .. ( 485.6475, 94.2033)
+ .. controls ( 481.3542, 87.8966) and ( 477.1809, 81.4700) .. ( 472.7542, 75.2433)
+ .. controls ( 465.7809, 65.4966) and ( 454.3409, 59.7766) .. ( 442.6209, 58.2300)
+ .. controls ( 439.5142, 58.6833) and ( 436.4342, 59.3900) .. ( 433.4875, 60.4833)
+ .. controls ( 430.7809, 61.7366) and ( 429.9275, 64.8566) .. ( 428.5142, 67.2166)
+ .. controls ( 434.0742, 68.1500) and ( 439.7409, 68.5633) .. ( 445.2609, 69.8433)
+ .. controls ( 455.0075, 73.6033) and ( 464.2075, 79.9900) .. ( 469.1809, 89.4166)
+ .. controls ( 473.3675, 98.0166) and ( 479.9009, 105.6033) .. ( 481.1275, 115.4033)
+ .. controls ( 475.2342, 113.8300) and ( 470.8475, 109.4300) .. ( 466.1809, 105.7900)
+ .. controls ( 460.7942, 100.0566) and ( 457.0342, 91.6300) .. ( 448.4609, 90.1500)
+ .. controls ( 445.5142, 95.3233) and ( 444.7142, 101.3100) .. ( 443.6742, 107.0700)
+ .. controls ( 446.9275, 106.2700) and ( 450.1942, 105.5100) .. ( 453.4742, 104.7900)
+ .. controls ( 462.6075, 111.7233) and ( 470.7142, 120.1100) .. ( 480.9009, 125.5633)
+ .. controls ( 485.8209, 128.0433) and ( 487.5809, 133.6966) .. ( 488.7942, 138.6566)
+ .. controls ( 493.1409, 161.2300) and ( 496.2209, 184.0033) .. ( 500.5275, 206.5900)}
+% \end{macrocode}
+%
+% 学。
+% \begin{macrocode}
+\def\fdulogo@name@xue{%
+ ( 747.6209, 258.3633)
+ .. controls ( 750.1542, 256.2166) and ( 752.7409, 254.1500) .. ( 755.3809, 252.1366)
+ .. controls ( 750.8475, 243.3366) and ( 742.2609, 238.2300) .. ( 734.4742, 232.6566)
+ .. controls ( 736.2075, 230.4033) and ( 737.9809, 228.1900) .. ( 739.7942, 226.0033)
+ .. controls ( 743.2742, 226.8166) and ( 746.7675, 227.5500) .. ( 750.2875, 228.2300)
+ .. controls ( 751.4609, 225.4033) and ( 752.6475, 222.5766) .. ( 753.8609, 219.7633)
+ .. controls ( 750.6209, 213.2433) and ( 748.5409, 206.2700) .. ( 746.7809, 199.2300)
+ .. controls ( 748.2209, 197.7100) and ( 749.6742, 196.1766) .. ( 751.1409, 194.6700)
+ .. controls ( 760.7142, 211.4700) and ( 769.8875, 228.4966) .. ( 779.4742, 245.2966)
+ .. controls ( 773.4209, 244.2433) and ( 767.2875, 243.8966) .. ( 761.1942, 243.2433)
+ .. controls ( 760.4742, 248.0033) and ( 766.5809, 249.3633) .. ( 769.6075, 251.8700)
+ .. controls ( 775.0609, 251.7100) and ( 782.1675, 254.0566) .. ( 786.1542, 249.1233)
+ .. controls ( 787.1542, 247.9633) and ( 788.0609, 246.7100) .. ( 788.9942, 245.4700)
+ .. controls ( 786.2609, 234.0700) and ( 778.4209, 225.0566) .. ( 772.8875, 214.9900)
+ .. controls ( 768.5942, 208.5100) and ( 764.7409, 201.7500) .. ( 760.5542, 195.2166)
+ .. controls ( 758.1675, 190.2966) and ( 756.4475, 185.0700) .. ( 754.0742, 180.1366)
+ .. controls ( 759.4475, 179.9500) and ( 764.8342, 179.3366) .. ( 770.2209, 179.4700)
+ .. controls ( 776.1942, 180.5500) and ( 781.9009, 182.8433) .. ( 787.9942, 183.3100)
+ .. controls ( 792.4209, 184.2566) and ( 796.3275, 181.1633) .. ( 800.3142, 179.7233)
+ .. controls ( 800.4742, 177.7366) and ( 800.6475, 175.7500) .. ( 800.8342, 173.7633)
+ .. controls ( 790.9409, 167.7366) and ( 782.1942, 159.3100) .. ( 770.6475, 156.4966)
+ .. controls ( 756.9409, 154.1766) and ( 743.3675, 151.1233) .. ( 729.7009, 148.5366)
+ .. controls ( 723.9809, 147.2566) and ( 717.7275, 145.3500) .. ( 714.5942, 139.9366)
+ .. controls ( 723.3142, 140.3500) and ( 731.9275, 145.4700) .. ( 740.6075, 142.3366)
+ .. controls ( 742.2342, 139.5633) and ( 743.8209, 136.7500) .. ( 745.3809, 133.9233)
+ .. controls ( 743.5409, 131.4833) and ( 742.0342, 128.8033) .. ( 740.2075, 126.3633)
+ .. controls ( 735.4875, 121.7900) and ( 729.5409, 118.8033) .. ( 723.7275, 115.8566)
+ .. controls ( 728.0209, 114.0033) and ( 732.6209, 115.6433) .. ( 737.0609, 115.8566)
+ .. controls ( 744.5809, 116.2700) and ( 752.0342, 117.3633) .. ( 759.5275, 118.1500)
+ .. controls ( 762.9275, 116.2833) and ( 766.2875, 114.3500) .. ( 769.4875, 112.1366)
+ .. controls ( 770.5542, 108.4966) and ( 771.6075, 104.8566) .. ( 772.6609, 101.2166)
+ .. controls ( 771.2209, 98.2300) and ( 769.1142, 95.6700) .. ( 766.2875, 93.9100)
+ .. controls ( 756.0209, 97.3900) and ( 745.1675, 96.3500) .. ( 734.5275, 96.3766)
+ .. controls ( 729.9542, 95.9633) and ( 725.6342, 94.2300) .. ( 721.1809, 93.1766)
+ .. controls ( 717.2475, 83.4700) and ( 718.5409, 72.9100) .. ( 717.8342, 62.7100)
+ .. controls ( 717.2475, 53.7500) and ( 722.6475, 43.7100) .. ( 716.0475, 35.9100)
+ .. controls ( 712.0742, 35.3633) and ( 708.0342, 33.5233) .. ( 704.0475, 34.8566)
+ .. controls ( 697.9409, 36.3500) and ( 691.6609, 37.2700) .. ( 685.7142, 39.3766)
+ .. controls ( 678.3275, 44.6700) and ( 670.2075, 49.5366) .. ( 665.3809, 57.5233)
+ .. controls ( 673.5275, 53.4166) and ( 681.4742, 48.7100) .. ( 690.2875, 46.1500)
+ .. controls ( 694.5275, 44.6166) and ( 698.9542, 46.3233) .. ( 703.2209, 46.8833)
+ .. controls ( 704.3542, 49.8433) and ( 705.7809, 52.7100) .. ( 706.6609, 55.7633)
+ .. controls ( 707.9809, 66.8433) and ( 706.1809, 78.2700) .. ( 709.1542, 89.1366)
+ .. controls ( 708.7275, 89.6566) and ( 707.8609, 90.6966) .. ( 707.4342, 91.2166)
+ .. controls ( 695.2475, 90.3766) and ( 683.7409, 85.9100) .. ( 673.2209, 79.8966)
+ .. controls ( 667.5409, 76.2300) and ( 660.6209, 76.0433) .. ( 654.2875, 74.2300)
+ .. controls ( 648.3809, 73.2300) and ( 643.4875, 77.6566) .. ( 639.8209, 81.6966)
+ .. controls ( 638.1542, 84.5900) and ( 637.0075, 87.7366) .. ( 635.5809, 90.7500)
+ .. controls ( 641.1542, 95.8300) and ( 649.0609, 94.8300) .. ( 655.9142, 96.5366)
+ .. controls ( 669.0742, 99.9766) and ( 682.1675, 103.7100) .. ( 695.2475, 107.5366)
+ .. controls ( 700.0075, 109.0833) and ( 706.2209, 108.8433) .. ( 709.2475, 113.4833)
+ .. controls ( 713.5675, 119.8566) and ( 721.4475, 123.1100) .. ( 724.1809, 130.6433)
+ .. controls ( 717.1942, 130.8833) and ( 710.5409, 128.1633) .. ( 703.7409, 127.0033)
+ .. controls ( 700.9675, 129.3366) and ( 700.4609, 132.9633) .. ( 699.6742, 136.2833)
+ .. controls ( 702.4475, 139.2433) and ( 705.1675, 142.2833) .. ( 708.1542, 145.0433)
+ .. controls ( 713.6342, 149.9100) and ( 720.6609, 152.3500) .. ( 727.2342, 155.3500)
+ .. controls ( 731.5675, 157.0700) and ( 731.9275, 162.2433) .. ( 732.6742, 166.1633)
+ .. controls ( 723.4609, 167.7766) and ( 714.1409, 164.7233) .. ( 705.9675, 160.6300)
+ .. controls ( 700.0342, 157.6833) and ( 693.8209, 155.3900) .. ( 687.8209, 152.5900)
+ .. controls ( 684.7942, 153.4966) and ( 682.0875, 155.1233) .. ( 679.5809, 157.0300)
+ .. controls ( 680.3809, 167.7633) and ( 682.6875, 178.5100) .. ( 681.4209, 189.3100)
+ .. controls ( 680.7942, 193.8166) and ( 681.8609, 198.2566) .. ( 682.7809, 202.6433)
+ .. controls ( 683.5009, 202.2433) and ( 684.9542, 201.4566) .. ( 685.6742, 201.0566)
+ .. controls ( 687.3675, 198.4166) and ( 689.3409, 195.9766) .. ( 691.3542, 193.5766)
+ .. controls ( 694.0475, 194.4033) and ( 696.8342, 195.0166) .. ( 699.3942, 196.2166)
+ .. controls ( 701.2475, 198.0966) and ( 702.4475, 200.4700) .. ( 704.1142, 202.4966)
+ .. controls ( 709.3142, 207.0300) and ( 715.4742, 210.3766) .. ( 722.0475, 212.4700)
+ .. controls ( 724.1542, 214.6300) and ( 726.1542, 216.8833) .. ( 728.1009, 219.1900)
+ .. controls ( 727.8609, 220.8566) and ( 727.6209, 222.5233) .. ( 727.4075, 224.1900)
+ .. controls ( 723.1809, 223.2433) and ( 719.7809, 220.5633) .. ( 716.8209, 217.5500)
+ .. controls ( 716.1675, 224.2833) and ( 713.4609, 231.1633) .. ( 716.0609, 237.8166)
+ .. controls ( 718.9542, 236.7900) and ( 721.8875, 235.8966) .. ( 724.8609, 235.0700)
+ .. controls ( 732.7409, 242.5233) and ( 743.1542, 247.9633) .. ( 747.6209, 258.3633)
+ ( 696.8209, 220.1633)
+ .. controls ( 700.3675, 219.0033) and ( 703.2475, 216.6300) .. ( 705.6475, 213.8166)
+ .. controls ( 704.3275, 210.6300) and ( 703.1142, 207.3900) .. ( 702.1542, 204.0700)
+ .. controls ( 700.6475, 203.2700) and ( 699.1409, 202.4566) .. ( 697.6342, 201.6433)
+ .. controls ( 696.6075, 203.3766) and ( 695.5675, 205.0833) .. ( 694.5542, 206.8033)
+ .. controls ( 695.3142, 211.2566) and ( 696.0609, 215.7100) .. ( 696.8209, 220.1633)
+ ( 749.1142, 167.7766)
+ .. controls ( 747.6342, 165.0700) and ( 746.1009, 162.3766) .. ( 744.6342, 159.6700)
+ .. controls ( 755.0075, 160.1366) and ( 764.7942, 163.6566) .. ( 774.5809, 166.8566)
+ .. controls ( 778.2875, 167.8166) and ( 780.3542, 171.2966) .. ( 782.9942, 173.7633)
+ .. controls ( 771.4475, 174.4566) and ( 759.5675, 172.9766) .. ( 749.1142, 167.7766)
+ ( 742.7142, 179.9633)
+ .. controls ( 740.7409, 176.0566) and ( 747.1542, 179.8833) .. ( 742.7142, 179.9633)
+ ( 713.8342, 188.1633)
+ .. controls ( 711.3409, 184.9366) and ( 709.3275, 181.2566) .. ( 706.1809, 178.5766)
+ .. controls ( 699.6342, 177.6300) and ( 692.4875, 178.6566) .. ( 687.6075, 183.4700)
+ .. controls ( 687.6742, 177.4966) and ( 687.6209, 171.5233) .. ( 687.6475, 165.5366)
+ .. controls ( 699.6742, 169.1100) and ( 711.8875, 172.0033) .. ( 723.9809, 175.3766)
+ .. controls ( 721.9142, 176.5633) and ( 719.8475, 177.7500) .. ( 717.7942, 178.9366)
+ .. controls ( 718.1675, 181.5633) and ( 718.5275, 184.1900) .. ( 718.8875, 186.8166)
+ .. controls ( 717.1942, 187.2700) and ( 715.5142, 187.7100) .. ( 713.8342, 188.1633)
+ ( 741.0075, 214.8566)
+ .. controls ( 737.1675, 207.4166) and ( 733.7275, 199.5366) .. ( 734.2342, 190.9633)
+ .. controls ( 735.3275, 190.3366) and ( 736.4342, 189.6966) .. ( 737.5542, 189.0700)
+ .. controls ( 738.1275, 193.4566) and ( 738.3009, 197.9100) .. ( 739.3142, 202.2166)
+ .. controls ( 740.4875, 206.2966) and ( 743.3409, 210.6166) .. ( 741.0075, 214.8566)
+ ( 701.9942, 258.2033)
+ .. controls ( 704.9409, 255.9766) and ( 708.6875, 254.5500) .. ( 711.0475, 251.6833)
+ .. controls ( 711.5675, 247.7366) and ( 712.6342, 242.9633) .. ( 709.4875, 239.8166)
+ .. controls ( 703.0875, 233.8700) and ( 696.6875, 227.9100) .. ( 690.4742, 221.7766)
+ .. controls ( 689.7275, 223.4433) and ( 688.9942, 225.1100) .. ( 688.2742, 226.7633)
+ .. controls ( 691.9942, 232.8166) and ( 695.0609, 239.2300) .. ( 698.5409, 245.4166)
+ .. controls ( 700.2342, 249.4966) and ( 700.8742, 253.9366) .. ( 701.9942, 258.2033)
+ ( 654.7142, 137.1500)
+ .. controls ( 658.2875, 146.2433) and ( 659.6875, 156.5900) .. ( 667.1142, 163.6033)
+ .. controls ( 667.8075, 160.2700) and ( 668.8342, 157.0033) .. ( 669.2609, 153.6300)
+ .. controls ( 668.4075, 150.5766) and ( 666.8075, 147.8033) .. ( 665.8475, 144.7900)
+ .. controls ( 665.3542, 140.6033) and ( 665.6875, 136.3633) .. ( 665.7275, 132.1500)
+ .. controls ( 664.0609, 130.1233) and ( 662.0209, 128.4566) .. ( 659.5675, 127.4700)
+ .. controls ( 657.8875, 130.6700) and ( 656.2475, 133.8833) .. ( 654.7142, 137.1500)}
+% \end{macrocode}
+%
+% \paragraph{校名(毛泽东原版)}
+%
+% 复。
+% \begin{macrocode}
+\def\fdulogo@name@original@fu{%
+ ( 63.7187, 348.5068)
+ .. controls ( 60.4345, 350.4238) and ( 55.1425, 360.9033) .. ( 55.1425, 365.4902)
+ .. controls ( 55.1425, 367.7783) and ( 54.5781, 370.0000) .. ( 53.8876, 370.4267)
+ .. controls ( 52.0273, 371.5761) and ( 52.3505, 376.2568) .. ( 55.0390, 387.0869)
+ .. controls ( 57.9892, 398.9746) and ( 59.3242, 421.2656) .. ( 59.4433, 460.6738)
+ .. controls ( 59.5136, 483.6279) and ( 59.1660, 490.8095) .. ( 57.9667, 491.2089)
+ .. controls ( 57.1044, 491.4970) and ( 56.0781, 490.6962) .. ( 55.6855, 489.4316)
+ .. controls ( 53.8339, 483.4589) and ( 49.7734, 476.0205) .. ( 46.3623, 472.3515)
+ .. controls ( 40.4824, 466.0283) and ( 27.6064, 449.6054) .. ( 27.5683, 448.3818)
+ .. controls ( 27.5507, 447.7753) and ( 25.7001, 445.1054) .. ( 23.4570, 442.4492)
+ .. controls ( 21.2138, 439.7919) and ( 17.7470, 435.6035) .. ( 15.7529, 433.1406)
+ .. controls ( 13.7587, 430.6767) and ( 11.2587, 428.8291) .. ( 10.1962, 429.0341)
+ .. controls ( 7.1943, 429.6123) and ( 6.1728, 435.7353) .. ( 8.0849, 441.6943)
+ .. controls ( 9.0175, 444.5986) and ( 10.1367, 449.6435) .. ( 10.5732, 452.9062)
+ .. controls ( 11.0097, 456.1679) and ( 11.8369, 459.1279) .. ( 12.4121, 459.4833)
+ .. controls ( 12.9873, 459.8388) and ( 15.8300, 465.0761) .. ( 18.7294, 471.1210)
+ .. controls ( 21.6289, 477.1660) and ( 25.9257, 485.0312) .. ( 28.2783, 488.5986)
+ .. controls ( 30.6298, 492.1669) and ( 32.5546, 495.4589) .. ( 32.5546, 495.9150)
+ .. controls ( 32.5546, 496.3720) and ( 34.4414, 499.6640) .. ( 36.7470, 503.2324)
+ .. controls ( 54.8505, 531.2480) and ( 61.8486, 544.5488) .. ( 76.0195, 577.8828)
+ .. controls ( 84.0869, 596.8603) and ( 88.1699, 609.4833) .. ( 86.2412, 609.4833)
+ .. controls ( 84.2617, 609.4833) and ( 77.5195, 605.1582) .. ( 76.4853, 603.2255)
+ .. controls ( 74.3144, 599.1699) and ( 67.1699, 595.6796) .. ( 61.0410, 595.6796)
+ .. controls ( 56.1933, 595.6796) and ( 54.9560, 596.2089) .. ( 52.9873, 599.1298)
+ .. controls ( 47.7968, 606.8281) and ( 47.2285, 608.9013) .. ( 48.8974, 614.0566)
+ .. controls ( 51.0605, 620.7402) and ( 54.8066, 627.9716) .. ( 56.7324, 629.1806)
+ .. controls ( 58.8642, 630.5175) and ( 61.8818, 635.3535) .. ( 68.2509, 647.6376)
+ .. controls ( 71.1484, 653.2246) and ( 76.0781, 662.3134) .. ( 79.2060, 667.8349)
+ .. controls ( 85.9501, 679.7392) and ( 97.4296, 699.6835) .. ( 99.0693, 702.3447)
+ .. controls ( 99.7070, 703.3798) and ( 101.3164, 706.4863) .. ( 102.6445, 709.2470)
+ .. controls ( 103.9736, 712.0078) and ( 107.3671, 718.5019) .. ( 110.1865, 723.6777)
+ .. controls ( 115.6513, 733.7138) and ( 116.8476, 740.9736) .. ( 113.4951, 743.7568)
+ .. controls ( 112.4599, 744.6152) and ( 111.6132, 746.1044) .. ( 111.6132, 747.0644)
+ .. controls ( 111.6132, 748.0244) and ( 111.1289, 749.7910) .. ( 110.5371, 750.9892)
+ .. controls ( 109.9453, 752.1875) and ( 108.6113, 754.8623) .. ( 107.5712, 756.9326)
+ .. controls ( 106.5322, 759.0029) and ( 105.3457, 762.8896) .. ( 104.9345, 765.5683)
+ .. controls ( 103.9853, 771.7617) and ( 107.1162, 786.8242) .. ( 110.4873, 792.2783)
+ .. controls ( 112.6621, 795.7978) and ( 113.8027, 796.4589) .. ( 117.6757, 796.4423)
+ .. controls ( 123.5791, 796.4179) and ( 124.3876, 795.8017) .. ( 127.9365, 788.6191)
+ .. controls ( 129.5556, 785.3398) and ( 131.3291, 782.6582) .. ( 131.8769, 782.6582)
+ .. controls ( 133.2851, 782.6582) and ( 138.6689, 770.5615) .. ( 140.2548, 763.8349)
+ .. controls ( 141.6250, 758.0244) and ( 140.5087, 743.3037) .. ( 138.4179, 739.6113)
+ .. controls ( 137.8242, 738.5625) and ( 135.6250, 735.8193) .. ( 133.5312, 733.5146)
+ .. controls ( 131.4375, 731.2109) and ( 128.9482, 727.4384) .. ( 127.9990, 725.1328)
+ .. controls ( 127.0498, 722.8261) and ( 124.0996, 717.5781) .. ( 121.4433, 713.4687)
+ .. controls ( 118.7871, 709.3593) and ( 114.5478, 702.2109) .. ( 112.0224, 697.5830)
+ .. controls ( 109.4970, 692.9550) and ( 107.0449, 688.8867) .. ( 106.5722, 688.5410)
+ .. controls ( 106.1005, 688.1962) and ( 103.8623, 684.5253) .. ( 101.5986, 680.3847)
+ .. controls ( 99.3349, 676.2431) and ( 95.6318, 669.4667) .. ( 93.3681, 665.3251)
+ .. controls ( 83.6328, 647.5078) and ( 75.5703, 630.7490) .. ( 76.4667, 630.1943)
+ .. controls ( 77.0000, 629.8652) and ( 78.7724, 630.6289) .. ( 80.4072, 631.8916)
+ .. controls ( 83.6494, 634.3974) and ( 94.4062, 638.3457) .. ( 97.9912, 638.3457)
+ .. controls ( 101.7519, 638.3457) and ( 108.7685, 630.2607) .. ( 109.6279, 624.9375)
+ .. controls ( 110.4746, 619.6953) and ( 109.8320, 608.5390) .. ( 108.6142, 607.3203)
+ .. controls ( 108.1933, 606.8994) and ( 107.8486, 604.9677) .. ( 107.8486, 603.0273)
+ .. controls ( 107.8486, 599.7431) and ( 102.0507, 587.4033) .. ( 98.5000, 583.1298)
+ .. controls ( 97.6396, 582.0947) and ( 96.5654, 580.4013) .. ( 96.1123, 579.3652)
+ .. controls ( 95.6591, 578.3300) and ( 93.6162, 574.6601) .. ( 91.5712, 571.2089)
+ .. controls ( 88.0849, 565.3251) and ( 82.5166, 554.2861) .. ( 77.9619, 544.2285)
+ .. controls ( 76.8681, 541.8134) and ( 75.2792, 538.9892) .. ( 74.4316, 537.9541)
+ .. controls ( 73.5839, 536.9189) and ( 71.7558, 533.4228) .. ( 70.3681, 530.1855)
+ -- ( 67.8447, 524.2988)
+ -- ( 73.4033, 521.0419)
+ .. controls ( 77.1738, 518.8320) and ( 79.1962, 516.6904) .. ( 79.6914, 514.3798)
+ .. controls ( 80.0937, 512.5068) and ( 81.2099, 508.9980) .. ( 82.1728, 506.5820)
+ .. controls ( 86.5839, 495.5126) and ( 87.6708, 487.7197) .. ( 86.3554, 476.5888)
+ .. controls ( 85.6542, 470.6542) and ( 84.3349, 463.8212) .. ( 83.4248, 461.4062)
+ .. controls ( 79.3779, 450.6718) and ( 76.4365, 405.2714) .. ( 78.9306, 392.0546)
+ .. controls ( 80.9570, 381.3125) and ( 81.1181, 361.3896) .. ( 79.1933, 359.4648)
+ .. controls ( 78.3886, 358.6611) and ( 77.7314, 356.9609) .. ( 77.7314, 355.6875)
+ .. controls ( 77.7314, 354.4130) and ( 76.3447, 351.9853) .. ( 74.6503, 350.2910)
+ .. controls ( 71.4482, 347.0888) and ( 67.3076, 346.4130) .. ( 63.7187, 348.5068)
+ -- cycle
+ ( 121.3378, 363.6250)
+ .. controls ( 118.4638, 365.2988) and ( 115.5087, 371.1171) .. ( 115.1513, 375.8027)
+ .. controls ( 114.8017, 380.3916) and ( 119.9746, 390.4814) .. ( 123.6982, 392.4746)
+ .. controls ( 125.4375, 393.4052) and ( 130.4707, 402.0556) .. ( 137.4248, 416.0673)
+ .. controls ( 143.4648, 428.2353) and ( 149.6513, 439.8847) .. ( 151.1718, 441.9550)
+ .. controls ( 152.6923, 444.0253) and ( 156.7666, 451.0839) .. ( 160.2246, 457.6416)
+ .. controls ( 163.6826, 464.1982) and ( 167.8085, 471.8212) .. ( 169.3925, 474.5820)
+ .. controls ( 172.3759, 479.7802) and ( 188.9492, 512.9023) .. ( 195.0781, 525.9150)
+ -- ( 198.5683, 533.3271)
+ -- ( 195.9511, 541.6015)
+ .. controls ( 188.5712, 564.9355) and ( 189.0019, 585.9726) .. ( 197.1015, 597.7753)
+ .. controls ( 202.0546, 604.9931) and ( 207.8789, 606.9218) .. ( 213.7558, 603.2900)
+ .. controls ( 218.9550, 600.0761) and ( 226.5000, 591.0585) .. ( 229.0039, 585.0654)
+ .. controls ( 231.2138, 579.7753) and ( 230.3710, 572.2500) .. ( 226.7636, 565.0566)
+ .. controls ( 225.4121, 562.3623) and ( 223.5273, 557.9492) .. ( 222.5742, 555.2480)
+ .. controls ( 221.6210, 552.5468) and ( 219.6689, 548.6904) .. ( 218.2353, 546.6777)
+ .. controls ( 215.7900, 543.2431) and ( 215.7500, 542.7666) .. ( 217.5820, 538.9042)
+ .. controls ( 219.7304, 534.3779) and ( 225.2773, 527.9150) .. ( 227.0136, 527.9150)
+ .. controls ( 227.6210, 527.9150) and ( 228.4677, 529.7500) .. ( 228.8935, 531.9931)
+ .. controls ( 229.3203, 534.2363) and ( 230.2138, 538.3310) .. ( 230.8798, 541.0917)
+ .. controls ( 232.5839, 548.1601) and ( 238.0087, 582.7109) .. ( 239.6464, 596.9345)
+ .. controls ( 240.4013, 603.4912) and ( 241.7695, 611.6787) .. ( 242.6865, 615.1298)
+ .. controls ( 243.6035, 618.5810) and ( 245.0283, 625.0751) .. ( 245.8525, 629.5615)
+ .. controls ( 246.6767, 634.0478) and ( 248.1083, 641.3886) .. ( 249.0351, 645.8750)
+ .. controls ( 252.2812, 661.6015) and ( 252.6083, 667.8359) .. ( 250.3076, 670.1367)
+ .. controls ( 247.7714, 672.6728) and ( 246.9531, 672.7070) .. ( 241.6767, 670.5019)
+ .. controls ( 236.2041, 668.2158) and ( 228.7421, 661.5556) .. ( 224.9863, 655.6054)
+ .. controls ( 223.3173, 652.9619) and ( 220.5400, 650.1552) .. ( 218.8144, 649.3691)
+ .. controls ( 213.0771, 646.7558) and ( 199.5488, 626.3496) .. ( 189.8740, 605.7187)
+ .. controls ( 187.4472, 600.5419) and ( 183.5625, 592.3535) .. ( 181.2412, 587.5224)
+ .. controls ( 178.9208, 582.6914) and ( 174.2080, 570.8320) .. ( 170.7685, 561.1699)
+ .. controls ( 158.1699, 525.7753) and ( 153.7880, 509.1025) .. ( 154.1757, 498.0234)
+ .. controls ( 154.5546, 487.1591) and ( 152.3115, 483.7128) .. ( 145.2041, 484.2392)
+ .. controls ( 140.7119, 484.5712) and ( 139.5087, 485.3554) .. ( 135.9492, 490.2685)
+ .. controls ( 133.6992, 493.3740) and ( 131.8203, 496.7177) .. ( 131.7744, 497.6992)
+ .. controls ( 131.7285, 498.6796) and ( 130.8408, 500.4218) .. ( 129.8017, 501.5703)
+ .. controls ( 127.9267, 503.6416) and ( 128.6152, 508.4580) .. ( 131.5966, 514.1259)
+ .. controls ( 133.5039, 517.7539) and ( 136.5722, 529.8681) .. ( 138.5859, 541.7187)
+ .. controls ( 141.5419, 559.1220) and ( 145.0478, 573.0263) .. ( 150.7675, 590.0322)
+ .. controls ( 156.3212, 606.5429) and ( 170.8408, 636.9462) .. ( 179.1259, 649.4140)
+ .. controls ( 182.0244, 653.7773) and ( 184.3964, 657.6123) .. ( 184.3964, 657.9384)
+ .. controls ( 184.3964, 658.2636) and ( 184.9638, 659.2119) .. ( 185.6582, 660.0449)
+ .. controls ( 186.3515, 660.8789) and ( 189.5498, 665.5136) .. ( 192.7646, 670.3457)
+ .. controls ( 201.0341, 682.7724) and ( 208.4853, 691.3623) .. ( 230.8671, 714.2666)
+ .. controls ( 256.5087, 740.5078) and ( 263.9902, 748.6582) .. ( 263.1806, 749.4677)
+ .. controls ( 260.4433, 752.2050) and ( 217.0244, 714.2587) .. ( 217.0234, 709.1279)
+ .. controls ( 217.0234, 707.6347) and ( 209.1914, 701.2744) .. ( 202.4902, 697.3251)
+ .. controls ( 199.5615, 695.5996) and ( 193.2314, 690.5175) .. ( 188.4228, 686.0312)
+ .. controls ( 183.6142, 681.5449) and ( 175.8994, 674.8007) .. ( 171.2792, 671.0449)
+ .. controls ( 166.6582, 667.2880) and ( 162.0712, 662.6542) .. ( 161.0849, 660.7480)
+ .. controls ( 159.8359, 658.3330) and ( 157.9570, 657.0312) .. ( 154.8896, 656.4550)
+ .. controls ( 152.4677, 656.0009) and ( 150.1777, 655.1289) .. ( 149.7988, 654.5166)
+ .. controls ( 148.2412, 651.9970) and ( 145.3828, 653.7207) .. ( 142.8027, 658.7373)
+ .. controls ( 140.9335, 662.3720) and ( 139.8974, 667.0683) .. ( 139.5498, 673.4824)
+ .. controls ( 139.0849, 682.0546) and ( 139.5058, 684.1816) .. ( 144.2656, 697.3251)
+ .. controls ( 147.1396, 705.2626) and ( 150.2011, 714.2978) .. ( 151.0693, 717.4033)
+ .. controls ( 151.9365, 720.5097) and ( 154.0625, 725.8740) .. ( 155.7939, 729.3251)
+ .. controls ( 157.5244, 732.7763) and ( 160.8564, 741.3818) .. ( 163.1982, 748.4501)
+ .. controls ( 167.3398, 760.9492) and ( 167.5585, 761.2998) .. ( 171.2207, 761.2929)
+ .. controls ( 176.0166, 761.2861) and ( 176.8701, 760.6884) .. ( 182.3017, 753.5498)
+ .. controls ( 190.4697, 742.8154) and ( 192.2460, 738.1162) .. ( 191.2802, 729.7939)
+ .. controls ( 190.8095, 725.7373) and ( 189.9150, 722.1044) .. ( 189.2929, 721.7197)
+ .. controls ( 188.6708, 721.3349) and ( 188.1435, 719.7832) .. ( 188.1210, 718.2705)
+ .. controls ( 188.1005, 716.7587) and ( 187.2705, 714.4501) .. ( 186.2792, 713.1406)
+ .. controls ( 185.2880, 711.8310) and ( 184.7841, 710.2626) .. ( 185.1591, 709.6562)
+ .. controls ( 185.5341, 709.0498) and ( 184.3613, 706.7324) .. ( 182.5537, 704.5078)
+ .. controls ( 176.2597, 696.7617) and ( 170.6162, 688.5410) .. ( 171.5927, 688.5410)
+ .. controls ( 172.5136, 688.5410) and ( 177.8388, 693.0654) .. ( 188.1914, 702.6455)
+ .. controls ( 192.5410, 706.6689) and ( 207.4589, 719.7226) .. ( 212.5458, 723.9550)
+ .. controls ( 226.7460, 735.7705) and ( 234.7490, 742.5771) .. ( 238.7802, 746.2666)
+ .. controls ( 241.4199, 748.6816) and ( 245.9335, 752.1787) .. ( 248.8115, 754.0371)
+ .. controls ( 251.6884, 755.8955) and ( 255.5439, 758.5781) .. ( 257.3789, 759.9980)
+ .. controls ( 259.2138, 761.4179) and ( 261.0595, 762.5800) .. ( 261.4824, 762.5800)
+ .. controls ( 261.9042, 762.5800) and ( 264.4677, 763.9804) .. ( 267.1796, 765.6914)
+ .. controls ( 269.8906, 767.4033) and ( 274.3437, 769.1611) .. ( 277.0742, 769.5976)
+ .. controls ( 281.2587, 770.2666) and ( 282.2548, 769.9882) .. ( 283.4130, 767.8232)
+ .. controls ( 285.1201, 764.6337) and ( 285.1845, 759.3916) .. ( 283.5556, 756.3476)
+ .. controls ( 282.8779, 755.0810) and ( 274.2666, 746.5683) .. ( 264.4189, 737.4306)
+ .. controls ( 236.8994, 711.8955) and ( 233.5156, 708.6523) .. ( 221.7294, 696.5058)
+ .. controls ( 215.6904, 690.2822) and ( 210.7490, 684.6142) .. ( 210.7490, 683.9101)
+ .. controls ( 210.7490, 683.2060) and ( 209.1777, 681.2783) .. ( 207.2578, 679.6250)
+ .. controls ( 202.0390, 675.1337) and ( 183.5908, 644.7089) .. ( 172.3320, 622.0253)
+ .. controls ( 164.8525, 606.9560) and ( 154.1376, 572.4765) .. ( 154.3955, 564.3066)
+ .. controls ( 154.5195, 560.4033) and ( 159.4882, 570.7187) .. ( 166.9404, 590.3505)
+ .. controls ( 179.9580, 624.6455) and ( 195.5937, 650.8427) .. ( 211.2441, 664.5820)
+ .. controls ( 221.0693, 673.2070) and ( 236.7929, 683.2783) .. ( 244.4101, 685.8251)
+ .. controls ( 249.2539, 687.4453) and ( 259.8808, 685.6884) .. ( 262.2089, 682.8828)
+ .. controls ( 265.0830, 679.4199) and ( 265.0908, 663.5078) .. ( 262.2236, 653.4042)
+ .. controls ( 259.5097, 643.8427) and ( 258.5136, 639.9707) .. ( 253.0253, 617.6396)
+ .. controls ( 246.7910, 592.2773) and ( 244.6474, 581.0888) .. ( 244.7304, 574.3457)
+ .. controls ( 244.7792, 570.3388) and ( 242.9199, 559.8564) .. ( 240.2968, 549.3505)
+ .. controls ( 237.3984, 537.7431) and ( 235.8564, 528.7470) .. ( 235.9951, 524.2529)
+ .. controls ( 236.2636, 515.5292) and ( 232.5380, 504.7851) .. ( 227.8417, 500.7460)
+ -- ( 224.3984, 497.7841)
+ -- ( 218.8144, 501.6259)
+ .. controls ( 215.2558, 504.0742) and ( 212.0908, 507.7177) .. ( 210.0869, 511.6718)
+ .. controls ( 208.3574, 515.0839) and ( 206.4023, 517.8759) .. ( 205.7412, 517.8759)
+ .. controls ( 204.2958, 517.8759) and ( 200.2373, 509.2109) .. ( 198.3154, 502.0224)
+ .. controls ( 197.5527, 499.1689) and ( 196.0849, 496.1357) .. ( 195.0546, 495.2802)
+ .. controls ( 194.0244, 494.4257) and ( 193.1816, 493.0390) .. ( 193.1816, 492.2001)
+ .. controls ( 193.1816, 491.3613) and ( 190.6035, 485.3603) .. ( 187.4511, 478.8642)
+ .. controls ( 176.0371, 455.3359) and ( 174.5761, 452.0292) .. ( 175.1708, 451.0673)
+ .. controls ( 175.5029, 450.5302) and ( 179.0117, 452.5800) .. ( 182.9667, 455.6240)
+ .. controls ( 186.9228, 458.6679) and ( 192.2509, 462.0322) .. ( 194.8076, 463.1005)
+ .. controls ( 197.3642, 464.1689) and ( 199.4560, 465.6357) .. ( 199.4560, 466.3613)
+ .. controls ( 199.4560, 467.0869) and ( 200.5166, 467.6806) .. ( 201.8125, 467.6806)
+ .. controls ( 203.1083, 467.6806) and ( 204.8535, 468.5058) .. ( 205.6904, 469.5136)
+ .. controls ( 206.5273, 470.5224) and ( 208.3828, 471.7197) .. ( 209.8144, 472.1738)
+ .. controls ( 211.2451, 472.6279) and ( 215.0058, 474.8535) .. ( 218.1718, 477.1191)
+ .. controls ( 226.6582, 483.1943) and ( 245.3232, 492.5048) .. ( 254.8427, 495.4121)
+ .. controls ( 271.0996, 500.3769) and ( 277.7939, 497.3447) .. ( 279.3369, 484.3193)
+ .. controls ( 280.3896, 475.4277) and ( 275.7705, 459.1787) .. ( 266.4531, 438.9951)
+ .. controls ( 263.7792, 433.2021) and ( 263.6015, 432.0722) .. ( 265.1748, 430.8378)
+ .. controls ( 282.7666, 417.0439) and ( 292.2167, 410.1445) .. ( 294.5136, 409.4208)
+ .. controls ( 296.0673, 408.9316) and ( 297.4042, 407.8632) .. ( 297.4853, 407.0468)
+ .. controls ( 297.5673, 406.2314) and ( 297.7744, 403.8691) .. ( 297.9472, 401.7988)
+ .. controls ( 298.1191, 399.7275) and ( 298.6835, 396.7636) .. ( 299.2001, 395.2099)
+ .. controls ( 300.0253, 392.7304) and ( 299.7119, 392.3867) .. ( 296.6250, 392.3867)
+ .. controls ( 290.6464, 392.3867) and ( 282.8457, 397.1640) .. ( 275.8261, 405.1240)
+ .. controls ( 272.1279, 409.3183) and ( 268.8203, 413.1386) .. ( 268.4746, 413.6142)
+ .. controls ( 266.6044, 416.1943) and ( 258.3535, 421.3466) .. ( 257.2177, 420.6445)
+ .. controls ( 256.4873, 420.1933) and ( 254.8076, 417.7451) .. ( 253.4833, 415.2031)
+ .. controls ( 250.1953, 408.8906) and ( 242.1611, 400.7851) .. ( 235.8378, 397.4013)
+ .. controls ( 231.6357, 395.1523) and ( 228.4111, 396.6767) .. ( 219.2968, 405.2226)
+ .. controls ( 205.1884, 418.4492) and ( 201.6474, 425.8037) .. ( 204.4218, 436.1074)
+ .. controls ( 206.0703, 442.2314) and ( 211.5292, 445.7070) .. ( 221.5488, 447.0136)
+ .. controls ( 227.3857, 447.7744) and ( 233.3994, 446.0888) .. ( 249.3583, 439.2177)
+ .. controls ( 252.2500, 437.9726) and ( 266.0332, 469.8496) .. ( 267.9326, 482.1718)
+ .. controls ( 269.0634, 489.5146) and ( 267.2861, 490.5273) .. ( 257.3164, 488.2246)
+ .. controls ( 246.9472, 485.8291) and ( 232.6816, 478.5859) .. ( 216.8574, 467.6835)
+ .. controls ( 208.7568, 462.1025) and ( 192.7851, 448.6933) .. ( 190.1689, 445.2773)
+ .. controls ( 188.7695, 443.4501) and ( 186.7568, 441.1083) .. ( 185.6972, 440.0722)
+ .. controls ( 184.6367, 439.0371) and ( 181.2890, 435.3671) .. ( 178.2578, 431.9160)
+ .. controls ( 175.2265, 428.4648) and ( 169.5791, 422.2412) .. ( 165.7089, 418.0849)
+ .. controls ( 156.6582, 408.3662) and ( 143.5576, 389.1601) .. ( 142.4257, 383.9511)
+ .. controls ( 141.2187, 378.3964) and ( 133.4042, 366.8457) .. ( 129.1552, 364.3349)
+ .. controls ( 125.1210, 361.9521) and ( 124.3330, 361.8808) .. ( 121.3388, 363.6250)
+ -- cycle
+ ( 240.4843, 420.3164)
+ .. controls ( 245.4355, 427.6318) and ( 245.3349, 428.1669) .. ( 238.4580, 431.1250)
+ .. controls ( 225.2060, 436.8261) and ( 216.6250, 435.6982) .. ( 219.3847, 428.6171)
+ .. controls ( 220.8486, 424.8632) and ( 228.1435, 417.9160) .. ( 231.4550, 417.1220)
+ .. controls ( 236.5566, 415.8994) and ( 237.7900, 416.3359) .. cycle
+ ( 210.8183, 574.7900)
+ .. controls ( 212.4023, 581.8710) and ( 210.9570, 587.5849) .. ( 207.8408, 586.5585)
+ .. controls ( 206.2021, 586.0195) and ( 205.1494, 574.3193) .. ( 206.3203, 569.6562)
+ .. controls ( 207.4140, 565.2968) and ( 209.1328, 567.2587) .. cycle}
+% \end{macrocode}
+%
+% 旦。
+% \begin{macrocode}
+\def\fdulogo@name@original@dan{%
+ ( 319.2978, 425.6777)
+ .. controls ( 316.5371, 426.6718) and ( 314.1982, 427.4941) .. ( 314.1005, 427.5048)
+ .. controls ( 314.0019, 427.5156) and ( 313.5791, 428.8916) .. ( 313.1591, 430.5644)
+ .. controls ( 312.7392, 432.2363) and ( 311.0673, 435.2011) .. ( 309.4433, 437.1523)
+ .. controls ( 307.2539, 439.7822) and ( 306.4658, 442.3232) .. ( 306.3945, 446.9746)
+ .. controls ( 306.2812, 454.4550) and ( 308.2353, 457.9169) .. ( 313.8671, 460.2138)
+ .. controls ( 316.1630, 461.1503) and ( 318.7304, 462.7900) .. ( 319.5712, 463.8574)
+ .. controls ( 320.8925, 465.5341) and ( 321.1054, 465.4033) .. ( 321.1396, 462.8896)
+ .. controls ( 321.1718, 460.4746) and ( 321.6582, 460.1201) .. ( 324.0029, 460.8007)
+ .. controls ( 337.7177, 464.7763) and ( 344.6855, 467.1533) .. ( 346.2773, 468.3994)
+ .. controls ( 348.2480, 469.9414) and ( 356.8476, 473.0244) .. ( 360.0810, 473.3476)
+ .. controls ( 363.5185, 473.6914) and ( 367.6103, 475.3642) .. ( 367.6103, 476.4257)
+ .. controls ( 367.6103, 477.0019) and ( 371.0400, 477.8710) .. ( 375.2304, 478.3574)
+ .. controls ( 379.9208, 478.9013) and ( 383.1083, 479.9140) .. ( 383.5214, 480.9902)
+ .. controls ( 383.8906, 481.9521) and ( 385.3154, 482.7392) .. ( 386.6884, 482.7392)
+ .. controls ( 388.0615, 482.7392) and ( 390.6826, 483.5585) .. ( 392.5146, 484.5595)
+ .. controls ( 397.3085, 487.1796) and ( 410.1279, 490.5087) .. ( 411.6943, 489.5410)
+ .. controls ( 412.4267, 489.0878) and ( 414.5957, 489.8789) .. ( 416.5156, 491.2988)
+ .. controls ( 418.5839, 492.8281) and ( 421.0566, 493.6044) .. ( 422.5849, 493.2050)
+ .. controls ( 424.0029, 492.8339) and ( 428.4482, 493.7597) .. ( 432.4648, 495.2626)
+ .. controls ( 436.4814, 496.7656) and ( 440.8964, 498.2636) .. ( 442.2763, 498.5927)
+ .. controls ( 443.6572, 498.9208) and ( 446.8447, 499.7939) .. ( 449.3593, 500.5332)
+ .. controls ( 459.2617, 503.4414) and ( 473.3349, 496.3613) .. ( 473.3349, 488.4716)
+ .. controls ( 473.3349, 483.8603) and ( 471.1064, 481.7968) .. ( 465.1064, 480.8515)
+ .. controls ( 455.5791, 479.3496) and ( 442.7822, 475.0976) .. ( 442.0498, 473.1894)
+ .. controls ( 441.5449, 471.8730) and ( 440.3046, 471.5410) .. ( 437.8847, 472.0722)
+ .. controls ( 435.5341, 472.5888) and ( 434.2226, 472.2685) .. ( 433.7617, 471.0664)
+ .. controls ( 433.1894, 469.5761) and ( 423.9970, 463.9160) .. ( 422.1494, 463.9160)
+ .. controls ( 421.8193, 463.9160) and ( 422.2431, 465.0263) .. ( 423.0908, 466.3837)
+ .. controls ( 423.9384, 467.7402) and ( 427.3320, 470.1328) .. ( 430.6308, 471.6992)
+ .. controls ( 433.9306, 473.2656) and ( 436.6298, 475.2001) .. ( 436.6298, 475.9990)
+ .. controls ( 436.6298, 476.7978) and ( 437.4765, 477.7763) .. ( 438.5117, 478.1728)
+ .. controls ( 439.5478, 478.5703) and ( 440.3945, 479.5380) .. ( 440.3945, 480.3242)
+ .. controls ( 440.3945, 481.1855) and ( 439.5224, 481.4013) .. ( 438.1982, 480.8681)
+ .. controls ( 436.9902, 480.3808) and ( 432.4912, 479.5302) .. ( 428.1992, 478.9775)
+ .. controls ( 420.8281, 478.0283) and ( 406.4062, 473.3974) .. ( 398.5673, 469.4638)
+ .. controls ( 396.6132, 468.4824) and ( 394.1865, 467.6806) .. ( 393.1738, 467.6806)
+ .. controls ( 392.1611, 467.6806) and ( 388.9951, 466.5507) .. ( 386.1376, 465.1708)
+ .. controls ( 383.2802, 463.7900) and ( 380.0605, 462.6367) .. ( 378.9824, 462.6064)
+ .. controls ( 377.9042, 462.5781) and ( 374.7636, 461.1708) .. ( 372.0029, 459.4824)
+ .. controls ( 369.2421, 457.7939) and ( 365.8115, 455.8935) .. ( 364.3789, 455.2587)
+ .. controls ( 362.9472, 454.6250) and ( 360.8359, 452.6718) .. ( 359.6875, 450.9189)
+ .. controls ( 358.5390, 449.1669) and ( 355.6376, 446.8017) .. ( 353.2392, 445.6640)
+ .. controls ( 350.8417, 444.5263) and ( 348.5458, 442.5429) .. ( 348.1376, 441.2578)
+ .. controls ( 347.7294, 439.9726) and ( 345.0263, 437.0771) .. ( 342.1308, 434.8242)
+ .. controls ( 339.2353, 432.5722) and ( 336.3847, 429.9550) .. ( 335.7968, 429.0087)
+ .. controls ( 334.7763, 427.3671) and ( 327.3623, 423.6982) .. ( 325.2988, 423.8144)
+ .. controls ( 324.7587, 423.8466) and ( 322.0585, 424.6826) .. cycle
+ ( 415.2949, 521.2421)
+ .. controls ( 415.2939, 521.8066) and ( 414.0234, 523.7656) .. ( 412.4716, 525.5957)
+ .. controls ( 410.9199, 527.4267) and ( 406.3144, 532.9501) .. ( 402.2382, 537.8701)
+ .. controls ( 398.1611, 542.7910) and ( 394.4912, 546.6523) .. ( 394.0810, 546.4521)
+ .. controls ( 389.8281, 544.3691) and ( 381.4082, 538.3232) .. ( 381.3857, 537.3359)
+ .. controls ( 381.3671, 536.6406) and ( 377.9853, 533.0712) .. ( 373.8642, 529.4033)
+ .. controls ( 365.7919, 522.2177) and ( 365.2246, 523.8359) .. ( 372.6259, 532.9345)
+ .. controls ( 375.1533, 536.0400) and ( 379.4140, 542.1757) .. ( 382.0947, 546.5693)
+ -- ( 386.9697, 554.5566)
+ -- ( 383.3955, 561.0009)
+ .. controls ( 371.1005, 583.1689) and ( 370.1201, 585.7314) .. ( 370.1201, 595.7177)
+ .. controls ( 370.1201, 609.5302) and ( 372.8642, 611.1503) .. ( 384.7451, 604.3525)
+ .. controls ( 388.8574, 602.0000) and ( 394.4375, 597.0087) .. ( 398.9501, 591.6484)
+ .. controls ( 410.9628, 577.3779) and ( 415.2675, 565.4941) .. ( 410.8603, 558.7685)
+ .. controls ( 409.1503, 556.1591) and ( 408.9873, 555.0546) .. ( 410.1425, 553.9003)
+ .. controls ( 412.0410, 552.0019) and ( 414.0000, 554.7304) .. ( 414.0097, 559.2871)
+ .. controls ( 414.0136, 561.0126) and ( 415.1083, 565.8125) .. ( 416.4423, 569.9541)
+ .. controls ( 417.7773, 574.0947) and ( 420.6787, 583.6953) .. ( 422.8896, 591.2871)
+ .. controls ( 428.1640, 609.3964) and ( 435.3603, 630.5166) .. ( 442.3437, 648.3847)
+ .. controls ( 448.2597, 663.5214) and ( 450.4130, 672.2275) .. ( 448.2412, 672.2275)
+ .. controls ( 447.5458, 672.2275) and ( 446.2958, 671.4082) .. ( 445.4648, 670.4072)
+ .. controls ( 444.6337, 669.4052) and ( 441.3173, 668.1953) .. ( 438.0957, 667.7187)
+ .. controls ( 433.0722, 666.9755) and ( 415.9150, 659.3427) .. ( 414.0419, 657.0175)
+ .. controls ( 413.6962, 656.5898) and ( 408.8964, 653.3017) .. ( 403.3750, 649.7109)
+ .. controls ( 397.8535, 646.1201) and ( 390.2304, 640.3369) .. ( 386.4345, 636.8593)
+ .. controls ( 382.6376, 633.3818) and ( 377.5556, 628.7265) .. ( 375.1396, 626.5146)
+ .. controls ( 367.3935, 619.4218) and ( 361.8623, 615.7998) .. ( 357.4667, 614.9384)
+ .. controls ( 347.3837, 612.9648) and ( 344.0810, 606.7646) .. ( 345.5927, 592.6455)
+ .. controls ( 346.2294, 586.6962) and ( 347.3085, 583.3525) .. ( 349.3886, 580.8798)
+ .. controls ( 357.6210, 571.0966) and ( 361.7832, 554.2304) .. ( 358.8720, 542.4482)
+ .. controls ( 353.4013, 520.3105) and ( 351.4619, 518.8955) .. ( 344.5126, 531.9648)
+ .. controls ( 341.8271, 537.0156) and ( 341.5449, 538.9179) .. ( 341.9218, 549.4023)
+ .. controls ( 342.3574, 561.4921) and ( 340.2324, 576.2607) .. ( 337.0078, 583.5527)
+ .. controls ( 334.1416, 590.0341) and ( 333.7705, 591.7919) .. ( 335.0937, 592.6093)
+ .. controls ( 335.7832, 593.0361) and ( 337.1455, 592.7236) .. ( 338.1210, 591.9140)
+ .. controls ( 342.5576, 588.2324) and ( 343.1953, 594.2929) .. ( 340.5273, 614.7910)
+ .. controls ( 339.9306, 619.3750) and ( 340.3457, 621.9453) .. ( 342.3544, 626.0849)
+ .. controls ( 345.1796, 631.9101) and ( 345.8798, 632.4570) .. ( 359.9794, 639.8652)
+ .. controls ( 365.2119, 642.6152) and ( 370.0576, 645.3115) .. ( 370.7480, 645.8593)
+ .. controls ( 376.1210, 650.1191) and ( 423.3105, 672.5322) .. ( 434.1201, 675.9589)
+ .. controls ( 450.5595, 681.1689) and ( 456.0761, 681.8339) .. ( 462.0791, 679.3251)
+ .. controls ( 466.0400, 677.6708) and ( 466.7470, 676.7871) .. ( 466.7470, 673.4941)
+ .. controls ( 466.7470, 671.3593) and ( 465.0273, 665.9335) .. ( 462.9248, 661.4365)
+ .. controls ( 460.8222, 656.9394) and ( 457.4599, 648.8095) .. ( 455.4541, 643.3691)
+ .. controls ( 453.4482, 637.9287) and ( 450.3544, 630.6103) .. ( 448.5791, 627.1064)
+ .. controls ( 446.8037, 623.6025) and ( 443.9121, 616.0859) .. ( 442.1542, 610.4033)
+ .. controls ( 440.3964, 604.7207) and ( 438.1884, 597.8125) .. ( 437.2480, 595.0517)
+ .. controls ( 434.3066, 586.4208) and ( 425.3359, 549.3056) .. ( 425.3359, 545.7714)
+ .. controls ( 425.3359, 543.2763) and ( 421.6914, 523.2187) .. ( 421.0371, 522.1103)
+ .. controls ( 420.5351, 521.2607) and ( 415.2958, 520.4687) .. cycle
+ ( 388.3437, 583.7851)
+ .. controls ( 382.5791, 591.8632) and ( 380.1591, 593.6923) .. ( 380.1591, 589.9697)
+ .. controls ( 380.1591, 586.7412) and ( 383.9306, 580.2763) .. ( 388.7685, 575.2099)
+ .. controls ( 392.8916, 570.8935) and ( 393.3750, 570.6816) .. ( 393.7402, 573.0410)
+ .. controls ( 393.9833, 574.6132) and ( 391.8339, 578.8945) .. cycle}
+% \end{macrocode}
+%
+% 大。
+% \begin{macrocode}
+\def\fdulogo@name@original@da{%
+ ( 632.3828, 446.7656)
+ .. controls ( 622.5283, 451.5029) and ( 618.4785, 456.6845) .. ( 616.0380, 467.6806)
+ .. controls ( 615.0996, 471.9091) and ( 609.2675, 486.2031) .. ( 602.8417, 500.0214)
+ .. controls ( 601.1503, 503.6601) and ( 599.7656, 507.7158) .. ( 599.7656, 509.0341)
+ .. controls ( 599.7656, 510.3525) and ( 596.9423, 518.6220) .. ( 593.4912, 527.4111)
+ .. controls ( 586.7197, 544.6562) and ( 586.2617, 546.8935) .. ( 589.0263, 549.1875)
+ .. controls ( 590.4794, 550.3945) and ( 591.3232, 550.1152) .. ( 593.3144, 547.7724)
+ .. controls ( 597.7050, 542.6074) and ( 612.7236, 522.1816) .. ( 620.4716, 510.8378)
+ .. controls ( 629.6787, 497.3574) and ( 638.2832, 487.7587) .. ( 641.1611, 487.7587)
+ .. controls ( 642.3437, 487.7587) and ( 644.6259, 486.0439) .. ( 646.2314, 483.9482)
+ .. controls ( 647.8378, 481.8525) and ( 651.9296, 478.7421) .. ( 655.3242, 477.0371)
+ .. controls ( 661.8212, 473.7744) and ( 683.9677, 467.6806) .. ( 689.3300, 467.6806)
+ .. controls ( 691.0625, 467.6806) and ( 692.8281, 467.1152) .. ( 693.2548, 466.4257)
+ .. controls ( 693.6816, 465.7353) and ( 695.1269, 465.1708) .. ( 696.4658, 465.1708)
+ .. controls ( 698.1943, 465.1708) and ( 698.9023, 464.3037) .. ( 698.9023, 462.1865)
+ .. controls ( 698.9023, 458.3867) and ( 696.1435, 456.1035) .. ( 691.0166, 455.6591)
+ .. controls ( 688.7968, 455.4667) and ( 681.3339, 454.4423) .. ( 674.4316, 453.3837)
+ .. controls ( 667.5292, 452.3242) and ( 659.5107, 451.4365) .. ( 656.6113, 451.4121)
+ .. controls ( 653.6298, 451.3867) and ( 650.9052, 450.6464) .. ( 650.3369, 449.7089)
+ .. controls ( 649.5332, 448.3798) and ( 639.4472, 443.5361) .. ( 638.3281, 443.9414)
+ .. controls ( 638.1689, 443.9990) and ( 635.4941, 445.2695) .. cycle
+ ( 496.2373, 448.9541)
+ .. controls ( 479.6962, 450.5019) and ( 478.0410, 451.0771) .. ( 478.0410, 455.2734)
+ .. controls ( 478.0410, 458.7822) and ( 478.2382, 458.8964) .. ( 484.2890, 458.8964)
+ .. controls ( 494.1474, 458.8964) and ( 514.1533, 465.6093) .. ( 519.5810, 470.7382)
+ .. controls ( 527.7900, 478.4960) and ( 546.3144, 501.7636) .. ( 550.9013, 510.0781)
+ .. controls ( 554.6816, 516.9326) and ( 565.1533, 544.1220) .. ( 564.3300, 544.9453)
+ .. controls ( 563.4492, 545.8261) and ( 547.2187, 535.0283) .. ( 538.3994, 527.6933)
+ .. controls ( 525.3037, 516.8037) and ( 515.6875, 506.8515) .. ( 515.6875, 504.1884)
+ .. controls ( 515.6875, 502.8212) and ( 514.3144, 500.1181) .. ( 512.6367, 498.1816)
+ .. controls ( 509.6484, 494.7324) and ( 509.5126, 494.7041) .. ( 506.0527, 496.7753)
+ .. controls ( 500.6611, 500.0019) and ( 498.2792, 512.2998) .. ( 502.2734, 516.2929)
+ .. controls ( 503.9550, 517.9755) and ( 504.5849, 518.0244) .. ( 506.2958, 516.6054)
+ .. controls ( 508.7910, 514.5341) and ( 513.3173, 516.8486) .. ( 522.0527, 524.6640)
+ .. controls ( 529.6005, 531.4179) and ( 531.0126, 532.5263) .. ( 546.1201, 543.5625)
+ .. controls ( 553.1943, 548.7294) and ( 561.2988, 554.6660) .. ( 564.1298, 556.7539)
+ .. controls ( 569.9980, 561.0820) and ( 570.1572, 561.5517) .. ( 577.9648, 597.5615)
+ .. controls ( 584.8300, 629.2246) and ( 586.9716, 644.9052) .. ( 588.4189, 674.1103)
+ .. controls ( 589.1376, 688.6035) and ( 590.2744, 706.6015) .. ( 590.9453, 714.1044)
+ .. controls ( 591.9648, 725.5039) and ( 591.8623, 728.1806) .. ( 590.3183, 730.3837)
+ .. controls ( 587.9892, 733.7089) and ( 587.9482, 738.7968) .. ( 590.2265, 741.9111)
+ .. controls ( 591.8593, 744.1455) and ( 592.5312, 744.2011) .. ( 599.9511, 742.7255)
+ .. controls ( 605.9921, 741.5244) and ( 608.7617, 740.2324) .. ( 611.3876, 737.3925)
+ .. controls ( 614.9140, 733.5791) and ( 615.1044, 730.8125) .. ( 612.2880, 724.3056)
+ .. controls ( 611.6904, 722.9248) and ( 610.2568, 715.8662) .. ( 609.1015, 708.6191)
+ .. controls ( 607.9472, 701.3720) and ( 606.2294, 690.6435) .. ( 605.2861, 684.7763)
+ .. controls ( 604.3417, 678.9101) and ( 603.6250, 670.1572) .. ( 603.6923, 665.3251)
+ .. controls ( 603.8808, 651.9794) and ( 599.1054, 623.3896) .. ( 593.5273, 604.4638)
+ .. controls ( 587.9189, 585.4316) and ( 584.6064, 571.8359) .. ( 585.5791, 571.8359)
+ .. controls ( 585.9355, 571.8359) and ( 588.2861, 573.4101) .. ( 590.8007, 575.3339)
+ .. controls ( 595.6123, 579.0146) and ( 606.5830, 585.7197) .. ( 616.0791, 590.7851)
+ .. controls ( 619.1845, 592.4414) and ( 624.4023, 595.6318) .. ( 627.6738, 597.8750)
+ .. controls ( 630.9453, 600.1181) and ( 634.1591, 601.9541) .. ( 634.8154, 601.9541)
+ .. controls ( 635.4716, 601.9541) and ( 636.3681, 602.5341) .. ( 636.8066, 603.2431)
+ .. controls ( 637.8388, 604.9150) and ( 633.4511, 608.4746) .. ( 625.1191, 612.7246)
+ .. controls ( 617.2500, 616.7392) and ( 616.5166, 620.3007) .. ( 623.6396, 619.9111)
+ .. controls ( 626.0380, 619.7792) and ( 634.7773, 619.3222) .. ( 643.0595, 618.8945)
+ .. controls ( 651.3417, 618.4677) and ( 659.3261, 617.8740) .. ( 660.8027, 617.5761)
+ .. controls ( 665.6210, 616.6035) and ( 665.4443, 613.2607) .. ( 660.3369, 608.7460)
+ .. controls ( 657.7363, 606.4482) and ( 655.0908, 604.5439) .. ( 654.4589, 604.5156)
+ .. controls ( 653.3681, 604.4658) and ( 646.1669, 599.8320) .. ( 601.0800, 570.1640)
+ -- ( 581.6894, 557.4052)
+ -- ( 578.2109, 548.6210)
+ .. controls ( 576.2968, 543.7890) and ( 572.1328, 533.0605) .. ( 568.9550, 524.7783)
+ .. controls ( 563.4970, 510.5498) and ( 559.1699, 502.1572) .. ( 548.2490, 484.6210)
+ .. controls ( 542.0810, 474.7177) and ( 534.3271, 461.6035) .. ( 532.1142, 457.3330)
+ .. controls ( 531.1406, 455.4550) and ( 529.1640, 453.5595) .. ( 527.7216, 453.1210)
+ .. controls ( 526.2792, 452.6835) and ( 524.1386, 451.4814) .. ( 522.9638, 450.4511)
+ .. controls ( 520.4082, 448.2089) and ( 510.2705, 447.6406) .. cycle}
+% \end{macrocode}
+%
+% 学。
+% \begin{macrocode}
+\def\fdulogo@name@original@xue{%
+ ( 859.9462, 361.5869)
+ .. controls ( 857.7607, 362.5371) and ( 855.7080, 363.0507) .. ( 855.3837, 362.7265)
+ .. controls ( 853.8916, 361.2343) and ( 832.1875, 365.2773) .. ( 827.5283, 367.9150)
+ .. controls ( 824.7675, 369.4785) and ( 820.8144, 371.1298) .. ( 818.7441, 371.5849)
+ .. controls ( 814.5322, 372.5117) and ( 810.7656, 374.1992) .. ( 791.7636, 383.6689)
+ .. controls ( 773.4511, 392.7949) and ( 756.0244, 404.7509) .. ( 758.0625, 406.7900)
+ .. controls ( 758.5966, 407.3242) and ( 772.4179, 400.8740) .. ( 774.8232, 398.9677)
+ .. controls ( 777.2548, 397.0410) and ( 800.0771, 388.0917) .. ( 813.0966, 383.9599)
+ .. controls ( 828.4384, 379.0908) and ( 849.4228, 376.2177) .. ( 855.8945, 378.0996)
+ -- ( 860.1552, 379.3388)
+ -- ( 859.8203, 393.7060)
+ .. controls ( 859.3164, 415.3574) and ( 856.8242, 456.8144) .. ( 855.9267, 458.4892)
+ .. controls ( 854.9560, 460.2998) and ( 837.3593, 454.7207) .. ( 830.4912, 450.4257)
+ .. controls ( 828.0087, 448.8730) and ( 825.1162, 447.6025) .. ( 824.0634, 447.6025)
+ .. controls ( 823.0107, 447.6025) and ( 821.8242, 446.7548) .. ( 821.4277, 445.7197)
+ .. controls ( 821.0302, 444.6845) and ( 819.5576, 443.8378) .. ( 818.1562, 443.8378)
+ .. controls ( 816.7539, 443.8378) and ( 815.6064, 443.1162) .. ( 815.6064, 442.2343)
+ .. controls ( 815.6064, 441.3525) and ( 810.1005, 437.7529) .. ( 803.3710, 434.2343)
+ .. controls ( 786.6523, 425.4951) and ( 784.1806, 424.2441) .. ( 779.8427, 422.3300)
+ .. controls ( 777.7714, 421.4169) and ( 774.0683, 419.3847) .. ( 771.6132, 417.8144)
+ .. controls ( 766.0869, 414.2822) and ( 755.1582, 413.1093) .. ( 750.4921, 415.5478)
+ .. controls ( 746.3808, 417.6962) and ( 741.5625, 422.7500) .. ( 736.6806, 430.0332)
+ .. controls ( 733.3593, 434.9873) and ( 733.0986, 435.9882) .. ( 734.5537, 438.1904)
+ .. controls ( 735.8554, 440.1621) and ( 738.0654, 440.8437) .. ( 744.8505, 441.3681)
+ .. controls ( 753.9287, 442.0703) and ( 767.1630, 446.4082) .. ( 779.8017, 452.8242)
+ .. controls ( 783.9208, 454.9150) and ( 789.1044, 456.7939) .. ( 791.3212, 457.0000)
+ .. controls ( 794.9130, 457.3339) and ( 802.8613, 461.4062) .. ( 799.9208, 461.4062)
+ .. controls ( 799.2685, 461.4062) and ( 799.9677, 462.2695) .. ( 801.4736, 463.3242)
+ .. controls ( 803.1396, 464.4912) and ( 805.4218, 464.9394) .. ( 807.2968, 464.4697)
+ .. controls ( 809.6064, 463.8896) and ( 810.7226, 464.3339) .. ( 811.7412, 466.2373)
+ .. controls ( 812.4892, 467.6347) and ( 814.0888, 468.8017) .. ( 815.2949, 468.8291)
+ .. controls ( 819.8984, 468.9326) and ( 823.2294, 469.7812) .. ( 824.6611, 471.2138)
+ .. controls ( 825.4794, 472.0312) and ( 827.4648, 472.7001) .. ( 829.0742, 472.7001)
+ .. controls ( 830.6835, 472.7001) and ( 834.0283, 473.5468) .. ( 836.5058, 474.5820)
+ .. controls ( 838.9833, 475.6171) and ( 842.0019, 476.4648) .. ( 843.2138, 476.4648)
+ .. controls ( 844.4257, 476.4648) and ( 846.0927, 477.2792) .. ( 846.9189, 478.2744)
+ .. controls ( 847.7451, 479.2695) and ( 850.2138, 480.2578) .. ( 852.4062, 480.4707)
+ .. controls ( 855.7832, 480.7978) and ( 856.4550, 481.4238) .. ( 856.8144, 484.5791)
+ .. controls ( 857.2656, 488.5478) and ( 862.0068, 495.2529) .. ( 870.1855, 503.4873)
+ .. controls ( 878.4355, 511.7929) and ( 887.1357, 521.8330) .. ( 887.1357, 523.0478)
+ .. controls ( 887.1357, 523.6728) and ( 885.0175, 523.2919) .. ( 882.4296, 522.2011)
+ .. controls ( 865.0791, 514.8906) and ( 855.0830, 512.4111) .. ( 841.6679, 512.0908)
+ .. controls ( 834.2597, 511.9150) and ( 827.9033, 512.2500) .. ( 827.5410, 512.8359)
+ .. controls ( 825.0546, 516.8583) and ( 834.7304, 527.3525) .. ( 848.9355, 536.0410)
+ .. controls ( 872.5839, 550.5058) and ( 891.0488, 558.1162) .. ( 915.9726, 563.6728)
+ .. controls ( 937.9951, 568.5830) and ( 964.7958, 579.8984) .. ( 975.9189, 588.9814)
+ .. controls ( 983.2890, 595.0009) and ( 982.8359, 596.0996) .. ( 973.4091, 595.0625)
+ .. controls ( 962.0449, 593.8125) and ( 930.1123, 588.2060) .. ( 926.4716, 586.8212)
+ .. controls ( 924.7626, 586.1718) and ( 921.9355, 585.6396) .. ( 920.1894, 585.6396)
+ .. controls ( 918.4433, 585.6396) and ( 913.1767, 584.4736) .. ( 908.4843, 583.0488)
+ .. controls ( 899.9658, 580.4619) and ( 899.9501, 580.4482) .. ( 896.6240, 573.0371)
+ .. controls ( 890.3193, 558.9892) and ( 881.4707, 552.6191) .. ( 883.2324, 563.3964)
+ .. controls ( 883.3203, 563.9316) and ( 882.7470, 566.9277) .. ( 881.9599, 570.0546)
+ .. controls ( 880.8320, 574.5312) and ( 880.0957, 575.5644) .. ( 878.4980, 574.9082)
+ .. controls ( 877.3818, 574.4492) and ( 874.4921, 573.5107) .. ( 872.0771, 572.8212)
+ .. controls ( 869.6611, 572.1328) and ( 862.6025, 569.1259) .. ( 856.3906, 566.1396)
+ .. controls ( 850.1787, 563.1533) and ( 839.5781, 558.4052) .. ( 832.8320, 555.5888)
+ .. controls ( 826.0869, 552.7724) and ( 815.1669, 547.9277) .. ( 808.5664, 544.8222)
+ .. controls ( 797.6845, 539.7041) and ( 796.2529, 539.3261) .. ( 793.2226, 540.7734)
+ .. controls ( 786.2568, 544.1015) and ( 789.9345, 552.0595) .. ( 799.1591, 553.6181)
+ .. controls ( 801.9160, 554.0839) and ( 810.8388, 557.0097) .. ( 818.9873, 560.1191)
+ .. controls ( 836.3183, 566.7343) and ( 871.1201, 578.7656) .. ( 876.2841, 579.9277)
+ .. controls ( 879.6445, 580.6835) and ( 879.8115, 581.0195) .. ( 879.0097, 585.3828)
+ .. controls ( 877.7978, 591.9804) and ( 875.8417, 593.4570) .. ( 875.8417, 587.7734)
+ .. controls ( 875.8417, 583.9667) and ( 875.3896, 583.1298) .. ( 873.3320, 583.1298)
+ .. controls ( 871.9511, 583.1298) and ( 870.8222, 583.5576) .. ( 870.8222, 584.0791)
+ .. controls ( 870.8222, 584.6005) and ( 869.0214, 585.8242) .. ( 866.8212, 586.7978)
+ .. controls ( 863.5742, 588.2353) and ( 861.5224, 588.2968) .. ( 855.9267, 587.1230)
+ .. controls ( 845.7187, 584.9814) and ( 845.1533, 587.5312) .. ( 855.1357, 590.6894)
+ .. controls ( 861.8408, 592.8115) and ( 862.4755, 594.2402) .. ( 858.8349, 599.0136)
+ .. controls ( 857.1455, 601.2285) and ( 855.7636, 603.3984) .. ( 855.7636, 603.8359)
+ .. controls ( 855.7636, 605.1064) and ( 849.2841, 613.2480) .. ( 848.2734, 613.2480)
+ .. controls ( 847.7685, 613.2480) and ( 844.1982, 608.5019) .. ( 840.3378, 602.7021)
+ .. controls ( 833.2685, 592.0791) and ( 824.7119, 581.8750) .. ( 822.8740, 581.8750)
+ .. controls ( 822.3281, 581.8750) and ( 821.8808, 583.5488) .. ( 821.8808, 585.5937)
+ .. controls ( 821.8808, 588.2441) and ( 823.2646, 590.6757) .. ( 826.7001, 594.0634)
+ .. controls ( 829.3515, 596.6777) and ( 834.2500, 603.2568) .. ( 837.5859, 608.6845)
+ -- ( 843.6523, 618.5537)
+ -- ( 840.6103, 620.8925)
+ .. controls ( 838.9365, 622.1787) and ( 837.1435, 623.2431) .. ( 836.6259, 623.2587)
+ .. controls ( 834.7148, 623.3154) and ( 835.7675, 627.0302) .. ( 838.3857, 629.4697)
+ .. controls ( 840.9277, 631.8378) and ( 841.2900, 631.8671) .. ( 844.5205, 629.9589)
+ .. controls ( 846.4091, 628.8427) and ( 848.7753, 628.2460) .. ( 849.7792, 628.6308)
+ .. controls ( 850.7832, 629.0156) and ( 856.0537, 634.8886) .. ( 861.4921, 641.6816)
+ .. controls ( 866.9306, 648.4736) and ( 872.1015, 654.7773) .. ( 872.9833, 655.6894)
+ .. controls ( 875.5976, 658.3935) and ( 874.8876, 659.3046) .. ( 869.0117, 660.7841)
+ .. controls ( 860.1054, 663.0273) and ( 857.3457, 662.5126) .. ( 850.3759, 657.3125)
+ .. controls ( 846.7822, 654.6308) and ( 842.5195, 652.0351) .. ( 840.9033, 651.5439)
+ .. controls ( 835.7929, 649.9931) and ( 838.2041, 654.8964) .. ( 844.1699, 658.1875)
+ .. controls ( 847.0947, 659.8007) and ( 849.4892, 661.6435) .. ( 849.4892, 662.2822)
+ .. controls ( 849.4892, 662.9208) and ( 846.3828, 663.4433) .. ( 842.5869, 663.4433)
+ .. controls ( 835.7421, 663.4433) and ( 835.6845, 663.4755) .. ( 835.6845, 667.2392)
+ .. controls ( 835.6845, 670.2187) and ( 836.4267, 671.3222) .. ( 839.1357, 672.3720)
+ .. controls ( 842.4033, 673.6376) and ( 853.2587, 673.1093) .. ( 857.5117, 671.4775)
+ .. controls ( 858.7666, 670.9960) and ( 861.3046, 672.5205) .. ( 864.5576, 675.7099)
+ .. controls ( 867.3544, 678.4511) and ( 871.4189, 682.0361) .. ( 873.5898, 683.6767)
+ .. controls ( 890.8730, 696.7343) and ( 897.1748, 702.7265) .. ( 897.1748, 706.0996)
+ .. controls ( 897.1748, 710.6279) and ( 901.3623, 711.9609) .. ( 904.7968, 708.5263)
+ .. controls ( 909.1591, 704.1640) and ( 907.9541, 700.2519) .. ( 901.1923, 696.8261)
+ .. controls ( 893.7861, 693.0732) and ( 876.6660, 680.3652) .. ( 871.0878, 674.4804)
+ -- ( 866.9619, 670.1269)
+ -- ( 874.7207, 666.2812)
+ -- ( 882.4794, 662.4365)
+ -- ( 887.5058, 666.0771)
+ .. controls ( 893.1787, 670.1865) and ( 896.1015, 670.6113) .. ( 898.9677, 667.7460)
+ .. controls ( 901.8320, 664.8808) and ( 901.4472, 658.3007) .. ( 897.5244, 643.0595)
+ -- ( 894.0537, 629.5781)
+ -- ( 897.1035, 621.0986)
+ .. controls ( 902.7265, 605.4677) and ( 900.2685, 599.8505) .. ( 885.4394, 594.4404)
+ .. controls ( 882.7138, 593.4462) and ( 882.0791, 592.6152) .. ( 882.7773, 590.9560)
+ .. controls ( 883.2812, 589.7578) and ( 883.9687, 587.5068) .. ( 884.3056, 585.9541)
+ .. controls ( 885.1201, 582.1992) and ( 890.0908, 582.1992) .. ( 893.8154, 585.9541)
+ .. controls ( 895.3554, 587.5068) and ( 901.3554, 599.5068) .. ( 907.1474, 612.6201)
+ .. controls ( 912.9404, 625.7333) and ( 919.0888, 639.0039) .. ( 920.8105, 642.1103)
+ .. controls ( 927.4179, 654.0302) and ( 929.0996, 656.9658) .. ( 937.3466, 670.9726)
+ .. controls ( 948.2617, 689.5097) and ( 952.0039, 698.1718) .. ( 950.2841, 700.9199)
+ .. controls ( 948.2871, 704.1103) and ( 943.3750, 704.0205) .. ( 933.3613, 700.6103)
+ .. controls ( 923.2431, 697.1650) and ( 909.6972, 693.5488) .. ( 907.0322, 693.5820)
+ .. controls ( 901.1621, 693.6542) and ( 938.3847, 709.4511) .. ( 945.4882, 709.9013)
+ .. controls ( 952.8808, 710.3701) and ( 954.8691, 709.8330) .. ( 956.8310, 706.8378)
+ .. controls ( 958.6474, 704.0664) and ( 958.6474, 703.2148) .. ( 956.8349, 697.1123)
+ .. controls ( 954.9199, 690.6611) and ( 939.8642, 661.9316) .. ( 931.6289, 649.0117)
+ .. controls ( 927.9404, 643.2265) and ( 918.5078, 624.1748) .. ( 918.5078, 622.5107)
+ .. controls ( 918.5078, 621.8417) and ( 907.2167, 597.7626) .. ( 904.6103, 592.8720)
+ .. controls ( 901.6191, 587.2617) and ( 902.9716, 587.2021) .. ( 922.3652, 592.0996)
+ .. controls ( 942.4111, 597.1601) and ( 965.8681, 600.7509) .. ( 979.5800, 600.8554)
+ .. controls ( 986.2460, 600.9072) and ( 988.3535, 600.4296) .. ( 990.3750, 598.4082)
+ -- ( 992.8857, 595.8974)
+ -- ( 990.2851, 591.7099)
+ .. controls ( 986.5478, 585.6914) and ( 978.9980, 578.9824) .. ( 972.4677, 575.8779)
+ .. controls ( 951.8281, 566.0634) and ( 944.1455, 563.7490) .. ( 895.9199, 552.8183)
+ .. controls ( 875.5029, 548.1904) and ( 859.4863, 540.1650) .. ( 848.9199, 529.2666)
+ .. controls ( 843.2080, 523.3750) and ( 843.7802, 523.2089) .. ( 857.6455, 526.7285)
+ .. controls ( 863.1669, 528.1298) and ( 874.1787, 529.6015) .. ( 882.1162, 529.9990)
+ .. controls ( 896.3076, 530.7089) and ( 896.5947, 530.6689) .. ( 899.4365, 527.5986)
+ .. controls ( 903.1230, 523.6132) and ( 903.2421, 521.1093) .. ( 900.0810, 514.0322)
+ .. controls ( 897.0097, 507.1572) and ( 887.7187, 499.8359) .. ( 878.6464, 497.1416)
+ .. controls ( 870.7539, 494.7978) and ( 862.0371, 488.5439) .. ( 862.0371, 485.2255)
+ .. controls ( 862.0371, 482.9873) and ( 862.6269, 482.7900) .. ( 867.3710, 483.4384)
+ .. controls ( 870.3037, 483.8398) and ( 875.0908, 485.0175) .. ( 878.0078, 486.0556)
+ .. controls ( 880.9248, 487.0937) and ( 883.8935, 487.5839) .. ( 884.6044, 487.1435)
+ .. controls ( 885.3164, 486.7041) and ( 886.2431, 487.2441) .. ( 886.6650, 488.3437)
+ .. controls ( 887.1660, 489.6484) and ( 888.2734, 490.0761) .. ( 889.8535, 489.5742)
+ .. controls ( 891.1855, 489.1513) and ( 893.0966, 489.4873) .. ( 894.1005, 490.3203)
+ .. controls ( 895.1416, 491.1845) and ( 897.4951, 491.5214) .. ( 899.5781, 491.1054)
+ .. controls ( 902.0449, 490.6113) and ( 903.7480, 490.9990) .. ( 904.8271, 492.2998)
+ .. controls ( 905.9716, 493.6787) and ( 907.6318, 493.9980) .. ( 910.6787, 493.4267)
+ .. controls ( 913.4121, 492.9140) and ( 915.6416, 493.2167) .. ( 916.9130, 494.2714)
+ .. controls ( 918.0009, 495.1757) and ( 920.0761, 496.0068) .. ( 921.5234, 496.1181)
+ .. controls ( 922.9707, 496.2304) and ( 927.9970, 496.6679) .. ( 932.6933, 497.0898)
+ .. controls ( 937.5419, 497.5253) and ( 943.4179, 497.2685) .. ( 946.2880, 496.4960)
+ .. controls ( 950.5859, 495.3388) and ( 951.7197, 494.2841) .. ( 953.8574, 489.4531)
+ .. controls ( 955.3623, 486.0488) and ( 956.0664, 482.5576) .. ( 955.6113, 480.7451)
+ .. controls ( 955.1806, 479.0302) and ( 955.4052, 477.7197) .. ( 956.1308, 477.7197)
+ .. controls ( 958.7851, 477.7197) and ( 957.2763, 473.9687) .. ( 954.3232, 473.2275)
+ .. controls ( 952.6259, 472.8017) and ( 950.5322, 471.6025) .. ( 949.6689, 470.5634)
+ .. controls ( 945.5595, 465.6113) and ( 939.1972, 466.1250) .. ( 924.2705, 472.6132)
+ .. controls ( 917.5117, 475.5507) and ( 908.3144, 475.3681) .. ( 897.1748, 472.0751)
+ .. controls ( 894.0683, 471.1572) and ( 890.1152, 470.1406) .. ( 888.3906, 469.8164)
+ .. controls ( 879.7187, 468.1845) and ( 868.6953, 464.6953) .. ( 866.7431, 462.9638)
+ .. controls ( 864.2519, 460.7548) and ( 863.8935, 450.7460) .. ( 865.8789, 438.8173)
+ .. controls ( 866.5107, 435.0214) and ( 867.5664, 426.2685) .. ( 868.2246, 419.3671)
+ .. controls ( 868.8837, 412.4648) and ( 870.9599, 401.1708) .. ( 872.8388, 394.2695)
+ .. controls ( 877.9130, 375.6347) and ( 877.9716, 372.8085) .. ( 873.4365, 365.7207)
+ .. controls ( 869.2724, 359.2128) and ( 867.0009, 358.5175) .. cycle
+ ( 891.8671, 576.6201)
+ .. controls ( 892.1406, 577.4404) and ( 891.4697, 578.1103) .. ( 890.3769, 578.1103)
+ .. controls ( 889.2841, 578.1103) and ( 888.3906, 577.2167) .. ( 888.3906, 576.1240)
+ .. controls ( 888.3906, 573.9082) and ( 891.0917, 574.2939) .. cycle
+ ( 874.9306, 601.4609)
+ .. controls ( 873.2265, 615.7216) and ( 872.0917, 634.7187) .. ( 872.7216, 638.4462)
+ .. controls ( 873.1542, 641.0097) and ( 873.0458, 643.3798) .. ( 872.4794, 643.7138)
+ .. controls ( 871.9130, 644.0478) and ( 867.7255, 639.4150) .. ( 863.1748, 633.4189)
+ .. controls ( 853.7236, 620.9667) and ( 853.7255, 621.0458) .. ( 862.6591, 611.3652)
+ .. controls ( 865.8437, 607.9140) and ( 869.3906, 603.5322) .. ( 870.5410, 601.6279)
+ .. controls ( 872.8398, 597.8203) and ( 875.3769, 597.7246) .. cycle
+ ( 888.3154, 605.0439)
+ .. controls ( 894.6455, 609.0390) and ( 895.3037, 611.5156) .. ( 891.8476, 618.3330)
+ .. controls ( 888.0751, 625.7744) and ( 888.1044, 638.3427) .. ( 891.9199, 649.5332)
+ .. controls ( 894.8027, 657.9882) and ( 895.4882, 664.6982) .. ( 893.4687, 664.6982)
+ .. controls ( 890.0390, 664.6982) and ( 885.6953, 661.2636) .. ( 883.3261, 656.6787)
+ .. controls ( 881.8603, 653.8427) and ( 879.5341, 649.5449) .. ( 878.1562, 647.1298)
+ .. controls ( 875.9248, 643.2187) and ( 875.7216, 641.1474) .. ( 876.3007, 628.2099)
+ .. controls ( 877.0380, 611.7304) and ( 879.0341, 601.9541) .. ( 881.6621, 601.9541)
+ .. controls ( 882.6298, 601.9541) and ( 885.6230, 603.3447) .. cycle
+ ( 760.3574, 503.1308)
+ .. controls ( 759.0263, 506.0644) and ( 757.9316, 509.8759) .. ( 757.9248, 511.6015)
+ .. controls ( 757.8925, 520.3115) and ( 769.6572, 552.4189) .. ( 774.7480, 557.5097)
+ .. controls ( 777.3837, 560.1455) and ( 777.2109, 558.1542) .. ( 774.1230, 550.3203)
+ .. controls ( 772.1250, 545.2490) and ( 771.3232, 539.3105) .. ( 770.5751, 524.0312)
+ .. controls ( 769.8300, 508.7939) and ( 769.1240, 503.5527) .. ( 767.4814, 501.0458)
+ .. controls ( 764.5371, 496.5517) and ( 763.1611, 496.9541) .. cycle
+ ( 787.3212, 554.5810)
+ .. controls ( 786.4121, 556.9658) and ( 787.3837, 620.5800) .. ( 788.3447, 621.5410)
+ .. controls ( 789.6826, 622.8789) and ( 791.7636, 616.0781) .. ( 791.7714, 610.3427)
+ .. controls ( 791.7744, 607.4541) and ( 792.6220, 599.4931) .. ( 793.6533, 592.6513)
+ .. controls ( 797.0976, 569.7998) and ( 795.6972, 553.0126) .. ( 790.3466, 553.0126)
+ .. controls ( 789.0126, 553.0126) and ( 787.6513, 553.7187) .. cycle
+ ( 805.2324, 584.0712)
+ .. controls ( 802.1093, 587.5371) and ( 801.3720, 592.7802) .. ( 803.1083, 599.1806)
+ .. controls ( 803.9902, 602.4316) and ( 804.9482, 605.3701) .. ( 805.2363, 605.7099)
+ .. controls ( 805.5253, 606.0507) and ( 807.3525, 604.3798) .. ( 809.2978, 601.9960)
+ .. controls ( 813.6728, 596.6357) and ( 814.1035, 596.9228) .. ( 824.0458, 611.7929)
+ .. controls ( 828.0322, 617.7548) and ( 831.6855, 623.1865) .. ( 832.1660, 623.8642)
+ .. controls ( 832.6464, 624.5419) and ( 833.4072, 624.7285) .. ( 833.8574, 624.2783)
+ .. controls ( 834.3066, 623.8281) and ( 831.4179, 617.3505) .. ( 827.4365, 609.8837)
+ .. controls ( 823.4560, 602.4160) and ( 818.8994, 593.8427) .. ( 817.3105, 590.8310)
+ .. controls ( 812.2558, 581.2451) and ( 809.2802, 579.5800) .. cycle
+ ( 805.5673, 619.6240)
+ .. controls ( 805.5673, 620.3261) and ( 806.4199, 622.5498) .. ( 807.4609, 624.5634)
+ .. controls ( 808.6738, 626.9082) and ( 809.2382, 630.9101) .. ( 809.0302, 635.6904)
+ .. controls ( 808.8505, 639.7958) and ( 809.1093, 643.5595) .. ( 809.6035, 644.0546)
+ .. controls ( 810.0986, 644.5488) and ( 813.6953, 643.4423) .. ( 817.5986, 641.5937)
+ -- ( 824.6943, 638.2343)
+ -- ( 823.8730, 632.9570)
+ .. controls ( 822.9101, 626.7626) and ( 820.1318, 624.1855) .. ( 815.1748, 624.8896)
+ .. controls ( 812.3994, 625.2841) and ( 811.3154, 624.7597) .. ( 810.2988, 622.5283)
+ .. controls ( 808.9218, 619.5058) and ( 805.5673, 617.4462) .. cycle
+ ( 785.4892, 643.8544)
+ .. controls ( 785.4892, 644.8134) and ( 787.9101, 648.9082) .. ( 790.8701, 652.9521)
+ .. controls ( 801.2392, 667.1250) and ( 810.7919, 685.3535) .. ( 813.1943, 695.5517)
+ .. controls ( 814.9306, 702.9228) and ( 815.9335, 705.1835) .. ( 817.4853, 705.2216)
+ .. controls ( 819.7021, 705.2763) and ( 823.3242, 698.9609) .. ( 824.0097, 693.8457)
+ .. controls ( 825.4511, 683.0986) and ( 824.3291, 681.1855) .. ( 805.5244, 662.3212)
+ .. controls ( 795.8857, 652.6523) and ( 787.9990, 644.1494) .. ( 787.9990, 643.4257)
+ .. controls ( 787.9990, 642.7021) and ( 787.4345, 642.1103) .. ( 786.7441, 642.1103)
+ .. controls ( 786.0537, 642.1103) and ( 785.4892, 642.8955) .. cycle}
+% \end{macrocode}
+%
+% \paragraph{校名(重修版)}
+%
+% 复。
+% \begin{macrocode}
+\def\fdulogo@name@new@fu{%
+ ( 55.0390, 387.0869)
+ .. controls ( 57.9895, 398.9746) and ( 59.3242, 421.2656) .. ( 59.4433, 460.6738)
+ .. controls ( 59.5163, 484.5095) and ( 57.7684, 496.1414) .. ( 55.6855, 489.4316)
+ .. controls ( 53.8339, 483.4589) and ( 49.7734, 476.0205) .. ( 46.3623, 472.3515)
+ .. controls ( 31.1615, 456.0046) and ( 26.3968, 446.2864) .. ( 15.7529, 433.1406)
+ .. controls ( 9.5617, 425.4911) and ( 4.5521, 430.6845) .. ( 8.0849, 441.6943)
+ .. controls ( 13.6228, 458.9399) and ( 18.9023, 474.3809) .. ( 28.2783, 488.5986)
+ .. controls ( 44.9066, 513.8311) and ( 60.5305, 541.4483) .. ( 76.0195, 577.8828)
+ .. controls ( 84.0869, 596.8603) and ( 88.1699, 609.4833) .. ( 86.2412, 609.4833)
+ .. controls ( 76.5818, 609.4833) and ( 73.8409, 595.6796) .. ( 61.0410, 595.6796)
+ .. controls ( 50.3699, 595.6796) and ( 47.2025, 608.8211) .. ( 48.8974, 614.0566)
+ .. controls ( 54.4324, 631.1588) and ( 68.1855, 648.3813) .. ( 79.2060, 667.8349)
+ .. controls ( 94.2228, 694.3416) and ( 98.8544, 702.8741) .. ( 110.1865, 723.6777)
+ .. controls ( 122.1487, 745.6462) and ( 107.8188, 746.7762) .. ( 104.9345, 765.5683)
+ .. controls ( 103.5975, 774.2918) and ( 107.4349, 796.4862) .. ( 117.6757, 796.4423)
+ .. controls ( 128.7291, 796.3966) and ( 137.2404, 776.6205) .. ( 140.2548, 763.8349)
+ .. controls ( 143.2233, 751.2460) and ( 139.0235, 739.5603) .. ( 133.5312, 733.5146)
+ .. controls ( 116.9963, 715.3215) and ( 105.2681, 687.0973) .. ( 93.3681, 665.3251)
+ .. controls ( 83.6328, 647.5078) and ( 75.5703, 630.7490) .. ( 76.4667, 630.1943)
+ .. controls ( 77.3392, 629.6558) and ( 94.9170, 638.3457) .. ( 97.9912, 638.3457)
+ .. controls ( 125.3575, 638.3457) and ( 99.1470, 586.3046) .. ( 96.1123, 579.3652)
+ .. controls ( 89.4190, 564.0746) and ( 76.5780, 544.0366) .. ( 68.5863, 526.0000)
+ .. controls ( 67.9618, 524.5904) and ( 68.5232, 523.9042) .. ( 68.9999, 523.6301)
+ .. controls ( 73.1350, 521.2523) and ( 78.9204, 517.9777) .. ( 79.6914, 514.3798)
+ .. controls ( 83.3602, 497.3000) and ( 90.2348, 479.4761) .. ( 83.4248, 461.4062)
+ .. controls ( 79.3779, 450.6718) and ( 76.4365, 405.2714) .. ( 78.9306, 392.0546)
+ .. controls ( 82.7074, 372.0329) and ( 80.5146, 338.7081) .. ( 63.7187, 348.5068)
+ .. controls ( 53.5652, 354.4334) and ( 51.2609, 371.8675) .. cycle
+ ( 129.1552, 364.3349)
+ .. controls ( 113.7450, 355.2328) and ( 114.2706, 383.4133) .. ( 123.6982, 392.4746)
+ .. controls ( 128.2277, 396.8281) and ( 149.1023, 439.1372) .. ( 151.1718, 441.9550)
+ .. controls ( 154.8792, 447.0030) and ( 166.1628, 468.9529) .. ( 169.3925, 474.5820)
+ .. controls ( 173.7258, 482.1323) and ( 191.9586, 519.2902) .. ( 198.5683, 533.3271)
+ .. controls ( 191.4936, 555.6943) and ( 187.2401, 583.4053) .. ( 197.1015, 597.7753)
+ .. controls ( 211.4228, 618.6445) and ( 237.9139, 587.2907) .. ( 226.7636, 565.0566)
+ .. controls ( 223.7394, 559.0278) and ( 221.9125, 551.8403) .. ( 218.2353, 546.6777)
+ .. controls ( 213.6543, 540.2435) and ( 223.8166, 527.9150) .. ( 227.0136, 527.9150)
+ .. controls ( 233.0836, 527.9150) and ( 239.8272, 604.3686) .. ( 242.6865, 615.1298)
+ .. controls ( 244.9560, 623.6713) and ( 255.4766, 664.9677) .. ( 250.3076, 670.1367)
+ .. controls ( 234.1576, 686.2866) and ( 192.8189, 611.6179) .. ( 181.2412, 587.5224)
+ .. controls ( 178.9208, 582.6914) and ( 174.2080, 570.8320) .. ( 170.7685, 561.1699)
+ .. controls ( 158.1699, 525.7753) and ( 153.7880, 509.1025) .. ( 154.1757, 498.0234)
+ .. controls ( 154.7645, 481.1422) and ( 143.0623, 480.4507) .. ( 135.9492, 490.2685)
+ .. controls ( 123.8279, 506.9984) and ( 134.2462, 516.1795) .. ( 138.5859, 541.7187)
+ .. controls ( 145.1713, 580.4892) and ( 160.4837, 621.3605) .. ( 179.1259, 649.4140)
+ .. controls ( 195.6117, 674.2315) and ( 199.1401, 681.7989) .. ( 230.8671, 714.2666)
+ .. controls ( 256.5087, 740.5078) and ( 263.9902, 748.6582) .. ( 263.1806, 749.4677)
+ .. controls ( 258.0824, 754.5659) and ( 167.3067, 665.7151) .. ( 161.0849, 660.7480)
+ .. controls ( 151.4535, 653.0588) and ( 140.3734, 658.2870) .. ( 139.5498, 673.4824)
+ .. controls ( 139.0082, 683.4698) and ( 148.6950, 708.9102) .. ( 151.0693, 717.4033)
+ .. controls ( 154.1772, 728.5364) and ( 158.7776, 735.1072) .. ( 163.1982, 748.4501)
+ .. controls ( 169.0726, 766.1786) and ( 173.1305, 765.6032) .. ( 182.3017, 753.5498)
+ .. controls ( 190.4697, 742.8154) and ( 192.2460, 738.1162) .. ( 191.2802, 729.7939)
+ .. controls ( 190.1589, 720.1301) and ( 171.5927, 688.5410) .. ( 171.5927, 688.5410)
+ .. controls ( 172.5136, 688.5410) and ( 177.8388, 693.0654) .. ( 188.1914, 702.6455)
+ .. controls ( 200.0776, 713.6404) and ( 231.4099, 739.5211) .. ( 238.7802, 746.2666)
+ .. controls ( 243.8325, 750.8889) and ( 278.2404, 777.4924) .. ( 283.4130, 767.8232)
+ .. controls ( 285.1201, 764.6337) and ( 285.1845, 759.3916) .. ( 283.5556, 756.3476)
+ .. controls ( 282.8779, 755.0810) and ( 274.2666, 746.5683) .. ( 264.4189, 737.4306)
+ .. controls ( 236.8994, 711.8955) and ( 233.5156, 708.6523) .. ( 221.7294, 696.5058)
+ .. controls ( 212.7452, 687.2470) and ( 205.7109, 678.1240) .. ( 198.7333, 66.8000)
+ .. controls ( 190.7900, 656.4755) and ( 182.9210, 643.3594) .. ( 172.3320, 622.0253)
+ .. controls ( 164.8525, 606.9560) and ( 154.1376, 572.4765) .. ( 154.3955, 564.3066)
+ .. controls ( 154.5195, 560.4033) and ( 159.4882, 570.7187) .. ( 166.9404, 590.3505)
+ .. controls ( 185.2140, 638.4926) and ( 205.3883, 672.7778) .. ( 244.4101, 685.8251)
+ .. controls ( 249.2539, 687.4453) and ( 259.8808, 685.6884) .. ( 262.2089, 682.8828)
+ .. controls ( 265.0830, 679.4199) and ( 265.0908, 663.5078) .. ( 262.2236, 653.4042)
+ .. controls ( 260.0426, 645.7203) and ( 245.6604, 580.0308) .. ( 244.7304, 574.3457)
+ .. controls ( 243.4658, 566.6151) and ( 235.7631, 531.7710) .. ( 235.9951, 524.2529)
+ .. controls ( 236.3220, 513.6341) and ( 232.9531, 505.6026) .. ( 226.7422, 500.0000)
+ .. controls ( 225.5997, 498.9694) and ( 223.4661, 498.4973) .. ( 222.0000, 499.4394)
+ .. controls ( 213.6905, 504.7787) and ( 212.8672, 506.1857) .. ( 210.0869, 511.6718)
+ .. controls ( 208.3574, 515.0839) and ( 206.4023, 517.8759) .. ( 205.7412, 517.8759)
+ .. controls ( 202.2991, 517.8759) and ( 190.6275, 485.4098) .. ( 187.4511, 478.8642)
+ .. controls ( 174.1759, 451.4995) and ( 169.1477, 444.9884) .. ( 182.9667, 455.6240)
+ .. controls ( 203.2746, 471.2497) and ( 229.5269, 487.6807) .. ( 254.8427, 495.4121)
+ .. controls ( 293.2283, 507.1350) and ( 278.5836, 465.2726) .. ( 266.4531, 438.9951)
+ .. controls ( 263.7792, 433.2021) and ( 263.6015, 432.0722) .. ( 265.1748, 430.8378)
+ .. controls ( 282.7666, 417.0439) and ( 292.2167, 410.1445) .. ( 294.5136, 409.4208)
+ .. controls ( 299.3315, 407.9037) and ( 297.4554, 400.4573) .. ( 299.2001, 395.2099)
+ .. controls ( 300.0253, 392.7304) and ( 299.7119, 392.3867) .. ( 296.6250, 392.3867)
+ .. controls ( 288.1453, 392.3867) and ( 273.8219, 406.2578) .. ( 268.4746, 413.6142)
+ .. controls ( 266.6044, 416.1943) and ( 258.3535, 421.3466) .. ( 257.2177, 420.6445)
+ .. controls ( 256.4873, 420.1933) and ( 254.8076, 417.7451) .. ( 253.4833, 415.2031)
+ .. controls ( 250.1953, 408.8906) and ( 242.1611, 400.7851) .. ( 235.8378, 397.4013)
+ .. controls ( 231.6357, 395.1523) and ( 228.4111, 396.6767) .. ( 219.2968, 405.2226)
+ .. controls ( 201.3337, 422.0630) and ( 193.7961, 443.3944) .. ( 221.5488, 447.0136)
+ .. controls ( 227.3857, 447.7744) and ( 233.3994, 446.0888) .. ( 249.3583, 439.2177)
+ .. controls ( 252.2500, 437.9726) and ( 266.0332, 469.8496) .. ( 267.9326, 482.1718)
+ .. controls ( 269.0634, 489.5146) and ( 267.2861, 490.5273) .. ( 257.3164, 488.2246)
+ .. controls ( 240.4992, 484.3394) and ( 201.2412, 459.7346) .. ( 190.1689, 445.2773)
+ .. controls ( 178.7371, 430.3513) and ( 146.2938, 401.7530) .. ( 142.4257, 383.9511)
+ .. controls ( 141.2187, 378.3964) and ( 133.4042, 366.8457) .. cycle
+ ( 240.4843, 420.3164)
+ .. controls ( 245.4355, 427.6318) and ( 245.3349, 428.1669) .. ( 238.4580, 431.1250)
+ .. controls ( 199.7665, 447.7705) and ( 229.4978, 404.0855) .. cycle
+ ( 206.3203, 569.6562)
+ .. controls ( 208.4865, 561.0221) and ( 216.0378, 589.2583) .. ( 207.8408, 586.5585)
+ .. controls ( 206.2021, 586.0195) and ( 205.1494, 574.3193) .. cycle}
+% \end{macrocode}
+%
+% 旦。
+% \begin{macrocode}
+\def\fdulogo@name@new@dan{%
+ ( 440.3945, 480.3242)
+ .. controls ( 440.3945, 493.9969) and ( 342.6972, 435.2649) .. ( 342.1308, 434.8242)
+ .. controls ( 334.0659, 428.5518) and ( 331.4774, 421.2875) .. ( 319.2978, 425.6777)
+ .. controls ( 313.6807, 427.7004) and ( 306.5464, 437.0606) .. ( 306.3945, 446.9746)
+ .. controls ( 306.1996, 459.8458) and ( 314.2750, 457.1341) .. ( 319.5712, 463.8574)
+ .. controls ( 320.8925, 465.5341) and ( 321.1054, 465.4033) .. ( 321.1396, 462.8896)
+ .. controls ( 321.1718, 460.4746) and ( 321.6582, 460.1201) .. ( 324.0029, 460.8007)
+ .. controls ( 363.4345, 472.2310) and ( 405.8435, 487.7403) .. ( 449.3593, 500.5332)
+ .. controls ( 459.2617, 503.4414) and ( 473.3349, 496.3613) .. ( 473.3349, 488.4716)
+ .. controls ( 473.3349, 483.8603) and ( 471.1064, 481.7968) .. ( 465.1064, 480.8515)
+ .. controls ( 440.0788, 476.9060) and ( 444.5980, 471.6216) .. ( 424.0000, 464.3716)
+ .. controls ( 421.5870, 463.5223) and ( 421.5125, 463.8563) .. ( 423.0908, 466.3837)
+ .. controls ( 425.8137, 470.7410) and ( 440.3945, 474.8715) .. cycle
+ ( 386.9697, 554.5566)
+ .. controls ( 376.6975, 573.0775) and ( 370.1201, 587.3956) .. ( 370.1201, 595.7177)
+ .. controls ( 370.1201, 609.5302) and ( 372.8642, 611.1503) .. ( 384.7451, 604.3525)
+ .. controls ( 397.6452, 596.9727) and ( 417.7923, 569.3470) .. ( 410.8603, 558.7685)
+ .. controls ( 406.8251, 552.6108) and ( 414.1201, 550.7666) .. ( 415.0097, 559.2871)
+ .. controls ( 416.0322, 569.0742) and ( 419.4716, 579.5505) .. ( 422.8896, 591.2871)
+ .. controls ( 428.1640, 609.3964) and ( 435.3603, 630.5166) .. ( 442.3437, 648.3847)
+ .. controls ( 448.2597, 663.5214) and ( 450.4130, 672.2275) .. ( 448.2412, 672.2275)
+ .. controls ( 432.8061, 672.2275) and ( 414.3667, 656.8592) .. ( 403.3750, 649.7109)
+ .. controls ( 392.6486, 642.7352) and ( 383.3332, 634.0160) .. ( 375.1396, 626.5146)
+ .. controls ( 367.3935, 619.4218) and ( 361.8623, 615.7998) .. ( 357.4667, 614.9384)
+ .. controls ( 347.3837, 612.9648) and ( 344.0810, 606.7646) .. ( 345.5927, 592.6455)
+ .. controls ( 346.2294, 586.6962) and ( 347.3085, 583.3525) .. ( 349.3886, 580.8798)
+ .. controls ( 357.6210, 571.0966) and ( 361.7832, 554.2304) .. ( 358.8720, 542.4482)
+ .. controls ( 353.4013, 520.3105) and ( 351.4619, 518.8955) .. ( 344.5126, 531.9648)
+ .. controls ( 341.8271, 537.0156) and ( 341.5449, 538.9179) .. ( 341.9218, 549.4023)
+ .. controls ( 342.3574, 561.4921) and ( 340.2324, 576.2607) .. ( 337.0078, 583.5527)
+ .. controls ( 333.9066, 590.5655) and ( 333.5168, 595.7347) .. ( 338.1210, 591.9140)
+ .. controls ( 347.6700, 583.9899) and ( 337.1957, 615.4540) .. ( 342.3544, 626.0849)
+ .. controls ( 345.1796, 631.9101) and ( 345.8798, 632.4570) .. ( 359.9794, 639.8652)
+ .. controls ( 373.6076, 647.0277) and ( 413.7152, 669.4904) .. ( 434.1201, 675.9589)
+ .. controls ( 450.0799, 681.0169) and ( 466.7470, 684.8132) .. ( 466.7470, 673.4941)
+ .. controls ( 466.7470, 665.0127) and ( 458.5812, 651.8508) .. ( 455.4541, 643.3691)
+ .. controls ( 449.5969, 627.4829) and ( 443.0128, 611.9750) .. ( 437.2480, 595.0517)
+ .. controls ( 434.3066, 586.4208) and ( 425.3359, 549.3056) .. ( 425.3359, 545.7714)
+ .. controls ( 425.3359, 543.2763) and ( 421.6914, 523.2187) .. ( 421.0371, 522.1103)
+ .. controls ( 417.4489, 516.0369) and ( 406.8234, 532.3358) .. ( 402.2382, 537.8701)
+ .. controls ( 398.1611, 542.7910) and ( 394.4912, 546.6523) .. ( 394.0810, 546.4521)
+ .. controls ( 381.0716, 540.0803) and ( 383.5794, 538.0502) .. ( 373.8642, 529.4033)
+ .. controls ( 365.7919, 522.2177) and ( 365.2246, 523.8359) .. ( 372.6259, 532.9345)
+ .. controls ( 377.2491, 538.6153) and ( 382.7885, 547.7060) .. cycle
+ ( 393.7402, 573.0410)
+ .. controls ( 393.9372, 574.3148) and ( 380.1591, 598.6663) .. ( 380.1591, 589.9697)
+ .. controls ( 380.1591, 586.7412) and ( 383.9306, 580.2763) .. ( 388.7685, 575.2099)
+ .. controls ( 392.8916, 570.8935) and ( 393.3750, 570.6816) .. cycle}
+% \end{macrocode}
+%
+% 大。
+% \begin{macrocode}
+\def\fdulogo@name@new@da{%
+ ( 689.3300, 467.6806)
+ .. controls ( 692.0732, 467.6265) and ( 698.9023, 465.2232) .. ( 698.9023, 462.1865)
+ .. controls ( 698.9023, 453.2264) and ( 666.9692, 451.4993) .. ( 656.6113, 451.4121)
+ .. controls ( 650.6810, 451.3616) and ( 642.6827, 443.3644) .. ( 638.3281, 443.9414)
+ .. controls ( 625.8084, 445.6001) and ( 618.8730, 454.9070) .. ( 616.0380, 467.6806)
+ .. controls ( 615.0996, 471.9091) and ( 609.2675, 486.2031) .. ( 602.8417, 500.0214)
+ .. controls ( 600.1004, 505.9188) and ( 585.6732, 546.4052) .. ( 589.0263, 549.1875)
+ .. controls ( 596.0000, 544.0000) and ( 658.2679, 468.2930) .. cycle
+ ( 478.0410, 455.2734)
+ .. controls ( 478.0410, 458.7822) and ( 478.2382, 458.8964) .. ( 484.2890, 458.8964)
+ .. controls ( 494.1474, 458.8964) and ( 514.1533, 465.6093) .. ( 519.5810, 470.7382)
+ .. controls ( 527.7900, 478.4960) and ( 546.3144, 501.7636) .. ( 550.9013, 510.0781)
+ .. controls ( 554.6816, 516.9326) and ( 565.1533, 544.1220) .. ( 564.3300, 544.9453)
+ .. controls ( 563.4492, 545.8261) and ( 547.2187, 535.0283) .. ( 538.3994, 527.6933)
+ .. controls ( 525.3037, 516.8037) and ( 515.6875, 506.8515) .. ( 515.6875, 504.1884)
+ .. controls ( 515.6875, 499.8336) and ( 510.6558, 494.0197) .. ( 506.0527, 496.7753)
+ .. controls ( 500.6611, 500.0019) and ( 498.2792, 512.2998) .. ( 502.2734, 516.2929)
+ .. controls ( 503.9550, 517.9755) and ( 504.5849, 518.0244) .. ( 506.2958, 516.6054)
+ .. controls ( 508.7910, 514.5341) and ( 513.3173, 516.8486) .. ( 522.0527, 524.6640)
+ .. controls ( 528.0462, 530.0271) and ( 554.5837, 549.7136) .. ( 564.1298, 556.7539)
+ .. controls ( 576.9433, 566.2046) and ( 587.1237, 647.9745) .. ( 588.4189, 674.1103)
+ .. controls ( 589.1376, 688.6035) and ( 590.2744, 706.6015) .. ( 590.9453, 714.1044)
+ .. controls ( 591.9648, 725.5039) and ( 591.8623, 728.1806) .. ( 590.3183, 730.3837)
+ .. controls ( 587.9892, 733.7089) and ( 587.9482, 738.7968) .. ( 590.2265, 741.9111)
+ .. controls ( 593.9345, 746.9852) and ( 609.2742, 739.6781) .. ( 611.3876, 737.3925)
+ .. controls ( 617.6537, 730.6163) and ( 611.0457, 720.8148) .. ( 609.1015, 708.6191)
+ .. controls ( 606.8052, 694.2020) and ( 603.4859, 680.1258) .. ( 603.6923, 665.3251)
+ .. controls ( 603.8808, 651.9794) and ( 599.1054, 623.3896) .. ( 593.5273, 604.4638)
+ .. controls ( 587.9189, 585.4316) and ( 584.6064, 571.8359) .. ( 585.5791, 571.8359)
+ .. controls ( 585.9355, 571.8359) and ( 588.2861, 573.4101) .. ( 590.8007, 575.3339)
+ .. controls ( 598.5688, 581.2763) and ( 617.0611, 590.5981) .. ( 627.6738, 597.8750)
+ .. controls ( 637.5055, 604.6163) and ( 642.0950, 604.0655) .. ( 625.1191, 612.7246)
+ .. controls ( 603.5489, 623.7291) and ( 650.5666, 619.6409) .. ( 660.8027, 617.5761)
+ .. controls ( 670.7346, 615.5712) and ( 659.0000, 608.0000) .. ( 654.4589, 604.5156)
+ .. controls ( 628.0000, 584.0000) and ( 614.5406, 579.0209) .. ( 583.0000, 558.2675)
+ .. controls ( 581.9864, 557.6007) and ( 581.6212, 557.2352) .. ( 581.1341, 556.0000)
+ .. controls ( 571.0688, 530.4789) and ( 564.0389, 509.9755) .. ( 548.2490, 484.6210)
+ .. controls ( 537.3892, 467.1846) and ( 533.6349, 459.8094) .. ( 522.9638, 450.4511)
+ .. controls ( 519.0514, 447.0186) and ( 478.0410, 447.5572) .. cycle}
+% \end{macrocode}
+%
+% 学。
+% \begin{macrocode}
+\def\fdulogo@name@new@xue{%
+ ( 866.9619, 670.1269)
+ .. controls ( 872.1341, 667.5631) and ( 877.3066, 664.9996) .. ( 882.4794, 662.4365)
+ .. controls ( 897.1636, 673.0723) and ( 904.9638, 671.9636) .. ( 897.5244, 643.0595)
+ .. controls ( 892.0676, 621.8633) and ( 910.3840, 603.5410) .. ( 885.4394, 594.4404)
+ .. controls ( 879.0342, 592.1041) and ( 885.2172, 577.2860) .. ( 893.8154, 585.9541)
+ .. controls ( 897.5953, 589.7651) and ( 918.1269, 637.2683) .. ( 920.8105, 642.1103)
+ .. controls ( 925.8907, 651.2752) and ( 953.6300, 695.5733) .. ( 950.2841, 700.9199)
+ .. controls ( 946.3859, 707.1475) and ( 908.5359, 693.5632) .. ( 907.0322, 693.5820)
+ .. controls ( 903.4746, 693.6258) and ( 948.9630, 718.8494) .. ( 956.8310, 706.8378)
+ .. controls ( 958.6474, 704.0664) and ( 958.6474, 703.2148) .. ( 956.8349, 697.1123)
+ .. controls ( 954.9199, 690.6611) and ( 939.8642, 661.9316) .. ( 931.6289, 649.0117)
+ .. controls ( 917.4050, 626.7024) and ( 917.3557, 616.7870) .. ( 904.6103, 592.8720)
+ .. controls ( 901.6191, 587.2617) and ( 902.9716, 587.2021) .. ( 922.3652, 592.0996)
+ .. controls ( 942.4111, 597.1601) and ( 965.8681, 600.7509) .. ( 979.5800, 600.8554)
+ .. controls (1006.2410, 601.0624) and ( 980.8352, 579.8558) .. ( 972.4677, 575.8779)
+ .. controls ( 951.8281, 566.0634) and ( 944.1455, 563.7490) .. ( 895.9199, 552.8183)
+ .. controls ( 875.5029, 548.1904) and ( 859.4863, 540.1650) .. ( 848.9199, 529.2666)
+ .. controls ( 843.2080, 523.3750) and ( 843.7802, 523.2089) .. ( 857.6455, 526.7285)
+ .. controls ( 872.2212, 530.4278) and ( 910.6040, 537.5911) .. ( 900.0810, 514.0322)
+ .. controls ( 897.0097, 507.1572) and ( 887.7187, 499.8359) .. ( 878.6464, 497.1416)
+ .. controls ( 870.7539, 494.7978) and ( 863.0371, 488.5439) .. ( 863.0371, 485.2255)
+ .. controls ( 863.0371, 485.2255) and ( 947.3786, 504.0948) .. ( 953.8574, 489.4531)
+ .. controls ( 962.5270, 469.8408) and ( 947.0187, 462.7251) .. ( 924.2705, 472.6132)
+ .. controls ( 914.7527, 476.7498) and ( 899.4143, 471.8888) .. ( 888.3906, 469.8164)
+ .. controls ( 873.8373, 467.0778) and ( 866.6132, 465.4492) .. ( 864.8242, 461.0000)
+ .. controls ( 863.2480, 457.0791) and ( 864.3739, 447.8594) .. ( 865.8789, 438.8173)
+ .. controls ( 868.0575, 425.7284) and ( 869.2750, 407.3598) .. ( 872.8388, 394.2695)
+ .. controls ( 877.9130, 375.6347) and ( 877.9716, 372.8085) .. ( 873.4365, 365.7207)
+ .. controls ( 869.2724, 359.2128) and ( 867.0009, 358.5175) .. ( 859.9462, 361.5869)
+ .. controls ( 827.5201, 375.6846) and ( 821.4643, 368.8674) .. ( 791.7636, 383.6689)
+ .. controls ( 773.4511, 392.7949) and ( 756.0244, 404.7509) .. ( 758.0625, 406.7900)
+ .. controls ( 758.5966, 407.3242) and ( 772.4179, 400.8740) .. ( 774.8232, 398.9677)
+ .. controls ( 785.1163, 390.8118) and ( 831.3897, 376.7914) .. ( 853.9999, 378.3438)
+ .. controls ( 858.3950, 378.6456) and ( 860.1896, 378.1501) .. ( 860.0654, 382.9999)
+ .. controls ( 859.4822, 405.7672) and ( 857.8050, 454.9841) .. ( 855.9267, 458.4892)
+ .. controls ( 852.1312, 465.5686) and ( 771.6132, 417.8144) .. ( 771.6132, 417.8144)
+ .. controls ( 754.9244, 407.1476) and ( 744.3724, 418.5578) .. ( 736.6806, 430.0332)
+ .. controls ( 730.8985, 438.6579) and ( 733.8836, 440.5205) .. ( 744.8505, 441.3681)
+ .. controls ( 781.3750, 444.1931) and ( 821.0000, 475.0000) .. ( 855.4062, 483.4707)
+ .. controls ( 856.7646, 483.8046) and ( 856.7910, 485.2587) .. ( 856.8144, 486.5791)
+ .. controls ( 856.8769, 490.0722) and ( 862.0068, 495.2529) .. ( 870.1855, 503.4873)
+ .. controls ( 878.4355, 511.7929) and ( 887.1357, 521.8330) .. ( 887.1357, 523.0478)
+ .. controls ( 887.1357, 523.6728) and ( 885.0175, 523.2919) .. ( 882.4296, 522.2011)
+ .. controls ( 865.0791, 514.8906) and ( 855.0830, 512.4111) .. ( 841.6679, 512.0908)
+ .. controls ( 834.2597, 511.9150) and ( 827.9033, 512.2500) .. ( 827.5410, 512.8359)
+ .. controls ( 825.0546, 516.8583) and ( 834.7304, 527.3525) .. ( 848.9355, 536.0410)
+ .. controls ( 872.5839, 550.5058) and ( 891.0488, 558.1162) .. ( 915.9726, 563.6728)
+ .. controls ( 937.9951, 568.5830) and ( 964.7958, 579.8984) .. ( 975.9189, 588.9814)
+ .. controls ( 983.2890, 595.0009) and ( 982.8359, 596.0996) .. ( 973.4091, 595.0625)
+ .. controls ( 949.3745, 592.4188) and ( 924.0128, 587.7639) .. ( 908.4843, 583.0488)
+ .. controls ( 899.9658, 580.4619) and ( 899.9501, 580.4482) .. ( 896.6240, 573.0371)
+ .. controls ( 890.3193, 558.9892) and ( 881.4707, 552.6191) .. ( 883.2324, 563.3964)
+ .. controls ( 883.6320, 565.8299) and ( 883.1162, 576.9833) .. ( 880.4980, 575.9082)
+ .. controls ( 858.6269, 566.9150) and ( 830.4409, 555.1138) .. ( 808.5664, 544.8222)
+ .. controls ( 797.6845, 539.7041) and ( 796.2529, 539.3261) .. ( 793.2226, 540.7734)
+ .. controls ( 786.2568, 544.1015) and ( 789.9345, 552.0595) .. ( 799.1591, 553.6181)
+ .. controls ( 801.9160, 554.0839) and ( 810.8388, 557.0097) .. ( 818.9873, 560.1191)
+ .. controls ( 836.3183, 566.7343) and ( 871.1201, 578.7656) .. ( 876.2841, 579.9277)
+ .. controls ( 879.6445, 580.6835) and ( 879.8115, 581.0195) .. ( 879.0097, 585.3828)
+ .. controls ( 877.7978, 591.9804) and ( 875.8417, 593.4570) .. ( 875.8417, 587.7734)
+ .. controls ( 875.8417, 583.9667) and ( 875.3896, 583.1298) .. ( 873.3320, 583.1298)
+ .. controls ( 871.9511, 583.1298) and ( 870.8222, 583.5576) .. ( 870.8222, 584.0791)
+ .. controls ( 870.8222, 587.6404) and ( 861.1080, 588.2099) .. ( 855.9267, 587.1230)
+ .. controls ( 845.7187, 584.9814) and ( 845.1533, 587.5312) .. ( 855.1357, 590.6894)
+ .. controls ( 865.6679, 594.0227) and ( 853.8306, 613.2480) .. ( 848.2734, 613.2480)
+ .. controls ( 847.7685, 613.2480) and ( 844.1982, 608.5019) .. ( 840.3378, 602.7021)
+ .. controls ( 833.2685, 592.0791) and ( 824.7119, 581.8750) .. ( 822.8740, 581.8750)
+ .. controls ( 822.3281, 581.8750) and ( 821.8808, 583.5488) .. ( 821.8808, 585.5937)
+ .. controls ( 821.8808, 588.2441) and ( 823.2646, 590.6757) .. ( 826.7001, 594.0634)
+ .. controls ( 831.8747, 599.1656) and ( 839.0208, 611.0189) .. ( 843.6523, 618.5537)
+ .. controls ( 839.5013, 621.7452) and ( 831.6608, 623.2039) .. ( 838.3857, 629.4697)
+ .. controls ( 842.8114, 633.5928) and ( 845.6252, 627.0387) .. ( 849.7792, 628.6308)
+ .. controls ( 851.8094, 629.4089) and ( 871.6414, 654.3014) .. ( 872.9833, 655.6894)
+ .. controls ( 875.5976, 658.3935) and ( 874.8876, 659.3046) .. ( 869.0117, 660.7841)
+ .. controls ( 860.1054, 663.0273) and ( 857.3457, 662.5126) .. ( 850.3759, 657.3125)
+ .. controls ( 846.7822, 654.6308) and ( 842.5195, 652.0351) .. ( 840.9033, 651.5439)
+ .. controls ( 830.5901, 648.4143) and ( 849.4892, 662.0866) .. ( 849.4892, 662.2822)
+ .. controls ( 849.4892, 662.9208) and ( 846.3828, 663.4433) .. ( 842.5869, 663.4433)
+ .. controls ( 835.7421, 663.4433) and ( 835.6845, 663.4755) .. ( 835.6845, 667.2392)
+ .. controls ( 835.6845, 675.0414) and ( 850.2865, 674.2498) .. ( 857.5117, 671.4775)
+ .. controls ( 860.4374, 670.3550) and ( 871.3424, 681.9783) .. ( 873.5898, 683.6767)
+ .. controls ( 890.8730, 696.7343) and ( 897.1748, 702.7265) .. ( 897.1748, 706.0996)
+ .. controls ( 897.1748, 710.6279) and ( 901.3623, 711.9609) .. ( 904.7968, 708.5263)
+ .. controls ( 909.1591, 704.1640) and ( 907.9541, 700.2519) .. ( 901.1923, 696.8261)
+ .. controls ( 890.8471, 691.5839) and ( 874.3538, 677.9265) .. cycle
+ ( 888.3906, 576.1240)
+ .. controls ( 888.3906, 571.7533) and ( 894.7409, 578.1103) .. ( 890.3769, 578.1103)
+ .. controls ( 889.2841, 578.1103) and ( 888.3906, 577.2167) .. cycle
+ ( 874.9306, 601.4609)
+ .. controls ( 873.2265, 615.7216) and ( 872.0917, 634.7187) .. ( 872.7216, 638.4462)
+ .. controls ( 874.6299, 649.7538) and ( 868.3526, 640.2413) .. ( 863.1748, 633.4189)
+ .. controls ( 853.7236, 620.9667) and ( 853.7255, 621.0458) .. ( 862.6591, 611.3652)
+ .. controls ( 865.8437, 607.9140) and ( 869.3906, 603.5322) .. ( 870.5410, 601.6279)
+ .. controls ( 872.8398, 597.8203) and ( 875.3769, 597.7246) .. cycle
+ ( 888.3154, 605.0439)
+ .. controls ( 894.6455, 609.0390) and ( 895.3037, 611.5156) .. ( 891.8476, 618.3330)
+ .. controls ( 888.0751, 625.7744) and ( 888.1044, 638.3427) .. ( 891.9199, 649.5332)
+ .. controls ( 894.8027, 657.9882) and ( 895.4882, 664.6982) .. ( 893.4687, 664.6982)
+ .. controls ( 886.1028, 664.6982) and ( 881.4064, 652.8263) .. ( 878.1562, 647.1298)
+ .. controls ( 874.2248, 640.2391) and ( 877.1219, 601.9541) .. ( 881.6621, 601.9541)
+ .. controls ( 882.6298, 601.9541) and ( 885.6230, 603.3447) .. cycle
+ ( 767.4814, 501.0458)
+ .. controls ( 762.0969, 492.8272) and ( 757.9420, 507.2428) .. ( 757.9248, 511.6015)
+ .. controls ( 757.8925, 520.3115) and ( 769.6572, 552.4189) .. ( 774.7480, 557.5097)
+ .. controls ( 777.3837, 560.1455) and ( 777.2109, 558.1542) .. ( 774.1230, 550.3203)
+ .. controls ( 773.0663, 547.6383) and ( 769.0537, 503.4455) .. cycle
+ ( 787.3212, 554.5810)
+ .. controls ( 786.4121, 556.9658) and ( 787.3837, 620.5800) .. ( 788.3447, 621.5410)
+ .. controls ( 788.3447, 621.5410) and ( 803.6477, 553.0126) .. ( 790.3466, 553.0126)
+ .. controls ( 789.0126, 553.0126) and ( 787.6513, 553.7187) .. cycle
+ ( 817.3105, 590.8310)
+ .. controls ( 805.5565, 568.5402) and ( 796.1662, 595.0102) .. ( 805.2363, 605.7099)
+ .. controls ( 805.5253, 606.0507) and ( 807.3525, 604.3798) .. ( 809.2978, 601.9960)
+ .. controls ( 813.6728, 596.6357) and ( 814.1035, 596.9228) .. ( 824.0458, 611.7929)
+ .. controls ( 827.9590, 617.6453) and ( 832.5091, 625.6266) .. ( 833.8574, 624.2783)
+ .. controls ( 835.3276, 622.8048) and ( 818.0093, 592.1556) .. cycle
+ ( 805.5673, 619.6240)
+ .. controls ( 805.5673, 623.9644) and ( 809.3582, 628.1528) .. ( 809.0302, 635.6904)
+ .. controls ( 808.5672, 646.2700) and ( 809.2222, 645.5608) .. ( 817.5986, 641.5937)
+ .. controls ( 825.7117, 637.7526) and ( 826.1018, 623.3375) .. ( 815.1748, 624.8896)
+ .. controls ( 811.9062, 625.3542) and ( 805.5673, 616.8618) .. cycle
+ ( 785.4892, 643.8544)
+ .. controls ( 785.4892, 644.8134) and ( 787.9101, 648.9082) .. ( 790.8701, 652.9521)
+ .. controls ( 801.2392, 667.1250) and ( 810.7919, 685.3535) .. ( 813.1943, 695.5517)
+ .. controls ( 814.9306, 702.9228) and ( 815.9335, 705.1835) .. ( 817.4853, 705.2216)
+ .. controls ( 819.7021, 705.2763) and ( 823.3242, 698.9609) .. ( 824.0097, 693.8457)
+ .. controls ( 825.4511, 683.0986) and ( 824.3291, 681.1855) .. ( 805.5244, 662.3212)
+ .. controls ( 795.8857, 652.6523) and ( 787.9990, 644.1494) .. ( 787.9990, 643.4257)
+ .. controls ( 787.9990, 642.7021) and ( 787.4345, 642.1103) .. ( 786.7441, 642.1103)
+ .. controls ( 786.0537, 642.1103) and ( 785.4892, 642.8955) .. cycle}
+% \end{macrocode}
+%
+% \paragraph{校徽}
+%
+% 核心图案。
+% \begin{macrocode}
+\def\fdulogo@emblem@kernel{%
+ ( 351.0257, 574.5394)
+ .. controls ( 353.3190, 587.1927) and ( 370.0657, 593.5527) .. ( 380.6523, 586.9527)
+ .. controls ( 386.0123, 582.3127) and ( 389.5190, 574.9927) .. ( 388.2257, 567.8194)
+ .. controls ( 386.6657, 555.0861) and ( 380.5723, 543.5794) .. ( 377.0657, 531.3794)
+ .. controls ( 375.6923, 525.8327) and ( 379.8257, 521.4461) .. ( 382.7590, 517.2994)
+ .. controls ( 419.9723, 519.7127) and ( 457.0923, 523.6194) .. ( 494.3990, 524.8194)
+ .. controls ( 505.8123, 525.8194) and ( 517.3190, 525.2194) .. ( 528.6923, 524.0594)
+ .. controls ( 539.0523, 523.2994) and ( 548.6790, 513.8594) .. ( 547.8657, 503.1794)
+ .. controls ( 547.2257, 497.1127) and ( 542.4657, 490.8994) .. ( 535.8657, 491.1261)
+ .. controls ( 523.4923, 491.0061) and ( 511.2923, 493.7927) .. ( 498.9323, 494.0994)
+ .. controls ( 478.7723, 495.8327) and ( 458.5190, 495.7261) .. ( 438.3190, 495.0194)
+ .. controls ( 427.3457, 493.9794) and ( 416.1323, 494.2061) .. ( 405.5723, 490.6061)
+ .. controls ( 398.2657, 488.0861) and ( 390.4657, 486.5261) .. ( 383.9057, 482.2461)
+ .. controls ( 379.8523, 479.5794) and ( 376.1457, 475.1127) .. ( 376.9723, 469.9394)
+ .. controls ( 378.2257, 458.7127) and ( 386.9590, 449.3127) .. ( 386.1590, 437.7127)
+ .. controls ( 383.6923, 424.5127) and ( 378.0123, 412.2194) .. ( 374.4523, 399.3127)
+ .. controls ( 371.0657, 387.4994) and ( 370.1057, 375.1794) .. ( 368.2390, 363.0727)
+ .. controls ( 367.6657, 356.9661) and ( 366.5590, 350.9127) .. ( 366.3457, 344.7661)
+ .. controls ( 363.4923, 318.5527) and ( 365.8923, 292.1794) .. ( 366.3190, 265.9127)
+ .. controls ( 366.5857, 249.0594) and ( 367.5057, 232.2194) .. ( 369.0790, 215.4461)
+ .. controls ( 369.7990, 204.2461) and ( 372.1723, 193.2194) .. ( 372.8923, 182.0194)
+ .. controls ( 372.6257, 175.8061) and ( 371.3857, 167.5128) .. ( 364.6257, 165.1928)
+ .. controls ( 358.5990, 163.6328) and ( 350.9457, 163.6461) .. ( 346.7190, 168.9661)
+ .. controls ( 338.1323, 178.7794) and ( 337.7190, 192.4861) .. ( 335.7723, 204.7261)
+ .. controls ( 331.2523, 230.4061) and ( 330.9057, 256.5527) .. ( 331.1590, 282.5527)
+ .. controls ( 288.6790, 280.9127) and ( 245.6657, 283.0594) .. ( 203.8257, 274.0994)
+ .. controls ( 200.0257, 273.4327) and ( 195.3857, 270.8727) .. ( 192.3457, 274.6461)
+ .. controls ( 185.4923, 281.7394) and ( 184.8790, 292.2061) .. ( 182.3057, 301.2594)
+ .. controls ( 185.7323, 303.2461) and ( 188.9990, 305.7261) .. ( 192.9857, 306.4594)
+ .. controls ( 217.5457, 311.7927) and ( 242.7590, 313.0594) .. ( 267.8123, 313.2727)
+ .. controls ( 289.3323, 313.9261) and ( 310.8790, 315.9261) .. ( 332.4257, 314.5794)
+ .. controls ( 332.6390, 354.8194) and ( 336.2257, 396.3661) .. ( 353.9057, 433.1261)
+ .. controls ( 355.4523, 435.0194) and ( 353.7990, 436.6461) .. ( 352.6523, 438.1527)
+ .. controls ( 344.6123, 431.4994) and ( 339.7590, 422.0727) .. ( 335.7723, 412.6194)
+ .. controls ( 331.2923, 401.5394) and ( 322.9590, 391.6861) .. ( 322.2523, 379.3261)
+ .. controls ( 320.6123, 363.9394) and ( 319.0657, 347.0194) .. ( 308.1457, 335.0061)
+ .. controls ( 294.8657, 321.7127) and ( 275.3590, 317.8861) .. ( 257.2523, 317.3127)
+ .. controls ( 244.5723, 317.0194) and ( 231.3857, 315.2461) .. ( 219.1723, 319.5927)
+ .. controls ( 199.0657, 326.6727) and ( 183.3990, 345.4194) .. ( 180.6257, 366.6327)
+ .. controls ( 176.8257, 393.4994) and ( 177.6923, 421.2461) .. ( 185.0790, 447.4327)
+ .. controls ( 187.3190, 454.1927) and ( 188.8257, 462.3127) .. ( 195.3323, 466.3794)
+ .. controls ( 225.9990, 487.4994) and ( 267.7990, 488.0594) .. ( 300.9190, 472.3927)
+ .. controls ( 312.3457, 465.7927) and ( 313.7723, 451.1527) .. ( 315.3857, 439.3794)
+ .. controls ( 318.6790, 442.3661) and ( 320.0257, 446.6861) .. ( 322.1323, 450.4727)
+ .. controls ( 330.9990, 465.6327) and ( 344.7457, 477.1527) .. ( 354.6390, 491.4861)
+ .. controls ( 353.3057, 493.3661) and ( 350.9057, 494.1927) .. ( 349.0657, 495.4994)
+ .. controls ( 339.7190, 486.9127) and ( 328.7057, 479.1527) .. ( 315.8123, 477.4327)
+ .. controls ( 308.2923, 476.0594) and ( 300.8123, 482.2594) .. ( 300.0523, 489.7127)
+ .. controls ( 300.2923, 493.8861) and ( 303.3857, 496.9127) .. ( 305.7590, 500.0594)
+ .. controls ( 316.6657, 513.4994) and ( 329.5457, 525.3927) .. ( 338.8790, 540.0861)
+ .. controls ( 345.3190, 550.5794) and ( 348.1057, 562.7261) .. ( 351.0257, 574.5394)
+ ( 211.9990, 380.1527)
+ .. controls ( 213.4123, 369.3527) and ( 216.9057, 357.4994) .. ( 226.4257, 351.1261)
+ .. controls ( 238.3190, 346.0994) and ( 251.6923, 345.4061) .. ( 264.3723, 347.0461)
+ .. controls ( 269.6657, 347.2194) and ( 275.1723, 348.2994) .. ( 279.4923, 351.5394)
+ .. controls ( 289.1057, 358.7661) and ( 292.7323, 371.9394) .. ( 290.8523, 383.4594)
+ .. controls ( 264.7057, 389.2861) and ( 238.0390, 383.6061) .. ( 211.9990, 380.1527)
+ ( 220.8523, 442.3794)
+ .. controls ( 211.5323, 434.3527) and ( 209.4657, 421.2594) .. ( 209.3857, 409.6061)
+ .. controls ( 235.9990, 409.1394) and ( 262.6123, 411.5394) .. ( 289.2123, 412.6727)
+ .. controls ( 289.9590, 420.8994) and ( 289.9990, 429.5127) .. ( 286.9323, 437.3261)
+ .. controls ( 284.6923, 443.0727) and ( 279.7457, 448.1527) .. ( 273.4257, 449.0327)
+ .. controls ( 266.3190, 450.2594) and ( 259.0657, 450.3261) .. ( 251.9057, 451.0194)
+ .. controls ( 241.1457, 450.6727) and ( 229.5723, 449.2861) .. ( 220.8523, 442.3794)
+ ( 450.5457, 484.5261)
+ .. controls ( 463.8790, 485.1927) and ( 477.2390, 484.5927) .. ( 490.5857, 484.9127)
+ .. controls ( 506.9990, 486.1261) and ( 524.7857, 485.0861) .. ( 538.9057, 475.7261)
+ .. controls ( 546.7723, 470.1794) and ( 548.8523, 459.5394) .. ( 547.1457, 450.5661)
+ .. controls ( 546.1590, 446.0727) and ( 545.1190, 440.9394) .. ( 541.0390, 438.1661)
+ .. controls ( 528.7857, 428.2327) and ( 512.1457, 427.3927) .. ( 497.0523, 427.3527)
+ .. controls ( 466.0257, 428.5661) and ( 434.8523, 425.2461) .. ( 403.9190, 428.8727)
+ .. controls ( 397.6257, 429.8461) and ( 392.7057, 435.0594) .. ( 390.7857, 440.9527)
+ .. controls ( 388.5323, 447.2727) and ( 388.2790, 454.1527) .. ( 388.6123, 460.7927)
+ .. controls ( 390.0790, 469.0727) and ( 397.1857, 474.9794) .. ( 404.3323, 478.6061)
+ .. controls ( 418.8790, 485.1261) and ( 435.2123, 482.0727) .. ( 450.5457, 484.5261)
+ ( 415.5990, 458.2727)
+ .. controls ( 412.7323, 456.5394) and ( 413.4923, 452.8461) .. ( 413.2523, 450.0327)
+ .. controls ( 414.8123, 448.9261) and ( 416.3323, 447.4327) .. ( 418.3990, 447.4194)
+ .. controls ( 447.3723, 446.7527) and ( 476.3323, 448.0861) .. ( 505.2923, 448.9661)
+ .. controls ( 510.4257, 449.3394) and ( 515.2390, 451.2727) .. ( 520.0123, 453.0594)
+ .. controls ( 519.6257, 456.4594) and ( 518.3857, 459.7394) .. ( 515.6657, 461.9394)
+ .. controls ( 487.7057, 462.5794) and ( 459.7190, 462.0861) .. ( 431.7857, 460.8194)
+ .. controls ( 426.3590, 460.5261) and ( 420.4123, 461.3127) .. ( 415.5990, 458.2727)
+ ( 434.0123, 419.4594)
+ .. controls ( 450.5857, 421.1261) and ( 467.2790, 420.3127) .. ( 483.8790, 421.3527)
+ .. controls ( 500.8390, 422.5927) and ( 517.8523, 420.9127) .. ( 534.5723, 418.0861)
+ .. controls ( 542.1057, 417.0327) and ( 547.4657, 410.4194) .. ( 549.7190, 403.5527)
+ .. controls ( 552.3857, 395.3394) and ( 553.1990, 385.8461) .. ( 548.9190, 378.0327)
+ .. controls ( 544.6523, 370.4994) and ( 536.9723, 364.7261) .. ( 528.2390, 363.7927)
+ .. controls ( 491.7723, 359.7527) and ( 454.9990, 362.1794) .. ( 418.4257, 360.0861)
+ .. controls ( 411.4657, 358.7127) and ( 403.9457, 360.2194) .. ( 398.4123, 364.7527)
+ .. controls ( 389.1857, 372.1127) and ( 385.2123, 385.1394) .. ( 388.1323, 396.4861)
+ .. controls ( 389.5990, 400.7261) and ( 392.9857, 403.8861) .. ( 395.9323, 407.1394)
+ .. controls ( 400.7723, 412.3261) and ( 407.0257, 416.5394) .. ( 414.2123, 417.4461)
+ .. controls ( 420.7990, 418.1661) and ( 427.3590, 419.3261) .. ( 434.0123, 419.4594)
+ ( 434.3590, 393.2327)
+ .. controls ( 427.4923, 392.4727) and ( 420.3057, 393.4194) .. ( 413.7190, 390.9927)
+ .. controls ( 413.3190, 390.0327) and ( 412.5190, 388.1127) .. ( 412.1323, 387.1527)
+ .. controls ( 413.1190, 385.6594) and ( 413.7590, 383.4061) .. ( 415.8790, 383.2061)
+ .. controls ( 424.2257, 380.8061) and ( 432.8657, 383.4061) .. ( 441.3457, 383.3394)
+ .. controls ( 465.4523, 385.1927) and ( 489.6390, 385.5794) .. ( 513.7590, 387.1527)
+ .. controls ( 517.5190, 387.0594) and ( 519.9723, 390.4061) .. ( 521.5057, 393.4194)
+ .. controls ( 509.7323, 396.5394) and ( 497.4523, 395.4327) .. ( 485.4657, 394.7527)
+ .. controls ( 468.4257, 394.4727) and ( 451.4123, 393.2061) .. ( 434.3590, 393.2327)
+ ( 409.9323, 351.6727)
+ .. controls ( 434.3723, 354.7127) and ( 459.0523, 354.6327) .. ( 483.6257, 355.9127)
+ .. controls ( 485.8257, 350.4861) and ( 483.7590, 344.6861) .. ( 479.9590, 340.5927)
+ .. controls ( 476.7723, 336.7127) and ( 472.7590, 333.4594) .. ( 470.6657, 328.7661)
+ .. controls ( 481.2923, 329.6461) and ( 491.8390, 331.3527) .. ( 502.5057, 331.6594)
+ .. controls ( 510.1990, 333.9127) and ( 513.4523, 342.0194) .. ( 519.0390, 346.9794)
+ .. controls ( 523.0657, 349.8061) and ( 527.8923, 353.3527) .. ( 533.0790, 351.5527)
+ .. controls ( 540.7723, 348.7527) and ( 544.7190, 339.0327) .. ( 542.3990, 331.4327)
+ .. controls ( 536.5323, 309.7261) and ( 530.5990, 287.9927) .. ( 522.9190, 266.8594)
+ .. controls ( 511.7857, 262.2194) and ( 499.5057, 266.0194) .. ( 487.8923, 265.2461)
+ .. controls ( 483.3457, 264.7394) and ( 478.3990, 265.4994) .. ( 474.3057, 263.0727)
+ .. controls ( 474.2390, 261.3661) and ( 474.3457, 259.6594) .. ( 474.6523, 257.9661)
+ .. controls ( 478.5190, 242.3527) and ( 481.2523, 226.4727) .. ( 485.9857, 211.0861)
+ .. controls ( 487.0657, 204.0061) and ( 487.6790, 196.0594) .. ( 484.2523, 189.5127)
+ .. controls ( 476.3190, 184.7127) and ( 465.8523, 189.3527) .. ( 460.8923, 196.4194)
+ .. controls ( 451.4390, 210.8061) and ( 446.5857, 227.6194) .. ( 443.3457, 244.3661)
+ .. controls ( 442.2257, 249.0727) and ( 441.6657, 254.0727) .. ( 438.8523, 258.1527)
+ .. controls ( 419.9990, 259.4727) and ( 405.9323, 243.3794) .. ( 387.7323, 241.7127)
+ .. controls ( 379.3990, 242.1927) and ( 375.1723, 251.8861) .. ( 376.6923, 259.2461)
+ .. controls ( 377.2657, 264.1527) and ( 381.2390, 267.6327) .. ( 385.1057, 270.1794)
+ .. controls ( 391.3057, 273.8061) and ( 398.4123, 275.2727) .. ( 405.1590, 277.5127)
+ .. controls ( 415.7190, 280.6061) and ( 426.2257, 284.9261) .. ( 437.3990, 284.6861)
+ .. controls ( 437.4257, 291.2327) and ( 437.5457, 297.8061) .. ( 436.7057, 304.3261)
+ .. controls ( 418.0657, 303.9394) and ( 402.1857, 292.1927) .. ( 383.9190, 289.9527)
+ .. controls ( 379.9323, 289.3927) and ( 376.6123, 292.6994) .. ( 375.4257, 296.2194)
+ .. controls ( 373.7190, 301.0861) and ( 374.1323, 306.8727) .. ( 376.9323, 311.2727)
+ .. controls ( 384.6657, 317.8994) and ( 395.1723, 320.0594) .. ( 405.0790, 320.7661)
+ .. controls ( 417.1723, 322.0727) and ( 429.9457, 321.6994) .. ( 441.0257, 327.4994)
+ .. controls ( 440.7457, 329.1261) and ( 440.4923, 330.7661) .. ( 440.2523, 332.3794)
+ .. controls ( 429.3723, 333.8327) and ( 417.8257, 328.4327) .. ( 407.4790, 333.6994)
+ .. controls ( 400.0657, 337.2461) and ( 401.4657, 350.7127) .. ( 409.9323, 351.6727)
+ ( 470.3857, 306.4994)
+ .. controls ( 470.2257, 300.0861) and ( 470.1323, 293.6461) .. ( 470.4390, 287.2327)
+ .. controls ( 479.9190, 288.6327) and ( 489.9723, 287.1794) .. ( 499.0657, 290.4194)
+ .. controls ( 502.7457, 295.7661) and ( 502.4523, 302.5927) .. ( 502.7857, 308.7927)
+ .. controls ( 491.9323, 310.0594) and ( 481.1723, 307.2461) .. ( 470.3857, 306.4994)}
+% \end{macrocode}
+%
+% 文字“FUDAN UNIVERSITY”。
+% \begin{macrocode}
+\def\fdulogo@emblem@F{%
+ ( 85.7057, 304.0061)
+ .. controls ( 90.0790, 311.5927) and ( 100.0657, 314.2461) .. ( 108.0923, 311.6461)
+ .. controls ( 103.8257, 301.6994) and ( 107.8257, 290.8461) .. ( 112.1723, 281.6861)
+ .. controls ( 119.4123, 280.1927) and ( 126.0657, 284.4594) .. ( 132.9590, 285.8861)
+ .. controls ( 137.9457, 286.4594) and ( 139.2790, 291.7794) .. ( 141.2123, 295.5394)
+ .. controls ( 142.1457, 295.5394) and ( 144.0123, 295.5261) .. ( 144.9457, 295.5261)
+ .. controls ( 148.4923, 287.1927) and ( 154.5323, 279.3527) .. ( 153.9190, 269.8327)
+ .. controls ( 149.8923, 270.8861) and ( 145.5990, 272.0727) .. ( 141.4790, 270.8594)
+ .. controls ( 125.8923, 265.4327) and ( 110.1723, 260.4061) .. ( 94.4657, 255.3527)
+ .. controls ( 89.0123, 253.6861) and ( 84.7190, 249.7127) .. ( 80.7057, 245.8194)
+ .. controls ( 73.7457, 252.0594) and ( 70.8790, 261.2594) .. ( 68.0523, 269.8727)
+ .. controls ( 64.5057, 280.9661) and ( 57.4790, 291.3394) .. ( 58.2257, 303.4461)
+ .. controls ( 62.1990, 305.3261) and ( 65.9857, 307.8194) .. ( 70.3057, 308.8327)
+ .. controls ( 74.5723, 304.0594) and ( 71.8257, 297.2861) .. ( 71.2790, 291.7127)
+ .. controls ( 72.8790, 283.5527) and ( 77.3057, 276.2727) .. ( 80.7057, 268.7661)
+ .. controls ( 88.2123, 270.8594) and ( 96.0790, 272.4861) .. ( 102.6790, 276.8327)
+ .. controls ( 102.7057, 283.0461) and ( 99.1190, 288.3661) .. ( 97.5323, 294.1927)
+ .. controls ( 95.9723, 299.6194) and ( 90.1323, 301.5127) .. ( 85.7057, 304.0061)}
+\def\fdulogo@emblem@U@i{%
+ ( 50.9990, 392.9661)
+ .. controls ( 54.6790, 390.9927) and ( 58.0523, 387.8461) .. ( 62.4923, 387.9527)
+ .. controls ( 76.3190, 388.5127) and ( 90.1457, 389.1394) .. ( 103.9723, 389.6994)
+ .. controls ( 110.1857, 389.1261) and ( 117.3590, 390.0994) .. ( 122.4257, 385.6594)
+ .. controls ( 129.6523, 379.6061) and ( 131.5457, 369.5927) .. ( 131.6390, 360.6194)
+ .. controls ( 131.1990, 353.8594) and ( 131.2923, 346.5927) .. ( 127.7857, 340.5394)
+ .. controls ( 126.0123, 337.3527) and ( 122.7590, 335.1394) .. ( 119.1590, 334.5261)
+ .. controls ( 101.3057, 331.4594) and ( 83.0790, 332.1527) .. ( 65.1723, 329.5794)
+ .. controls ( 61.1990, 328.3661) and ( 57.7323, 324.1394) .. ( 53.2523, 325.9127)
+ .. controls ( 51.4257, 332.4461) and ( 51.8123, 339.3527) .. ( 53.0390, 345.9527)
+ .. controls ( 74.4257, 345.6994) and ( 95.8390, 346.4727) .. ( 117.0790, 348.9794)
+ .. controls ( 119.7190, 350.1127) and ( 120.9323, 353.2327) .. ( 121.7190, 355.8327)
+ .. controls ( 123.2790, 362.0861) and ( 121.6257, 368.7261) .. ( 119.0657, 374.4727)
+ .. controls ( 117.1057, 378.7261) and ( 111.8123, 378.7527) .. ( 107.8257, 378.6461)
+ .. controls ( 92.1590, 378.2594) and ( 76.4790, 377.8461) .. ( 60.8657, 376.5127)
+ .. controls ( 58.5990, 373.0727) and ( 56.3057, 366.7527) .. ( 51.0390, 368.6594)
+ .. controls ( 50.6257, 369.1394) and ( 49.8257, 370.1127) .. ( 49.4123, 370.5927)
+ .. controls ( 47.9323, 378.0061) and ( 46.7857, 386.1794) .. ( 50.9990, 392.9661)}
+\def\fdulogo@emblem@D{%
+ ( 64.0257, 473.6194)
+ .. controls ( 78.0257, 477.2727) and ( 92.6790, 474.6194) .. ( 106.4523, 471.2194)
+ .. controls ( 111.2123, 469.9394) and ( 116.3323, 469.2861) .. ( 120.4923, 466.4327)
+ .. controls ( 127.2790, 462.2727) and ( 131.2123, 454.5394) .. ( 132.1990, 446.8061)
+ .. controls ( 133.4123, 440.4061) and ( 130.6523, 434.2327) .. ( 129.9057, 427.9661)
+ .. controls ( 128.5590, 418.8727) and ( 127.7857, 408.8061) .. ( 121.3323, 401.6327)
+ .. controls ( 114.6923, 407.5394) and ( 105.4257, 407.8327) .. ( 97.1057, 409.1794)
+ .. controls ( 80.6790, 411.9127) and ( 63.9323, 417.9127) .. ( 47.2257, 413.4327)
+ .. controls ( 48.1723, 428.7261) and ( 50.4123, 443.8994) .. ( 52.5723, 459.0594)
+ .. controls ( 53.5990, 465.3927) and ( 57.5857, 471.7527) .. ( 64.0257, 473.6194)
+ ( 67.2123, 459.9394)
+ .. controls ( 60.7990, 452.1794) and ( 60.0790, 441.6861) .. ( 58.8923, 432.1127)
+ .. controls ( 78.5723, 427.7127) and ( 98.4390, 424.2327) .. ( 118.2257, 420.3527)
+ .. controls ( 119.9457, 426.5661) and ( 122.2123, 432.8061) .. ( 122.0257, 439.3527)
+ .. controls ( 121.9457, 443.0727) and ( 121.2390, 447.2061) .. ( 118.1457, 449.6461)
+ .. controls ( 107.4390, 459.3794) and ( 92.2790, 460.7261) .. ( 78.5323, 462.0061)
+ .. controls ( 74.7590, 461.8861) and ( 69.9990, 463.2861) .. ( 67.2123, 459.9394)}
+\def\fdulogo@emblem@A{%
+ ( 107.3857, 530.4194)
+ .. controls ( 111.0523, 526.0994) and ( 114.8123, 521.8594) .. ( 118.7190, 517.7661)
+ .. controls ( 120.5857, 520.4461) and ( 122.4390, 523.1394) .. ( 124.2657, 525.8461)
+ .. controls ( 118.6790, 527.4994) and ( 113.0257, 528.9394) .. ( 107.3857, 530.4194)
+ ( 89.7057, 544.5527)
+ .. controls ( 91.7457, 545.1661) and ( 93.8923, 544.6994) .. ( 95.9323, 544.4194)
+ .. controls ( 115.5590, 540.8861) and ( 134.8657, 535.7927) .. ( 154.5190, 532.4994)
+ .. controls ( 160.1057, 531.4461) and ( 167.2523, 533.0061) .. ( 170.8790, 527.4861)
+ .. controls ( 168.5857, 523.0861) and ( 165.6123, 519.1127) .. ( 162.4390, 515.3261)
+ .. controls ( 157.3323, 519.8594) and ( 150.5323, 521.3927) .. ( 144.0257, 522.6994)
+ .. controls ( 139.3590, 516.2994) and ( 134.7857, 509.8194) .. ( 130.2923, 503.2861)
+ .. controls ( 132.7990, 500.3661) and ( 135.0257, 497.2194) .. ( 137.5990, 494.3394)
+ .. controls ( 140.8657, 490.4861) and ( 146.4390, 490.7661) .. ( 150.5190, 488.1794)
+ .. controls ( 145.5323, 481.4461) and ( 143.0790, 472.2861) .. ( 135.0257, 468.3261)
+ .. controls ( 120.8390, 493.6861) and ( 101.4790, 515.5394) .. ( 85.1457, 539.4461)
+ .. controls ( 86.5857, 541.2061) and ( 87.9990, 543.0327) .. ( 89.7057, 544.5527)}
+\def\fdulogo@emblem@N@i{%
+ ( 153.3190, 624.6327)
+ .. controls ( 156.0657, 630.3527) and ( 161.9457, 633.6861) .. ( 167.5990, 635.9794)
+ .. controls ( 179.5590, 618.6327) and ( 194.9723, 604.1261) .. ( 208.7723, 588.3127)
+ .. controls ( 212.8657, 584.1794) and ( 219.0523, 578.9394) .. ( 215.4390, 572.4994)
+ .. controls ( 210.5723, 572.8061) and ( 206.0123, 574.6194) .. ( 201.3590, 575.8727)
+ .. controls ( 183.0790, 581.1794) and ( 165.2657, 588.1661) .. ( 146.6123, 592.0994)
+ .. controls ( 156.6390, 580.5527) and ( 168.8390, 571.2327) .. ( 179.4257, 560.2461)
+ .. controls ( 183.3057, 555.9394) and ( 189.8257, 557.6727) .. ( 194.9190, 556.2727)
+ .. controls ( 192.3990, 547.7527) and ( 184.1990, 542.2861) .. ( 177.1590, 537.5261)
+ .. controls ( 172.3857, 539.6727) and ( 172.6657, 546.3927) .. ( 168.7057, 549.5127)
+ .. controls ( 157.0523, 560.0727) and ( 146.0790, 571.3261) .. ( 134.6123, 582.0861)
+ .. controls ( 131.5723, 585.2461) and ( 126.9057, 585.1794) .. ( 122.9323, 586.1261)
+ -- ( 119.8523, 589.0861)
+ .. controls ( 124.6657, 596.4861) and ( 131.6923, 601.9927) .. ( 137.3990, 608.6327)
+ .. controls ( 154.6523, 603.6327) and ( 171.9057, 598.6327) .. ( 189.2657, 594.0061)
+ .. controls ( 183.4123, 601.8327) and ( 175.7057, 608.0461) .. ( 169.0390, 615.1661)
+ .. controls ( 165.2657, 619.1794) and ( 159.4123, 617.5661) .. ( 154.5590, 618.0461)
+ .. controls ( 152.3723, 619.2861) and ( 152.8657, 622.5527) .. ( 153.3190, 624.6327)}
+\def\fdulogo@emblem@U@ii{%
+ ( 258.7723, 689.0461)
+ .. controls ( 263.0390, 694.2061) and ( 270.2123, 695.8861) .. ( 276.6257, 694.8861)
+ .. controls ( 276.5990, 690.7527) and ( 275.3323, 686.4861) .. ( 276.5190, 682.4194)
+ .. controls ( 282.1190, 665.8861) and ( 289.7457, 649.9394) .. ( 293.0257, 632.6994)
+ .. controls ( 294.2123, 626.4727) and ( 291.6657, 619.0061) .. ( 285.5857, 616.3261)
+ .. controls ( 278.6657, 613.1527) and ( 271.4390, 610.2327) .. ( 263.8123, 609.3661)
+ .. controls ( 254.5723, 608.2327) and ( 245.3590, 614.2994) .. ( 241.8657, 622.7527)
+ .. controls ( 236.7857, 634.6327) and ( 232.0923, 646.6861) .. ( 227.0657, 658.5794)
+ .. controls ( 224.8790, 664.1394) and ( 217.6923, 665.9927) .. ( 216.4390, 672.1261)
+ .. controls ( 224.4257, 675.7927) and ( 232.4790, 680.0994) .. ( 241.5323, 680.0194)
+ .. controls ( 240.3723, 674.6594) and ( 235.9590, 669.3394) .. ( 238.6657, 663.7527)
+ .. controls ( 244.2923, 650.9927) and ( 248.9723, 637.7794) .. ( 255.5057, 625.4194)
+ .. controls ( 257.4923, 621.3794) and ( 262.1057, 619.0327) .. ( 266.5457, 619.4594)
+ .. controls ( 273.7190, 620.0861) and ( 280.2923, 623.9527) .. ( 285.2257, 629.0594)
+ .. controls ( 285.7990, 636.0994) and ( 282.4123, 642.4594) .. ( 280.0257, 648.8461)
+ .. controls ( 275.8657, 658.9261) and ( 272.3590, 669.2861) .. ( 267.8657, 679.2327)
+ .. controls ( 266.0657, 683.5927) and ( 260.8123, 684.9127) .. ( 258.7723, 689.0461)}
+\def\fdulogo@emblem@N@ii{%
+ ( 345.5723, 707.9927)
+ .. controls ( 351.0390, 715.4461) and ( 361.0257, 712.2461) .. ( 368.8123, 712.5661)
+ .. controls ( 367.3457, 708.0727) and ( 363.9990, 704.1261) .. ( 363.8390, 699.2861)
+ .. controls ( 365.0790, 679.7394) and ( 367.5590, 660.2594) .. ( 368.0523, 640.6594)
+ .. controls ( 368.6390, 636.8461) and ( 362.5457, 633.1927) .. ( 360.3457, 637.1661)
+ .. controls ( 349.1990, 652.4061) and ( 338.9057, 668.2461) .. ( 328.1590, 683.7661)
+ .. controls ( 326.0790, 686.4861) and ( 324.1990, 690.8327) .. ( 320.0657, 690.0994)
+ .. controls ( 319.4123, 685.9661) and ( 319.4390, 681.7527) .. ( 320.2123, 677.6327)
+ .. controls ( 322.0923, 666.8727) and ( 322.5323, 655.9394) .. ( 324.1723, 645.1527)
+ .. controls ( 325.5857, 640.7261) and ( 329.9723, 638.2061) .. ( 332.1457, 634.1927)
+ .. controls ( 326.2790, 628.9527) and ( 317.9457, 628.9794) .. ( 310.5590, 628.4994)
+ .. controls ( 305.8523, 632.8594) and ( 311.2790, 638.3127) .. ( 311.1723, 643.3794)
+ .. controls ( 310.5323, 656.7394) and ( 307.9457, 669.8994) .. ( 306.6257, 683.1927)
+ .. controls ( 306.2523, 686.6194) and ( 306.7590, 690.3394) .. ( 304.9457, 693.4461)
+ .. controls ( 302.8523, 697.0061) and ( 300.1723, 700.2594) .. ( 298.9857, 704.2994)
+ .. controls ( 306.0790, 706.5927) and ( 314.3057, 709.8194) .. ( 321.5057, 706.3261)
+ .. controls ( 335.5590, 694.5394) and ( 342.1323, 675.9394) .. ( 356.9057, 664.8994)
+ .. controls ( 356.9590, 675.9661) and ( 354.5057, 686.8727) .. ( 354.1457, 697.9394)
+ .. controls ( 353.7457, 702.8594) and ( 348.6523, 704.8994) .. ( 345.5723, 707.9927)}
+\def\fdulogo@emblem@I@i{%
+ ( 393.6390, 711.8461)
+ .. controls ( 401.7857, 713.5661) and ( 410.4257, 711.1261) .. ( 418.2257, 708.4994)
+ .. controls ( 419.4923, 706.9661) and ( 420.7990, 704.4994) .. ( 418.9990, 702.8061)
+ .. controls ( 417.3457, 700.1527) and ( 413.2790, 699.4994) .. ( 412.6123, 696.2327)
+ .. controls ( 410.3057, 680.8861) and ( 409.2657, 665.3527) .. ( 406.7457, 650.0194)
+ .. controls ( 407.1590, 644.2061) and ( 412.5723, 639.6727) .. ( 411.4257, 633.5794)
+ .. controls ( 402.9057, 634.0994) and ( 393.8790, 633.5527) .. ( 385.9590, 637.2461)
+ .. controls ( 382.2390, 642.7927) and ( 392.0123, 645.0727) .. ( 392.1857, 650.4594)
+ .. controls ( 394.4657, 666.6861) and ( 395.2123, 683.0861) .. ( 397.1590, 699.3394)
+ .. controls ( 396.6790, 703.5794) and ( 388.9990, 707.7927) .. ( 393.6390, 711.8461)}
+\def\fdulogo@emblem@V{%
+ ( 441.7857, 703.5661)
+ .. controls ( 448.4923, 702.3527) and ( 455.2790, 701.2461) .. ( 461.7190, 698.9527)
+ .. controls ( 463.4523, 698.2727) and ( 465.3990, 697.7127) .. ( 466.4523, 696.0194)
+ .. controls ( 466.9057, 691.7794) and ( 462.9723, 688.8727) .. ( 461.1857, 685.3927)
+ .. controls ( 460.7990, 673.5527) and ( 460.7990, 661.6994) .. ( 461.1590, 649.8594)
+ .. controls ( 460.8390, 646.9261) and ( 463.1057, 644.7394) .. ( 464.7190, 642.5927)
+ .. controls ( 473.7857, 651.9394) and ( 480.6257, 663.1261) .. ( 488.5057, 673.4461)
+ .. controls ( 491.7990, 677.5927) and ( 488.8523, 683.2994) .. ( 491.6390, 687.6327)
+ .. controls ( 498.5590, 687.1794) and ( 507.4123, 686.3527) .. ( 511.0257, 679.4461)
+ .. controls ( 503.1990, 674.8327) and ( 496.6123, 668.4727) .. ( 491.5057, 660.9661)
+ .. controls ( 480.9990, 647.3794) and ( 471.6923, 632.7527) .. ( 459.5323, 620.5261)
+ .. controls ( 456.6790, 622.1661) and ( 453.6523, 623.4327) .. ( 450.5723, 624.5394)
+ .. controls ( 448.9590, 641.1261) and ( 447.4390, 657.7127) .. ( 445.8257, 674.2994)
+ .. controls ( 445.0790, 679.4594) and ( 445.3457, 684.7661) .. ( 443.8523, 689.7927)
+ .. controls ( 442.5190, 694.2727) and ( 441.5323, 698.8727) .. ( 441.7857, 703.5661)}
+\def\fdulogo@emblem@E{%
+ ( 526.9857, 668.5927)
+ .. controls ( 530.1723, 669.2194) and ( 532.6523, 666.8061) .. ( 535.0923, 665.1927)
+ .. controls ( 547.4523, 655.9661) and ( 561.4923, 649.2861) .. ( 573.9990, 640.2727)
+ .. controls ( 578.8523, 635.7794) and ( 575.1323, 627.0727) .. ( 569.2123, 625.3794)
+ .. controls ( 565.7323, 639.4194) and ( 550.8390, 644.2327) .. ( 539.9057, 651.0861)
+ .. controls ( 535.2257, 646.2194) and ( 529.5723, 641.7261) .. ( 527.1590, 635.2194)
+ .. controls ( 529.5190, 629.5261) and ( 535.8790, 627.3394) .. ( 540.7723, 624.3127)
+ .. controls ( 546.3323, 620.1794) and ( 553.4923, 625.5794) .. ( 559.1990, 622.0061)
+ .. controls ( 557.1057, 614.0461) and ( 552.8790, 605.2461) .. ( 544.4123, 602.6461)
+ .. controls ( 542.4923, 612.7527) and ( 533.6257, 619.4861) .. ( 524.8390, 623.5927)
+ .. controls ( 521.8790, 625.2327) and ( 519.1323, 622.4327) .. ( 517.5323, 620.2061)
+ .. controls ( 514.9057, 616.4727) and ( 511.8790, 612.8194) .. ( 510.4923, 608.4061)
+ .. controls ( 509.5990, 605.4727) and ( 511.3057, 602.6194) .. ( 513.6523, 600.9661)
+ .. controls ( 519.4257, 596.4994) and ( 525.1857, 591.8061) .. ( 531.9457, 588.9127)
+ .. controls ( 536.9857, 588.8594) and ( 541.7990, 590.7661) .. ( 546.7323, 591.6327)
+ .. controls ( 550.6390, 583.8861) and ( 541.3323, 575.3261) .. ( 533.6657, 578.1261)
+ .. controls ( 521.4257, 583.3527) and ( 511.6123, 592.6327) .. ( 500.4923, 599.7261)
+ .. controls ( 495.6390, 603.1927) and ( 489.4657, 605.9527) .. ( 487.4257, 612.0327)
+ .. controls ( 495.8523, 615.5794) and ( 501.0390, 623.4327) .. ( 505.3990, 631.0594)
+ .. controls ( 511.7723, 642.0994) and ( 521.2790, 651.5661) .. ( 524.6257, 664.1527)
+ .. controls ( 525.1190, 665.7661) and ( 525.3190, 667.6861) .. ( 526.9857, 668.5927)}
+\def\fdulogo@emblem@R{%
+ ( 594.5323, 624.3394)
+ .. controls ( 604.3590, 620.1527) and ( 610.2923, 610.8461) .. ( 618.5457, 604.5127)
+ .. controls ( 626.9190, 597.4461) and ( 634.3057, 587.9927) .. ( 635.5190, 576.7661)
+ .. controls ( 636.3857, 567.0194) and ( 628.4390, 557.5261) .. ( 618.6390, 556.8461)
+ .. controls ( 612.8123, 556.0594) and ( 607.1990, 559.8594) .. ( 601.4657, 557.9127)
+ .. controls ( 599.1323, 548.6994) and ( 595.3723, 539.6061) .. ( 596.0257, 529.8994)
+ .. controls ( 596.5590, 525.0194) and ( 590.2390, 525.3794) .. ( 587.1590, 526.6994)
+ .. controls ( 579.6390, 528.6727) and ( 576.2923, 538.7661) .. ( 580.5190, 545.0994)
+ .. controls ( 584.2657, 550.6727) and ( 587.9457, 556.5661) .. ( 589.0523, 563.3261)
+ .. controls ( 589.6523, 567.8061) and ( 587.4257, 572.0327) .. ( 584.8257, 575.5127)
+ .. controls ( 584.0257, 575.3527) and ( 582.4123, 575.0461) .. ( 581.6123, 574.8861)
+ .. controls ( 576.8390, 570.5794) and ( 571.6790, 566.5394) .. ( 567.9590, 561.2194)
+ .. controls ( 567.2657, 557.9127) and ( 567.8657, 553.5794) .. ( 564.8657, 551.3127)
+ .. controls ( 561.9590, 550.6327) and ( 560.1723, 553.5394) .. ( 558.3057, 555.2194)
+ .. controls ( 554.7323, 559.5927) and ( 550.7723, 563.6594) .. ( 547.3990, 568.1794)
+ .. controls ( 545.8790, 569.6994) and ( 546.4257, 571.9661) .. ( 546.2123, 573.8594)
+ .. controls ( 549.8257, 575.8994) and ( 554.0390, 574.8194) .. ( 557.9457, 575.4461)
+ .. controls ( 561.5190, 577.1527) and ( 563.7057, 580.5927) .. ( 566.3723, 583.3661)
+ .. controls ( 574.1457, 591.1794) and ( 581.6923, 599.2061) .. ( 589.5723, 606.9127)
+ .. controls ( 594.5057, 611.3527) and ( 593.1323, 618.4861) .. ( 594.5323, 624.3394)
+ ( 592.6523, 585.5394)
+ .. controls ( 591.5323, 581.9394) and ( 593.8523, 578.4061) .. ( 596.1057, 575.7794)
+ .. controls ( 598.3057, 573.4727) and ( 600.4257, 570.7794) .. ( 603.5323, 569.6861)
+ .. controls ( 612.7057, 566.6461) and ( 624.4790, 576.0061) .. ( 621.1057, 585.8061)
+ .. controls ( 617.5857, 591.1127) and ( 613.2257, 596.5394) .. ( 606.9723, 598.6461)
+ .. controls ( 601.4923, 595.1527) and ( 596.3857, 590.8994) .. ( 592.6523, 585.5394)}
+\def\fdulogo@emblem@S{%
+ ( 638.2390, 535.6594)
+ .. controls ( 644.6257, 539.8727) and ( 653.1857, 542.0994) .. ( 660.4390, 538.8061)
+ .. controls ( 669.2257, 534.8594) and ( 674.8790, 525.9661) .. ( 676.8657, 516.7794)
+ .. controls ( 677.5990, 511.8861) and ( 677.7857, 506.9261) .. ( 678.5723, 502.0327)
+ .. controls ( 679.2523, 497.0861) and ( 683.1723, 493.0594) .. ( 682.6523, 487.8727)
+ .. controls ( 676.7057, 483.3394) and ( 669.7190, 479.6194) .. ( 661.9990, 480.0994)
+ .. controls ( 660.6923, 487.2461) and ( 669.3990, 491.0461) .. ( 669.3723, 497.9261)
+ .. controls ( 669.9990, 507.0194) and ( 667.6123, 516.1394) .. ( 663.4123, 524.1661)
+ .. controls ( 660.9990, 528.6327) and ( 654.8923, 529.9661) .. ( 650.8923, 526.8327)
+ .. controls ( 645.6923, 512.7527) and ( 649.1990, 497.6061) .. ( 650.6657, 483.1794)
+ .. controls ( 651.4390, 478.1261) and ( 648.9857, 473.1394) .. ( 645.3990, 469.7394)
+ .. controls ( 634.1323, 460.9794) and ( 616.0523, 463.8194) .. ( 607.4923, 475.0727)
+ .. controls ( 599.9857, 484.6994) and ( 597.9723, 497.7661) .. ( 599.8523, 509.6061)
+ .. controls ( 597.1723, 510.6861) and ( 594.4923, 511.7261) .. ( 591.8390, 512.8194)
+ .. controls ( 591.8257, 514.4727) and ( 591.8123, 516.1261) .. ( 591.8123, 517.7794)
+ .. controls ( 599.2523, 521.7261) and ( 606.3590, 526.5794) .. ( 614.5057, 528.9927)
+ .. controls ( 618.4923, 530.5127) and ( 621.7057, 524.5527) .. ( 618.7723, 521.7927)
+ .. controls ( 615.5190, 517.8194) and ( 610.4123, 514.4194) .. ( 610.3057, 508.7794)
+ .. controls ( 609.9323, 501.5661) and ( 609.5990, 493.8061) .. ( 613.1323, 487.2461)
+ .. controls ( 615.3857, 482.8194) and ( 620.0123, 479.4194) .. ( 625.0390, 479.2461)
+ .. controls ( 630.0123, 480.0194) and ( 632.8523, 485.4327) .. ( 633.1323, 490.0461)
+ .. controls ( 632.7190, 499.3661) and ( 629.9990, 508.5127) .. ( 630.4523, 517.8861)
+ .. controls ( 630.4523, 524.4461) and ( 632.3990, 531.8994) .. ( 638.2390, 535.6594)}
+\def\fdulogo@emblem@I@ii{%
+ ( 693.1723, 460.6594)
+ .. controls ( 695.3990, 458.8994) and ( 698.1457, 457.0861) .. ( 698.3990, 453.9661)
+ .. controls ( 700.2123, 444.2594) and ( 703.6390, 434.8194) .. ( 704.1057, 424.8861)
+ .. controls ( 702.4257, 424.3527) and ( 700.7723, 423.8061) .. ( 699.1323, 423.2461)
+ .. controls ( 696.7190, 426.1661) and ( 694.9323, 430.2594) .. ( 690.8657, 431.1127)
+ .. controls ( 676.3323, 429.4727) and ( 662.2523, 425.2727) .. ( 647.7857, 423.2194)
+ .. controls ( 642.4390, 422.3127) and ( 636.8390, 421.9261) .. ( 632.0790, 419.0461)
+ .. controls ( 631.1723, 414.6861) and ( 630.9857, 409.2861) .. ( 626.5457, 406.8994)
+ .. controls ( 625.2790, 407.8861) and ( 623.5457, 408.5261) .. ( 622.9057, 410.1261)
+ .. controls ( 618.8123, 419.7527) and ( 617.7457, 430.2727) .. ( 615.8523, 440.4727)
+ .. controls ( 615.1990, 444.1127) and ( 616.4523, 449.7927) .. ( 621.0657, 449.7661)
+ .. controls ( 626.4657, 447.9394) and ( 625.8257, 440.5127) .. ( 630.8123, 438.1261)
+ .. controls ( 649.2123, 441.1527) and ( 667.6257, 444.2194) .. ( 685.8790, 447.9661)
+ .. controls ( 691.0923, 449.8194) and ( 691.1323, 456.3394) .. ( 693.1723, 460.6594)}
+\def\fdulogo@emblem@T{%
+ ( 687.1190, 391.4061)
+ .. controls ( 692.1857, 396.4461) and ( 700.1590, 398.4327) .. ( 706.6123, 394.8194)
+ .. controls ( 706.7857, 374.2594) and ( 705.1990, 353.7527) .. ( 703.8257, 333.2594)
+ .. controls ( 700.3457, 329.0994) and ( 694.3057, 327.6461) .. ( 689.3723, 329.9661)
+ .. controls ( 688.7723, 331.2861) and ( 686.8123, 333.1261) .. ( 688.6523, 334.4061)
+ .. controls ( 693.0390, 338.8727) and ( 696.0790, 344.7527) .. ( 696.2123, 351.1127)
+ .. controls ( 676.7590, 354.2594) and ( 656.9857, 354.7927) .. ( 637.3057, 354.5394)
+ .. controls ( 634.5590, 351.7927) and ( 633.6123, 346.7927) .. ( 629.3323, 345.8061)
+ .. controls ( 626.4790, 344.9794) and ( 624.8390, 348.1394) .. ( 624.6390, 350.4994)
+ .. controls ( 623.1857, 359.3794) and ( 623.4657, 368.6194) .. ( 625.8523, 377.3127)
+ .. controls ( 626.3190, 378.9794) and ( 627.9323, 379.8194) .. ( 629.1190, 380.8994)
+ .. controls ( 632.8523, 378.8861) and ( 634.8123, 374.5527) .. ( 638.8390, 373.0861)
+ .. controls ( 652.4390, 371.2594) and ( 666.1723, 370.5661) .. ( 679.8523, 369.6061)
+ .. controls ( 683.9190, 369.2061) and ( 688.1857, 368.0727) .. ( 692.1057, 369.7927)
+ .. controls ( 696.7190, 371.0594) and ( 698.6123, 377.1394) .. ( 696.2257, 381.0594)
+ .. controls ( 694.0657, 385.2061) and ( 690.0923, 387.9127) .. ( 687.1190, 391.4061)}
+\def\fdulogo@emblem@Y{%
+ ( 617.5723, 308.6727)
+ .. controls ( 618.3323, 308.6594) and ( 619.8523, 308.6327) .. ( 620.6123, 308.6327)
+ .. controls ( 623.3857, 305.3794) and ( 624.4123, 301.1527) .. ( 625.5857, 297.1527)
+ .. controls ( 633.5457, 294.4327) and ( 641.9457, 290.2994) .. ( 650.5323, 292.6727)
+ .. controls ( 660.3990, 294.8861) and ( 670.3723, 296.6327) .. ( 680.2257, 298.9394)
+ .. controls ( 686.9190, 299.9661) and ( 690.8523, 306.4327) .. ( 697.3057, 308.0861)
+ .. controls ( 698.0657, 299.2861) and ( 694.9057, 290.9127) .. ( 692.1323, 282.7394)
+ .. controls ( 691.7590, 281.2461) and ( 690.8390, 280.2194) .. ( 689.3723, 279.6461)
+ .. controls ( 686.7457, 280.4994) and ( 685.1723, 282.8727) .. ( 683.3990, 284.8061)
+ .. controls ( 673.7990, 282.8861) and ( 664.2390, 280.7127) .. ( 654.8523, 277.8994)
+ .. controls ( 662.0790, 271.4594) and ( 667.3990, 262.5261) .. ( 676.5990, 258.6061)
+ .. controls ( 678.6790, 257.5394) and ( 681.4790, 257.6327) .. ( 683.1723, 255.9927)
+ .. controls ( 684.9057, 248.5127) and ( 682.7990, 238.6727) .. ( 674.8923, 235.5127)
+ .. controls ( 669.4657, 249.7127) and ( 655.4657, 257.2461) .. ( 646.8657, 269.0994)
+ .. controls ( 641.2390, 276.1661) and ( 631.8923, 278.0194) .. ( 623.5323, 279.7261)
+ .. controls ( 617.9590, 280.9261) and ( 613.1990, 272.4727) .. ( 607.8523, 276.9261)
+ .. controls ( 608.4123, 285.4061) and ( 611.2790, 293.4727) .. ( 613.2257, 301.6861)
+ .. controls ( 613.7723, 304.4994) and ( 615.4657, 306.8061) .. ( 617.5723, 308.6727)}
+% \end{macrocode}
+%
+% 年份“1905”。
+% \begin{macrocode}
+\def\fdulogo@emblem@one{%
+ ( 210.6390, 174.6328)
+ .. controls ( 216.6790, 175.2194) and ( 221.8123, 178.8728) .. ( 227.5590, 180.5661)
+ .. controls ( 232.1590, 177.8061) and ( 236.7057, 174.5661) .. ( 239.3723, 169.7528)
+ .. controls ( 238.1457, 166.8861) and ( 236.7723, 164.0328) .. ( 234.8390, 161.5528)
+ .. controls ( 221.7723, 143.9661) and ( 209.1723, 126.0461) .. ( 196.1857, 108.4061)
+ .. controls ( 194.7723, 106.5661) and ( 193.4790, 104.5661) .. ( 191.7190, 103.0061)
+ .. controls ( 187.9723, 101.5261) and ( 184.5590, 104.4861) .. ( 181.9857, 106.8194)
+ .. controls ( 179.3590, 109.2594) and ( 175.5057, 112.1394) .. ( 177.2657, 116.2194)
+ .. controls ( 185.8123, 129.9661) and ( 196.3323, 142.3794) .. ( 204.8657, 156.1528)
+ .. controls ( 200.2657, 159.9128) and ( 195.4123, 163.5794) .. ( 191.8790, 168.4194)
+ .. controls ( 191.9990, 173.0728) and ( 195.0257, 177.9128) .. ( 199.6390, 179.3261)
+ .. controls ( 203.2523, 177.6594) and ( 206.6790, 175.3394) .. ( 210.6390, 174.6328)}
+\def\fdulogo@emblem@nine{%
+ ( 293.6123, 125.2861)
+ .. controls ( 287.6657, 121.8861) and ( 283.0923, 113.2861) .. ( 287.5457, 106.9928)
+ .. controls ( 291.9590, 100.0994) and ( 301.3590, 98.6728) .. ( 308.6790, 100.9928)
+ .. controls ( 313.3857, 103.2061) and ( 316.6790, 108.6594) .. ( 315.7590, 113.8728)
+ .. controls ( 314.1857, 118.3261) and ( 309.6390, 120.5528) .. ( 305.8923, 122.8994)
+ .. controls ( 302.1990, 124.7928) and ( 297.7457, 127.0594) .. ( 293.6123, 125.2861)
+ ( 283.2123, 137.6194)
+ .. controls ( 289.8123, 139.9261) and ( 297.0923, 139.3128) .. ( 303.8657, 138.1261)
+ .. controls ( 314.9723, 136.0461) and ( 326.2390, 129.2728) .. ( 330.0523, 118.1128)
+ .. controls ( 332.9457, 105.1394) and ( 328.8523, 92.0861) .. ( 324.6523, 79.8861)
+ .. controls ( 321.9057, 69.6861) and ( 312.9590, 62.3928) .. ( 303.4923, 58.5928)
+ .. controls ( 296.4123, 55.4994) and ( 288.4123, 57.0728) .. ( 281.2523, 59.0461)
+ .. controls ( 270.1723, 62.3394) and ( 260.7057, 71.6194) .. ( 258.7857, 83.2194)
+ .. controls ( 258.1457, 88.3261) and ( 261.0257, 92.8861) .. ( 265.1190, 95.6728)
+ .. controls ( 271.7457, 93.3928) and ( 272.3857, 85.7794) .. ( 275.5857, 80.5528)
+ .. controls ( 281.0123, 73.1661) and ( 292.1990, 70.1528) .. ( 300.3190, 74.8328)
+ .. controls ( 303.6123, 76.6594) and ( 306.4790, 80.1261) .. ( 306.4390, 84.0461)
+ .. controls ( 296.2257, 85.0994) and ( 285.0257, 86.7528) .. ( 277.2657, 94.0994)
+ .. controls ( 271.2657, 100.6461) and ( 266.1057, 110.1794) .. ( 269.7323, 119.1261)
+ .. controls ( 272.4257, 126.2328) and ( 275.6923, 134.4461) .. ( 283.2123, 137.6194)}
+\def\fdulogo@emblem@zero{%
+ ( 411.0123, 111.8861)
+ .. controls ( 404.3857, 109.9928) and ( 402.0923, 102.6061) .. ( 401.3590, 96.4994)
+ .. controls ( 400.6523, 86.9394) and ( 400.8923, 76.6061) .. ( 406.0123, 68.1528)
+ .. controls ( 408.3057, 64.6994) and ( 411.5057, 61.2328) .. ( 415.7857, 60.4861)
+ .. controls ( 424.7190, 58.9261) and ( 433.3590, 66.5528) .. ( 434.5323, 75.2328)
+ .. controls ( 435.4390, 84.8461) and ( 432.8390, 94.4594) .. ( 429.0257, 103.2061)
+ .. controls ( 425.8923, 109.5394) and ( 418.0790, 114.5128) .. ( 411.0123, 111.8861)
+ ( 405.7457, 127.8328)
+ .. controls ( 415.9457, 129.4728) and ( 427.9990, 129.8861) .. ( 436.0390, 122.2461)
+ .. controls ( 447.9590, 108.7661) and ( 453.1323, 90.0994) .. ( 451.8123, 72.3394)
+ .. controls ( 450.1990, 58.2194) and ( 438.7990, 43.9394) .. ( 423.7323, 43.9128)
+ .. controls ( 411.9323, 44.1661) and ( 398.7190, 47.6728) .. ( 391.7323, 57.9528)
+ .. controls ( 384.5190, 68.4728) and ( 383.8257, 81.6728) .. ( 382.7723, 93.9528)
+ .. controls ( 382.5057, 108.2861) and ( 390.7190, 124.6728) .. ( 405.7457, 127.8328)}
+\def\fdulogo@emblem@five{%
+ ( 521.8657, 172.0994)
+ .. controls ( 529.1590, 177.1794) and ( 539.8257, 165.4061) .. ( 533.5590, 158.8461)
+ .. controls ( 531.3723, 156.0594) and ( 528.2657, 154.1261) .. ( 525.1057, 152.5928)
+ .. controls ( 518.2257, 149.3528) and ( 511.3057, 146.1794) .. ( 504.4923, 142.7928)
+ .. controls ( 505.8923, 138.4861) and ( 507.3990, 134.2061) .. ( 509.2923, 130.0861)
+ .. controls ( 513.6923, 132.5794) and ( 518.3190, 134.8461) .. ( 521.9323, 138.4861)
+ .. controls ( 531.2523, 148.7528) and ( 549.7323, 147.0728) .. ( 557.6657, 135.9394)
+ .. controls ( 564.5457, 127.1528) and ( 566.2257, 114.9128) .. ( 563.0523, 104.3394)
+ .. controls ( 560.7590, 96.3661) and ( 554.1857, 90.7528) .. ( 547.6390, 86.1661)
+ .. controls ( 536.7190, 79.1394) and ( 521.1057, 79.3794) .. ( 511.0923, 87.9661)
+ .. controls ( 506.9457, 92.1528) and ( 511.5457, 97.8728) .. ( 515.2257, 100.5128)
+ .. controls ( 522.3190, 102.4061) and ( 528.7323, 95.7128) .. ( 535.8923, 98.1261)
+ .. controls ( 541.6657, 101.1528) and ( 546.2523, 106.0461) .. ( 549.1723, 111.8461)
+ .. controls ( 550.7457, 119.7928) and ( 545.4923, 128.7661) .. ( 537.2790, 130.0861)
+ .. controls ( 532.5057, 130.9394) and ( 529.1590, 126.7661) .. ( 525.8257, 124.1128)
+ .. controls ( 519.3457, 118.0061) and ( 511.3857, 113.8328) .. ( 503.5590, 109.7661)
+ .. controls ( 496.5723, 123.3928) and ( 487.8123, 136.4061) .. ( 484.2123, 151.4994)
+ .. controls ( 496.5457, 158.7661) and ( 509.2790, 165.2994) .. ( 521.8657, 172.0994)}
+% \end{macrocode}
+%
+% 内环。
+% \begin{macrocode}
+\def\fdulogo@emblem@ring@inner@i{%
+ ( 361.2523, 616.4994)
+ .. controls ( 394.6523, 618.0727) and ( 428.6390, 615.1261) .. ( 460.3323, 603.9394)
+ .. controls ( 533.4257, 578.2061) and ( 592.3857, 515.3127) .. ( 612.7723, 440.4727)
+ .. controls ( 618.5057, 421.0461) and ( 619.8390, 400.6994) .. ( 620.9190, 380.5794)
+ .. controls ( 621.3190, 350.9794) and ( 617.4790, 321.1127) .. ( 607.5323, 293.1261)
+ .. controls ( 581.7857, 222.3527) and ( 521.5990, 164.8461) .. ( 449.2923, 143.3661)
+ .. controls ( 411.3057, 132.4728) and ( 370.7457, 131.2061) .. ( 331.9323, 138.1394)
+ .. controls ( 299.9057, 143.8994) and ( 269.0657, 156.4061) .. ( 242.4123, 175.1261)
+ .. controls ( 198.4923, 205.7127) and ( 163.4790, 250.2861) .. ( 147.8923, 301.8194)
+ .. controls ( 138.9857, 331.2061) and ( 135.8790, 362.2594) .. ( 138.0657, 392.8461)
+ .. controls ( 139.7723, 425.3661) and ( 148.5323, 457.4594) .. ( 163.3057, 486.4727)
+ .. controls ( 189.2523, 536.1261) and ( 232.1590, 577.0994) .. ( 283.8257, 599.1661)
+ .. controls ( 308.2657, 609.6861) and ( 334.6657, 615.4994) .. ( 361.2523, 616.4994)}
+\def\fdulogo@emblem@ring@inner@ii{%
+ ( 349.8523, 596.9127)
+ .. controls ( 326.6923, 594.1527) and ( 303.9457, 587.7394) .. ( 282.8657, 577.7527)
+ .. controls ( 223.7857, 548.7661) and ( 176.7190, 493.7127) .. ( 161.7857, 429.1127)
+ .. controls ( 149.9990, 378.2194) and ( 154.9057, 323.1261) .. ( 178.0923, 276.0727)
+ .. controls ( 192.5323, 247.3661) and ( 213.4657, 222.1261) .. ( 238.0923, 201.5927)
+ .. controls ( 263.2523, 180.5794) and ( 293.2257, 165.3794) .. ( 325.1590, 157.9128)
+ .. controls ( 375.0390, 145.8728) and ( 429.0523, 150.9528) .. ( 475.5323, 172.8461)
+ .. controls ( 499.7190, 184.5527) and ( 521.5457, 200.9127) .. ( 540.1857, 220.2327)
+ .. controls ( 557.5323, 238.2994) and ( 572.4923, 258.8861) .. ( 582.8257, 281.7794)
+ .. controls ( 605.9857, 332.5127) and ( 608.9457, 391.8461) .. ( 592.0923, 444.8994)
+ .. controls ( 582.5457, 475.5661) and ( 565.7190, 503.8327) .. ( 543.5590, 527.0594)
+ .. controls ( 521.8257, 550.6061) and ( 495.2523, 569.8461) .. ( 465.6523, 582.2461)
+ .. controls ( 449.9857, 588.8194) and ( 433.3990, 592.8461) .. ( 416.7990, 596.2594)
+ .. controls ( 394.6657, 599.4327) and ( 372.0390, 599.4861) .. ( 349.8523, 596.9127)}
+% \end{macrocode}
+%
+% 外环。
+% \begin{macrocode}
+\def\fdulogo@emblem@ring@outer@i{%
+ ( 368.5723, 736.6194)
+ -- ( 390.8923, 736.6194)
+ .. controls ( 400.3723, 735.3127) and ( 409.9857, 735.6061) .. ( 419.4523, 734.2727)
+ .. controls ( 471.6657, 729.0194) and ( 522.8523, 712.1394) .. ( 567.2523, 684.0061)
+ .. controls ( 616.4523, 652.6861) and ( 658.3857, 609.8594) .. ( 688.4523, 559.8727)
+ .. controls ( 704.7990, 532.3927) and ( 717.4523, 502.6461) .. ( 725.1857, 471.5927)
+ .. controls ( 732.3457, 444.2594) and ( 735.5057, 416.0861) .. ( 737.1723, 387.9394)
+ -- ( 737.1723, 364.2194)
+ .. controls ( 736.3990, 358.6061) and ( 736.1190, 352.9527) .. ( 735.8390, 347.2994)
+ .. controls ( 731.3857, 289.0061) and ( 713.0523, 231.3661) .. ( 680.2390, 182.7527)
+ .. controls ( 638.5857, 120.4861) and ( 578.7057, 69.6728) .. ( 508.5990, 42.4861)
+ .. controls ( 471.4657, 28.0461) and ( 431.7323, 21.3261) .. ( 392.0657, 19.2861)
+ -- ( 362.0123, 19.2861)
+ .. controls ( 301.0123, 21.7928) and ( 240.0390, 38.7928) .. ( 188.5990, 72.1528)
+ .. controls ( 137.7190, 104.4461) and ( 94.5323, 148.8994) .. ( 64.2790, 201.0594)
+ .. controls ( 39.8123, 242.9394) and ( 25.4523, 290.4194) .. ( 20.7057, 338.6061)
+ .. controls ( 16.6123, 377.5127) and ( 19.0257, 416.9927) .. ( 26.6790, 455.3261)
+ .. controls ( 38.5190, 513.7127) and ( 66.6123, 568.5127) .. ( 106.1323, 612.9927)
+ .. controls ( 125.0923, 634.9127) and ( 146.6523, 654.5661) .. ( 170.0790, 671.6061)
+ .. controls ( 218.1190, 706.8061) and ( 275.7590, 728.2461) .. ( 334.9190, 734.2861)
+ .. controls ( 346.0923, 735.7261) and ( 357.3723, 735.5127) .. ( 368.5723, 736.6194)}
+\def\fdulogo@emblem@ring@outer@ii{%
+ ( 354.5323, 717.8461)
+ .. controls ( 321.1057, 715.1794) and ( 287.6923, 709.1661) .. ( 256.3457, 696.9927)
+ .. controls ( 208.1323, 678.6327) and ( 164.8390, 648.3794) .. ( 129.5190, 610.9261)
+ .. controls ( 106.3590, 586.0861) and ( 86.2257, 558.2461) .. ( 71.1190, 527.7794)
+ .. controls ( 36.0790, 456.2727) and ( 28.8523, 372.7127) .. ( 46.1857, 295.3794)
+ .. controls ( 61.5057, 225.7661) and ( 102.3857, 163.2994) .. ( 155.9190, 116.8994)
+ .. controls ( 196.9857, 80.4594) and ( 247.3457, 54.5128) .. ( 301.0123, 42.7928)
+ .. controls ( 383.2523, 25.4061) and ( 472.6123, 34.9528) .. ( 546.2523, 76.8461)
+ .. controls ( 609.8257, 113.6728) and ( 662.5723, 169.8328) .. ( 692.9590, 236.9394)
+ .. controls ( 715.0123, 285.5127) and ( 723.1857, 339.5661) .. ( 721.1990, 392.6327)
+ .. controls ( 718.7323, 452.0861) and ( 701.4123, 511.4194) .. ( 668.4657, 561.2327)
+ .. controls ( 631.4657, 617.0327) and ( 579.4390, 663.5927) .. ( 517.9190, 690.6461)
+ .. controls ( 466.7857, 713.1127) and ( 410.0523, 721.1661) .. ( 354.5323, 717.8461)}
+% \end{macrocode}
+%
+% \paragraph{校徽(重修版)}
+%
+% 核心图案。
+% \begin{macrocode}
+\def\fdulogo@emblem@new@kernel{%
+ ( 284.6849, 377.3858)
+ .. controls ( 296.8515, 374.4658) and ( 317.3515, 372.8445) .. ( 328.8515, 381.3445)
+ .. controls ( 340.0782, 389.6418) and ( 342.0182, 410.1778) .. ( 336.4129, 413.5112)
+ .. controls ( 327.0502, 419.0792) and ( 273.1849, 410.8445) .. ( 263.0182, 410.1778)
+ .. controls ( 261.0182, 399.0112) and ( 271.0649, 380.6552) .. ( 284.6849, 377.3858)
+ ( 336.3515, 441.0112)
+ .. controls ( 336.3515, 441.0112) and ( 337.6849, 455.1778) .. ( 334.6862, 462.2765)
+ .. controls ( 329.1302, 475.4312) and ( 323.6849, 480.1725) .. ( 299.0182, 480.1725)
+ .. controls ( 282.1449, 480.1725) and ( 267.1849, 476.0112) .. ( 261.3115, 461.9672)
+ .. controls ( 257.2369, 452.2245) and ( 258.3075, 437.7125) .. ( 262.9129, 437.0658)
+ .. controls ( 270.4489, 436.0072) and ( 336.3515, 441.0112) .. ( 336.3515, 441.0112)
+ ( 246.5929, 497.0352)
+ .. controls ( 259.3742, 506.1565) and ( 276.7409, 512.2338) .. ( 300.2955, 512.2338)
+ .. controls ( 348.3249, 512.2338) and ( 363.1289, 484.6218) .. ( 364.1849, 471.8445)
+ -- ( 364.7889, 471.8445)
+ .. controls ( 368.4075, 488.7885) and ( 395.4342, 511.5112) .. ( 399.4435, 521.7672)
+ .. controls ( 400.9182, 525.5405) and ( 395.3329, 527.6418) .. ( 392.0182, 525.6778)
+ .. controls ( 389.0182, 523.9005) and ( 372.6849, 506.4285) .. ( 360.5182, 506.4285)
+ .. controls ( 354.6435, 506.4285) and ( 344.7689, 511.6778) .. ( 344.7689, 520.0232)
+ .. controls ( 344.7689, 527.5112) and ( 366.7289, 547.3725) .. ( 375.3515, 559.8445)
+ .. controls ( 381.3195, 568.4765) and ( 388.5849, 581.0538) .. ( 391.5182, 595.8445)
+ .. controls ( 395.5182, 616.0112) and ( 404.5182, 623.1778) .. ( 415.8515, 623.1778)
+ .. controls ( 424.4622, 623.1778) and ( 437.8515, 613.6778) .. ( 429.8515, 588.0112)
+ .. controls ( 425.7369, 574.8085) and ( 419.2209, 550.5445) .. ( 430.3515, 549.5112)
+ .. controls ( 446.5182, 548.0112) and ( 563.1969, 564.0432) .. ( 582.0742, 556.9005)
+ .. controls ( 592.3515, 553.0112) and ( 602.6849, 540.5112) .. ( 592.7409, 526.2338)
+ .. controls ( 590.5555, 523.0965) and ( 546.5182, 529.5112) .. ( 514.5182, 529.5112)
+ .. controls ( 502.8982, 529.5112) and ( 439.9475, 527.4738) .. ( 429.2435, 513.0925)
+ .. controls ( 418.1849, 498.2338) and ( 433.5182, 482.1778) .. ( 433.5182, 471.1778)
+ .. controls ( 433.5182, 452.8445) and ( 415.3515, 427.3445) .. ( 415.3515, 364.3445)
+ .. controls ( 415.3515, 329.8432) and ( 418.1849, 298.6778) .. ( 422.9622, 221.7885)
+ .. controls ( 424.9742, 189.4072) and ( 394.8515, 194.4765) .. ( 389.8515, 223.3445)
+ .. controls ( 386.2222, 244.3018) and ( 382.2955, 297.1218) .. ( 382.0742, 314.2338)
+ .. controls ( 336.6849, 315.8445) and ( 279.1849, 309.5672) .. ( 249.1849, 302.2338)
+ .. controls ( 241.0435, 300.2432) and ( 230.3022, 322.7285) .. ( 232.7369, 328.1938)
+ .. controls ( 237.1849, 338.1778) and ( 304.0729, 341.8458) .. ( 337.8515, 344.0112)
+ .. controls ( 352.7115, 344.9645) and ( 362.6849, 344.7765) .. ( 382.0742, 343.7885)
+ .. controls ( 382.2435, 356.2658) and ( 382.0915, 361.9045) .. ( 383.1849, 378.6778)
+ .. controls ( 384.3129, 395.9845) and ( 387.8942, 424.2818) .. ( 391.4582, 437.7178)
+ .. controls ( 396.0742, 455.1218) and ( 405.5182, 466.3445) .. ( 400.9622, 468.6778)
+ .. controls ( 394.5915, 471.9405) and ( 374.8515, 431.1458) .. ( 370.3515, 409.4912)
+ .. controls ( 367.4462, 395.5112) and ( 371.8635, 373.0725) .. ( 349.6289, 358.6778)
+ .. controls ( 331.3515, 346.8445) and ( 282.0435, 338.8778) .. ( 256.3515, 354.8445)
+ .. controls ( 238.7409, 365.7885) and ( 226.5182, 381.7885) .. ( 226.5182, 426.2338)
+ .. controls ( 226.5182, 452.4005) and ( 225.8515, 482.2338) .. ( 246.5929, 497.0352)
+ ( 519.4070, 324.2890)
+ .. controls ( 520.2777, 321.3544) and ( 522.2683, 319.5944) .. ( 524.0190, 319.4064)
+ .. controls ( 527.3977, 319.0424) and ( 544.9070, 319.3450) .. ( 546.7683, 320.9277)
+ .. controls ( 552.9323, 326.1717) and ( 554.9350, 341.6784) .. ( 551.9390, 343.3384)
+ .. controls ( 549.5043, 344.6864) and ( 532.4630, 343.2730) .. ( 523.7870, 340.6850)
+ .. controls ( 522.1203, 340.1890) and ( 519.0737, 338.6784) .. ( 518.7537, 335.6810)
+ .. controls ( 518.2963, 331.4117) and ( 518.4843, 327.3997) .. ( 519.4070, 324.2890)
+ ( 452.6297, 377.8997)
+ .. controls ( 454.4070, 380.6784) and ( 460.5177, 383.3997) .. ( 470.1843, 383.8997)
+ .. controls ( 482.7723, 384.5517) and ( 526.9230, 388.9850) .. ( 532.9737, 387.5864)
+ .. controls ( 536.1843, 386.8450) and ( 534.0177, 379.1784) .. ( 531.3777, 375.7077)
+ .. controls ( 529.4163, 373.1304) and ( 525.7017, 369.1770) .. ( 524.0177, 366.9277)
+ .. controls ( 522.1257, 364.3997) and ( 521.1577, 361.5170) .. ( 523.3830, 360.2757)
+ .. controls ( 525.8510, 358.8997) and ( 546.7963, 361.9557) .. ( 553.2270, 363.0944)
+ .. controls ( 558.7977, 364.0810) and ( 560.8097, 369.8024) .. ( 563.9350, 374.2610)
+ .. controls ( 569.2123, 381.7904) and ( 577.0737, 386.0117) .. ( 582.8510, 386.0117)
+ .. controls ( 589.6297, 386.0117) and ( 591.4230, 374.3837) .. ( 590.7523, 366.3357)
+ .. controls ( 589.7123, 353.8357) and ( 577.8043, 312.0797) .. ( 574.2350, 303.7570)
+ .. controls ( 573.2963, 301.5664) and ( 569.8843, 300.0117) .. ( 566.9350, 300.0117)
+ .. controls ( 562.3377, 300.0117) and ( 536.8510, 301.9277) .. ( 526.5670, 298.6944)
+ .. controls ( 524.0043, 297.8890) and ( 523.2683, 295.7610) .. ( 524.0177, 290.2610)
+ .. controls ( 524.6123, 285.9010) and ( 533.4990, 247.5584) .. ( 534.6617, 239.5050)
+ .. controls ( 536.9630, 223.5664) and ( 521.4230, 220.8370) .. ( 512.5430, 232.4037)
+ .. controls ( 504.7403, 242.5664) and ( 500.5470, 254.5317) .. ( 496.6230, 267.2677)
+ .. controls ( 491.9043, 282.5824) and ( 493.9550, 293.8410) .. ( 483.7403, 292.7890)
+ .. controls ( 470.7243, 291.4477) and ( 447.5177, 274.8717) .. ( 435.6737, 274.8717)
+ .. controls ( 427.1763, 274.8717) and ( 425.4203, 289.3810) .. ( 429.0177, 295.3450)
+ .. controls ( 435.3510, 305.8450) and ( 475.3097, 316.4690) .. ( 487.8817, 317.4704)
+ .. controls ( 488.7150, 325.3877) and ( 488.6843, 330.4277) .. ( 486.6843, 337.0944)
+ .. controls ( 479.4350, 337.1784) and ( 471.1017, 335.2610) .. ( 461.9217, 331.0450)
+ .. controls ( 450.9070, 325.9864) and ( 436.7443, 322.4930) .. ( 431.1737, 322.4930)
+ .. controls ( 425.0617, 322.4930) and ( 420.7403, 337.8997) .. ( 430.2963, 345.1224)
+ .. controls ( 435.2390, 348.8584) and ( 445.4150, 351.6330) .. ( 449.9537, 352.4370)
+ .. controls ( 458.8510, 354.0117) and ( 486.9630, 353.3450) .. ( 489.6817, 359.0304)
+ .. controls ( 490.4003, 360.5357) and ( 490.6843, 364.3997) .. ( 488.1977, 365.4904)
+ .. controls ( 485.7337, 366.5717) and ( 469.1843, 363.0117) .. ( 460.4070, 363.8997)
+ .. controls ( 451.9590, 364.7557) and ( 450.2337, 374.1570) .. ( 452.6297, 377.8997)
+ ( 465.0250, 479.1097)
+ .. controls ( 470.1850, 476.6777) and ( 560.0183, 480.1777) .. ( 564.7677, 482.3444)
+ .. controls ( 570.2330, 484.8364) and ( 569.7757, 493.6777) .. ( 564.3517, 496.0110)
+ .. controls ( 558.9277, 498.3444) and ( 473.4543, 494.4284) .. ( 468.1850, 492.5670)
+ .. controls ( 461.6810, 490.2684) and ( 460.1570, 481.4044) .. ( 465.0250, 479.1097)
+ ( 512.5183, 517.5670)
+ .. controls ( 550.9623, 517.5670) and ( 578.7410, 517.5670) .. ( 590.2303, 506.5924)
+ .. controls ( 595.6943, 501.3724) and ( 599.1850, 483.5670) .. ( 588.9290, 472.1310)
+ .. controls ( 579.2503, 461.3377) and ( 539.8517, 459.3444) .. ( 504.8597, 459.1950)
+ .. controls ( 494.1930, 459.1484) and ( 455.3517, 457.1777) .. ( 449.0570, 461.3924)
+ .. controls ( 429.2677, 474.6444) and ( 433.4610, 495.0564) .. ( 442.0743, 502.2337)
+ .. controls ( 455.4077, 513.3444) and ( 467.4077, 516.6777) .. ( 512.5183, 517.5670)
+ ( 469.5181, 412.4124)
+ .. controls ( 478.8514, 412.2204) and ( 551.6287, 415.4564) .. ( 562.5861, 417.4417)
+ .. controls ( 572.8301, 419.2990) and ( 572.3514, 428.5110) .. ( 566.5181, 429.3444)
+ .. controls ( 558.3594, 430.5097) and ( 474.1727, 426.6484) .. ( 466.6954, 424.2830)
+ .. controls ( 460.5181, 422.3297) and ( 462.4354, 412.5577) .. ( 469.5181, 412.4124)
+ ( 453.0487, 444.4590)
+ .. controls ( 474.8807, 454.1977) and ( 578.9621, 454.6777) .. ( 587.8514, 448.0110)
+ .. controls ( 600.5821, 438.4630) and ( 600.4314, 419.2284) .. ( 595.5021, 409.4910)
+ .. controls ( 586.7407, 392.1777) and ( 506.5967, 392.1777) .. ( 466.1847, 392.1777)
+ .. controls ( 452.1847, 392.1777) and ( 435.6847, 400.6777) .. ( 435.6847, 416.5110)
+ .. controls ( 435.6847, 423.8444) and ( 435.6061, 436.6777) .. ( 453.0487, 444.4590)}
+% \end{macrocode}
+%
+% 文字“FUDAN UNIVERSITY”。
+% \begin{macrocode}
+\def\fdulogo@emblem@new@F{%
+ ( 128.0847, 329.4813)
+ -- ( 127.1417, 332.0113)
+ -- ( 105.9530, 324.1142)
+ -- ( 128.2300, 264.3431)
+ -- ( 130.8654, 265.3253)
+ .. controls ( 128.5761, 272.7562) and ( 129.4109, 275.3484) .. ( 134.8925, 277.3915)
+ -- ( 185.9141, 296.4074)
+ .. controls ( 191.3957, 298.4505) and ( 193.1054, 297.4068) .. ( 196.8561, 289.9203)
+ -- ( 199.4915, 290.9026)
+ -- ( 185.3474, 328.8525)
+ -- ( 182.7120, 327.8702)
+ .. controls ( 185.9049, 318.0148) and ( 185.3471, 315.6458) .. ( 179.5492, 313.4849)
+ -- ( 154.9872, 304.3305)
+ .. controls ( 151.1905, 315.1616) and ( 153.6372, 320.5157) .. ( 165.3155, 326.5490)
+ -- ( 164.3333, 329.1845)
+ -- ( 128.7025, 315.9047)
+ -- ( 129.6848, 313.2693)
+ .. controls ( 142.4094, 315.8508) and ( 147.4741, 313.5363) .. ( 151.4030, 302.9947)
+ -- ( 126.9464, 293.8796)
+ .. controls ( 123.0460, 292.4259) and ( 121.4811, 293.4034) .. ( 119.4774, 298.7796)
+ .. controls ( 111.8160, 319.3358) and ( 119.2776, 323.7976) .. ( 128.0847, 329.4813)}
+\def\fdulogo@emblem@new@U@i{%
+ ( 100.5187, 377.9685)
+ -- ( 97.7192, 377.6976)
+ -- ( 101.3818, 339.8494)
+ -- ( 104.1812, 340.1203)
+ .. controls ( 104.2065, 348.0345) and ( 105.5322, 349.5191) .. ( 113.5945, 350.2993)
+ -- ( 150.9948, 353.9185)
+ .. controls ( 161.9686, 354.9804) and ( 167.2279, 357.8629) .. ( 171.4939, 365.1702)
+ .. controls ( 174.8929, 370.9244) and ( 176.2150, 378.2859) .. ( 175.4240, 386.4603)
+ .. controls ( 173.3327, 408.0718) and ( 159.8630, 414.1150) .. ( 142.8425, 412.4680)
+ -- ( 107.1218, 409.0113)
+ .. controls ( 100.5152, 408.3720) and ( 98.5719, 409.7663) .. ( 96.7586, 416.8245)
+ -- ( 93.9592, 416.5536)
+ -- ( 96.3431, 391.9187)
+ -- ( 99.1425, 392.1896)
+ .. controls ( 98.9692, 400.9888) and ( 100.9920, 403.4450) .. ( 109.1663, 404.2360)
+ -- ( 143.3193, 407.5410)
+ .. controls ( 159.8919, 409.1447) and ( 168.2251, 403.6217) .. ( 169.5145, 390.2964)
+ .. controls ( 170.6198, 378.8748) and ( 164.5008, 373.1965) .. ( 149.2719, 371.7228)
+ -- ( 111.8716, 368.1036)
+ .. controls ( 103.0254, 367.2476) and ( 101.6889, 369.3788) .. ( 100.5187, 377.9685)}
+\def\fdulogo@emblem@new@D{%
+ ( 161.1337, 431.7764)
+ .. controls ( 165.9947, 430.8420) and ( 167.6734, 427.6554) .. ( 166.6627, 421.2052)
+ -- ( 169.4247, 420.6743)
+ -- ( 176.1350, 455.5852)
+ .. controls ( 180.7218, 479.4484) and ( 168.5338, 498.2876) .. ( 145.6650, 502.6834)
+ .. controls ( 122.9066, 507.0578) and ( 106.1239, 494.2454) .. ( 101.2186, 468.7251)
+ -- ( 94.7418, 435.0294)
+ -- ( 97.5037, 434.4985)
+ .. controls ( 99.5257, 441.4417) and ( 101.5863, 443.2222) .. ( 106.6683, 442.2454)
+ ( 143.6272, 483.1417)
+ .. controls ( 169.2580, 478.2151) and ( 174.2007, 466.3819) .. ( 171.9922, 454.8923)
+ .. controls ( 171.0367, 449.9208) and ( 169.3244, 448.7606) .. ( 164.3529, 449.7162)
+ -- ( 107.5674, 460.6312)
+ .. controls ( 105.0264, 461.1196) and ( 104.1254, 463.5840) .. ( 104.9536, 467.8926)
+ .. controls ( 106.8648, 477.8356) and ( 116.4497, 488.3656) .. ( 143.6272, 483.1417)}
+\def\fdulogo@emblem@new@A{%
+ ( 213.7305, 560.0508)
+ -- ( 213.5287, 559.6486)
+ .. controls ( 211.5613, 555.7270) and ( 208.6425, 555.1775) .. ( 194.2546, 556.1024)
+ -- ( 130.1129, 560.2137)
+ -- ( 128.7004, 557.3982)
+ -- ( 172.6054, 507.4300)
+ .. controls ( 180.0401, 498.9173) and ( 180.9431, 496.9540) .. ( 179.4266, 491.6733)
+ -- ( 181.9405, 490.4121)
+ -- ( 192.1812, 510.8248)
+ -- ( 189.6673, 512.0860)
+ .. controls ( 186.2887, 506.3550) and ( 184.0224, 504.5972) .. ( 181.4079, 505.9088)
+ .. controls ( 180.1007, 506.5646) and ( 177.9904, 508.6302) .. ( 173.6198, 513.4660)
+ -- ( 170.4549, 516.9418)
+ -- ( 181.8054, 539.5667)
+ .. controls ( 191.3639, 539.0507) and ( 195.5893, 538.4413) .. ( 197.8015, 537.3315)
+ .. controls ( 199.9131, 536.2721) and ( 200.2629, 534.4604) .. ( 198.6983, 530.8401)
+ .. controls ( 198.4461, 530.3373) and ( 197.8909, 528.9796) .. ( 197.3857, 527.4709)
+ -- ( 199.8996, 526.2098)
+ -- ( 216.2444, 558.7897)
+ ( 167.2899, 520.4175)
+ -- ( 147.5970, 542.1283)
+ -- ( 177.1271, 540.0258)}
+\def\fdulogo@emblem@new@N@i{%
+ ( 180.2268, 631.4088)
+ -- ( 163.6433, 614.4249)
+ -- ( 165.6556, 612.4600)
+ .. controls ( 167.2275, 614.0699) and ( 169.7710, 614.2593) .. ( 178.1316, 613.6430)
+ -- ( 216.2851, 576.3890)
+ .. controls ( 220.8732, 571.9091) and ( 220.8212, 569.6013) .. ( 215.8082, 563.0180)
+ -- ( 217.8205, 561.0531)
+ -- ( 235.6616, 579.3250)
+ -- ( 233.6493, 581.2899)
+ .. controls ( 226.8730, 575.7993) and ( 223.9290, 575.8437) .. ( 218.2140, 581.4240)
+ -- ( 185.8559, 613.0192)
+ -- ( 264.7759, 606.2437)
+ -- ( 266.9766, 608.4975)
+ -- ( 219.5664, 654.7900)
+ .. controls ( 214.9783, 659.2699) and ( 214.9537, 661.3380) .. ( 219.2574, 667.3560)
+ -- ( 217.2451, 669.3209)
+ -- ( 200.3472, 652.0150)
+ -- ( 202.3595, 650.0501)
+ .. controls ( 208.7390, 655.4564) and ( 211.9226, 655.3352) .. ( 217.6376, 649.7550)
+ -- ( 242.1878, 625.7835)}
+\def\fdulogo@emblem@new@U@ii{%
+ ( 331.4528, 724.5346)
+ -- ( 330.6370, 727.2262)
+ -- ( 294.2466, 716.1971)
+ -- ( 295.0624, 713.5055)
+ .. controls ( 302.8273, 715.0360) and ( 304.5434, 714.0279) .. ( 306.8928, 706.2761)
+ -- ( 317.7915, 670.3164)
+ .. controls ( 320.9893, 659.7653) and ( 324.8491, 655.1750) .. ( 332.8524, 652.4283)
+ .. controls ( 339.1623, 650.2263) and ( 346.6402, 650.3767) .. ( 354.4996, 652.7588)
+ .. controls ( 375.2787, 659.0565) and ( 378.5570, 673.4512) .. ( 373.5971, 689.8161)
+ -- ( 363.1880, 724.1609)
+ .. controls ( 361.2628, 730.5130) and ( 362.2480, 732.6925) .. ( 368.8121, 735.8575)
+ -- ( 367.9964, 738.5491)
+ -- ( 344.3103, 731.3703)
+ -- ( 345.1261, 728.6787)
+ .. controls ( 353.7197, 730.5779) and ( 356.5255, 729.0773) .. ( 358.9076, 721.2178)
+ -- ( 368.8599, 688.3803)
+ .. controls ( 373.6893, 672.4461) and ( 369.9116, 663.1900) .. ( 357.0996, 659.3069)
+ .. controls ( 346.1179, 655.9786) and ( 339.3478, 660.8624) .. ( 334.9100, 675.5047)
+ -- ( 324.0114, 711.4644)
+ .. controls ( 321.4336, 719.9698) and ( 323.2605, 721.6991) .. ( 331.4528, 724.5346)}
+\def\fdulogo@emblem@new@N@ii{%
+ ( 409.6662, 741.3201)
+ -- ( 385.9318, 740.9354)
+ -- ( 385.9774, 738.1232)
+ .. controls ( 388.2271, 738.1597) and ( 390.1667, 736.5034) .. ( 395.6699, 730.1793)
+ -- ( 396.5343, 676.8613)
+ .. controls ( 396.6383, 670.4497) and ( 394.9765, 668.8475) .. ( 386.7815, 667.7020)
+ -- ( 386.8271, 664.8899)
+ -- ( 412.3613, 665.3038)
+ -- ( 412.3157, 668.1160)
+ .. controls ( 403.6379, 668.9879) and ( 401.5785, 671.0923) .. ( 401.4490, 679.0788)
+ -- ( 400.7159, 724.2978)
+ -- ( 451.9889, 663.9210)
+ -- ( 455.1384, 663.9721)
+ -- ( 454.0643, 730.2259)
+ .. controls ( 453.9604, 736.6375) and ( 455.3990, 738.1235) .. ( 462.6923, 739.3669)
+ -- ( 462.6467, 742.1790)
+ -- ( 438.4624, 741.7870)
+ -- ( 438.5080, 738.9748)
+ .. controls ( 446.8447, 738.3224) and ( 449.0202, 735.9949) .. ( 449.1496, 728.0084)
+ -- ( 449.7058, 693.7004)}
+\def\fdulogo@emblem@new@I@i{%
+ ( 476.7196, 671.8970)
+ .. controls ( 475.4886, 666.4083) and ( 473.1681, 665.3146) .. ( 464.7627, 666.3926)
+ -- ( 464.1473, 663.6482)
+ -- ( 502.5679, 655.0318)
+ -- ( 503.1834, 657.7761)
+ .. controls ( 494.9637, 660.1960) and ( 493.2227, 662.2006) .. ( 494.5028, 667.9088)
+ -- ( 506.4181, 721.0391)
+ .. controls ( 507.6983, 726.7473) and ( 510.3974, 727.9867) .. ( 518.5945, 726.4942)
+ -- ( 519.2100, 729.2386)
+ -- ( 480.7893, 737.8550)
+ -- ( 480.1738, 735.1107)
+ .. controls ( 487.9544, 732.7893) and ( 489.8904, 730.6257) .. ( 488.6349, 725.0273)}
+\def\fdulogo@emblem@new@V{%
+ ( 602.1272, 694.3322)
+ -- ( 580.4128, 704.4657)
+ -- ( 579.2235, 701.9171)
+ .. controls ( 586.2237, 698.0295) and ( 587.4199, 696.6023) .. ( 585.8975, 693.3400)
+ .. controls ( 585.1363, 691.7089) and ( 584.2595, 690.6283) .. ( 580.4807, 687.0534)
+ -- ( 551.8815, 659.5553)
+ -- ( 553.7031, 700.1705)
+ .. controls ( 553.9070, 705.6619) and ( 554.0701, 707.0756) .. ( 554.7837, 708.6048)
+ .. controls ( 555.8779, 710.9495) and ( 557.9305, 711.3573) .. ( 561.8995, 709.7533)
+ .. controls ( 562.4093, 709.5155) and ( 563.7821, 708.9989) .. ( 565.3589, 708.3873)
+ -- ( 566.5483, 710.9359)
+ -- ( 532.2946, 726.9211)
+ -- ( 531.1052, 724.3724)
+ .. controls ( 535.8695, 721.2801) and ( 536.4064, 720.0363) .. ( 536.3384, 713.2400)
+ -- ( 533.9390, 639.9954)
+ -- ( 536.6916, 638.7109)
+ -- ( 587.8616, 687.7058)
+ .. controls ( 593.2579, 692.8846) and ( 595.3037, 693.5439) .. ( 600.9378, 691.7836)}
+\def\fdulogo@emblem@new@E{%
+ ( 594.1579, 607.9833)
+ .. controls ( 588.6244, 612.5899) and ( 587.9174, 615.0815) .. ( 591.0125, 618.7993)
+ -- ( 608.4314, 639.7226)
+ .. controls ( 617.8555, 631.8769) and ( 618.5932, 625.5538) .. ( 611.2812, 614.6607)
+ -- ( 613.5291, 612.7893)
+ -- ( 637.8580, 642.0127)
+ -- ( 635.6100, 643.8842)
+ .. controls ( 626.2515, 635.2803) and ( 620.3028, 634.8165) .. ( 611.2245, 642.3743)
+ -- ( 610.8787, 642.6622)
+ -- ( 627.5778, 662.7209)
+ .. controls ( 630.3129, 666.0064) and ( 632.0847, 665.8488) .. ( 636.5806, 662.1059)
+ .. controls ( 650.6736, 650.3733) and ( 652.4629, 643.9067) .. ( 645.0512, 630.6081)
+ -- ( 647.2127, 628.8086)
+ -- ( 661.6804, 646.1871)
+ -- ( 611.7931, 687.7188)
+ -- ( 609.9936, 685.5573)
+ .. controls ( 615.6714, 680.2450) and ( 616.1625, 677.4940) .. ( 612.4916, 673.0846)
+ -- ( 577.6538, 631.2380)
+ .. controls ( 573.9109, 626.7421) and ( 571.9087, 626.7987) .. ( 564.9349, 631.4335)
+ -- ( 563.1354, 629.2720)
+ -- ( 613.7144, 587.1644)
+ -- ( 632.1444, 602.2689)
+ -- ( 629.7235, 604.2843)
+ .. controls ( 618.1596, 598.8339) and ( 607.8185, 596.6106) .. ( 594.1579, 607.9833)}
+\def\fdulogo@emblem@new@R{%
+ ( 703.6710, 556.4862)
+ .. controls ( 714.4763, 563.6014) and ( 714.2704, 576.8012) .. ( 702.9480, 593.9956)
+ -- ( 683.0255, 624.2503)
+ -- ( 680.6766, 622.7035)
+ .. controls ( 684.7852, 615.4412) and ( 684.2421, 613.1977) .. ( 677.4770, 608.7430)
+ -- ( 635.9473, 581.3960)
+ .. controls ( 629.0883, 576.8794) and ( 627.5300, 577.2003) .. ( 621.8585, 583.9722)
+ -- ( 619.5095, 582.4254)
+ -- ( 640.4219, 550.6674)
+ -- ( 642.7709, 552.2142)
+ .. controls ( 638.8845, 560.1617) and ( 639.2994, 561.7818) .. ( 645.9704, 566.1747)
+ -- ( 664.3863, 578.3014)
+ -- ( 666.0568, 575.7645)
+ -- ( 649.4551, 536.9495)
+ -- ( 662.1387, 517.6879)
+ -- ( 664.4876, 519.2347)
+ .. controls ( 663.3739, 520.9260) and ( 663.1334, 522.5186) .. ( 663.7361, 524.2626)
+ -- ( 678.0783, 560.7815)
+ .. controls ( 685.1913, 555.0935) and ( 693.4295, 549.7423) .. ( 703.6710, 556.4862)
+ ( 698.6398, 593.5832)
+ .. controls ( 704.3319, 584.9390) and ( 702.5809, 578.8021) .. ( 692.7152, 572.3057)
+ .. controls ( 681.2523, 564.7574) and ( 676.1191, 567.4387) .. ( 667.3930, 580.2813)
+ -- ( 691.3525, 596.0584)
+ .. controls ( 694.6410, 598.2239) and ( 696.7217, 596.4960) .. ( 698.6398, 593.5832)}
+\def\fdulogo@emblem@new@S{%
+ ( 743.2031, 515.4693)
+ .. controls ( 738.4307, 530.0060) and ( 727.2879, 536.1756) .. ( 713.8201, 531.7542)
+ .. controls ( 704.4140, 528.6662) and ( 699.5048, 520.8973) .. ( 697.5881, 506.1775)
+ -- ( 696.5188, 497.8932)
+ .. controls ( 695.1175, 487.0133) and ( 693.1806, 483.5356) .. ( 687.6225, 481.7109)
+ .. controls ( 680.2473, 479.2896) and ( 673.7179, 482.9480) .. ( 671.0159, 491.1783)
+ .. controls ( 665.6470, 507.5321) and ( 681.4155, 517.2083) .. ( 686.7312, 520.4928)
+ -- ( 685.7136, 523.5925)
+ -- ( 659.3124, 514.9250)
+ -- ( 660.3301, 511.8253)
+ .. controls ( 663.2128, 512.0613) and ( 664.4555, 511.5220) .. ( 665.0170, 509.8118)
+ .. controls ( 666.2101, 506.1776) and ( 664.1199, 500.2815) .. ( 667.3833, 490.3410)
+ .. controls ( 672.5768, 474.5217) and ( 685.1713, 466.8157) .. ( 698.6391, 471.2371)
+ .. controls ( 706.6556, 473.8690) and ( 713.0580, 481.4176) .. ( 714.2326, 489.3813)
+ -- ( 716.8770, 507.6553)
+ .. controls ( 718.3101, 517.7168) and ( 720.2103, 520.9456) .. ( 725.3409, 522.6300)
+ .. controls ( 731.9679, 524.8056) and ( 737.5034, 521.6498) .. ( 739.8896, 514.3815)
+ .. controls ( 742.5565, 506.2581) and ( 739.7722, 496.3450) .. ( 726.8880, 487.2604)
+ -- ( 727.8705, 484.2676)
+ -- ( 751.0651, 491.8823)
+ -- ( 750.0123, 495.0890)
+ .. controls ( 746.9876, 494.9248) and ( 745.8518, 495.4992) .. ( 745.2553, 497.3163)
+ .. controls ( 744.2727, 500.3091) and ( 746.1156, 506.5977) .. ( 743.2031, 515.4693)}
+\def\fdulogo@emblem@new@I@ii{%
+ ( 690.1865, 451.6464)
+ .. controls ( 684.6017, 450.9745) and ( 682.7961, 452.7969) .. ( 681.0064, 461.0799)
+ -- ( 678.2140, 460.7439)
+ -- ( 682.9174, 421.6508)
+ -- ( 685.7097, 421.9868)
+ .. controls ( 685.2469, 430.5428) and ( 686.5553, 432.8531) .. ( 692.3634, 433.5519)
+ -- ( 746.4236, 440.0559)
+ .. controls ( 752.2317, 440.7547) and ( 754.3010, 438.6242) .. ( 755.6305, 430.3991)
+ -- ( 758.4229, 430.7350)
+ -- ( 753.7195, 469.8281)
+ -- ( 750.9272, 469.4922)
+ .. controls ( 751.3362, 461.3830) and ( 749.9430, 458.8358) .. ( 744.2466, 458.1505)}
+\def\fdulogo@emblem@new@T{%
+ ( 695.2781, 394.8643)
+ .. controls ( 686.9872, 395.6171) and ( 685.8667, 396.9614) .. ( 685.9573, 406.6680)
+ -- ( 683.1563, 406.9223)
+ -- ( 679.5246, 366.9243)
+ -- ( 682.3256, 366.6700)
+ .. controls ( 683.8828, 376.3564) and ( 685.1151, 377.4871) .. ( 693.6301, 376.7139)
+ -- ( 752.6747, 371.3528)
+ .. controls ( 750.9753, 357.6127) and ( 745.2925, 352.2546) .. ( 731.7869, 351.5605)
+ -- ( 731.4919, 348.3114)
+ -- ( 754.0321, 346.4907)
+ -- ( 760.1358, 413.7142)
+ -- ( 737.6465, 416.0950)
+ -- ( 737.3515, 412.8459)
+ .. controls ( 750.5112, 409.7307) and ( 755.1360, 403.4367) .. ( 754.3227, 389.5031)}
+\def\fdulogo@emblem@new@Y{%
+ ( 727.3770, 264.9871)
+ -- ( 735.5275, 288.3566)
+ -- ( 732.8719, 289.2828)
+ .. controls ( 729.8586, 282.3509) and ( 728.3790, 280.8415) .. ( 725.2984, 281.9159)
+ .. controls ( 723.2802, 282.6198) and ( 720.0809, 285.4036) .. ( 716.6519, 289.5782)
+ -- ( 701.1126, 308.2229)
+ -- ( 730.2025, 312.3749)
+ .. controls ( 731.6253, 312.3552) and ( 735.0219, 313.5535) .. ( 737.3589, 312.7385)
+ .. controls ( 739.6958, 311.9234) and ( 739.9899, 310.0337) .. ( 738.4710, 305.6785)
+ -- ( 737.6510, 302.9858)
+ -- ( 740.3066, 302.0596)
+ -- ( 752.7175, 337.6450)
+ -- ( 750.0619, 338.5711)
+ .. controls ( 748.5898, 335.0336) and ( 745.6083, 332.9756) .. ( 741.2557, 332.1108)
+ -- ( 699.2094, 324.9714)
+ -- ( 683.5943, 330.4173)
+ .. controls ( 675.8399, 333.1218) and ( 675.0789, 334.6978) .. ( 677.2670, 343.7046)
+ -- ( 674.6114, 344.6308)
+ -- ( 661.7559, 307.7708)
+ -- ( 664.4115, 306.8446)
+ .. controls ( 668.2992, 315.2586) and ( 669.7320, 315.9504) .. ( 677.5926, 313.2089)
+ -- ( 697.1380, 306.3922)
+ -- ( 723.0979, 274.5814)
+ .. controls ( 725.0224, 272.2422) and ( 725.4499, 269.7102) .. ( 724.7214, 265.9133)}
+% \end{macrocode}
+%
+% 年份“1905”。
+% \begin{macrocode}
+\def\fdulogo@emblem@new@one{%
+ ( 274.5395, 192.6967)
+ .. controls ( 276.9064, 191.1773) and ( 276.6109, 188.4259) .. ( 273.7544, 183.9760)
+ -- ( 250.3560, 147.5245)
+ .. controls ( 245.3724, 139.7608) and ( 242.4456, 139.3668) .. ( 233.0116, 145.2889)
+ -- ( 231.5530, 143.0166)
+ -- ( 267.0577, 120.2259)
+ -- ( 268.5163, 122.4982)
+ .. controls ( 260.0221, 128.2181) and ( 259.3241, 130.6714) .. ( 264.0038, 137.9617)
+ -- ( 298.6457, 191.9288)
+ -- ( 297.0361, 192.9620)
+ -- ( 266.5525, 197.9573)
+ -- ( 264.9724, 195.4956)
+ .. controls ( 266.7911, 194.9966) and ( 272.0778, 194.2769) .. ( 274.5395, 192.6967)}
+\def\fdulogo@emblem@new@nine{%
+ ( 346.5371, 87.1702)
+ .. controls ( 362.4419, 86.7295) and ( 370.4573, 88.2105) .. ( 380.2273, 93.2720)
+ .. controls ( 393.0006, 99.8738) and ( 401.0206, 110.7139) .. ( 403.4323, 124.7972)
+ .. controls ( 406.7175, 143.9816) and ( 398.6612, 158.2595) .. ( 383.1363, 160.9181)
+ .. controls ( 369.2747, 163.2918) and ( 357.4144, 154.0225) .. ( 354.8128, 138.8302)
+ .. controls ( 352.5721, 125.7449) and ( 359.1481, 115.4872) .. ( 371.2353, 113.4174)
+ .. controls ( 375.4493, 112.6958) and ( 378.4274, 112.7565) .. ( 381.6874, 113.7963)
+ .. controls ( 374.0326, 97.7572) and ( 363.5501, 90.5348) .. ( 347.0309, 90.0534)
+ ( 387.1965, 133.9696)
+ .. controls ( 386.6838, 130.9755) and ( 385.8543, 127.4649) .. ( 384.6671, 122.5317)
+ -- ( 383.8407,1 19.7055)
+ .. controls ( 383.5209, 118.5046) and ( 383.5118, 116.4516) .. ( 378.1890, 117.3631)
+ .. controls ( 371.3136, 118.5405) and ( 369.8835, 125.5199) .. ( 372.8649, 142.9300)
+ .. controls ( 375.0676, 155.7935) and ( 376.9680, 158.8924) .. ( 382.4018, 157.9619)
+ .. controls ( 387.6137, 157.0694) and ( 390.2348, 151.7124) .. ( 387.1965, 133.9696)}
+\def\fdulogo@emblem@new@zero{%
+ ( 468.5384, 119.7074)
+ .. controls ( 473.7469, 97.1238) and ( 487.7687, 83.3851) .. ( 502.3493, 86.7478)
+ .. controls ( 516.4914, 90.0095) and ( 523.2485, 108.7714) .. ( 518.1664, 130.8068)
+ .. controls ( 513.1097, 152.7325) and ( 498.6578, 166.8340) .. ( 484.5157, 163.5723)
+ .. controls ( 470.3736, 160.3107) and ( 463.5827, 141.1946) .. ( 468.5384, 119.7074)
+ ( 501.6414, 89.8174)
+ .. controls ( 496.1599, 88.5533) and ( 492.5852, 94.5410) .. ( 488.8432, 110.7660)
+ -- ( 483.0532, 135.8710)
+ .. controls ( 479.2354, 152.4250) and ( 479.8518, 159.2638) .. ( 485.1140, 160.4775)
+ .. controls ( 490.4858, 161.7164) and ( 494.2460, 155.4251) .. ( 497.9627, 139.3096)
+ -- ( 503.7527, 114.2046)
+ .. controls ( 507.9499, 96.0062) and ( 506.0265, 90.8288) .. ( 501.6414, 89.8174)}
+\def\fdulogo@emblem@new@five{%
+ ( 596.8132, 144.2577)
+ .. controls ( 593.5339, 141.8806) and ( 592.8164, 137.8865) .. ( 595.1276, 134.6983)
+ .. controls ( 598.6273, 129.8705) and ( 606.2217, 130.5123) .. ( 614.3287, 136.3892)
+ .. controls ( 629.3586, 147.2846) and ( 633.4128, 164.1194) .. ( 624.1022, 176.9632)
+ .. controls ( 617.2348, 186.4365) and ( 606.1224, 189.4976) .. ( 594.1466, 185.1239)
+ .. controls ( 589.9588, 183.6166) and ( 586.8709, 181.9339) .. ( 579.0713, 176.9747)
+ -- ( 575.7266, 185.8057)
+ -- ( 601.0497, 204.1628)
+ -- ( 596.5804, 218.5707)
+ -- ( 567.2494, 197.3081)
+ -- ( 581.1949, 159.4769)
+ .. controls ( 590.3107, 165.1124) and ( 594.4416, 167.2732) .. ( 599.3741, 168.9033)
+ .. controls ( 609.3300, 172.2297) and ( 617.9216, 170.5373) .. ( 622.2798, 164.5254)
+ .. controls ( 625.9776, 159.4243) and ( 624.8751, 152.5109) .. ( 619.7741, 148.8131)
+ .. controls ( 613.9443, 144.5870) and ( 603.2806, 148.9461) .. ( 596.8132, 144.2577)}
+% \end{macrocode}
+%
+% 内环。
+% \begin{macrocode}
+\def\fdulogo@emblem@new@ring@inner@i{%
+ ( 427.2847, 410.4046) circle [radius=241.88932729]}
+\def\fdulogo@emblem@new@ring@inner@ii{%
+ ( 427.2847, 410.4046) circle [radius=226.77199428]}
+% \end{macrocode}
+%
+% 外环。
+% \begin{macrocode}
+\def\fdulogo@emblem@new@ring@outer@i{%
+ ( 427.2847, 410.4046) circle [radius=359.05469569]}
+\def\fdulogo@emblem@new@ring@outer@ii{%
+ ( 427.2847, 410.4046) circle [radius=343.93732473]}
+% \end{macrocode}
+%
+% \paragraph{校训}
+%
+% 博。
+% \begin{macrocode}
+\def\fdulogo@motto@bo{%
+ ( 446.4407, 999.9156)
+ .. controls ( 447.6181, 1000.0743) and ( 456.1634, 1001.9569) .. ( 459.2901, 1001.3156)
+ .. controls ( 462.4581, 1000.6649) and ( 466.0367, 997.5156) .. ( 466.5834, 994.3956)
+ .. controls ( 466.9434, 992.4089) and ( 463.7514, 988.9516) .. ( 461.2501, 987.9023)
+ .. controls ( 452.2741, 984.1383) and ( 442.9127, 980.4983) .. ( 442.9127, 980.4983)
+ .. controls ( 442.8301, 967.4569) and ( 443.3647, 968.9383) .. ( 444.8301, 956.9129)
+ .. controls ( 446.8447, 940.3689) and ( 445.1074, 926.5983) .. ( 444.8661, 909.7996)
+ .. controls ( 444.2461, 900.9569) and ( 440.7141, 902.6716) .. ( 438.5794, 901.2489)
+ .. controls ( 434.4541, 898.4983) and ( 433.8301, 894.4156) .. ( 429.6834, 901.0409)
+ .. controls ( 426.8074, 905.6383) and ( 420.4941, 921.0689) .. ( 424.4767, 936.0489)
+ .. controls ( 429.1074, 953.4716) and ( 434.2327, 978.4756) .. ( 433.4967, 979.2489)
+ .. controls ( 432.9154, 979.8596) and ( 422.1794, 977.1876) .. ( 413.7181, 974.9156)
+ .. controls ( 406.5794, 972.9996) and ( 404.5181, 974.8543) .. ( 404.1634, 976.9716)
+ .. controls ( 402.9967, 983.9156) and ( 425.5034, 995.3289) .. ( 429.2501, 996.3289)
+ .. controls ( 430.2634, 1003.8223) and ( 427.7434, 1012.8356) .. ( 433.5034, 1018.0223)
+ .. controls ( 435.6634, 1019.9689) and ( 445.6234, 1020.4356) .. ( 447.2767, 1014.6356)
+ .. controls ( 448.9167, 1008.8623) and ( 447.4407, 1006.9023) .. ( 446.4407, 999.9156)
+ ( 504.1630, 912.5823)
+ .. controls ( 502.9283, 909.4636) and ( 498.3857, 907.0823) .. ( 494.8297, 907.8596)
+ .. controls ( 491.0990, 908.6756) and ( 482.1083, 915.8916) .. ( 480.8297, 920.5263)
+ .. controls ( 479.8963, 923.9089) and ( 488.1243, 925.4156) .. ( 489.6070, 925.3596)
+ .. controls ( 498.4403, 925.0263) and ( 501.6070, 921.8156) .. ( 502.9963, 919.6929)
+ .. controls ( 504.3857, 917.5716) and ( 505.2190, 915.2489) .. ( 504.1630, 912.5823)
+ ( 487.0519, 975.3323)
+ .. controls ( 487.4986, 974.5176) and ( 488.7119, 974.5523) .. ( 490.1359, 974.7216)
+ ( 485.8293, 957.1056)
+ .. controls ( 485.9413, 952.9989) and ( 484.6813, 952.3963) .. ( 483.6626, 949.9989)
+ .. controls ( 482.8186, 948.0083) and ( 481.7066, 945.0696) .. ( 480.7186, 944.7496)
+ ( 495.4133, 1000.2216)
+ .. controls ( 494.6439, 1000.5789) and ( 492.1159, 998.6123) .. ( 491.4546, 997.2909)
+ .. controls ( 490.9546, 996.2909) and ( 490.2879, 993.4576) .. ( 490.9959, 992.9163)
+ .. controls ( 491.7053, 992.3736) and ( 494.9693, 994.6896) .. ( 495.7879, 996.1656)
+ .. controls ( 496.7746, 997.9429) and ( 496.1906, 999.8603) .. ( 495.4133, 1000.2216)
+ ( 494.5799, 976.5816)
+ .. controls ( 495.5386, 977.1869) and ( 495.9333, 978.0309) .. ( 496.2466, 979.3509)
+ .. controls ( 496.7466, 981.4549) and ( 496.5386, 983.7909) .. ( 496.0386, 984.4149)
+ .. controls ( 495.5413, 985.0363) and ( 492.4679, 984.6096) .. ( 490.5159, 983.7723)
+ .. controls ( 489.5279, 983.3483) and ( 488.0479, 982.3349) .. ( 487.6906, 981.6656)
+ .. controls ( 487.1159, 980.5869) and ( 486.6159, 976.1283) .. ( 487.0519, 975.3323)
+ .. controls ( 487.4986, 974.5176) and ( 488.7546, 974.3363) .. ( 490.1359, 974.7216)
+ .. controls ( 492.3013, 975.3256) and ( 493.2533, 975.7456) .. ( 494.5799, 976.5816)
+ ( 520.8853, 963.1376)
+ .. controls ( 524.1946, 967.7176) and ( 523.0893, 983.7963) .. ( 523.8066, 995.4949)
+ .. controls ( 523.9453, 997.7589) and ( 525.2466, 1006.9989) .. ( 523.1626, 1009.2483)
+ .. controls ( 521.9733, 1010.5336) and ( 513.5239, 1009.7483) .. ( 511.9959, 1008.3043)
+ .. controls ( 509.6519, 1006.0869) and ( 508.8813, 1000.4229) .. ( 509.9413, 1000.1376)
+ .. controls ( 512.8293, 999.3603) and ( 513.8293, 999.4709) .. ( 513.8293, 996.4163)
+ .. controls ( 513.8293, 990.9003) and ( 509.7813, 991.5989) .. ( 509.9253, 987.3456)
+ .. controls ( 510.0519, 983.6376) and ( 513.5426, 986.8509) .. ( 514.7466, 986.2496)
+ .. controls ( 516.7466, 985.2483) and ( 517.4573, 982.6336) .. ( 517.6626, 980.8323)
+ .. controls ( 517.9959, 977.9149) and ( 517.0266, 975.5643) .. ( 514.4959, 975.4149)
+ .. controls ( 511.6626, 975.2496) and ( 510.1626, 973.5483) .. ( 510.0773, 971.1656)
+ .. controls ( 509.9959, 968.9163) and ( 514.3919, 969.3509) .. ( 515.6626, 966.9989)
+ .. controls ( 517.3293, 963.9149) and ( 518.4133, 961.2483) .. ( 520.8853, 963.1376)
+ ( 483.9959, 899.6656)
+ .. controls ( 487.2466, 903.3323) and ( 507.7466, 888.0816) .. ( 511.3026, 891.0576)
+ .. controls ( 513.1946, 892.6403) and ( 511.7186, 906.8643) .. ( 512.1866, 913.5429)
+ .. controls ( 512.6373, 919.9883) and ( 515.7853, 933.7683) .. ( 514.7226, 935.4856)
+ .. controls ( 514.0959, 936.4963) and ( 501.1879, 932.5923) .. ( 496.1626, 931.7483)
+ .. controls ( 488.4333, 930.4509) and ( 478.1079, 930.1936) .. ( 474.2186, 929.2483)
+ .. controls ( 468.2173, 927.7909) and ( 456.0199, 919.6029) .. ( 453.8413, 924.5816)
+ .. controls ( 450.9959, 931.0816) and ( 458.2933, 935.6389) .. ( 462.1626, 936.9163)
+ .. controls ( 464.6746, 937.7443) and ( 478.3466, 939.0163) .. ( 489.0799, 940.4163)
+ .. controls ( 496.6013, 941.3963) and ( 507.1559, 942.9563) .. ( 513.4413, 944.0269)
+ .. controls ( 516.0519, 944.4709) and ( 516.4346, 948.3509) .. ( 516.5973, 951.6469)
+ .. controls ( 516.7746, 955.2483) and ( 514.1746, 955.6029) .. ( 512.2319, 956.7483)
+ .. controls ( 509.8386, 958.1603) and ( 510.1213, 960.3069) .. ( 507.4133, 960.4989)
+ .. controls ( 504.6626, 960.6936) and ( 504.1279, 957.6776) .. ( 501.3853, 957.7483)
+ .. controls ( 498.1626, 957.8323) and ( 501.0959, 966.3016) .. ( 497.3293, 969.3323)
+ .. controls ( 495.6213, 970.7069) and ( 487.3759, 970.3829) .. ( 485.8706, 969.1589)
+ .. controls ( 484.5373, 968.0763) and ( 485.7439, 960.2749) .. ( 485.8293, 957.1056)
+ .. controls ( 485.9413, 952.9989) and ( 484.7919, 952.3136) .. ( 483.7746, 949.9163)
+ .. controls ( 482.9293, 947.9243) and ( 481.7066, 945.0696) .. ( 480.7186, 944.7496)
+ .. controls ( 478.6626, 944.0829) and ( 472.5906, 949.9896) .. ( 469.7413, 953.7269)
+ .. controls ( 466.6106, 957.8323) and ( 467.6346, 960.3829) .. ( 468.9413, 967.9163)
+ .. controls ( 469.4946, 971.1083) and ( 471.4133, 977.0936) .. ( 471.4133, 981.0816)
+ .. controls ( 471.4133, 986.3323) and ( 472.2386, 991.9616) .. ( 473.0799, 995.7496)
+ .. controls ( 474.0346, 1000.0496) and ( 477.5279, 1001.2003) .. ( 479.4546, 999.9149)
+ .. controls ( 481.8293, 998.3323) and ( 481.9759, 990.9389) .. ( 482.6773, 990.0056)
+ .. controls ( 483.6626, 988.6936) and ( 485.4213, 987.0963) .. ( 486.3799, 994.3949)
+ .. controls ( 486.5813, 995.9349) and ( 487.4333, 998.9109) .. ( 488.3853, 1000.4149)
+ .. controls ( 489.4226, 1002.0563) and ( 492.0159, 1004.6709) .. ( 492.9959, 1005.5269)
+ .. controls ( 496.4959, 1008.5816) and ( 496.1626, 1011.0269) .. ( 494.8853, 1012.0816)
+ .. controls ( 493.7906, 1012.9869) and ( 483.7746, 1009.7483) .. ( 481.4959, 1012.9149)
+ .. controls ( 480.4573, 1014.3603) and ( 485.7426, 1020.9616) .. ( 489.3439, 1022.8069)
+ .. controls ( 492.4853, 1024.4163) and ( 496.2746, 1024.3309) .. ( 496.4413, 1025.8883)
+ .. controls ( 497.0386, 1031.4989) and ( 496.9453, 1036.7616) .. ( 500.8626, 1037.0763)
+ .. controls ( 504.5399, 1037.3709) and ( 506.1626, 1031.0269) .. ( 506.9413, 1030.8603)
+ .. controls ( 508.0119, 1030.6309) and ( 512.4719, 1032.0896) .. ( 514.4133, 1030.9163)
+ .. controls ( 516.6586, 1028.9203) and ( 517.2639, 1026.5403) .. ( 516.8093, 1023.9123)
+ .. controls ( 516.3133, 1021.0456) and ( 512.7373, 1017.2603) .. ( 513.4133, 1016.6656)
+ .. controls ( 514.6346, 1015.5923) and ( 525.9346, 1018.3349) .. ( 532.0799, 1014.3336)
+ .. controls ( 535.6626, 1012.0003) and ( 535.9426, 1009.5749) .. ( 536.5866, 1005.5816)
+ .. controls ( 538.7746, 992.0269) and ( 540.7879, 985.2909) .. ( 541.5519, 979.9163)
+ .. controls ( 542.3826, 974.0696) and ( 543.9959, 967.4163) .. ( 540.9133, 961.9149)
+ .. controls ( 539.5146, 959.4203) and ( 536.0346, 957.0323) .. ( 533.4133, 954.8323)
+ .. controls ( 531.5466, 953.2656) and ( 529.1346, 949.6469) .. ( 533.1826, 950.1523)
+ .. controls ( 536.9546, 950.6243) and ( 541.9239, 952.0803) .. ( 549.9133, 953.2496)
+ .. controls ( 555.9693, 954.1349) and ( 570.2746, 955.4709) .. ( 571.2066, 949.6843)
+ .. controls ( 571.7186, 946.5096) and ( 568.7439, 945.9483) .. ( 565.8613, 945.0443)
+ .. controls ( 563.7879, 944.3949) and ( 561.2906, 942.2589) .. ( 557.2466, 941.4163)
+ .. controls ( 551.8719, 940.2949) and ( 544.2319, 941.1469) .. ( 540.1626, 940.8323)
+ .. controls ( 532.1119, 940.2096) and ( 526.4733, 939.2496) .. ( 524.9959, 938.0269)
+ .. controls ( 523.4679, 936.7629) and ( 524.0346, 929.9656) .. ( 525.6626, 923.7483)
+ .. controls ( 528.0039, 914.8096) and ( 531.3226, 900.7829) .. ( 531.0959, 891.4589)
+ .. controls ( 530.8466, 881.1936) and ( 521.0813, 876.6403) .. ( 510.9133, 877.1656)
+ .. controls ( 501.1759, 877.6683) and ( 499.7466, 883.1656) .. ( 492.2626, 888.2589)
+ .. controls ( 486.2866, 892.3243) and ( 482.3533, 897.8109) .. ( 483.9959, 899.6656)
+ ( 534.5519, 1039.1379)
+ .. controls ( 543.0479, 1039.4925) and ( 549.7199, 1035.3459) .. ( 549.1626, 1026.7472)
+ .. controls ( 548.8759, 1022.3179) and ( 542.2266, 1014.5859) .. ( 540.4359, 1014.3325)
+ .. controls ( 538.8573, 1014.1099) and ( 526.6626, 1026.9152) .. ( 524.0973, 1031.6699)
+ .. controls ( 523.0373, 1033.6352) and ( 529.2186, 1038.9152) .. ( 534.5519, 1039.1379)}
+% \end{macrocode}
+%
+% 学。
+% \begin{macrocode}
+\def\fdulogo@motto@xue{%
+ ( 441.9695, 769.2220)
+ .. controls ( 449.3455, 772.0153) and ( 456.8855, 744.1380) .. ( 451.8535, 731.9580)
+ .. controls ( 450.7629, 729.3207) and ( 447.7469, 726.4633) .. ( 444.8295, 726.4993)
+ .. controls ( 442.4122, 726.5287) and ( 439.1069, 728.5273) .. ( 438.1069, 733.7487)
+ .. controls ( 437.5189, 736.8247) and ( 439.1069, 768.1380) .. ( 441.9695, 769.2220)
+ ( 527.6213, 755.1656)
+ .. controls ( 527.6306, 757.1909) and ( 526.7466, 758.4163) .. ( 525.2466, 758.1243)
+ .. controls ( 523.8199, 757.8469) and ( 522.1306, 756.1056) .. ( 522.8013, 753.9709)
+ .. controls ( 523.5799, 751.4989) and ( 525.2186, 750.0549) .. ( 525.7879, 750.2069)
+ .. controls ( 526.3573, 750.3603) and ( 527.6079, 752.3323) .. ( 527.6213, 755.1656)
+ ( 487.7986, 742.4136)
+ .. controls ( 490.3293, 743.1376) and ( 486.9679, 751.0549) .. ( 486.3399, 750.4029)
+ .. controls ( 485.7053, 749.7456) and ( 485.2093, 747.6616) .. ( 485.1626, 746.4163)
+ .. controls ( 485.0519, 743.4149) and ( 484.8733, 741.5776) .. ( 487.7986, 742.4136)
+ ( 493.8293, 758.1656)
+ .. controls ( 496.8293, 757.5816) and ( 496.8293, 760.8736) .. ( 496.7813, 762.5909)
+ .. controls ( 496.7333, 764.2749) and ( 496.7053, 764.9149) .. ( 495.0799, 765.2483)
+ .. controls ( 494.0293, 765.4643) and ( 491.5799, 765.2069) .. ( 490.2053, 763.4149)
+ .. controls ( 489.9719, 763.1136) and ( 489.5386, 761.1243) .. ( 489.8293, 760.3323)
+ .. controls ( 490.2799, 759.1083) and ( 492.2053, 758.4816) .. ( 493.8293, 758.1656)
+ ( 490.8959, 727.5109)
+ .. controls ( 489.5253, 726.1536) and ( 488.3293, 724.5829) .. ( 490.7879, 724.4989)
+ .. controls ( 493.6199, 724.4029) and ( 501.8293, 726.2909) .. ( 503.5799, 727.1656)
+ .. controls ( 504.5346, 727.6429) and ( 506.0799, 730.5829) .. ( 502.3453, 731.8456)
+ .. controls ( 498.2493, 733.2336) and ( 492.5506, 729.1483) .. ( 490.8959, 727.5109)
+ ( 536.0959, 719.8616)
+ .. controls ( 533.9293, 720.3643) and ( 512.1986, 716.6776) .. ( 499.9133, 714.4989)
+ .. controls ( 481.9333, 711.3109) and ( 470.3293, 708.1656) .. ( 462.8853, 705.3603)
+ .. controls ( 458.5719, 703.7349) and ( 445.9826, 698.8136) .. ( 440.9413, 691.3603)
+ .. controls ( 439.6626, 689.4709) and ( 439.8079, 683.4363) .. ( 439.4439, 681.9163)
+ .. controls ( 438.8853, 679.5829) and ( 437.1906, 678.5843) .. ( 434.1826, 678.0229)
+ .. controls ( 426.9133, 676.6656) and ( 419.6439, 682.5829) .. ( 419.6626, 689.8603)
+ .. controls ( 419.6853, 698.3163) and ( 425.6079, 703.4149) .. ( 429.5533, 706.9696)
+ .. controls ( 433.7439, 710.7456) and ( 447.4413, 720.1376) .. ( 448.7053, 718.4709)
+ .. controls ( 449.5706, 717.3309) and ( 444.5346, 711.5269) .. ( 445.3293, 709.8043)
+ .. controls ( 445.7373, 708.9203) and ( 451.3213, 711.0443) .. ( 452.8559, 711.6643)
+ .. controls ( 455.2053, 712.6123) and ( 461.9519, 715.5763) .. ( 463.4959, 716.5269)
+ .. controls ( 464.2186, 716.9709) and ( 462.3293, 717.9989) .. ( 460.5799, 724.1656)
+ .. controls ( 459.7506, 727.0883) and ( 459.8933, 733.0883) .. ( 460.1079, 736.9976)
+ .. controls ( 460.4133, 742.5816) and ( 461.9959, 743.6936) .. ( 462.8853, 750.1376)
+ .. controls ( 463.4093, 753.9416) and ( 463.2133, 758.8509) .. ( 463.2466, 763.4989)
+ .. controls ( 463.2879, 769.2883) and ( 462.9133, 776.7909) .. ( 461.2879, 779.5816)
+ .. controls ( 459.1039, 783.3349) and ( 459.1626, 785.4149) .. ( 461.5639, 787.0616)
+ .. controls ( 463.6959, 788.5229) and ( 467.0399, 789.1629) .. ( 469.5586, 788.6403)
+ .. controls ( 471.0733, 788.3256) and ( 473.3853, 787.3043) .. ( 472.9719, 783.3189)
+ .. controls ( 472.8119, 781.7763) and ( 471.3853, 779.8043) .. ( 470.7466, 777.1656)
+ .. controls ( 469.5439, 772.1989) and ( 468.7173, 766.4243) .. ( 468.6626, 761.4989)
+ .. controls ( 468.6173, 757.3189) and ( 472.8293, 758.8323) .. ( 473.6626, 752.1376)
+ .. controls ( 474.5373, 745.1163) and ( 474.9573, 736.3403) .. ( 474.9959, 730.9709)
+ .. controls ( 475.0546, 722.9256) and ( 474.3093, 719.3416) .. ( 474.7186, 719.3603)
+ .. controls ( 476.8839, 719.4589) and ( 483.8853, 721.5269) .. ( 483.9959, 723.1656)
+ .. controls ( 484.1279, 725.1069) and ( 480.5773, 724.2789) .. ( 479.8053, 726.2549)
+ .. controls ( 478.0799, 730.6656) and ( 478.4959, 745.2069) .. ( 479.4133, 752.2483)
+ .. controls ( 479.9186, 756.1336) and ( 480.6413, 758.0429) .. ( 480.7879, 760.5403)
+ .. controls ( 480.9759, 763.7283) and ( 480.4959, 766.2496) .. ( 480.7039, 770.0403)
+ .. controls ( 480.9893, 775.2296) and ( 484.0546, 781.5949) .. ( 485.1773, 786.5109)
+ .. controls ( 486.5239, 792.4096) and ( 487.4413, 797.8749) .. ( 496.0759, 795.6669)
+ .. controls ( 502.0519, 794.1376) and ( 500.7253, 787.4309) .. ( 499.9533, 782.8843)
+ .. controls ( 499.4133, 779.7069) and ( 496.6079, 777.5269) .. ( 497.6626, 772.6936)
+ .. controls ( 498.0826, 770.7749) and ( 501.9959, 773.3043) .. ( 506.2186, 772.0829)
+ .. controls ( 507.9146, 771.5909) and ( 508.2559, 765.9363) .. ( 508.0519, 761.0816)
+ .. controls ( 507.9733, 759.2176) and ( 507.8146, 752.6989) .. ( 507.8293, 751.8323)
+ .. controls ( 507.8853, 748.6656) and ( 511.9959, 749.7496) .. ( 512.8013, 745.8523)
+ .. controls ( 513.3279, 743.2949) and ( 513.5359, 740.5256) .. ( 513.2186, 737.6376)
+ .. controls ( 512.9679, 735.3563) and ( 510.0159, 735.3683) .. ( 509.6626, 733.8043)
+ .. controls ( 509.1639, 731.5909) and ( 508.9853, 729.3283) .. ( 510.2186, 729.2496)
+ .. controls ( 512.1906, 729.1229) and ( 519.9133, 729.8043) .. ( 525.1146, 731.7829)
+ .. controls ( 526.5399, 732.3256) and ( 525.4959, 735.1243) .. ( 523.7186, 736.8043)
+ .. controls ( 522.2346, 738.2069) and ( 521.8293, 738.2909) .. ( 519.1079, 743.6936)
+ .. controls ( 517.5146, 746.8549) and ( 515.4106, 753.7856) .. ( 515.1626, 756.6376)
+ .. controls ( 514.9613, 758.9696) and ( 517.0799, 759.1603) .. ( 517.8359, 759.7376)
+ .. controls ( 518.5439, 760.2803) and ( 518.5373, 762.0043) .. ( 518.3293, 763.1376)
+ .. controls ( 517.9733, 765.0803) and ( 515.1159, 764.3109) .. ( 514.9959, 765.4709)
+ .. controls ( 514.4413, 770.8603) and ( 518.8853, 773.1376) .. ( 522.8586, 772.5016)
+ .. controls ( 526.3613, 771.9403) and ( 529.0053, 768.5416) .. ( 530.2039, 769.8736)
+ .. controls ( 531.7053, 771.5403) and ( 531.4546, 780.0963) .. ( 531.0386, 782.7069)
+ .. controls ( 530.8253, 784.0429) and ( 528.8893, 783.8229) .. ( 527.1079, 783.4709)
+ .. controls ( 523.1373, 782.6869) and ( 517.9199, 780.7069) .. ( 517.2546, 781.4789)
+ .. controls ( 515.9599, 782.9843) and ( 521.1626, 794.7483) .. ( 531.7519, 795.3123)
+ .. controls ( 539.3573, 795.7176) and ( 542.3746, 791.1283) .. ( 544.2119, 783.2456)
+ .. controls ( 546.4386, 773.7003) and ( 548.2186, 762.0816) .. ( 546.0519, 752.0269)
+ .. controls ( 545.2133, 748.1349) and ( 539.4133, 740.4989) .. ( 535.1626, 737.4989)
+ .. controls ( 532.9679, 735.9496) and ( 532.8599, 732.8509) .. ( 533.6626, 732.9709)
+ .. controls ( 544.8853, 734.6496) and ( 554.9959, 736.2483) .. ( 566.5573, 727.4589)
+ .. controls ( 574.7319, 721.2443) and ( 574.6106, 714.8216) .. ( 565.0679, 710.3589)
+ .. controls ( 557.2826, 706.7176) and ( 548.8973, 704.1923) .. ( 540.5613, 701.9856)
+ .. controls ( 537.6306, 701.2083) and ( 531.5799, 699.4989) .. ( 529.8293, 701.8323)
+ .. controls ( 527.9426, 704.3483) and ( 531.1346, 710.4763) .. ( 533.7759, 713.7483)
+ .. controls ( 536.7399, 717.4189) and ( 539.2186, 719.1376) .. ( 536.0959, 719.8616)
+ ( 490.4407, 696.9712)
+ .. controls ( 487.8941, 695.4365) and ( 486.0074, 693.6125) .. ( 483.0514, 690.9152)
+ .. controls ( 482.0021, 689.9579) and ( 479.9941, 686.7485) .. ( 476.9967, 685.8552)
+ .. controls ( 474.5021, 685.1112) and ( 471.9967, 687.9152) .. ( 471.2741, 690.1379)
+ .. controls ( 470.2901, 693.1672) and ( 470.7741, 698.6699) .. ( 473.1074, 699.7525)
+ .. controls ( 475.9234, 701.0605) and ( 480.0381, 700.8325) .. ( 484.2461, 702.1659)
+ .. controls ( 488.1194, 703.3925) and ( 490.6354, 704.6645) .. ( 494.5594, 706.3712)
+ .. controls ( 501.3941, 709.3445) and ( 506.3301, 710.6939) .. ( 511.8301, 710.6939)
+ .. controls ( 518.5514, 710.6939) and ( 525.1007, 706.3605) .. ( 525.1074, 702.9152)
+ .. controls ( 525.1207, 695.3739) and ( 519.0314, 693.9725) .. ( 515.5114, 691.5339)
+ .. controls ( 512.7741, 689.6379) and ( 514.3301, 683.4152) .. ( 517.4354, 684.0165)
+ .. controls ( 521.9634, 684.8912) and ( 530.4874, 684.9192) .. ( 534.1634, 684.7485)
+ .. controls ( 540.1634, 684.4712) and ( 544.9314, 682.4712) .. ( 544.9127, 679.0819)
+ .. controls ( 544.8914, 674.8859) and ( 542.6274, 670.1312) .. ( 537.3847, 667.8605)
+ .. controls ( 533.9541, 666.3739) and ( 528.0994, 667.6152) .. ( 527.3301, 666.4152)
+ .. controls ( 526.7474, 665.5085) and ( 527.6901, 659.9485) .. ( 527.5794, 654.7485)
+ .. controls ( 527.4887, 650.4432) and ( 527.1794, 646.9672) .. ( 524.6634, 643.1379)
+ .. controls ( 522.5434, 639.9125) and ( 518.1847, 633.9085) .. ( 512.3301, 628.9152)
+ .. controls ( 507.5941, 624.8765) and ( 503.1207, 621.7072) .. ( 497.8301, 621.7072)
+ .. controls ( 490.1634, 621.7072) and ( 480.8714, 628.5405) .. ( 474.3301, 633.9992)
+ .. controls ( 465.1527, 641.6552) and ( 458.2461, 649.7912) .. ( 460.3301, 651.9152)
+ .. controls ( 461.2474, 652.8512) and ( 466.7754, 651.8765) .. ( 472.6634, 649.8739)
+ .. controls ( 476.9941, 648.4005) and ( 490.9487, 639.9352) .. ( 494.0314, 638.9765)
+ .. controls ( 497.2861, 637.9645) and ( 503.9261, 644.6859) .. ( 504.9967, 654.4152)
+ .. controls ( 505.5101, 659.0819) and ( 506.0207, 671.3259) .. ( 504.3301, 671.0272)
+ .. controls ( 500.7181, 670.3885) and ( 473.9367, 661.4125) .. ( 470.4967, 659.9712)
+ .. controls ( 468.1047, 658.9699) and ( 461.6714, 656.1005) .. ( 459.3847, 655.0272)
+ .. controls ( 455.2461, 653.0819) and ( 447.9794, 653.6619) .. ( 448.7874, 661.7032)
+ .. controls ( 449.3701, 667.5032) and ( 450.9007, 671.6445) .. ( 459.0874, 672.1685)
+ .. controls ( 472.3207, 673.0179) and ( 499.0541, 678.7099) .. ( 501.0381, 679.3739)
+ .. controls ( 501.7234, 679.6032) and ( 499.7047, 682.4152) .. ( 497.1634, 685.4712)
+ .. controls ( 495.0487, 688.0125) and ( 493.2301, 689.9059) .. ( 493.2461, 692.2072)
+ .. controls ( 493.2741, 696.1379) and ( 504.5714, 694.6992) .. ( 506.0514, 695.9152)
+ .. controls ( 507.5327, 697.1325) and ( 508.7207, 701.0925) .. ( 506.9967, 701.5272)
+ .. controls ( 502.3581, 702.6939) and ( 494.4967, 699.4152) .. ( 490.4407, 696.9712)}
+% \end{macrocode}
+%
+% 而。
+% \begin{macrocode}
+\def\fdulogo@motto@er@i{%
+ ( 461.6639, 521.2397)
+ .. controls ( 458.9959, 527.0824) and ( 472.5306, 539.4851) .. ( 475.2186, 544.8597)
+ .. controls ( 476.9959, 548.4157) and ( 475.9413, 551.5264) .. ( 472.3853, 549.4157)
+ .. controls ( 469.0546, 547.4384) and ( 458.6333, 543.4624) .. ( 456.4213, 547.7491)
+ .. controls ( 454.3293, 551.8051) and ( 460.8293, 560.3597) .. ( 466.9506, 564.4224)
+ .. controls ( 473.8453, 568.9971) and ( 490.4186, 577.4957) .. ( 502.8719, 569.3744)
+ .. controls ( 511.4959, 563.7491) and ( 511.3293, 558.3317) .. ( 505.5653, 552.9304)
+ .. controls ( 501.9239, 549.5184) and ( 496.8346, 546.3611) .. ( 493.2466, 543.4157)
+ .. controls ( 485.9626, 537.4344) and ( 478.1186, 528.5651) .. ( 473.6613, 524.4171)
+ .. controls ( 469.7186, 520.7477) and ( 462.4826, 519.4477) .. ( 461.6639, 521.2397)
+ ( 546.3293, 518.9856)
+ .. controls ( 546.6199, 523.1003) and ( 546.3293, 527.4163) .. ( 542.6626, 527.6563)
+ .. controls ( 537.4906, 527.9949) and ( 510.6746, 525.4963) .. ( 509.6559, 521.4989)
+ .. controls ( 508.9133, 518.5829) and ( 515.4413, 517.1376) .. ( 518.5799, 507.5829)
+ .. controls ( 520.0106, 503.2256) and ( 518.9679, 496.6656) .. ( 520.9133, 494.3323)
+ .. controls ( 523.5959, 491.1136) and ( 528.7639, 488.9576) .. ( 531.6626, 488.0829)
+ .. controls ( 534.6079, 487.1936) and ( 536.8146, 490.4336) .. ( 539.7466, 494.8323)
+ .. controls ( 544.4133, 501.8323) and ( 545.8293, 511.9029) .. ( 546.3293, 518.9856)
+ ( 498.4973, 530.7083)
+ .. controls ( 508.2466, 533.7496) and ( 529.9146, 538.4363) .. ( 543.3293, 539.0829)
+ .. controls ( 556.6079, 539.7216) and ( 567.3999, 534.1869) .. ( 568.6626, 525.8603)
+ .. controls ( 570.8293, 511.5829) and ( 570.8853, 504.4709) .. ( 563.8973, 491.0496)
+ .. controls ( 561.0933, 485.6643) and ( 556.5266, 481.0469) .. ( 551.9319, 477.0509)
+ .. controls ( 545.7506, 471.6749) and ( 541.4973, 470.8963) .. ( 536.2186, 470.5829)
+ .. controls ( 526.8853, 470.0269) and ( 520.6733, 480.3296) .. ( 518.5799, 480.2496)
+ .. controls ( 514.2466, 480.0829) and ( 511.5799, 464.9163) .. ( 506.8373, 462.4896)
+ .. controls ( 504.5786, 461.3336) and ( 502.1706, 462.8643) .. ( 501.4133, 467.0829)
+ .. controls ( 500.2466, 473.5829) and ( 500.8426, 491.8496) .. ( 500.2226, 499.1669)
+ .. controls ( 499.8293, 503.8043) and ( 495.7706, 504.8763) .. ( 495.1253, 503.3683)
+ .. controls ( 494.0519, 500.8603) and ( 495.2746, 494.9163) .. ( 494.4679, 489.6096)
+ .. controls ( 493.7453, 484.8469) and ( 490.1626, 482.5029) .. ( 487.4413, 482.0269)
+ .. controls ( 485.2106, 481.6363) and ( 481.5519, 482.5269) .. ( 479.4959, 488.6376)
+ .. controls ( 476.5986, 497.2549) and ( 477.4119, 510.1643) .. ( 483.7746, 510.5829)
+ .. controls ( 487.5799, 510.8323) and ( 490.5546, 506.3336) .. ( 491.9186, 507.9069)
+ .. controls ( 493.6626, 509.9163) and ( 496.0533, 517.3123) .. ( 493.7186, 517.9163)
+ .. controls ( 492.4013, 518.2563) and ( 485.2559, 515.8029) .. ( 477.9133, 511.9163)
+ .. controls ( 470.4439, 507.9616) and ( 463.5879, 501.5016) .. ( 460.8853, 496.2496)
+ .. controls ( 458.2199, 491.0709) and ( 459.7559, 486.3189) .. ( 459.1626, 480.3323)
+ .. controls ( 458.3293, 471.9163) and ( 452.0919, 467.2109) .. ( 447.7946, 466.8963)
+ .. controls ( 443.4959, 466.5829) and ( 437.9959, 472.2496) .. ( 437.0719, 480.1656)
+ .. controls ( 436.1599, 487.9816) and ( 437.7013, 497.6203) .. ( 439.5799, 505.8323)
+ .. controls ( 440.5799, 510.2056) and ( 443.4906, 518.4789) .. ( 447.2746, 518.5269)
+ .. controls ( 451.6079, 518.5829) and ( 455.6333, 506.6936) .. ( 457.1079, 506.9163)
+ .. controls ( 460.4959, 507.4269) and ( 467.1626, 515.3643) .. ( 471.7186, 518.3043)
+ .. controls ( 477.8293, 522.2496) and ( 485.8066, 526.7496) .. ( 498.4973, 530.7083)}
+% \end{macrocode}
+%
+% 笃。
+% \begin{macrocode}
+\def\fdulogo@motto@du{%
+ ( 491.2618, 364.0330)
+ .. controls ( 490.2191, 365.0543) and ( 485.8605, 365.2130) .. ( 483.9685, 364.8596)
+ .. controls ( 482.0578, 364.5036) and ( 480.7765, 361.8810) .. ( 482.4551, 361.1663)
+ .. controls ( 484.0178, 360.4996) and ( 488.3965, 360.3703) .. ( 489.8818, 360.5676)
+ .. controls ( 491.1311, 360.7343) and ( 491.7218, 363.5823) .. ( 491.2618, 364.0330)
+ ( 498.0791, 309.2490)
+ .. controls ( 495.4071, 308.8143) and ( 494.0791, 307.7903) .. ( 494.8298, 305.1236)
+ .. controls ( 495.3871, 303.1396) and ( 497.1005, 300.7076) .. ( 499.2045, 301.3530)
+ .. controls ( 500.6031, 301.7823) and ( 501.0031, 302.6863) .. ( 501.0791, 304.9570)
+ .. controls ( 501.1631, 307.4370) and ( 499.8711, 309.5410) .. ( 498.0791, 309.2490)
+ ( 513.7045, 390.3743)
+ .. controls ( 513.7538, 392.1063) and ( 512.8058, 393.2756) .. ( 510.6805, 391.9143)
+ .. controls ( 509.8191, 391.3636) and ( 508.6338, 389.5396) .. ( 507.3298, 387.9436)
+ .. controls ( 506.3351, 386.7263) and ( 505.3578, 385.4930) .. ( 504.9125, 384.4436)
+ .. controls ( 503.6631, 381.4996) and ( 505.8925, 379.5330) .. ( 508.2458, 381.0263)
+ .. controls ( 509.3071, 381.6996) and ( 509.8671, 383.6170) .. ( 510.9125, 385.2490)
+ .. controls ( 512.1445, 387.1716) and ( 513.6631, 388.9156) .. ( 513.7045, 390.3743)
+ ( 496.4405, 347.9156)
+ .. controls ( 493.1485, 342.3596) and ( 487.0791, 342.6663) .. ( 482.7458, 346.0823)
+ .. controls ( 477.9205, 349.8876) and ( 479.7738, 357.3023) .. ( 477.2751, 357.3570)
+ .. controls ( 474.5791, 357.4156) and ( 474.9578, 352.3810) .. ( 474.4965, 351.4436)
+ .. controls ( 473.6351, 349.6930) and ( 471.2591, 350.2703) .. ( 468.8858, 349.9716)
+ .. controls ( 465.8018, 349.5823) and ( 465.2191, 348.1663) .. ( 463.7458, 348.3050)
+ .. controls ( 461.0325, 348.5610) and ( 460.1071, 349.2770) .. ( 457.9125, 349.7490)
+ .. controls ( 455.3125, 350.3090) and ( 450.9405, 349.4156) .. ( 450.4405, 355.6383)
+ .. controls ( 449.9791, 361.3783) and ( 454.1791, 365.2996) .. ( 457.8298, 371.6663)
+ .. controls ( 460.8698, 376.9663) and ( 461.7885, 382.6663) .. ( 464.3298, 384.7490)
+ .. controls ( 466.3671, 386.4196) and ( 469.1685, 385.1970) .. ( 471.3298, 385.6663)
+ .. controls ( 473.8298, 386.2076) and ( 475.2245, 387.7796) .. ( 476.5791, 387.7490)
+ .. controls ( 482.6991, 387.6143) and ( 483.3858, 381.1383) .. ( 488.1631, 381.0823)
+ .. controls ( 493.0765, 381.0250) and ( 506.0525, 393.8596) .. ( 511.3298, 398.6383)
+ .. controls ( 516.6071, 403.4156) and ( 526.1831, 412.0503) .. ( 534.2738, 405.2490)
+ .. controls ( 535.8911, 403.8890) and ( 538.5205, 400.8930) .. ( 538.2738, 398.0263)
+ .. controls ( 537.6631, 390.9156) and ( 529.4338, 387.9583) .. ( 531.0791, 384.6663)
+ .. controls ( 531.9965, 382.8330) and ( 536.9965, 384.3050) .. ( 541.8538, 382.1970)
+ .. controls ( 548.4111, 379.3516) and ( 549.4405, 373.1930) .. ( 542.8298, 368.2490)
+ .. controls ( 537.3471, 364.1490) and ( 531.0445, 363.7250) .. ( 534.2205, 357.1863)
+ .. controls ( 536.0525, 353.4156) and ( 536.3045, 350.4290) .. ( 533.2831, 347.6143)
+ .. controls ( 530.3858, 344.9156) and ( 525.4711, 346.4050) .. ( 524.0791, 344.7490)
+ .. controls ( 522.2351, 342.5543) and ( 525.4405, 341.2223) .. ( 525.3298, 337.0263)
+ .. controls ( 525.2191, 332.8050) and ( 517.3298, 332.3596) .. ( 517.3298, 329.9156)
+ .. controls ( 517.3298, 328.0610) and ( 517.0045, 326.6223) .. ( 518.3791, 326.1810)
+ .. controls ( 520.8298, 325.3943) and ( 525.6951, 326.3076) .. ( 526.1005, 323.5023)
+ .. controls ( 526.4511, 321.0876) and ( 526.4405, 316.6103) .. ( 524.9965, 315.7490)
+ .. controls ( 523.4938, 314.8530) and ( 520.0151, 315.6716) .. ( 519.5711, 314.4490)
+ .. controls ( 519.1978, 313.4236) and ( 519.2858, 311.2943) .. ( 520.0525, 311.0823)
+ .. controls ( 522.3738, 310.4396) and ( 526.1298, 311.7796) .. ( 528.9965, 311.5823)
+ .. controls ( 531.5151, 311.4090) and ( 532.5045, 309.8730) .. ( 532.4551, 306.4156)
+ .. controls ( 532.3485, 299.0236) and ( 526.0965, 299.0290) .. ( 522.4965, 296.8330)
+ .. controls ( 519.2885, 294.8743) and ( 518.2885, 288.9996) .. ( 521.0658, 287.7250)
+ .. controls ( 523.7431, 286.4956) and ( 532.7765, 291.1423) .. ( 541.3858, 293.8596)
+ .. controls ( 548.5365, 296.1170) and ( 554.3125, 297.1330) .. ( 560.7591, 297.1383)
+ .. controls ( 572.5765, 297.1476) and ( 579.5191, 289.5303) .. ( 579.2031, 278.5196)
+ .. controls ( 578.6018, 257.5610) and ( 564.0405, 237.3996) .. ( 545.0911, 229.3530)
+ .. controls ( 532.6751, 224.0796) and ( 522.0231, 225.8156) .. ( 513.4405, 235.5823)
+ .. controls ( 507.8298, 241.9690) and ( 499.0325, 249.6863) .. ( 496.3858, 249.3596)
+ .. controls ( 493.7218, 249.0330) and ( 482.0178, 246.0116) .. ( 473.9311, 244.4103)
+ .. controls ( 466.4191, 242.9223) and ( 446.6071, 239.4156) .. ( 436.6071, 238.3596)
+ .. controls ( 432.8271, 237.9610) and ( 431.3298, 236.4996) .. ( 428.4965, 236.4156)
+ .. controls ( 425.0565, 236.3143) and ( 422.2458, 237.9570) .. ( 419.6631, 241.6663)
+ .. controls ( 417.9991, 244.0543) and ( 416.9205, 247.7850) .. ( 417.2885, 251.1236)
+ .. controls ( 417.7045, 254.9156) and ( 421.8791, 256.9583) .. ( 428.6631, 257.6236)
+ .. controls ( 436.1631, 258.3596) and ( 438.2538, 256.5210) .. ( 446.8898, 256.7090)
+ .. controls ( 453.8298, 256.8596) and ( 472.7458, 258.3330) .. ( 481.4551, 259.4996)
+ .. controls ( 483.4178, 259.7623) and ( 485.4418, 260.2556) .. ( 486.8325, 260.7716)
+ .. controls ( 487.2658, 260.9316) and ( 485.0125, 265.8716) .. ( 485.8298, 266.0823)
+ .. controls ( 487.7738, 266.5823) and ( 492.2671, 263.1836) .. ( 494.8298, 263.5823)
+ .. controls ( 501.1711, 264.5716) and ( 510.0578, 265.7783) .. ( 516.1351, 266.7490)
+ .. controls ( 523.7658, 267.9676) and ( 532.8298, 268.1383) .. ( 533.5351, 265.9396)
+ .. controls ( 534.0045, 264.4783) and ( 528.4885, 260.6250) .. ( 522.7738, 257.9156)
+ .. controls ( 517.5845, 255.4556) and ( 511.4791, 254.1490) .. ( 512.3298, 253.4996)
+ .. controls ( 513.6018, 252.5276) and ( 530.4445, 246.0983) .. ( 534.4965, 247.0823)
+ .. controls ( 537.4125, 247.7903) and ( 543.7778, 254.4570) .. ( 549.5525, 264.9156)
+ .. controls ( 553.8125, 272.6316) and ( 558.5071, 288.1543) .. ( 556.5791, 289.3330)
+ .. controls ( 554.6525, 290.5103) and ( 541.2778, 286.5770) .. ( 534.1405, 284.3983)
+ .. controls ( 520.4591, 279.9130) and ( 507.2738, 274.8596) .. ( 492.9351, 271.5116)
+ .. controls ( 488.7618, 270.5370) and ( 481.1071, 269.6956) .. ( 478.8858, 272.9156)
+ .. controls ( 476.1151, 276.9303) and ( 476.0405, 285.1143) .. ( 476.3298, 293.1663)
+ .. controls ( 476.6085, 300.9356) and ( 477.1551, 308.5876) .. ( 479.7738, 311.9156)
+ .. controls ( 482.1991, 314.9970) and ( 490.8405, 317.4236) .. ( 493.7458, 318.0823)
+ .. controls ( 499.9965, 319.4996) and ( 498.5165, 322.4703) .. ( 498.5165, 325.8050)
+ .. controls ( 498.5165, 328.1383) and ( 494.7191, 327.1383) .. ( 490.6631, 327.9156)
+ .. controls ( 487.0165, 328.6156) and ( 485.2871, 332.5756) .. ( 489.7565, 337.5010)
+ .. controls ( 491.4591, 339.3783) and ( 495.3858, 341.7490) .. ( 496.4965, 342.4156)
+ .. controls ( 497.6071, 343.0823) and ( 503.0445, 345.6890) .. ( 507.2191, 346.1383)
+ .. controls ( 512.5031, 346.7050) and ( 514.6631, 346.0263) .. ( 517.4405, 347.5263)
+ .. controls ( 521.3151, 349.6196) and ( 521.2631, 364.8916) .. ( 520.9125, 366.7490)
+ .. controls ( 520.4418, 369.2503) and ( 515.9258, 366.0956) .. ( 514.0525, 366.4716)
+ .. controls ( 509.6258, 367.4796) and ( 507.5525, 370.8050) .. ( 503.7191, 370.0263)
+ .. controls ( 498.8045, 369.0303) and ( 495.5565, 362.6183) .. ( 495.7165, 357.2636)
+ .. controls ( 495.8418, 353.0343) and ( 499.1071, 352.4156) .. ( 496.4405, 347.9156)}
+% \end{macrocode}
+%
+% 志。
+% \begin{macrocode}
+\def\fdulogo@motto@zhi{%
+ ( 512.2463, 153.6656)
+ .. controls ( 512.4783, 150.6283) and ( 511.4970, 146.9990) .. ( 513.7463, 147.4163)
+ .. controls ( 518.2303, 148.2456) and ( 526.4063, 149.3296) .. ( 527.2463, 145.3736)
+ .. controls ( 527.9543, 142.0403) and ( 528.1623, 138.7150) .. ( 523.7743, 135.1936)
+ .. controls ( 520.6637, 132.6976) and ( 517.5037, 132.9003) .. ( 515.5517, 130.4710)
+ .. controls ( 513.9943, 128.5350) and ( 513.9690, 119.1656) .. ( 516.7743, 119.6376)
+ .. controls ( 519.4890, 120.0950) and ( 524.6357, 121.2763) .. ( 528.0797, 121.4163)
+ .. controls ( 533.6477, 121.6403) and ( 537.4943, 118.3336) .. ( 537.4957, 113.4163)
+ .. controls ( 537.4970, 110.3603) and ( 533.9063, 106.2830) .. ( 530.3410, 105.8856)
+ .. controls ( 526.6077, 105.4710) and ( 525.2463, 108.5816) .. ( 521.0797, 108.6243)
+ .. controls ( 515.9490, 108.6750) and ( 510.5997, 106.9510) .. ( 499.4957, 104.0816)
+ .. controls ( 493.7277, 102.5923) and ( 488.0383, 100.7283) .. ( 482.6970, 99.5203)
+ .. controls ( 477.6597, 98.3803) and ( 471.5783, 96.4803) .. ( 465.9410, 96.2483)
+ .. controls ( 463.3037, 96.1403) and ( 458.6143, 96.2363) .. ( 457.8023, 100.3110)
+ .. controls ( 457.0517, 104.0816) and ( 457.6797, 107.0750) .. ( 462.4410, 109.2483)
+ .. controls ( 467.5517, 111.5830) and ( 482.9970, 112.8603) .. ( 489.3850, 114.3043)
+ .. controls ( 492.4677, 115.0016) and ( 491.7050, 123.1656) .. ( 490.1210, 123.7070)
+ .. controls ( 487.4663, 124.6163) and ( 478.6383, 121.4243) .. ( 472.7823, 122.4256)
+ .. controls ( 469.9677, 122.9070) and ( 463.9130, 123.1070) .. ( 464.4957, 129.3323)
+ .. controls ( 465.1077, 135.8603) and ( 484.6943, 137.4843) .. ( 488.3517, 138.7296)
+ .. controls ( 491.9957, 139.9710) and ( 491.0743, 146.6563) .. ( 490.5797, 149.1176)
+ .. controls ( 488.7357, 158.2963) and ( 489.0450, 164.8603) .. ( 500.2783, 165.9736)
+ .. controls ( 511.6223, 167.0976) and ( 512.0557, 156.1630) .. ( 512.2463, 153.6656)
+ ( 477.1466, 84.8999)
+ .. controls ( 472.7399, 81.2252) and ( 467.5879, 76.6546) .. ( 463.9959, 72.3039)
+ .. controls ( 462.3346, 70.2919) and ( 463.0546, 58.6532) .. ( 463.1079, 55.4706)
+ .. controls ( 463.2186, 48.8039) and ( 460.3719, 40.9159) .. ( 453.4546, 40.9159)
+ .. controls ( 445.2879, 40.9159) and ( 444.2026, 46.7492) .. ( 443.3293, 50.9986)
+ .. controls ( 442.1973, 56.5132) and ( 443.6613, 63.8399) .. ( 445.2186, 66.3599)
+ .. controls ( 446.7959, 68.9119) and ( 452.7586, 71.9252) .. ( 457.9266, 75.6879)
+ .. controls ( 468.9706, 83.7292) and ( 482.1853, 94.2972) .. ( 483.7746, 92.6466)
+ .. controls ( 485.0386, 91.3319) and ( 479.2759, 86.6746) .. ( 477.1466, 84.8999)
+ ( 476.4963, 72.7490)
+ .. controls ( 480.2190, 74.3596) and ( 501.8963, 50.0783) .. ( 510.8297, 47.2490)
+ .. controls ( 515.8297, 45.6663) and ( 532.3017, 46.1663) .. ( 537.6350, 46.2490)
+ .. controls ( 538.7670, 46.2663) and ( 540.6630, 46.4996) .. ( 540.5950, 47.7330)
+ .. controls ( 540.5203, 49.0983) and ( 500.6630, 75.5823) .. ( 503.7457, 79.1650)
+ .. controls ( 505.1817, 80.8330) and ( 525.2190, 70.5823) .. ( 540.7190, 64.5263)
+ .. controls ( 556.7417, 58.2663) and ( 572.3297, 53.3596) .. ( 572.3297, 48.5823)
+ .. controls ( 572.3297, 43.4636) and ( 566.0803, 43.4156) .. ( 563.0803, 39.4996)
+ .. controls ( 561.5443, 37.4956) and ( 561.4137, 34.5823) .. ( 558.6630, 32.5823)
+ .. controls ( 549.6043, 25.9943) and ( 535.5110, 25.8143) .. ( 524.8857, 26.1583)
+ .. controls ( 504.8857, 26.8050) and ( 495.9963, 29.9156) .. ( 487.9963, 40.9156)
+ .. controls ( 478.7083, 53.6876) and ( 473.7150, 71.5450) .. ( 476.4963, 72.7490)
+ ( 507.1074, 87.6379)
+ .. controls ( 508.2181, 90.8046) and ( 515.5541, 93.4246) .. ( 524.7461, 94.6659)
+ .. controls ( 535.2287, 96.0806) and ( 548.4461, 96.1806) .. ( 551.5794, 95.2486)
+ .. controls ( 557.7461, 93.4152) and ( 560.9127, 86.4152) .. ( 560.4967, 80.4992)
+ .. controls ( 560.2194, 76.5659) and ( 556.3847, 75.0819) .. ( 553.5514, 75.0819)
+ .. controls ( 549.5514, 75.0819) and ( 543.7901, 76.8446) .. ( 539.5581, 77.1526)
+ .. controls ( 532.1501, 77.6939) and ( 524.4274, 78.0112) .. ( 520.7181, 78.5819)
+ .. controls ( 514.9407, 79.4712) and ( 505.7914, 83.8872) .. ( 507.1074, 87.6379)}
+% \end{macrocode}
+%
+% 切。
+% \begin{macrocode}
+\def\fdulogo@motto@qie{%
+ ( 70.4130, 978.1240)
+ .. controls ( 68.5997, 977.9907) and ( 61.7743, 976.1373) .. ( 56.4410, 974.1933)
+ .. controls ( 51.0103, 972.2133) and ( 47.1637, 968.7493) .. ( 42.7743, 967.7493)
+ .. controls ( 38.3237, 966.7347) and ( 27.7183, 965.0827) .. ( 25.5917, 972.3267)
+ .. controls ( 24.6970, 975.3720) and ( 31.3557, 978.6573) .. ( 35.7183, 981.0973)
+ .. controls ( 40.1637, 983.5827) and ( 50.5450, 987.0147) .. ( 56.7383, 988.3760)
+ .. controls ( 60.8063, 989.2693) and ( 70.4957, 991.4160) .. ( 72.6210, 992.6653)
+ .. controls ( 74.0423, 993.5013) and ( 73.4130, 1004.2493) .. ( 72.2463, 1007.1653)
+ .. controls ( 69.6223, 1013.7240) and ( 69.9890, 1025.0427) .. ( 79.2210, 1025.3320)
+ .. controls ( 87.3903, 1025.5893) and ( 88.5437, 1019.5547) .. ( 88.6637, 1011.7493)
+ .. controls ( 88.7303, 1007.3360) and ( 85.7530, 999.4987) .. ( 87.4410, 996.6933)
+ .. controls ( 89.1290, 993.8880) and ( 95.5517, 997.8040) .. ( 96.8263, 996.3760)
+ .. controls ( 98.7970, 994.1667) and ( 99.2437, 989.3320) .. ( 96.6117, 988.4320)
+ .. controls ( 90.3850, 986.3040) and ( 86.5517, 986.9160) .. ( 85.0477, 978.9867)
+ .. controls ( 84.3317, 975.2147) and ( 84.1383, 971.3480) .. ( 83.8303, 966.7493)
+ .. controls ( 83.3877, 960.1627) and ( 83.6437, 956.1187) .. ( 84.0317, 955.6653)
+ .. controls ( 85.2050, 954.2907) and ( 101.0023, 967.4680) .. ( 109.6623, 973.8320)
+ .. controls ( 119.5650, 981.1093) and ( 128.2783, 988.0600) .. ( 131.5517, 989.9707)
+ .. controls ( 133.4543, 991.0827) and ( 135.6690, 994.4627) .. ( 136.4970, 993.9987)
+ .. controls ( 138.5797, 992.8320) and ( 137.1637, 989.6933) .. ( 141.0797, 989.6653)
+ .. controls ( 146.7383, 989.6253) and ( 150.9970, 989.7493) .. ( 150.4130, 983.1653)
+ .. controls ( 149.9197, 977.5947) and ( 149.0290, 971.7640) .. ( 148.2463, 966.9987)
+ .. controls ( 147.2463, 960.9160) and ( 152.6637, 965.4987) .. ( 153.9997, 959.7547)
+ .. controls ( 154.9397, 955.7133) and ( 159.5410, 956.3987) .. ( 161.7130, 958.3787)
+ .. controls ( 163.8850, 960.3600) and ( 167.2437, 970.3453) .. ( 168.5797, 981.0827)
+ .. controls ( 169.8743, 991.4880) and ( 171.3277, 1007.9827) .. ( 169.6877, 1009.3720)
+ .. controls ( 167.7423, 1011.0213) and ( 157.9970, 1000.2493) .. ( 149.7463, 1000.4160)
+ .. controls ( 142.7063, 999.6547) and ( 137.0370, 1002.7320) .. ( 136.5157, 1004.1413)
+ .. controls ( 135.4837, 1006.9347) and ( 143.4343, 1010.1053) .. ( 147.1863, 1011.4947)
+ .. controls ( 154.6397, 1014.2533) and ( 161.5797, 1014.6653) .. ( 168.5797, 1017.8320)
+ .. controls ( 171.2503, 1019.0400) and ( 172.3663, 1022.1640) .. ( 173.9130, 1021.8320)
+ .. controls ( 181.6277, 1020.1773) and ( 191.3277, 1014.2600) .. ( 191.9077, 1006.6720)
+ .. controls ( 192.9063, 993.6187) and ( 192.7463, 980.6173) .. ( 190.6810, 965.5787)
+ .. controls ( 189.5650, 957.4467) and ( 184.0277, 952.2400) .. ( 178.3517, 946.7147)
+ .. controls ( 172.5903, 941.1067) and ( 157.9130, 936.4987) .. ( 152.7370, 940.7253)
+ .. controls ( 147.2823, 945.1800) and ( 145.8610, 950.5547) .. ( 144.4970, 951.8600)
+ .. controls ( 143.3797, 952.9280) and ( 141.2530, 950.5200) .. ( 139.2463, 947.3320)
+ .. controls ( 134.9970, 940.5827) and ( 127.3143, 929.8760) .. ( 121.4970, 923.0827)
+ .. controls ( 115.3063, 915.8533) and ( 111.0517, 911.2493) .. ( 109.1143, 912.2493)
+ .. controls ( 107.6543, 913.0027) and ( 116.6570, 928.6347) .. ( 123.8850, 945.8040)
+ .. controls ( 130.1010, 960.5707) and ( 135.2117, 976.5760) .. ( 134.4410, 982.3040)
+ .. controls ( 133.9957, 985.6080) and ( 131.7970, 985.5613) .. ( 129.9223, 984.5147)
+ .. controls ( 124.8650, 981.6893) and ( 118.9770, 970.9747) .. ( 114.4970, 965.9987)
+ .. controls ( 101.5623, 951.6347) and ( 100.6343, 950.8320) .. ( 87.2183, 936.9160)
+ .. controls ( 81.9277, 931.4280) and ( 71.9957, 921.1373) .. ( 69.2877, 920.9160)
+ .. controls ( 66.9250, 920.7213) and ( 66.8850, 923.7493) .. ( 64.8303, 924.5827)
+ .. controls ( 62.3530, 925.5867) and ( 60.4970, 924.1933) .. ( 57.9903, 926.0987)
+ .. controls ( 50.6050, 931.7120) and ( 62.6637, 937.6933) .. ( 66.8850, 948.0267)
+ .. controls ( 71.8823, 960.2560) and ( 73.3303, 968.2520) .. ( 73.8303, 974.1653)
+ .. controls ( 74.1530, 977.9933) and ( 72.2050, 978.2560) .. ( 70.4130, 978.1240)}
+% \end{macrocode}
+%
+% 问。
+% \begin{macrocode}
+\def\fdulogo@motto@wen{%
+ ( 113.8853, 800.3323)
+ .. controls ( 113.8853, 792.4989) and ( 103.4413, 785.9149) .. ( 93.7746, 787.6936)
+ .. controls ( 91.9759, 788.0243) and ( 91.9959, 790.5403) .. ( 92.3679, 792.0269)
+ .. controls ( 93.0013, 794.5549) and ( 94.0386, 794.7909) .. ( 94.2186, 797.4149)
+ .. controls ( 94.4199, 800.3456) and ( 90.5519, 798.8736) .. ( 90.5519, 802.4576)
+ .. controls ( 90.5519, 807.7349) and ( 91.4199, 813.7069) .. ( 93.8279, 814.6189)
+ .. controls ( 95.1853, 815.1323) and ( 99.9426, 810.0283) .. ( 104.2346, 809.8029)
+ .. controls ( 109.9959, 809.4989) and ( 113.8853, 808.0549) .. ( 113.8853, 800.3323)
+ ( 68.2463, 746.2489)
+ .. controls ( 76.0237, 746.2489) and ( 76.3090, 717.7783) .. ( 76.3290, 695.7489)
+ .. controls ( 76.3463, 678.9156) and ( 73.7037, 668.6329) .. ( 68.8263, 668.6183)
+ .. controls ( 65.4410, 668.6089) and ( 58.4917, 673.2316) .. ( 57.5450, 683.2489)
+ .. controls ( 55.9303, 700.3503) and ( 58.4970, 720.0823) .. ( 62.5023, 732.2049)
+ .. controls ( 63.8410, 736.2583) and ( 65.5797, 746.2489) .. ( 68.2463, 746.2489)
+ ( 117.1955, 733.3479)
+ .. controls ( 114.8302, 735.2492) and ( 94.6875, 733.4439) .. ( 94.4969, 732.4985)
+ .. controls ( 93.9969, 730.0265) and ( 98.7369, 730.3345) .. ( 99.6075, 726.3599)
+ .. controls ( 100.9862, 720.0612) and ( 103.2462, 712.7079) .. ( 105.5609, 712.6825)
+ .. controls ( 106.9129, 712.6679) and ( 110.0729, 717.6452) .. ( 112.7462, 722.7492)
+ .. controls ( 115.3222, 727.6679) and ( 118.0995, 732.6212) .. ( 117.1955, 733.3479)
+ ( 125.0795, 717.7492)
+ .. controls ( 125.1635, 710.5825) and ( 136.3302, 717.4159) .. ( 136.3302, 709.9159)
+ .. controls ( 136.3302, 706.9985) and ( 134.9969, 703.5825) .. ( 132.9129, 703.1652)
+ .. controls ( 128.8622, 702.3559) and ( 122.6649, 701.9319) .. ( 122.8302, 700.9985)
+ .. controls ( 123.3302, 698.1652) and ( 134.4582, 690.9119) .. ( 137.8849, 690.6932)
+ .. controls ( 139.3542, 690.5999) and ( 141.4529, 694.4479) .. ( 141.4129, 701.2492)
+ .. controls ( 141.3302, 715.3319) and ( 141.4622, 737.0945) .. ( 141.4129, 747.8319)
+ .. controls ( 141.3302, 766.2492) and ( 140.8755, 775.7052) .. ( 135.5795, 774.9985)
+ .. controls ( 130.2835, 774.2919) and ( 125.6635, 768.8319) .. ( 123.0169, 763.9319)
+ .. controls ( 119.1769, 756.8185) and ( 114.0009, 755.9812) .. ( 107.7755, 760.5185)
+ .. controls ( 103.8089, 763.4092) and ( 98.4409, 763.8572) .. ( 95.3142, 763.3052)
+ .. controls ( 91.0435, 762.5519) and ( 89.0062, 756.6812) .. ( 87.9409, 755.3039)
+ .. controls ( 85.6635, 752.3599) and ( 82.5515, 750.3599) .. ( 78.5515, 751.4159)
+ .. controls ( 74.7449, 752.4199) and ( 68.0795, 757.8959) .. ( 68.0795, 764.0825)
+ .. controls ( 68.0795, 770.2692) and ( 73.1035, 771.4305) .. ( 75.4182, 770.3465)
+ .. controls ( 78.8302, 768.7492) and ( 80.6222, 763.4999) .. ( 86.2969, 765.4892)
+ .. controls ( 89.4129, 766.5825) and ( 95.1862, 773.4879) .. ( 102.2182, 775.0825)
+ .. controls ( 106.9969, 776.1652) and ( 113.8662, 773.3172) .. ( 116.6395, 776.1892)
+ .. controls ( 122.1129, 781.8559) and ( 125.2262, 780.0319) .. ( 130.2462, 783.7492)
+ .. controls ( 133.9155, 786.4665) and ( 136.3689, 790.4279) .. ( 144.2182, 790.4705)
+ .. controls ( 150.9129, 790.5079) and ( 155.7729, 786.6225) .. ( 160.3302, 779.8039)
+ .. controls ( 164.9529, 772.8879) and ( 165.5755, 766.1705) .. ( 165.9969, 757.8039)
+ .. controls ( 166.5262, 747.2532) and ( 165.2662, 744.2612) .. ( 165.6635, 734.4159)
+ .. controls ( 166.0409, 725.0212) and ( 169.0182, 708.5425) .. ( 169.9062, 696.5825)
+ .. controls ( 171.0342, 681.3959) and ( 156.0915, 668.3425) .. ( 145.2182, 666.4252)
+ .. controls ( 136.6635, 664.9159) and ( 132.8849, 670.4705) .. ( 130.1075, 675.2492)
+ .. controls ( 123.6982, 686.2719) and ( 115.9502, 694.9225) .. ( 110.1075, 698.2492)
+ .. controls ( 106.8395, 700.1092) and ( 101.6435, 698.1572) .. ( 96.4409, 699.0265)
+ .. controls ( 89.3115, 700.2172) and ( 86.3329, 709.1959) .. ( 85.7462, 719.1652)
+ .. controls ( 85.4969, 723.4159) and ( 89.7102, 729.0012) .. ( 90.5022, 730.4972)
+ .. controls ( 91.9129, 733.1652) and ( 90.1395, 736.6412) .. ( 92.6635, 738.5825)
+ .. controls ( 100.2462, 744.4159) and ( 111.6275, 747.6065) .. ( 119.8982, 748.2412)
+ .. controls ( 123.9702, 748.5532) and ( 129.7969, 746.7945) .. ( 132.2462, 743.4159)
+ .. controls ( 134.6635, 740.0825) and ( 134.8302, 735.5825) .. ( 133.0755, 730.6265)
+ .. controls ( 131.3115, 725.6399) and ( 125.0382, 721.3652) .. ( 125.0795, 717.7492)}
+% \end{macrocode}
+%
+% 而。
+% \begin{macrocode}
+\def\fdulogo@motto@er@ii{%
+ ( 108.9046, 536.5876)
+ .. controls ( 109.8766, 538.5756) and ( 102.9726, 537.0849) .. ( 98.6633, 536.3743)
+ .. controls ( 94.8406, 535.7436) and ( 88.8913, 534.1289) .. ( 86.5526, 538.0463)
+ .. controls ( 84.4406, 541.5823) and ( 89.9299, 547.8849) .. ( 94.2073, 550.4929)
+ .. controls ( 99.8939, 553.9583) and ( 111.2953, 558.1209) .. ( 118.7459, 558.4996)
+ .. controls ( 125.6459, 558.8489) and ( 133.8379, 551.1116) .. ( 133.8513, 544.5289)
+ .. controls ( 133.8593, 539.7516) and ( 127.8886, 534.2276) .. ( 126.3113, 532.7663)
+ .. controls ( 121.7899, 528.5796) and ( 98.2953, 509.8276) .. ( 92.8299, 505.8596)
+ .. controls ( 88.2513, 502.5356) and ( 86.0513, 503.0356) .. ( 85.5926, 503.6649)
+ .. controls ( 85.0246, 504.4436) and ( 86.9966, 508.7489) .. ( 91.8299, 514.9156)
+ .. controls ( 98.6926, 523.6716) and ( 106.8059, 532.2969) .. ( 108.9046, 536.5876)
+ ( 133.8506, 493.8045)
+ .. controls ( 134.2946, 488.9152) and ( 146.7573, 471.2992) .. ( 155.1039, 472.0139)
+ .. controls ( 160.9373, 472.5139) and ( 165.8853, 481.7485) .. ( 167.6626, 488.1939)
+ .. controls ( 168.8173, 492.3792) and ( 169.3133, 501.7072) .. ( 168.6386, 502.6579)
+ .. controls ( 167.9879, 503.5725) and ( 159.5986, 500.3579) .. ( 151.9959, 498.8739)
+ .. controls ( 143.4213, 497.2005) and ( 133.6813, 495.6645) .. ( 133.8506, 493.8045)
+ ( 119.7053, 486.0405)
+ .. controls ( 118.5799, 486.6245) and ( 116.1719, 486.2925) .. ( 115.6213, 485.5405)
+ .. controls ( 115.1626, 484.9152) and ( 116.6199, 465.6152) .. ( 113.7773, 461.7752)
+ .. controls ( 110.8839, 457.8699) and ( 102.4919, 457.9419) .. ( 99.6839, 460.3525)
+ .. controls ( 96.4546, 463.1245) and ( 94.2773, 467.7659) .. ( 94.4413, 472.4712)
+ .. controls ( 94.6213, 477.6659) and ( 97.2866, 483.1779) .. ( 95.7999, 484.0112)
+ .. controls ( 94.9759, 484.4739) and ( 86.9746, 480.9125) .. ( 82.3719, 480.2072)
+ .. controls ( 75.9413, 479.2205) and ( 74.8506, 485.5819) .. ( 73.2879, 485.3325)
+ .. controls ( 70.9559, 484.9592) and ( 72.5799, 474.6445) .. ( 73.6079, 468.0272)
+ .. controls ( 74.3213, 463.4312) and ( 75.7853, 458.5805) .. ( 75.3293, 455.6379)
+ .. controls ( 74.4959, 450.2485) and ( 71.0799, 448.0819) .. ( 66.7439, 447.5272)
+ .. controls ( 62.5893, 446.9965) and ( 58.0386, 450.9992) .. ( 55.9133, 456.2912)
+ .. controls ( 54.8839, 458.8525) and ( 53.2786, 461.9539) .. ( 53.3893, 475.2379)
+ .. controls ( 53.4786, 485.9685) and ( 56.6413, 504.7859) .. ( 61.6719, 508.2499)
+ .. controls ( 67.3573, 512.1632) and ( 70.8426, 506.7779) .. ( 71.9613, 503.7539)
+ .. controls ( 73.0799, 500.7299) and ( 71.4479, 494.3805) .. ( 73.2053, 493.2485)
+ .. controls ( 74.2186, 492.5965) and ( 85.4493, 497.0925) .. ( 99.6626, 500.8325)
+ .. controls ( 114.5519, 504.7485) and ( 131.6493, 508.5352) .. ( 143.9546, 510.9579)
+ .. controls ( 156.8719, 513.4992) and ( 174.4133, 516.7072) .. ( 181.4719, 514.8339)
+ .. controls ( 187.0733, 513.3485) and ( 191.8333, 505.0805) .. ( 193.0226, 499.3552)
+ .. controls ( 194.4413, 492.5272) and ( 194.2079, 479.9459) .. ( 188.9959, 470.1379)
+ .. controls ( 185.5773, 463.7045) and ( 180.3853, 460.4712) .. ( 173.5679, 457.3792)
+ .. controls ( 169.1293, 455.3672) and ( 158.6013, 452.7285) .. ( 153.7186, 453.1379)
+ .. controls ( 145.7746, 453.8045) and ( 142.6639, 465.3645) .. ( 139.8293, 465.5819)
+ .. controls ( 136.2186, 465.8605) and ( 133.6333, 458.0152) .. ( 130.2746, 452.4152)
+ .. controls ( 127.8653, 448.4005) and ( 124.5853, 445.8405) .. ( 123.1626, 446.0272)
+ .. controls ( 120.8293, 446.3325) and ( 121.4733, 457.5925) .. ( 121.6079, 467.8045)
+ .. controls ( 121.7186, 476.2485) and ( 120.8959, 485.4232) .. ( 119.7053, 486.0405)}
+% \end{macrocode}
+%
+% 近。
+% \begin{macrocode}
+\def\fdulogo@motto@jin{%
+ ( 147.5299, 311.6304)
+ .. controls ( 148.5899, 309.4291) and ( 152.4966, 307.1384) .. ( 155.9953, 297.7078)
+ .. controls ( 158.1259, 291.9624) and ( 159.9966, 280.7491) .. ( 159.6433, 273.7478)
+ .. controls ( 159.2326, 265.5918) and ( 157.1006, 260.9211) .. ( 154.4153, 257.0184)
+ .. controls ( 150.2566, 250.9771) and ( 146.1459, 247.3691) .. ( 147.3299, 247.0824)
+ .. controls ( 150.0793, 246.4158) and ( 181.7819, 246.2584) .. ( 191.1713, 248.6344)
+ .. controls ( 201.7179, 251.3051) and ( 223.9166, 249.5864) .. ( 224.2179, 243.2491)
+ .. controls ( 224.5206, 236.9118) and ( 214.1033, 233.8264) .. ( 202.3299, 231.9984)
+ .. controls ( 191.7739, 230.3598) and ( 153.3113, 227.2704) .. ( 134.8193, 228.3318)
+ .. controls ( 111.1073, 229.6931) and ( 94.2753, 234.9824) .. ( 80.5513, 240.1384)
+ .. controls ( 70.4966, 243.9158) and ( 62.0019, 249.0918) .. ( 55.4406, 249.6931)
+ .. controls ( 50.3286, 250.1624) and ( 46.2179, 248.1384) .. ( 42.8299, 244.6931)
+ .. controls ( 39.3633, 241.1704) and ( 34.7179, 241.6931) .. ( 32.6633, 244.2491)
+ .. controls ( 31.7166, 245.4264) and ( 29.2459, 249.7078) .. ( 31.5979, 254.4424)
+ .. controls ( 33.5713, 258.4131) and ( 37.5313, 261.1918) .. ( 41.8299, 262.6238)
+ .. controls ( 47.1633, 264.4011) and ( 54.8486, 263.6664) .. ( 54.9126, 265.6651)
+ .. controls ( 55.0379, 269.5411) and ( 50.1633, 275.9158) .. ( 47.3299, 284.9158)
+ .. controls ( 45.2446, 291.5371) and ( 44.6339, 303.4931) .. ( 44.7459, 312.1651)
+ .. controls ( 44.7966, 316.0411) and ( 45.4993, 319.5144) .. ( 45.4406, 322.3051)
+ .. controls ( 45.3299, 327.6384) and ( 43.7153, 330.8718) .. ( 43.7713, 334.4824)
+ .. controls ( 43.8379, 338.8664) and ( 44.8273, 343.8051) .. ( 48.9966, 343.9158)
+ .. controls ( 55.2459, 344.0824) and ( 57.5606, 337.9038) .. ( 58.2459, 331.8318)
+ .. controls ( 58.8299, 326.6651) and ( 56.7979, 319.7584) .. ( 56.7513, 314.2491)
+ .. controls ( 56.6633, 303.5824) and ( 59.7926, 301.9211) .. ( 63.0073, 295.5251)
+ .. controls ( 66.1633, 289.2491) and ( 66.2446, 276.2491) .. ( 66.2446, 265.9718)
+ .. controls ( 66.2446, 262.8878) and ( 71.1673, 260.6171) .. ( 78.2179, 257.8051)
+ .. controls ( 84.6166, 255.2518) and ( 92.8059, 252.2571) .. ( 100.5793, 250.4984)
+ .. controls ( 110.1633, 248.3318) and ( 137.5033, 246.8944) .. ( 138.8913, 247.3664)
+ .. controls ( 141.1633, 248.1384) and ( 137.0513, 250.5264) .. ( 136.8593, 256.4704)
+ .. controls ( 136.6499, 262.9211) and ( 136.1566, 308.4571) .. ( 135.7153, 308.5531)
+ .. controls ( 132.4966, 309.2491) and ( 118.6926, 301.9504) .. ( 118.5513, 293.5824)
+ .. controls ( 118.4126, 285.3318) and ( 116.5793, 277.4158) .. ( 112.6646, 268.5984)
+ .. controls ( 109.5566, 261.5998) and ( 104.0566, 254.4358) .. ( 99.1099, 255.3984)
+ .. controls ( 93.5779, 256.4744) and ( 89.9459, 263.7824) .. ( 89.4713, 271.2384)
+ .. controls ( 88.9966, 278.6931) and ( 91.3673, 295.3158) .. ( 94.5779, 309.3331)
+ .. controls ( 97.7459, 323.1651) and ( 104.6539, 336.3038) .. ( 107.8846, 341.6384)
+ .. controls ( 109.7259, 344.6771) and ( 112.8526, 350.4304) .. ( 116.3846, 358.3051)
+ .. controls ( 118.7699, 363.6198) and ( 119.2179, 369.6384) .. ( 123.0793, 370.9158)
+ .. controls ( 127.8886, 372.5064) and ( 130.1953, 369.1278) .. ( 133.1219, 368.5824)
+ .. controls ( 135.5793, 368.1238) and ( 138.9126, 368.5411) .. ( 141.1859, 367.0531)
+ .. controls ( 142.7313, 366.0424) and ( 143.9406, 364.2491) .. ( 143.8539, 359.5798)
+ .. controls ( 143.7619, 354.6171) and ( 140.4339, 350.6678) .. ( 135.3299, 347.6384)
+ .. controls ( 130.2259, 344.6078) and ( 118.2326, 338.8331) .. ( 116.7179, 335.0824)
+ .. controls ( 116.0993, 333.5478) and ( 116.4246, 327.4504) .. ( 116.6633, 321.7491)
+ .. controls ( 116.9166, 315.6878) and ( 117.1393, 310.0531) .. ( 118.4126, 310.0824)
+ .. controls ( 119.7179, 310.1118) and ( 125.0979, 319.0411) .. ( 132.7886, 324.8744)
+ .. controls ( 138.1726, 328.9584) and ( 144.7846, 331.7144) .. ( 149.1073, 333.7491)
+ .. controls ( 154.4179, 336.2491) and ( 162.3486, 337.0704) .. ( 165.7886, 335.2491)
+ .. controls ( 170.0379, 332.9984) and ( 172.9966, 329.8318) .. ( 173.1633, 325.9984)
+ .. controls ( 173.3073, 322.6678) and ( 172.0379, 320.2904) .. ( 169.2179, 317.7491)
+ .. controls ( 166.4606, 315.2624) and ( 162.6353, 314.1104) .. ( 158.7459, 313.8878)
+ .. controls ( 153.9646, 313.6144) and ( 146.7833, 313.1824) .. ( 147.5299, 311.6304)}
+% \end{macrocode}
+%
+% 思。
+% \begin{macrocode}
+\def\fdulogo@motto@si{%
+ ( 106.4909, 108.9952)
+ .. controls ( 107.9962, 108.6659) and ( 109.3935, 109.3206) .. ( 110.4135, 111.6659)
+ .. controls ( 112.0802, 115.4992) and ( 112.5802, 120.9992) .. ( 111.0802, 121.6659)
+ .. controls ( 109.6469, 122.3032) and ( 104.9882, 120.6512) .. ( 104.0335, 120.0046)
+ .. controls ( 102.3495, 118.8646) and ( 105.3402, 109.2472) .. ( 106.4909, 108.9952)
+ ( 93.5522, 38.3046)
+ .. controls ( 91.7415, 33.3352) and ( 87.6629, 27.7752) .. ( 79.8295, 27.8046)
+ .. controls ( 74.4975, 27.8246) and ( 71.4082, 31.6632) .. ( 69.1215, 36.4006)
+ .. controls ( 66.5802, 41.6659) and ( 68.3829, 53.3672) .. ( 71.5402, 59.7352)
+ .. controls ( 76.0375, 68.8059) and ( 85.3602, 77.4979) .. ( 85.1669, 78.8032)
+ .. controls ( 84.8389, 81.0152) and ( 79.3295, 82.3326) .. ( 78.1629, 86.7072)
+ .. controls ( 76.0482, 94.6379) and ( 89.8855, 94.0272) .. ( 90.0082, 96.9072)
+ .. controls ( 90.1735, 100.8032) and ( 80.5522, 107.1379) .. ( 80.2469, 118.9992)
+ .. controls ( 79.9882, 129.0339) and ( 82.7562, 143.8272) .. ( 85.7735, 144.2486)
+ .. controls ( 87.6522, 144.5112) and ( 98.2189, 128.5819) .. ( 101.2255, 129.5952)
+ .. controls ( 103.5962, 130.3926) and ( 107.6069, 133.2486) .. ( 109.1629, 135.3606)
+ .. controls ( 110.8709, 137.6766) and ( 111.0269, 140.4592) .. ( 111.6069, 143.5272)
+ .. controls ( 112.3855, 147.6379) and ( 119.1189, 149.5232) .. ( 121.9002, 148.9152)
+ .. controls ( 125.7189, 148.0819) and ( 128.2095, 143.2512) .. ( 129.7735, 141.6379)
+ .. controls ( 131.5522, 139.8046) and ( 134.9669, 139.0379) .. ( 134.9842, 134.5779)
+ .. controls ( 134.9962, 131.1939) and ( 132.6722, 130.1579) .. ( 131.7882, 128.1246)
+ .. controls ( 130.9549, 126.2072) and ( 130.8509, 124.2152) .. ( 130.1215, 122.5819)
+ .. controls ( 128.0109, 117.8606) and ( 125.4695, 112.7086) .. ( 126.9135, 112.6659)
+ .. controls ( 129.7469, 112.5819) and ( 135.2042, 125.0272) .. ( 142.3295, 136.9152)
+ .. controls ( 148.5202, 147.2419) and ( 151.9549, 152.0819) .. ( 151.9549, 155.2072)
+ .. controls ( 151.9549, 157.7846) and ( 139.5522, 156.8046) .. ( 128.6629, 155.9712)
+ .. controls ( 120.7255, 155.3632) and ( 105.3002, 154.6872) .. ( 105.0629, 155.5952)
+ .. controls ( 104.4135, 158.0819) and ( 107.7829, 163.0726) .. ( 118.4402, 166.2486)
+ .. controls ( 123.6562, 167.8032) and ( 143.0655, 168.3779) .. ( 152.5802, 165.9992)
+ .. controls ( 160.9135, 163.9152) and ( 172.2682, 150.5912) .. ( 174.7469, 146.4152)
+ .. controls ( 176.7362, 143.0632) and ( 175.1069, 138.3606) .. ( 171.2642, 131.9952)
+ .. controls ( 168.1949, 126.9126) and ( 160.0909, 118.7126) .. ( 153.9962, 111.6939)
+ .. controls ( 150.8429, 108.0619) and ( 148.5202, 103.6432) .. ( 146.0522, 100.8606)
+ .. controls ( 142.9962, 97.4152) and ( 132.1215, 94.8606) .. ( 124.5802, 92.9992)
+ .. controls ( 118.9535, 91.6099) and ( 106.7295, 87.8486) .. ( 103.4135, 86.3326)
+ .. controls ( 101.6589, 85.5299) and ( 98.9202, 81.1272) .. ( 98.9842, 76.9139)
+ .. controls ( 99.1069, 68.8606) and ( 98.6069, 63.0819) .. ( 97.6629, 55.8326)
+ .. controls ( 96.7949, 49.1686) and ( 96.0349, 45.1206) .. ( 93.5522, 38.3046)
+ ( 100.8943, 57.5823)
+ .. controls ( 101.5677, 59.7836) and ( 110.2263, 56.7423) .. ( 114.5730, 54.5050)
+ .. controls ( 123.1637, 50.0823) and ( 132.6637, 41.4156) .. ( 140.2050, 39.0410)
+ .. controls ( 143.0677, 38.1396) and ( 158.7183, 37.2903) .. ( 158.8303, 39.5823)
+ .. controls ( 158.9463, 41.9836) and ( 148.7383, 46.9516) .. ( 144.3303, 50.7490)
+ .. controls ( 140.1690, 54.3316) and ( 130.7463, 62.9983) .. ( 132.2410, 65.3970)
+ .. controls ( 133.5597, 67.5116) and ( 143.9570, 62.0716) .. ( 149.8303, 60.4996)
+ .. controls ( 154.4970, 59.2490) and ( 163.2917, 58.3716) .. ( 171.7463, 56.6663)
+ .. controls ( 181.7970, 54.6383) and ( 192.8903, 51.4690) .. ( 199.0063, 48.7596)
+ .. controls ( 206.7103, 45.3463) and ( 207.4023, 43.3490) .. ( 202.2863, 37.4090)
+ .. controls ( 197.5837, 31.9476) and ( 190.6103, 25.9023) .. ( 183.4130, 23.3330)
+ .. controls ( 169.4130, 18.3330) and ( 150.6903, 18.5463) .. ( 136.6970, 20.0476)
+ .. controls ( 120.8463, 21.7463) and ( 113.8303, 31.4156) .. ( 110.2463, 37.2490)
+ .. controls ( 107.7997, 41.2316) and ( 104.8357, 49.5503) .. ( 103.5797, 52.1663)
+ .. controls ( 102.3237, 54.7823) and ( 100.6757, 56.8663) .. ( 100.8943, 57.5823)
+ ( 128.0477, 74.2220)
+ .. controls ( 126.8437, 74.8447) and ( 132.9970, 84.3327) .. ( 142.8303, 90.1660)
+ .. controls ( 150.1850, 94.5287) and ( 161.8303, 99.3607) .. ( 170.5517, 99.3607)
+ .. controls ( 176.4970, 99.3607) and ( 181.4970, 96.7487) .. ( 184.5623, 93.8327)
+ .. controls ( 187.1877, 91.3354) and ( 188.5730, 88.1927) .. ( 188.2810, 83.2487)
+ .. controls ( 187.9970, 78.4154) and ( 183.9130, 75.5740) .. ( 178.0757, 75.4540)
+ .. controls ( 163.9970, 75.1660) and ( 146.8090, 79.2114) .. ( 141.8930, 79.0447)
+ .. controls ( 135.3770, 78.8234) and ( 130.4130, 72.9994) .. ( 128.0477, 74.2220)}
+%</logo>
+% \end{macrocode}
+%
+% \end{implementation}
+%
diff --git a/macros/latex/contrib/fduthesis/fduthesis.dtx b/macros/latex/contrib/fduthesis/fduthesis.dtx
new file mode 100644
index 0000000000..cd50a39ec6
--- /dev/null
+++ b/macros/latex/contrib/fduthesis/fduthesis.dtx
@@ -0,0 +1,6024 @@
+% \iffalse meta-comment
+% !TeX program = XeLaTeX
+% !TeX encoding = UTF-8
+%
+% Copyright (C) 2017--2019 by Xiangdong Zeng <xdzeng96@gmail.com>
+%
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either
+% version 1.3c of this license or (at your option) any later
+% version. The latest version of this license is in:
+%
+% http://www.latex-project.org/lppl.txt
+%
+% and version 1.3 or later is part of all distributions of
+% LaTeX version 2005/12/01 or later.
+%
+% This work has the LPPL maintenance status `maintained'.
+%
+% The Current Maintainer of this work is Xiangdong Zeng.
+%
+% This work consists of the files fduthesis.dtx,
+% fduthesis-doc.dtx,
+% fduthesis-logo.dtx,
+% 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,
+% fudan-emblem.pdf,
+% fudan-emblem-new.pdf,
+% fudan-name.pdf,
+% fduthesis.pdf,
+% fduthesis-en.pdf,
+% fduthesis-code.pdf,
+% and README.md.
+%
+%<*internal>
+\iffalse
+%</internal>
+%
+%<*readme>
+The `fduthesis` Class
+=====================
+
+*LaTeX thesis template for Fudan University, v0.7d*
+
+Overview
+--------
+
+This template supports doctoral or master dissertion and undergraduate
+thesis, both in Chinese or English. With the help of modern LaTeX
+technology, `fduthesis` aims to create a simple interface, a normative
+format, as well as a hackable class for the users.
+
+At present, `fduthesis` only supports XeTeX and LuaTeX engines.
+Support for pdfTeX and [ApTeX](https://github.com/clerkma/ptex-ng) is
+still under development. `fduthesis` only allows UTF-8 encoding.
+
+The documentation can be found in
+[fduthesis.pdf](http://mirrors.ctan.org/macros/latex/contrib/fduthesis/fduthesis.pdf)
+(in Chinese) or
+[fduthesis-en.pdf](http://mirrors.ctan.org/macros/latex/contrib/fduthesis/fduthesis-en.pdf)
+(in English).
+
+GitHub re­pos­i­tory: <https://github.com/stone-zeng/fduthesis>.
+
+Installation
+------------
+
+To install `fduthesis`, you can use one of the following methods:
+
+- If you are running TeX Live, the simplest way is to run
+
+ tlmgr install fduthesis
+
+- Download
+ [fduthesis.tds.zip](http://mirror.ctan.org/install/macros/latex/contrib/fduthesis.tds.zip)
+ from CTAN, extract it in the root of one of your TDS trees, and
+ update the filename database.
+
+- Get the source from GitHub:
+
+ git clone https://github.com/stone-zeng/fduthesis.git
+
+ Run `install-win.bat` (on Windows) or `install-linux.sh` (on Linux)
+ to generate the templates and configuration files. These files would
+ be found in a new-created `thesis` folder. You can enjoy `fduthesis`
+ here at once.
+
+ For permanent installation, you may move the following files into a
+ directory where LaTeX will find them (e.g.
+ `TEXMF/tex/latex/fduthesis/`):
+
+ - `fduthesis.cls`
+ - `fduthesis-en.cls`
+ - `fduthesis.def`
+ - `fdudoc.cls`
+ - `fdulogo.sty`
+ - `fudan-emblem.pdf`
+ - `fudan-emblem-new.pdf`
+ - `fudan-name.pdf`
+
+ Do not forget to update the filename database afterwards.
+
+Contributing
+------------
+
+[Issues](https://github.com/stone-zeng/fduthesis/issues) and
+[pull requests](https://github.com/stone-zeng/fduthesis/pulls)
+are always welcome.
+
+License
+-------
+
+This work may be distributed and/or modified under the conditions of
+the [LaTeX Project Public License](http://www.latex-project.org/lppl.txt),
+either version 1.3c of this license or (at your option) any later
+version.
+
+-----
+
+Copyright (C) 2017&ndash;2019 by Xiangdong Zeng <xdzeng96@gmail.com>.
+%</readme>
+%
+%<*internal>
+\fi
+\begingroup
+ \def\NameOfLaTeXe{LaTeX2e}
+\expandafter\endgroup\ifx\NameOfLaTeXe\fmtname\else
+\csname fi\endcsname
+%</internal>
+%
+%<*install>
+\input l3docstrip.tex
+\keepsilent
+\askforoverwritefalse
+
+\preamble
+
+ Copyright (C) 2017--2019 by Xiangdong Zeng <xdzeng96@gmail.com>
+
+ This work may be distributed and/or modified under the
+ conditions of the LaTeX Project Public License, either
+ version 1.3c of this license or (at your option) any later
+ version. The latest version of this license is in:
+
+ http://www.latex-project.org/lppl.txt
+
+ and version 1.3 or later is part of all distributions of
+ LaTeX version 2005/12/01 or later.
+
+ This work has the LPPL maintenance status `maintained'.
+
+ The Current Maintainer of this work is Xiangdong Zeng.
+
+ This work consists of the files fduthesis.dtx,
+ fduthesis-doc.dtx,
+ fduthesis-logo.dtx,
+ 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,
+ fudan-emblem.pdf,
+ fudan-emblem-new.pdf,
+ fudan-name.pdf,
+ fduthesis.pdf,
+ fduthesis-en.pdf,
+ fduthesis-code.pdf,
+ and README.md.
+
+\endpreamble
+
+\generate{
+ \usedir{tex/latex/fduthesis}
+ \file{\jobname.cls} {\from{\jobname.dtx}{class}}
+ \file{\jobname-en.cls} {\from{\jobname.dtx}{class-en}}
+ \file{\jobname.def} {\from{\jobname.dtx}{definition}}
+ \file{fdudoc.cls} {\from{\jobname.dtx}{doc}
+ \from{\jobname-doc.dtx}{doc}}
+ \file{fdulogo.sty} {\from{\jobname.dtx}{logo}
+ \from{\jobname-logo.dtx}{logo}}
+ \file{fdulogo-example.tex} {\from{\jobname.dtx}{ex-logo}
+ \from{\jobname-logo.dtx}{ex-logo}}
+ \file{\jobname-cover.tex} {\from{\jobname.dtx}{cover}
+ \from{\jobname-logo.dtx}{cover}}
+%</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}}
+}
+
+\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.7d 2019-04-03 12:00:00Z Xiangdong Zeng <xdzeng96@gmail.com> $
+%<class> {Thesis template for Fudan University}
+%<class>\ProvidesExplClass{\ExplFileName}
+%<class-en> {Thesis template for Fudan University (English version)}
+%<class-en>\ProvidesExplClass{\ExplFileName-en}
+%<definition> {Definition file for fduthesis}
+%<definition>\ProvidesExplFile{\ExplFileName.def}
+%<doc> {Documentation class for fduthesis}
+%<doc>\ProvidesExplClass{fdudoc}
+%<logo> {Fudan University's Visual Identity}
+%<logo>\ProvidesExplPackage{fdulogo}
+%<!readme> {\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription}
+%</!(driver|install|ex-logo|cover)>
+%<*driver>
+% \PassOptionsToPackage{showframe}{geometry}
+\documentclass{fdudoc}
+\usepackage{multirow,xpinyin}
+\hypersetup{
+ pdftitle = {fduthesis: 复旦大学论文模板},
+ pdfauthor = {曾祥东}}
+% 全角标点放在引号中,需要改成半角式,否则间距过大,不好看
+\def\FSID{“{\xeCJKsetup{PunctStyle=banjiao}。}”} % U+3002
+\def\FSFW{“{\xeCJKsetup{PunctStyle=banjiao}.}”} % U+FF0E
+\def\COFW{“{\xeCJKsetup{PunctStyle=banjiao}:}”} % U+FF1A
+\def\SCFW{“{\xeCJKsetup{PunctStyle=banjiao};}”} % U+FF1B
+% Libertinus Math 字体不包含 `\QED`,暂时使用 `\blacksquare` 代替
+\AtBeginDocument{\def\QED{\blacksquare}}
+%^^A! \PassOptionsToPackage{scheme=plain, linespread=1.1}{ctex}
+%^^A! \documentclass{fdudoc}
+%^^A! \hypersetup{
+%^^A! pdftitle = {fduthesis: LaTeX Thesis Template for Fudan University},
+%^^A! pdfauthor = {Xiangdong Zeng}}
+%^^A! \ctexset{
+%^^A! section = {name = {}, format+ = \raggedright},
+%^^A! subsubsection/tocline = {\CTEXnumberline{#1}#2}}
+%^^A! \pagestyle{headings}
+%^^A! \def\FSID{{\xeCJKsetup{PunctStyle=banjiao}。}}
+%^^A! \def\FSFW{{\xeCJKsetup{PunctStyle=banjiao}.}}
+%^^A! \AtBeginDocument{\def\QED{\blacksquare}}
+%^^A!
+
+\title{\textcolor{MaterialIndigo800}{%
+ \textbf{fduthesis: 复旦大学论文\xpinyin[font=\sffamily]{模}{mu2}板}}}
+\author{曾祥东}
+\date{2019/04/03\quad v0.7d%
+ \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{2019/04/03\quad v0.7d%
+%^^A! \thanks{\url{https://github.com/stone-zeng/fduthesis}.}}
+%^^A!
+
+\begin{document}
+%^^A! \begin{document}
+%^^A!
+ \DisableImplementation
+%<!--CODEDOC--> \EnableImplementation
+%<!--CODEDOC--> \def\FDUCODEDOC{}
+ \DocInput{fduthesis.dtx}
+%<!--CODEDOC--> \DocInput{fduthesis-doc.dtx,fduthesis-logo.dtx}
+%<!--CODEDOC--> \IndexLayout
+%<!--CODEDOC--> \PrintChanges
+%<!--CODEDOC--> \PrintIndex
+\end{document}
+%</driver>
+% \fi
+%
+% \changes{v0.1}{2017/02/15}{开始编写模板。}
+% \changes{v0.2}{2017/02/19}{使用 Git 进行版本控制,并发布至 GitHub。}
+% \changes{v0.3}{2017/02/21}{使用 \cls{doc} 和 \pkg{DocStrip}。}
+% \changes{v0.3}{2017/03/04}{支持 \LuaLaTeX{}。}
+% \changes{v0.3}{2017/03/20}{添加测试文件。}
+% \changes{v0.3}{2017/05/26}{使用 Travis CI 进行持续集成。}
+% \changes{v0.3}{2017/06/23}{添加复旦大学视觉识别系统。}
+% \changes{v0.3}{2017/07/05}{新增声明页。}
+% \changes{v0.3}{2017/07/10}{添加英文模板。}
+% \changes{v0.3}{2017/07/19}{使用 \pkg{l3docstrip} 管理名字空间。}
+% \changes{v0.3}{2017/07/28}{整理代码,编写用户文档。}
+% \changes{v0.4}{2017/08/03}{拆分 \file{.dtx} 文件。}
+% \changes{v0.4}{2017/08/11}{添加错误信息提示。}
+% \changes{v0.6}{2017/11/23}{同步 \pkg{ctex} v2.4.11。}
+% \changes{v0.6}{2017/11/29}{添加英文版用户文档。}
+% \changes{v0.7}{2018/01/26}{使用 \pkg{l3build} 进行回归测试。}
+% \changes{v0.7}{2018/01/31}{不再需要 \file{fduthesis-user.def}。}
+% \changes{v0.7}{2018/03/04}{所有选项更改为用连字符隔开的形式。}
+% \changes{v0.7a}{2018/04/09}{更新文档,发布至 CTAN。}
+% \changes{v0.7b}{2018/04/29}{支持 \TeXLive{} 2018。}
+% \changes{v0.7b}{2018/05/06}{将校名、校徽图片添加至发行版。}
+%
+% \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 禁止使用 " 符号作为抄录文本缩略符
+% \DeleteShortVerb\"
+%^^A! \DeleteShortVerb\"
+%^^A!
+%
+%^^A 封面与目录的页边距
+%^^A+
+% \newgeometry{
+% left = 1.25 in,
+% right = 1.25 in,
+% top = 1.25 in,
+% bottom = 1.00 in
+% }
+%
+% \maketitle
+% \vfill
+% \begin{center}
+% \includegraphics[width=8cm]{../logo/fduthesis-cover.pdf}
+% \end{center}
+% \vfill
+% \thispagestyle{plain}
+% \clearpage
+%
+% \tableofcontents
+%
+%^^A-
+%
+% \EnableDocumentation
+%^^A \DisableDocumentation
+%
+% \begin{documentation}
+%
+%^^A 用户手册的页边距
+%^^A+
+% \newgeometry{
+% left = 1.65 in,
+% right = 0.80 in,
+% top = 1.25 in,
+% bottom = 1.00 in
+% }
+%
+%^^A-
+%
+% \section{介绍}
+%^^A! \section{Introduction}
+%^^A!
+%
+% 目前,在网上可以找到的复旦大学 \LaTeX{} 论文模板主要有以下这些:
+% \begin{itemize}
+% \item 数学科学学院 2001 级的何力同学和李湛同学在 2005 年根据
+% 学校要求所设计的 \cls{毕业论文格式 tex04 版},以及 2008 年
+% 张越同学修改之后的 \cls{毕业论文格式 tex08 版},这是专为
+% 数院本科生撰写毕业论文而设计的
+% \scite{数院毕业论文格式,数院毕业论文格式更新};
+% \item Pandoxie 编写的 \cls{FDU-Thesis-Latex}
+% \scite{pandoxie2014fduthesislatex},基本满足了博士(硕士)
+% 毕业论文格式要求,使用人数较多;
+% \item richarddzh 编写的硕士论文模板 \cls{fudan-thesis}
+% \scite{richard2016fudanthesis}。
+% \end{itemize}
+% 以上这些模板大都没有经过系统的设计,也鲜有后续维护。相比之下,
+% 清华大学 \scite{thuthesis}、重庆大学 \scite{cquthesis}、
+% 中国科学技术大学 \scite{ustcthesis} 中国科学院大学 \scite{ucasthesis}
+% 以及友校上海交通大学 \scite{sjtuthesis}等,都有成熟、
+% 稳定的解决方案,值得参考。
+%
+% 本模板将借鉴前辈经验,重新设计,并使用 \LaTeX3
+% \scite{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!
+%
+% 如果您需要从 CTAN 上自行下载并手动安装,较好的方法是使用 TDS
+% 安装包:
+% \begin{itemize}
+% \item 从 CTAN 上下载 \cls{fduthesis} 的
+% \href{http://mirror.ctan.org/install/macros/latex/contrib/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 CTAN and install it
+%^^A! manually, the recommended way is to use the TDS ZIP file:
+%^^A! \begin{itemize}
+%^^A! \item Download the \href{http://mirror.ctan.org/install/macros/latex/contrib/fduthesis.tds.zip}%
+%^^A! {TDS ZIP file} for \cls{fduthesis};
+%^^A! \item Copy all the files in \file{fduthesis.tds.zip} into the
+%^^A! local TDS directory of \TeX{} distribution.
+%^^A! \item Run \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} 刷新文件名数据库,方可完成安装。
+% \item 使用 \cls{fduthesis} 撰写论文时,您还需要从代码仓库下的
+% \file{testfiles/support} 目录中复制 \file{fudan-name.pdf}
+% 文件至工作目录,以确保封面中的校名图片可以正确显示。
+% \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! \item When writing your thesis with \cls{fduthesis}, you need
+%^^A! to copy the file \file{fudan-name.pdf} (can be found in the
+%^^A! \file{testfiles/support} directory of the Git repository) to
+%^^A! your working directory, to make sure that the logo in the
+%^^A! cover can be displayed correctly.
+%^^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{20em}}
+% \toprule
+% \textbf{文件} & \textbf{功能说明} \\
+% \midrule
+% \file{fduthesis.cls} & 中文模板文档类 \\
+% \file{fduthesis-en.cls} & 英文模板文档类 \\
+% \file{fduthesis.def} & 参数配置文件,用于设定
+% \cls{fduthesis} 的初始参数,不建议您自行改动 \\
+% \file{fdudoc.cls} & 用户手册文档类 \\
+% \file{fdulogo.sty} & 复旦大学视觉识别系统 \\
+% \file{fudan-emblem.pdf} & 校徽 \\
+% \file{fudan-emblem-new.pdf} & 校徽(重修版) \\
+% \file{fudan-name.pdf} & 校名图片 \\
+% \file{README.md} & 简要自述 \\
+% \ifdefined\FDUCODEDOC
+% \file{fduthesis.pdf} & 中文用户手册 \\
+% \file{fduthesis-en.pdf} & 英文用户手册 \\
+% \file{fduthesis-code.pdf} & 模板实现代码(本文档) \\
+% \else
+% \file{fduthesis.pdf} & 中文用户手册(本文档) \\
+% \file{fduthesis-en.pdf} & 英文用户手册 \\
+% \file{fduthesis-code.pdf} & 模板实现代码 \\
+% \fi
+% \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{fudan-emblem.pdf} & University emblem. \\
+%^^A! \file{fudan-emblem-new.pdf} & University emblem (revised version). \\
+%^^A! \file{fudan-name.pdf} & Figure of university name. \\
+%^^A! \file{README.md} & The brief introduction. \\
+%^^A! \file{fduthesis.pdf} & User's guide in Chinese. \\
+%^^A! \file{fduthesis-en.pdf} & User's guide in English (this
+%^^A! document). \\
+%^^A! \file{fduthesis-code.pdf} & Code implementation. \\
+%^^A! \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!
+%
+% \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!
+%
+% \subsection{模板选项}
+%^^A! \subsection{Options of the template}
+%^^A!
+%
+% 所谓“模板选项”,指需要在引入文档类的时候指定的选项:
+% \begin{latexexample}[deletetexcs={\documentclass},%
+% morekeywords={\documentclass}]
+% \documentclass(*\oarg{模板选项}*){fduthesis}
+% \documentclass(*\oarg{模板选项}*){fduthesis-en}
+% \end{latexexample}
+%^^A! You can specify some \emph{template options} when loading
+%^^A! \cls{fduthesis}:
+%^^A! \begin{latexexample}[deletetexcs={\documentclass},%
+%^^A! morekeywords={\documentclass}]
+%^^A! \documentclass(*\oarg{options}*){fduthesis}
+%^^A! \documentclass(*\oarg{options}*){fduthesis-en}
+%^^A! \end{latexexample}
+%^^A!
+%
+% 有些模板选项为布尔型,它们只能在 \opt{true} 和 \opt{false}
+% 中取值。对于这些选项,\kvopt{\meta{选项}}{true} 中的“|= true|”
+% 可以省略。
+%^^A! Some options are \emph{boolean} --- they only take the value
+%^^A! \opt{true} or \opt{false}. For these options, you can
+%^^A! abbreviate ``\kvopt{\meta{option}}{true}'' simply to
+%^^A! ``\opt{\meta{option}}''.
+%^^A!
+%
+%^^A+
+% \begin{function}[added=2018-02-01]{type}
+% \begin{fdusyntax}[emph={[1]type}]
+% type = (*<doctor|master|(bachelor)>*)
+% \end{fdusyntax}
+%^^A-
+% 选择论文类型。三种选项分别代表博士学位论文、硕士学位论文和本科
+% 毕业论文。
+% \end{function}
+%^^A! Choose the type of your thesis. The three options represent
+%^^A! doctoral dissertation, master degree thesis and undergraduate
+%^^A! thesis, respectively.
+%^^A! \end{function}
+%^^A!
+%
+% \begin{function}{oneside,twoside}
+% 指明论文的单双面模式,默认为 \opt{twoside}。该选项会影响每章
+% 的开始位置,还会影响页眉样式。
+% \end{function}
+%^^A! \begin{function}{oneside,twoside}
+%^^A! Specify whether single or double sided output should be
+%^^A! generated. \opt{twoside} will be chosen by default. These
+%^^A! option will determine where the new chapters begin and how
+%^^A! the headers display. The option \opt{twoside} does
+%^^A! \emph{not} tell the printer to actually make a two-sided
+%^^A! printout.
+%^^A! \end{function}
+%^^A!
+%
+% 在双面模式(\opt{twoside})下,按照通常的排版惯例,每章应只从
+% 奇数页(在右)开始;而在单页模式(\opt{oneside})下,则可以从
+% 任意页面开始。本模板中,目录、摘要、符号表等均视作章,也按相同
+% 方式排版。
+%^^A! If choosing \opt{twoside}, chapters will begin at the odd pages
+%^^A! (right hand). However, they will begin at arbitrary pages
+%^^A! available when choosing \opt{oneside}. Table of contents,
+%^^A! abstract and the list of symbols are considered as chapters and
+%^^A! processed in the same way.
+%^^A!
+%
+% 双面模式下,正文部分偶数页(在左)的左页眉显示章标题,奇数页
+% (在右)的右页眉显示节标题;前置部分的页眉按同样格式显示,但文字
+% 均为对应标题(如“目录”、“摘要”等)。
+% 而在单面模式下,正文部分则页面不分奇偶,均同时显示左、右页眉,
+% 文字分别为章标题和节标题;前置部分只有中间页眉,显示对应标题。
+%^^A! At two-sided mode, left headers on the even pages (left hand)
+%^^A! in \emph{main body} will show the title of chapters, while the
+%^^A! right headers on the odd pages (right hand) will show the
+%^^A! title of sections. Headers in \emph{front matter} have the
+%^^A! same style, but they will only show the title as ``Contents'',
+%^^A! ``Abstract'', etc.
+%^^A!
+%^^A! At one-sided mode, both left and right headers on \emph{all}
+%^^A! pages in main body will be shown. The text is the title of
+%^^A! chapters and sections, respectively. In front matter, there
+%^^A! are only middle headers, which show the corresponding titles.
+%^^A!
+%
+% \begin{function}{draft}
+% \begin{fdusyntax}[emph={[1]draft}]
+% draft = (*<\TFF>*)
+% \end{fdusyntax}
+% 选择是否开启草稿模式,默认关闭。
+% \end{function}
+%^^A! \begin{function}{draft}
+%^^A! \begin{fdusyntax}[emph={[1]draft}]
+%^^A! draft = (*<\TFF>*)
+%^^A! \end{fdusyntax}
+%^^A! Enable draft mode. Default off.
+%^^A! \end{function}
+%^^A!
+%
+% 草稿模式为全局选项,会影响到很多宏包的工作方式。
+% 开启之后,主要的变化有:
+% \begin{itemize}
+% \item 把行溢出的盒子显示为黑色方块;
+% \item 不实际插入图片,只输出一个占位方框;
+% \item 关闭超链接渲染,也不再生成 PDF 书签;
+% \item 显示页面边框。
+% \end{itemize}
+%^^A! \opt{draft} is a global option and will affect many packages.
+%^^A! You may notice the following changes when using \opt{draft}:
+%^^A! \begin{itemize}
+%^^A! \item Lines with overfull \tn{hbox}'s will be marked with
+%^^A! a thick black square on the right margin.
+%^^A! \item Will not include graphics files actually, but instead
+%^^A! print a box of the size the graphic would take up, as well
+%^^A! as the file name.
+%^^A! \item Will not make hyperlinks and PDF bookmarks.
+%^^A! \item Show the page frames.
+%^^A! \end{itemize}
+%^^A!
+%
+% \begin{function}[added=2018-01-31]{config}
+% \begin{fdusyntax}[emph={[1]config}]
+% config = (*\marg{文件}*)
+% \end{fdusyntax}
+% 用户配置文件的文件名。默认为空,即不载入用户配置文件。
+% \end{function}
+%^^A! \begin{function}[added=2018-01-31]{config}
+%^^A! \begin{fdusyntax}[emph={[1]config}]
+%^^A! config = (*\marg{file}*)
+%^^A! \end{fdusyntax}
+%^^A! File name of user profile. Default value is empty, so no
+%^^A! profile is loaded automatically.
+%^^A! \end{function}
+%^^A!
+%
+% \subsection{参数设置}
+%^^A! \subsection{More options}
+%^^A!
+%
+% \begin{function}{\fdusetup}
+% \begin{fdusyntax}[morekeywords={\fdusetup}]
+% \fdusetup(*\marg{键值列表}*)
+% \end{fdusyntax}
+% 本模板提供了一系列选项,可由您自行配置。载入文档类之后,以下
+% 所有选项均可通过统一的命令 \cs{fdusetup} 来设置。
+% \end{function}
+%^^A! \begin{function}{\fdusetup}
+%^^A! \begin{fdusyntax}[morekeywords={\fdusetup}]
+%^^A! \fdusetup(*\marg{key-value list}*)
+%^^A! \end{fdusyntax}
+%^^A! \cls{fduthesis} has provided a number of options, which
+%^^A! can be given via the general command \cs{fdusetup}.
+%^^A! \end{function}
+%^^A!
+%
+% \cs{fdusetup} 的参数是一组由(英文)逗号隔开的选项列表,列表中的
+% 选项通常是 \kvopt{\meta{key}}{\meta{value}} 的形式。部分选项的
+% \meta{value} 可以省略。对于同一项,后面的设置将会覆盖前面的设置。
+% 在下文的说明中,将用\textbf{粗体}表示默认值。
+%^^A! The argument of \cs{fdusetup} is a set of comma-separated option
+%^^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 the Electrodynamics of Moving Bodies},
+% author = {阿尔伯特·爱因斯坦},
+% author* = {Albert Einstein},
+% department = {物理学系}
+% }
+% }
+% \end{latexexample}
+%^^A-
+% 或者
+%^^A! or
+%^^A+
+% \begin{latexexample}[morekeywords={\fdusetup},%
+% emph={[1]style,cjk-font,font-size,info,title,title*,author,author*,department}]
+% \fdusetup{
+% style/cjk-font = adobe,
+% style/font-size = -4,
+% info/title = {论动体的电动力学},
+% info/title* = {On the Electrodynamics of Moving Bodies},
+% info/author = {阿尔伯特·爱因斯坦},
+% info/author* = {Albert Einstein},
+% info/department = {物理学系}
+% }
+% \end{latexexample}
+%^^A-
+%^^A!
+%
+% 注意 “|/|” 的前后均不可以出现空白字符。
+%^^A! Note that you may \emph{not} put spaces around ``|/|''.
+%^^A!
+%
+% \subsubsection{论文格式} \label{subsubsec:论文格式}
+%^^A! \subsubsection{Style and format} \label{subsubsec:style-and-format}
+%^^A!
+%
+% \begin{function}{style}
+% \begin{fdusyntax}[emph={[1]style}]
+% style = (*\marg{键值列表}*)
+% style/(*\meta{key}*) = (*\meta{value}*)
+% \end{fdusyntax}
+% 该选项包含许多子项目,用于设置论文格式。具体内容见下。
+% \end{function}
+%^^A! \begin{function}{style}
+%^^A! \begin{fdusyntax}[emph={[1]style}]
+%^^A! style = (*\marg{key-value list}*)
+%^^A! style/(*\meta{key}*) = (*\meta{value}*)
+%^^A! \end{fdusyntax}
+%^^A! This general option is for setting the thesis style and format.
+%^^A! See the following details.
+%^^A! \end{function}
+%^^A!
+%
+%^^A+
+% \begin{function}[updated=2019-03-05]{style/font}
+% \begin{fdusyntax}[emph={[1]font}]
+% font = (*<garamond|libertinus|lm|palatino|(times)|times*|none>*)
+% \end{fdusyntax}
+%^^A-
+% 设置西文字体(包括数学字体)。具体配置见表~\ref{tab:font}。
+% \end{function}
+%^^A! Set fonts (including math fonts). The details can be found in table~\ref{tab:font}.
+%^^A! \end{function}
+%^^A!
+%
+% \begin{table}[ht]
+% \begin{threeparttable}
+% \caption{西文字体配置}
+% \label{tab:font}
+% \centering
+% \begin{tabular}{ccccc}
+% \toprule
+% & \strong{正文字体} & \strong{无衬线字体} & \strong{等宽字体} & \strong{数学字体} \\
+% \midrule
+% |garamond| & EB Garamond & Libertinus Sans & LM Mono\tnote{a} & Garamond Math \\
+% |libertinus| & Libertinus Serif & Libertinus Sans & LM Mono & Libertinus Math \\
+% |lm| & LM Roman & LM Sans & LM Mono & LM Math \\
+% |palatino| & TG Pagella\tnote{b} & Libertinus Sans & LM Mono & TG Pagella Math \\
+% |times| & XITS & TG Heros & TG Cursor & XITS Math \\
+% |times*|\tnote{c} & Times New Roman & Arial & Courier New & XITS Math \\
+% \bottomrule
+% \end{tabular}
+% \begin{tablenotes}
+% \item[a] “LM”是 Latin Modern 的缩写。
+% \item[b] “TG”是 TeX Gyre 的缩写。
+% \item[c] 本行中,Times New Roman、Arial 和 Courier New 是商业字体,
+% 在 Windows 和 macOS 系统上均默认安装。
+% \end{tablenotes}
+% \end{threeparttable}
+% \end{table}
+%^^A! \begin{table}[ht]
+%^^A! \begin{threeparttable}
+%^^A! \caption{Font configuration}
+%^^A! \label{tab:font}
+%^^A! \centering
+%^^A! \begin{tabular}{ccccc}
+%^^A! \toprule
+%^^A! & \strong{Roman} & \strong{Sans-serif} & \strong{Monospaced} & \strong{Math} \\
+%^^A! \midrule
+%^^A! |garamond| & EB Garamond & Libertinus Sans & LM Mono\tnote{a} & Garamond Math \\
+%^^A! |libertinus| & Libertinus Serif & Libertinus Sans & LM Mono & Libertinus Math \\
+%^^A! |lm| & LM Roman & LM Sans & LM Mono & LM Math \\
+%^^A! |palatino| & TG Pagella\tnote{b} & Libertinus Sans & LM Mono & TG Pagella Math \\
+%^^A! |times| & XITS & TG Heros & TG Cursor & XITS Math \\
+%^^A! |times*|\tnote{c} & Times New Roman & Arial & Courier New & XITS Math \\
+%^^A! \bottomrule
+%^^A! \end{tabular}
+%^^A! \begin{tablenotes}
+%^^A! \item[a] ``LM'' is the abbreviation of Latin Modern.
+%^^A! \item[b] ``TG'' is the abbreviation of TeX Gyre.
+%^^A! \item[c] Here, Times New Roman, Arial and Courier New are commercial fonts. They are
+%^^A! installed on Windows and macOS by default.
+%^^A! \end{tablenotes}
+%^^A! \end{threeparttable}
+%^^A! \end{table}
+%
+%^^A+
+% \begin{function}[rEXP,updated=2019-03-05]{style/cjk-font}
+% \begin{fdusyntax}[emph={[1]cjk-font}]
+% cjk-font = (*<adobe|(fandol)|founder|mac|sinotype|sourcehan|windows|none>*)
+% \end{fdusyntax}
+%^^A-
+% 设置中文字体。具体配置见表~\ref{tab:cjk-font}。
+% \end{function}
+%^^A! Set CJK (Chinese, Japanese and Korean) fonts. The details can be found in
+%^^A! table~\ref{tab:cjk-font}.
+%^^A! \end{function}
+%^^A!
+%
+% \begin{table}[ht]
+% \caption{中文字体配置}
+% \label{tab:cjk-font}
+% \centering
+% \begin{tabular}{cccc}
+% \toprule
+% & \strong{正文字体(宋体)} & \strong{无衬线字体(黑体)} & \strong{等宽字体(仿宋)} \\
+% \midrule
+% \multirow{2}*{|adobe|} & Adobe 宋体 & Adobe 黑体 & Adobe 仿宋 \\
+% & Adobe Song Std & Adobe Heiti Std & Adobe Fangsong Std \\
+% \multirow{2}*{|fandol|} & Fandol 宋体 & Fandol 黑体 & Fandol 仿宋 \\
+% & FandolSong & FandolHei & FandolFang \\
+% \multirow{2}*{|founder|} & 方正书宋 & 方正黑体 & 方正仿宋 \\
+% & FZShuSong-Z01 & FZHei-B01 & FZFangSong-Z02 \\
+% \multirow{2}*{|mac|} & (华文)宋体-简 & (华文)黑体-简 & 华文仿宋 \\
+% & Songti SC & Heiti SC & STFangsong \\
+% \multirow{2}*{|sinotype|} & 华文宋体 & 华文黑体 & 华文仿宋 \\
+% & STSong & STHeiti & STFangsong \\
+% \multirow{2}*{|sourcehan|} & 思源宋体 & 思源黑体 & --- \\
+% & Source Han Serif SC & Source Han Sans SC & --- \\
+% \multirow{2}*{|windows|} & (中易)宋体 & (中易)黑体 & (中易)仿宋 \\
+% & SimSun & SimHei & FangSong \\
+% \bottomrule
+% \end{tabular}
+% \end{table}
+%^^A! \begin{table}[ht]
+%^^A! \caption{CJK font configuration}
+%^^A! \label{tab:cjk-font}
+%^^A! \centering
+%^^A! \begin{tabular}{cccc}
+%^^A! \toprule
+%^^A! & \strong{Roman (song)} & \strong{Sans-serif (hei)} & \strong{Monospaced (fang)} \\
+%^^A! \midrule
+%^^A! |adobe| & Adobe Song Std & Adobe Heiti Std & Adobe Fangsong Std \\
+%^^A! |fandol| & FandolSong & FandolHei & FandolFang \\
+%^^A! |founder| & FZShuSong-Z01 & FZHei-B01 & FZFangSong-Z02 \\
+%^^A! |mac| & Songti SC & Heiti SC & STFangsong \\
+%^^A! |sinotype| & STSong & STHeiti & STFangsong \\
+%^^A! |sourcehan| & Source Han Serif SC & Source Han Sans SC & --- \\
+%^^A! |windows| & SimSun & SimHei & FangSong \\
+%^^A! \bottomrule
+%^^A! \end{tabular}
+%^^A! \end{table}
+%^^A!
+%
+% 启用 \kvopt{font}{none} 或 \kvopt{cjk-font}{none} 之后,模板将关闭
+% 默认西文 / 中文字体设置。此时,您需要自行使用 \cs{setmainfont}、
+% \cs{setCJKmainfont}、\cs{setmathfont} 等命令来配置字体。
+%^^A! When you choose \kvopt{font}{none} or \kvopt{cjk-font}{none},
+%^^A! \cls{fduthesis} will disable the default western/CJK font
+%^^A! settings. You may use \cs{setmainfont}, \cs{setCJKmainfont}
+%^^A! and \cs{set\-math\-font}, etc.\ to configure the fonts manually.
+%^^A!
+%
+%^^A+
+% \begin{function}{style/font-size}
+% \begin{fdusyntax}[emph={[1]font-size}]
+% font-size = (*<(-4)|5>*)
+% \end{fdusyntax}
+%^^A-
+% 设置论文的基础字号。
+% \end{function}
+%^^A! Specify the basic font size in your thesis.
+%^^A! \end{function}
+%^^A!
+%
+%^^A+
+% \begin{function}[rEXP,updated=2017-10-14]{style/fullwidth-stop}
+% \begin{fdusyntax}[emph={[1]fullwidth-stop}]
+% fullwidth-stop = (*<catcode|mapping|(false)>*)
+% \end{fdusyntax}
+%^^A-
+% 选择是否把全角实心句点\FSFW 作为默认的句号形状。
+% 这种句号一般用于科技类文章,以避免与下标“$_o$”或“$_0$”混淆。
+% \end{function}
+%^^A! Let full-width full stop ``\FSFW'' as the default full stop.
+%^^A! Generally, this punctuation is used for scientific articles,
+%^^A! where ``\FSID'' is easily to be confused with subscript
+%^^A! ``$_o$'' or ``$_0$''.
+%^^A! \end{function}
+%^^A!
+%
+% 选择 \kvopt{fullwidth-stop}{catcode} 或 \opt{mapping} 后,都会实现
+% 上述效果。有所不同的是,在选择 \opt{catcode} 后,只有^^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\symbol{"28}s\symbol{"29}}*)
+%^^A! \end{fdusyntax}
+%^^A! Specify the bibliography database (usually in \file{.bib}
+%^^A! format). If using more than one files, the file names should
+%^^A! be separated with comma. When \kvopt{bib-backend}{biblatex},
+%^^A! you must type in the ``\file{.bib}'' suffix.
+%^^A! \end{function}
+%^^A!
+%
+% \begin{function}[added=2017-08-10]{style/logo}
+% \begin{fdusyntax}[emph={[1]logo}]
+% logo = (*\marg{文件}*)
+% \end{fdusyntax}
+% 封面中校名图片的文件名。默认值为 \file{fudan-name.pdf}。
+% \end{function}
+%^^A! \begin{function}[added=2017-08-10]{style/logo}
+%^^A! \begin{fdusyntax}[emph={[1]logo}]
+%^^A! logo = (*\marg{file}*)
+%^^A! \end{fdusyntax}
+%^^A! File name of the logo in thesis cover. Default value is
+%^^A! \file{fudan-name.pdf}.
+%^^A! \end{function}
+%^^A!
+%
+% \begin{function}[added=2017-08-10]{style/logo-size}
+% \begin{fdusyntax}[emph={[1]logo-size}]
+% logo-size = (*\marg{宽度}*)
+% logo-size = {(*\meta{宽度}*), (*\meta{高度}*)}
+% \end{fdusyntax}
+% 校名图片的大小。默认仅指定了宽度,为 |0.5\textwidth|\/。
+% 如果仅需指定高度,可在 \meta{宽度} 处填入一个空的分组 |{}|。
+% \end{function}
+%^^A! \begin{function}[added=2017-08-10]{style/logo-size}
+%^^A! \begin{fdusyntax}[emph={[1]logo-size}]
+%^^A! logo-size = (*\marg{width}*)
+%^^A! logo-size = {(*\meta{width}*), (*\meta{height}*)}
+%^^A! \end{fdusyntax}
+%^^A! Size of the logo. By default, only width is set to
+%^^A! |0.5\textwidth|. To set height only, you can put an
+%^^A! empty group ``|{}|'' at \meta{width}.
+%^^A! \end{function}
+%^^A!
+%
+%^^A+
+% \begin{function}[added=2017-07-06]{style/auto-make-cover}
+% \begin{fdusyntax}[emph={[1]auto-make-cover}]
+% auto-make-cover = (*<\TTF>*)
+% \end{fdusyntax}
+%^^A-
+% 是否自动生成论文封面(封一)、指导小组成员名单(封二)和
+% 声明页(封三)。封面中的各项信息,可通过 \cs{fdusetup} 录入,
+% 具体请参阅 \ref{subsubsec:信息录入}~节。
+% \end{function}
+%^^A! Whether generate thesis cover, list of instructors (inside
+%^^A! front cover) and declaration page (inside back cover)
+%^^A! automatically. Entries in the cover can be specified also
+%^^A! via \cs{fdusetup}, and you can find more details in
+%^^A! subsubsection~\ref{subsubsec:information}.
+%^^A! \end{function}
+%^^A!
+%
+% \begin{function}{\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,updated=2019-03-12]{info/degree}
+% \begin{fdusyntax}[emph={[1]degree}]
+% degree = (*<(academic)|professional>*)
+% \end{fdusyntax}
+%^^A-
+% 学位类型,仅适用于博士和硕士学位论文。\opt{academic} 和 \opt{professional}
+% 分别表示学术学位和专业学位。
+% \end{function}
+%^^A! Degree type. This option can only be used in master degree
+%^^A! thesis.
+%^^A! \end{function}
+%^^A!
+%
+% \begin{function}{info/title,info/title*}
+% \begin{fdusyntax}[emph={[1]title,title*}]
+% title = (*\marg{中文标题}*)
+% title* = (*\marg{英文标题}*)
+% \end{fdusyntax}
+% 论文标题。默认会在约 20 个汉字字宽处强制断行,但为了语义的
+% 连贯以及排版的美观,如果您的标题长于一行,建议使用“|\\|”
+% 手动断行。
+% \end{function}
+%^^A! \begin{function}{info/title,info/title*}
+%^^A! \begin{fdusyntax}[emph={[1]title,title*}]
+%^^A! title = (*\marg{title in Chinese}*)
+%^^A! title* = (*\marg{title in English}*)
+%^^A! \end{fdusyntax}
+%^^A! Title of your thesis. The line width is about \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{quotation}
+% 喬孟符(吉)博學多能,以樂府稱。嘗云:「作樂府亦有法,曰^^A
+% \CJKunderdot{鳳頭、豬肚、豹尾}六字是也。」大概起要美麗,中要浩蕩,
+% 結要響亮。尤貴在首尾貫穿,意思清新。苟能若是,斯可以言樂府矣。
+% \end{quotation}
+% \hfill ——陶宗儀《南村輟耕錄·作今樂府法》
+%
+% \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{new\-the\-o\-rem} and \cs{new\-the\-o\-rem*}:
+%^^A! \begin{latexexample}[deletetexcs={\newtheorem},
+%^^A! morekeywords={\newtheorem,\newtheorem*}]
+%^^A! \newtheorem*{proof}{proof}
+%^^A! \newtheorem{axiom}{axiom}
+%^^A! \newtheorem{corollary}{corollary}
+%^^A! ...
+%^^A! \end{latexexample}
+%^^A!
+%
+% 与 \cs{fdusetup} 相同,\cs{newtheorem} 的可选参数 \meta{选项}
+% 也为一组键值列表。可用的选项见下。注意您无需输入“|theorem/|”。
+%^^A! Similar with \cs{fdusetup}, the optional argument \meta{options}
+%^^A! of \cs{newtheorem} is a key-value list as well. The available
+%^^A! are described below. Note that you don't need to type in the
+%^^A! ``|theorem/|'' prefix.
+%^^A!
+%
+% \begin{function}{theorem/style}
+% \begin{fdusyntax}[emph={[1]style}]
+% style = (*<(plain)|margin|change|\\
+% XXXXXX\mbox{}~~~~~~~~break|marginbreak|changebreak>*)
+% \end{fdusyntax}
+% 定理类环境的总体样式。
+% \end{function}
+%^^A! \begin{function}{theorem/style}
+%^^A! \begin{fdusyntax}[emph={[1]style}]
+%^^A! style = (*<(plain)|margin|change|\\
+%^^A! XXXX\mbox{}~~~~~~~~break|marginbreak|changebreak>*)
+%^^A! \end{fdusyntax}
+%^^A! The overall style of the theorem environment.
+%^^A! \end{function}
+%^^A!
+%
+% \begin{function}{theorem/header-font}
+% \begin{fdusyntax}[emph={[1]header-font}]
+% header-font = (*\marg{字体}*)
+% \end{fdusyntax}
+% 定理头(即标题)的字体。中文模板默认为 \tn{sffamily},即无衬线体
+% (黑体);英文模板默认为 |\bfseries\upshape|,即加粗直立体。
+% \end{function}
+%^^A! \begin{function}{theorem/header-font}
+%^^A! \begin{fdusyntax}[emph={[1]header-font}]
+%^^A! header-font = (*\marg{font}*)
+%^^A! \end{fdusyntax}
+%^^A! Font of the theorem header. Default value is \tn{sffamily}
+%^^A! and |\bfseries\upshape| for Chinese and English template,
+%^^A! respectively.
+%^^A! \end{function}
+%^^A!
+%
+% \begin{function}{theorem/body-font}
+% \begin{fdusyntax}[emph={[1]body-font}]
+% body-font = (*\marg{字体}*)
+% \end{fdusyntax}
+% 定理内容的字体。中文模板默认为 \tn{fdu@kai},即楷体;英文模板
+% 默认为 \tn{itshape},即斜体。
+% \end{function}
+%^^A! \begin{function}{theorem/body-font}
+%^^A! \begin{fdusyntax}[emph={[1]body-font}]
+%^^A! body-font = (*\marg{font}*)
+%^^A! \end{fdusyntax}
+%^^A! Font of the theorem body. Default value is \tn{fdu@kai}
+%^^A! (\textit{楷体}) and \tn{itshape} for Chinese and English
+%^^A! template, respectively.
+%^^A! \end{function}
+%^^A!
+%
+% \begin{function}{theorem/qed}
+% \begin{fdusyntax}[emph={[1]qed}]
+% qed = (*\marg{符号}*)
+% \end{fdusyntax}
+% 定理结束标记(即证毕符号)。如果用 \cs{newtheorem} 声明定理,
+% 则默认为空;用 \cs{newtheorem*} 声明,则默认为
+% |\ensuremath{\QED}|,即“$\QED$”。
+% \end{function}
+%^^A! \begin{function}{theorem/qed}
+%^^A! \begin{fdusyntax}[emph={[1]qed}]
+%^^A! qed = (*\marg{symbol}*)
+%^^A! \end{fdusyntax}
+%^^A! Theorem end mark. For \cs{newtheorem}, default value is
+%^^A! empty; for \cs{newtheorem*}, default value is
+%^^A! |\ensuremath{\QED}| (i.e.\ ``$\QED$'').
+%^^A! \end{function}
+%^^A!
+%
+% \begin{function}{theorem/counter}
+% \begin{fdusyntax}[emph={[1]counter}]
+% counter = (*\marg{计数器}*)
+% \end{fdusyntax}
+% 定理计数器,表示定理编号在 \meta{计数器} 的下一级,并会随
+% \meta{计数器} 的变化而清零。\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{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{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{xcolor}
+%^^A! \item \pkg{hyperref}
+%^^A! \end{itemize}
+%^^A! \item When chosen \kvopt{style/footnote-style}{pifont},
+%^^A! package \pkg{pifont} will be loaded. It belongs to
+%^^A! \pkg{psnfss} bundle.
+%^^A! \item When chosen \kvopt{style/bib-backend}{bibtex},
+%^^A! package \pkg{natbib} will be loaded. Meanwhile, program
+%^^A! \BibTeX{} will be required for compilation. The
+%^^A! bibliography style is provided by \pkg{gbt7714}.
+%^^A! \item When chosen \kvopt{style/bib-backend}{biblatex},
+%^^A! package \pkg{biblatex} will be loaded. Program \biber{}
+%^^A! will be required then. The bibliography style is provided
+%^^A! by \pkg{biblatex-gb7714-2015}.
+%^^A! \end{itemize}
+%^^A!
+%
+% 这里只列出了本模板直接调用的宏包。这些宏包自身的调用情况,
+% 此处不再具体展开。如有需要,请参阅相关文档。
+%^^A! Only the packages loaded directly by \cls{fduthesis} are listed
+%^^A! here. If you need to know the dependencies of the packages
+%^^A! themselves, please refer to the corresponding manuals.
+%^^A!
+%
+% \begin{thebibliography}{99}
+%
+% \newcommand\urlprefix{\newline\hspace*{\fill}}
+% \let\OldUrl=\url
+% \renewcommand\url[2][]{{\small\textit{#1}~\OldUrl{#2}}}
+% \newcommand\CTANurl[2][]{{\small\textit{#1}~\href{http://mirror.ctan.org/#2}^^A
+% {\ttfamily CTAN://#2}}}
+%
+% \subsection{图书}
+%
+% \bibitem{knuth1986texbook}
+% \textsc{Knuth D E}.
+% \newblock \textit{The \TeX book: Computers \& Typesetting, volume A} [M].
+% \newblock Boston: Addison--Wesley Publishing Company, 1986
+% \urlprefix \CTANurl[源代码^^A
+% \footnote{此代码只可作为学习之用。未经 Knuth 本人同意,您不应当编译此文档。}:]^^A
+% {systems/knuth/dist/tex/texbook.tex}
+%
+% \bibitem{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{胡伟2017latex2e}
+% 胡伟.
+% \newblock \textit{\LaTeXe{} 文类和宏包学习手册} [M].
+% \newblock 北京: 清华大学出版社, 2017
+%
+% \bibitem{刘海洋2013latex入门}
+% 刘海洋.
+% \newblock \textit{\LaTeX{} 入门} [M].
+% \newblock 北京: 电子工业出版社, 2013
+%
+% \subsection{标准、规范}
+%
+% \bibitem{gb-t-7713.1-2006}
+% 国务院学位委员会办公室, 全国信息与文献标准化技术委员会.
+% \newblock \textit{学位论文编写规则: GB/T 7713.1--2006} [S].
+% \newblock 北京: 中国标准出版社, 2007
+%
+% \bibitem{gb-t-7714-2015}
+% 全国信息与文献标准化技术委员会.
+% \newblock \textit{信息与文献\quad 参考文献著录规则: GB/T 7714--2015} [S].
+% \newblock 北京: 中国标准出版社, 2015
+%
+% \bibitem{gb-t-15834-2011}
+% 教育部语言文字信息管理司.
+% \newblock \textit{标点符号用法: GB/T 15834--2011} [S/OL].
+% \newblock 北京: 中国标准出版社, 2012
+% \urlprefix\url{http://www.moe.gov.cn/ewebeditor/uploadfile/2015/01/13/20150113091548267.pdf}
+%
+% \bibitem{clreq}
+% W3C.
+% \newblock \textit{中文排版需求(Requirements for Chinese Text Layout)} [EB/OL].
+% \newblock (2019-03-13)
+% \urlprefix\url{https://w3c.github.io/clreq/}
+%
+% \bibitem{复旦大学论文规范}
+% 复旦大学图书馆, 复旦大学研究生院.
+% \newblock \textit{复旦大学博士、硕士学位论文规范} [EB/OL].
+% \newblock 2017 年 3 月修订版.
+% \newblock (2017-03-27)
+% \urlprefix\url{http://www.gs.fudan.edu.cn/_upload/article/4c/a8/a82545ef443b9c057c14ba13782c/c883c6f3-6d7f-410c-8f30-d8bde6fcb990.doc}
+%
+% \subsection{宏包、模版}
+%
+% \bibitem{source2e}
+% \textsc{Braams J}, \textsc{Carlisle D}, \textsc{Jeffrey A}, et al.
+% \newblock \textit{The \LaTeXe{} Sources} [CP/OL].
+% \newblock (2018-12-01)
+% \urlprefix\url{https://ctan.org/pkg/latex}
+% \urlprefix\CTANurl[源代码:]{macros/latex/base/source2e.pdf}
+%
+% \bibitem{CTeX}
+% \textsc{CTEX.ORG}.
+% \newblock \textit{\CTeX{} 宏集手册} [EB/OL].
+% \newblock version 2.4.14,
+% \newblock (2018-05-02)
+% \urlprefix\url{https://ctan.org/pkg/ctex}
+% \urlprefix\CTANurl[文档及源代码:]{language/chinese/ctex/ctex.pdf}
+%
+% \bibitem{xeCJK}
+% \textsc{CTEX.ORG}.
+% \newblock \textit{\pkg{xeCJK} 宏包} [EB/OL].
+% \newblock version 3.7.1,
+% \newblock (2018-04-30)
+% \urlprefix\url{https://ctan.org/pkg/xecjk}
+% \urlprefix\CTANurl[文档及源代码:]{macros/xetex/latex/xecjk/xeCJK.pdf}
+%
+% \bibitem{natbib}
+% \textsc{Daly P W}.
+% \newblock \textit{Natural Sciences Citations and References} [EB/OL].
+% \newblock version 8.31b,
+% \newblock (2010-09-13)
+% \urlprefix\url{https://ctan.org/pkg/natbib}
+% \urlprefix\CTANurl[文档及源代码:]{macros/latex/contrib/natbib/natbib.pdf}
+%
+% \bibitem{source3}
+% \textsc{The \LaTeX3 Project}.
+% \newblock \textit{The \LaTeX3 Sources} [CP/OL].
+% \newblock (2019-03-05)
+% \urlprefix\url{https://ctan.org/pkg/l3kernel}
+% \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.12,
+% \newblock (2018-10-18)
+% \urlprefix\url{https://ctan.org/pkg/biblatex}
+% \urlprefix\CTANurl[文档:]{macros/latex/contrib/biblatex/doc/biblatex.pdf}
+%
+% \bibitem{lshort}
+% \textsc{Oetiker T}, \textsc{Partl H}, \textsc{Hyna I}, et al.
+% \newblock \textit{The Not So Short Introduction to \LaTeXe{}: Or \LaTeXe{} in 139 minutes} [EB/OL].
+% \newblock version 6.2,
+% \newblock (2018-02-28)
+% \urlprefix\url{https://ctan.org/pkg/lshort-english}
+% \urlprefix\CTANurl[文档:]{info/lshort/english/lshort.pdf}
+%
+% \bibitem{lshort-zh-cn}
+% \textsc{Oetiker T}, \textsc{Partl H}, \textsc{Hyna I}, et al.
+% \newblock \textit{一份不太简短的 \LaTeXe{} 介绍: 或 106 分钟了解 \LaTeXe{}} [EB/OL].
+% \newblock \CTeX{} 开发小组, 译.
+% \newblock 原版版本 version 6.2, 中文版本 version 6.0,
+% \newblock (2018-09-01)
+% \urlprefix\url{https://ctan.org/pkg/lshort-zh-cn}
+% \urlprefix\CTANurl[文档:]{info/lshort/chinese/lshort-zh-cn.pdf}
+%
+% \bibitem{biblatex-gb7714-2015}
+% 胡振震.
+% \newblock \textit{符合 GB/T 7714-2015 标准的 biblatex 参考文献样式} [EB/OL].
+% \newblock version 1.0q,
+% \newblock (2019-02-11)
+% \urlprefix\url{https://ctan.org/pkg/biblatex-gb7714-2015}
+% \urlprefix\CTANurl[文档:]{biblatex-contrib/biblatex-gb7714-2015/biblatex-gb7714-2015.pdf}
+%
+% \bibitem{gbt7714}
+% 李泽平(\textsc{Zeping L}).
+% \newblock \textit{GB/T 7714-2015 \BibTeX{} Style} [EB/OL].
+% \newblock version 1.0.9,
+% \newblock (2018-08-05)
+% \urlprefix\url{https://ctan.org/pkg/gbt7714}
+% \urlprefix\CTANurl[文档:]{biblio/bibtex/contrib/gbt7714/gbt7714.pdf}
+%
+% \bibitem{cquthesis}
+% 李振楠.
+% \newblock \textit{\textsc{CquThesis}:重庆大学毕业论文 \LaTeX{} 模板} [EB/OL].
+% \newblock version 1.30,
+% \newblock (2018-02-23)
+% \urlprefix\url{https://ctan.org/pkg/cquthesis}
+% \urlprefix\CTANurl[文档及源代码:]{macros/latex/contrib/cquthesis/cquthesis.pdf}
+%
+% \bibitem{thuthesis}
+% 薛瑞尼.
+% \newblock \textit{\textsc{ThuThesis}:清华大学学位论文模板} [EB/OL].
+% \newblock version 5.4.5,
+% \newblock (2018-05-17)
+% \urlprefix\url{https://ctan.org/pkg/thuthesis}
+% \urlprefix\CTANurl[文档及源代码:]{macros/latex/contrib/thuthesis/thuthesis.pdf}
+%
+% \emph{以下模版未收录至 CTAN,但仍然保持活跃更新。}
+%
+% \bibitem{sjtuthesis}
+% \textsc{SJTUG}.
+% \newblock \textit{上海交通大学 \XeLaTeX{} 学位论文及课程论文模板} [EB/OL].
+% \newblock version 0.10.2,
+% \newblock (2018-11-05)
+% \urlprefix\url{https://github.com/sjtug/SJTUThesis}
+%
+% \bibitem{ustcthesis}
+% \textsc{USTC \TeX{} User Group}.
+% \newblock \textit{中国科学技术大学学位论文 \LaTeX{} 模板} [EB/OL].
+% \newblock version 3.1.03,
+% \newblock (2019-01-01)
+% \urlprefix\url{https://github.com/ustctug/ustcthesis}
+%
+% \bibitem{ucasthesis}
+% \textsc{mohuangrui}.
+% \newblock \textit{\pkg{ucasthesis} 国科大学位论文 \LaTeX{} 模板} [EB/OL].
+% \newblock (2019-03-14)
+% \urlprefix\url{https://github.com/mohuangrui/ucasthesis}
+%
+% \emph{以下模版现已停止更新。}
+%
+% \bibitem{pandoxie2014fduthesislatex}
+% \textsc{Pandoxie}.
+% \newblock \textit{Fudan University-Latex Template} [EB/OL].
+% \newblock (2014-06-07)
+% \urlprefix\url{https://github.com/Pandoxie/FDU-Thesis-Latex}
+%
+% \bibitem{richard2016fudanthesis}
+% \textsc{richard}.
+% \newblock \textit{复旦大学硕士学位论文模板} [EB/OL].
+% \newblock (2016-01-31)
+% \urlprefix\url{https://github.com/richarddzh/fudan-thesis}
+%
+% \bibitem{数院毕业论文格式}
+% 复旦大学数学科学学院.
+% \newblock \textit{毕业论文格式 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}
+%
+% \subsection{其他}
+%
+% \bibitem{wright2009dtxfile}
+% \textsc{Wright J}.
+% \newblock \textit{A model dtx file} [EB/OL].
+% \newblock (2009-10-06)
+% \urlprefix\url{https://www.texdev.net/2009/10/06/a-model-dtx-file/}
+%
+% \bibitem{孔雀计划}
+% 刘庆(\textsc{Eric Q L}).
+% \newblock \textit{孔雀计划:中文字体排印的思路} [EB/OL].
+% \urlprefix\url{https://thetype.com/kongque/}
+%
+% \end{thebibliography}
+%
+% \clearpage
+%
+%^^A! \end{document}
+%
+% \end{documentation}
+%
+% \begin{implementation}
+%
+%^^A 代码部分的页边距
+% \newgeometry{
+% left = 2.25 in,
+% right = 1.00 in,
+% top = 1.25 in,
+% bottom = 1.00 in,
+% marginpar = 2.25 in
+% }
+%
+% \section{实现细节}
+%
+% 本模板使用 \LaTeX3 语法编写,依赖 \pkg{expl3} 环境,
+% 并需调用 \pkg{l3packages} 中的相关宏包。
+%
+% 按照 \LaTeX3 语法,代码中的空格、换行、回车与制表符完全忽略,
+% 而下划线“|_|”和冒号“|:|”则可作为一般字母使用。
+% 正常的空格可以使用“|~|”代替;至于 |~| 原来所表示的“带子”,
+% 则要用 \LaTeXe{} 的原始命令 \tn{nobreakspace} 代替。
+%
+% 以下代码中有一些形如 \textcolor[HTML]{2E3191}{\textsf{<*class>}}
+% 的标记,这是 \pkg{DocStrip} 中的“guard”,用来选择性地提取文件。
+% “\textsf{*}”和“\textsf{/}”分别表示该部分的开始和结束。不含
+% “\textsf{*}”和“\textsf{/}”的 guard 出现在行号右侧,它们用来确定
+% 单独一行代码的归属。这些 guard 的颜色深浅不一,用以明确嵌套关系。
+%
+% 另有若干形如 \textcolor{MaterialPink}{\textsf{<@@=fdu>}} 的 guard,
+% 它们由 \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} { 2018/05/12 }
+ { } { \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@document@left@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 } }
+\sys_if_engine_luatex:T
+ { \@@_check_package:nnn { xunicode-addon } { 2018/04/30 } { 3.7.1 } }
+% \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{字体}
+%
+% \subsubsection{预定义字体配置}
+%
+% \changes{v0.7c}{2019/03/05}{重构字体配置,并兼容 macOS。}
+%
+% \begin{variable}{\g_@@_font_set_tl, \g_@@_cjk_font_set_tl}
+% 存放字体选项值。
+% \begin{macrocode}
+\tl_new:N \g_@@_font_set_tl
+%<class>\tl_new:N \g_@@_cjk_font_set_tl
+% \end{macrocode}
+% \end{variable}
+%
+% \begin{macro}{style/font}
+% \changes{v0.7c}{2019/03/05}{新增 \opt{garamond} 和 \opt{times*} 样式。}
+% 预定义西文字体。
+% \begin{macrocode}
+\keys_define:nn { fdu / style }
+ {
+ font .choices:nn =
+ { garamond, libertinus, lm, palatino, times, times*, none }
+ { \tl_set_eq:NN \g_@@_font_set_tl \l_keys_choice_tl }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{style/cjk-font}
+% \changes{v0.7c}{2019/03/05}{新增 \opt{sinotype} 和 \opt{sourcehan} 样式。}
+% 预定义中文字体。
+% \begin{macrocode}
+%<*class>
+\keys_define:nn { fdu / style }
+ {
+ cjk-font .choices:nn =
+ { adobe, fandol, founder, mac, sinotype, sourcehan, windows, none }
+ { \tl_set_eq:NN \g_@@_cjk_font_set_tl \l_keys_choice_tl }
+ }
+% \end{macrocode}
+%</class>
+% \end{macro}
+%
+% \begin{macro}{
+% \@@_setmainfont:nn,
+% \@@_setsansfont:nn,
+% \@@_setmonofont:nn,
+% \@@_setmathfont:nn}
+% 用于设置西文字体的辅助函数,来源于 \pkg{fontspec} 和 \pkg{unicode-math}。
+% \begin{arguments}
+% \item 字体名
+% \item 选项
+% \end{arguments}
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_setmainfont:nn #1#2
+ { \__fontspec_main_setmainfont:nn {#2} {#1} }
+\cs_new_protected:Npn \@@_setsansfont:nn #1#2
+ { \__fontspec_main_setsansfont:nn {#2} {#1} }
+\cs_new_protected:Npn \@@_setmonofont:nn #1#2
+ { \__fontspec_main_setmonofont:nn {#2} {#1} }
+\cs_new_protected:Npn \@@_setmathfont:nn #1#2
+ { \__um_setmathfont:nn {#2} {#1} }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{
+% \@@_setCJKmainfont:nn,
+% \@@_setCJKsansfont:nn,
+% \@@_setCJKmonofont:nn}
+% 用于设置中文字体的辅助函数,来源于 \pkg{xeCJK} 和 \pkg{ctex} 宏包。
+% \begin{macrocode}
+%<*class>
+\cs_new_protected:Npn \@@_setCJKmainfont:nn #1#2
+ { \@@_set_family:nnn { \CJKrmdefault } {#2} {#1} }
+\cs_new_protected:Npn \@@_setCJKsansfont:nn #1#2
+ { \@@_set_family:nnn { \CJKsfdefault } {#2} {#1} }
+\cs_new_protected:Npn \@@_setCJKmonofont:nn #1#2
+ { \@@_set_family:nnn { \CJKttdefault } {#2} {#1} }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_set_cjk_font_kai:nn,\fdu@kai}
+% 楷体需要单独设置。
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_set_cjk_font_kai:nn #1#2
+ { \@@_set_family:nnn { fdu@kai } {#2} {#1} }
+\cs_new_protected:Npn \fdu@kai
+ { \@@_switch_family:n { fdu@kai } }
+% \end{macrocode}
+% \end{macro}
+%
+% \changes{v0.7d}{2019/03/29}{在字体未提供对应粗体的情况下,允许使用伪粗。}
+%
+% \begin{macro}{
+% \@@_cjk_font_options:,
+% \@@_setCJKmainfont:n,
+% \@@_setCJKsansfont:n,
+% \@@_setCJKmonofont:n,
+% \@@_set_cjk_font_kai:n}
+% 将 bold、italic 和 bold italic 统一按照 roman 设置。
+% \begin{macrocode}
+\tl_const:Nn \@@_cjk_font_options:
+ { UprightFont = *, ItalicFont = *, AutoFakeBold = true }
+\cs_new_protected:Npx \@@_setCJKmainfont:n #1
+ { \@@_setCJKmainfont:nn {#1} { \@@_cjk_font_options: } }
+\cs_new_protected:Npx \@@_setCJKsansfont:n #1
+ { \@@_setCJKsansfont:nn {#1} { \@@_cjk_font_options: } }
+\cs_new_protected:Npx \@@_setCJKmonofont:n #1
+ { \@@_setCJKmonofont:nn {#1} { \@@_cjk_font_options: } }
+\cs_new_protected:Npx \@@_set_cjk_font_kai:n #1
+ { \@@_set_cjk_font_kai:nn {#1} { \@@_cjk_font_options: } }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_set_family:nnn,\@@_switch_family:n}
+% 封装 CJK 字体族的设定和切换命令。
+% \begin{macrocode}
+\sys_if_engine_xetex:TF
+ {
+ \cs_new_eq:NN \@@_set_family:nnn \xeCJK_set_family:nnn
+ \cs_new_eq:NN \@@_switch_family:n \xeCJK_switch_family:n
+ }
+ {
+ \cs_new_eq:NN \@@_set_family:nnn \ctex_ltj_set_family:nnn
+ \cs_new_eq:NN \@@_switch_family:n \ctex_ltj_switch_family:n
+ }
+%</class>
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{
+% \setmainfont,
+% \setsansfont,
+% \setmonofont,
+% \setmathfont,
+% \setCJKmainfont,
+% \setCJKsansfont,
+% \setCJKmonofont,
+% \@@_set_font:n}
+% 重新定义以上宏包提供的字体选择命令。我们把它放在导言区末尾,使得用户配置不被
+% 模板配置覆盖。
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_set_font_helper:n #1
+ {
+ \exp_args:Nc \RenewDocumentCommand { set #1 font } { O { } m O { } }
+ {
+ \ctex_at_end_preamble:n
+ { \use:c { @@_set #1 font:nn } {##2} { ##1, ##3 } }
+ }
+ }
+\clist_map_inline:nn { main, sans, mono, math } { \@@_set_font_helper:n {#1} }
+%<class>\clist_map_inline:nn { CJKmain, CJKsans, CJKmono } { \@@_set_font_helper:n {#1} }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_load_font_garamond:}
+% EB Garamond 系列。
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_load_font_garamond:
+ {
+ \@@_setmainfont:nn { EBGaramond }
+ {
+ Extension = .otf,
+ UprightFont = *-Regular,
+ BoldFont = *-Bold,
+ ItalicFont = *-Italic,
+ BoldItalicFont = *-BoldItalic
+ }
+ \@@_setsansfont:nn { libertinussans }
+ {
+ Extension = .otf,
+ UprightFont = *-regular,
+ BoldFont = *-bold,
+ ItalicFont = *-italic,
+ BoldItalicFont = *-bolditalic
+ }
+ \@@_setmonofont:nn { lmmonolt10 }
+ {
+ Extension = .otf,
+ UprightFont = *-regular,
+ BoldFont = *-bold,
+ ItalicFont = *-oblique,
+ BoldItalicFont = *-boldoblique
+ }
+ \@@_setmathfont:nn { Garamond-Math.otf } { }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_load_font_libertinus:}
+% Libertinus 系列。
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_load_font_libertinus:
+ {
+ \@@_setmainfont:nn { libertinusserif }
+ {
+ Extension = .otf,
+ UprightFont = *-regular,
+ BoldFont = *-bold,
+ ItalicFont = *-italic,
+ BoldItalicFont = *-bolditalic
+ }
+ \@@_setsansfont:nn { libertinussans }
+ {
+ Extension = .otf,
+ UprightFont = *-regular,
+ BoldFont = *-bold,
+ ItalicFont = *-italic,
+ BoldItalicFont = *-bolditalic
+ }
+ \@@_setmonofont:nn { lmmonolt10 }
+ {
+ Extension = .otf,
+ UprightFont = *-regular,
+ BoldFont = *-bold,
+ ItalicFont = *-oblique,
+ BoldItalicFont = *-boldoblique
+ }
+ \@@_setmathfont:nn { libertinusmath-regular.otf } { }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_load_font_lm:}
+% Latin Modern 系列。在 \XeLaTeX{} 和 \LuaLaTeX{} 中已作为默认字体,所以仅需
+% 额外处理数学部分。
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_load_font_lm:
+ { \@@_setmathfont:nn { latinmodern-math.otf } { } }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_load_font_palatino:}
+% Palatino 系列。
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_load_font_palatino:
+ {
+ \@@_setmainfont:nn { texgyrepagella }
+ {
+ Extension = .otf,
+ UprightFont = *-regular,
+ BoldFont = *-bold,
+ ItalicFont = *-italic,
+ BoldItalicFont = *-bolditalic
+ }
+ \@@_setsansfont:nn { libertinussans }
+ {
+ Extension = .otf,
+ UprightFont = *-regular,
+ BoldFont = *-bold,
+ ItalicFont = *-italic,
+ BoldItalicFont = *-bolditalic,
+ Scale = MatchUppercase
+ }
+ \@@_setmonofont:nn { lmmonolt10 }
+ {
+ Extension = .otf,
+ UprightFont = *-regular,
+ BoldFont = *-bold,
+ ItalicFont = *-oblique,
+ BoldItalicFont = *-boldoblique
+ }
+ \@@_setmathfont:nn { texgyrepagella-math.otf } { }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_load_font_times:}
+% Times 系列。
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_load_font_times:
+ {
+ \@@_setmainfont:nn { XITS }
+ {
+ Extension = .otf,
+ UprightFont = *-Regular,
+ BoldFont = *-Bold,
+ ItalicFont = *-Italic,
+ BoldItalicFont = *-BoldItalic,
+ UprightFeatures = { SmallCapsFont = *-Regular },
+ BoldFeatures = { SmallCapsFont = *-Bold },
+ ItalicFeatures = { SmallCapsFont = *-Italic },
+ BoldItalicFeatures = { SmallCapsFont = *-BoldItalic }
+ }
+ \@@_setsansfont:nn { texgyreheros }
+ {
+ Extension = .otf,
+ UprightFont = *-regular,
+ BoldFont = *-bold,
+ ItalicFont = *-italic,
+ BoldItalicFont = *-bolditalic
+ }
+ \@@_setmonofont:nn { texgyrecursor }
+ {
+ Extension = .otf,
+ UprightFont = *-regular,
+ BoldFont = *-bold,
+ ItalicFont = *-italic,
+ BoldItalicFont = *-bolditalic,
+ Ligatures = CommonOff
+ }
+ \@@_setmathfont:nn { XITSMath-Regular.otf }{ BoldFont = XITSMath-Bold.otf }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_load_font_times*:}
+% Times* 系列,出数学部分外采用系统字体。
+% \begin{macrocode}
+\cs_new_protected:cpn { @@_load_font_ times* : }
+ {
+ \@@_setmainfont:nn { Times~ New~ Roman } { }
+ \@@_setsansfont:nn { Arial } { }
+ \@@_setmonofont:nn { Courier~ New } { }
+ \@@_setmathfont:nn { XITSMath-Regular.otf }{ BoldFont = XITSMath-Bold.otf }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_load_cjk_font_adobe:}
+% Adobe 字库。
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_load_cjk_font_adobe:
+ {
+ \@@_setCJKmainfont:n { AdobeSongStd-Light }
+ \@@_setCJKsansfont:n { AdobeHeitiStd-Regular }
+ \@@_setCJKmonofont:n { AdobeFangsongStd-Regular }
+ \@@_set_cjk_font_kai:n { AdobeKaitiStd-Regular }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_load_cjk_font_fandol:}
+% Fandol 字库。注意它是安装在 TeX 发行版中的,所以使用文件名调用。
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_load_cjk_font_fandol:
+ {
+ \@@_setCJKmainfont:nn { FandolSong }
+ {
+ Extension = .otf,
+ UprightFont = *-Regular,
+ BoldFont = *-Bold,
+ ItalicFont = *-Regular,
+ BoldItalicFont = *-Bold
+ }
+ \@@_setCJKsansfont:nn { FandolHei }
+ {
+ Extension = .otf,
+ UprightFont = *-Regular,
+ BoldFont = *-Bold,
+ ItalicFont = *-Regular,
+ BoldItalicFont = *-Bold
+ }
+ \@@_setCJKmonofont:nn { FandolFang }
+ {
+ Extension = .otf,
+ UprightFont = *-Regular,
+ BoldFont = *-Regular,
+ ItalicFont = *-Regular,
+ BoldItalicFont = *-Regular
+ }
+ \@@_set_cjk_font_kai:nn { FandolKai }
+ {
+ Extension = .otf,
+ UprightFont = *-Regular,
+ BoldFont = *-Regular,
+ ItalicFont = *-Regular,
+ BoldItalicFont = *-Regular
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_load_cjk_font_founder:}
+% 方正字库。虽然有粗体(方正小标宋)等,但并非免费,故这里不做处理。
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_load_cjk_font_founder:
+ {
+ \@@_setCJKmainfont:n { FZShuSong-Z01 }
+ \@@_setCJKsansfont:n { FZHei-B01 }
+ \@@_setCJKmonofont:n { FZFangSong-Z02 }
+ \@@_set_cjk_font_kai:n { FZKai-Z03 }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_load_cjk_font_mac:}
+% macOS 自带中文字体。
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_load_cjk_font_mac:
+ {
+ \@@_setCJKmainfont:nn { STSongti-SC }
+ {
+ UprightFont = *-Light,
+ BoldFont = *-Bold,
+ ItalicFont = *-Light,
+ BoldItalicFont = *-Bold
+ }
+ \@@_setCJKsansfont:nn { STHeitiSC }
+ {
+ UprightFont = *-Medium,
+ BoldFont = *-Medium,
+ ItalicFont = *-Medium,
+ BoldItalicFont = *-Medium
+ }
+ \@@_setCJKmonofont:n { STFangsong }
+ \@@_set_cjk_font_kai:nn { STKaitiSC }
+ {
+ UprightFont = *-Regular,
+ BoldFont = *-Bold,
+ ItalicFont = *-Regular,
+ BoldItalicFont = *-Bold
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_load_cjk_font_sinotype:}
+% 华文字库。
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_load_cjk_font_sinotype:
+ {
+ \@@_setCJKmainfont:n { STSong }
+ \@@_setCJKsansfont:n { STHeiti }
+ \@@_setCJKmonofont:n { STFangsong }
+ \@@_set_cjk_font_kai:n { STKaiti }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_load_cjk_font_sourcehan:}
+% 思源宋体、思源黑体。由于没有对应的楷体和仿宋,这里直接给出警告。
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_load_cjk_font_sourcehan:
+ {
+ \@@_setCJKmainfont:nn { SourceHanSerifSC }
+ {
+ UprightFont = *-Regular,
+ BoldFont = *-Bold,
+ ItalicFont = *-Regular,
+ BoldItalicFont = *-Bold
+ }
+ \@@_setCJKsansfont:nn { SourceHanSansSC }
+ {
+ UprightFont = *-Regular,
+ BoldFont = *-Bold,
+ ItalicFont = *-Regular,
+ BoldItalicFont = *-Bold
+ }
+ \@@_warning:n { source-han }
+ }
+\@@_msg_new:nn { source-han }
+ { Font~ set~ `sourcehan'~ does~ not~ contain~ kaiti~ and~ fangsong. }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_load_cjk_font_windows:}
+% Windows 自带中文字体。
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_load_cjk_font_windows:
+ {
+ \@@_setCJKmainfont:n { SimSun }
+ \@@_setCJKsansfont:n { SimHei }
+ \@@_setCJKmonofont:n { FangSong }
+ \@@_set_cjk_font_kai:n { KaiTi }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_load_font:}
+% 字体加载命令。
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_load_font:
+ {
+ \use:c { @@_load_font_ \g_@@_font_set_tl : }
+%<class> \use:c { @@_load_cjk_font_ \g_@@_cjk_font_set_tl : }
+ }
+\ctex_at_end_preamble:n { \@@_load_font: }
+% \end{macrocode}
+% \end{macro}
+%
+%^^A 以下相关代码已在 v0.7c 中移除。
+% \changes{v0.5}{2017/09/09}{重新实现字体调用。核心内容是分离字体的声明与设定,
+% 并按照宋、黑、仿、楷划分中文字体。}
+% \changes{v0.6}{2017/11/11}{额外处理 XITS 字体的小型大写字母。}
+% \changes{v0.5}{2017/09/23}{新增 \kvopt{font}{none} 选项。}
+% \changes{v0.5}{2017/09/23}{新增 \kvopt{cjk-font}{none} 选项。}
+% \changes{v0.5}{2017/09/23}{同步 \pkg{fontspec} v2.6e。}
+% \changes{v0.6}{2017/10/11}{同步 \pkg{unicode-math} v0.8h。}
+%
+% \subsubsection{数学字体设置}
+%
+% 根据 GB 3102.11--93 以及 ISO 80000-2:2009 的规定,数学表达式中
+% 表示变量的拉丁字母和希腊字母均应当使用斜体。
+% 这里的 |\keys_set:nn{unicode-math}| 实际相当于 \cs{unimathsetup}。
+% \begin{macrocode}
+% TODO: (2018-01-19) Do we need `mathrm=sym`?
+\keys_set:nn { unicode-math }
+ {
+ math-style = ISO,
+ bold-style = ISO,
+% mathrm = sym
+ }
+% \end{macrocode}
+%
+% \subsubsection{字号}
+%
+% \begin{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_@@_fwid_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{页眉页脚}
+%
+% 清除默认页眉页脚格式。
+% \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@kai \leftmark } }
+ \fancyhead [ OR ] { \small \nouppercase { \fdu@kai \rightmark } }
+ }
+ {
+ \fancyhead [ L ] { \small \nouppercase { \fdu@kai \leftmark } }
+ \fancyhead [ R ] { \small \nouppercase { \fdu@kai \rightmark } }
+ \fancyhead [ C ]
+ {
+ \small \nouppercase
+ { \fdu@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}{\cleardoublepage}
+% 重定义 \tn{cleardoublepage},使得偶数页面在没有内容时也不显示页眉页脚,见
+% \url{https://tex.stackexchange.com/a/1683}。最后清空中间页眉,确保正文部分
+% 页眉显示正确。
+% \begin{macrocode}
+\RenewDocumentCommand \cleardoublepage { }
+ {
+ \clearpage
+ \bool_if:NT \g_@@_twoside_bool
+ {
+ \int_if_odd:nF \c@page
+ { \hbox:n { } \thispagestyle { empty } \newpage }
+ }
+ \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{章节标题结构}
+%
+% |\keys_set:nn{ctex}| 实际相当于 \cs{ctexset}。
+% \begin{macrocode}
+\keys_set:nn { ctex }
+ {
+% \end{macrocode}
+% 设置章(chapter)、节(section)与小节(sub-section)标题样式。
+% 此处使用 \kvopt{fixskip}{true} 选项来抑制前后的多余间距。
+% \begin{macrocode}
+ chapter =
+ {
+%<class> format = \huge \normalfont \sffamily \centering,
+%<*class-en>
+ format = \centering,
+ nameformat = \LARGE \bfseries,
+ titleformat = \huge \bfseries,
+ aftername = \par \nobreak \vskip 10 pt,
+%</class-en>
+ beforeskip = 50 pt,
+ afterskip = 40 pt,
+ number = \@@_arabic:n { chapter },
+ fixskip = true
+ },
+ section =
+ {
+%<class> format = \Large \normalfont \sffamily \raggedright,
+%<class-en> format = \Large \bfseries \raggedright,
+ beforeskip = 3.5 ex plus 1.0 ex minus 0.2 ex,
+ afterskip = 2.7 ex plus 0.5 ex,
+ fixskip = true
+ },
+ subsection =
+ {
+%<class> format = \large \normalfont \sffamily \raggedright,
+%<class-en> format = \large \bfseries \raggedright,
+ beforeskip = 3.25 ex plus 1.0 ex minus 0.2 ex,
+ afterskip = 2.5 ex plus 0.3 ex,
+ fixskip = true
+ }
+ }
+% \end{macrocode}
+%
+% \changes{v0.7d}{2019/03/24}{优化目录、摘要、参考文献等的标题实现。}
+%
+% \begin{macro}{\@@_chapter:n,\@@_chapter:V}
+% 手动生成章的标题,用于摘要、参考文献等。
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_chapter:n #1
+ {
+ \group_begin:
+ \ctexset { chapter / numbering = false }
+ \chapter {#1}
+ \@@_chapter_header:n {#1}
+ \group_end:
+ }
+\cs_generate_variant:Nn \@@_chapter:n { V }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_chapter_no_toc:n,\@@_chapter_no_toc:V}
+% 目录自身不出现在目录中,需特别处理。参考
+% \url{https://tex.stackexchange.com/a/1821}。
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_chapter_no_toc:n #1
+ {
+ \chapter * {#1}
+ \@@_chapter_header:n {#1}
+ \pdfbookmark [0] {#1} { toc }
+ }
+\cs_generate_variant:Nn \@@_chapter_no_toc:n { V }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_chapter_header:n}
+% 单页模式下,目录、摘要、符号表等的页眉中间为相应标题,左右为空。
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_chapter_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}
+%
+% \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@footnote }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\fdu_footnote_number:N}
+% 脚注编号样式。
+% \begin{macrocode}
+\cs_new:Npn \fdu_footnote_number:N #1
+ {
+ \tl_case:NnF \l_@@_fn_style_tl
+ {
+% \end{macrocode}
+% \opt{plain} 类型直接使用计数器 |footnote| 的值。
+% \begin{macrocode}
+ \c_@@_fn_style_plain_tl
+ { \int_use:N #1 }
+% \end{macrocode}
+% \opt{libertinus} 类型需要使用 Libertinus Serif 或
+% Libertinus Sans 字体。
+% \begin{macrocode}
+ \c_@@_fn_style_libertinus_tl
+ {
+ \fontspec { libertinusserif-regular.otf }
+ \@@_fn_symbol_libertinus:n {#1}
+ }
+ \c_@@_fn_style_libertinus_neg_tl
+ {
+ \fontspec { libertinusserif-regular.otf }
+ \@@_fn_symbol_libertinus_neg:n {#1}
+ }
+ \c_@@_fn_style_libertinus_sans_tl
+ {
+ \fontspec { libertinussans-regular.otf }
+ \@@_fn_symbol_libertinus_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-Regular.otf }
+ \@@_fn_symbol_xits:n {#1}
+ }
+ \c_@@_fn_style_xits_sans_tl
+ {
+ \fontspec { XITS-Regular.otf }
+ \@@_fn_symbol_xits_sans:n {#1}
+ }
+ \c_@@_fn_style_xits_sans_neg_tl
+ {
+ \fontspec { XITS-Regular.otf }
+ \@@_fn_symbol_xits_sans_neg:n {#1}
+ }
+ }
+% \end{macrocode}
+% 变量 \cs{l_@@_fn_style_tl} 保存的类型未知时,默认使用 \opt{plain}
+% 类型。
+% \begin{macrocode}
+ { \int_use:N #1 }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{整体样式}
+%
+% \begin{macro}[int]{\@makefntext}
+% \changes{v0.7}{2018/01/18}{简化实现,兼容 \pkg{fancyvrb} 宏包。
+% 不再使用悬挂缩进。}
+% 重定义内部脚注文字命令,使脚注编号不使用上标,宽度为 \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{https://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_@@_fwid_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:}
+% \changes{v0.7c}{2019/03/12}{允许博士学位论文使用学位类型。}
+% 学位类型。
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_cover_degree:
+ {
+ \int_compare:nT { \g_@@_thesis_type_int != 3 }
+ {
+ \c_@@_fwid_left_paren_tl
+ \clist_item:Nn \c_@@_degree_type_clist
+ { \l_@@_info_degree_type_int }
+ \c_@@_fwid_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_@@_fwid_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_@@_fwid_colon_tl
+ \@@_blank_underline:n { 6 em }
+ \@@_quad:
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{封面模板}
+%
+% \changes{v0.7}{2018/02/27}{使用 \pkg{xtemplate} 重构封面布局。}
+%
+% 声明封面对象。不需要带参数。
+% \begin{macrocode}
+%<@@=fdu_cover>
+\DeclareObjectType { fdu / cover } { \c_zero_int }
+% \end{macrocode}
+%
+% \begin{macro}{\DeclareCoverTemplate,\fdu_cover_declare_template:nn}
+% 声明封面模板。
+% \begin{arguments}
+% \item 模板名称
+% \item 封面部件列表,以逗号分隔
+% \end{arguments}
+% \begin{macrocode}
+\NewDocumentCommand \DeclareCoverTemplate { m m }
+ { \fdu_cover_declare_template:nn {#1} {#2} }
+\cs_new_protected:Npn \fdu_cover_declare_template:nn #1#2
+ {
+ \tl_set:Nn \l_@@_template_tl {#1}
+% \end{macrocode}
+% 构建模板接口。
+% \begin{macrocode}
+ \@@_declare_template_interface:nx {#1}
+ {
+ format : tokenlist,
+ top-skip : skip,
+ bottom-skip : skip,
+ \clist_map_function:nN {#2} \@@_key_type:n
+ }
+% \end{macrocode}
+% 声明所用变量。
+% \begin{macrocode}
+ \tl_new:c { l_@@ / #1 / format_tl }
+ \skip_new:c { l_@@ / #1 / top_skip }
+ \skip_new:c { l_@@ / #1 / bottom_skip }
+ \clist_map_inline:nn {#2}
+ {
+ \tl_new:c { l_@@ / #1 / ##1 / content_tl }
+ \tl_new:c { l_@@ / #1 / ##1 / format_tl }
+ \skip_new:c { l_@@ / #1 / ##1 / bottom_skip }
+ }
+% \end{macrocode}
+% 声明模板代码。^^A 以下名字空间为 `fdu_cover' 而非 `fdu'
+% \begin{macrocode}
+ \@@_declare_template_code:nxn {#1}
+ {
+ format = \exp_not:c { l_@@ / #1 / format_tl },
+ top-skip = \use:c { l_@@ / #1 / top_skip },
+ bottom-skip = \use:c { l_@@ / #1 / bottom_skip },
+ \clist_map_function:nN {#2} \@@_key_binding:n
+ }
+ {
+ \AssignTemplateKeys
+ \tl_use:c { l_@@ / #1 / format_tl }
+ \__fdu_vspace:c { l_@@ / #1 / top_skip }
+ \clist_map_inline:nn {#2}
+ {
+ \use:c { @@ / #1 / ####1 / align:n }
+ {
+ \tl_use:c { l_@@ / #1 / ####1 / format_tl }
+ \tl_use:c { l_@@ / #1 / ####1 / content_tl }
+ \par
+ }
+ \__fdu_vspace:c { l_@@ / #1 / ####1 / bottom_skip }
+ }
+ \__fdu_vspace:c { l_@@ / #1 / bottom_skip }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{variable}{\l_@@_template_tl}
+% 保存模板名称。
+% \begin{macrocode}
+\tl_new:N \l_@@_template_tl
+% \end{macrocode}
+% \end{variable}
+%
+% \begin{macro}{\@@_declare_template_interface:nn,
+% \@@_declare_template_code:nnn,
+% \@@_declare_template_interface:nx,
+% \@@_declare_template_code:nxn}
+% 为了展开的方便,这里需要封装 \pkg{xtemplate} 的一些函数。
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_declare_template_interface:nn #1#2
+ { \DeclareTemplateInterface { fdu / cover } {#1} { \c_zero_int } {#2} }
+\cs_new_protected:Npn \@@_declare_template_code:nnn #1#2#3
+ { \DeclareTemplateCode { fdu / cover } {#1} { \c_zero_int } {#2} {#3} }
+\cs_generate_variant:Nn \@@_declare_template_interface:nn { nx }
+\cs_generate_variant:Nn \@@_declare_template_code:nnn { nxn }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_key_type:n}
+% \begin{macrocode}
+\cs_new:Npn \@@_key_type:n #1
+ {
+ #1 / content : tokenlist,
+ #1 / format : tokenlist,
+ #1 / bottom-skip : skip,
+ #1 / align : choice { left, right, center, normal } = normal,
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_key_binding:n}
+% \begin{macrocode}
+\cs_new:Npn \@@_key_binding:n #1
+ {
+ #1 / content =
+ \exp_not:c
+ { l_@@ / \l_@@_template_tl / #1 / content_tl },
+ #1 / format =
+ \exp_not:c
+ { l_@@ / \l_@@_template_tl / #1 / format_tl },
+ #1 / bottom-skip =
+ \exp_not:c
+ { l_@@ / \l_@@_template_tl / #1 / bottom_skip },
+ #1 / align =
+ {
+ left =
+ \exp_not:N \cs_set_protected:cpn
+ { @@ / \l_@@_template_tl / #1 / align:n }
+ \exp_not:n {##1}
+ {
+ \exp_not:n
+ {
+ \group_begin:
+ \flushleft ##1 \endflushleft
+ \group_end:
+ }
+ },
+ right =
+ \exp_not:N \cs_set_protected:cpn
+ { @@ / \l_@@_template_tl / #1 / align:n }
+ \exp_not:n {##1}
+ {
+ \exp_not:n
+ {
+ \group_begin:
+ \flushright ##1 \endflushright
+ \group_end:
+ }
+ },
+ center =
+ \exp_not:N \cs_set_protected:cpn
+ { @@ / \l_@@_template_tl / #1 / align:n }
+ \exp_not:n {##1}
+ {
+ \exp_not:n
+ {
+ \group_begin:
+ \center ##1 \endcenter
+ \group_end:
+ }
+ },
+ normal =
+ \exp_not:N \cs_set_protected:cpn
+ { @@ / \l_@@_template_tl / #1 / align:n }
+ \exp_not:n {##1}
+ { \exp_not:n { \group_begin: ##1 \group_end: } }
+ },
+ }
+%<@@=fdu>
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{绘制封面}
+%
+% \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}
+%
+% \changes{v0.7d}{2019/03/29}{封面中文标题改为加粗宋体(可能使用伪粗)。}
+%
+% 定义封面的具体配置参数。
+% \begin{macrocode}
+\DeclareInstance { fdu / cover } { cover-i-default } { cover-i }
+ {
+%<class-en> format = \@@_line_spread:N \c_@@_line_spread_fp,
+ bottom-skip = 0 pt plus 1.5 fill,
+ id / content = \@@_cover_id:,
+ logo / content = \@@_cover_logo:,
+ type / content = \@@_cover_type:,
+ degree / content = \@@_cover_degree:,
+ title / content =
+ \@@_fixed_width_center_box:nn
+ { 0.9 \textwidth } { \l_@@_info_title_tl },
+ title-en / content =
+ \@@_fixed_width_center_box:nn
+ { 0.9 \textwidth } { \l_@@_info_title_en_tl },
+ info / content = \@@_cover_info:,
+ id / format = \zihao { -5 },
+ type / format = \zihao { 2 },
+ degree / format = \zihao { 4 },
+ title / format = \zihao { -2 } \bfseries,
+ title-en / format = \@@_line_spread:n { 1.2 } \zihao { 4 } \bfseries,
+ id / bottom-skip = 0 pt plus 1.6 fill,
+ logo / bottom-skip = 0 pt plus 0.3 fill,
+ type / bottom-skip = -18 pt,
+ degree / bottom-skip = 0 pt plus 0.8 fill,
+ title-en / bottom-skip = 0 pt plus 2.5 fill,
+ id / align = right,
+ logo / align = center,
+ type / align = center,
+ degree / align = center,
+ title / align = center,
+ title-en / align = center,
+ info / align = center,
+ }
+\DeclareInstance { fdu / cover } { cover-ii-default } { cover-ii }
+ {
+%<class-en> format = \@@_line_spread:N \c_@@_line_spread_fp,
+ title / content =
+ \@@_spread_box: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{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> \normalfont \sffamily
+%<class-en> \bfseries
+ \CTEXnumberline {#1} #2
+ },
+ section / tocline =
+ {
+%<class-en> \bfseries
+ \CTEXnumberline {#1} #2
+ },
+ subsection / tocline =
+ {
+%<class> \fdu@kai
+ \CTEXnumberline {#1} #2
+ }
+ }
+% \end{macrocode}
+%
+% \begin{macro}{\tableofcontents}
+% 修改 \cs{tableofcontents} 的定义,使得页眉正确显示,并出现在目录中。原代码
+% 来自于 \LaTeXe{} 标准文档类 \file{book.cls}。
+% \begin{macrocode}
+\@@_patch_cmd:Nnn \tableofcontents
+ {
+ \chapter*{\contentsname
+ \@mkboth{%
+ \MakeUppercase\contentsname}{\MakeUppercase\contentsname}}%
+ }
+ { \@@_chapter_no_toc:V \contentsname }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[int]{\@starttoc}
+% 修改 \tn{@starttoc} 的定义以调整英文模板中的目录行距。
+% \begin{macrocode}
+%<*class-en>
+\@@_patch_cmd:Nnn \@starttoc
+ { \begingroup }
+ {
+ \begingroup
+ \@@_line_spread:N \c_@@_line_spread_fp
+ }
+%</class-en>
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{摘要}
+%
+% \begin{environment}{abstract}
+% \begin{environment}{abstract*}
+% \changes{v0.7}{2018/03/05}{整理代码。}
+% 摘要环境。在中文模板定义了中英文双语摘要,但在英文模板中则没有
+% 定义中文摘要。
+% \begin{macrocode}
+\NewDocumentEnvironment { abstract } { }
+%<class> { \@@_abstract_begin: } { \@@_abstract_end: }
+%<class-en> { \@@_abstract_en_begin: } { \@@_abstract_en_end: }
+%<*class>
+\NewDocumentEnvironment { abstract* } { }
+ { \@@_abstract_en_begin: } { \@@_abstract_en_end: }
+%</class>
+% \end{macrocode}
+% \end{environment}
+% \end{environment}
+%
+% \begin{macro}{\@@_abstract_begin:,\@@_abstract_en_begin:}
+% 摘要页标题。
+% \begin{macrocode}
+%<*class>
+\cs_new_protected:Npn \@@_abstract_begin:
+ { \@@_chapter:V \c_@@_name_abstract_tl }
+%</class>
+\cs_new_protected:Npn \@@_abstract_en_begin:
+ { \@@_chapter:V \c_@@_name_abstract_en_tl }
+% \end{macrocode}
+% \end{macro}
+%
+% \changes{v0.7d}{2019/03/28}{优化关键字列表的显示。}
+%
+% \begin{macro}{\@@_abstract_end:,\@@_abstract_en_end:}
+% 摘要正文完成后,输出关键字列表和中图分类号(CLC)。
+% \begin{macrocode}
+%<*class>
+\cs_new_protected:Npn \@@_abstract_end:
+ {
+ \@@_keywords:nNn
+ { \sffamily \c_@@_name_keywords_tl \c_@@_fwid_colon_tl }
+ \l_@@_info_keywords_clist { \c_@@_fwid_semicolon_tl }
+ \@@_clc:nn
+ { \sffamily \c_@@_name_clc_tl \c_@@_fwid_colon_tl }
+ { \l_@@_info_clc_tl }
+ }
+%</class>
+\cs_new_protected:Npn \@@_abstract_en_end:
+ {
+ \@@_keywords:nNn
+ { \bfseries \c_@@_name_keywords_en_tl \@@_quad: }
+ \l_@@_info_keywords_en_clist { ; ~ }
+ \@@_clc:nn
+ { \bfseries \c_@@_name_clc_en_tl \@@_quad: }
+ { \l_@@_info_clc_tl }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_keywords:nNn,\@@_keywords_prevdepth:,\@@_clc:nn}
+% 关键字列表前要空一行,使用悬挂缩进;中图分类号不缩进。|\parbox| 之后的间距
+% 需要调整,见 \url{https://tex.stackexchange.com/a/34982}。
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_keywords:nNn #1#2#3
+ {
+ \par \mode_leave_vertical: \par \noindent
+ \@@_get_text_width:Nn \l_@@_tmpa_dim {#1}
+ \group_begin: #1 \group_end:
+ \parbox [t] { \dim_eval:n { \textwidth - \l_@@_tmpa_dim } }
+ {
+ \clist_use:Nn #2 {#3} \par
+ \cs_gset:Npx \@@_keywords_prevdepth: { \dim_use:N \tex_prevdepth:D }
+ }
+ }
+\cs_new_protected:Npn \@@_clc:nn #1#2
+ {
+ \par \tex_prevdepth:D \@@_keywords_prevdepth: \noindent
+ \group_begin: #1 \group_end:
+ #2
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{符号表}
+%
+% \begin{environment}{notation}
+% \changes{v0.7}{2018/03/05}{整理代码。}
+% 符号表环境,利用 \env{longtable} 封装。可选参数为表格列格式说明符。
+% \begin{macrocode}
+\NewDocumentEnvironment { notation } { O { l p { 7.5 cm } } }
+ {
+ \@@_notation_begin:
+ \group_begin:
+ \@@_notation_long_table_setup:
+ \longtable {#1}
+ }
+ {
+ \endlongtable
+ \group_end:
+ }
+% \end{macrocode}
+% \end{environment}
+%
+% \begin{macro}{\@@_notation_begin:}
+% 符号表页标题。
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_notation_begin:
+ {
+%<class> \@@_chapter:V \c_@@_name_notation_tl
+%<class-en> \@@_chapter:V \c_@@_name_notation_en_tl
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_notation_long_table_setup:}
+% 调整 \cs{LTpre} 和 \cs{LTpost},以删去 \env{longtable} 前后的空白。
+% 英文模板中还需要调整表格的行距。注意 \tn{arraystretch} 只是一个简单
+% 宏,不能使用 \cs{fp_set:Nn}。
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_notation_long_table_setup:
+ {
+%<class-en> \tl_set:Nn \arraystretch { 1.3 }
+ \dim_set_eq:NN \LTpre \c_zero_dim
+ \dim_set_eq:NN \LTpost \c_zero_dim
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{参考文献著录与引用}
+%
+% \changes{v0.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
+ {
+ \bool_if:NTF \l_@@_bibtex_bool
+ {
+ \RequirePackage [ sort & compress ] { natbib }
+ \@@_bibtex_setup:
+ }
+ {
+ \@@_biblatex_pre_setup:
+ \RequirePackage { biblatex }
+ \@@_biblatex_post_setup:
+ }
+ }
+% \end{macrocode}
+%
+% \changes{v0.7}{2018/01/25}{统一使用 \cs{printbibliography} 命令
+% 生成参考文献列表。}
+% \changes{v0.7d}{2019/03/23}{使参考文献在目录中正常显示。}
+%
+% \begin{macro}{\@@_bibtex_setup:,\bibsection,\printbibliography}
+% \BibTeX{} 相关设置。
+% \begin{macrocode}
+\cs_new_protected: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}
+% 修改参考文献标题。
+% \begin{macrocode}
+ \cs_set:Npn \bibsection { \@@_chapter:V \bibname }
+% \end{macrocode}
+% \BibTeX{} 下接口与 \pkg{biblatex} 保持统一。
+% \begin{macrocode}
+ \NewDocumentCommand \printbibliography { o }
+ {
+ \exp_args:NV \bibliography \l_@@_bib_resource_tl
+ \IfValueT {##1}
+ { \@@_warning:nn { invalid-option-in-bibtex } {##1} }
+ }
+ }
+\@@_msg_new:nn { invalid-option-in-bibtex }
+ { Option(s)~ "#1"~ are~ invalid~ in~ BibTeX. }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{
+% \@@_biblatex_pre_setup:,
+% \@@_biblatex_post_setup:,
+% \@@_pass_options_to_biblatex:n}
+% \pkg{biblatex} 相关设置。
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_biblatex_pre_setup:
+ {
+% \end{macrocode}
+% 参考文献样式。
+% \begin{macrocode}
+ \tl_if_empty:NTF \l_@@_bib_style_tl
+ {
+ \tl_if_eq:VnTF \l_@@_bib_gb_style_tl { numerical }
+ { \@@_pass_options_to_biblatex:n { style = gb7714-2015 } }
+ {
+ \tl_if_eq:VnT \l_@@_bib_gb_style_tl { author-year }
+ { \@@_pass_options_to_biblatex:n { style = gb7714-2015ay } }
+ }
+ }
+ { \@@_pass_options_to_biblatex:n { style = \l_@@_bib_style_tl } }
+% \end{macrocode}
+% 引用样式。
+% \begin{macrocode}
+ \tl_if_empty:NF \l_@@_cite_style_tl
+ { \@@_pass_options_to_biblatex:n { citestyle = \l_@@_bib_style_tl } }
+ \@@_pass_options_to_biblatex:n { backend = biber, hyperref = manual, natbib }
+ }
+\cs_new_protected:Npn \@@_biblatex_post_setup:
+ {
+ \exp_args:NV \addbibresource \l_@@_bib_resource_tl
+ \@@_biblatex_allow_url_break:
+% \end{macrocode}
+% 修改参考文献标题。
+% \begin{macrocode}
+ \defbibheading { bibliography } [ \bibname ] { \@@_chapter:n {##1} }
+%<*class-en>
+ \exp_args:Nnx \DefineBibliographyStrings { english }
+ { bibliography = { \c_@@_name_bib_en_tl } }
+%</class-en>
+ }
+\cs_new_protected:Npn \@@_pass_options_to_biblatex:n #1
+ { \PassOptionsToPackage {#1} { 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@biburlucpenalty \c_one_int
+ \int_set_eq:NN \c@biburlnumpenalty \c_one_int
+ \int_set_eq:NN \c@biburllcpenalty \c_one_int
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_set_cite_style_numerical:}
+% 顺序编码制下的引用样式。
+% \begin{macrocode}
+\cs_new:Npn \@@_set_cite_style_numerical:
+ {
+ \NAT@numberstrue \NAT@supertrue
+ \cs_set:Npn \NAT@open { [ }
+ \cs_set:Npn \NAT@close { ] }
+ \cs_set:Npn \NAT@sep { ,~ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_set_cite_style_author_year:}
+% 著者—出版年制下的引用样式。
+% \begin{macrocode}
+\cs_new:Npn \@@_set_cite_style_author_year:
+ {
+ \NAT@numbersfalse
+%<*class>
+ \cs_set_eq:NN \NAT@open \c_@@_fwid_left_paren_tl
+ \cs_set_eq:NN \NAT@close \c_@@_fwid_right_paren_tl
+ \cs_set_eq:NN \NAT@sep \c_@@_fwid_semicolon_tl
+ \cs_set_eq:NN \NAT@aysep \c_@@_fwid_comma_tl
+ \cs_set_eq:NN \NAT@yrsep \c_@@_ideo_comma_tl
+%</class>
+ }
+% \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@link, linkbordercolor = fdu@link,
+ urlcolor = fdu@url, urlbordercolor = fdu@url,
+ citecolor = fdu@cite, citebordercolor = fdu@cite
+ }
+ },
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_define_hyperlink_color:nnn}
+% 定义超链接颜色。
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_define_hyperlink_color:nnn #1#2#3
+ {
+ \definecolorset { HTML } { fdu@ } { }
+ { link, #1; url, #2; cite, #3 }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+\keys_define:nx { fdu / style }
+ {
+% \end{macrocode}
+%
+% \begin{macro}{style/hyperlink}
+% 超链接样式。
+% \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@kai} 命令为空,以抑制 \pkg{hyperref}
+% 的警告信息。
+% \begin{macrocode}
+\ctex_at_end_package:nn { hyperref }
+ {
+ \pdfstringdefDisableCommands
+ {
+ \cs_set_eq:NN \fdu@kai \prg_do_nothing:
+ \cs_set_eq:NN \quad \c_space_tl
+ \cs_set_eq:NN \qquad \c_space_tl
+ }
+ }
+% \end{macrocode}
+%
+% \subsection{用户接口}
+%
+% \begin{macro}{info,style}
+% 定义元(meta)键值对。
+% \begin{macrocode}
+\keys_define:nn { fdu }
+ {
+ info .meta:nn = { fdu / info } {#1},
+ style .meta:nn = { fdu / style } {#1}
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% 文档类初始设置。
+% \begin{macrocode}
+\keys_set:nn { fdu }
+ {
+ style / font = times,
+%<class> style / cjk-font = fandol,
+ style / font-size = -4,
+%<class> style / fullwidth-stop = false,
+ style / auto-make-cover = true,
+ style / logo = { fudan-name.pdf },
+ style / logo-size = { 0.5 \textwidth },
+ style / hyperlink = color,
+ style / hyperlink-color = default,
+ style / bib-style = numerical,
+ info / degree = academic,
+ info / secret-level = none,
+ info / school-id = { 10246 },
+ info / date = { \zhtoday },
+%<class> theorem / header-font = { \sffamily },
+%<class-en> theorem / header-font = { \bfseries \upshape },
+%<class> theorem / body-font = { \fdu@kai },
+%<class-en> theorem / body-font = { \itshape },
+ theorem / counter = { chapter }
+ }
+% \end{macrocode}
+%
+% \begin{macro}{\fdusetup}
+% 用户设置接口。
+% \begin{macrocode}
+\NewDocumentCommand \fdusetup { m }
+ { \keys_set:nn { fdu } {#1} }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{environment}{proof}
+% \begin{environment}{axiom}
+% \begin{environment}{corollary}
+% \begin{environment}{definition}
+% \begin{environment}{example}
+% \begin{environment}{lemma}
+% \begin{environment}{theorem}
+% 模板预定义的常用数学环境。
+% 其中的“证明”比较特殊,它不编号,但会添加证毕符号。
+% \begin{macrocode}
+%<*class>
+\newtheorem* { proof } { \c_@@_name_proof_tl }
+\newtheorem { axiom } { \c_@@_name_axiom_tl }
+\newtheorem { corollary } { \c_@@_name_corollary_tl }
+\newtheorem { definition } { \c_@@_name_definition_tl }
+\newtheorem { example } { \c_@@_name_example_tl }
+\newtheorem { lemma } { \c_@@_name_lemma_tl }
+\newtheorem { theorem } { \c_@@_name_theorem_tl }
+%</class>
+%<*class-en>
+\newtheorem* { proof } { \c_@@_name_proof_en_tl }
+\newtheorem { axiom } { \c_@@_name_axiom_en_tl }
+\newtheorem { corollary } { \c_@@_name_corollary_en_tl }
+\newtheorem { definition } { \c_@@_name_definition_en_tl }
+\newtheorem { example } { \c_@@_name_example_en_tl }
+\newtheorem { lemma } { \c_@@_name_lemma_en_tl }
+\newtheorem { theorem } { \c_@@_name_theorem_en_tl }
+%</class-en>
+%</class|class-en>
+% \end{macrocode}
+% \end{environment}
+% \end{environment}
+% \end{environment}
+% \end{environment}
+% \end{environment}
+% \end{environment}
+% \end{environment}
+%
+% \subsection{模板参数配置文件}
+%
+% \changes{v0.3}{2017/06/27}{分离文档类与参数配置文件。}
+%
+% \begin{macrocode}
+%<*definition>
+% \end{macrocode}
+%
+% \subsubsection{通用配置}
+%
+% \begin{variable}{\c_@@_name_simp_tl,\c_@@_name_trad_tl,
+% \c_@@_name_en_tl}
+% 学校名称。
+% \begin{macrocode}
+\tl_const:Nn \c_@@_name_simp_tl { 复旦大学 }
+\tl_const:Nn \c_@@_name_trad_tl { 復旦大學 }
+\tl_const:Nn \c_@@_name_en_tl { Fudan~ University }
+% \end{macrocode}
+% \end{variable}
+%
+% 常用标点符号,见表~\ref{tab:punctuations}。
+% \begin{macrocode}
+\clist_map_inline:nn
+ {
+ { ideo_comma } { "3001 },
+ { ideo_full_stop } { "3002 },
+ { fwid_comma } { "FF0C },
+ { fwid_full_stop } { "FF0E },
+ { fwid_colon } { "FF1A },
+ { fwid_semicolon } { "FF1B },
+ { fwid_left_paren } { "FF08 },
+ { fwid_right_paren } { "FF09 }
+ }
+ { \@@_define_punct:nn #1 }
+% \end{macrocode}
+%
+% \begin{table}[ht]
+% \caption{常用标点符号}
+% \label{tab:punctuations}
+% \centering
+% \begin{tabular}{cccc}
+% \toprule
+% \textbf{中文名称} & \textbf{英文名称} & \textbf{符号} & \textbf{Unicode} \\
+% \midrule
+% 中文顿号 & Ideographic comma & \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}
+%
diff --git a/macros/latex/contrib/fduthesis/fduthesis.pdf b/macros/latex/contrib/fduthesis/fduthesis.pdf
new file mode 100644
index 0000000000..d3662983bf
--- /dev/null
+++ b/macros/latex/contrib/fduthesis/fduthesis.pdf
Binary files differ
diff --git a/macros/latex/contrib/fduthesis/fudan-emblem-new.pdf b/macros/latex/contrib/fduthesis/fudan-emblem-new.pdf
new file mode 100644
index 0000000000..06b96ca017
--- /dev/null
+++ b/macros/latex/contrib/fduthesis/fudan-emblem-new.pdf
Binary files differ
diff --git a/macros/latex/contrib/fduthesis/fudan-emblem.pdf b/macros/latex/contrib/fduthesis/fudan-emblem.pdf
new file mode 100644
index 0000000000..748fdccebb
--- /dev/null
+++ b/macros/latex/contrib/fduthesis/fudan-emblem.pdf
Binary files differ
diff --git a/macros/latex/contrib/fduthesis/fudan-name.pdf b/macros/latex/contrib/fduthesis/fudan-name.pdf
new file mode 100644
index 0000000000..b2a28de6ad
--- /dev/null
+++ b/macros/latex/contrib/fduthesis/fudan-name.pdf
Binary files differ