texlive[63202] Master/texmf-dist: njuthesis (1may22)

commits+karl at tug.org commits+karl at tug.org
Sun May 1 22:12:37 CEST 2022


Revision: 63202
          http://tug.org/svn/texlive?view=revision&revision=63202
Author:   karl
Date:     2022-05-01 22:12:37 +0200 (Sun, 01 May 2022)
Log Message:
-----------
njuthesis (1may22)

Modified Paths:
--------------
    trunk/Master/texmf-dist/doc/latex/njuthesis/njuthesis.pdf
    trunk/Master/texmf-dist/source/latex/njuthesis/njuthesis.dtx
    trunk/Master/texmf-dist/source/latex/njuthesis/njuthesis.ins
    trunk/Master/texmf-dist/tex/latex/njuthesis/njuthesis-graduate.def
    trunk/Master/texmf-dist/tex/latex/njuthesis/njuthesis-undergraduate.def
    trunk/Master/texmf-dist/tex/latex/njuthesis/njuthesis.cls

Modified: trunk/Master/texmf-dist/doc/latex/njuthesis/njuthesis.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/source/latex/njuthesis/njuthesis.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/njuthesis/njuthesis.dtx	2022-05-01 20:12:23 UTC (rev 63201)
+++ trunk/Master/texmf-dist/source/latex/njuthesis/njuthesis.dtx	2022-05-01 20:12:37 UTC (rev 63202)
@@ -111,7 +111,7 @@
 %
 %<class>\NeedsTeXFormat{LaTeX2e}
 %<*!(driver|install)>
-%<+!driver>\GetIdInfo $Id: njuthesis.dtx 0.17.0 2022-04-09 16:30:00 +0800 NJU LUG <git+nju-lug-email-3104-issue- at yaoge123.cn>$
+%<+!driver>\GetIdInfo $Id: njuthesis.dtx 0.18.0 2022-05-01 12:40:00 +0800 NJU LUG <git+nju-lug-email-3104-issue- at yaoge123.cn>$
 %<class>  {Thesis template for Nanjing University}
 %<class>\ProvidesExplClass{njuthesis}
 %<definition-ug>  {Undergraduate definition file for njuthesis}
@@ -124,7 +124,7 @@
 %<*driver>
 \ProvidesFile{njuthesis.dtx}
 \documentclass[fontset=fandol]{ctxdoc}
-\usepackage{listings,njuvisual,tabularray}
+\usepackage{listings,njuvisual,tabularray,unicode-math}
 \usepackage[firstpage=true]{background}
 \backgroundsetup{contents={\njuemblem[white!85!gray]{22cm}{!}},scale=1,angle=0,hshift=-4cm}
 \colorlet{at at guard}{njuviolet}
@@ -144,7 +144,10 @@
 \SetTblrStyle{caption-tag}{font=\bfseries}
 \SetTblrInner{row{1}={font=\bfseries}}
 \DefTblrTemplate{caption-sep}{default}{\quad}
-\lstdefinestyle{style at base}
+\setmathfont{XITSMath-Regular}[
+  BoldFont = XITSMath-Bold,
+  Extension = .otf]
+ \lstdefinestyle{style at base}
   {
     basewidth       = 0.5 em,
     gobble          = 3,
@@ -200,7 +203,7 @@
 % \thanks{E-mail: \href{mailto:git+nju-lug-email-3104-issue- at yaoge123.cn}
 %   {git+nju-lug-email-3104-issue- at yaoge123.cn}}}
 %
-% \date{v0.17.0 \quad 2022-04-09}
+% \date{v0.18.0 \quad 2022-05-01}
 %
 % \changes{v0.1}{2021/09/04}{开始开发。}
 % \changes{v0.2}{2021/09/07}{初步搭建了可用的模板。}
@@ -811,7 +814,7 @@
 % \end{latexexample}
 %
 %
-% \subsubsection{单双面模式}
+% \subsubsection{页面模式}
 %
 % \begin{function}[added=2022-01-14]{oneside,twoside}
 %   \begin{syntax}
@@ -822,17 +825,15 @@
 %
 % 本选项继承自 \hologo{LaTeX2e} \cls{book} 标准文档类。
 % 单双面选项为全局选项,开启后会改变页码编号,以及部分宏包的行为。
-% 在单面模式下,页面是连续的,不会产生空白页;在双面模式下,封面、摘要、
-% 参考文献表等特殊页面,以及新的章节都会从奇数页开始,更适合印刷输出。
+% 在单面模式下,页面是连续的,不会产生空白页;在双面模式下,
+% 新的一章以及封面、摘要、参考文献表等特殊页面都会从奇数页开始,
+% 在奇数页结束的内容后会补上一页空页,更适合印刷输出。
 %
-%
-% \subsubsection{草稿模式}
-%
 % \begin{function}[added=2021-12-15]{draft}
 %   \begin{syntax}
 %     draft = <\TFF>
 %   \end{syntax}
-% 选择是否开启草稿模式,默认关闭。
+% 是否开启草稿模式,默认关闭。
 % \end{function}
 %
 % 本选项继承自 \hologo{LaTeX2e} \cls{book} 标准文档类。
@@ -850,7 +851,21 @@
 % 宏包的代码环境不会显示内容,具体效果需要参照各个宏包的说明文档。
 % 如需抵消草稿模式的影响,请使用 \opt{final} 选项载入相关宏包。
 %
+% \begin{function}[added=2022-04-19]{blind}
+%   \begin{syntax}
+%     <blind>
+%   \end{syntax}
+% 是否开启盲审模式。这个选项并不包含 |=| 号。
+% \end{function}
 %
+% 盲审模式会抹除论文中的学校和个人信息,效果包括:
+% \begin{itemize}
+%   \item 不显示校名校徽图片
+%   \item 不显示“南京大学”字样
+%   \item 不显示作者、导师等基本信息
+% \end{itemize}
+%
+%
 % \subsubsection{配置文件}
 %
 % \begin{function}[added=2022-02-23]{config}
@@ -1124,21 +1139,21 @@
 % \begin{latexexample}[moretexcs={\njusetup},emph={[2]info}]
 %   \njusetup {
 %       info = {
-%           title = {第一行标题\\第二行标题},
-%           title* = {My title in English},
-%           keywords = {我,就是,充数的,关键词},
-%           keywords* = {Dummy,Keywords,Here,{it is}},
-%           grade = {2018},
-%           student-id = {189114514},
-%           author = {周煜华},
-%           author* = {Zhou Yuhua},
-%           department = {化学化工学院},
-%           department* = {School of Chemistry and Chemical Engineering},
-%           major = {化学},
-%           major* = {Chemistry},
-%           supervisor = {李成殿,教授},
-%           supervisor*= {Professor Li Chengdian},
-%           submit-date = {2021-09-12}
+%           title        = {第一行标题\\第二行标题},
+%           title*       = {My title in English},
+%           keywords     = {我,就是,充数的,关键词},
+%           keywords*    = {Dummy, Keywords, Here, {it is}},
+%           grade        = {2018},
+%           student-id   = {189114514},
+%           author       = {周煜华},
+%           author*      = {Zhou Yuhua},
+%           department   = {化学化工学院},
+%           department*  = {School of Chemistry and Chemical Engineering},
+%           major        = {化学},
+%           major*       = {Chemistry},
+%           supervisor   = {李成殿,教授},
+%           supervisor*  = {Professor Li Chengdian},
+%           submit-date  = {2021-09-12}
 %         }
 %     }
 % \end{latexexample}
@@ -1148,30 +1163,30 @@
 % \begin{latexexample}[moretexcs={\njusetup},emph={[2]info}]
 %   \njusetup {
 %       info = {
-%           title = {第一行标题\\第二行标题\\第三行标题},
-%           title* = {My title in English},
-%           keywords = {我,就是,充数的,关键词},
-%           keywords* = {Dummy,Keywords,Here,{it is}},
-%           grade = {2018},
-%           student-id = {DZ18114514},
-%           author = {周煜华},
-%           author* = {Zhou Yuhua},
-%           department = {化学化工学院},
-%           department* = {School of Chemistry and Chemical Engineering},
-%           major = {化学},
-%           major* = {Chemistry},
-%           field = {物理化学},
-%           field* = {Physical Chemistry},
-%           supervisor = {李成殿,教授},
-%           supervisor*= {Professor Li Chengdian},
-%           submit-date = {2021-09-12},
-%           defend-date = {2022-01-15},
-%           email = {git+nju-lug-email-3104-issue- at yaoge123.cn},
-%           chairman = {张晓山~教授},
-%           reviewer = {王瑞希~教授,郭德纲~副教授,华芈库~教授,戴菲菲~教授},
-%           clc = {0175.2},
+%           title        = {第一行标题\\第二行标题\\第三行标题},
+%           title*       = {My title in English},
+%           keywords     = {我,就是,充数的,关键词},
+%           keywords*    = {Dummy,Keywords,Here,{it is}},
+%           grade        = {2018},
+%           student-id   = {DZ18114514},
+%           author       = {周煜华},
+%           author*      = {Zhou Yuhua},
+%           department   = {化学化工学院},
+%           department*  = {School of Chemistry and Chemical Engineering},
+%           major        = {化学},
+%           major*       = {Chemistry},
+%           field        = {物理化学},
+%           field*       = {Physical Chemistry},
+%           supervisor   = {李成殿,教授},
+%           supervisor*  = {Professor Li Chengdian},
+%           submit-date  = {2021-09-12},
+%           defend-date  = {2022-01-15},
+%           email        = {git+nju-lug-email-3104-issue- at yaoge123.cn},
+%           chairman     = {张晓山~教授},
+%           reviewer     = {王瑞希~教授,郭德纲~副教授,华芈库~教授,戴菲菲~教授},
+%           clc          = {0175.2},
 %           secret-level = {限制},
-%           udc = {004.72},
+%           udc          = {004.72},
 %           supervisor-contact = {拉太赫科学与技术学院 枝江市结丘路 19 号 114514}
 %         }
 %     }
@@ -1252,7 +1267,7 @@
 % \end{latexexample}
 %
 %
-% \subsubsection{文字}
+% \subsubsection{字形}
 %
 % \begin{function}{\songti,\heiti,\kaishu,\fangsong,\zihao}
 %   \begin{syntax}
@@ -1269,9 +1284,29 @@
 %   \begin{syntax}
 %     \tn{njuline}\Arg{文字}
 %   \end{syntax}
-% 为了避免原生\tn{uline}命令在中文环境下不能正常换行的问题,本模板使用\tn{njuline}作为替代方案,分别对 \hologo{XeLaTeX} 的 \pkg{xeCJKfntef} 包和 \hologo{LuaLaTeX} 的 \pkg{lua-ul} 包中的下划线命令进行了包装。
+% 为了避免原生 \tn{uline} 命令在中文环境下不能正常换行的问题,
+% 本模板使用 \tn{njuline} 作为替代方案,分别对 \hologo{XeLaTeX} 的
+% \pkg{xeCJKfntef} 包和 \hologo{LuaLaTeX} 的 \pkg{lua-ul}
+% 包中的下划线命令进行了包装。
 % \end{function}
 %
+% \subsubsection{列表}
+%
+% \begin{function}{itemize,enumerate,description}
+%   \begin{syntax}
+%     \tn{begin}\marg{列表环境}
+%       \tn{item}\oarg{标签1} \meta{条目1}
+%       \tn{item}\oarg{标签2} \meta{条目2}
+%       ...
+%     \tn{end}\marg{列表环境}
+%   \end{syntax}
+% 添加列表环境。
+% \end{function}
+%
+% 模板默认载入 \pkg{enumitem} 宏包,对三个常用列表环境内的条目间距进行压缩。
+%
+% \subsubsection{脚注}
+%
 % \begin{function}{\footnote}
 %   \begin{syntax}
 %     \tn{footnote}\Arg{脚注}
@@ -1279,6 +1314,13 @@
 % 添加脚注。
 % \end{function}
 %
+% \begin{function}[added=2022-05-01]{style/footnote-style}
+%   \begin{syntax}
+%     footnote-style = <(plain)|pifont>
+%   \end{syntax}
+% 设置脚注编号样式。默认为普通数字,使用 |pifont|
+% 选项可修改为带圈数字。单一页面内请尽量避免超过 10 条脚注。
+% \end{function}
 %
 % \subsubsection{图片}
 %
@@ -1293,9 +1335,8 @@
 %
 % 在使用特定类型的图片文件时,可以省略其扩展名,包括 \file{*.jpg}, \file{*.png}, \file{*.pdf}, \file{*.eps}。
 %
+% \paragraph{单张图片}
 %
-% \paragraph{图片}
-%
 % 下面这个例子展示了如何插入一张名称为 \file{myfig.jpg},宽度占页面文字宽度一半的图片。注意标签命令 \tn{label} 必须放在图注命令 \tn{caption} 之后。
 % \begin{latexexample}[moretexcs={\includegraphics},emph={[1]figure}]
 %   \begin{figure}[h]
@@ -1308,7 +1349,6 @@
 %
 % \emph{以下图片相关功能的实现均需要手动载入相关宏包}。
 %
-%
 % \paragraph{文字环绕}
 %
 % 对于较为瘦长,或者仅起到辅助作用的图像,可以使用 \pkg{wrapfig} 宏包提供的 \env{wrapfigure} 实现文字环绕效果。注意这个环境后紧跟的一行不能为空。
@@ -1322,7 +1362,6 @@
 %   <text>
 % \end{latexexample}
 %
-%
 % \paragraph{多张嵌套}
 %
 % 使用 \pkg{subcaption} 宏包提供的 \env{subfigure} 环境可以实现多张图片嵌套的效果。
@@ -1349,7 +1388,6 @@
 %
 % 请尽量避免使用较为老旧的 \pkg{subfig} 宏包,完全不要使用过时的 \pkg{subfigure} 宏包。两者的 CTAN 页面上均建议转移至更新的 \pkg{subcaption} 宏包。
 %
-%
 % \subsubsection{表格}
 %
 % 下面这个例子展示了如何插入一张表格。通过 \pkg{booktabs} 宏包提供的 \tn{toprule}、\tn{midrule} 和 \tn{bottomrule} 命令,我们可以很轻松地绘制出一张漂亮规范的三线表。
@@ -1370,7 +1408,6 @@
 %
 % \emph{以下表格功能的实现均需要手动载入相关宏包。}
 %
-%
 % \paragraph{合并单元格}
 %
 % \begin{function}{\multirow,\multicolumn}
