diff --git a/njuthesis-sample.tex b/njuthesis-sample.tex
index 97939133f735596c86fcdaf0fe6320a7ef7151a8..4d419dc462c9f28448b8a5593e2e616b7f4c4797 100644
--- a/njuthesis-sample.tex
+++ b/njuthesis-sample.tex
@@ -18,11 +18,10 @@
 %
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 \documentclass[
-    % secondmentor=true,% 鏃犵浜屽甯堣娉ㄩ噴姝ら」
-    nlcover=true,% 闇€瑕佸浗瀹跺浘涔﹂灏侀潰锛屽鏈鏃犳晥
     degree=ug,% ug: 鏈, mg: 瀛︾, mf: 涓撶, phd: 鍗氬+
     type=thesis,% thesis: 姣曚笟璁烘枃锛宒esign: 姣曚笟璁捐
-    % systemfont=false,% 鑷畾涔夊瓧浣撹鍙栨秷娉ㄩ噴姝ら」
+    nlcover=true,% 闇€瑕佸浗瀹跺浘涔﹂灏侀潰锛屽鏈鏃犳晥
+    % 鑻ヤ互涓嬩袱椤逛笉璁剧疆鍒欒嚜鍔ㄨ皟鐢ㄧ郴缁熼瑁呭瓧浣�
     % customlatinfont=windows,% 璁剧疆鑻辨枃瀛楃闆�
     % customchinesefont=windows,% 璁剧疆涓枃瀛楃闆�
     ]{njuthesis}
@@ -55,11 +54,11 @@
         SupervisorA*= Li~Chengdian,
         SupervisorATitle = 鏁欐巿,
         SupervisorATitle* = Professor,
-        % 绗簩瀵煎笀锛屽鏃犲垯蹇界暐
-        SupervisorB = 瀛欒但寮�,
-        SupervisorB* = Sun~Hemi,
-        SupervisorBTitle = 鍓暀鎺�,
-        SupervisorBTitle* = Associate professor,
+        % 绗簩瀵煎笀锛屽鏃犲垯鐣欑┖
+        % SupervisorB = 瀛欒但寮�,
+        % SupervisorB* = Sun~Hemi,
+        % SupervisorBTitle = 鍓暀鎺�,
+        % SupervisorBTitle* = Associate professor,
         % 鎻愪氦鏃ユ湡
         SubmitDate = 2021骞�8鏈�10鏃�,
         % 绛旇京锛屽潎涓虹爺绌剁敓椤�
diff --git a/njuthesis.cls b/njuthesis.cls
index 9b3f53f4a699ea2982b5de57b8b803c21321fbaf..2be3b6ba9e84967d3a832a0cfad2c363cf4ae4dd 100644
--- a/njuthesis.cls
+++ b/njuthesis.cls
@@ -38,20 +38,15 @@
 \RequirePackage{l3keys2e}
 \keys_define:nn { nju }
 {
-  secondsupervisor      .bool_set:N   =   \nju_second_supervisor,
-  secondsupervisor      .initial:n    =   false,
   nlcover           .bool_set:N   =   \nju_nl_cover,
   nlcover           .initial:n    =   false,
   degree            .tl_set:N     =   \nju_degree,
   degree            .initial:n    =   ug,
   type              .tl_set:N     =   \nju_type,
   type              .initial:n    =   thesis,
-  systemfont        .bool_set:N   =   \nju_systemfont,
-  systemfont        .initial:n    =   true,
-  customlatinfont   .tl_set:N     =   \nju_customlatinfont,
-  customlatinfont   .initial:n    =   windows,
-  customchinesefont .tl_set:N     =   \nju_customchinesefont,
-  customchinesefont .initial:n    =   windows,
+}
+\keys_define:nn { nju }
+{
   info              .meta:nn      =   { nju / info } { #1 }
 }
 \keys_define:nn { nju / info }
@@ -96,8 +91,6 @@
 }
 \NewDocumentCommand \njusetup { m }
 { \keys_set:nn { nju } { #1 } }
-\ProcessKeysOptions { nju }
-\RequirePackage{fontspec}
 \RequirePackage[
     top=2.5cm,
     bottom=2.5cm,
@@ -160,39 +153,85 @@
 \RequirePackage{wrapfig} % Wrap text around figures
 \RequirePackage[hidelinks,bookmarksnumbered=true]{hyperref}
 \RequirePackage[capitalise,nameinlink,noabbrev]{cleveref}
-\NewDocumentCommand\set_latin_fontset_windows{}{
+\RequirePackage{fontspec}
+\tl_new:N \g__nju_latin_fontset_tl
+\tl_new:N \g__nju_cjk_fontset_tl
+\keys_define:nn { nju }
+{
+  customlatinfont   .choices:nn   =
+  { gyre, macos, windows, null }
+  { \tl_set_eq:NN \g__nju_latin_fontset_tl \l_keys_choice_tl },
+  customchinesefont .choices:nn   =
+  { fandol, founder, macos, noto, windows, null }
+  { \tl_set_eq:NN \g__nju_cjk_fontset_tl   \l_keys_choice_tl },
+}
+\ProcessKeysOptions { nju }
+\bool_new:N \g__nju_load_system_fontset_tl
+\tl_if_empty:NTF \g__nju_latin_fontset_tl
+  { \bool_gset_true:N \g__nju_load_system_fontset_tl }
+{
+  \tl_if_empty:NT \g__nju_cjk_fontset_tl
+    { \bool_gset_true:N \g__nju_load_system_fontset_tl }
+}
+\bool_if:NT \g__nju_load_system_fontset_tl
+{
+  % 妫€娴嬫槸鍚︽槸 Windows
+  \sys_if_platform_windows:TF
+  {
+    \tl_set:Nn \g__nju_latin_fontset_tl { windows }
+    \tl_set:Nn \g__nju_cjk_fontset_tl   { windows }
+  }
+  {
+    % 妫€娴嬫槸鍚︽槸 macOS
+    \ctex_if_platform_macos:TF
+    {
+      \tl_set:Nn \g__nju_latin_fontset_tl { macos }
+      \tl_set:Nn \g__nju_cjk_fontset_tl   { macos }
+    }
+    % 鍏朵綑绯荤粺涓€寰嬩娇鐢ㄨ嚜鐢卞瓧浣�
+    {
+      \tl_set:Nn \g__nju_latin_fontset_tl { gyre }
+      \tl_set:Nn \g__nju_cjk_fontset_tl { fandol }
+    }
+  }
+}
+\cs_new_protected:Npn \__nju_load_latin_font_windows:
+{
   \setmainfont{Times~New~Roman}
   \setsansfont{Arial}
   \setmonofont{Courier~New}[Scale=MatchLowercase]
 }
-\NewDocumentCommand\set_latin_fontset_macos{}{
-  \setmainfont{Times~New~Roman}
-  \setsansfont{Arial}
-  \setmonofont{Menlo}[Scale=MatchLowercase]
+\cs_new_protected:Npn \__nju_load_latin_font_macos:
+{
+\setmainfont{Times~New~Roman}
+\setsansfont{Arial}
+\setmonofont{Menlo}[Scale=MatchLowercase]
 }
-\NewDocumentCommand\set_latin_fontset_gyre{}{
-  \setmainfont{texgyretermes}[
-    Extension=.otf,
-    UprightFont=*-regular,
-    BoldFont=*-bold,
-    ItalicFont=*-italic,
-    BoldItalicFont=*-bolditalic]
-  \setsansfont{texgyreheros}[
-    Extension=.otf,
-    UprightFont=*-regular,
-    BoldFont=*-bold,
-    ItalicFont=*-italic,
-    BoldItalicFont=*-bolditalic]
-  \setmonofont{texgyrecursor}[
-    Extension=.otf,
-    UprightFont=*-regular,
-    BoldFont=*-bold,
-    ItalicFont=*-italic,
-    BoldItalicFont=*-bolditalic,
-    Scale=MatchLowercase,
-    Ligatures=CommonOff]
+\cs_new_protected:Npn \__nju_load_latin_font_gyre:
+{
+\setmainfont{texgyretermes}[
+  Extension=.otf,
+  UprightFont=*-regular,
+  BoldFont=*-bold,
+  ItalicFont=*-italic,
+  BoldItalicFont=*-bolditalic]
+\setsansfont{texgyreheros}[
+  Extension=.otf,
+  UprightFont=*-regular,
+  BoldFont=*-bold,
+  ItalicFont=*-italic,
+  BoldItalicFont=*-bolditalic]
+\setmonofont{texgyrecursor}[
+  Extension=.otf,
+  UprightFont=*-regular,
+  BoldFont=*-bold,
+  ItalicFont=*-italic,
+  BoldItalicFont=*-bolditalic,
+  Scale=MatchLowercase,
+  Ligatures=CommonOff]
 }
-\NewDocumentCommand\set_chinese_fontset_windows{}{
+\cs_new_protected:Npn \__nju_load_cjk_font_windows:
+{
   \setCJKmainfont{SimSun}[
     AutoFakeBold=2.17,
     ItalicFont=KaiTi]
@@ -205,166 +244,125 @@
   \setCJKfamilyfont{zhnewhei}{Microsoft~YaHei}[
     BoldFont=Microsoft~YaHei~Bold]
 }
-\NewDocumentCommand\set_chinese_fontset_macos{}{
-  % 绉婚櫎 does not contain script "CJK" 璀﹀憡
-  \msg_redirect_name:nnn {fontspec} {no-script} {info}
-  \setCJKmainfont{Songti~SC~Light}[
-    BoldFont=Songti~SC~Bold,
-    ItalicFont=Kaiti~SC,
-    BoldItalicFont=Kaiti~SC~Bold]
-  \setCJKsansfont{Heiti~SC~Light}[BoldFont=Heiti~SC~Medium]
-  \setCJKmonofont{STFangsong}
-  \setCJKfamilyfont{zhsong}{Songti~SC~Light}[BoldFont=Songti~SC~Bold]
-  \setCJKfamilyfont{zhhei}{Heiti~SC~Light}[BoldFont=Heiti~SC~Medium]
-  \setCJKfamilyfont{zhfs}{STFangsong}
-  \setCJKfamilyfont{zhkai}{Kaiti~SC}
-    [
-      BoldFont=Kaiti~SC~Bold,
-      % 鍙傝€僀TeX鎵嬪唽绗�9鑺� LuaLATEX 涓嬬殑涓枃鏀寔鏂瑰紡
-      % AlternateFont =
-      %   {
-      %   {鉄╟haracter range1鉄﹠ {鉄╝lternate font name1鉄﹠
-      %   {鉄╝lternate font features2鉄﹠ ,
-      %   ......
-      %   }
-    ]
-  \setCJKfamilyfont{zhnewhei}{PingFang~SC}
+\cs_new_protected:Npn \__nju_load_cjk_font_macos:
+{
+\msg_redirect_name:nnn {fontspec} {no-script} {info}
+\setCJKmainfont{Songti~SC~Light}[
+  BoldFont=Songti~SC~Bold,
+  ItalicFont=Kaiti~SC,
+  BoldItalicFont=Kaiti~SC~Bold]
+\setCJKsansfont{Heiti~SC~Light}[BoldFont=Heiti~SC~Medium]
+\setCJKmonofont{STFangsong}
+\setCJKfamilyfont{zhsong}{Songti~SC~Light}[BoldFont=Songti~SC~Bold]
+\setCJKfamilyfont{zhhei}{Heiti~SC~Light}[BoldFont=Heiti~SC~Medium]
+\setCJKfamilyfont{zhfs}{STFangsong}
+\setCJKfamilyfont{zhkai}{Kaiti~SC}
+  [
+    BoldFont=Kaiti~SC~Bold,
+    % 鍙傝€僀TeX鎵嬪唽绗�9鑺� LuaLATEX 涓嬬殑涓枃鏀寔鏂瑰紡
+    % AlternateFont =
+    %   {
+    %   {鉄╟haracter range1鉄﹠ {鉄╝lternate font name1鉄﹠
+    %   {鉄╝lternate font features2鉄﹠ ,
+    %   ......
+    %   }
+  ]
+\setCJKfamilyfont{zhnewhei}{PingFang~SC}
 }
-\NewDocumentCommand\set_chinese_fontset_fandol{}{
-  % 绉婚櫎 does not contain script "CJK" 璀﹀憡
-  \msg_redirect_name:nnn {fontspec} {no-script} {info}
-  \setCJKmainfont{FandolSong-Regular}[
-    Extension=.otf,
-    BoldFont=FandolSong-Bold,
-    ItalicFont=FandolKai-Regular]
-  \setCJKsansfont{FandolHei-Regular}[
-    Extension=.otf,
-    BoldFont=FandolHei-Bold]
-  \setCJKmonofont{FandolFang-Regular}[Extension=.otf]
-  \setCJKfamilyfont{zhsong}{FandolSong-Regular}[
-    Extension=.otf,
-    BoldFont=FandolSong-Bold]
-  \setCJKfamilyfont{zhhei}{FandolHei-Regular}[
-    Extension=.otf,
-    BoldFont=FandolHei-Bold]
-  \setCJKfamilyfont{zhfs}{FandolFang-Regular}[Extension=.otf]
-  \setCJKfamilyfont{zhkai}{FandolKai-Regular}[
-    Extension=.otf,
-    AutoFakeBold=2.17]
+\cs_new_protected:Npn \__nju_load_cjk_font_fandol:
+{
+\msg_redirect_name:nnn {fontspec} {no-script} {info}
+\setCJKmainfont{FandolSong-Regular}[
+  Extension=.otf,
+  BoldFont=FandolSong-Bold,
+  ItalicFont=FandolKai-Regular]
+\setCJKsansfont{FandolHei-Regular}[
+  Extension=.otf,
+  BoldFont=FandolHei-Bold]
+\setCJKmonofont{FandolFang-Regular}[Extension=.otf]
+\setCJKfamilyfont{zhsong}{FandolSong-Regular}[
+  Extension=.otf,
+  BoldFont=FandolSong-Bold]
+\setCJKfamilyfont{zhhei}{FandolHei-Regular}[
+  Extension=.otf,
+  BoldFont=FandolHei-Bold]
+\setCJKfamilyfont{zhfs}{FandolFang-Regular}[Extension=.otf]
+\setCJKfamilyfont{zhkai}{FandolKai-Regular}[
+  Extension=.otf,
+  AutoFakeBold=2.17]
 }
-\NewDocumentCommand\set_chinese_fontset_founder{}{
-  \setCJKmainfont{FZSSK}[
-    Extension=.ttf,
-    BoldFont=FZXBSK,
-    ItalicFont=FZKTK]
-  % FZXH1K 鏂规缁嗛粦涓€锛堢畝绻佹墿灞曪級 http://www.foundertype.com/index.php/FontInfo/index/id/161 璁捐甯堥潪鍟嗗厤璐�
-  % FZHTK 鏂规榛戜綋锛堢畝绻佹墿灞曪級 http://www.foundertype.com/index.php/FontInfo/index/id/131 鍏嶈垂鍟嗙敤
-  \setCJKsansfont{FZXH1K}[
-    Extension=.ttf,
-    BoldFont=FZHTK]
-  % FZFSK 鏂规浠垮畫锛堢畝绻佹墿灞曪級 http://www.foundertype.com/index.php/FontInfo/index/id/128
-  \setCJKmonofont{FZFSK}[Extension=.ttf]
-
-  \setCJKfamilyfont{zhsong}{FZSSK}[
+\cs_new_protected:Npn \__nju_load_cjk_font_founder:
+{
+\setCJKmainfont{FZSSK}[% 鏂规涔﹀畫
+  Extension=.ttf,
+  BoldFont=FZXBSK,% 鏂规灏忔爣瀹�
+  ItalicFont=FZKTK]% 鏂规妤蜂綋
+\setCJKsansfont{FZXH1K}[% 鏂规缁嗛粦涓€
+  Extension=.ttf,
+  BoldFont=FZHTK]% FZHTK 鏂规榛戜綋
+\setCJKmonofont{FZFSK}[Extension=.ttf]% 鏂规浠垮畫
+\setCJKfamilyfont{zhsong}
+  {FZSSK}[
     Extension=.ttf,
     BoldFont=FZXBSK]
-  \setCJKfamilyfont{zhhei}{FZHTK}[
+\setCJKfamilyfont{zhhei}
+  {FZHTK}[
     Extension=.ttf,
     AutoFakeBold=2.17]
-  \setCJKfamilyfont{zhfs}{FZFSK}[Extension=.ttf]
-  \setCJKfamilyfont{zhkai}{FZKTK}[Extension=.ttf]
-  % FZYouHK_508R 鏂规鎮犻粦508R锛堢畝绻佹墿灞曪級 http://www.foundertype.com/index.php/FontInfo/index/id/244 璁捐甯堥潪鍟嗗厤璐�
-  % FZYouHK_511M 鏂规鎮犻粦511M锛堢畝绻佹墿灞曪級 http://www.foundertype.com/index.php/FontInfo/index/id/244 璁捐甯堥潪鍟嗗厤璐�
-  \setCJKfamilyfont{zhnewhei}{FZYouHK_508R}[
+\setCJKfamilyfont{zhfs}
+  {FZFSK}[Extension=.ttf]
+\setCJKfamilyfont{zhkai}
+  {FZKTK}[Extension=.ttf]
+\setCJKfamilyfont{zhnewhei}
+  {FZYouHK_508R}[% 鏂规鎮犻粦508R
     Extension=.ttf,
-    BoldFont=FZYouHK_511M]
+    BoldFont=FZYouHK_511M]% 鏂规鎮犻粦511M
 }
-\NewDocumentCommand\set_chinese_fontset_noto{}{
-  % 鎬濇簮瀹嬩綋 https://www.google.com/get/noto/#serif-hans
-  \setCJKmainfont[
-    UprightFont=NotoSerifCJKsc-Regular,
-    BoldFont=NotoSerifCJKsc-Bold,
-    ItalicFont=NotoSerifCJKsc-Regular,
-    BoldItalicFont=NotoSerifCJKsc-Bold,
-    ItalicFeatures=FakeSlant,
-    BoldItalicFeatures=FakeSlant]{Noto~Serif~CJK~SC}
-
-  % 鎬濇簮榛戜綋 https://www.google.com/get/noto/#sans-hans
-  \setCJKsansfont[
-    UprightFont=NotoSansCJKsc-Regular,
-    BoldFont=NotoSansCJKsc-Bold,
-    ItalicFont=NotoSansCJKsc-Regular,
-    BoldItalicFont=NotoSansCJKsc-Bold,
-    ItalicFeatures=FakeSlant,
-    BoldItalicFeatures=FakeSlant]{Noto~Sans~CJK~SC}
+\cs_new_protected:Npn \__nju_load_cjk_font_noto:
+{
+\setCJKmainfont[
+  UprightFont=NotoSerifCJKsc-Regular,
+  BoldFont=NotoSerifCJKsc-Bold,
+  ItalicFont=NotoSerifCJKsc-Regular,
+  BoldItalicFont=NotoSerifCJKsc-Bold,
+  ItalicFeatures=FakeSlant,
+  BoldItalicFeatures=FakeSlant]{Noto~Serif~CJK~SC}
 
-  % 鍖呭惈浜庝笂杩版€濇簮榛戜綋
-  \setCJKmonofont[
-    UprightFont=NotoSansMonoCJKsc-Regular,
-    BoldFont=NotoSansMonoCJKsc-Bold,
-    ItalicFont=NotoSansMonoCJKsc-Regular,
-    BoldItalicFont=NotoSansMonoCJKsc-Bold,
-    ItalicFeatures=FakeSlant,
-    BoldItalicFeatures=FakeSlant]{Noto~Sans~Mono~SC}
+\setCJKsansfont[
+  UprightFont=NotoSansCJKsc-Regular,
+  BoldFont=NotoSansCJKsc-Bold,
+  ItalicFont=NotoSansCJKsc-Regular,
+  BoldItalicFont=NotoSansCJKsc-Bold,
+  ItalicFeatures=FakeSlant,
+  BoldItalicFeatures=FakeSlant]{Noto~Sans~CJK~SC}
 
-  \setCJKfamilyfont{zhsong}{Noto~Serif~CJK~SC}
-  \setCJKfamilyfont{zhhei}{Noto~Sans~CJK~SC}
+\setCJKmonofont[
+  UprightFont=NotoSansMonoCJKsc-Regular,
+  BoldFont=NotoSansMonoCJKsc-Bold,
+  ItalicFont=NotoSansMonoCJKsc-Regular,
+  BoldItalicFont=NotoSansMonoCJKsc-Bold,
+  ItalicFeatures=FakeSlant,
+  BoldItalicFeatures=FakeSlant]{Noto~Sans~Mono~SC}
 
-  % 鏂规妤蜂綋銆佹柟姝d豢瀹嬩负鍏嶈垂鍟嗙敤瀛椾綋锛屼笖鏀寔CJK瀛楃闆�
-  % 鏂规浠垮畫 http://www.foundertype.com/index.php/FontInfo/index/id/128.html
-  % 鏂规妤蜂綋 http://www.foundertype.com/index.php/FontInfo/index/id/137.html
-  \setCJKfamilyfont{zhfs}{鏂规浠垮畫绠€浣搣[AutoFakeBold=2.17]
-  \setCJKfamilyfont{zhkai}{鏂规妤蜂綋绠€浣搣[AutoFakeBold=2.17]
+\setCJKfamilyfont{zhsong}{Noto~Serif~CJK~SC}
+\setCJKfamilyfont{zhhei}{Noto~Sans~CJK~SC}
+\setCJKfamilyfont{zhfs}{鏂规浠垮畫绠€浣搣[AutoFakeBold=2.17]
+\setCJKfamilyfont{zhkai}{鏂规妤蜂綋绠€浣搣[AutoFakeBold=2.17]
 }
-\bool_if:NTF \nju_systemfont
+\cs_new_protected:Npn \__nju_load_font:
 {
-  % 妫€娴嬫槸鍚︽槸 Windows
-  \sys_if_platform_windows:TF
-  {
-    \set_latin_fontset_windows
-    \set_chinese_fontset_windows
-  }
-  {
-    % 妫€娴嬫槸鍚︽槸 macOS
-    \ctex_if_platform_macos:TF
-    {
-      \set_latin_fontset_macos
-      \set_chinese_fontset_macos
-    }
-    % 鍏朵綑绯荤粺涓€寰嬩娇鐢ㄨ嚜鐢卞瓧浣�
-    {
-      \set_latin_fontset_gyre
-      \set_chinese_fontset_fandol
-    }
-  }
-}
-{
-  % 濡傛灉鐢ㄦ埛闇€瑕佽嚜瀹氫箟瀛椾綋
-  % 姝ゅ闇€瑕佷娇鐢╘str_case_e鑰屼笉鏄痋str_case浣垮畯灞曞紑涓哄瓧绗︿覆
-  \str_case_e:nn { \nju_customlatinfont }
-  {
-    { windows } { \set_latin_fontset_windows }
-    { macos } { \set_latin_fontset_macos }
-    { gyre } { \set_latin_fontset_gyre }
-    { null } {}
-  }
-  \str_case_e:nn { \nju_customchinesefont }
-  {
-    { windows } { \set_chinese_fontset_windows }
-    { macos } { \set_chinese_fontset_macos }
-    { gyre } { \set_chinese_fontset_gyre }
-    { founder } { \set_chinese_fontset_founder }
-    { noto } { \set_chinese_fontset_noto }
-    { null } {}
-  }
+  \use:c { __nju_load_latin_font_ \g__nju_latin_fontset_tl : }
+  \use:c { __nju_load_cjk_font_   \g__nju_cjk_fontset_tl   : }
+
+  \NewDocumentCommand\songti{}{\CJKfamily{zhsong}}
+  \NewDocumentCommand\heiti{}{\CJKfamily{zhhei}}
+  \NewDocumentCommand\fangsong{}{\CJKfamily{zhfs}}
+  \NewDocumentCommand\kaishu{}{\CJKfamily{zhkai}}
 }
+\__nju_load_font:
 \setmathfont{XITSMath-Regular}[
   BoldFont = XITSMath-Bold,
   Extension = .otf]
-\NewDocumentCommand\songti{}{\CJKfamily{zhsong}}
-\NewDocumentCommand\heiti{}{\CJKfamily{zhhei}}
-\NewDocumentCommand\fangsong{}{\CJKfamily{zhfs}}
-\NewDocumentCommand\kaishu{}{\CJKfamily{zhkai}}
 \RequirePackage{fancyhdr} % 璋冩暣椤电湁椤佃剼
 \fancypagestyle{njuplain}{%
    \fancyhead{}
@@ -455,12 +453,12 @@
 {
   \nju_tocpagestyle:nnn {\listtablename}{\listtablename}{lot}
 }
-\newenvironment{preface}
+\NewDocumentEnvironment{preface}{}
 {%
   \chapter*{鍓嶈█}
   \addcontentsline{toc}{chapter}{鍓嶈█}
 }{}
-\newenvironment{acknowledgement}
+\NewDocumentEnvironment{acknowledgement}{}
 {%
   \chapter*{鑷磋阿}
   \addcontentsline{toc}{chapter}{鑷磋阿}
@@ -542,7 +540,9 @@ xleftmargin=2em,xrightmargin=2em,% set the width of the code environment
 }
 \lstdefinestyle{LaTeX}{
   language=TeX,
-  morekeywords={begin, caption, label, mathrm, frac, toprule, midrule, bottomrule, includegraphics}
+  morekeywords={
+    begin, caption, label, mathrm, frac,
+    toprule, midrule, bottomrule, includegraphics}
 }
 \DeclareCaptionFont{songticap}{\zihao{5}\bf\songti}
 \captionsetup{
@@ -661,168 +661,179 @@ numberwithin=section,
   \l__nju_info_title_b_tl
   \l__nju_info_title_c_tl
 }
-\bool_if:NTF \nju_second_supervisor
+\tl_if_empty:NTF \l__nju_info_supv_b_tl
 {
-  \tl_const:Nn \nju_supervisor_full
+  \tl_const:Nn \l__nju_info_supv_full_tl
   {
-    \l__nju_info_supv_a_tl\ \l__nju_info_supv_a_title_tl
-    \ \ \l__nju_info_supv_b_tl\ \l__nju_info_supv_b_title_tl
+     \l__nju_info_supv_a_tl\hspace{.5em}
+     \l__nju_info_supv_a_title_tl
   }
-  \tl_const:Nn \nju_supervisor_full_en
+  \tl_const:Nn \l__nju_info_supv_full_tl_en
   {
-    \l__nju_info_supv_a_en_tl\ \l__nju_info_supv_a_title_en_tl
-    \ \ \l__nju_info_supv_b_en_tl\ \l__nju_info_supv_b_title_en_tl
+    \l__nju_info_supv_a_en_tl\hspace{.5em}
+    \l__nju_info_supv_a_title_en_tl
   }
 }
 {
-  \tl_const:Nn \nju_supervisor_full
+  \tl_const:Nn \l__nju_info_supv_full_tl
   {
-    \l__nju_info_supv_a_tl\ \l__nju_info_supv_a_title_tl
+    \l__nju_info_supv_a_tl\hspace{.5em}
+    \l__nju_info_supv_a_title_tl\hspace{1em}
+    \l__nju_info_supv_b_tl\hspace{.5em}
+    \l__nju_info_supv_b_title_tl
   }
-  \tl_const:Nn \nju_supervisor_full_en
+  \tl_const:Nn \l__nju_info_supv_full_tl_en
   {
-    \l__nju_info_supv_a_en_tl\ \l__nju_info_supv_a_title_en_tl
+    \l__nju_info_supv_a_en_tl\hspace{.5em}
+    \l__nju_info_supv_a_title_en_tl\hspace{1em}
+    \l__nju_info_supv_b_en_tl\hspace{.5em}
+    \l__nju_info_supv_b_title_en_tl
   }
 }
 \str_if_eq:NNTF {\nju_degree} { ug }
 {
   % 鏈
-  \tl_const:Nn \nju_degree_name {鏈琝hfill 绉慭hfill }
+  \tl_const:Nn \c__nju_name_diploma_tl { 鏈琝hfill 绉慭hfill }
+  \tl_const:Nn \c__nju_name_title_tl { 棰榎hfill 鐩� }
 
-  % 鏈寮哄埗涓嶆墦鍗板浗瀹跺浘涔﹂灏侀潰
-  \bool_set_false:N \nju_nl_cover
+  \tl_const:Nn \c__nju_cover_uline_len_a_tl { 250pt }
+  \tl_const:Nn \c__nju_cover_uline_len_b_tl { 90pt }
+  \tl_const:Nn \c__nju_cover_uline_font_tl { \songti }
+  \tl_const:Nn \c__nju_cover_uline_style_tl { \bf }
+  \tl_const:Nn \c__nju_cover_uline_bskip_tl {}
 
-  % 灏侀潰涓嬪垝绾�
-  \cs_new:Npn \nju_cover_uline_ug:nn #1 #2
-  {
-    \uline{\makebox[#1]{\rm\songti#2}}
-  }
+  \tl_const:Nn \c__nju_cover_box_len_tl { 4.2em }
 
-  % 灏侀潰琛ㄦ牸杈规
-  \cs_new:Npn \nju_coverbox_ug:n #1
-  {
-    \makebox[4.2em][s]{#1}
-  }
+  % 鏈寮哄埗涓嶆墦鍗板浗瀹跺浘涔﹂灏侀潰
+  \bool_set_false:N \nju_nl_cover
 }
 {
   % 鏈浠ュ閮芥槸鐮旂┒鐢�
-  \tl_const:Nn \nju_degree_name {鐮擻hfill 绌禱hfill 鐢焅hfill }
+  \tl_const:Nn \c__nju_name_diploma_tl { 鐮擻hfill 绌禱hfill 鐢焅hfill }
+  \tl_const:Nn \c__nju_name_title_tl { 璁篭hfill 鏂嘰hfill 棰榎hfill 鐩� }
 
-  % 灏侀潰涓嬪垝绾�
-  \cs_new:Npn \nju_cover_uline_g:n #1
-  {
-    \uline{\makebox[250pt]{\rm\kaishu#1}}
-  }
+  \tl_const:Nn \c__nju_cover_uline_len_a_tl { 250pt }
+  \tl_const:Nn \c__nju_cover_uline_len_b_tl { 14em }
+  \tl_const:Nn \c__nju_cover_uline_font_tl { \kaishu }
+  \tl_const:Nn \c__nju_cover_uline_style_tl { }
+  \tl_const:Nn \c__nju_cover_uline_bskip_tl { \hspace{1em} }
 
-  % 鍥藉鍥句功棣嗗皝闈笅鍒掔嚎
-  \cs_new:Npn \nju_cover_uline_nl:nn #1 #2
-  {
-    \uline{\makebox[#1]{#2}}
-  }
-
-  % 灏侀潰琛ㄦ牸杈规
-  \cs_new:Npn \nju_coverbox_g:n #1
-  {
-    \makebox[6em][s]{#1\hspace{1em}}
-  }
+  \tl_const:Nn \c__nju_cover_box_len_tl { 6em }
 
   % 鐮旂┒鐢熷浣嶅垎绫�
   \str_case_e:nn { \nju_degree }
   {
-    { mg } { \tl_const:Nn \nju_degree_title {纭曞+} }
-    { mf } { \tl_const:Nn \nju_degree_title {纭曞+涓撲笟} }
-    { phd } { \tl_const:Nn \nju_degree_title {鍗氬+} }
+    { mg } { \tl_const:Nn \c__nju_name_degree_tl {纭曞+} }
+    { mf } { \tl_const:Nn \c__nju_name_degree_tl {纭曞+涓撲笟} }
+    { phd } { \tl_const:Nn \c__nju_name_degree_tl {鍗氬+} }
   }
 }
+\cs_new:Npn \__nju_cover_uline_a:n #1
+{
+  \uline{\makebox[\c__nju_cover_uline_len_a_tl]
+    {\rm\c__nju_cover_uline_font_tl #1 }}
+}
+\cs_new:Npn \__nju_cover_uline_b:n #1
+{
+  \uline{\makebox[\c__nju_cover_uline_len_b_tl]
+    {\rm\c__nju_cover_uline_font_tl #1 }}
+}
+\cs_new:Npn \__nju_cover_uline_nl:nn #1 #2
+{
+  \uline{\makebox[#1]
+    {\rm\c__nju_cover_uline_font_tl #2 }}
+}
+\cs_new:Npn \__nju_cover_box:n #1
+{
+  \makebox[\c__nju_cover_box_len_tl][s]{
+    #1\c__nju_cover_uline_bskip_tl}
+}
 \str_if_eq:NNTF {\nju_type} {thesis}
 {
   \tl_const:Nn \nju_type_name
-    { \nju_degree_name 姣昞hfill 涓歕hfill 璁篭hfill 鏂� }
+    { \c__nju_name_diploma_tl 姣昞hfill 涓歕hfill 璁篭hfill 鏂� }
 }
 {
   \tl_const:Nn \nju_type_name
-    { \nju_degree_name 姣昞hfill 涓歕hfill 璁綷hfill 璁� }
+    { \c__nju_name_diploma_tl 姣昞hfill 涓歕hfill 璁綷hfill 璁� }
+}
+\cs_new_protected:Npn \__nju_cover_title_breakline:
+{
+  \__nju_cover_box:n {\c__nju_name_title_tl}
+  & \__nju_cover_uline_a:n
+  { \c__nju_cover_uline_style_tl \l__nju_info_title_a_tl } \\
+  % 濡傛灉鏌愯鏍囬绌哄垯涓嶈緭鍑烘帴涓嬫潵鐨勮嫢骞茶
+  \tl_if_empty:NF \l__nju_info_title_b_tl
+  {
+    \tl_if_empty:NTF \l__nju_info_title_c_tl
+      {
+        & \__nju_cover_uline_a:n
+        {\c__nju_cover_uline_style_tl \l__nju_info_title_b_tl } \\
+      }
+      {
+        & \__nju_cover_uline_a:n
+        { \c__nju_cover_uline_style_tl \l__nju_info_title_b_tl } \\
+        & \__nju_cover_uline_a:n
+        { \c__nju_cover_uline_style_tl \l__nju_info_title_c_tl } \\
+      }
+  }
 }
 \tl_new:N \nju_printcoverinfo_ug
 \tl_set:Nn \nju_printcoverinfo_ug
 {
   \begin{tabular}{p{4.2em}c}
-    \nju_coverbox_ug:n {闄hfill 绯粆
-    & \nju_cover_uline_ug:nn {250pt}{\l__nju_info_dept_tl} \\
-    \nju_coverbox_ug:n {涓揬hfill 涓殅
-    & \nju_cover_uline_ug:nn {250pt}{\l__nju_major_tl} \\
-
-    \nju_coverbox_ug:n {棰榎hfill 鐩畗
-    & \nju_cover_uline_ug:nn {250pt}{\bf{\l__nju_info_title_a_tl}} \\
-    % 鑷姩鍒ゆ柇鏍囬鎹㈣
-    \tl_if_empty:NTF \l__nju_info_title_b_tl {}
-    {
-      \tl_if_empty:NTF \l__nju_info_title_c_tl
-        { & \nju_cover_uline_ug:nn {250pt}{\bf{\l__nju_info_title_b_tl}} \\ }
-        {
-          & \nju_cover_uline_ug:nn {250pt}{\bf{\l__nju_info_title_b_tl}} \\
-          & \nju_cover_uline_ug:nn {250pt}{\bf{\l__nju_info_title_c_tl}} \\
-        }
-    }
+    \__nju_cover_box:n {闄hfill 绯粆
+    & \__nju_cover_uline_a:n  {\l__nju_info_dept_tl} \\
+    \__nju_cover_box:n {涓揬hfill 涓殅
+    & \__nju_cover_uline_a:n  {\l__nju_major_tl} \\
+    \__nju_cover_title_breakline:
   \end{tabular}\\
 
   \begin{tabular}{p{4.2em}cp{4.2em}c}
-    \nju_coverbox_ug:n {骞碶hfill 绾
-    & \nju_cover_uline_ug:nn {90pt}{\l__nju_info_grade_tl}
-    & \nju_coverbox_ug:n {瀛hfill 鍙穧
-    & \nju_cover_uline_ug:nn {90pt}{\l__nju_info_id_tl}\\
+    \__nju_cover_box:n {骞碶hfill 绾
+    & \__nju_cover_uline_b:n {\l__nju_info_grade_tl}
+    & \__nju_cover_box:n {瀛hfill 鍙穧
+    & \__nju_cover_uline_b:n {\l__nju_info_id_tl}\\
   \end{tabular}\\
 
   \begin{tabular}{p{4.2em}c}
-    \nju_coverbox_ug:n {瀛hfill 鐢焅hfill 濮揬hfill 鍚峿
-    & \nju_cover_uline_ug:nn {250pt}{\l__nju_info_author_tl}
+    \__nju_cover_box:n {瀛hfill 鐢焅hfill 濮揬hfill 鍚峿
+    & \__nju_cover_uline_a:n  {\l__nju_info_author_tl}
   \end{tabular}\\
   \begin{tabular}{p{4.2em}cp{4.2em}c}
-    \nju_coverbox_ug:n {瀵糪hfill 甯坿
-    & \nju_cover_uline_ug:nn {90pt}{\l__nju_info_supv_a_tl}
-    & \nju_coverbox_ug:n {鑱孿hfill 绉皚
-    & \nju_cover_uline_ug:nn {90pt}{\l__nju_info_supv_a_title_tl}\\
+    \__nju_cover_box:n {瀵糪hfill 甯坿
+    & \__nju_cover_uline_b:n {\l__nju_info_supv_a_tl}
+    & \__nju_cover_box:n {鑱孿hfill 绉皚
+    & \__nju_cover_uline_b:n {\l__nju_info_supv_a_title_tl}\\
 
     % 绗簩瀵煎笀
-    \bool_if:NT \nju_second_supervisor
+    \tl_if_empty:NF \l__nju_info_supv_b_tl
     {
-      \nju_coverbox_ug:n {绗琝hfill 浜孿hfill 瀵糪hfill 甯坿
-      & \nju_cover_uline_ug:nn {90pt}{\l__nju_info_supv_b_tl}
-      & \nju_coverbox_ug:n {鑱孿hfill 绉皚
-      & \nju_cover_uline_ug:nn {90pt}{\l__nju_info_supv_b_title_tl}\\
+      \__nju_cover_box:n {绗琝hfill 浜孿hfill 瀵糪hfill 甯坿
+      & \__nju_cover_uline_b:n {\l__nju_info_supv_b_tl}
+      & \__nju_cover_box:n {鑱孿hfill 绉皚
+      & \__nju_cover_uline_b:n {\l__nju_info_supv_b_title_tl}\\
     }
   \end{tabular}\\
 
   \begin{tabular}{p{4.2em}c}
-    \nju_coverbox_ug:n {鎻怽hfill 浜hfill 鏃hfill 鏈焳
-    & \nju_cover_uline_ug:nn {250pt}{\l__nju_submit_date_tl}\\
+    \__nju_cover_box:n {鎻怽hfill 浜hfill 鏃hfill 鏈焳
+    & \__nju_cover_uline_a:n  {\l__nju_submit_date_tl}\\
   \end{tabular}
 }
 \tl_new:N \nju_printcoverinfo_g
 \tl_set:Nn \nju_printcoverinfo_g
 {
   \begin{tabular}{p{6em}c}
-    \nju_coverbox_g:n {璁篭hfill 鏂嘰hfill 棰榎hfill 鐩畗
-    & \nju_cover_uline_g:n {\l__nju_info_title_a_tl} \\
-    % 鑷姩鍒ゆ柇鏍囬鎹㈣
-    \tl_if_empty:NTF \l__nju_info_title_b_tl {}
-    {
-      \tl_if_empty:NTF \l__nju_info_title_c_tl
-        { & \nju_cover_uline_g:n {\l__nju_info_title_b_tl} \\ }
-        {
-          & \nju_cover_uline_g:n {\l__nju_info_title_b_tl} \\
-          & \nju_cover_uline_g:n {\l__nju_info_title_c_tl} \\
-        }
-    }
-
-    \nju_coverbox_g:n {浣淺hfill 鑰匼hfill 濮揬hfill 鍚峿
-    & \nju_cover_uline_g:n {\l__nju_info_author_tl}\\
-    \nju_coverbox_g:n {涓揬hfill 涓歕hfill 鍚峔hfill 绉皚
-    & \nju_cover_uline_g:n {\l__nju_major_tl}\\
-    \nju_coverbox_g:n {鐮擻hfill 绌禱hfill 鏂筡hfill 鍚憓
-    & \nju_cover_uline_g:n {\l__nju_field_tl}\\
-    \nju_coverbox_g:n {鎸嘰hfill 瀵糪hfill 鏁橽hfill 甯坿
-    & \nju_cover_uline_g:n {\nju_supervisor_full}\\
+    \__nju_cover_title_breakline:
+    \__nju_cover_box:n {浣淺hfill 鑰匼hfill 濮揬hfill 鍚峿
+    & \__nju_cover_uline_a:n  {\l__nju_info_author_tl}\\
+    \__nju_cover_box:n {涓揬hfill 涓歕hfill 鍚峔hfill 绉皚
+    & \__nju_cover_uline_a:n  {\l__nju_major_tl}\\
+    \__nju_cover_box:n {鐮擻hfill 绌禱hfill 鏂筡hfill 鍚憓
+    & \__nju_cover_uline_a:n  {\l__nju_field_tl}\\
+    \__nju_cover_box:n {鎸嘰hfill 瀵糪hfill 鏁橽hfill 甯坿
+    & \__nju_cover_uline_a:n  {\l__nju_info_supv_full_tl}\\
   \end{tabular}
 }
 \tl_new:N \nju_printcover_nl % 鍥藉鍥句功棣嗗皝闈�
@@ -840,13 +851,13 @@ numberwithin=section,
       \vskip -20mm \hskip -15mm
       \songti\zihao{-4}
       \makebox[40pt][l]{鍒嗙被鍙穧
-      \nju_cover_uline_nl:nn {150pt}{\l__nju_info_classif_tl}
+      \__nju_cover_uline_b:n {\l__nju_info_classif_tl}
       \hfill
       \makebox[40pt][l]{瀵嗙骇}
-      \nju_cover_uline_nl:nn {150pt}{\l__nju_info_seclv_tl}
+      \__nju_cover_uline_b:n {\l__nju_info_seclv_tl}
       \vskip 10pt \hskip -15mm
       \makebox[40pt][l]{UDC}
-      \nju_cover_uline_nl:nn {150pt}{\l__nju_info_udc_tl}
+      \__nju_cover_uline_b:n {\l__nju_info_udc_tl}
     }
 
     % 涓儴
@@ -857,9 +868,9 @@ numberwithin=section,
       {
         \kaishu\zihao{1}
         \vskip \stretch{1}
-        \nju_cover_uline_nl:nn {14em}{\l__nju_info_title_a_tl}\\
-        \nju_cover_uline_nl:nn {14em}{\l__nju_info_title_b_tl}\\
-        \nju_cover_uline_nl:nn {14em}{\l__nju_info_title_c_tl}\\
+        \__nju_cover_uline_b:n {\l__nju_info_title_a_tl}\\
+        \__nju_cover_uline_b:n {\l__nju_info_title_b_tl}\\
+        \__nju_cover_uline_b:n {\l__nju_info_title_c_tl}\\
       }
       \vskip \stretch{1}
       {\kaishu\zihao{4}锛堥鍚嶅拰鍓鍚嶏級}
@@ -874,25 +885,25 @@ numberwithin=section,
     {
       \kaishu\zihao{4}
       \noindent 鎸囧鏁欏笀濮撳悕銆佽亴鍔°€佽亴绉般€佸浣嶃€佸崟浣嶅悕绉板強鍦板潃%
-      \nju_cover_uline_nl:nn {94pt}{\l__nju_info_supv_a_tl}\par
-      \noindent\nju_cover_uline_nl:nn {\textwidth}{%
+      \__nju_cover_uline_nl:nn {94pt}{\l__nju_info_supv_a_tl}\par
+      \noindent\__nju_cover_uline_nl:nn {\textwidth}{%
       \l__nju_info_supv_cont_tl}\par
       \noindent 鐢宠瀛︿綅绾у埆%
-      \nju_cover_uline_nl:nn {9em}{\nju_degree_title}%
+      \__nju_cover_uline_nl:nn {9em}{\c__nju_name_degree_tl}%
       \noindent 涓撲笟鍚嶇О%
       \uline{\hfill\l__nju_major_tl\hfill}\par% 闇€瑕佽皟鏁翠笅鍒掔嚎闀垮害
       \noindent 璁烘枃鎻愪氦鏃ユ湡%
-      \nju_cover_uline_nl:nn {9em}{\l__nju_submit_date_tl}%
+      \__nju_cover_uline_nl:nn {9em}{\l__nju_submit_date_tl}%
       璁烘枃绛旇京鏃ユ湡%
       \uline{\hfill\l__nju_defend_date_tl\hfill}\par% 闇€瑕佽皟鏁翠笅鍒掔嚎闀垮害
       \noindent 瀛︿綅鎺堜簣鍗曚綅鍜屾棩鏈焅uline{\hfill}\par
       \noindent\hfill 绛旇京濮斿憳浼氫富甯細%
-      \nju_cover_uline_nl:nn {9em}{\l__nju_info_chairman_tl}\par
+      \__nju_cover_uline_nl:nn {9em}{\l__nju_info_chairman_tl}\par
       \noindent\hfill 璇勯槄浜猴細%
-      \nju_cover_uline_nl:nn {9em}{\l__nju_info_reviewer_a_tl}\par
-      \noindent\hfill\nju_cover_uline_nl:nn {9em}{\l__nju_info_reviewer_b_tl}\par
-      \noindent\hfill\nju_cover_uline_nl:nn {9em}{\l__nju_info_reviewer_c_tl}\par
-      \noindent\hfill\nju_cover_uline_nl:nn {9em}{\l__nju_info_reviewer_d_tl}\par
+      \__nju_cover_uline_nl:nn {9em}{\l__nju_info_reviewer_a_tl}\par
+      \noindent\hfill\__nju_cover_uline_nl:nn {9em}{\l__nju_info_reviewer_b_tl}\par
+      \noindent\hfill\__nju_cover_uline_nl:nn {9em}{\l__nju_info_reviewer_c_tl}\par
+      \noindent\hfill\__nju_cover_uline_nl:nn {9em}{\l__nju_info_reviewer_d_tl}\par
 
       \begin{center}
         \kaishu\zihao{3}\hspace{2em} 骞碶hspace{1em} 鏈圽hspace{1em} 鏃�
@@ -946,7 +957,7 @@ numberwithin=section,
     \vskip 15mm
     {\zihao{1}\makebox[10em][s]{\bf{\kaishu\nju_type_name}}}
     \vskip 5mm
-    {\zihao{1}\bf{\kaishu{锛堢敵璇穃nju_degree_title 瀛︿綅锛墋}}
+    {\zihao{1}\bf{\kaishu{锛堢敵璇穃c__nju_name_degree_tl 瀛︿綅锛墋}}
     \par\vfill
     \vskip\stretch{0}
     {\bgroup
@@ -1015,7 +1026,7 @@ numberwithin=section,
       闄㈢郴锛� \l__nju_info_dept_tl \\
       涓撲笟锛� \l__nju_major_tl \\
       鏈鐢熷鍚嶏細 \l__nju_info_author_tl \\
-      鎸囧鏁欏笀锛堝鍚嶃€佽亴绉帮級锛歕nju_supervisor_full \\
+      鎸囧鏁欏笀锛堝鍚嶃€佽亴绉帮級锛歕l__nju_info_supv_full_tl \\
       鎽樿锛�
       \egroup
     }
@@ -1046,7 +1057,7 @@ numberwithin=section,
       DEPARTMENT: ~~\l__nju_info_dept_en_tl \\
       SPECIALIZATION: ~~\l__nju_major_en_tl \\
       UNDERGRADUATE:~~\l__nju_info_author_en_tl \\
-      MENTOR:~~\nju_supervisor_full_en \\
+      MENTOR:~~\l__nju_info_supv_full_tl_en \\
       ABSTRACT:
       \egroup
     }
@@ -1081,10 +1092,11 @@ numberwithin=section,
     \tl_set:Nn \arraystretch {0.8}
     \noindent
     姣曚笟璁烘枃棰樼洰锛歕hspace{0.5em}\nju_underline:n {\l__nju_info_title_tl\hfill}\\
-    \uline{\makebox[9em]{\l__nju_major_tl}}涓撲笟\uline{\makebox[4em]{\l__nju_info_grade_tl}}绾�
+    \uline{\makebox[9em]{\l__nju_major_tl}}涓撲笟
+    \uline{\makebox[4em]{\l__nju_info_grade_tl}}绾�
     \str_if_eq:NNTF {\nju_degree} { phd } {鍗殅{纭晑
     澹敓濮撳悕锛歕uline{\hfill\l__nju_info_author_tl\hfill} \\
-    鎸囧鏁欏笀锛堝鍚嶃€佽亴绉帮級锛歕uline{\hfill\nju_supervisor_full\hfill}\par
+    鎸囧鏁欏笀锛堝鍚嶃€佽亴绉帮級锛歕uline{\hfill\l__nju_info_supv_full_tl\hfill}\par
     \egroup
 
     \kaishu\zihao{4}\par%
@@ -1114,7 +1126,7 @@ numberwithin=section,
       THESIS: ~~\l__nju_info_title_en_tl \\
       SPECIALIZATION: ~~\l__nju_major_en_tl \\
       POSTGRADUATE:~~\l__nju_info_author_en_tl \\
-      MENTOR:~~\nju_supervisor_full_en\par
+      MENTOR:~~\l__nju_info_supv_full_tl_en\par
       \egroup
     }
     \zihao{4}\par%
diff --git a/njuthesis.dtx b/njuthesis.dtx
index 1f285b743bf5bc58997ba73da5e37fd909814485..59b3f0e07b083baf875eb0a4a15a967b87b5456f 100644
--- a/njuthesis.dtx
+++ b/njuthesis.dtx
@@ -225,7 +225,7 @@ through XeTeX.
 %</driver>
 % \fi
 %
-% \title{\color{njuviolet}The \textsc{NJuThesis} class\\ 鍗椾含澶у瀛︿綅璁烘枃妯℃澘}
+% \title{\color{njuviolet} The \textsc{NJuThesis} class\\ 鍗椾含澶у瀛︿綅璁烘枃妯℃澘}
 % 
 % \author{^^A
 % Nanjing University Linux User Group\thanks{E-mail: \href{mailto:nju.lug@yaoge123.cn}{nju.lug@yaoge123.cn}}}
@@ -368,16 +368,9 @@ through XeTeX.
 %
 % 灏栨嫭鍙峰唴鍒楀嚭浜嗚嫢骞蹭釜鍏佽鐨勯€夐」锛屽叾涓姞绮楃殑涓洪粯璁ら€夐」
 %
-% \end{function}
+% 灏侀潰鐣欑┖鍗冲彲鑷姩鍖栨崲琛�
 %
-% \begin{function}[added=2021-09-07]{secondsupervisor}
-%   \begin{syntax}
-%     secondsupervisor = <\TFF>
-%   \end{syntax}
-%
-% 鐢ㄤ簬鍦ㄥ皝闈㈠拰鎽樿娣诲姞绗簩瀵煎笀銆傜敱浜庣洰鍓嶆潵璇存嫢鏈変袱浣嶆寚瀵艰€佸笀骞朵笉鏄竴绉嶆櫘閬嶇姸鍐碉紝鍥犳姝ら」榛樿涓篭opt{false}銆�
-% \opt{true}锛孿opt{false}锛堥粯璁わ級銆�
-% \end{function}
+% 绗簩瀵煎笀涓嶅~鍒欑暀绌恒€傜敱浜庣洰鍓嶆潵璇存嫢鏈変袱浣嶆寚瀵艰€佸笀骞朵笉鏄竴绉嶆櫘閬嶇姸鍐碉紝鍥犳姝ら」榛樿涓篭opt{false}銆�
 %
 % \begin{function}[added=2021-09-07]{nlcover}
 %   \begin{syntax}
@@ -412,16 +405,11 @@ through XeTeX.
 %
 % \subsubsection{鎸囧畾瀛椾綋}
 %
-% \begin{function}[added=2021-09-07]{systemfont}
-%   \begin{syntax}
-%     systemfont = <\TFF>
-%   \end{syntax}
 %
 % 瀛︽牎璁烘枃鏍煎紡瑕佹眰浣跨敤鐨勫瓧浣撲竴鑸凡缁忛瑁呭湪鍚勪釜鎿嶄綔绯荤粺锛屾湰妯℃澘閽堝涓嶅悓骞冲彴杩涜浜嗚嚜鍔ㄦ娴嬮€傞厤锛屽彲浠ュ紑绠卞嵆鐢ㄣ€�
 %
-% 濡傛灉甯屾湜鏇存敼鏈ā鏉夸娇鐢ㄧ殑瀛椾綋锛岃灏嗘湰閫夐」璁剧疆涓篭opt{false}锛岀劧鍚庝娇鐢ㄤ互涓嬩袱涓€夐」鍗曠嫭璁剧疆瑗挎枃鍜屼腑鏂囧瓧浣撱€�
+% 濡傛灉甯屾湜鏇存敼鏈ā鏉夸娇鐢ㄧ殑瀛椾綋锛岃濉啓浠ヤ笅涓や釜閫夐」
 % 
-% \end{function}
 %
 % \begin{function}[added=2021-09-07]{customlatinfont}
 %   \begin{syntax}
@@ -441,12 +429,33 @@ through XeTeX.
 % 鎵嬪姩鎸囧畾涓枃瀛椾綋锛屽彲閫夛細
 % \opt{windows}锛堥粯璁わ級锛� \opt{macos}锛� \opt{fandol}锛� \opt{founder}锛孿opt{noto}锛孿opt{null}銆�
 %
-% FZSSK 鏂规涔﹀畫锛堢畝绻佹墿灞曪級  \href{http://www.foundertype.com/index.php/FontInfo/index/id/151 鍏嶈垂鍟嗙敤}{涓嬭浇閾炬帴}
+% 鏂规瀛椾綋锛堢畝绻佹墿灞曪級绯诲垪
+% FZSSK \href{http://www.foundertype.com/index.php/FontInfo/index/id/151}{鏂规涔﹀畫} 鍏嶈垂鍟嗙敤
+%
+% FZXBSK \href{http://www.foundertype.com/index.php/FontInfo/index/id/164}{鏂规灏忔爣瀹媫 璁捐甯堥潪鍟嗗厤璐�
+%
+% FZKTK \href{http://www.foundertype.com/index.php/FontInfo/index/id/137}{鏂规妤蜂綋} 鍏嶈垂鍟嗙敤
+%
+% FZXH1K \href{http://www.foundertype.com/index.php/FontInfo/index/id/161}{鏂规缁嗛粦涓€} 璁捐甯堥潪鍟嗗厤璐�
+%
+% FZHTK  \href{http://www.foundertype.com/index.php/FontInfo/index/id/131}{鏂规榛戜綋} 鍏嶈垂鍟嗙敤
+%
+% FZFSK  \href{http://www.foundertype.com/index.php/FontInfo/index/id/128}{鏂规浠垮畫}
 %
-% FZXBSK 鏂规灏忔爣瀹嬶紙绠€绻佹墿灞曪級 \href{http://www.foundertype.com/index.php/FontInfo/index/id/164 璁捐甯堥潪鍟嗗厤璐箎{涓嬭浇閾炬帴}
+% FZYouHK_508R  \href{http://www.foundertype.com/index.php/FontInfo/index/id/244}{鏂规鎮犻粦508R} 璁捐甯堥潪鍟嗗厤璐�
+%
+% FZYouHK_511M \href{http://www.foundertype.com/index.php/FontInfo/index/id/244}{鏂规鎮犻粦511M} 璁捐甯堥潪鍟嗗厤璐�
+%
+% 鎬濇簮瀛椾綋\footnote{鎬濇簮瀹嬩綋鍜屾€濇簮榛戜綋鏈変袱绉嶈嫳鏂囧懡鍚嶏紝鏈ā鏉块噰鐢℅oogle鐨刵oto绯诲垪}锛�
+%  \href{https://www.google.com/get/noto/#serif-hans}{鎬濇簮瀹嬩綋}銆�
+%  \href{https://www.google.com/get/noto/#sans-hans}{鎬濇簮榛戜綋}
+% 
 %
-% FZKTK 鏂规妤蜂綋锛堢畝绻佹墿灞曪級 \href{http://www.foundertype.com/index.php/FontInfo/index/id/137 鍏嶈垂鍟嗙敤}{涓嬭浇閾炬帴}
 % 
+% 鏂规妤蜂綋銆佹柟姝d豢瀹嬩负鍏嶈垂鍟嗙敤瀛椾綋锛屼笖鏀寔CJK瀛楃闆�
+%  \href{http://www.foundertype.com/index.php/FontInfo/index/id/128.html}{鏂规浠垮畫}
+%  \href{http://www.foundertype.com/index.php/FontInfo/index/id/137.html}{鏂规妤蜂綋}
+%
 % 鍚勪釜绯荤粺鐨勯粯璁ゅ瓧浣撹鍙傝€冦€傚彲浠ョ湅鍒帮紝涓嶅悓绯荤粺涓婁娇鐢ㄧ殑瀛椾綋鏈夋墍宸埆锛屽疄闄呰緭鍑虹粨鏋滃彲鑳藉瓨鍦ㄧ粏寰笉鍚�, 浣跨敤鏃惰娉ㄦ剰銆備緥濡傦紝鍦↙inux骞冲彴鎴栬€呬娇鐢ㄤ簡Ubuntu鍚庣鐨勫崡澶hologo{TeX}涓婏紝瀹嬩綋鍔犵矖鏁堟灉鏇存槑鏄撅紱鍙︿竴鏂归潰锛屽湪Windows骞冲彴杩涜缂栬瘧鐨勬晥鏋滄洿鎺ヨ繎Word鍔犵矖\footnote{鍥犱负SimSun娌℃湁鍘熺敓绮椾綋锛岄€氳繃AutoFakeBold=2.17杩涜妯′豢}锛岀鍚堣瑙変範鎯€�
 % 
 % \end{function}
@@ -586,18 +595,6 @@ through XeTeX.
 %    \begin{macrocode}
 \keys_define:nn { nju }
 {
-%  titlelength       .int_set:N    =   \nju_titlelength,
-%  titlelength       .initial:n    =   1,
-%    \end{macrocode}
-%
-% Put text here.
-%    \begin{macrocode}
-  secondsupervisor      .bool_set:N   =   \nju_second_supervisor,
-  secondsupervisor      .initial:n    =   false,
-%    \end{macrocode}
-%
-% Put text here.
-%    \begin{macrocode}
   nlcover           .bool_set:N   =   \nju_nl_cover,
   nlcover           .initial:n    =   false,
 %    \end{macrocode}
@@ -610,34 +607,15 @@ through XeTeX.
 %    \begin{macrocode}
   type              .tl_set:N     =   \nju_type,
   type              .initial:n    =   thesis,
+}
 %    \end{macrocode}
-%
-%    \begin{macrocode}
-  systemfont        .bool_set:N   =   \nju_systemfont,
-  systemfont        .initial:n    =   true,
-%    \end{macrocode}
-%
-% Put text here.
-%    \begin{macrocode}
-  customlatinfont   .tl_set:N     =   \nju_customlatinfont,
-  customlatinfont   .initial:n    =   windows,
-%    \end{macrocode}
-%
-% Put text here.
-%    \begin{macrocode}
-  customchinesefont .tl_set:N     =   \nju_customchinesefont,
-  customchinesefont .initial:n    =   windows,
-%    \end{macrocode}
-%
+% 
 % Put text here.
 %    \begin{macrocode}
+\keys_define:nn { nju }
+{
   info              .meta:nn      =   { nju / info } { #1 }
 }
-%    \end{macrocode}
-%
-% Put text here.
-%
-%    \begin{macrocode}
 \keys_define:nn { nju / info }
 {
 %    \end{macrocode}
@@ -716,38 +694,23 @@ through XeTeX.
 }
 %    \end{macrocode}
 %
-% This environment does nothing.  It is merely an example.
-% If this were a real environment, you would put a paragraph here
-% describing what the environment is supposed to do, what its
-% mandatory and optional arguments are, and so forth.
 %    \begin{macrocode}
 \NewDocumentCommand \njusetup { m }
 { \keys_set:nn { nju } { #1 } }
 %    \end{macrocode}
-% mandatory and optional arguments are, and so forth.
-%    \begin{macrocode}
-\ProcessKeysOptions { nju }
-%    \end{macrocode}
 %
 % mandatory and optional arguments are, and so forth.
 %    \begin{macrocode}
-\RequirePackage{fontspec}
 \RequirePackage[    
     top=2.5cm,
     bottom=2.5cm,
     left=3.2cm,
     right=3.2cm
 ]{geometry}
-% \RequirePackage{ifthen}
 \RequirePackage{xparse}
-% \RequirePackage{etoolbox}
-% \RequirePackage{titlesec} % 淇敼绔犺妭鏍囬鍔熻兘鐢盋TeX鎻愪緵
 \RequirePackage{titletoc} % 淇敼鐩綍鍐呮爣棰樻牸寮�
-% \RequirePackage{appendix} % 瀹氫箟闄勫綍鏍峰紡
 \RequirePackage[hyphens]{url} % generate better linebreaks in the url
 % \RequirePackage[normalem]{ulem} % 缁樺埗涓嬪垝绾�
-% \RequirePackage{soul} % 鐢ㄤ笉璧锋潵
-% \RequirePackage{soulutf8} 
 \RequirePackage{dashundergaps}
 \RequirePackage{setspace}
 \RequirePackage{lastpage}
@@ -849,54 +812,146 @@ through XeTeX.
 %    \end{macrocode}
 %
 % \subsection{瀛椾綋璁剧疆}
+%
+% 鍔犺浇璁剧疆瀛椾綋鎵€闇€鐨勫寘\pkg{fontspec}
+%    \begin{macrocode}
+\RequirePackage{fontspec}
+%    \end{macrocode}
+%
+% 
+%
+% \begin{variable}{\g_@@_latin_fontset_tl,\g_@@_cjk_fontset_tl}
+% 鐢ㄤ簬瀛樺偍鎵€浣跨敤瀛椾綋鍚嶇О鐨勫叏灞€鍙橀噺锛屾敞鎰忓畯鐨勫懡鍚嶏紝l浠h〃灞€閮ㄥ彉閲忥紝g浠h〃鍏ㄥ眬鍙橀噺
+%    \begin{macrocode}
+\tl_new:N \g_@@_latin_fontset_tl
+\tl_new:N \g_@@_cjk_fontset_tl
+%    \end{macrocode}
+% \end{variable}
+%
+% 瀹氫箟瀛椾綋閫夐」
+%    \begin{macrocode}
+\keys_define:nn { nju }
+{
+  customlatinfont   .choices:nn   =
+  { gyre, macos, windows, null }
+  { \tl_set_eq:NN \g_@@_latin_fontset_tl \l_keys_choice_tl },  
+  customchinesefont .choices:nn   =
+  { fandol, founder, macos, noto, windows, null }
+  { \tl_set_eq:NN \g_@@_cjk_fontset_tl   \l_keys_choice_tl },
+}
+%    \end{macrocode}
+%
+% \begin{macro}{\ProcessKeysOptions}
+% 鍦ㄥ畾涔夊畬鍏ㄩ儴璁剧疆浠ュ悗浠巘ex鏂囦欢瀵艰█鍖鸿緭鍏ュ弬鏁�
 %    \begin{macrocode}
-% 璁剧疆瑗挎枃瀛椾綋
-\NewDocumentCommand\set_latin_fontset_windows{}{
+\ProcessKeysOptions { nju }
+%    \end{macrocode}
+% \end{macro}
+%
+% 濡傛灉鏈繘琛岃缃垯浣跨敤绯荤粺榛樿瀛椾綋瑕嗙洊杈撳叆鍙傛暟
+%
+% \begin{variable}{\g_@@_load_system_fontset_tl}
+% 鐢ㄤ簬鍒ゆ柇鏄惁闇€瑕佽浇鍏ョ郴缁熼瑁呭瓧浣撶殑鍏ㄥ眬鍙橀噺
+%    \begin{macrocode}
+\bool_new:N \g_@@_load_system_fontset_tl
+%    \end{macrocode}
+% \end{variable}
+%
+% 鍒ゆ柇鐢ㄦ埛鏄惁鑷畾涔変簡涓嫳鏂囧瓧浣擄紝濡傛灉鍏朵腑浠绘剰涓€绉嶆湭琚畾涔夛紝
+% 鍒欎娇鐢ㄧ郴缁熼瑁呭瓧浣撹鐩栧瓧浣撻€夐」
+%    \begin{macrocode}
+\tl_if_empty:NTF \g_@@_latin_fontset_tl
+  { \bool_gset_true:N \g_@@_load_system_fontset_tl }  
+{  
+  \tl_if_empty:NT \g_@@_cjk_fontset_tl
+    { \bool_gset_true:N \g_@@_load_system_fontset_tl }  
+}
+\bool_if:NT \g_@@_load_system_fontset_tl
+{
+  % 妫€娴嬫槸鍚︽槸 Windows
+  \sys_if_platform_windows:TF
+  {
+    \tl_set:Nn \g_@@_latin_fontset_tl { windows }
+    \tl_set:Nn \g_@@_cjk_fontset_tl   { windows }
+  }
+  {
+    % 妫€娴嬫槸鍚︽槸 macOS
+    \ctex_if_platform_macos:TF
+    {
+      \tl_set:Nn \g_@@_latin_fontset_tl { macos }
+      \tl_set:Nn \g_@@_cjk_fontset_tl   { macos }
+    }
+    % 鍏朵綑绯荤粺涓€寰嬩娇鐢ㄨ嚜鐢卞瓧浣�
+    {
+      \tl_set:Nn \g_@@_latin_fontset_tl { gyre }
+      \tl_set:Nn \g_@@_cjk_fontset_tl { fandol }
+    }
+  }
+}
+%    \end{macrocode}
+%
+% 鎺ヤ笅鏉ラ€愪釜瀹氫箟鎵€闇€瑕佷娇鐢ㄧ殑瀛楃闆�
+%
+% \begin{macro}{\@@_load_latin_font_windows:}
+% Windows 瑗挎枃瀛椾綋
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_load_latin_font_windows:
+{
   \setmainfont{Times~New~Roman}
   \setsansfont{Arial}
   \setmonofont{Courier~New}[Scale=MatchLowercase]
 }
 %    \end{macrocode}
+% \end{macro}
 %
-% Put text here.
+%
+% \begin{macro}{\@@_load_latin_font_macos:}
+% macOS 瑗挎枃瀛椾綋
 %    \begin{macrocode}
-\NewDocumentCommand\set_latin_fontset_macos{}{
-  \setmainfont{Times~New~Roman}
-  \setsansfont{Arial}
-  \setmonofont{Menlo}[Scale=MatchLowercase]
+\cs_new_protected:Npn \@@_load_latin_font_macos:
+{
+\setmainfont{Times~New~Roman}
+\setsansfont{Arial}
+\setmonofont{Menlo}[Scale=MatchLowercase]
 }
 %    \end{macrocode}
+% \end{macro}
 %
-% Put text here.
+%
+% \begin{macro}{\@@_load_latin_font_gyre:}
+% 寮€婧愮殑 gyre 瑗挎枃瀛椾綋
 %    \begin{macrocode}
-\NewDocumentCommand\set_latin_fontset_gyre{}{
-  \setmainfont{texgyretermes}[
-    Extension=.otf,
-    UprightFont=*-regular,
-    BoldFont=*-bold,
-    ItalicFont=*-italic,
-    BoldItalicFont=*-bolditalic]
-  \setsansfont{texgyreheros}[
-    Extension=.otf,
-    UprightFont=*-regular,
-    BoldFont=*-bold,
-    ItalicFont=*-italic,
-    BoldItalicFont=*-bolditalic]
-  \setmonofont{texgyrecursor}[
-    Extension=.otf,
-    UprightFont=*-regular,
-    BoldFont=*-bold,
-    ItalicFont=*-italic,
-    BoldItalicFont=*-bolditalic,
-    Scale=MatchLowercase,
-    Ligatures=CommonOff]
+\cs_new_protected:Npn \@@_load_latin_font_gyre:
+{
+\setmainfont{texgyretermes}[
+  Extension=.otf,
+  UprightFont=*-regular,
+  BoldFont=*-bold,
+  ItalicFont=*-italic,
+  BoldItalicFont=*-bolditalic]
+\setsansfont{texgyreheros}[
+  Extension=.otf,
+  UprightFont=*-regular,
+  BoldFont=*-bold,
+  ItalicFont=*-italic,
+  BoldItalicFont=*-bolditalic]
+\setmonofont{texgyrecursor}[
+  Extension=.otf,
+  UprightFont=*-regular,
+  BoldFont=*-bold,
+  ItalicFont=*-italic,
+  BoldItalicFont=*-bolditalic,
+  Scale=MatchLowercase,
+  Ligatures=CommonOff]
 }
 %    \end{macrocode}
+% \end{macro}
 %
-% Put text here.
+% \begin{macro}{\@@_load_cjk_font_windows:}
+% Windows 涓枃瀛椾綋
 %    \begin{macrocode}
-% 璁剧疆涓枃瀛椾綋
-\NewDocumentCommand\set_chinese_fontset_windows{}{
+\cs_new_protected:Npn \@@_load_cjk_font_windows:
+{
   \setCJKmainfont{SimSun}[
     AutoFakeBold=2.17, 
     ItalicFont=KaiTi]
@@ -910,201 +965,173 @@ through XeTeX.
     BoldFont=Microsoft~YaHei~Bold]
 }
 %    \end{macrocode}
+% \end{macro}
 %
-% Put text here.
+%
+% \begin{macro}{\@@_load_cjk_font_macos:}
+% macOS 瀛椾綋
 %    \begin{macrocode}
-\NewDocumentCommand\set_chinese_fontset_macos{}{
-  % 绉婚櫎 does not contain script "CJK" 璀﹀憡
-  \msg_redirect_name:nnn {fontspec} {no-script} {info} 
-  \setCJKmainfont{Songti~SC~Light}[
-    BoldFont=Songti~SC~Bold,
-    ItalicFont=Kaiti~SC,
-    BoldItalicFont=Kaiti~SC~Bold]
-  \setCJKsansfont{Heiti~SC~Light}[BoldFont=Heiti~SC~Medium]
-  \setCJKmonofont{STFangsong}
-  \setCJKfamilyfont{zhsong}{Songti~SC~Light}[BoldFont=Songti~SC~Bold]
-  \setCJKfamilyfont{zhhei}{Heiti~SC~Light}[BoldFont=Heiti~SC~Medium]
-  \setCJKfamilyfont{zhfs}{STFangsong}
-  \setCJKfamilyfont{zhkai}{Kaiti~SC}
-    [
-      BoldFont=Kaiti~SC~Bold,      
-      % 鍙傝€僀TeX鎵嬪唽绗�9鑺� LuaLATEX 涓嬬殑涓枃鏀寔鏂瑰紡
-      % AlternateFont =
-      %   {
-      %   {鉄╟haracter range1鉄﹠ {鉄╝lternate font name1鉄﹠ 
-      %   {鉄╝lternate font features2鉄﹠ ,
-      %   ......
-      %   }
-    ]
-  \setCJKfamilyfont{zhnewhei}{PingFang~SC}
+\cs_new_protected:Npn \@@_load_cjk_font_macos:
+{
+% 绉婚櫎 does not contain script "CJK" 璀﹀憡
+\msg_redirect_name:nnn {fontspec} {no-script} {info} 
+\setCJKmainfont{Songti~SC~Light}[
+  BoldFont=Songti~SC~Bold,
+  ItalicFont=Kaiti~SC,
+  BoldItalicFont=Kaiti~SC~Bold]
+\setCJKsansfont{Heiti~SC~Light}[BoldFont=Heiti~SC~Medium]
+\setCJKmonofont{STFangsong}
+\setCJKfamilyfont{zhsong}{Songti~SC~Light}[BoldFont=Songti~SC~Bold]
+\setCJKfamilyfont{zhhei}{Heiti~SC~Light}[BoldFont=Heiti~SC~Medium]
+\setCJKfamilyfont{zhfs}{STFangsong}
+\setCJKfamilyfont{zhkai}{Kaiti~SC}
+  [
+    BoldFont=Kaiti~SC~Bold,      
+    % 鍙傝€僀TeX鎵嬪唽绗�9鑺� LuaLATEX 涓嬬殑涓枃鏀寔鏂瑰紡
+    % AlternateFont =
+    %   {
+    %   {鉄╟haracter range1鉄﹠ {鉄╝lternate font name1鉄﹠ 
+    %   {鉄╝lternate font features2鉄﹠ ,
+    %   ......
+    %   }
+  ]
+\setCJKfamilyfont{zhnewhei}{PingFang~SC}
 }
 %    \end{macrocode}
+% \end{macro}
 %
-% Put text here.
+%
+% \begin{macro}{\@@_load_cjk_font_fandol:}
+% Fandol 瀛椾綋
 %    \begin{macrocode}
-\NewDocumentCommand\set_chinese_fontset_fandol{}{
-  % 绉婚櫎 does not contain script "CJK" 璀﹀憡
-  \msg_redirect_name:nnn {fontspec} {no-script} {info} 
-  \setCJKmainfont{FandolSong-Regular}[
-    Extension=.otf,
-    BoldFont=FandolSong-Bold,
-    ItalicFont=FandolKai-Regular]
-  \setCJKsansfont{FandolHei-Regular}[
-    Extension=.otf,
-    BoldFont=FandolHei-Bold]
-  \setCJKmonofont{FandolFang-Regular}[Extension=.otf]
-  \setCJKfamilyfont{zhsong}{FandolSong-Regular}[
-    Extension=.otf,
-    BoldFont=FandolSong-Bold]
-  \setCJKfamilyfont{zhhei}{FandolHei-Regular}[
-    Extension=.otf,
-    BoldFont=FandolHei-Bold]
-  \setCJKfamilyfont{zhfs}{FandolFang-Regular}[Extension=.otf]
-  \setCJKfamilyfont{zhkai}{FandolKai-Regular}[
-    Extension=.otf,
-    AutoFakeBold=2.17]
+\cs_new_protected:Npn \@@_load_cjk_font_fandol:
+{
+% 绉婚櫎 does not contain script "CJK" 璀﹀憡
+\msg_redirect_name:nnn {fontspec} {no-script} {info} 
+\setCJKmainfont{FandolSong-Regular}[
+  Extension=.otf,
+  BoldFont=FandolSong-Bold,
+  ItalicFont=FandolKai-Regular]
+\setCJKsansfont{FandolHei-Regular}[
+  Extension=.otf,
+  BoldFont=FandolHei-Bold]
+\setCJKmonofont{FandolFang-Regular}[Extension=.otf]
+\setCJKfamilyfont{zhsong}{FandolSong-Regular}[
+  Extension=.otf,
+  BoldFont=FandolSong-Bold]
+\setCJKfamilyfont{zhhei}{FandolHei-Regular}[
+  Extension=.otf,
+  BoldFont=FandolHei-Bold]
+\setCJKfamilyfont{zhfs}{FandolFang-Regular}[Extension=.otf]
+\setCJKfamilyfont{zhkai}{FandolKai-Regular}[
+  Extension=.otf,
+  AutoFakeBold=2.17]
 }
 %    \end{macrocode}
+% \end{macro}
 %
-% Put text here.
+%
+% \begin{macro}{\@@_load_cjk_font_founder:}
+%  鏂规瀛楃闆嗭紙绠€绻佹墿灞曪級
 %    \begin{macrocode}
-% 鏂规瀛楃闆�
-\NewDocumentCommand\set_chinese_fontset_founder{}{
-  \setCJKmainfont{FZSSK}[
-    Extension=.ttf,
-    BoldFont=FZXBSK,
-    ItalicFont=FZKTK]
-  % FZXH1K 鏂规缁嗛粦涓€锛堢畝绻佹墿灞曪級 http://www.foundertype.com/index.php/FontInfo/index/id/161 璁捐甯堥潪鍟嗗厤璐�
-  % FZHTK 鏂规榛戜綋锛堢畝绻佹墿灞曪級 http://www.foundertype.com/index.php/FontInfo/index/id/131 鍏嶈垂鍟嗙敤
-  \setCJKsansfont{FZXH1K}[
-    Extension=.ttf,
-    BoldFont=FZHTK]
-  % FZFSK 鏂规浠垮畫锛堢畝绻佹墿灞曪級 http://www.foundertype.com/index.php/FontInfo/index/id/128
-  \setCJKmonofont{FZFSK}[Extension=.ttf]
-
-  \setCJKfamilyfont{zhsong}{FZSSK}[
+\cs_new_protected:Npn \@@_load_cjk_font_founder:
+{
+\setCJKmainfont{FZSSK}[% 鏂规涔﹀畫
+  Extension=.ttf,
+  BoldFont=FZXBSK,% 鏂规灏忔爣瀹�
+  ItalicFont=FZKTK]% 鏂规妤蜂綋
+\setCJKsansfont{FZXH1K}[% 鏂规缁嗛粦涓€
+  Extension=.ttf,
+  BoldFont=FZHTK]% FZHTK 鏂规榛戜綋
+\setCJKmonofont{FZFSK}[Extension=.ttf]% 鏂规浠垮畫
+\setCJKfamilyfont{zhsong}
+  {FZSSK}[
     Extension=.ttf,
     BoldFont=FZXBSK]
-  \setCJKfamilyfont{zhhei}{FZHTK}[
+\setCJKfamilyfont{zhhei}
+  {FZHTK}[
     Extension=.ttf,
     AutoFakeBold=2.17]
-  \setCJKfamilyfont{zhfs}{FZFSK}[Extension=.ttf]
-  \setCJKfamilyfont{zhkai}{FZKTK}[Extension=.ttf]
-  % FZYouHK_508R 鏂规鎮犻粦508R锛堢畝绻佹墿灞曪級 http://www.foundertype.com/index.php/FontInfo/index/id/244 璁捐甯堥潪鍟嗗厤璐�
-  % FZYouHK_511M 鏂规鎮犻粦511M锛堢畝绻佹墿灞曪級 http://www.foundertype.com/index.php/FontInfo/index/id/244 璁捐甯堥潪鍟嗗厤璐�
-  \setCJKfamilyfont{zhnewhei}{FZYouHK_508R}[
+\setCJKfamilyfont{zhfs}
+  {FZFSK}[Extension=.ttf]
+\setCJKfamilyfont{zhkai}
+  {FZKTK}[Extension=.ttf]
+\setCJKfamilyfont{zhnewhei}
+  {FZYouHK_508R}[% 鏂规鎮犻粦508R
     Extension=.ttf,
-    BoldFont=FZYouHK_511M]
+    BoldFont=FZYouHK_511M]% 鏂规鎮犻粦511M 
 }
 %    \end{macrocode}
+% \end{macro}
 %
-% Put text here.
+%
+% \begin{macro}{\@@_load_cjk_font_noto:}
+% 鎬濇簮瀛椾綋
 %    \begin{macrocode}
-\NewDocumentCommand\set_chinese_fontset_noto{}{
-  % 鎬濇簮瀹嬩綋 https://www.google.com/get/noto/#serif-hans
-  \setCJKmainfont[
-    UprightFont=NotoSerifCJKsc-Regular,
-    BoldFont=NotoSerifCJKsc-Bold,
-    ItalicFont=NotoSerifCJKsc-Regular,
-    BoldItalicFont=NotoSerifCJKsc-Bold,
-    ItalicFeatures=FakeSlant,
-    BoldItalicFeatures=FakeSlant]{Noto~Serif~CJK~SC}
-
-  % 鎬濇簮榛戜綋 https://www.google.com/get/noto/#sans-hans
-  \setCJKsansfont[
-    UprightFont=NotoSansCJKsc-Regular,
-    BoldFont=NotoSansCJKsc-Bold,
-    ItalicFont=NotoSansCJKsc-Regular,
-    BoldItalicFont=NotoSansCJKsc-Bold,
-    ItalicFeatures=FakeSlant,
-    BoldItalicFeatures=FakeSlant]{Noto~Sans~CJK~SC}
-
-  % 鍖呭惈浜庝笂杩版€濇簮榛戜綋
-  \setCJKmonofont[
-    UprightFont=NotoSansMonoCJKsc-Regular,
-    BoldFont=NotoSansMonoCJKsc-Bold,
-    ItalicFont=NotoSansMonoCJKsc-Regular,
-    BoldItalicFont=NotoSansMonoCJKsc-Bold,
-    ItalicFeatures=FakeSlant,
-    BoldItalicFeatures=FakeSlant]{Noto~Sans~Mono~SC}
-
-  \setCJKfamilyfont{zhsong}{Noto~Serif~CJK~SC}
-  \setCJKfamilyfont{zhhei}{Noto~Sans~CJK~SC}
-
-  % 鏂规妤蜂綋銆佹柟姝d豢瀹嬩负鍏嶈垂鍟嗙敤瀛椾綋锛屼笖鏀寔CJK瀛楃闆�
-  % 鏂规浠垮畫 http://www.foundertype.com/index.php/FontInfo/index/id/128.html
-  % 鏂规妤蜂綋 http://www.foundertype.com/index.php/FontInfo/index/id/137.html
-  \setCJKfamilyfont{zhfs}{鏂规浠垮畫绠€浣搣[AutoFakeBold=2.17]
-  \setCJKfamilyfont{zhkai}{鏂规妤蜂綋绠€浣搣[AutoFakeBold=2.17]
+\cs_new_protected:Npn \@@_load_cjk_font_noto:
+{
+% 鎬濇簮瀹嬩綋
+\setCJKmainfont[
+  UprightFont=NotoSerifCJKsc-Regular,
+  BoldFont=NotoSerifCJKsc-Bold,
+  ItalicFont=NotoSerifCJKsc-Regular,
+  BoldItalicFont=NotoSerifCJKsc-Bold,
+  ItalicFeatures=FakeSlant,
+  BoldItalicFeatures=FakeSlant]{Noto~Serif~CJK~SC}
+
+% 鎬濇簮榛戜綋
+\setCJKsansfont[
+  UprightFont=NotoSansCJKsc-Regular,
+  BoldFont=NotoSansCJKsc-Bold,
+  ItalicFont=NotoSansCJKsc-Regular,
+  BoldItalicFont=NotoSansCJKsc-Bold,
+  ItalicFeatures=FakeSlant,
+  BoldItalicFeatures=FakeSlant]{Noto~Sans~CJK~SC}
+
+% 鍖呭惈浜庝笂杩版€濇簮榛戜綋
+\setCJKmonofont[
+  UprightFont=NotoSansMonoCJKsc-Regular,
+  BoldFont=NotoSansMonoCJKsc-Bold,
+  ItalicFont=NotoSansMonoCJKsc-Regular,
+  BoldItalicFont=NotoSansMonoCJKsc-Bold,
+  ItalicFeatures=FakeSlant,
+  BoldItalicFeatures=FakeSlant]{Noto~Sans~Mono~SC}
+
+\setCJKfamilyfont{zhsong}{Noto~Serif~CJK~SC}
+\setCJKfamilyfont{zhhei}{Noto~Sans~CJK~SC}
+\setCJKfamilyfont{zhfs}{鏂规浠垮畫绠€浣搣[AutoFakeBold=2.17]
+\setCJKfamilyfont{zhkai}{鏂规妤蜂綋绠€浣搣[AutoFakeBold=2.17]
 }
 %    \end{macrocode}
+% \end{macro}
 %
-% Put text here.
+% 杞藉叆璁剧疆鐨勫瓧浣�
 %    \begin{macrocode}
-% 瀛椾綋鍒ゆ柇
-\bool_if:NTF \nju_systemfont
-% 鏍规嵁鎿嶄綔绯荤粺鑷姩閫夋嫨鐩稿簲瀛椾綋
+\cs_new_protected:Npn \@@_load_font:
 {
-  % 妫€娴嬫槸鍚︽槸 Windows
-  \sys_if_platform_windows:TF
-  {
-    \set_latin_fontset_windows
-    \set_chinese_fontset_windows
-  }
-  {
-    % 妫€娴嬫槸鍚︽槸 macOS
-    \ctex_if_platform_macos:TF
-    {
-      \set_latin_fontset_macos
-      \set_chinese_fontset_macos
-    }
-    % 鍏朵綑绯荤粺涓€寰嬩娇鐢ㄨ嚜鐢卞瓧浣�
-    {
-      \set_latin_fontset_gyre
-      \set_chinese_fontset_fandol
-    }
-  }
-}
-{
-  % 濡傛灉鐢ㄦ埛闇€瑕佽嚜瀹氫箟瀛椾綋
-  % 姝ゅ闇€瑕佷娇鐢╘str_case_e鑰屼笉鏄痋str_case浣垮畯灞曞紑涓哄瓧绗︿覆
-  \str_case_e:nn { \nju_customlatinfont }
-  {
-    { windows } { \set_latin_fontset_windows }
-    { macos } { \set_latin_fontset_macos }
-    { gyre } { \set_latin_fontset_gyre }
-    { null } {}
-  }
-  \str_case_e:nn { \nju_customchinesefont }
-  {
-    { windows } { \set_chinese_fontset_windows }
-    { macos } { \set_chinese_fontset_macos }
-    { gyre } { \set_chinese_fontset_gyre }
-    { founder } { \set_chinese_fontset_founder }
-    { noto } { \set_chinese_fontset_noto }
-    { null } {}
-  }
+  \use:c { @@_load_latin_font_ \g_@@_latin_fontset_tl : }
+  \use:c { @@_load_cjk_font_   \g_@@_cjk_fontset_tl   : }
+  
+  \NewDocumentCommand\songti{}{\CJKfamily{zhsong}}
+  \NewDocumentCommand\heiti{}{\CJKfamily{zhhei}}
+  \NewDocumentCommand\fangsong{}{\CJKfamily{zhfs}}
+  \NewDocumentCommand\kaishu{}{\CJKfamily{zhkai}}
 }
-% 閫夋嫨鍏朵粬瀛椾綋锛岃纭繚鐩稿簲瀛椾綋宸插畨瑁�
+\@@_load_font:
 %    \end{macrocode}
 %
-% Put text here.
-%    \begin{macrocode}
 % 璁剧疆鏁板瀛椾綋 (XITS, 鎴栬€� STIX, 涓� Times New Roman 鏈€涓虹浉杩�)
+%    \begin{macrocode}
 % \setmathfont{STIXTwoMath-Regular}[Extension = .otf]
 \setmathfont{XITSMath-Regular}[
   BoldFont = XITSMath-Bold,
   Extension = .otf]
 %    \end{macrocode}
 %
-% Put text here.
-%    \begin{macrocode}
-\NewDocumentCommand\songti{}{\CJKfamily{zhsong}}
-\NewDocumentCommand\heiti{}{\CJKfamily{zhhei}}
-\NewDocumentCommand\fangsong{}{\CJKfamily{zhfs}}
-\NewDocumentCommand\kaishu{}{\CJKfamily{zhkai}}
-% \NewDocumentCommand\lishu{}{\CJKfamily{zhli}}
-%    \end{macrocode}
+%
+% \subsection{椤甸潰鏍峰紡}
+%
+% \subsubsection{椤电湁椤佃剼}
 %
 % Put text here.
 %    \begin{macrocode}
@@ -1233,25 +1260,28 @@ through XeTeX.
 }
 %    \end{macrocode}
 %
+% \begin{environment}{preface}
 % Put text here.
 %    \begin{macrocode}
 % 瀹氬埗鍓嶈█銆佽嚧璋㈢幆澧�
-\newenvironment{preface}
+\NewDocumentEnvironment{preface}{}
 {%
   \chapter*{鍓嶈█}
   \addcontentsline{toc}{chapter}{鍓嶈█}
 }{}
 %    \end{macrocode}
+% \end{environment}
 %
-% \DescribeEnv{acknowledgements}
+% \begin{environment}{acknowledgement}
 % 鍗曠嫭鍒朵綔鐨勮嚧璋㈤〉銆�
 %    \begin{macrocode}
-\newenvironment{acknowledgement}
+\NewDocumentEnvironment{acknowledgement}{}
 {%
   \chapter*{鑷磋阿}
   \addcontentsline{toc}{chapter}{鑷磋阿}
 }{}
 %    \end{macrocode}
+% \end{environment}
 %
 % Put text here.
 %    \begin{macrocode}
@@ -1376,7 +1406,9 @@ through XeTeX.
 %    \begin{macrocode}
 \lstdefinestyle{LaTeX}{
   language=TeX,
-  morekeywords={begin, caption, label, mathrm, frac, toprule, midrule, bottomrule, includegraphics}
+  morekeywords={
+    begin, caption, label, mathrm, frac, 
+    toprule, midrule, bottomrule, includegraphics}
 }
 %    \end{macrocode}
 %
@@ -1538,30 +1570,36 @@ through XeTeX.
 }
 %    \end{macrocode}
 %
-% Put text here.
+% 鍙屽甯堢殑澶勭悊
 %    \begin{macrocode}
 % 鎷煎悎瀵煎笀
-\bool_if:NTF \nju_second_supervisor
-{ 
-  \tl_const:Nn \nju_supervisor_full
+\tl_if_empty:NTF \l_@@_info_supv_b_tl
+{
+  \tl_const:Nn \l_@@_info_supv_full_tl
   {
-    \l_@@_info_supv_a_tl\ \l_@@_info_supv_a_title_tl
-    \ \ \l_@@_info_supv_b_tl\ \l_@@_info_supv_b_title_tl
+     \l_@@_info_supv_a_tl\hspace{.5em}
+     \l_@@_info_supv_a_title_tl
   }
-  \tl_const:Nn \nju_supervisor_full_en
+  \tl_const:Nn \l_@@_info_supv_full_tl_en
   {
-    \l_@@_info_supv_a_en_tl\ \l_@@_info_supv_a_title_en_tl
-    \ \ \l_@@_info_supv_b_en_tl\ \l_@@_info_supv_b_title_en_tl
+    \l_@@_info_supv_a_en_tl\hspace{.5em}
+    \l_@@_info_supv_a_title_en_tl
   }
 }
-{
-  \tl_const:Nn \nju_supervisor_full
+{ 
+  \tl_const:Nn \l_@@_info_supv_full_tl
   {
-    \l_@@_info_supv_a_tl\ \l_@@_info_supv_a_title_tl
+    \l_@@_info_supv_a_tl\hspace{.5em}
+    \l_@@_info_supv_a_title_tl\hspace{1em}
+    \l_@@_info_supv_b_tl\hspace{.5em}
+    \l_@@_info_supv_b_title_tl
   }
-  \tl_const:Nn \nju_supervisor_full_en
+  \tl_const:Nn \l_@@_info_supv_full_tl_en
   {
-    \l_@@_info_supv_a_en_tl\ \l_@@_info_supv_a_title_en_tl
+    \l_@@_info_supv_a_en_tl\hspace{.5em}
+    \l_@@_info_supv_a_title_en_tl\hspace{1em}
+    \l_@@_info_supv_b_en_tl\hspace{.5em}
+    \l_@@_info_supv_b_title_en_tl
   }
 }
 %    \end{macrocode}
@@ -1572,66 +1610,110 @@ through XeTeX.
 \str_if_eq:NNTF {\nju_degree} { ug } 
 {
   % 鏈
-  \tl_const:Nn \nju_degree_name {鏈琝hfill 绉慭hfill }
+  \tl_const:Nn \c_@@_name_diploma_tl { 鏈琝hfill 绉慭hfill }
+  \tl_const:Nn \c_@@_name_title_tl { 棰榎hfill 鐩� }
+  
+  \tl_const:Nn \c_@@_cover_uline_len_a_tl { 250pt }
+  \tl_const:Nn \c_@@_cover_uline_len_b_tl { 90pt }
+  \tl_const:Nn \c_@@_cover_uline_font_tl { \songti }
+  \tl_const:Nn \c_@@_cover_uline_style_tl { \bf }
+  \tl_const:Nn \c_@@_cover_uline_bskip_tl {}
+
+  \tl_const:Nn \c_@@_cover_box_len_tl { 4.2em }
 
   % 鏈寮哄埗涓嶆墦鍗板浗瀹跺浘涔﹂灏侀潰
   \bool_set_false:N \nju_nl_cover
-  
-  % 灏侀潰涓嬪垝绾�
-  \cs_new:Npn \nju_cover_uline_ug:nn #1 #2 
-  {
-    \uline{\makebox[#1]{\rm\songti#2}}
-  }
- 
-  % 灏侀潰琛ㄦ牸杈规
-  \cs_new:Npn \nju_coverbox_ug:n #1 
-  {
-    \makebox[4.2em][s]{#1}
-  }
 } 
 { 
   % 鏈浠ュ閮芥槸鐮旂┒鐢� 
-  \tl_const:Nn \nju_degree_name {鐮擻hfill 绌禱hfill 鐢焅hfill }
+  \tl_const:Nn \c_@@_name_diploma_tl { 鐮擻hfill 绌禱hfill 鐢焅hfill }
+  \tl_const:Nn \c_@@_name_title_tl { 璁篭hfill 鏂嘰hfill 棰榎hfill 鐩� }
 
-  % 灏侀潰涓嬪垝绾�
-  \cs_new:Npn \nju_cover_uline_g:n #1 
-  {
-    \uline{\makebox[250pt]{\rm\kaishu#1}}
-  }
+  \tl_const:Nn \c_@@_cover_uline_len_a_tl { 250pt }
+  \tl_const:Nn \c_@@_cover_uline_len_b_tl { 14em }
+  \tl_const:Nn \c_@@_cover_uline_font_tl { \kaishu }
+  \tl_const:Nn \c_@@_cover_uline_style_tl { }
+  \tl_const:Nn \c_@@_cover_uline_bskip_tl { \hspace{1em} }
 
-  % 鍥藉鍥句功棣嗗皝闈笅鍒掔嚎
-  \cs_new:Npn \nju_cover_uline_nl:nn #1 #2 
-  {
-    \uline{\makebox[#1]{#2}}
-  }
+  \tl_const:Nn \c_@@_cover_box_len_tl { 6em }
 
-  % 灏侀潰琛ㄦ牸杈规
-  \cs_new:Npn \nju_coverbox_g:n #1 
-  {
-    \makebox[6em][s]{#1\hspace{1em}}
-  }
-  
   % 鐮旂┒鐢熷浣嶅垎绫�
   \str_case_e:nn { \nju_degree }
   {
-    { mg } { \tl_const:Nn \nju_degree_title {纭曞+} }
-    { mf } { \tl_const:Nn \nju_degree_title {纭曞+涓撲笟} }
-    { phd } { \tl_const:Nn \nju_degree_title {鍗氬+} }
+    { mg } { \tl_const:Nn \c_@@_name_degree_tl {纭曞+} }
+    { mf } { \tl_const:Nn \c_@@_name_degree_tl {纭曞+涓撲笟} }
+    { phd } { \tl_const:Nn \c_@@_name_degree_tl {鍗氬+} }
   }
 }
 %    \end{macrocode}
 %
 % Put text here.
 %    \begin{macrocode}
+% 灏侀潰涓嬪垝绾�
+\cs_new:Npn \@@_cover_uline_a:n #1
+{
+  \uline{\makebox[\c_@@_cover_uline_len_a_tl]
+    {\rm\c_@@_cover_uline_font_tl #1 }}
+}
+\cs_new:Npn \@@_cover_uline_b:n #1
+{
+  \uline{\makebox[\c_@@_cover_uline_len_b_tl]
+    {\rm\c_@@_cover_uline_font_tl #1 }}
+}
+\cs_new:Npn \@@_cover_uline_nl:nn #1 #2
+{
+  \uline{\makebox[#1]
+    {\rm\c_@@_cover_uline_font_tl #2 }}
+}
+%    \end{macrocode}
+%
+% Put text here.
+%    \begin{macrocode}
+% 灏侀潰琛ㄦ牸杈规
+\cs_new:Npn \@@_cover_box:n #1 
+{
+  \makebox[\c_@@_cover_box_len_tl][s]{
+    #1\c_@@_cover_uline_bskip_tl}
+}
+%    \end{macrocode}
+%
+% Put text here.
+%    \begin{macrocode}
 % 鍒ゆ柇绫诲瀷
 \str_if_eq:NNTF {\nju_type} {thesis} 
 {
   \tl_const:Nn \nju_type_name 
-    { \nju_degree_name 姣昞hfill 涓歕hfill 璁篭hfill 鏂� }
+    { \c_@@_name_diploma_tl 姣昞hfill 涓歕hfill 璁篭hfill 鏂� }
 }
 {
   \tl_const:Nn \nju_type_name 
-    { \nju_degree_name 姣昞hfill 涓歕hfill 璁綷hfill 璁� }
+    { \c_@@_name_diploma_tl 姣昞hfill 涓歕hfill 璁綷hfill 璁� }
+}
+%    \end{macrocode}
+%
+% 瀵瑰琛屾爣棰樿繘琛岃嚜鍔ㄥ垽鏂紝骞惰緭鍑烘崲琛屽悗鐨勭粨鏋�
+%
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_cover_title_breakline:
+{
+  \@@_cover_box:n {\c_@@_name_title_tl}
+  & \@@_cover_uline_a:n 
+  { \c_@@_cover_uline_style_tl \l_@@_info_title_a_tl } \\
+  % 濡傛灉鏌愯鏍囬绌哄垯涓嶈緭鍑烘帴涓嬫潵鐨勮嫢骞茶
+  \tl_if_empty:NF \l_@@_info_title_b_tl
+  {
+    \tl_if_empty:NTF \l_@@_info_title_c_tl
+      { 
+        & \@@_cover_uline_a:n  
+        {\c_@@_cover_uline_style_tl \l_@@_info_title_b_tl } \\ 
+      }
+      {
+        & \@@_cover_uline_a:n  
+        { \c_@@_cover_uline_style_tl \l_@@_info_title_b_tl } \\
+        & \@@_cover_uline_a:n  
+        { \c_@@_cover_uline_style_tl \l_@@_info_title_c_tl } \\
+      }
+  }
 }
 %    \end{macrocode}
 %
@@ -1642,55 +1724,43 @@ through XeTeX.
 \tl_set:Nn \nju_printcoverinfo_ug 
 {
   \begin{tabular}{p{4.2em}c}
-    \nju_coverbox_ug:n {闄hfill 绯粆
-    & \nju_cover_uline_ug:nn {250pt}{\l__nju_info_dept_tl} \\
-    \nju_coverbox_ug:n {涓揬hfill 涓殅
-    & \nju_cover_uline_ug:nn {250pt}{\l__nju_major_tl} \\
-
-    \nju_coverbox_ug:n {棰榎hfill 鐩畗
-    & \nju_cover_uline_ug:nn {250pt}{\bf{\l__nju_info_title_a_tl}} \\
-    % 鑷姩鍒ゆ柇鏍囬鎹㈣
-    \tl_if_empty:NTF \l__nju_info_title_b_tl {}
-    {
-      \tl_if_empty:NTF \l__nju_info_title_c_tl
-        { & \nju_cover_uline_ug:nn {250pt}{\bf{\l__nju_info_title_b_tl}} \\ }
-        {
-          & \nju_cover_uline_ug:nn {250pt}{\bf{\l__nju_info_title_b_tl}} \\
-          & \nju_cover_uline_ug:nn {250pt}{\bf{\l__nju_info_title_c_tl}} \\
-        }
-    }
+    \@@_cover_box:n {闄hfill 绯粆
+    & \@@_cover_uline_a:n  {\l_@@_info_dept_tl} \\
+    \@@_cover_box:n {涓揬hfill 涓殅
+    & \@@_cover_uline_a:n  {\l_@@_major_tl} \\
+    \@@_cover_title_breakline:
   \end{tabular}\\
 
   \begin{tabular}{p{4.2em}cp{4.2em}c}
-    \nju_coverbox_ug:n {骞碶hfill 绾
-    & \nju_cover_uline_ug:nn {90pt}{\l_@@_info_grade_tl}
-    & \nju_coverbox_ug:n {瀛hfill 鍙穧
-    & \nju_cover_uline_ug:nn {90pt}{\l_@@_info_id_tl}\\
+    \@@_cover_box:n {骞碶hfill 绾
+    & \@@_cover_uline_b:n {\l_@@_info_grade_tl}
+    & \@@_cover_box:n {瀛hfill 鍙穧
+    & \@@_cover_uline_b:n {\l_@@_info_id_tl}\\
   \end{tabular}\\
   
   \begin{tabular}{p{4.2em}c}
-    \nju_coverbox_ug:n {瀛hfill 鐢焅hfill 濮揬hfill 鍚峿
-    & \nju_cover_uline_ug:nn {250pt}{\l_@@_info_author_tl}
+    \@@_cover_box:n {瀛hfill 鐢焅hfill 濮揬hfill 鍚峿
+    & \@@_cover_uline_a:n  {\l_@@_info_author_tl}
   \end{tabular}\\
   \begin{tabular}{p{4.2em}cp{4.2em}c}
-    \nju_coverbox_ug:n {瀵糪hfill 甯坿
-    & \nju_cover_uline_ug:nn {90pt}{\l_@@_info_supv_a_tl}
-    & \nju_coverbox_ug:n {鑱孿hfill 绉皚
-    & \nju_cover_uline_ug:nn {90pt}{\l_@@_info_supv_a_title_tl}\\
+    \@@_cover_box:n {瀵糪hfill 甯坿
+    & \@@_cover_uline_b:n {\l_@@_info_supv_a_tl}
+    & \@@_cover_box:n {鑱孿hfill 绉皚
+    & \@@_cover_uline_b:n {\l_@@_info_supv_a_title_tl}\\
 
     % 绗簩瀵煎笀
-    \bool_if:NT \nju_second_supervisor
+    \tl_if_empty:NF \l_@@_info_supv_b_tl
     {
-      \nju_coverbox_ug:n {绗琝hfill 浜孿hfill 瀵糪hfill 甯坿
-      & \nju_cover_uline_ug:nn {90pt}{\l_@@_info_supv_b_tl}
-      & \nju_coverbox_ug:n {鑱孿hfill 绉皚
-      & \nju_cover_uline_ug:nn {90pt}{\l_@@_info_supv_b_title_tl}\\
+      \@@_cover_box:n {绗琝hfill 浜孿hfill 瀵糪hfill 甯坿
+      & \@@_cover_uline_b:n {\l_@@_info_supv_b_tl}
+      & \@@_cover_box:n {鑱孿hfill 绉皚
+      & \@@_cover_uline_b:n {\l_@@_info_supv_b_title_tl}\\
     }
   \end{tabular}\\
 
   \begin{tabular}{p{4.2em}c}
-    \nju_coverbox_ug:n {鎻怽hfill 浜hfill 鏃hfill 鏈焳
-    & \nju_cover_uline_ug:nn {250pt}{\l_@@_submit_date_tl}\\
+    \@@_cover_box:n {鎻怽hfill 浜hfill 鏃hfill 鏈焳
+    & \@@_cover_uline_a:n  {\l_@@_submit_date_tl}\\
   \end{tabular}
 }
 %    \end{macrocode}
@@ -1702,27 +1772,15 @@ through XeTeX.
 \tl_set:Nn \nju_printcoverinfo_g 
 {
   \begin{tabular}{p{6em}c}    
-    \nju_coverbox_g:n {璁篭hfill 鏂嘰hfill 棰榎hfill 鐩畗
-    & \nju_cover_uline_g:n {\l_@@_info_title_a_tl} \\
-    % 鑷姩鍒ゆ柇鏍囬鎹㈣
-    \tl_if_empty:NTF \l__nju_info_title_b_tl {}
-    {
-      \tl_if_empty:NTF \l__nju_info_title_c_tl
-        { & \nju_cover_uline_g:n {\l_@@_info_title_b_tl} \\ }
-        {
-          & \nju_cover_uline_g:n {\l_@@_info_title_b_tl} \\
-          & \nju_cover_uline_g:n {\l_@@_info_title_c_tl} \\
-        }
-    }
-
-    \nju_coverbox_g:n {浣淺hfill 鑰匼hfill 濮揬hfill 鍚峿
-    & \nju_cover_uline_g:n {\l_@@_info_author_tl}\\
-    \nju_coverbox_g:n {涓揬hfill 涓歕hfill 鍚峔hfill 绉皚
-    & \nju_cover_uline_g:n {\l_@@_major_tl}\\
-    \nju_coverbox_g:n {鐮擻hfill 绌禱hfill 鏂筡hfill 鍚憓
-    & \nju_cover_uline_g:n {\l_@@_field_tl}\\
-    \nju_coverbox_g:n {鎸嘰hfill 瀵糪hfill 鏁橽hfill 甯坿
-    & \nju_cover_uline_g:n {\nju_supervisor_full}\\
+    \@@_cover_title_breakline:
+    \@@_cover_box:n {浣淺hfill 鑰匼hfill 濮揬hfill 鍚峿
+    & \@@_cover_uline_a:n  {\l_@@_info_author_tl}\\
+    \@@_cover_box:n {涓揬hfill 涓歕hfill 鍚峔hfill 绉皚
+    & \@@_cover_uline_a:n  {\l_@@_major_tl}\\
+    \@@_cover_box:n {鐮擻hfill 绌禱hfill 鏂筡hfill 鍚憓
+    & \@@_cover_uline_a:n  {\l_@@_field_tl}\\
+    \@@_cover_box:n {鎸嘰hfill 瀵糪hfill 鏁橽hfill 甯坿
+    & \@@_cover_uline_a:n  {\l_@@_info_supv_full_tl}\\
   \end{tabular}
 }
 %    \end{macrocode}
@@ -1750,13 +1808,13 @@ through XeTeX.
       \vskip -20mm \hskip -15mm
       \songti\zihao{-4}
       \makebox[40pt][l]{鍒嗙被鍙穧
-      \nju_cover_uline_nl:nn {150pt}{\l_@@_info_classif_tl}
+      \@@_cover_uline_b:n {\l_@@_info_classif_tl}
       \hfill
       \makebox[40pt][l]{瀵嗙骇}
-      \nju_cover_uline_nl:nn {150pt}{\l_@@_info_seclv_tl}
+      \@@_cover_uline_b:n {\l_@@_info_seclv_tl}
       \vskip 10pt \hskip -15mm
       \makebox[40pt][l]{UDC}
-      \nju_cover_uline_nl:nn {150pt}{\l_@@_info_udc_tl}
+      \@@_cover_uline_b:n {\l_@@_info_udc_tl}
     }
   
     % 涓儴
@@ -1767,9 +1825,9 @@ through XeTeX.
       {
         \kaishu\zihao{1}
         \vskip \stretch{1}
-        \nju_cover_uline_nl:nn {14em}{\l_@@_info_title_a_tl}\\
-        \nju_cover_uline_nl:nn {14em}{\l_@@_info_title_b_tl}\\
-        \nju_cover_uline_nl:nn {14em}{\l_@@_info_title_c_tl}\\
+        \@@_cover_uline_b:n {\l_@@_info_title_a_tl}\\
+        \@@_cover_uline_b:n {\l_@@_info_title_b_tl}\\
+        \@@_cover_uline_b:n {\l_@@_info_title_c_tl}\\
       }
       \vskip \stretch{1}
       {\kaishu\zihao{4}锛堥鍚嶅拰鍓鍚嶏級}
@@ -1784,25 +1842,25 @@ through XeTeX.
     {
       \kaishu\zihao{4}
       \noindent 鎸囧鏁欏笀濮撳悕銆佽亴鍔°€佽亴绉般€佸浣嶃€佸崟浣嶅悕绉板強鍦板潃%
-      \nju_cover_uline_nl:nn {94pt}{\l_@@_info_supv_a_tl}\par
-      \noindent\nju_cover_uline_nl:nn {\textwidth}{%
+      \@@_cover_uline_nl:nn {94pt}{\l_@@_info_supv_a_tl}\par
+      \noindent\@@_cover_uline_nl:nn {\textwidth}{%
       \l_@@_info_supv_cont_tl}\par
       \noindent 鐢宠瀛︿綅绾у埆%
-      \nju_cover_uline_nl:nn {9em}{\nju_degree_title}%
+      \@@_cover_uline_nl:nn {9em}{\c_@@_name_degree_tl}%
       \noindent 涓撲笟鍚嶇О%
       \uline{\hfill\l_@@_major_tl\hfill}\par% 闇€瑕佽皟鏁翠笅鍒掔嚎闀垮害
       \noindent 璁烘枃鎻愪氦鏃ユ湡%
-      \nju_cover_uline_nl:nn {9em}{\l_@@_submit_date_tl}%
+      \@@_cover_uline_nl:nn {9em}{\l_@@_submit_date_tl}%
       璁烘枃绛旇京鏃ユ湡%
       \uline{\hfill\l_@@_defend_date_tl\hfill}\par% 闇€瑕佽皟鏁翠笅鍒掔嚎闀垮害
       \noindent 瀛︿綅鎺堜簣鍗曚綅鍜屾棩鏈焅uline{\hfill}\par
       \noindent\hfill 绛旇京濮斿憳浼氫富甯細%
-      \nju_cover_uline_nl:nn {9em}{\l_@@_info_chairman_tl}\par
+      \@@_cover_uline_nl:nn {9em}{\l_@@_info_chairman_tl}\par
       \noindent\hfill 璇勯槄浜猴細%
-      \nju_cover_uline_nl:nn {9em}{\l_@@_info_reviewer_a_tl}\par
-      \noindent\hfill\nju_cover_uline_nl:nn {9em}{\l_@@_info_reviewer_b_tl}\par
-      \noindent\hfill\nju_cover_uline_nl:nn {9em}{\l_@@_info_reviewer_c_tl}\par
-      \noindent\hfill\nju_cover_uline_nl:nn {9em}{\l_@@_info_reviewer_d_tl}\par
+      \@@_cover_uline_nl:nn {9em}{\l_@@_info_reviewer_a_tl}\par
+      \noindent\hfill\@@_cover_uline_nl:nn {9em}{\l_@@_info_reviewer_b_tl}\par
+      \noindent\hfill\@@_cover_uline_nl:nn {9em}{\l_@@_info_reviewer_c_tl}\par
+      \noindent\hfill\@@_cover_uline_nl:nn {9em}{\l_@@_info_reviewer_d_tl}\par
       
       \begin{center}
         \kaishu\zihao{3}\hspace{2em} 骞碶hspace{1em} 鏈圽hspace{1em} 鏃�
@@ -1866,7 +1924,7 @@ through XeTeX.
     \vskip 15mm 
     {\zihao{1}\makebox[10em][s]{\bf{\kaishu\nju_type_name}}}
     \vskip 5mm
-    {\zihao{1}\bf{\kaishu{锛堢敵璇穃nju_degree_title 瀛︿綅锛墋}}
+    {\zihao{1}\bf{\kaishu{锛堢敵璇穃c_@@_name_degree_tl 瀛︿綅锛墋}}
     \par\vfill
     \vskip\stretch{0}
     {\bgroup
@@ -1946,7 +2004,7 @@ through XeTeX.
       闄㈢郴锛� \l_@@_info_dept_tl \\
       涓撲笟锛� \l_@@_major_tl \\
       鏈鐢熷鍚嶏細 \l_@@_info_author_tl \\
-      鎸囧鏁欏笀锛堝鍚嶃€佽亴绉帮級锛歕nju_supervisor_full \\
+      鎸囧鏁欏笀锛堝鍚嶃€佽亴绉帮級锛歕l_@@_info_supv_full_tl \\
       鎽樿锛�
       \egroup
     }
@@ -1977,7 +2035,7 @@ through XeTeX.
       DEPARTMENT: ~~\l_@@_info_dept_en_tl \\
       SPECIALIZATION: ~~\l_@@_major_en_tl \\
       UNDERGRADUATE:~~\l_@@_info_author_en_tl \\
-      MENTOR:~~\nju_supervisor_full_en \\
+      MENTOR:~~\l_@@_info_supv_full_tl_en \\
       ABSTRACT:
       \egroup
     }
@@ -2016,10 +2074,11 @@ through XeTeX.
     \tl_set:Nn \arraystretch {0.8}
     \noindent
     姣曚笟璁烘枃棰樼洰锛歕hspace{0.5em}\nju_underline:n {\l_@@_info_title_tl\hfill}\\    
-    \uline{\makebox[9em]{\l_@@_major_tl}}涓撲笟\uline{\makebox[4em]{\l_@@_info_grade_tl}}绾�
+    \uline{\makebox[9em]{\l_@@_major_tl}}涓撲笟
+    \uline{\makebox[4em]{\l_@@_info_grade_tl}}绾�
     \str_if_eq:NNTF {\nju_degree} { phd } {鍗殅{纭晑
     澹敓濮撳悕锛歕uline{\hfill\l_@@_info_author_tl\hfill} \\
-    鎸囧鏁欏笀锛堝鍚嶃€佽亴绉帮級锛歕uline{\hfill\nju_supervisor_full\hfill}\par
+    鎸囧鏁欏笀锛堝鍚嶃€佽亴绉帮級锛歕uline{\hfill\l_@@_info_supv_full_tl\hfill}\par
     \egroup
   
     \kaishu\zihao{4}\par%
@@ -2049,7 +2108,7 @@ through XeTeX.
       THESIS: ~~\l_@@_info_title_en_tl \\
       SPECIALIZATION: ~~\l_@@_major_en_tl \\
       POSTGRADUATE:~~\l_@@_info_author_en_tl \\
-      MENTOR:~~\nju_supervisor_full_en\par
+      MENTOR:~~\l_@@_info_supv_full_tl_en\par
       \egroup
     }
     \zihao{4}\par%