@@ -1384,7 +1421,6 @@
 % TODO:\pkg{multirow} 宏包的使用方法,命令较为复杂。
 % \url{http://www.ctex.org/documents/packages/table/multirow.htm}
 %
-%
 % \paragraph{更多样式}
 %
 % \pkg{tabularray} 宏包\cite{tabularray}运用 \hologo{LaTeX3} 语法重新实现了表格的绘制,提供了简明的用户接口与丰富的单元格样式,详见其使用手册。
@@ -1402,29 +1438,78 @@
 % \end{latexexample}
 %
 % 如不需要编号,可以用 \env{equation*} 或者 |\[|\meta{公式}|\]|,
-% 请不要使用可能引发问题的 |$$|\meta{公式}|$$|\footnote{\url{https://tex.stackexchange.com/questions/503/why-is-preferable-to}}。
+% 请不要使用可能引发问题的 |$$|\meta{公式}|$$|
+% \footnote{\url{https://tex.stackexchange.com/q/503/}}。
 %
 %
 % \paragraph{符号和单位}
 %
-% 模板使用 \pkg{unicode-math} 配置数学字体,可以替代传统方案下的 \pkg{bm}、
-% \pkg{mathrsfs} 等宏包\footnote{\url{https://tex.stackexchange.com/questions/528831/why-doesnt-the-bm-package-work-with-the-unicode-math-package}}。
-% 相应地,也需要使用新方案提供的命令。例如,加粗数学符号的命令可以使用
-% \tn{symbf}。更多细节请查阅 \pkg{unicode-math} 手册。
+% ^^A \url{https://www.caam.rice.edu/~heinken/latex/symbols.pdf}
+% 模板使用 \pkg{unicode-math} 宏包配置数学字体,完整符号表可以参考
+% \href{http://mirrors.ctan.org/macros/unicodetex/latex/unicode-math/unimath-symbols.pdf}{\file{unimath-symbols.pdf}}。
+% 该方案目前不兼容传统的 \pkg{amsfonts}、\pkg{amssymb}、\pkg{bm}
+% \footnote{\url{https://tex.stackexchange.com/q/528831/}}
+% 、\pkg{upgreek} 等宏包。需要使用新方案提供的相应命令。
+% 例如,加粗数学符号的命令为 \tn{symbf}。
+% 更多细节请查阅 \pkg{unicode-math} 手册。
 %
-% 符号表可以参考 \url{https://www.caam.rice.edu/~heinken/latex/symbols.pdf}。
+% ^^A 本段说明来自 THuThesis,待补充相应配置
+% 中文论文的数学符号默认遵循 GB/T 3102--93《物理科学和技术中
+% 使用的数学符号》\cite{gb-3102-93},该标准参照采纳 ISO 31-11:1992,
+% 但是与 \TeX{} 默认的美国数学学会(AMS)的习惯有许多差异。
+% 本模板尚未完成自动样式适配,一些需要写作时手动处理的要点包括:
+% \begin{itemize}
+% ^^A   \item 小于等于号和大于等于号使用斜线($\leqslant$、$\geqslant$)
+%   \item 数学常数和特殊函数名用正体,如
+%   \begin{itemize}
+%     \item $\uppi$ 使用 |$\uppi$|
+%     \item $\symup{i}$ 使用 |$\symup{e}$|
+%     \item $\symup{e}$ 使用 |$\symup{i}$|
+%   \end{itemize}
+%   \item 微分号使用正体,如
+%   \begin{itemize}
+%     \item $\mathrm{d} \varphi / \mathrm{d} t$
+%           使用 |$\mathrm{d} \varphi / \mathrm{d} t$|
+%   \end{itemize}
+% ^^A 可以提供一个设置项,|\renewcommand{\vec}[1]{\symbf{#1}}|
+%   \item 向量、矩阵和张量用粗斜体(\cs{symbf}),如
+%   \begin{itemize}
+%     \item $\symbf{\Sigma}$ 使用 |$\symbf{\Sigma}$|
+%     \item $\symbfsf{T}$ 使用 |$\symbfsf{T}$|
+%   \end{itemize}
+% \end{itemize}
 %
-% 单位请参考相关国家标准\footnote{GB 3100-1993, GB/T 3101-1993, GB/T 3102-1993},使用 \pkg{siunitx} 宏包。\pkg{siunitx} 是一个更新频繁的包,可能会引发兼容性问题。
+% 单位默认遵循 GB 3100--93《国际单位制及其应用》\cite{gb-3100-93}和
+% GB 3101--93《有关量、单位和符号的一般原则》\cite{gb-3101-93},
+% SI 单位可通过载入 \pkg{siunitx} 宏包\cite{siunitx}进行输入。
+% ^^A \pkg{siunitx} 是一个更新频繁的包,可能会引发兼容性问题。
 %
-%
 % \paragraph{定理环境}
 %
 % 本模板也提供了一系列的数学定理环境。
-% 全部预定义的数学定理环境如表~\ref{tab:mathenv} 所示。其中证明环境较为特殊,会在结尾添加证毕符号(\mdwhtsquare)。用户也可以选择使用 \tn{newtheorem} 定义新的定理环境。
 %
+% \begin{function}[added=2022-04-21]{theorem/predefine}
+%   \begin{syntax}
+%     predefine = <\TTF>
+%   \end{syntax}
+% 是否使用模板默认配置的定理环境。默认会载入 \pkg{ntheorem} 并进行相关设置。
+% \end{function}
+%
+% 全部预定义的数学定理环境如表~\ref{tab:mathenv} 所示。
+% 其中证明环境较为特殊,会在结尾添加证毕符号(\mdwhtsquare)。
+% 当然,你也可以创建属于自己的定理环境,其样式继承自前部的设定。
+%
+% \begin{function}{\newtheorem,\newtheorem*,\renewtheorem}
+%   \begin{syntax}
+%     \cs{newtheorem}\marg{环境名称}\marg{标题名称}\oarg{计数器范围}
+%   \end{syntax}
+% 定义新的定理环境或者修改已有的定理环境。带星号的命令不包含计数器。
+% 本模板中请在 |\begin{document}| 后进行定制。
+% \end{function}
+%
 % \begin{table}[htbp]
 %   \centering
-%   \caption{数学定理环境}
+%   \caption{预置的数学定理环境}
 %   \label{tab:mathenv}
 %   \begin{tabular}{cc|cc}
 %     \toprule
@@ -1449,7 +1534,54 @@
 %   \end{definition}
 % \end{latexexample}
 %
+% 对于预置的定理环境样式,本模板也提供了一系列选项进行修改。
+% 这些选项目前只对模板预定义的若干种环境有效。
 %
+% \begin{function}[added=2022-04-21]{theorem/style}
+%   \begin{syntax}
+%     style = <(plain)|break|change|margin|empty|...>
+%   \end{syntax}
+% 定理基本样式。等效于 \cs{theoremstyle}\marg{样式名称}。
+% \end{function}
+%
+% \begin{function}[added=2022-04-21]{theorem/header-font}
+%   \begin{syntax}
+%     header-font = \meta{头部字体格式}
+%   \end{syntax}
+% 定理头部字体格式。等效于 \cs{theoremheaderfont}\marg{格式}。
+% \end{function}
+%
+% \begin{function}[added=2022-04-21]{theorem/body-font}
+%   \begin{syntax}
+%     body-font = \meta{内部字体格式}
+%   \end{syntax}
+% 定理内部字体格式。等效于 \cs{theorembodyfont}\marg{格式}。
+% \end{function}
+%
+% \begin{function}[added=2022-04-21]{theorem/counter}
+%   \begin{syntax}
+%     counter = <part|(chapter)|section|...>
+%   \end{syntax}
+% 定理计数器范围。
+% \end{function}
+%
+% 模板的默认设置等效于
+%
+% \begin{latexexample}[moretexcs={\njusetup,\bfseries,\itshape,\mdwhtsquare},
+%   emph={[2]theorem}]
+%   \njusetup {
+%       theorem = {
+%           predefine   = true,
+%           style       = plain,
+%           header=font = \normalfont \bfseries,
+%           body-font   = \itshape,
+%           qed-symbol  = \ensuremath { \mdwhtsquare },
+%           counter     = chapter
+%         }
+%     }
+% \end{latexexample}
+%
+%
 % \subsubsection{代码}
 % \changes{v0.13}{2021/12/13}{提供简化的行内代码环境。}
 % \changes{v0.13}{2021/12/16}{默认不加载 \pkg{listings} 宏包。}
@@ -1611,15 +1743,11 @@
 %     }
 % \end{latexexample}
 %
-% 如果开启了草稿模式,您可能会注意到部分条目存在超宽的问题,这时就要果断假装没有看到。
-% 该问题的产生是由于 \hologo{LaTeX} 中只有固定的字母组合中间可以断行。使条目右侧平齐的方法有如下两种
-% \footnote{详见 \url{https://github.com/nju-lug/NJUThesis/issues/57}。很不幸,\pkg{microtype} 与 \pkg{babel} 没能在我们的模板中解决问题。}:
-% \begin{itemize}
-%   \item 自行在 \file{.bib} 文件中设置断行点,例如可以将 graphene 一词修改为 graph|\-|ene。缺点是需要逐条手动排查,建议在定稿时进行修改。
-%   \item 在 |\printbibliography| 前添加 |\sloppy| 命令拉伸词间距,缺点是可能降低美观度。
-% \end{itemize}
+% 如果开启了草稿模式,您可能会注意到部分条目存在超宽的问题。
+% 对此,需要将 \pkg{biblatex-gb7714-2015} 宏包手动更新至 2022-04-16 以后的版本。
+% 此外,由于 \TeX{} 预置的断词位置是有限的,不能覆盖学术上使用的复杂词汇,
+% 您也可以自行在 \file{.bib} 文件中设置断行点,例如可以将 graphene 一词修改为 graph|\-|ene。
 %
-%
 % \subsubsection{正文引用}
 %
 % \begin{function}{\cite}
@@ -2059,6 +2187,21 @@
 %
 % \subsection*{标准、规范}
 %
+% \bibitem{gb-3100-93}
+% 全国信息与文献标准化技术委员会.
+% \newblock \textit{国际单位制及其应用: GB 3100--93} [S].
+% \newblock 北京: 中国标准出版社, 1993
+%
+% \bibitem{gb-3101-93}
+% 全国信息与文献标准化技术委员会.
+% \newblock \textit{有关量、单位和符号的一般原则: GB 3101--93} [S].
+% \newblock 北京: 中国标准出版社, 1993
+%
+% \bibitem{gb-3102-93}
+% 全国信息与文献标准化技术委员会.
+% \newblock \textit{物理科学和技术中使用的数学符号: GB/T 3102--93} [S].
+% \newblock 北京: 中国标准出版社, 1993
+%
 % \bibitem{gb-t-7408-2005}
 % 全国信息与文献标准化技术委员会.
 % \newblock \textit{数据元和交换格式\quad 信息交换~ 日期和时间表示法: GB/T 7408--2005} [S].
@@ -2131,6 +2274,14 @@
 % \urlprefix\url{https://ctan.org/pkg/njuvisual}
 % \urlprefix\CTANurl[文档:]{macros/latex/contrib/njuvisual/njuvisual.pdf}
 %
+% \bibitem{siunitx}
+% \textsc{Wright J}.
+% \newblock \textit{A comprehensive (SI) units package} [EB/OL].
+% \newblock version 3.1.0,
+% \newblock (2022-04-25)
+% \urlprefix\url{https://www.ctan.org/pkg/siunitx}
+% \urlprefix\CTANurl[文档:]{macros/latex/contrib/siunitx/siunitx.pdf}
+%
 % \bibitem{tabularray}
 % \textsc{Jianrui Lyu}.
 % \newblock \textit{Typeset tabulars and arrays with \hologo{LaTeX3}} [EB/OL].
@@ -2398,17 +2549,17 @@
 %    \end{macrocode}
 % \end{variable}
 %
-% \begin{variable}{\g_@@_name_type_clist,\g_@@_name_type_en_clist,
-%   \g_@@_name_degree_clist,\g_@@_name_degree_en_clist}
+% \begin{variable}{\c_@@_name_type_clist,\c_@@_name_type_en_clist,
+%   \c_@@_name_degree_clist,\c_@@_name_degree_en_clist}
 % 论文类型与学位类型。
 %    \begin{macrocode}
-\clist_const:Nn \g_@@_name_type_clist
+\clist_const:Nn \c_@@_name_type_clist
   { 毕业论文, 毕业设计 }
-\clist_const:Nn \g_@@_name_type_en_clist
+\clist_const:Nn \c_@@_name_type_en_clist
   { THESIS, DESIGN }
-\clist_const:Nn \g_@@_name_degree_clist
+\clist_const:Nn \c_@@_name_degree_clist
   { 学士, 硕士, 硕士专业, 博士 }
-\clist_const:Nn \g_@@_name_degree_en_clist
+\clist_const:Nn \c_@@_name_degree_en_clist
   { Bachelor, Master, Master, Doctor~of~Philosophy }
 %    \end{macrocode}
 % \end{variable}
@@ -2424,7 +2575,23 @@
 %    \end{macrocode}
 % \end{variable}
 %
+% \begin{variable}{\c_@@_blind_info_clist,\c_@@_blind_info_en_clist,
+%   \c_@@_blind_infolist_clist}
+% 盲审模式下不显示的个人信息项。
+%    \begin{macrocode}
+\clist_const:Nn \c_@@_blind_info_clist
+  {
+    author, chairman, clc, dept, email, field, grade,
+    id, major, secretlv, supvcont, udc
+  }
+\clist_const:Nn \c_@@_blind_info_en_clist
+  { author, dept, field, major, supv, supv_ii }
+\clist_const:Nn \c_@@_blind_infolist_clist
+  { reviewer, supv, supv_ii }
+%    \end{macrocode}
+% \end{variable}
 %
+%
 % \subsection{内部函数}
 %
 % \begin{macro}{\@@_quad:,\@@_qquad:}
@@ -2438,8 +2605,8 @@
 % \begin{macro}{\@@_vskip:,\@@_hskip:}
 % 生成一个较小的 skip。
 %    \begin{macrocode}
-\cs_new:Nn \@@_vskip: { \skip_vertical:N   \g_@@_smallvskip_dim }
-\cs_new:Nn \@@_hskip: { \skip_horizontal:N \g_@@_smallhskip_dim }
+\cs_new:Nn \@@_vskip: { \skip_vertical:N   \c_@@_smallvskip_dim }
+\cs_new:Nn \@@_hskip: { \skip_horizontal:N \c_@@_smallhskip_dim }
 %    \end{macrocode}
 % \end{macro}
 %
@@ -2461,16 +2628,11 @@
 % 用来定义默认名称的辅助函数。
 %    \begin{macrocode}
 \cs_new_protected:Npn \@@_define_name:nn #1#2
-  {
-    \tl_new:c   { g_@@_name_ #1    _tl }
-    \tl_gset:cn { g_@@_name_ #1    _tl } { #2 }
-  }
+  { \tl_const:cn { c_@@_name_ #1    _tl } { #2 } }
 \cs_new_protected:Npn \@@_define_name:nnn #1#2#3
   {
-    \tl_new:c   { g_@@_name_ #1    _tl }
-    \tl_gset:cn { g_@@_name_ #1    _tl } { #2 }
-    \tl_new:c   { g_@@_name_ #1 _en_tl }
-    \tl_gset:cn { g_@@_name_ #1 _en_tl } { #3 }
+    \tl_const:cn { c_@@_name_ #1    _tl } { #2 }
+    \tl_const:cn { c_@@_name_ #1 _en_tl } { #3 }
   }
 %    \end{macrocode}
 % \end{macro}
@@ -2479,10 +2641,7 @@
 % 用来定义默认样式的辅助函数。
 %    \begin{macrocode}
 \cs_new_protected:Npn \@@_define_fmt:nn #1#2
-  {
-    \tl_new:c   { g_@@_fmt_ #1 _tl }
-    \tl_gset:cn { g_@@_fmt_ #1 _tl } { #2 }
-  }
+  { \tl_const:cn { c_@@_fmt_ #1 _tl } { #2 } }
 %    \end{macrocode}
 % \end{macro}
 %
@@ -2490,15 +2649,9 @@
 % 用来定义默认间距的辅助函数。
 %    \begin{macrocode}
 \cs_new_protected:Npn \@@_define_dim:nn #1#2
-  {
-    \dim_new:c   { g_@@_ #1 _dim }
-    \dim_gset:cn { g_@@_ #1 _dim } { #2 }
-  }
+  { \dim_const:cn  { c_@@_ #1 _dim  } { #2 } }
 \cs_new_protected:Npn \@@_define_skip:nn #1#2
-  {
-    \skip_new:c   { g_@@_ #1 _skip }
-    \skip_gset:cn { g_@@_ #1 _skip } { #2 }
-  }
+  { \skip_const:cn { c_@@_ #1 _skip } { #2 } }
 %    \end{macrocode}
 % \end{macro}
 %
@@ -2516,7 +2669,7 @@
 % \begin{macro}{\@@_name:n,\@@_info:n}
 % 根据变量名调用名称和内容信息。
 %    \begin{macrocode}
-\cs_new:Npn \@@_name:n #1 { \tl_use:c { g_@@_name_ #1 _tl } }
+\cs_new:Npn \@@_name:n #1 { \tl_use:c { c_@@_name_ #1 _tl } }
 \cs_new:Npn \@@_info:n #1 { \tl_use:c { g_@@_info_ #1 _tl } }
 %    \end{macrocode}
 % \end{macro}
@@ -2579,24 +2732,6 @@
 %    \end{macrocode}
 % \end{macro}
 %
-% \begin{macro}{\@@_put_inempty_seg:nnn}
-% 将固定长度的非空字符串插入 |clist|。
-% \begin{arguments}
-%   \item 原始字符串
-%   \item 起始位置
-%   \item 长度
-% \end{arguments}
-%    \begin{macrocode}
-\cs_new_protected:Npn \@@_put_inempty_seg:nnn #1#2#3
-  {
-    \tl_set:Nx \l_@@_tmpa_tl
-      { \tl_range:Nnn { #1 } { #2 } { #2 + #3 - 1 } }
-    \tl_if_empty:NF \l_@@_tmpa_tl
-      { \clist_put_right:NV \l_@@_tmp_clist { \l_@@_tmpa_tl } }
-  }
-%    \end{macrocode}
-% \end{macro}
-%
 % \begin{macro}{\@@_uline:n}
 % 指定宽度的下划线。
 % \begin{arguments}
@@ -2761,17 +2896,17 @@
   {
     \tl_if_empty:NT \g_@@_info_title_tl
       { \msg_error:nn { njuthesis } { missing-title } }
-    \@@_spread_box:nnV { #2 } { \kaishu } \g_@@_name_title_tl
+    \@@_spread_box:nnV { #2 } { \kaishu } \c_@@_name_title_tl
     \mode_leave_vertical: \@@_hskip:
 %    \end{macrocode}
 % 这里需要存储 \tn{baselineskip} 的值,以使 \tn{parbox} 后行距正确。
-% \footnote{\url{https://tex.stackexchange.com/questions/34971/how-to-keep-a-constant-baselineskip-when-using-minipages-or-parboxes}}
+% \footnote{\url{https://tex.stackexchange.com/q/34971/}}
 %    \begin{macrocode}
     \parbox [ t ] { #3 }
       {
-        \dim_set_eq:NN \baselineskip \g_@@_coverlineskip_dim
+        \dim_set_eq:NN \baselineskip \c_@@_coverlineskip_dim
         #1 \@@_uline_title:
-        \dim_set_eq:NN \l_@@_tmpa_dim \prevdepth
+        \dim_gset_eq:NN \l_@@_tmpa_dim \prevdepth
       }
     \par \prevdepth \l_@@_tmpa_dim
   }
@@ -2834,7 +2969,7 @@
     \@@_ulined_center_box:nn { #3 }
       { \clist_item:cn { g_@@_info_ #1 _clist } { 1 } }
     \@@_hskip:
-    \@@_spread_box:nnV { #2 } { \kaishu } \g_@@_name_supv_ttl_tl
+    \@@_spread_box:nnV { #2 } { \kaishu } \c_@@_name_supv_ttl_tl
     \@@_hskip:
     \@@_ulined_center_box:nn { #3 }
       { \clist_item:cn { g_@@_info_ #1 _clist } { 2 } }
@@ -2843,6 +2978,17 @@
 %    \end{macrocode}
 % \end{macro}
 %
+% \begin{macro}{\@@_emblem:N,\@@_name:N}
+% 封装图片绘制命令,参数为图片宽度。
+% 此时 \cs{njuemblem}、\cs{njuname} 和相关长度都是没有定义的。
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_emblem:N #1
+  { \njuemblem [ black ] { #1 } { ! } }
+\cs_new_protected:Npn \@@_name:N   #1
+  { \njuname   [ black ] { #1 } { ! } }
+%    \end{macrocode}
+% \end{macro}
+%
 % \subsubsection{摘要相关}
 %
 % \begin{macro}{\@@_abs_bookmark:nn,\@@_abs_bookmark:Vn}
@@ -2905,8 +3051,10 @@
 %   \item 内容
 %   \item 左边距
 % \end{arguments}
-% 这里使用了 Primitive \TeX{} 语法以利用原生的断行算法\footnote{\url{https://tex.stackexchange.com/questions/637861/underline-list-item-to-page-width}}。
-% 对其语法的简要介绍可以参考 \href{http://petr.olsak.net/ftp/olsak/optex/tex-nutshell.pdf}{\file{tex-nutshell.pdf}}。
+% 这里使用了 Primitive \TeX{} 语法以利用原生的断行算法
+% \footnote{\url{https://tex.stackexchange.com/q/637861/}}。
+% 对其语法的简要介绍可以参考
+% \href{http://petr.olsak.net/ftp/olsak/optex/tex-nutshell.pdf}{\file{tex-nutshell.pdf}}。
 %    \begin{macrocode}
 \cs_new_protected:Npn \@@_uline_list:nnn #1#2#3
   {
@@ -3062,7 +3210,8 @@
   }
   {
     \AssignTemplateKeys
-    \newpage
+    \clearpage
+    \thispagestyle { empty }
     \__nju_vskip:N \l_@@_top_skip
     \group_begin:
       \l_@@_format_tl
@@ -3155,6 +3304,15 @@
 %    \end{macrocode}
 % \end{macro}
 %
+% \begin{macro}{blind}
+% \changes{v0.18}{2022/04/19}{新增盲审模式选项。}
+% 盲审模式。
+%    \begin{macrocode}
+    blind     .value_forbidden:n  = true,
+    blind            .bool_set:N  = \g_@@_blind_bool,
+%    \end{macrocode}
+% \end{macro}
+%
 % \begin{macro}{latin-font,cjk-font}
 % \changes{v0.14}{2021/12/12}{简化字体选项名称。}
 % 字体选项。
@@ -3185,14 +3343,22 @@
 %
 % \subsection{用户接口}
 %
-% \begin{macro}{bib,info,style}
-% 定义元(meta)键值对。
+% \begin{macro}{bib,info,style,theorem}
+% 定义元(meta)键值对。为 v1.0 升级预留了新的接口。
 %    \begin{macrocode}
 \keys_define:nn { nju }
   {
-    bib   .meta:nn = { nju / bib   } { #1 },
-    info  .meta:nn = { nju / info  } { #1 },
-    style .meta:nn = { nju / style } { #1 }
+    % abstract .meta:nn = { nju / abstract } { #1 },
+    bib      .meta:nn = { nju / bib      } { #1 },
+    % cover    .meta:nn = { nju / cover    } { #1 },
+    % font     .meta:nn = { nju / font     } { #1 },
+    % footer   .meta:nn = { nju / footer   } { #1 },
+    % footnote .meta:nn = { nju / footnote } { #1 },
+    % header   .meta:nn = { nju / header   } { #1 },
+    info     .meta:nn = { nju / info     } { #1 },
+    style    .meta:nn = { nju / style    } { #1 },
+    theorem  .meta:nn = { nju / theorem  } { #1 }
+    % toc      .meta:nn = { nju / toc      } { #1 }
   }
 %    \end{macrocode}
 % \end{macro}
@@ -3210,7 +3376,7 @@
 % 定义修改固定文本的接口。
 %    \begin{macrocode}
 \NewDocumentCommand \njusetformat { m m }
-  { \tl_gset:cn { g_@@_fmt_ #1 _tl } { #2 } }
+  { \tl_gset:cn { c_@@_fmt_ #1 _tl } { #2 } }
 %    \end{macrocode}
 % \end{macro}
 %
@@ -3221,8 +3387,8 @@
 \NewDocumentCommand \njusetlength { s m m }
   {
     \bool_if:nTF { #1 }
-      { \skip_gset:cn { g_@@_ #2 _skip } { #3 } }
-      { \dim_gset:cn  { g_@@_ #2 _dim  } { #3 } }
+      { \skip_gset:cn { c_@@_ #2 _skip } { #3 } }
+      { \dim_gset:cn  { c_@@_ #2 _dim  } { #3 } }
   }
 %    \end{macrocode}
 % \end{macro}
@@ -3256,7 +3422,7 @@
     \bool_if:nTF       { #1 }
       { \tl_set:Nn  \l_@@_tmpb_tl { _en  } }
       { \tl_clear:N \l_@@_tmpb_tl          }
-    \tl_gset:cn { g_@@_ #5 _ #2 \l_@@_tmpa_tl \l_@@_tmpb_tl _tl } {#4}
+    \tl_gset:cn { c_@@_ #5 _ #2 \l_@@_tmpa_tl \l_@@_tmpb_tl _tl } {#4}
   }
 %    \end{macrocode}
 % \end{macro}
@@ -3303,7 +3469,6 @@
   {
     { no-math           } { fontspec     },
     { perpage           } { footmisc     },
-    { amsmath, thmmarks } { ntheorem     },
     { hyphens           } { url          },
     { warnings-off={ mathtools-colon, mathtools-overbracket } }
                           { unicode-math },
@@ -3326,12 +3491,14 @@
   {
     geometry,
     fancyhdr,
+    footmisc,
     setspace,
 %    \end{macrocode}
 % \changes{v0.13}{2021/12/13}{使用 \pkg{ntheorem} 创建定理环境,删除
 %   \pkg{amsthm} 和 \pkg{thmtools}。}
 % \changes{v0.16}{2022/03/19}{不显式载入 \pkg{amsmath}。}
-% 数学相关的宏包。其中,\pkg{amsmath} 必须在 \pkg{unicode-math} 前加载。
+% \changes{v0.18}{2022/04/20}{不强制载入 \pkg{ntheorem}。}
+% 数学相关的宏包。其中,\pkg{amsmath} 会被 \pkg{unicode-math} 自动载入。
 % \pkg{unicode-math} 指定了 \hologo{XeTeX} 和 \hologo{LuaTeX} 下所使用的
 % 数学字体。用于配置数学环境的 \pkg{mathtools} 会与 \pkg{unicode-math}
 % 发生冲突,需要手动消除其警告。
@@ -3338,7 +3505,6 @@
 %    \begin{macrocode}
     mathtools,
     unicode-math,
-    ntheorem,
 %    \end{macrocode}
 % \changes{v0.14}{2021/12/21}{移除内置的 \pkg{multirow}、\pkg{subcaption}
 %   和 \pkg{wrapfig}。}
@@ -3394,8 +3560,8 @@
   { \RequirePackage { tabularray } }
 %    \end{macrocode}
 %
-% \begin{macro}{\@@_check_package:nnn}
-% 检查过时宏包。
+% \begin{macro}{\@@_check_pkg_version:nnn}
+% 检查宏包版本是否过时。
 %    \begin{macrocode}
 \msg_new:nnn { njuthesis } { package-too-old }
   {
@@ -3405,7 +3571,7 @@
     Please~ update~ an~ up-to-date~ version~ of~ it~
     using~ your TeX~ package~ manager~ or~ from~ CTAN.
   }
-\cs_new_protected:Npn \@@_check_package:nnn #1#2#3
+\cs_new_protected:Npn \@@_check_pkg_version:nnn #1#2#3
   {
     \@ifpackagelater {#1} {#2}
       { } { \msg_error:nnnn { njuthesis } { package-too-old } {#1} {#3} }
@@ -3417,10 +3583,49 @@
 % 解决了下划线中断问题,然而在 2021-10-24 的更新才提供了正确的内嵌日期。
 %    \begin{macrocode}
 \sys_if_engine_luatex:T
-  { \@@_check_package:nnn { luatexja } { 2021/10/24 } { 20211024.0 } }
+  { \@@_check_pkg_version:nnn { luatexja } { 2021/10/24 } { 20211024.0 } }
 %    \end{macrocode}
 %
+% \changes{v0.18}{2022/04/28}{增加宏包冲突检查。}
+%    \begin{macrocode}
+\RequirePackage { filehook }
+%    \end{macrocode}
 %
+% \begin{macro}{\@@_check_pkg_conflict:nn}
+% 检查用户载入的宏包是否会与预置宏包发生冲突。
+% \begin{arguments}
+%   \item 模板载入的宏包
+%   \item 产生冲突的宏包
+%   \item 替代的解决办法
+% \end{arguments}
+%    \begin{macrocode}
+\msg_new:nnn { njuthesis } { package-conflict }
+  {
+    The~ "#2"~ package~ is~ incompatible~ with~ "#1".\\
+    I~ have~ loaded~ "#1"~ by~ default.~ Maybe~ You~ should~
+    refer~ to~ section~ 4~ of~ the~ "njuthesis"~ manual.
+  }
+\cs_new_protected:Npn \@@_check_pkg_conflict:nn #1#2
+  {
+    \AtEndOfPackageFile * { #1 }
+      {
+        \AtBeginOfPackageFile * { #2 }
+          { \msg_error:nnnn { njuthesis } { package-conflict } {#1} {#2} }
+      }
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+% 检查数学宏包冲突。
+%    \begin{macrocode}
+\clist_map_inline:nn
+  {
+    amscd, amsfonts, amssymb, bbm, bm, eucal,
+    eufrak, mathrsfs, newtxmath, upgreek
+  }
+  { \@@_check_pkg_conflict:nn { unicode-math } { #1 } }
+%    \end{macrocode}
+%
 % \subsection{配置文件}
 %
 % \cls{njuthesis} 包含\emph{本科生}和\emph{研究生}两套区别较大的模板配置。
@@ -3552,7 +3757,7 @@
     clc                 .tl_set:N = \g_@@_info_clc_tl,
     secret-level        .tl_set:N = \g_@@_info_secretlv_tl,
     udc                 .tl_set:N = \g_@@_info_udc_tl,
-    supervisor-contact  .tl_set:N = \g_@@_info_supv_cont_tl,
+    supervisor-contact  .tl_set:N = \g_@@_info_supvcont_tl,
 %    \end{macrocode}
 % \end{macro}
 %
@@ -3571,7 +3776,7 @@
 %    \begin{macrocode}
 \tl_set:Nx \g_@@_info_degree_tl
   {
-    \clist_item:Nn \g_@@_name_degree_clist
+    \clist_item:Nn \c_@@_name_degree_clist
       { \g_@@_info_degree_int }
   }
 \int_compare:nTF { \g_@@_info_degree_int == 1 }
@@ -3582,13 +3787,31 @@
 % 设置类型信息。
 %    \begin{macrocode}
 \tl_set:Nx \g_@@_info_type_tl
-  { \clist_item:Nn \g_@@_name_type_clist    { \g_@@_info_type_int } }
+  { \clist_item:Nn \c_@@_name_type_clist    { \g_@@_info_type_int } }
 \tl_set:Nx \g_@@_info_type_en_tl
-  { \clist_item:Nn \g_@@_name_type_en_clist { \g_@@_info_type_int } }
+  { \clist_item:Nn \c_@@_name_type_en_clist { \g_@@_info_type_int } }
 \tl_put_left:Nx \g_@@_info_type_tl
-  { \tl_use:c { g_@@_name_ \g_@@_info_diploma_tl _tl } }
+  { \tl_use:c { c_@@_name_ \g_@@_info_diploma_tl _tl } }
 %    \end{macrocode}
 %
+% 盲审模式下抹去个人信息和学校名称。
+%    \begin{macrocode}
+\bool_if:NT \g_@@_blind_bool
+  {
+    \ctex_at_end_preamble:n
+      {
+        \clist_map_inline:Nn \c_@@_blind_info_clist
+          { \tl_gclear:c    { g_@@_info_ #1    _tl } }
+        \clist_map_inline:Nn \c_@@_blind_info_en_clist
+          { \tl_gclear:c    { g_@@_info_ #1 _en_tl } }
+        \clist_map_inline:Nn \c_@@_blind_infolist_clist
+          { \clist_gclear:c { g_@@_info_ #1 _clist } }
+        \tl_gclear:N \c_@@_name_nju_tl
+        \tl_gclear:N \c_@@_name_nju_en_tl
+      }
+  }
+%    \end{macrocode}
+%
 % \changes{v0.15}{2022/01/22}{正确处理双导师信息。}
 % 在导言区录入用户信息后进行变量设置。此处使用到了 \pkg{ctex} 提供的命令,
 % 应当位于载入文档类之后。
@@ -4190,7 +4413,7 @@
 % 为无编号章添加目录条目,需手动指定格式为四号、不加粗、黑体。
 %    \begin{macrocode}
 \cs_new_protected:Npn \@@_add_tocline:n #1
-  { \addcontentsline { toc } { chapter } { \g_@@_fmt_chapterintoc_tl #1 } }
+  { \addcontentsline { toc } { chapter } { \c_@@_fmt_chapterintoc_tl #1 } }
 \cs_generate_variant:Nn \@@_add_tocline:n { V }
 %    \end{macrocode}
 % \end{macro}
@@ -4234,10 +4457,12 @@
   {
     chapter        / beforeskip = 10 pt,
     chapter        / afterskip  = 60 pt,
-    chapter        / format     = \g_@@_fmt_chapter_tl,
-    section        / format     = \g_@@_fmt_section_tl,
-    subsection     / format     = \g_@@_fmt_subsection_tl,
-    subsubsection  / format     = \g_@@_fmt_subsubsection_tl,
+    chapter        / format     = \c_@@_fmt_chapter_tl,
+    section        / format     = \c_@@_fmt_section_tl,
+    subsection     / format     = \c_@@_fmt_subsection_tl,
+    subsubsection  / format     = \c_@@_fmt_subsubsection_tl,
+    paragraph      / format     = \c_@@_fmt_paragraph_tl,
+    subparagraph   / format     = \c_@@_fmt_subparagraph_tl,
 %    \end{macrocode}
 %
 %
@@ -4246,13 +4471,13 @@
 %
 % 设置目录标题默认名称。
 %    \begin{macrocode}
-    contentsname   = \g_@@_name_tableofcontents_tl,
-    listfigurename = \g_@@_name_listoffigures_tl,
-    listtablename  = \g_@@_name_listoftables_tl,
+    contentsname   = \c_@@_name_tableofcontents_tl,
+    listfigurename = \c_@@_name_listoffigures_tl,
+    listtablename  = \c_@@_name_listoftables_tl,
 %    \end{macrocode}
 % 设置目录中章标题的样式。
 %    \begin{macrocode}
-    chapter / tocline = \g_@@_fmt_chapterintoc_tl \CTEXnumberline { #1 } #2
+    chapter / tocline = \c_@@_fmt_chapterintoc_tl \CTEXnumberline { #1 } #2
   }
 %    \end{macrocode}
 %
@@ -4279,7 +4504,7 @@
   {
     \group_begin:
       \keys_set:nn { ctex }
-        { chapter/format = \g_@@_fmt_toctitle_tl }
+        { chapter/format = \c_@@_fmt_toctitle_tl }
       \bool_if:NTF \g_@@_toc_in_toc_bool
         { \@@_chapter:n { #1 } }
         {
@@ -4486,7 +4711,7 @@
         pdftitle    = \g_@@_info_title_tl,
         pdfauthor   = \g_@@_info_author_tl,
         pdfkeywords = \g_@@_info_keywords_clist,
-        pdfcreator  = \g_@@_name_pdfcreator_tl
+        pdfcreator  = \c_@@_name_pdfcreator_tl
       }
   }
 %    \end{macrocode}
@@ -4523,6 +4748,90 @@
 %    \end{macrocode}
 %
 %
+% \subsection{脚注}
+% \changes{v0.18}{2022/05/01}{提供脚注设置项。}
+% ^^A 来自 fduthesis
+%    \begin{macrocode}
+\tl_new:N \l_@@_fn_style_tl
+\keys_define:nn { nju / style }
+  {
+%    \end{macrocode}
+% \begin{macro}{style/footnote-style}
+%    \begin{macrocode}
+    footnote-style .choices:nn = { plain, pifont }
+%    \end{macrocode}
+% 若使用 \opt{pifont} 类型,则需引入 \pkg{pifont} 宏包。
+%    \begin{macrocode}
+      {
+        \tl_gset_eq:NN \l_@@_fn_style_tl \l_keys_choice_tl
+        \int_compare:nT { \l_keys_choice_int = 2 }
+          { \RequirePackage { pifont } }
+      }
+  }
+%    \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}{\@@_footnote_number:N}
+% 脚注编号样式。
+%    \begin{macrocode}
+\tl_const:Nn \c_@@_fn_style_plain_tl  { plain  }
+\tl_const:Nn \c_@@_fn_style_pifont_tl { pifont }
+\cs_new:Npn \@@_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{pifont} 类型无需进行额外的操作。
+%    \begin{macrocode}
+        \c_@@_fn_style_pifont_tl
+          { \@@_fn_symbol_pifont:n {#1} }
+      }
+%    \end{macrocode}
+% 变量 \cs{l_@@_fn_style_tl} 保存的类型未知时,默认使用 \opt{plain}
+% 类型。
+%    \begin{macrocode}
+      { \int_use:N #1 }
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\thefootnote}
+% 重定义脚注编号。
+%    \begin{macrocode}
+\cs_set:Npn \thefootnote { \@@_footnote_number:N \c at footnote }
+%    \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{整体样式}
+%
+% \begin{macro}[int]{\@makefntext}
+% 重定义内部脚注文字命令,使脚注编号不使用上标,宽度为 \qty{1.5}{em}。
+% 见 \url{http://tex.stackexchange.com/q/19844} 和
+% \url{https://www.zhihu.com/question/53030087}。
+%    \begin{macrocode}
+\cs_set:Npn \@makefntext #1
+  {
+    \mode_leave_vertical:
+    \hbox_to_wd:nn { 1.5 em } { \@thefnmark \hfil }
+    #1
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+%
 % \subsection{图片表格}
 %
 % 设置默认图片扩展名,允许在不键入扩展名时自动进行补全。
@@ -4562,35 +4871,87 @@
 %
 % \subsection{定理环境}
 %
-% \begin{macro}{\@@_new_theorem:N}
+% \changes{v0.18}{2022/04/21}{新增定理环境的若干定制项。}
+%
+% \begin{macro}{theorem/style,theorem/header-font,theorem/body-font,
+%   theorem/qed-symbol,theorem/counter}
+% 定义 |nju/theorem| 键值类。
+% 目前这套选项只适用于模板预定义的若干种定理环境。
+%    \begin{macrocode}
+\keys_define:nn { nju / theorem }
+  {
+    predefine     .bool_set:N  = \g_@@_thm_predefine_bool,
+    style           .tl_set:N  = \l_@@_thm_style_tl,
+    header-font     .tl_set:N  = \l_@@_thm_header_font_tl,
+    body-font       .tl_set:N  = \l_@@_thm_body_font_tl,
+    qed-symbol      .tl_set:N  = \l_@@_thm_qed_symbol_tl,
+    counter         .tl_set:N  = \l_@@_thm_counter_tl,
+%    \end{macrocode}
+% 定理环境的缺省值。
+%    \begin{macrocode}
+    predefine      .initial:n  = true,
+    style          .initial:n  = plain,
+    header-font    .initial:n  = \normalfont \bfseries,
+    body-font      .initial:n  = \itshape,
+    qed-symbol     .initial:n  = \ensuremath { \mdwhtsquare },
+    counter        .initial:n  = chapter
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_new_theorem:Nn,\@@_new_theorem:NV}
 % 用于定义普通定理环境的辅助函数。
 % \begin{arguments}
 %   \item 定理名称列表,|clist| 型变量
+%   \item 编号范围
 % \end{arguments}
-% 除证明以外的环境都不需要证毕符号,在此清空其设置。
 %    \begin{macrocode}
-\cs_new_protected:Npn \@@_new_theorem:N #1
+\cs_new_protected:Npn \@@_new_theorem:Nn #1#2
   {
-    \theoremsymbol { }
     \clist_map_inline:Nn #1
-      { \newtheorem { ##1 } { \@@_name:n { ##1 } } }
+      { \newtheorem { ##1 } { \@@_name:n { ##1 } } [#2] }
   }
+\cs_generate_variant:Nn \@@_new_theorem:Nn { NV }
 %    \end{macrocode}
 % \end{macro}
 %
+% \begin{macro}{\@@_ntheorem_post_setup:}
+% 载入 \pkg{ntheorem} 后的相应设置。
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_ntheorem_post_setup:
+  {
+    \exp_args:NV \theoremstyle      \l_@@_thm_style_tl
+    \exp_args:NV \theoremheaderfont \l_@@_thm_header_font_tl
+    \exp_args:NV \theorembodyfont   \l_@@_thm_body_font_tl
+    \exp_args:NV \theoremsymbol     \l_@@_thm_qed_symbol_tl
+%    \end{macrocode}
 % 定义证明环境。证毕符号使用 \tn{mdlgwhtsquare} 绘制,对应于 |U+25A1| 字符
-% \footnote{\url{https://tex.stackexchange.com/questions/567135/how-get-box-like-symbol-with-xelatex}}。
+% \footnote{\url{https://tex.stackexchange.com/q/567135/}}。
 %    \begin{macrocode}
-\theoremsymbol { \ensuremath { \mdwhtsquare } }
-\newtheorem* { proof } { \g_@@_name_proof_tl }
+    \newtheorem* { proof } { \c_@@_name_proof_tl }
 %    \end{macrocode}
+% 定义普通定理环境。清除预设的证毕符号,并排除 \env{proof}。
+%    \begin{macrocode}
+    \theoremsymbol { }
+    \group_begin:
+      \clist_remove_all:Nn \g_@@_theorem_type_clist { proof }
+      \@@_new_theorem:NV \g_@@_theorem_type_clist \l_@@_thm_counter_tl
+    \group_end:
+  }
+%    \end{macrocode}
+% \end{macro}
 %
-% 定义普通定理环境,需要排除 \env{proof}。
+% 在导言区末尾,通过吸收的用户设置,选择是否载入并设置 \pkg{ntheorem}。
 %    \begin{macrocode}
-\group_begin:
-  \clist_remove_all:Nn \g_@@_theorem_type_clist { proof }
-  \@@_new_theorem:N \g_@@_theorem_type_clist
-\group_end:
+\ctex_at_end_preamble:n
+  {
+    \bool_if:NT \g_@@_thm_predefine_bool
+      {
+        \PassOptionsToPackage { amsmath, thmmarks } { ntheorem }
+        \RequirePackage { ntheorem }
+        \@@_ntheorem_post_setup:
+      }
+  }
 %</class>
 %    \end{macrocode}
 %
@@ -4610,9 +4971,9 @@
 %<*definition-ug>
 \@@_declare_element:nn { cover / ug / emblem-img }
   {
-    content = \njuemblem [ black ] { ! } { 3.35 cm },
+    content     = \@@_emblem:N \c_@@_emblemwidth_dim,
     bottom-skip = 1 cm,
-    align   = l
+    align       = l
   }
 %    \end{macrocode}
 % \end{macro}
@@ -4622,7 +4983,7 @@
 %    \begin{macrocode}
 \@@_declare_element:nn { cover / ug / name-img }
   {
-    content     = \njuname [ black ] { ! } { 3 cm },
+    content     = \@@_name:N \c_@@_namewidth_dim,
     bottom-skip = 1 cm
   }
 %    \end{macrocode}
@@ -4647,7 +5008,7 @@
 \@@_declare_element:nn { cover / ug / info }
   {
     content  =
-      \@@_cover_info_ug:NN \g_@@_coverlabel_dim \g_@@_coveruline_dim,
+      \@@_cover_info_ug:NN \c_@@_coverlabel_dim \c_@@_coveruline_dim,
     format   = \zihao { 3 }
   }
 %    \end{macrocode}
@@ -4663,18 +5024,18 @@
 %    \begin{macrocode}
 \cs_new_protected:Npn \@@_cover_info_ug:NN #1#2
   {
-    \begin{minipage} { #1 + #2 + \g_@@_smallhskip_dim }
-      \dim_set_eq:NN \baselineskip \g_@@_coverlineskip_dim
-      \dim_set:Nn \l_@@_tmpb_dim { .5 #2 - .5 #1 - \g_@@_smallhskip_dim }
-      \@@_cover_entry:nnn { dept     } { #1 } { #2 }
-      \@@_cover_entry:nnn { major    } { #1 } { #2 }
-      \@@_cover_entry_title:nnn  { \bf } { #1 } { #2 }
-      \@@_cover_bientry:nnnn { grade } { id } { #1 } { \l_@@_tmpb_dim }
-      \@@_cover_entry:nnn { author   } { #1 } { #2 }
+    \begin{minipage} { #1 + #2 + \c_@@_smallhskip_dim }
+      \dim_set_eq:NN \baselineskip \c_@@_coverlineskip_dim
+      \dim_set:Nn \l_@@_tmpb_dim { .5 #2 - .5 #1 - \c_@@_smallhskip_dim }
+      \@@_cover_entry:nnn { dept      } { #1 } { #2 }
+      \@@_cover_entry:nnn { major     } { #1 } { #2 }
+      \@@_cover_entry_title:nnn { \bf } { #1 } { #2 }
+      \@@_cover_bientry:nnnn { grade  } { id } { #1 } { \l_@@_tmpb_dim }
+      \@@_cover_entry:nnn { author    } { #1 } { #2 }
       \@@_cover_entry_supv:nnn { supv } { #1 } { \l_@@_tmpb_dim }
       \bool_if:NT \l_@@_second_supv_bool
         { \@@_cover_entry_supv:nnn { supv_ii } { #1 } { \l_@@_tmpb_dim } }
-      \@@_cover_entry:nnn { submitdate  } { #1 } { #2 }
+      \@@_cover_entry:nnn { submitdate } { #1 } { #2 }
     \end{minipage}
   }
 %</definition-ug>
@@ -4691,8 +5052,8 @@
 %<*definition-g>
 \@@_declare_element:nn { cover / g / emblem-img }
   {
-    content     = \njuemblem [ black ] { ! } { 1.9 cm },
-    bottom-skip = 1 cm
+    content     = \@@_emblem:N \c_@@_emblemwidthi_dim,
+    bottom-skip = 1.5 cm
   }
 %    \end{macrocode}
 % \end{macro}
@@ -4702,7 +5063,7 @@
 %    \begin{macrocode}
 \@@_declare_element:nn { cover / g / name-img }
   {
-    content     = \njuname [ black ] { 4.4 cm } { ! },
+    content     = \@@_name:N \c_@@_namewidth_dim,
     bottom-skip = 2 cm
   }
 %    \end{macrocode}
@@ -4726,7 +5087,7 @@
 %    \begin{macrocode}
 \@@_declare_element:nn { cover / g / degree }
   {
-    content     = \g_@@_name_apply_tl,
+    content     = \c_@@_name_apply_tl,
     format      = \zihao { -1 } \bfseries,
     bottom-skip = 1 cm plus 1.5 fil
   }
@@ -4739,7 +5100,7 @@
 \@@_declare_element:nn { cover / g / info }
   {
     content     =
-      \@@_cover_info_g:NN \g_@@_coverlabel_dim \g_@@_coveruline_dim,
+      \@@_cover_info_g:NN \c_@@_coverlabel_dim \c_@@_coveruline_dim,
     bottom-skip = 0 pt plus 1.5 fil
   }
 %    \end{macrocode}
@@ -4762,8 +5123,8 @@
 %    \begin{macrocode}
 \cs_new_protected:Npn \@@_cover_info_g:NN #1#2
   {
-    \begin{minipage} { #1 + #2 + \g_@@_smallhskip_dim }
-      \dim_set_eq:NN \baselineskip \g_@@_coverlineskip_dim
+    \begin{minipage} { #1 + #2 + \c_@@_smallhskip_dim }
+      \dim_set_eq:NN \baselineskip \c_@@_coverlineskip_dim
       \@@_cover_entry_title:nnn { } { #1 } { #2 }
       \clist_map_inline:nn { author, major, field, supvfull }
         { \@@_cover_entry:nnn { ##1 } { #1 } { #2 } }
@@ -4790,14 +5151,14 @@
 %    \begin{macrocode}
 \cs_new_protected:Npn \@@_cover_back_g:
   {
-    \@@_spread_box:nnV { 6.2 em } { \kaishu } \g_@@_name_id_tl
+    \@@_spread_box:nnV { 6.2 em } { \kaishu } \c_@@_name_id_tl
     { : \@@_quad: } \g_@@_info_id_tl
     \@@_vskip:
-    \@@_spread_box:nnV { 6.2 em } { \kaishu } \g_@@_name_defenddate_tl
+    \@@_spread_box:nnV { 6.2 em } { \kaishu } \c_@@_name_defenddate_tl
     { : \@@_quad: } \g_@@_info_defenddate_tl
     \@@_vskip:
-    \@@_spread_box:nnV { 6.2 em } { \kaishu } \g_@@_name_supvfull_tl
-    { : \@@_quad: } \skip_horizontal:n { 8 em } \g_@@_name_sign_tl
+    \@@_spread_box:nnV { 6.2 em } { \kaishu } \c_@@_name_supvfull_tl
+    { : \@@_quad: } \skip_horizontal:n { 8 em } \c_@@_name_sign_tl
   }
 %    \end{macrocode}
 % \end{macro}
@@ -4841,8 +5202,8 @@
 \@@_declare_element:nn { cover / g / en / middle }
   {
     content     =
-      \g_@@_text_cover_en_tl \@@_vskip:
-      \textsc { \clist_item:Nn \g_@@_name_degree_en_clist
+      \c_@@_text_cover_en_tl \@@_vskip:
+      \textsc { \clist_item:Nn \c_@@_name_degree_en_clist
                   { \g_@@_info_degree_int } }
       \@@_vskip: { in } \@@_vskip:
       \g_@@_info_major_en_tl,
@@ -4856,7 +5217,7 @@
 %    \begin{macrocode}
 \@@_declare_element:nn { cover / g / en / emblem-img }
   {
-    content     = \njuemblem [ black ] { ! } { 2.5 cm },
+    content     = \@@_emblem:N \c_@@_emblemwidthii_dim,
     bottom-skip = 1.5 cm
   }
 %    \end{macrocode}
@@ -4869,7 +5230,7 @@
   {
     content =
       \g_@@_info_dept_en_tl \skip_vertical:N \c_zero_skip
-      \g_@@_name_nju_en_tl  \skip_vertical:n { 1 cm }
+      \c_@@_name_nju_en_tl  \skip_vertical:n { 1 cm }
       \g_@@_info_submitdate_en_tl
   }
 %    \end{macrocode}
@@ -4894,7 +5255,7 @@
 \@@_declare_element:nn { cover / nl / name }
   {
     content     =
-      \@@_spread_box:nnV { 6 em } { } \g_@@_name_title_tl,
+      \@@_spread_box:nnV { 6 em } { } \c_@@_name_title_tl,
     format      = \zihao { -0 },
     bottom-skip = 0 pt plus 1 fil
   }
@@ -4953,11 +5314,11 @@
 %    \begin{macrocode}
 \cs_new_protected:Npn \@@_cover_top_nl:
   {
-    \@@_spread_box:nnV { 3.2 em } { } \g_@@_name_clc_tl   \@@_hskip:
+    \@@_spread_box:nnV { 3.2 em } { } \c_@@_name_clc_tl   \@@_hskip:
     \@@_ulined_center_box:nn { 9 em } { \g_@@_info_clc_tl      } \hfill
-    \@@_spread_box:nnV { 3.2 em } { } \g_@@_name_secretlv_tl \@@_hskip:
+    \@@_spread_box:nnV { 3.2 em } { } \c_@@_name_secretlv_tl \@@_hskip:
     \@@_ulined_center_box:nn { 9 em } { \g_@@_info_secretlv_tl } \\
-    \@@_spread_box:nnV { 3.2 em } { } \g_@@_name_udc_tl   \@@_hskip:
+    \@@_spread_box:nnV { 3.2 em } { } \c_@@_name_udc_tl   \@@_hskip:
     \@@_ulined_center_box:nn { 9 em } { \g_@@_info_udc_tl      } \hfill \null
   }
 %    \end{macrocode}
@@ -4970,11 +5331,11 @@
   {
     \parbox [ b ] { 15 em } { \@@_uline_title: } \par
     \skip_vertical:n { - 0.5 cm }
-    { \zihao { 4 } \g_@@_name_title_b_tl }
+    { \zihao { 4 } \c_@@_name_title_b_tl }
     \skip_vertical:N \c_zero_skip
     \@@_ulined_center_box:nn { 4.5 em } { \g_@@_info_author_tl }
     \skip_vertical:n { - 0.5 cm }
-    { \zihao { 4 } { ( } \g_@@_name_author_tl { ) } }
+    { \zihao { 4 } { ( } \c_@@_name_author_tl { ) } }
   }
 %    \end{macrocode}
 % \end{macro}
@@ -4985,11 +5346,11 @@
 %    \begin{macrocode}
 \cs_new_protected:Npn \@@_cover_info_nl:
   {
-    \@@_uline_list:nnn { \g_@@_name_supvinfo_tl }
+    \@@_uline_list:nnn { \c_@@_name_supvinfo_tl }
       {
         \clist_use:Nn \g_@@_info_supv_clist    { ~ }
-        \clist_use:Nn \g_@@_info_supv_ii_clist { ~ } ~
-        \g_@@_info_supv_cont_tl
+        \clist_use:Nn \g_@@_info_supv_ii_clist { ~ }
+        \@@_hskip: \g_@@_info_supvcont_tl
       }
       { 1 em plus 1 fill }
     \@@_uline_bientry:Nnnn \l_@@_tmpa_dim { degree      } { degree     } { }
@@ -4996,7 +5357,7 @@
     \@@_uline_bientry:Nnnn \l_@@_tmpa_dim { major_b     } { major      } { } \\
     \@@_uline_bientry:Nnnn \l_@@_tmpa_dim { submitdate  } { submitdate } { }
     \@@_uline_bientry:Nnnn \l_@@_tmpa_dim { defenddate  } { defenddate } { } \\
-    \@@_full_uline:Nn      \l_@@_tmpa_dim { \g_@@_name_confer_tl }
+    \@@_full_uline:Nn      \l_@@_tmpa_dim { \c_@@_name_confer_tl }
     \@@_uline:n          { \l_@@_tmpa_dim }
   }
 %    \end{macrocode}
@@ -5023,8 +5384,8 @@
 %    \begin{macrocode}
 \@@_declare_element:nn { authdecl / g / title }
   {
-    content     = \g_@@_name_authdecl_tl,
-    format      = \g_@@_fmt_chapter_tl,
+    content     = \c_@@_name_authdecl_tl,
+    format      = \c_@@_fmt_chapter_tl,
     bottom-skip = 3 cm
   }
 %    \end{macrocode}
@@ -5035,7 +5396,7 @@
 %    \begin{macrocode}
 \@@_declare_element:nn { authdecl / g / text }
   {
-    content     = \g_@@_text_authdecl_tl,
+    content     = \c_@@_text_authdecl_tl,
     align       = n,
     bottom-skip = 2 cm
   }
@@ -5106,12 +5467,12 @@
         cell{1}{2} = {c=5}{m}, cell{3}{2} = {c=5}{m},
         cell{4}{2} = {c=5}{m}, cell{5}{2} = {c=5}{m}
       }
-      \g_@@_name_title_c_tl  & \g_@@_info_title_tl \\
-      \g_@@_name_id_a_tl     & \g_@@_info_id_tl    &
-      \g_@@_name_dept_a_tl   & \g_@@_info_dept_tl  &
-      \g_@@_name_year_tl     &
+      \c_@@_name_title_c_tl  & \g_@@_info_title_tl \\
+      \c_@@_name_id_a_tl     & \g_@@_info_id_tl    &
+      \c_@@_name_dept_a_tl   & \g_@@_info_dept_tl  &
+      \c_@@_name_year_tl     &
         \tl_range:Nnn \g_@@_info_submitdate_raw_tl {1} {4} \\
-      \g_@@_name_degree_a_tl &
+      \c_@@_name_degree_a_tl &
         {
           \@@_degree_checkbox:n { 2 } 学术学位硕士 \qquad{}
           \@@_degree_checkbox:n { 3 } 专业学位硕士 \\
@@ -5118,10 +5479,14 @@
           \@@_degree_checkbox:n { 4 } 学术学位博士 \qquad{}
           \@@_degree_checkbox:n { 5 } 专业学位博士
         } \\
-      \g_@@_name_email_tl    & \g_@@_info_email_tl \\
-      \g_@@_name_supv_b_tl   &
-        \clist_item:Nn \g_@@_info_supv_clist    {1}
-        \clist_item:Nn \g_@@_info_supv_ii_clist {1} \\
+      \c_@@_name_email_tl    & \g_@@_info_email_tl \\
+      \c_@@_name_supv_b_tl   &
+        \clist_item:Nn \g_@@_info_supv_clist {1}
+        \bool_if:NT \l_@@_second_supv_bool
+          {
+            \@@_quad:
+            \clist_item:Nn \g_@@_info_supv_ii_clist {1}
+          } \\
     \end{tblr}
   }
 %    \end{macrocode}
@@ -5132,8 +5497,8 @@
 %    \begin{macrocode}
 \cs_new_protected:Npn \@@_authdecl_sign_g:
   {
-    \g_@@_name_authsign_tl \par
-    \g_@@_name_blankdate_tl
+    \c_@@_name_authsign_tl \par
+    \c_@@_name_blankdate_tl
   }
 %    \end{macrocode}
 % \end{macro}
@@ -5143,9 +5508,9 @@
 %    \begin{macrocode}
 \cs_new_protected:Npn \@@_authdecl_secretlv_g:
   {
-    \g_@@_name_secretstatus_tl \par
-    \ensuremath { \mdwhtsquare } \g_@@_name_secretfree_tl \par
-    \ensuremath { \mdwhtsquare } \g_@@_name_secretdate_tl
+    \c_@@_name_secretstatus_tl \par
+    \ensuremath { \mdwhtsquare } \c_@@_name_secretfree_tl \par
+    \ensuremath { \mdwhtsquare } \c_@@_name_secretdate_tl
   }
 %</definition-g>
 %    \end{macrocode}
@@ -5266,9 +5631,9 @@
 %    \begin{macrocode}
 \cs_new_protected:Npn \@@_make_origdecl:
   {
-    \chapter* { \g_@@_name_origdecl_tl }
+    \chapter* { \c_@@_name_origdecl_tl }
     \thispagestyle { empty }
-    \g_@@_text_origdecl_tl
+    \c_@@_text_origdecl_tl
     \vfil
     \begin{flushright}
 %<definition-ug>      \clist_map_inline:nn { origsign, id, origdate }
@@ -5286,12 +5651,8 @@
 %    \begin{macrocode}
 \cs_new_protected:Npn \@@_make_authdecl:
   {
-%<definition-ug>      \prg_do_nothing:
-%<*definition-g>
-    \thispagestyle{empty}
-    \UseInstance { nju } { authdecl-g-default }
-    \cleardoublepage
-%</definition-g>
+%<definition-ug>    \prg_do_nothing:
+%<definition-g>    \UseInstance { nju } { authdecl-g-default }
   }
 %</(definition-ug|definition-g)>
 %    \end{macrocode}
@@ -5362,6 +5723,11 @@
         \msg_warning:nn { njuthesis } { missing-image }
         \RequirePackage { njuvisual }
       }
+    \bool_if:NT \g_@@_blind_bool
+      {
+        \RenewDocumentCommand \njuemblem { o m m } { \prg_do_nothing: }
+        \RenewDocumentCommand \njuname   { o m m } { \prg_do_nothing: }
+      }
   }
 %    \end{macrocode}
 %
@@ -5393,15 +5759,19 @@
 % 如果在选择了 \opt{decl-page},就生成本科生的诚信承诺书,
 % 或研究生的原创性声明和出版授权书。
 %    \begin{macrocode}
-\bool_if:NF \g_@@_draft_bool
-  {
-    \bool_if:NT \g_@@_decl_bool
+    \bool_if:NF \g_@@_draft_bool
       {
-        \@@_make_origdecl:
-        \AtEndEnvironment { document }
-          { \@@_make_authdecl: }
+        \bool_if:NT \g_@@_decl_bool
+          {
+            \@@_make_origdecl:
+            \AtEndEnvironment { document }
+              {
+                \cleardoublepage
+                \@@_make_authdecl:
+                \cleardoublepage
+              }
+          }
       }
-  }
 %    \end{macrocode}
 % 在标题页后使用大写罗马字母页码,恢复正常字体设置。
 %    \begin{macrocode}
@@ -5426,7 +5796,7 @@
 %<*(definition-ug|definition-g)>
 \@@_declare_element:nn { abstract / title }
   {
-    content     = \@@_abs_title:V \g_@@_name_abstracttitle_tl,
+    content     = \@@_abs_title:V \c_@@_name_abstracttitle_tl,
     format      = \bfseries \kaishu \zihao { -2 },
     bottom-skip = 1.2 cm
   }
@@ -5454,7 +5824,7 @@
 %    \begin{macrocode}
 \@@_declare_element:nn { abstract / en / title }
   {
-    content     = \@@_abs_title:V \g_@@_name_abstracttitle_en_tl,
+    content     = \@@_abs_title:V \c_@@_name_abstracttitle_en_tl,
     format      = \bfseries \kaishu \zihao { -2 },
     bottom-skip = 1.2 cm
   }
@@ -5496,13 +5866,13 @@
 % 确定标题类型。
 %    \begin{macrocode}
     \tl_if_blank:eTF { #1 }
-      { \g_@@_name_title_tl }
-      { \clist_item:Nn \g_@@_name_type_en_clist { \g_@@_info_type_int } }
+      { \c_@@_name_title_tl }
+      { \clist_item:Nn \c_@@_name_type_en_clist { \g_@@_info_type_int } }
     #2 \tl_use:c { g_@@_info_title #1 _tl } \\
 %    \end{macrocode}
 % 由于作者姓名使用的字样发生了变动,这里进行替换以便嵌入循环。
 %    \begin{macrocode}
-    \tl_set_eq:NN \g_@@_name_author_tl \g_@@_name_author_a_tl
+    \tl_set_eq:NN \c_@@_name_author_tl \c_@@_name_author_a_tl
 %    \end{macrocode}
 % 使用循环输出院系、专业、作者、导师信息。
 %    \begin{macrocode}
@@ -5522,7 +5892,7 @@
 %    \begin{macrocode}
 \@@_declare_element:nn { abstract / mark }
   {
-    content     = \g_@@_name_abstract_b_tl,
+    content     = \c_@@_name_abstract_b_tl,
     format      = \sffamily \zihao { -3 },
     bottom-skip = 1 cm
   }
@@ -5534,7 +5904,7 @@
 %    \begin{macrocode}
 \@@_declare_element:nn { abstract / en / mark }
   {
-    content     = \g_@@_name_abstract_b_en_tl,
+    content     = \c_@@_name_abstract_b_en_tl,
     format      = \sffamily \zihao { -3 },
     bottom-skip = 1 cm
   }
@@ -5553,8 +5923,8 @@
   {
     \@@_uline_list:xnn
       {
-        \clist_item:Nn \g_@@_name_type_clist { \g_@@_info_type_int }
-        \g_@@_name_title_a_tl #1
+        \clist_item:Nn \c_@@_name_type_clist { \g_@@_info_type_int }
+        \c_@@_name_title_a_tl #1
       }
       { \g_@@_info_title_tl } { \g_@@_abs_title_left_skip }
 %    \end{macrocode}
@@ -5563,9 +5933,9 @@
     \@@_full_uline:NV \l_@@_tmpa_dim
       {
         \@@_ulined_center_box:nn { 11 em } { \g_@@_info_major_tl }
-        \g_@@_name_major_a_tl
+        \c_@@_name_major_a_tl
         \@@_ulined_center_box:nn { 4  em } { \g_@@_info_grade_tl }
-        \g_@@_name_grade_tl \g_@@_name_author_a_tl #1
+        \c_@@_name_grade_tl \c_@@_name_author_a_tl #1
       }
     \@@_ulined_center_box:nn { \l_@@_tmpa_dim }
       { \g_@@_info_author_tl } \\
@@ -5573,7 +5943,7 @@
 % 导师姓名、职称。
 %    \begin{macrocode}
     \@@_full_uline:NV \l_@@_tmpa_dim
-      { \g_@@_name_supv_a_tl #1 }
+      { \c_@@_name_supv_a_tl #1 }
     \@@_ulined_center_box:nn { \l_@@_tmpa_dim }
       { \g_@@_info_supvfull_tl }
   }
@@ -5618,7 +5988,7 @@
 %<*class>
 \cs_new_protected:Npn \@@_print_keywords:nn #1#2
   {
-    \tl_set:Nv \l_@@_tmpa_tl { g_@@_name_keywords #1 _tl }
+    \tl_set:Nv \l_@@_tmpa_tl { c_@@_name_keywords #1 _tl }
     \@@_get_text_width:NV \l_@@_tmpa_dim \l_@@_tmpa_tl
 %    \end{macrocode}
 % 关键词列表的悬挂缩进样式由 \tn{list} 环境产生。
@@ -5723,7 +6093,7 @@
   {
     \cleardoublepage
     \thispagestyle { plain }
-    \@@_abs_bookmark:Vn \g_@@_name_abstract_a_tl { abstract }
+    \@@_abs_bookmark:Vn \c_@@_name_abstract_a_tl { abstract }
     \@@_make_abstract:
     \group_begin: \kaishu \zihao { -4 } #1
   }
@@ -5738,7 +6108,7 @@
   {
     \cleardoublepage
     \thispagestyle { plain }
-    \@@_abs_bookmark:Vn \g_@@_name_abstract_a_en_tl { abstract-en }
+    \@@_abs_bookmark:Vn \c_@@_name_abstract_a_en_tl { abstract-en }
     \@@_make_abstract_en:
     \group_begin: \zihao { -4 } #1
   }
@@ -5754,9 +6124,11 @@
 % 单独制作的前言致谢页。
 %    \begin{macrocode}
 \NewDocumentEnvironment { preface         } { +b }
-  { \@@_chapter:V \g_@@_name_preface_tl         #1 } { }
+  { \@@_chapter:V \c_@@_name_preface_tl         #1 }
+  { \cleardoublepage }
 \NewDocumentEnvironment { acknowledgement } { +b }
-  { \@@_chapter:V \g_@@_name_acknowledgement_tl #1 } { }
+  { \@@_chapter:V \c_@@_name_acknowledgement_tl #1 }
+  { \cleardoublepage }
 %    \end{macrocode}
 % \end{environment}
 % \end{environment}
@@ -5770,7 +6142,7 @@
 % 成果列表。
 %    \begin{macrocode}
 \NewDocumentCommand \njupaperlist
-  { O { \g_@@_name_paperlist_tl } m }
+  { O { \c_@@_name_paperlist_tl } m }
   {
     \group_begin:
 %    \end{macrocode}
@@ -5848,10 +6220,10 @@
 %    \begin{macrocode}
 \NewDocumentEnvironment { notation } { O { 10 em } O { 5 em } }
   {
-    \@@_chapter:V \g_@@_name_notation_tl
+    \@@_chapter:V \c_@@_name_notation_tl
     \@@_make_notation:nn { #1 } { #2 }
   }
-  { \endlist }
+  { \endlist \cleardoublepage }
 %    \end{macrocode}
 % \end{environment}
 %
@@ -5860,7 +6232,7 @@
 %    \begin{macrocode}
 \NewDocumentEnvironment { notation* } { O { 10 em } O { 5 em } }
   {
-    \chapter * { \g_@@_name_notation_tl }
+    \chapter * { \c_@@_name_notation_tl }
     \@@_make_notation:nn { #1 } { #2 }
   }
   { \endlist }
@@ -5872,6 +6244,7 @@
 % \subsection{配置常量}
 % \label{subsec:constant-config}
 % \changes{v0.16}{2022/02/23}{将名称常量分离到 \file{.def} 文件。}
+% \changes{v0.18}{2022/04/20}{使用 |const| 类型统一定义常量。}
 %
 % 本节内容用于生成常量的默认定义,分为本科生和研究生模板两种。
 %
@@ -5931,7 +6304,7 @@
     { author_a    } { 本科生姓名                         },
     { grade       } { 年级                               },
     { origdecl    }
-      { \g_@@_name_nju_tl 本科毕业论文(设计)诚信承诺书 },
+      { \c_@@_name_nju_tl 本科毕业论文(设计)诚信承诺书 },
     { origsign    } { 作者签名                           },
     { submitdate  } { 提交日期                           },
     { supv        } { 导师                               },
@@ -5944,12 +6317,12 @@
   {
     { abstracttitle }
       {
-        \g_@@_name_nju_tl  \g_@@_name_type_tl
-        \g_@@_name_lang_tl \g_@@_name_abstract_tl
+        \c_@@_name_nju_tl  \c_@@_name_type_tl
+        \c_@@_name_lang_tl \c_@@_name_abstract_tl
       }
       {
-        \g_@@_name_nju_tl     \g_@@_name_type_tl
-        \g_@@_name_lang_en_tl \g_@@_name_abstract_tl
+        \c_@@_name_nju_tl     \c_@@_name_type_tl
+        \c_@@_name_lang_en_tl \c_@@_name_abstract_tl
       },
     { author    } { 学生姓名               } { UNDERGRADUATE  },
     { major     } { 专业                   } { SPECIALIZATION },
@@ -5991,7 +6364,8 @@
     { major_a      } { 专业                             },
     % 用于国家图书馆封面的专业名称字样
     { major_b      } { 专业名称                         },
-    { origdecl     } { 南京大学学位论文原创性声明       },
+    { origdecl     }
+      { \c_@@_name_nju_tl 学位论文原创性声明            },
     { origsign     } { 研究生签名                       },
     { reviewer     } { 评阅人:                         },
     { secretlv     } { 密级                             },
@@ -5998,8 +6372,8 @@
     { secretstatus } { 论文涉密情况:                   },
     { secretfree   } { 不保密                           },
     { secretdate   }
-      { 保密,保密期( \g_@@_name_blankdate_tl 至
-                       \g_@@_name_blankdate_tl )       },
+      { 保密,保密期( \c_@@_name_blankdate_tl 至
+                       \c_@@_name_blankdate_tl )       },
     { sign         } { (签字)                         },
     { submitdate   } { 论文提交日期                     },
     { supv         } { 导师                             },
@@ -6024,11 +6398,11 @@
 \clist_map_inline:nn
   {
     { abstracttitle }
-      { 南京大学 \g_@@_info_type_tl 中文摘要首页用纸 }
-      { 南京大学 \g_@@_info_type_tl 英文摘要首页用纸 },
-    { author    } { 作者姓名 } { POSTGRADUATE        },
-    { major     } { 专业方向 } { SPECIALIZATION      },
-    { supvfull  } { 指导教师 } { MENTOR              }
+      { \c_@@_name_nju_tl \g_@@_info_type_tl 中文摘要首页用纸 }
+      { \c_@@_name_nju_tl \g_@@_info_type_tl 英文摘要首页用纸 },
+    { author    } { 作者姓名 } { POSTGRADUATE   },
+    { major     } { 专业方向 } { SPECIALIZATION },
+    { supvfull  } { 指导教师 } { MENTOR         }
   }
   { \@@_define_name:nnn #1 }
 %</definition-g>
@@ -6037,10 +6411,10 @@
 % \subsubsection{文本}
 % \label{subsubsec:constant-text}
 %
-% \begin{variable}{\g_@@_text_origdecl_tl}
+% \begin{variable}{\c_@@_text_origdecl_tl}
 % 本科生的学位论文诚信承诺书,或研究生的学位论文原创性声明。
 %    \begin{macrocode}
-\tl_const:Nn \g_@@_text_origdecl_tl
+\tl_const:Nn \c_@@_text_origdecl_tl
   {
 %<*definition-ug>
     本人郑重承诺:所呈交的毕业论文(设计)(题目: \g_@@_info_title_tl )
@@ -6050,21 +6424,21 @@
     本人承诺不存在抄袭、伪造、篡改、代写、买卖毕业论文(设计)等违纪行为。
 %</definition-ug>
 %<*definition-g>
-    本人郑重声明,所提交的学位论文是本人在导师指导下独立进行科学研究工作
-    所取得的成果。除本论文中已经注明引用的内容外,本论文不包含其他个人或
-    集体已经发表或撰写过的研究成果,也不包含为获得南京大学或其他教育机构
-    的学位证书而使用过的材料。对本文的研究做出重要贡献的个人和集体,均已
-    在论文的致谢部分明确标明。本人郑重申明愿承担本声明的法律责任。
+    本人郑重声明,所提交的学位论文是本人在导师指导下独立进行科学研究工作所
+    取得的成果。除本论文中已经注明引用的内容外,本论文不包含其他个人或集体
+    已经发表或撰写过的研究成果,也不包含为获得 \c_@@_name_nju_tl 或其他教
+    育机构的学位证书而使用过的材料。对本文的研究做出重要贡献的个人和集体,
+    均已在论文的致谢部分明确标明。本人郑重申明愿承担本声明的法律责任。
 %</definition-g>
   }
 %    \end{macrocode}
 % \end{variable}
 %
-% \begin{variable}{\g_@@_text_authdecl_tl}
+% \begin{variable}{\c_@@_text_authdecl_tl}
 % 研究生的学位论文出版授权书。
 %    \begin{macrocode}
 %<*definition-g>
-\tl_gset:Nn \g_@@_text_authdecl_tl
+\tl_const:Nn \c_@@_text_authdecl_tl
   {
     本人完全同意《中国优秀博硕士学位论文全文数据库出版章程》
     (以下简称“章程”),愿意将本人的学位论文提交“中国学术期刊
@@ -6078,13 +6452,13 @@
 %    \end{macrocode}
 % \end{variable}
 %
-% \begin{variable}{\g_@@_text_cover_en_tl}
+% \begin{variable}{\c_@@_text_cover_en_tl}
 % 研究生的英文封面字样。
 %    \begin{macrocode}
-\tl_gset:Nn \g_@@_text_cover_en_tl
+\tl_const:Nn \c_@@_text_cover_en_tl
   {
     A~ dissertation~ submitted~ to \\
-    the~ graduate~ school~ of~ Nanjing~ University \\
+    the~ graduate~ school~ of~ \c_@@_name_nju_en_tl \\
     in~ partial~ fulfilment~ of~ the~ requirements~ for~ the~ degree~ of
   }
 %</definition-g>
@@ -6112,6 +6486,7 @@
 % \label{subsubsec:constant-length}
 %
 % \changes{v0.17}{2022/04/09}{将长度值分离到 \file{.def} 文件。}
+% \changes{v0.18}{2022/04/20}{统一管理校名校徽尺寸。}
 % 默认长度值。
 %    \begin{macrocode}
 \clist_map_inline:nn
@@ -6120,6 +6495,11 @@
 %<definition-g>    { coverlabel    } { 100 pt },
     { coverlineskip } { 40  pt },
     { coveruline    } { 270 pt },
+%<definition-ug>    { emblemwidth   } { 68  pt },
+%<definition-g>    { emblemwidthi  } { 46  pt },
+%<definition-g>    { emblemwidthii } { 61  pt },
+%<definition-ug>    { namewidth     } { 300 pt },
+%<definition-g>    { namewidth     } { 126 pt },
     { smallhskip    } { 5   pt },
     { smallvskip    } { 1   ex }
   }
@@ -6134,12 +6514,14 @@
 %    \begin{macrocode}
 \clist_map_inline:nn
   {
-    { chapterintoc  } { \large \normalfont \sffamily            },
-    { chapter       } { \large \normalfont \sffamily \centering },
-    { section       } { \large \normalfont \sffamily            },
-    { subsection    } { \large \normalfont \sffamily            },
-    { subsubsection } { \large \normalfont \sffamily            },
-    { toctitle      } { \centering \zihao { 3 } \bfseries       }
+    { section       } { \large \normalfont \sffamily      },
+    { chapter       } { \c_@@_fmt_section_tl \centering   },
+    { chapterintoc  } { \c_@@_fmt_section_tl              },
+    { subsection    } { \c_@@_fmt_section_tl              },
+    { subsubsection } { \c_@@_fmt_section_tl              },
+    { paragraph     } { \c_@@_fmt_section_tl              },
+    { subparagraph  } { \c_@@_fmt_section_tl              },
+    { toctitle      } { \centering \zihao { 3 } \bfseries }
   }
   { \@@_define_fmt:nn #1 }
 %</(definition-ug|definition-g)>

Modified: trunk/Master/texmf-dist/source/latex/njuthesis/njuthesis.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex/njuthesis/njuthesis.ins	2022-05-01 20:12:23 UTC (rev 63201)
+++ trunk/Master/texmf-dist/source/latex/njuthesis/njuthesis.ins	2022-05-01 20:12:37 UTC (rev 63202)
@@ -78,13 +78,13 @@
 \endbatchfile
 \__nju_declare_element:nn { abstract / mark }
   {
-    content     = \g__nju_name_abstract_b_tl,
+    content     = \c__nju_name_abstract_b_tl,
     format      = \sffamily \zihao { -3 },
     bottom-skip = 1 cm
   }
 \__nju_declare_element:nn { abstract / en / mark }
   {
-    content     = \g__nju_name_abstract_b_en_tl,
+    content     = \c__nju_name_abstract_b_en_tl,
     format      = \sffamily \zihao { -3 },
     bottom-skip = 1 cm
   }

Modified: trunk/Master/texmf-dist/tex/latex/njuthesis/njuthesis-graduate.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/njuthesis/njuthesis-graduate.def	2022-05-01 20:12:23 UTC (rev 63201)
+++ trunk/Master/texmf-dist/tex/latex/njuthesis/njuthesis-graduate.def	2022-05-01 20:12:37 UTC (rev 63202)
@@ -23,7 +23,7 @@
 %% To produce the documentation run the original source files ending with
 %% `.dtx' through XeTeX.
 %% 
-\GetIdInfo $Id: njuthesis.dtx 0.17.0 2022-04-09 16:30:00 +0800 NJU LUG <git+nju-lug-email-3104-issue- at yaoge123.cn>$
+\GetIdInfo $Id: njuthesis.dtx 0.18.0 2022-05-01 12:40:00 +0800 NJU LUG <git+nju-lug-email-3104-issue- at yaoge123.cn>$
   {Graduate definition file for njuthesis}
 \ProvidesExplFile{njuthesis-graduate.def}
   {\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription}
@@ -30,12 +30,12 @@
 \tl_const:Nn \c__nju_pagestyle_tl { headings }
 \__nju_declare_element:nn { cover / g / emblem-img }
   {
-    content     = \njuemblem [ black ] { ! } { 1.9 cm },
-    bottom-skip = 1 cm
+    content     = \__nju_emblem:N \c__nju_emblemwidthi_dim,
+    bottom-skip = 1.5 cm
   }
 \__nju_declare_element:nn { cover / g / name-img }
   {
-    content     = \njuname [ black ] { 4.4 cm } { ! },
+    content     = \__nju_name:N \c__nju_namewidth_dim,
     bottom-skip = 2 cm
   }
 \__nju_declare_element:nn { cover / g / type }
@@ -47,7 +47,7 @@
   }
 \__nju_declare_element:nn { cover / g / degree }
   {
-    content     = \g__nju_name_apply_tl,
+    content     = \c__nju_name_apply_tl,
     format      = \zihao { -1 } \bfseries,
     bottom-skip = 1 cm plus 1.5 fil
   }
@@ -54,7 +54,7 @@
 \__nju_declare_element:nn { cover / g / info }
   {
     content     =
-      \__nju_cover_info_g:NN \g__nju_coverlabel_dim \g__nju_coveruline_dim,
+      \__nju_cover_info_g:NN \c__nju_coverlabel_dim \c__nju_coveruline_dim,
     bottom-skip = 0 pt plus 1.5 fil
   }
 \__nju_declare_element:nn { cover / g / date }
@@ -61,8 +61,8 @@
   { content = \g__nju_info_submitdate_tl }
 \cs_new_protected:Npn \__nju_cover_info_g:NN #1#2
   {
-    \begin{minipage} { #1 + #2 + \g__nju_smallhskip_dim }
-      \dim_set_eq:NN \baselineskip \g__nju_coverlineskip_dim
+    \begin{minipage} { #1 + #2 + \c__nju_smallhskip_dim }
+      \dim_set_eq:NN \baselineskip \c__nju_coverlineskip_dim
       \__nju_cover_entry_title:nnn { } { #1 } { #2 }
       \clist_map_inline:nn { author, major, field, supvfull }
         { \__nju_cover_entry:nnn { ##1 } { #1 } { #2 } }
@@ -75,14 +75,14 @@
   }
 \cs_new_protected:Npn \__nju_cover_back_g:
   {
-    \__nju_spread_box:nnV { 6.2 em } { \kaishu } \g__nju_name_id_tl
+    \__nju_spread_box:nnV { 6.2 em } { \kaishu } \c__nju_name_id_tl
     { : \__nju_quad: } \g__nju_info_id_tl
     \__nju_vskip:
-    \__nju_spread_box:nnV { 6.2 em } { \kaishu } \g__nju_name_defenddate_tl
+    \__nju_spread_box:nnV { 6.2 em } { \kaishu } \c__nju_name_defenddate_tl
     { : \__nju_quad: } \g__nju_info_defenddate_tl
     \__nju_vskip:
-    \__nju_spread_box:nnV { 6.2 em } { \kaishu } \g__nju_name_supvfull_tl
-    { : \__nju_quad: } \skip_horizontal:n { 8 em } \g__nju_name_sign_tl
+    \__nju_spread_box:nnV { 6.2 em } { \kaishu } \c__nju_name_supvfull_tl
+    { : \__nju_quad: } \skip_horizontal:n { 8 em } \c__nju_name_sign_tl
   }
 \__nju_declare_element:nn { cover / g / en / title }
   {
@@ -106,8 +106,8 @@
 \__nju_declare_element:nn { cover / g / en / middle }
   {
     content     =
-      \g__nju_text_cover_en_tl \__nju_vskip:
-      \textsc { \clist_item:Nn \g__nju_name_degree_en_clist
+      \c__nju_text_cover_en_tl \__nju_vskip:
+      \textsc { \clist_item:Nn \c__nju_name_degree_en_clist
                   { \g__nju_info_degree_int } }
       \__nju_vskip: { in } \__nju_vskip:
       \g__nju_info_major_en_tl,
@@ -115,7 +115,7 @@
   }
 \__nju_declare_element:nn { cover / g / en / emblem-img }
   {
-    content     = \njuemblem [ black ] { ! } { 2.5 cm },
+    content     = \__nju_emblem:N \c__nju_emblemwidthii_dim,
     bottom-skip = 1.5 cm
   }
 \__nju_declare_element:nn { cover / g / en / bottom }
@@ -122,7 +122,7 @@
   {
     content =
       \g__nju_info_dept_en_tl \skip_vertical:N \c_zero_skip
-      \g__nju_name_nju_en_tl  \skip_vertical:n { 1 cm }
+      \c__nju_name_nju_en_tl  \skip_vertical:n { 1 cm }
       \g__nju_info_submitdate_en_tl
   }
 \__nju_declare_element:nn { cover / nl / top }
@@ -133,7 +133,7 @@
 \__nju_declare_element:nn { cover / nl / name }
   {
     content     =
-      \__nju_spread_box:nnV { 6 em } { } \g__nju_name_title_tl,
+      \__nju_spread_box:nnV { 6 em } { } \c__nju_name_title_tl,
     format      = \zihao { -0 },
     bottom-skip = 0 pt plus 1 fil
   }
@@ -162,11 +162,11 @@
   }
 \cs_new_protected:Npn \__nju_cover_top_nl:
   {
-    \__nju_spread_box:nnV { 3.2 em } { } \g__nju_name_clc_tl   \__nju_hskip:
+    \__nju_spread_box:nnV { 3.2 em } { } \c__nju_name_clc_tl   \__nju_hskip:
     \__nju_ulined_center_box:nn { 9 em } { \g__nju_info_clc_tl      } \hfill
-    \__nju_spread_box:nnV { 3.2 em } { } \g__nju_name_secretlv_tl \__nju_hskip:
+    \__nju_spread_box:nnV { 3.2 em } { } \c__nju_name_secretlv_tl \__nju_hskip:
     \__nju_ulined_center_box:nn { 9 em } { \g__nju_info_secretlv_tl } \\
-    \__nju_spread_box:nnV { 3.2 em } { } \g__nju_name_udc_tl   \__nju_hskip:
+    \__nju_spread_box:nnV { 3.2 em } { } \c__nju_name_udc_tl   \__nju_hskip:
     \__nju_ulined_center_box:nn { 9 em } { \g__nju_info_udc_tl      } \hfill \null
   }
 \cs_new_protected:Npn \__nju_cover_title_nl:
@@ -173,19 +173,19 @@
   {
     \parbox [ b ] { 15 em } { \__nju_uline_title: } \par
     \skip_vertical:n { - 0.5 cm }
-    { \zihao { 4 } \g__nju_name_title_b_tl }
+    { \zihao { 4 } \c__nju_name_title_b_tl }
     \skip_vertical:N \c_zero_skip
     \__nju_ulined_center_box:nn { 4.5 em } { \g__nju_info_author_tl }
     \skip_vertical:n { - 0.5 cm }
-    { \zihao { 4 } { ( } \g__nju_name_author_tl { ) } }
+    { \zihao { 4 } { ( } \c__nju_name_author_tl { ) } }
   }
 \cs_new_protected:Npn \__nju_cover_info_nl:
   {
-    \__nju_uline_list:nnn { \g__nju_name_supvinfo_tl }
+    \__nju_uline_list:nnn { \c__nju_name_supvinfo_tl }
       {
         \clist_use:Nn \g__nju_info_supv_clist    { ~ }
-        \clist_use:Nn \g__nju_info_supv_ii_clist { ~ } ~
-        \g__nju_info_supv_cont_tl
+        \clist_use:Nn \g__nju_info_supv_ii_clist { ~ }
+        \__nju_hskip: \g__nju_info_supvcont_tl
       }
       { 1 em plus 1 fill }
     \__nju_uline_bientry:Nnnn \l__nju_tmpa_dim { degree      } { degree     } { }
@@ -192,7 +192,7 @@
     \__nju_uline_bientry:Nnnn \l__nju_tmpa_dim { major_b     } { major      } { } \\
     \__nju_uline_bientry:Nnnn \l__nju_tmpa_dim { submitdate  } { submitdate } { }
     \__nju_uline_bientry:Nnnn \l__nju_tmpa_dim { defenddate  } { defenddate } { } \\
-    \__nju_full_uline:Nn      \l__nju_tmpa_dim { \g__nju_name_confer_tl }
+    \__nju_full_uline:Nn      \l__nju_tmpa_dim { \c__nju_name_confer_tl }
     \__nju_uline:n          { \l__nju_tmpa_dim }
   }
 \cs_new_protected:Npn \__nju_cover_bottom_nl:
@@ -205,13 +205,13 @@
   }
 \__nju_declare_element:nn { authdecl / g / title }
   {
-    content     = \g__nju_name_authdecl_tl,
-    format      = \g__nju_fmt_chapter_tl,
+    content     = \c__nju_name_authdecl_tl,
+    format      = \c__nju_fmt_chapter_tl,
     bottom-skip = 3 cm
   }
 \__nju_declare_element:nn { authdecl / g / text }
   {
-    content     = \g__nju_text_authdecl_tl,
+    content     = \c__nju_text_authdecl_tl,
     align       = n,
     bottom-skip = 2 cm
   }
@@ -252,12 +252,12 @@
         cell{1}{2} = {c=5}{m}, cell{3}{2} = {c=5}{m},
         cell{4}{2} = {c=5}{m}, cell{5}{2} = {c=5}{m}
       }
-      \g__nju_name_title_c_tl  & \g__nju_info_title_tl \\
-      \g__nju_name_id_a_tl     & \g__nju_info_id_tl    &
-      \g__nju_name_dept_a_tl   & \g__nju_info_dept_tl  &
-      \g__nju_name_year_tl     &
+      \c__nju_name_title_c_tl  & \g__nju_info_title_tl \\
+      \c__nju_name_id_a_tl     & \g__nju_info_id_tl    &
+      \c__nju_name_dept_a_tl   & \g__nju_info_dept_tl  &
+      \c__nju_name_year_tl     &
         \tl_range:Nnn \g__nju_info_submitdate_raw_tl {1} {4} \\
-      \g__nju_name_degree_a_tl &
+      \c__nju_name_degree_a_tl &
         {
           \__nju_degree_checkbox:n { 2 } 学术学位硕士 \qquad{}
           \__nju_degree_checkbox:n { 3 } 专业学位硕士 \\
@@ -264,22 +264,26 @@
           \__nju_degree_checkbox:n { 4 } 学术学位博士 \qquad{}
           \__nju_degree_checkbox:n { 5 } 专业学位博士
         } \\
-      \g__nju_name_email_tl    & \g__nju_info_email_tl \\
-      \g__nju_name_supv_b_tl   &
-        \clist_item:Nn \g__nju_info_supv_clist    {1}
-        \clist_item:Nn \g__nju_info_supv_ii_clist {1} \\
+      \c__nju_name_email_tl    & \g__nju_info_email_tl \\
+      \c__nju_name_supv_b_tl   &
+        \clist_item:Nn \g__nju_info_supv_clist {1}
+        \bool_if:NT \l__nju_second_supv_bool
+          {
+            \__nju_quad:
+            \clist_item:Nn \g__nju_info_supv_ii_clist {1}
+          } \\
     \end{tblr}
   }
 \cs_new_protected:Npn \__nju_authdecl_sign_g:
   {
-    \g__nju_name_authsign_tl \par
-    \g__nju_name_blankdate_tl
+    \c__nju_name_authsign_tl \par
+    \c__nju_name_blankdate_tl
   }
 \cs_new_protected:Npn \__nju_authdecl_secretlv_g:
   {
-    \g__nju_name_secretstatus_tl \par
-    \ensuremath { \mdwhtsquare } \g__nju_name_secretfree_tl \par
-    \ensuremath { \mdwhtsquare } \g__nju_name_secretdate_tl
+    \c__nju_name_secretstatus_tl \par
+    \ensuremath { \mdwhtsquare } \c__nju_name_secretfree_tl \par
+    \ensuremath { \mdwhtsquare } \c__nju_name_secretdate_tl
   }
 \__nju_declare_page:nn { cover-g-front-default }
   {
@@ -323,9 +327,9 @@
   { \UseInstance { nju } { cover-nl-default } }
 \cs_new_protected:Npn \__nju_make_origdecl:
   {
-    \chapter* { \g__nju_name_origdecl_tl }
+    \chapter* { \c__nju_name_origdecl_tl }
     \thispagestyle { empty }
-    \g__nju_text_origdecl_tl
+    \c__nju_text_origdecl_tl
     \vfil
     \begin{flushright}
       \clist_map_inline:nn { origsign,     origdate }
@@ -335,13 +339,11 @@
   }
 \cs_new_protected:Npn \__nju_make_authdecl:
   {
-    \thispagestyle{empty}
     \UseInstance { nju } { authdecl-g-default }
-    \cleardoublepage
   }
 \__nju_declare_element:nn { abstract / title }
   {
-    content     = \__nju_abs_title:V \g__nju_name_abstracttitle_tl,
+    content     = \__nju_abs_title:V \c__nju_name_abstracttitle_tl,
     format      = \bfseries \kaishu \zihao { -2 },
     bottom-skip = 1.2 cm
   }
@@ -354,7 +356,7 @@
   }
 \__nju_declare_element:nn { abstract / en / title }
   {
-    content     = \__nju_abs_title:V \g__nju_name_abstracttitle_en_tl,
+    content     = \__nju_abs_title:V \c__nju_name_abstracttitle_en_tl,
     format      = \bfseries \kaishu \zihao { -2 },
     bottom-skip = 1.2 cm
   }
@@ -367,13 +369,13 @@
   }
 \__nju_declare_element:nn { abstract / mark }
   {
-    content     = \g__nju_name_abstract_b_tl,
+    content     = \c__nju_name_abstract_b_tl,
     format      = \sffamily \zihao { -3 },
     bottom-skip = 1 cm
   }
 \__nju_declare_element:nn { abstract / en / mark }
   {
-    content     = \g__nju_name_abstract_b_en_tl,
+    content     = \c__nju_name_abstract_b_en_tl,
     format      = \sffamily \zihao { -3 },
     bottom-skip = 1 cm
   }
@@ -381,21 +383,21 @@
   {
     \__nju_uline_list:xnn
       {
-        \clist_item:Nn \g__nju_name_type_clist { \g__nju_info_type_int }
-        \g__nju_name_title_a_tl #1
+        \clist_item:Nn \c__nju_name_type_clist { \g__nju_info_type_int }
+        \c__nju_name_title_a_tl #1
       }
       { \g__nju_info_title_tl } { \g__nju_abs_title_left_skip }
     \__nju_full_uline:NV \l__nju_tmpa_dim
       {
         \__nju_ulined_center_box:nn { 11 em } { \g__nju_info_major_tl }
-        \g__nju_name_major_a_tl
+        \c__nju_name_major_a_tl
         \__nju_ulined_center_box:nn { 4  em } { \g__nju_info_grade_tl }
-        \g__nju_name_grade_tl \g__nju_name_author_a_tl #1
+        \c__nju_name_grade_tl \c__nju_name_author_a_tl #1
       }
     \__nju_ulined_center_box:nn { \l__nju_tmpa_dim }
       { \g__nju_info_author_tl } \\
     \__nju_full_uline:NV \l__nju_tmpa_dim
-      { \g__nju_name_supv_a_tl #1 }
+      { \c__nju_name_supv_a_tl #1 }
     \__nju_ulined_center_box:nn { \l__nju_tmpa_dim }
       { \g__nju_info_supvfull_tl }
   }
@@ -482,7 +484,8 @@
     { major_a      } { 专业                             },
     % 用于国家图书馆封面的专业名称字样
     { major_b      } { 专业名称                         },
-    { origdecl     } { 南京大学学位论文原创性声明       },
+    { origdecl     }
+      { \c__nju_name_nju_tl 学位论文原创性声明            },
     { origsign     } { 研究生签名                       },
     { reviewer     } { 评阅人:                         },
     { secretlv     } { 密级                             },
@@ -489,8 +492,8 @@
     { secretstatus } { 论文涉密情况:                   },
     { secretfree   } { 不保密                           },
     { secretdate   }
-      { 保密,保密期( \g__nju_name_blankdate_tl 至
-                       \g__nju_name_blankdate_tl )       },
+      { 保密,保密期( \c__nju_name_blankdate_tl 至
+                       \c__nju_name_blankdate_tl )       },
     { sign         } { (签字)                         },
     { submitdate   } { 论文提交日期                     },
     { supv         } { 导师                             },
@@ -515,22 +518,22 @@
 \clist_map_inline:nn
   {
     { abstracttitle }
-      { 南京大学 \g__nju_info_type_tl 中文摘要首页用纸 }
-      { 南京大学 \g__nju_info_type_tl 英文摘要首页用纸 },
-    { author    } { 作者姓名 } { POSTGRADUATE        },
-    { major     } { 专业方向 } { SPECIALIZATION      },
-    { supvfull  } { 指导教师 } { MENTOR              }
+      { \c__nju_name_nju_tl \g__nju_info_type_tl 中文摘要首页用纸 }
+      { \c__nju_name_nju_tl \g__nju_info_type_tl 英文摘要首页用纸 },
+    { author    } { 作者姓名 } { POSTGRADUATE   },
+    { major     } { 专业方向 } { SPECIALIZATION },
+    { supvfull  } { 指导教师 } { MENTOR         }
   }
   { \__nju_define_name:nnn #1 }
-\tl_const:Nn \g__nju_text_origdecl_tl
+\tl_const:Nn \c__nju_text_origdecl_tl
   {
-    本人郑重声明,所提交的学位论文是本人在导师指导下独立进行科学研究工作
-    所取得的成果。除本论文中已经注明引用的内容外,本论文不包含其他个人或
-    集体已经发表或撰写过的研究成果,也不包含为获得南京大学或其他教育机构
-    的学位证书而使用过的材料。对本文的研究做出重要贡献的个人和集体,均已
-    在论文的致谢部分明确标明。本人郑重申明愿承担本声明的法律责任。
+    本人郑重声明,所提交的学位论文是本人在导师指导下独立进行科学研究工作所
+    取得的成果。除本论文中已经注明引用的内容外,本论文不包含其他个人或集体
+    已经发表或撰写过的研究成果,也不包含为获得 \c__nju_name_nju_tl 或其他教
+    育机构的学位证书而使用过的材料。对本文的研究做出重要贡献的个人和集体,
+    均已在论文的致谢部分明确标明。本人郑重申明愿承担本声明的法律责任。
   }
-\tl_gset:Nn \g__nju_text_authdecl_tl
+\tl_const:Nn \c__nju_text_authdecl_tl
   {
     本人完全同意《中国优秀博硕士学位论文全文数据库出版章程》
     (以下简称“章程”),愿意将本人的学位论文提交“中国学术期刊
@@ -541,10 +544,10 @@
     《中国知识资源总库》,在《中国博硕士学位论文评价数据库》
     中使用和在互联网上传播,同意按“章程”规定享受相关权益。
   }
-\tl_gset:Nn \g__nju_text_cover_en_tl
+\tl_const:Nn \c__nju_text_cover_en_tl
   {
     A~ dissertation~ submitted~ to \\
-    the~ graduate~ school~ of~ Nanjing~ University \\
+    the~ graduate~ school~ of~ \c__nju_name_nju_en_tl \\
     in~ partial~ fulfilment~ of~ the~ requirements~ for~ the~ degree~ of
   }
 \clist_map_inline:nn
@@ -563,6 +566,9 @@
     { coverlabel    } { 100 pt },
     { coverlineskip } { 40  pt },
     { coveruline    } { 270 pt },
+    { emblemwidthi  } { 46  pt },
+    { emblemwidthii } { 61  pt },
+    { namewidth     } { 126 pt },
     { smallhskip    } { 5   pt },
     { smallvskip    } { 1   ex }
   }
@@ -569,12 +575,14 @@
   { \__nju_define_dim:nn #1 }
 \clist_map_inline:nn
   {
-    { chapterintoc  } { \large \normalfont \sffamily            },
-    { chapter       } { \large \normalfont \sffamily \centering },
-    { section       } { \large \normalfont \sffamily            },
-    { subsection    } { \large \normalfont \sffamily            },
-    { subsubsection } { \large \normalfont \sffamily            },
-    { toctitle      } { \centering \zihao { 3 } \bfseries       }
+    { section       } { \large \normalfont \sffamily      },
+    { chapter       } { \c__nju_fmt_section_tl \centering   },
+    { chapterintoc  } { \c__nju_fmt_section_tl              },
+    { subsection    } { \c__nju_fmt_section_tl              },
+    { subsubsection } { \c__nju_fmt_section_tl              },
+    { paragraph     } { \c__nju_fmt_section_tl              },
+    { subparagraph  } { \c__nju_fmt_section_tl              },
+    { toctitle      } { \centering \zihao { 3 } \bfseries }
   }
   { \__nju_define_fmt:nn #1 }
 \endinput

Modified: trunk/Master/texmf-dist/tex/latex/njuthesis/njuthesis-undergraduate.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/njuthesis/njuthesis-undergraduate.def	2022-05-01 20:12:23 UTC (rev 63201)
+++ trunk/Master/texmf-dist/tex/latex/njuthesis/njuthesis-undergraduate.def	2022-05-01 20:12:37 UTC (rev 63202)
@@ -23,7 +23,7 @@
 %% To produce the documentation run the original source files ending with
 %% `.dtx' through XeTeX.
 %% 
-\GetIdInfo $Id: njuthesis.dtx 0.17.0 2022-04-09 16:30:00 +0800 NJU LUG <git+nju-lug-email-3104-issue- at yaoge123.cn>$
+\GetIdInfo $Id: njuthesis.dtx 0.18.0 2022-05-01 12:40:00 +0800 NJU LUG <git+nju-lug-email-3104-issue- at yaoge123.cn>$
   {Undergraduate definition file for njuthesis}
 \ProvidesExplFile{njuthesis-undergraduate.def}
   {\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription}
@@ -30,13 +30,13 @@
 \tl_const:Nn \c__nju_pagestyle_tl { plain    }
 \__nju_declare_element:nn { cover / ug / emblem-img }
   {
-    content = \njuemblem [ black ] { ! } { 3.35 cm },
+    content     = \__nju_emblem:N \c__nju_emblemwidth_dim,
     bottom-skip = 1 cm,
-    align   = l
+    align       = l
   }
 \__nju_declare_element:nn { cover / ug / name-img }
   {
-    content     = \njuname [ black ] { ! } { 3 cm },
+    content     = \__nju_name:N \c__nju_namewidth_dim,
     bottom-skip = 1 cm
   }
 \__nju_declare_element:nn { cover / ug / title }
@@ -49,23 +49,23 @@
 \__nju_declare_element:nn { cover / ug / info }
   {
     content  =
-      \__nju_cover_info_ug:NN \g__nju_coverlabel_dim \g__nju_coveruline_dim,
+      \__nju_cover_info_ug:NN \c__nju_coverlabel_dim \c__nju_coveruline_dim,
     format   = \zihao { 3 }
   }
 \cs_new_protected:Npn \__nju_cover_info_ug:NN #1#2
   {
-    \begin{minipage} { #1 + #2 + \g__nju_smallhskip_dim }
-      \dim_set_eq:NN \baselineskip \g__nju_coverlineskip_dim
-      \dim_set:Nn \l__nju_tmpb_dim { .5 #2 - .5 #1 - \g__nju_smallhskip_dim }
-      \__nju_cover_entry:nnn { dept     } { #1 } { #2 }
-      \__nju_cover_entry:nnn { major    } { #1 } { #2 }
-      \__nju_cover_entry_title:nnn  { \bf } { #1 } { #2 }
-      \__nju_cover_bientry:nnnn { grade } { id } { #1 } { \l__nju_tmpb_dim }
-      \__nju_cover_entry:nnn { author   } { #1 } { #2 }
+    \begin{minipage} { #1 + #2 + \c__nju_smallhskip_dim }
+      \dim_set_eq:NN \baselineskip \c__nju_coverlineskip_dim
+      \dim_set:Nn \l__nju_tmpb_dim { .5 #2 - .5 #1 - \c__nju_smallhskip_dim }
+      \__nju_cover_entry:nnn { dept      } { #1 } { #2 }
+      \__nju_cover_entry:nnn { major     } { #1 } { #2 }
+      \__nju_cover_entry_title:nnn { \bf } { #1 } { #2 }
+      \__nju_cover_bientry:nnnn { grade  } { id } { #1 } { \l__nju_tmpb_dim }
+      \__nju_cover_entry:nnn { author    } { #1 } { #2 }
       \__nju_cover_entry_supv:nnn { supv } { #1 } { \l__nju_tmpb_dim }
       \bool_if:NT \l__nju_second_supv_bool
         { \__nju_cover_entry_supv:nnn { supv_ii } { #1 } { \l__nju_tmpb_dim } }
-      \__nju_cover_entry:nnn { submitdate  } { #1 } { #2 }
+      \__nju_cover_entry:nnn { submitdate } { #1 } { #2 }
     \end{minipage}
   }
 \__nju_declare_page:nn { cover-ug-default }
@@ -80,9 +80,9 @@
   }
 \cs_new_protected:Npn \__nju_make_origdecl:
   {
-    \chapter* { \g__nju_name_origdecl_tl }
+    \chapter* { \c__nju_name_origdecl_tl }
     \thispagestyle { empty }
-    \g__nju_text_origdecl_tl
+    \c__nju_text_origdecl_tl
     \vfil
     \begin{flushright}
       \clist_map_inline:nn { origsign, id, origdate }
@@ -92,11 +92,11 @@
   }
 \cs_new_protected:Npn \__nju_make_authdecl:
   {
-      \prg_do_nothing:
+    \prg_do_nothing:
   }
 \__nju_declare_element:nn { abstract / title }
   {
-    content     = \__nju_abs_title:V \g__nju_name_abstracttitle_tl,
+    content     = \__nju_abs_title:V \c__nju_name_abstracttitle_tl,
     format      = \bfseries \kaishu \zihao { -2 },
     bottom-skip = 1.2 cm
   }
@@ -109,7 +109,7 @@
   }
 \__nju_declare_element:nn { abstract / en / title }
   {
-    content     = \__nju_abs_title:V \g__nju_name_abstracttitle_en_tl,
+    content     = \__nju_abs_title:V \c__nju_name_abstracttitle_en_tl,
     format      = \bfseries \kaishu \zihao { -2 },
     bottom-skip = 1.2 cm
   }
@@ -123,10 +123,10 @@
 \cs_new_protected:Npn \__nju_abs_info_ug:nn #1#2
   {
     \tl_if_blank:eTF { #1 }
-      { \g__nju_name_title_tl }
-      { \clist_item:Nn \g__nju_name_type_en_clist { \g__nju_info_type_int } }
+      { \c__nju_name_title_tl }
+      { \clist_item:Nn \c__nju_name_type_en_clist { \g__nju_info_type_int } }
     #2 \tl_use:c { g__nju_info_title #1 _tl } \\
-    \tl_set_eq:NN \g__nju_name_author_tl \g__nju_name_author_a_tl
+    \tl_set_eq:NN \c__nju_name_author_tl \c__nju_name_author_a_tl
     \clist_map_inline:nn { dept, major, author, supvfull }
       { \__nju_name:n { ##1 #1 } #2 \__nju_info:n { ##1 #1 } \\ }
     \__nju_name:n { abstract #1 } #2
@@ -133,13 +133,13 @@
   }
 \__nju_declare_element:nn { abstract / mark }
   {
-    content     = \g__nju_name_abstract_b_tl,
+    content     = \c__nju_name_abstract_b_tl,
     format      = \sffamily \zihao { -3 },
     bottom-skip = 1 cm
   }
 \__nju_declare_element:nn { abstract / en / mark }
   {
-    content     = \g__nju_name_abstract_b_en_tl,
+    content     = \c__nju_name_abstract_b_en_tl,
     format      = \sffamily \zihao { -3 },
     bottom-skip = 1 cm
   }
@@ -191,7 +191,7 @@
     { author_a    } { 本科生姓名                         },
     { grade       } { 年级                               },
     { origdecl    }
-      { \g__nju_name_nju_tl 本科毕业论文(设计)诚信承诺书 },
+      { \c__nju_name_nju_tl 本科毕业论文(设计)诚信承诺书 },
     { origsign    } { 作者签名                           },
     { submitdate  } { 提交日期                           },
     { supv        } { 导师                               },
@@ -204,12 +204,12 @@
   {
     { abstracttitle }
       {
-        \g__nju_name_nju_tl  \g__nju_name_type_tl
-        \g__nju_name_lang_tl \g__nju_name_abstract_tl
+        \c__nju_name_nju_tl  \c__nju_name_type_tl
+        \c__nju_name_lang_tl \c__nju_name_abstract_tl
       }
       {
-        \g__nju_name_nju_tl     \g__nju_name_type_tl
-        \g__nju_name_lang_en_tl \g__nju_name_abstract_tl
+        \c__nju_name_nju_tl     \c__nju_name_type_tl
+        \c__nju_name_lang_en_tl \c__nju_name_abstract_tl
       },
     { author    } { 学生姓名               } { UNDERGRADUATE  },
     { major     } { 专业                   } { SPECIALIZATION },
@@ -216,7 +216,7 @@
     { supvfull  } { 指导教师(姓名、职称) } { MENTOR         }
   }
   { \__nju_define_name:nnn #1 }
-\tl_const:Nn \g__nju_text_origdecl_tl
+\tl_const:Nn \c__nju_text_origdecl_tl
   {
     本人郑重承诺:所呈交的毕业论文(设计)(题目: \g__nju_info_title_tl )
     是在指导教师的指导下严格按照学校和院系有关规定由本人独立完成的。
@@ -240,6 +240,8 @@
     { coverlabel    } { 68  pt },
     { coverlineskip } { 40  pt },
     { coveruline    } { 270 pt },
+    { emblemwidth   } { 68  pt },
+    { namewidth     } { 300 pt },
     { smallhskip    } { 5   pt },
     { smallvskip    } { 1   ex }
   }
@@ -246,12 +248,14 @@
   { \__nju_define_dim:nn #1 }
 \clist_map_inline:nn
   {
-    { chapterintoc  } { \large \normalfont \sffamily            },
-    { chapter       } { \large \normalfont \sffamily \centering },
-    { section       } { \large \normalfont \sffamily            },
-    { subsection    } { \large \normalfont \sffamily            },
-    { subsubsection } { \large \normalfont \sffamily            },
-    { toctitle      } { \centering \zihao { 3 } \bfseries       }
+    { section       } { \large \normalfont \sffamily      },
+    { chapter       } { \c__nju_fmt_section_tl \centering   },
+    { chapterintoc  } { \c__nju_fmt_section_tl              },
+    { subsection    } { \c__nju_fmt_section_tl              },
+    { subsubsection } { \c__nju_fmt_section_tl              },
+    { paragraph     } { \c__nju_fmt_section_tl              },
+    { subparagraph  } { \c__nju_fmt_section_tl              },
+    { toctitle      } { \centering \zihao { 3 } \bfseries }
   }
   { \__nju_define_fmt:nn #1 }
 \endinput

Modified: trunk/Master/texmf-dist/tex/latex/njuthesis/njuthesis.cls
===================================================================
--- trunk/Master/texmf-dist/tex/latex/njuthesis/njuthesis.cls	2022-05-01 20:12:23 UTC (rev 63201)
+++ trunk/Master/texmf-dist/tex/latex/njuthesis/njuthesis.cls	2022-05-01 20:12:37 UTC (rev 63202)
@@ -24,7 +24,7 @@
 %% `.dtx' through XeTeX.
 %% 
 \NeedsTeXFormat{LaTeX2e}
-\GetIdInfo $Id: njuthesis.dtx 0.17.0 2022-04-09 16:30:00 +0800 NJU LUG <git+nju-lug-email-3104-issue- at yaoge123.cn>$
+\GetIdInfo $Id: njuthesis.dtx 0.18.0 2022-05-01 12:40:00 +0800 NJU LUG <git+nju-lug-email-3104-issue- at yaoge123.cn>$
   {Thesis template for Nanjing University}
 \ProvidesExplClass{njuthesis}
   {\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription}
@@ -86,13 +86,13 @@
     \int_to_arabic:n { \c_sys_month_int } -
     \int_to_arabic:n { \c_sys_day_int   }
   }
-\clist_const:Nn \g__nju_name_type_clist
+\clist_const:Nn \c__nju_name_type_clist
   { 毕业论文, 毕业设计 }
-\clist_const:Nn \g__nju_name_type_en_clist
+\clist_const:Nn \c__nju_name_type_en_clist
   { THESIS, DESIGN }
-\clist_const:Nn \g__nju_name_degree_clist
+\clist_const:Nn \c__nju_name_degree_clist
   { 学士, 硕士, 硕士专业, 博士 }
-\clist_const:Nn \g__nju_name_degree_en_clist
+\clist_const:Nn \c__nju_name_degree_en_clist
   { Bachelor, Master, Master, Doctor~of~Philosophy }
 \clist_const:Nn \c__nju_month_en_clist
   {
@@ -99,10 +99,19 @@
     January, February, March, April, May, June,
     July, August, September, October, November, December
   }
+\clist_const:Nn \c__nju_blind_info_clist
+  {
+    author, chairman, clc, dept, email, field, grade,
+    id, major, secretlv, supvcont, udc
+  }
+\clist_const:Nn \c__nju_blind_info_en_clist
+  { author, dept, field, major, supv, supv_ii }
+\clist_const:Nn \c__nju_blind_infolist_clist
+  { reviewer, supv, supv_ii }
 \cs_new:Nn \__nju_quad:  { \skip_horizontal:n { 1 em } }
 \cs_new:Nn \__nju_qquad: { \skip_horizontal:n { 2 em } }
-\cs_new:Nn \__nju_vskip: { \skip_vertical:N   \g__nju_smallvskip_dim }
-\cs_new:Nn \__nju_hskip: { \skip_horizontal:N \g__nju_smallhskip_dim }
+\cs_new:Nn \__nju_vskip: { \skip_vertical:N   \c__nju_smallvskip_dim }
+\cs_new:Nn \__nju_hskip: { \skip_horizontal:N \c__nju_smallhskip_dim }
 \cs_new_protected:Npn \__nju_vskip:N #1
   {
     \hrule height \c_zero_dim
@@ -111,38 +120,24 @@
     \skip_vertical:N #1
   }
 \cs_new_protected:Npn \__nju_define_name:nn #1#2
-  {
-    \tl_new:c   { g__nju_name_ #1    _tl }
-    \tl_gset:cn { g__nju_name_ #1    _tl } { #2 }
-  }
+  { \tl_const:cn { c__nju_name_ #1    _tl } { #2 } }
 \cs_new_protected:Npn \__nju_define_name:nnn #1#2#3
   {
-    \tl_new:c   { g__nju_name_ #1    _tl }
-    \tl_gset:cn { g__nju_name_ #1    _tl } { #2 }
-    \tl_new:c   { g__nju_name_ #1 _en_tl }
-    \tl_gset:cn { g__nju_name_ #1 _en_tl } { #3 }
+    \tl_const:cn { c__nju_name_ #1    _tl } { #2 }
+    \tl_const:cn { c__nju_name_ #1 _en_tl } { #3 }
   }
 \cs_new_protected:Npn \__nju_define_fmt:nn #1#2
-  {
-    \tl_new:c   { g__nju_fmt_ #1 _tl }
-    \tl_gset:cn { g__nju_fmt_ #1 _tl } { #2 }
-  }
+  { \tl_const:cn { c__nju_fmt_ #1 _tl } { #2 } }
 \cs_new_protected:Npn \__nju_define_dim:nn #1#2
-  {
-    \dim_new:c   { g__nju_ #1 _dim }
-    \dim_gset:cn { g__nju_ #1 _dim } { #2 }
-  }
+  { \dim_const:cn  { c__nju_ #1 _dim  } { #2 } }
 \cs_new_protected:Npn \__nju_define_skip:nn #1#2
-  {
-    \skip_new:c   { g__nju_ #1 _skip }
-    \skip_gset:cn { g__nju_ #1 _skip } { #2 }
-  }
+  { \skip_const:cn { c__nju_ #1 _skip } { #2 } }
 \cs_new_protected:Npn \__nju_add_theorem_type:nnn #1#2#3
   {
     \clist_gput_right:Nn \g__nju_theorem_type_clist { #1 }
     \__nju_define_name:nnn { #1 } { #2 } { #3 }
   }
-\cs_new:Npn \__nju_name:n #1 { \tl_use:c { g__nju_name_ #1 _tl } }
+\cs_new:Npn \__nju_name:n #1 { \tl_use:c { c__nju_name_ #1 _tl } }
 \cs_new:Npn \__nju_info:n #1 { \tl_use:c { g__nju_info_ #1 _tl } }
 \cs_new_protected:Npn \__nju_ulined_center_box:nn #1#2
   {
@@ -169,13 +164,6 @@
         \int_incr:N #1
       }
   }
-\cs_new_protected:Npn \__nju_put_inempty_seg:nnn #1#2#3
-  {
-    \tl_set:Nx \l__nju_tmpa_tl
-      { \tl_range:Nnn { #1 } { #2 } { #2 + #3 - 1 } }
-    \tl_if_empty:NF \l__nju_tmpa_tl
-      { \clist_put_right:NV \l__nju_tmp_clist { \l__nju_tmpa_tl } }
-  }
 \cs_new_protected:Npn \__nju_uline:n #1
   {
     \mode_leave_vertical:
@@ -242,13 +230,13 @@
   {
     \tl_if_empty:NT \g__nju_info_title_tl
       { \msg_error:nn { njuthesis } { missing-title } }
-    \__nju_spread_box:nnV { #2 } { \kaishu } \g__nju_name_title_tl
+    \__nju_spread_box:nnV { #2 } { \kaishu } \c__nju_name_title_tl
     \mode_leave_vertical: \__nju_hskip:
     \parbox [ t ] { #3 }
       {
-        \dim_set_eq:NN \baselineskip \g__nju_coverlineskip_dim
+        \dim_set_eq:NN \baselineskip \c__nju_coverlineskip_dim
         #1 \__nju_uline_title:
-        \dim_set_eq:NN \l__nju_tmpa_dim \prevdepth
+        \dim_gset_eq:NN \l__nju_tmpa_dim \prevdepth
       }
     \par \prevdepth \l__nju_tmpa_dim
   }
@@ -277,12 +265,16 @@
     \__nju_ulined_center_box:nn { #3 }
       { \clist_item:cn { g__nju_info_ #1 _clist } { 1 } }
     \__nju_hskip:
-    \__nju_spread_box:nnV { #2 } { \kaishu } \g__nju_name_supv_ttl_tl
+    \__nju_spread_box:nnV { #2 } { \kaishu } \c__nju_name_supv_ttl_tl
     \__nju_hskip:
     \__nju_ulined_center_box:nn { #3 }
       { \clist_item:cn { g__nju_info_ #1 _clist } { 2 } }
     \par
   }
+\cs_new_protected:Npn \__nju_emblem:N #1
+  { \njuemblem [ black ] { #1 } { ! } }
+\cs_new_protected:Npn \__nju_name:N   #1
+  { \njuname   [ black ] { #1 } { ! } }
 \cs_new_protected:Npn \__nju_abs_bookmark:nn #1#2
   {
     \phantomsection
@@ -396,7 +388,8 @@
   }
   {
     \AssignTemplateKeys
-    \newpage
+    \clearpage
+    \thispagestyle { empty }
     \__nju_vskip:N \l__njupage_top_skip
     \group_begin:
       \l__njupage_format_tl
@@ -426,6 +419,8 @@
     oneside   .value_forbidden:n  = true,
     twoside   .value_forbidden:n  = true,
     oneside .bool_gset_inverse:N  = \g__nju_twoside_bool,
+    blind     .value_forbidden:n  = true,
+    blind            .bool_set:N  = \g__nju_blind_bool,
     latin-font        .choices:nn =
       { gyre, mac, win, none }
       { \tl_set_eq:NN \g__nju_latin_font_tl \l_keys_choice_tl },
@@ -437,18 +432,26 @@
 \ProcessKeysOptions { nju }
 \keys_define:nn { nju }
   {
-    bib   .meta:nn = { nju / bib   } { #1 },
-    info  .meta:nn = { nju / info  } { #1 },
-    style .meta:nn = { nju / style } { #1 }
+    % abstract .meta:nn = { nju / abstract } { #1 },
+    bib      .meta:nn = { nju / bib      } { #1 },
+    % cover    .meta:nn = { nju / cover    } { #1 },
+    % font     .meta:nn = { nju / font     } { #1 },
+    % footer   .meta:nn = { nju / footer   } { #1 },
+    % footnote .meta:nn = { nju / footnote } { #1 },
+    % header   .meta:nn = { nju / header   } { #1 },
+    info     .meta:nn = { nju / info     } { #1 },
+    style    .meta:nn = { nju / style    } { #1 },
+    theorem  .meta:nn = { nju / theorem  } { #1 }
+    % toc      .meta:nn = { nju / toc      } { #1 }
   }
 \NewDocumentCommand \njusetup { m } { \keys_set:nn { nju } { #1 } }
 \NewDocumentCommand \njusetformat { m m }
-  { \tl_gset:cn { g__nju_fmt_ #1 _tl } { #2 } }
+  { \tl_gset:cn { c__nju_fmt_ #1 _tl } { #2 } }
 \NewDocumentCommand \njusetlength { s m m }
   {
     \bool_if:nTF { #1 }
-      { \skip_gset:cn { g__nju_ #2 _skip } { #3 } }
-      { \dim_gset:cn  { g__nju_ #2 _dim  } { #3 } }
+      { \skip_gset:cn { c__nju_ #2 _skip } { #3 } }
+      { \dim_gset:cn  { c__nju_ #2 _dim  } { #3 } }
   }
 \NewDocumentCommand \njusetname { s m o m }
   { \__nju_set_tokenlist:nnnnn {#1} {#2} {#3} {#4} { name } }
@@ -462,7 +465,7 @@
     \bool_if:nTF       { #1 }
       { \tl_set:Nn  \l__nju_tmpb_tl { _en  } }
       { \tl_clear:N \l__nju_tmpb_tl          }
-    \tl_gset:cn { g__nju_ #5 _ #2 \l__nju_tmpa_tl \l__nju_tmpb_tl _tl } {#4}
+    \tl_gset:cn { c__nju_ #5 _ #2 \l__nju_tmpa_tl \l__nju_tmpb_tl _tl } {#4}
   }
 \PassOptionsToClass
   {
@@ -480,7 +483,6 @@
   {
     { no-math           } { fontspec     },
     { perpage           } { footmisc     },
-    { amsmath, thmmarks } { ntheorem     },
     { hyphens           } { url          },
     { warnings-off={ mathtools-colon, mathtools-overbracket } }
                           { unicode-math },
@@ -493,10 +495,10 @@
   {
     geometry,
     fancyhdr,
+    footmisc,
     setspace,
     mathtools,
     unicode-math,
-    ntheorem,
     booktabs,
     caption,
     graphicx,
@@ -527,13 +529,34 @@
     Please~ update~ an~ up-to-date~ version~ of~ it~
     using~ your TeX~ package~ manager~ or~ from~ CTAN.
   }
-\cs_new_protected:Npn \__nju_check_package:nnn #1#2#3
+\cs_new_protected:Npn \__nju_check_pkg_version:nnn #1#2#3
   {
     \@ifpackagelater {#1} {#2}
       { } { \msg_error:nnnn { njuthesis } { package-too-old } {#1} {#3} }
   }
 \sys_if_engine_luatex:T
-  { \__nju_check_package:nnn { luatexja } { 2021/10/24 } { 20211024.0 } }
+  { \__nju_check_pkg_version:nnn { luatexja } { 2021/10/24 } { 20211024.0 } }
+\RequirePackage { filehook }
+\msg_new:nnn { njuthesis } { package-conflict }
+  {
+    The~ "#2"~ package~ is~ incompatible~ with~ "#1".\\
+    I~ have~ loaded~ "#1"~ by~ default.~ Maybe~ You~ should~
+    refer~ to~ section~ 4~ of~ the~ "njuthesis"~ manual.
+  }
+\cs_new_protected:Npn \__nju_check_pkg_conflict:nn #1#2
+  {
+    \AtEndOfPackageFile * { #1 }
+      {
+        \AtBeginOfPackageFile * { #2 }
+          { \msg_error:nnnn { njuthesis } { package-conflict } {#1} {#2} }
+      }
+  }
+\clist_map_inline:nn
+  {
+    amscd, amsfonts, amssymb, bbm, bm, eucal,
+    eufrak, mathrsfs, newtxmath, upgreek
+  }
+  { \__nju_check_pkg_conflict:nn { unicode-math } { #1 } }
 \int_compare:nTF { \g__nju_info_degree_int == 1 }
   { \file_input:n { njuthesis-undergraduate.def } }
   { \file_input:n { njuthesis-     graduate.def } }
@@ -575,12 +598,12 @@
     clc                 .tl_set:N = \g__nju_info_clc_tl,
     secret-level        .tl_set:N = \g__nju_info_secretlv_tl,
     udc                 .tl_set:N = \g__nju_info_udc_tl,
-    supervisor-contact  .tl_set:N = \g__nju_info_supv_cont_tl,
+    supervisor-contact  .tl_set:N = \g__nju_info_supvcont_tl,
     email               .tl_set:N = \g__nju_info_email_tl
   }
 \tl_set:Nx \g__nju_info_degree_tl
   {
-    \clist_item:Nn \g__nju_name_degree_clist
+    \clist_item:Nn \c__nju_name_degree_clist
       { \g__nju_info_degree_int }
   }
 \int_compare:nTF { \g__nju_info_degree_int == 1 }
@@ -587,11 +610,25 @@
   { \tl_set:Nn \g__nju_info_diploma_tl { ug } }
   { \tl_set:Nn \g__nju_info_diploma_tl { g  } }
 \tl_set:Nx \g__nju_info_type_tl
-  { \clist_item:Nn \g__nju_name_type_clist    { \g__nju_info_type_int } }
+  { \clist_item:Nn \c__nju_name_type_clist    { \g__nju_info_type_int } }
 \tl_set:Nx \g__nju_info_type_en_tl
-  { \clist_item:Nn \g__nju_name_type_en_clist { \g__nju_info_type_int } }
+  { \clist_item:Nn \c__nju_name_type_en_clist { \g__nju_info_type_int } }
 \tl_put_left:Nx \g__nju_info_type_tl
-  { \tl_use:c { g__nju_name_ \g__nju_info_diploma_tl _tl } }
+  { \tl_use:c { c__nju_name_ \g__nju_info_diploma_tl _tl } }
+\bool_if:NT \g__nju_blind_bool
+  {
+    \ctex_at_end_preamble:n
+      {
+        \clist_map_inline:Nn \c__nju_blind_info_clist
+          { \tl_gclear:c    { g__nju_info_ #1    _tl } }
+        \clist_map_inline:Nn \c__nju_blind_info_en_clist
+          { \tl_gclear:c    { g__nju_info_ #1 _en_tl } }
+        \clist_map_inline:Nn \c__nju_blind_infolist_clist
+          { \clist_gclear:c { g__nju_info_ #1 _clist } }
+        \tl_gclear:N \c__nju_name_nju_tl
+        \tl_gclear:N \c__nju_name_nju_en_tl
+      }
+  }
 \ctex_at_end_preamble:n
   {
     \bool_set:Nn \l__nju_second_supv_bool
@@ -938,7 +975,7 @@
     \pagenumbering { Roman }
   }
 \cs_new_protected:Npn \__nju_add_tocline:n #1
-  { \addcontentsline { toc } { chapter } { \g__nju_fmt_chapterintoc_tl #1 } }
+  { \addcontentsline { toc } { chapter } { \c__nju_fmt_chapterintoc_tl #1 } }
 \cs_generate_variant:Nn \__nju_add_tocline:n { V }
 \cs_new_protected:Npn \__nju_chapter:n #1
   {
@@ -958,14 +995,16 @@
   {
     chapter        / beforeskip = 10 pt,
     chapter        / afterskip  = 60 pt,
-    chapter        / format     = \g__nju_fmt_chapter_tl,
-    section        / format     = \g__nju_fmt_section_tl,
-    subsection     / format     = \g__nju_fmt_subsection_tl,
-    subsubsection  / format     = \g__nju_fmt_subsubsection_tl,
-    contentsname   = \g__nju_name_tableofcontents_tl,
-    listfigurename = \g__nju_name_listoffigures_tl,
-    listtablename  = \g__nju_name_listoftables_tl,
-    chapter / tocline = \g__nju_fmt_chapterintoc_tl \CTEXnumberline { #1 } #2
+    chapter        / format     = \c__nju_fmt_chapter_tl,
+    section        / format     = \c__nju_fmt_section_tl,
+    subsection     / format     = \c__nju_fmt_subsection_tl,
+    subsubsection  / format     = \c__nju_fmt_subsubsection_tl,
+    paragraph      / format     = \c__nju_fmt_paragraph_tl,
+    subparagraph   / format     = \c__nju_fmt_subparagraph_tl,
+    contentsname   = \c__nju_name_tableofcontents_tl,
+    listfigurename = \c__nju_name_listoffigures_tl,
+    listtablename  = \c__nju_name_listoftables_tl,
+    chapter / tocline = \c__nju_fmt_chapterintoc_tl \CTEXnumberline { #1 } #2
   }
 \keys_define:nn { nju / style }
   {
@@ -976,7 +1015,7 @@
   {
     \group_begin:
       \keys_set:nn { ctex }
-        { chapter/format = \g__nju_fmt_toctitle_tl }
+        { chapter/format = \c__nju_fmt_toctitle_tl }
       \bool_if:NTF \g__nju_toc_in_toc_bool
         { \__nju_chapter:n { #1 } }
         {
@@ -1076,7 +1115,7 @@
         pdftitle    = \g__nju_info_title_tl,
         pdfauthor   = \g__nju_info_author_tl,
         pdfkeywords = \g__nju_info_keywords_clist,
-        pdfcreator  = \g__nju_name_pdfcreator_tl
+        pdfcreator  = \c__nju_name_pdfcreator_tl
       }
   }
 \cs_new_protected:Npn \__nju_cref_name:n #1
@@ -1096,6 +1135,38 @@
 \crefformat { subsubsection } { 第~#2#1#3~小节 }
 \__nju_cref_name:n { figure, table, appendix, proof }
 \__nju_cref_name:V \g__nju_theorem_type_clist
+\tl_new:N \l__nju_fn_style_tl
+\keys_define:nn { nju / style }
+  {
+    footnote-style .choices:nn = { plain, pifont }
+      {
+        \tl_gset_eq:NN \l__nju_fn_style_tl \l_keys_choice_tl
+        \int_compare:nT { \l_keys_choice_int = 2 }
+          { \RequirePackage { pifont } }
+      }
+  }
+\cs_new:Npn \__nju_fn_symbol_pifont:n #1
+  { \ding { \int_eval:n { 171 + #1 } } }
+\tl_const:Nn \c__nju_fn_style_plain_tl  { plain  }
+\tl_const:Nn \c__nju_fn_style_pifont_tl { pifont }
+\cs_new:Npn \__nju_footnote_number:N #1
+  {
+    \tl_case:NnF \l__nju_fn_style_tl
+      {
+        \c__nju_fn_style_plain_tl
+          { \int_use:N #1 }
+        \c__nju_fn_style_pifont_tl
+          { \__nju_fn_symbol_pifont:n {#1} }
+      }
+      { \int_use:N #1 }
+  }
+\cs_set:Npn \thefootnote { \__nju_footnote_number:N \c at footnote }
+\cs_set:Npn \@makefntext #1
+  {
+    \mode_leave_vertical:
+    \hbox_to_wd:nn { 1.5 em } { \@thefnmark \hfil }
+    #1
+  }
 \DeclareGraphicsExtensions { .pdf, .eps, .jpg, .png }
 \BeforeBeginEnvironment { tabular } { \centering \zihao {5} }
 \DeclareCaptionStyle{njucap}
@@ -1108,18 +1179,49 @@
 \captionsetup [ figure ] { style = njucap }
 \captionsetup [ table  ] { style = njucap }
 \setlist { noitemsep }
-\cs_new_protected:Npn \__nju_new_theorem:N #1
+\keys_define:nn { nju / theorem }
   {
-    \theoremsymbol { }
+    predefine     .bool_set:N  = \g__nju_thm_predefine_bool,
+    style           .tl_set:N  = \l__nju_thm_style_tl,
+    header-font     .tl_set:N  = \l__nju_thm_header_font_tl,
+    body-font       .tl_set:N  = \l__nju_thm_body_font_tl,
+    qed-symbol      .tl_set:N  = \l__nju_thm_qed_symbol_tl,
+    counter         .tl_set:N  = \l__nju_thm_counter_tl,
+    predefine      .initial:n  = true,
+    style          .initial:n  = plain,
+    header-font    .initial:n  = \normalfont \bfseries,
+    body-font      .initial:n  = \itshape,
+    qed-symbol     .initial:n  = \ensuremath { \mdwhtsquare },
+    counter        .initial:n  = chapter
+  }
+\cs_new_protected:Npn \__nju_new_theorem:Nn #1#2
+  {
     \clist_map_inline:Nn #1
-      { \newtheorem { ##1 } { \__nju_name:n { ##1 } } }
+      { \newtheorem { ##1 } { \__nju_name:n { ##1 } } [#2] }
   }
-\theoremsymbol { \ensuremath { \mdwhtsquare } }
-\newtheorem* { proof } { \g__nju_name_proof_tl }
-\group_begin:
-  \clist_remove_all:Nn \g__nju_theorem_type_clist { proof }
-  \__nju_new_theorem:N \g__nju_theorem_type_clist
-\group_end:
+\cs_generate_variant:Nn \__nju_new_theorem:Nn { NV }
+\cs_new_protected:Npn \__nju_ntheorem_post_setup:
+  {
+    \exp_args:NV \theoremstyle      \l__nju_thm_style_tl
+    \exp_args:NV \theoremheaderfont \l__nju_thm_header_font_tl
+    \exp_args:NV \theorembodyfont   \l__nju_thm_body_font_tl
+    \exp_args:NV \theoremsymbol     \l__nju_thm_qed_symbol_tl
+    \newtheorem* { proof } { \c__nju_name_proof_tl }
+    \theoremsymbol { }
+    \group_begin:
+      \clist_remove_all:Nn \g__nju_theorem_type_clist { proof }
+      \__nju_new_theorem:NV \g__nju_theorem_type_clist \l__nju_thm_counter_tl
+    \group_end:
+  }
+\ctex_at_end_preamble:n
+  {
+    \bool_if:NT \g__nju_thm_predefine_bool
+      {
+        \PassOptionsToPackage { amsmath, thmmarks } { ntheorem }
+        \RequirePackage { ntheorem }
+        \__nju_ntheorem_post_setup:
+      }
+  }
 \cs_new_protected:Npn \__nju_new_img_cmd:nn #1#2
   {
     \exp_args:Nc \NewDocumentCommand { #1 } { o m m }
@@ -1152,6 +1254,11 @@
         \msg_warning:nn { njuthesis } { missing-image }
         \RequirePackage { njuvisual }
       }
+    \bool_if:NT \g__nju_blind_bool
+      {
+        \RenewDocumentCommand \njuemblem { o m m } { \prg_do_nothing: }
+        \RenewDocumentCommand \njuname   { o m m } { \prg_do_nothing: }
+      }
   }
 \RenewDocumentCommand \maketitle { }
   {
@@ -1163,15 +1270,19 @@
           { \__nju_make_cover:    }
       }
     \tl_remove_all:Nn \g__nju_info_title_tl { \\ }
-\bool_if:NF \g__nju_draft_bool
-  {
-    \bool_if:NT \g__nju_decl_bool
+    \bool_if:NF \g__nju_draft_bool
       {
-        \__nju_make_origdecl:
-        \AtEndEnvironment { document }
-          { \__nju_make_authdecl: }
+        \bool_if:NT \g__nju_decl_bool
+          {
+            \__nju_make_origdecl:
+            \AtEndEnvironment { document }
+              {
+                \cleardoublepage
+                \__nju_make_authdecl:
+                \cleardoublepage
+              }
+          }
       }
-  }
     \cleardoublepage
     \exp_args:NV \pagestyle \c__nju_pagestyle_tl
     \pagenumbering { Roman }
@@ -1178,19 +1289,19 @@
   }
 \__nju_declare_element:nn { abstract / mark }
   {
-    content     = \g__nju_name_abstract_b_tl,
+    content     = \c__nju_name_abstract_b_tl,
     format      = \sffamily \zihao { -3 },
     bottom-skip = 1 cm
   }
 \__nju_declare_element:nn { abstract / en / mark }
   {
-    content     = \g__nju_name_abstract_b_en_tl,
+    content     = \c__nju_name_abstract_b_en_tl,
     format      = \sffamily \zihao { -3 },
     bottom-skip = 1 cm
   }
 \cs_new_protected:Npn \__nju_print_keywords:nn #1#2
   {
-    \tl_set:Nv \l__nju_tmpa_tl { g__nju_name_keywords #1 _tl }
+    \tl_set:Nv \l__nju_tmpa_tl { c__nju_name_keywords #1 _tl }
     \__nju_get_text_width:NV \l__nju_tmpa_dim \l__nju_tmpa_tl
     \list { \l__nju_tmpa_tl }
       {
@@ -1231,7 +1342,7 @@
   {
     \cleardoublepage
     \thispagestyle { plain }
-    \__nju_abs_bookmark:Vn \g__nju_name_abstract_a_tl { abstract }
+    \__nju_abs_bookmark:Vn \c__nju_name_abstract_a_tl { abstract }
     \__nju_make_abstract:
     \group_begin: \kaishu \zihao { -4 } #1
   }
@@ -1240,17 +1351,19 @@
   {
     \cleardoublepage
     \thispagestyle { plain }
-    \__nju_abs_bookmark:Vn \g__nju_name_abstract_a_en_tl { abstract-en }
+    \__nju_abs_bookmark:Vn \c__nju_name_abstract_a_en_tl { abstract-en }
     \__nju_make_abstract_en:
     \group_begin: \zihao { -4 } #1
   }
   { \__nju_print_keywords:nn { _en } { ;~ } \group_end: }
 \NewDocumentEnvironment { preface         } { +b }
-  { \__nju_chapter:V \g__nju_name_preface_tl         #1 } { }
+  { \__nju_chapter:V \c__nju_name_preface_tl         #1 }
+  { \cleardoublepage }
 \NewDocumentEnvironment { acknowledgement } { +b }
-  { \__nju_chapter:V \g__nju_name_acknowledgement_tl #1 } { }
+  { \__nju_chapter:V \c__nju_name_acknowledgement_tl #1 }
+  { \cleardoublepage }
 \NewDocumentCommand \njupaperlist
-  { O { \g__nju_name_paperlist_tl } m }
+  { O { \c__nju_name_paperlist_tl } m }
   {
     \group_begin:
     \RenewDocumentCommand \mkbibnamegiven  { m }
@@ -1285,13 +1398,13 @@
   }
 \NewDocumentEnvironment { notation } { O { 10 em } O { 5 em } }
   {
-    \__nju_chapter:V \g__nju_name_notation_tl
+    \__nju_chapter:V \c__nju_name_notation_tl
     \__nju_make_notation:nn { #1 } { #2 }
   }
-  { \endlist }
+  { \endlist \cleardoublepage }
 \NewDocumentEnvironment { notation* } { O { 10 em } O { 5 em } }
   {
-    \chapter * { \g__nju_name_notation_tl }
+    \chapter * { \c__nju_name_notation_tl }
     \__nju_make_notation:nn { #1 } { #2 }
   }
   { \endlist }



More information about the tex-live-commits mailing list.