diff options
Diffstat (limited to 'Master/texmf-dist/tex/latex/njuthesis/njuthesis.cls')
-rw-r--r-- | Master/texmf-dist/tex/latex/njuthesis/njuthesis.cls | 370 |
1 files changed, 198 insertions, 172 deletions
diff --git a/Master/texmf-dist/tex/latex/njuthesis/njuthesis.cls b/Master/texmf-dist/tex/latex/njuthesis/njuthesis.cls index 496d6753cba..2cbeec2104d 100644 --- a/Master/texmf-dist/tex/latex/njuthesis/njuthesis.cls +++ b/Master/texmf-dist/tex/latex/njuthesis/njuthesis.cls @@ -24,18 +24,11 @@ %% `.dtx' through XeTeX. %% \NeedsTeXFormat{LaTeX2e} -\GetIdInfo $Id: njuthesis.dtx 1.2.1 2023-05-03 13:30:00 +\GetIdInfo $Id: njuthesis.dtx 1.3.0 2023-06-06 11:30:00 +0800 NJU LUG <git+nju-lug-email-3104-issue-@yaoge123.cn>$ {Thesis template for Nanjing University} \ProvidesExplClass{njuthesis} {\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription} - % \begin{syntax} - % \OPT{degree} = \Arg{中文学位名} - % \OPT{degree*} = \Arg{英文学位名} - % \end{syntax} - % 研究生国家图书馆封面英文封面上的学位名称。默认会由模板通过 \opt{degree} - % 和 \opt{type} 文档类选项生成,也可以由本选项自定义名称。 - % \end{function} \RequirePackage { xtemplate, l3keys2e } \msg_new:nnn { njuthesis } { l3-too-old } @@ -86,7 +79,7 @@ \tl_new:N \g__nju_font_path_tl \bool_new:N \g__nju_font_path_bool \tl_new:N \g__nju_config_tl -\tl_const:Nx \c__nju_today_tl +\tl_const:Nx \c__nju_name_today_tl { \int_to_arabic:n { \c_sys_year_int } - \int_to_arabic:n { \c_sys_month_int } - @@ -121,66 +114,67 @@ \skip_vertical:N \c_zero_dim } \cs_new_protected:Npn \__nju_define_name:nn #1#2 - { \tl_const:cn { c__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_const:cn { c__nju_name_ #1 _tl } { #2 } - \tl_const:cn { c__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_const:cn { c__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_const:cn { c__nju_ #1 _dim } { #2 } } + { \dim_const:cn { c__nju_ #1 _dim } {#2} } \cs_new_protected:Npn \__nju_define_skip:nn #1#2 - { \skip_const:cn { c__nju_ #1 _skip } { #2 } } + { \skip_const:cn { c__nju_ #1 _skip } {#2} } \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:Npn \__nju_fmt:n #1 { \tl_use:c { c__nju_fmt_ #1 _tl } } \cs_new:Npn \__nju_name:nn #1#2 { \group_begin: \__nju_fmt:n {#1} \__nju_name:n {#2} \group_end: } \cs_new:Npn \__nju_fontsize:nn #1#2 - { \fontsize { #1 } { #2 } \selectfont } + { \fontsize {#1} {#2} \selectfont } \cs_new:Npn \__nju_fontsize:nnn #1#2#3 - { \__nju_fontsize:nn { #1 } { \fp_to_decimal:n { #3 * #1 } } } + { \__nju_fontsize:nn {#1} { \fp_to_decimal:n { #3 * #1 } } } \cs_new:Npn \__nju_zihao:nn #1#2 { - \prop_get:NnNTF \c__ctex_font_size_prop { #2 } \l__ctex_font_size_tl - { \exp_after:wN \__nju_fontsize:nnn \l__ctex_font_size_tl { #1 } } - { \msg_error:nnn { ctex } { fontsize } { #2 } } + \prop_get:NnNTF \c__ctex_font_size_prop {#2} \l__ctex_font_size_tl + { \exp_after:wN \__nju_fontsize:nnn \l__ctex_font_size_tl {#1} } + { \msg_error:nnn { ctex } { fontsize } {#2} } } \cs_new:Npn \__nju_zihao:n { \__nju_zihao:nn { 1.3 } } \cs_generate_variant:Nn \cs_new:Npn { Npo } \cs_new:Npo \__nju_set_ccglue:n #1 { \sys_if_engine_xetex:TF - { \skip_set:Nn \l__ctex_ccglue_skip { #1 } } - { \ltjsetparameter { kanjiskip = { #1 } } } + { \skip_set:Nn \l__ctex_ccglue_skip {#1} } + { \ltjsetparameter { kanjiskip = {#1} } } } \cs_new_protected:Npn \__nju_box_ulined:NN #1#2 { \mode_leave_vertical: - \rule [ \c__nju_ruledpi_dim ] { #1 } { \c__nju_rulehti_dim } + \rule [ \c__nju_ruledpi_dim ] {#1} { \c__nju_rulehti_dim } \skip_horizontal:n { -#1 } - \hbox_to_wd:nn { #1 } { \tex_hfil:D #2 \tex_hfil:D } + \hbox_to_wd:nn {#1} { \tex_hfil:D #2 \tex_hfil:D } } \cs_generate_variant:Nn \__nju_box_ulined:NN { Nc } \cs_new_protected:Npn \__nju_box_ulined_info:Nn #1#2 { \__nju_box_ulined:Nc #1 { g__nju_info_ #2 _tl } } -\cs_new_protected:Npn \__nju_box_spread:NNn #1#2#3 +\cs_new_protected:Npn \__nju_box_spread:NNNn #1#2#3#4 { \mode_leave_vertical: - \__nju_get_width:Nn \l__nju_tmp_skip { #2 #3 } - \hbox_to_wd:nn { #1 } + \__nju_get_width:Nn #1 { #3 #4 } + \hbox_to_wd:nn {#2} { - \dim_compare:nTF { \l__nju_tmp_skip > #1 } + \dim_compare:nTF { #1 > #2 } { \tex_hfil:D \scalebox - { \dim_to_decimal_in_unit:nn { #1 } { \l__nju_tmp_skip } } - [ 1.0 ] { #2 #3 } \tex_hfil:D + { \dim_to_decimal_in_unit:nn {#2} {#1} } + [ 1.0 ] { #3 #4 } \tex_hfil:D } - { #2 \tl_map_inline:nn { #3 } { ##1 \tex_hfil:D } \tex_unskip:D } + { #3 \tl_map_inline:nn {#4} { ##1 \tex_hfil:D } \tex_unskip:D } } } +\cs_new:Npn \__nju_box_spread:NNn { \__nju_box_spread:NNNn \l__nju_tmp_skip } \cs_generate_variant:Nn \__nju_box_spread:NNn { NNv } \cs_generate_variant:Nn \__nju_box_spread:NNn { NNx } \cs_new_protected:Npn \__nju_box_spread_name:Nn #1#2 @@ -192,30 +186,29 @@ \mode_leave_vertical: \hbox_to_wd:nn {#1} { \tex_hfil:D #2 \tex_hfil:D } } -\cs_new_protected:Npn \__nju_box_multiline:NNNn #1#2#3#4 +\cs_new_protected:Npn \__nju_box_multiline:NNNNn #1#2#3#4#5 { - \int_set:Nn #1 { \int_max:nn { \clist_count:N #2 } { #4 } } - \int_step_inline:nn { #1 } + \int_set:Nn #1 { \int_max:nn { \clist_count:N #3 } {#5} } + \int_step_inline:nn {#1} { - \clist_pop:NN #2 \l__nju_tmpa_tl - \quark_if_no_value:NT \l__nju_tmpa_tl - { \tl_set_eq:NN \l__nju_tmpa_tl \c_empty_tl } - \__nju_box_ulined:NN #3 \l__nju_tmpa_tl \tex_par:D + \clist_pop:NNF #3 #2 { \tl_set_eq:NN #2 \c_empty_tl } + \__nju_box_ulined:NN #4 #2 \tex_par:D } } -\cs_new:Npn \__nju_box_multiline:NNn { \__nju_box_multiline:NNNn \l__nju_tmpa_int } +\cs_new:Npn \__nju_box_multiline:NNn + { \__nju_box_multiline:NNNNn \l__nju_tmpa_int \l__nju_tmpa_tl } \cs_new_protected:Npn \__nju_uline:n #1 { \mode_leave_vertical: - \rule [ \c__nju_ruledpi_dim ] { #1 } { \c__nju_rulehti_dim } + \rule [ \c__nju_ruledpi_dim ] {#1} { \c__nju_rulehti_dim } \skip_horizontal:n { -#1 } } \cs_new_protected:Npn \__nju_uuline:N #1 { \mode_leave_vertical: - \rule [ \c__nju_ruledpii_dim ] { #1 } { \c__nju_rulehtii_dim } + \rule [ \c__nju_ruledpii_dim ] {#1} { \c__nju_rulehtii_dim } \skip_horizontal:n { -#1 } - \rule [ \c__nju_ruledpiii_dim ] { #1 } { \c__nju_rulehtii_dim } + \rule [ \c__nju_ruledpiii_dim ] {#1} { \c__nju_rulehtii_dim } \skip_horizontal:n { -#1 } } \cs_new:Npn \__nju_get_width:Nn #1#2 @@ -235,7 +228,7 @@ } \cs_new_protected:Npn \__nju_get_width_print:Nn #1#2 { - \__nju_get_width:Nn #1 { #2 } + \__nju_get_width:Nn #1 {#2} \dim_set:Nn #1 { \textwidth - #1 } #2 } \cs_generate_variant:Nn \__nju_get_width_print:Nn { Nv } @@ -243,37 +236,30 @@ \cs_new_protected:Npn \__nju_uline_entry:Nn #1#2 { \__nju_get_width_print:Nv #1 { c__nju_name_ #2 _tl } - \__nju_box_ulined_info:Nn #1 { #2 } + \__nju_box_ulined_info:Nn #1 {#2} } \cs_new_protected:Npn \__nju_uline_bientry:Nn #1#2 { \__nju_get_width_print:Nv #1 { c__nju_name_ #2 _tl } \dim_sub:Nn #1 { \textwidth / 2 } - \__nju_box_ulined_info:Nn #1 { #2 } + \__nju_box_ulined_info:Nn #1 {#2} } \cs_new:Npn \__nju_date:www #1-#2-#3 \q_stop - { \__zhnum_date_aux:nnn { #1 } { #2 } { #3 } } + { \__zhnum_date_aux:nnn {#1} {#2} {#3} } \cs_new:Npn \__nju_date_en:www #1-#2-#3 \q_stop - { \clist_item:Nn \c__nju_name_month_en_clist { #2 } ~#3 , ~#1 } -\cs_new_protected:Npn \__nju_date:n #1 { \__nju_date:nn { #1 } { } } -\cs_new_protected:Npn \__nju_date_en:n #1 { \__nju_date:nn { #1 } { _en } } -\cs_generate_variant:Nn \exp_last_unbraced:NV { cV } -\cs_new_protected:Npn \__nju_date:nn #1#2 - { - \tl_set:Nv \l__nju_tmpa_tl { g__nju_info_ #1 date_raw_tl } - \tl_new:c { g__nju_info_ #1 date #2 _tl } - \tl_set:cx { g__nju_info_ #1 date #2 _tl } - { - \tl_if_empty:NTF \l__nju_tmpa_tl - { \__nju_name:n { blankdate #2 } } - { - \exp_last_unbraced:cV { __nju_date #2 :www } - \l__nju_tmpa_tl \q_stop - } + { \clist_item:Nn \c__nju_name_month_en_clist {#2} ~#3 , ~#1 } +\cs_new:Npn \__nju_date:nn { \__nju_date:nnn { } } +\cs_new:Npn \__nju_date:nnn #1#2#3 + { + \tl_set:cx { g__nju_info_ #2 date #1 _tl } + { + \tl_if_empty:nTF {#3} + { \__nju_name:n { blankdate #1 } } + { \use:c { __nju_date #1 :www } #3 \q_stop } } } \cs_new_protected:Npn \__nju_at_begin_document:n #1 - { \hook_gput_next_code:nn { begin document } { #1 } } + { \hook_gput_next_code:nn { begin document } {#1} } \cs_new:Npn \__nju_cs_clear:N #1 { \cs_set_eq:NN #1 \tex_relax:D } \cs_new:Npn \__nju_msg:nn { \msg_new:nnn { njuthesis } } \cs_new:Npn \__nju_loop_until:nnn #1#2#3 @@ -329,7 +315,7 @@ { \msg_error:nn { njuthesis } { missing-title } } \__nju_box_spread_name:NNn #2 #4 { title } \mode_leave_vertical: #1 - \parbox [ t ] { #3 } + \parbox [ t ] {#3} { \c__nju_fmt_covertitle_tl \__nju_uline_title: \dim_gset_eq:NN \l__nju_tmpa_dim \tex_prevdepth:D @@ -340,16 +326,16 @@ \cs_new:Npn \__nju_cover_entry_title:NNN { \__nju_cover_entry_title:NNNN \__nju_hskip: } \cs_new_protected:Npn \__nju_cover_entry:NNNNn #1#2#3#4#5 { - \__nju_box_spread_name:NNn #2 #4 { #5 } #1 - \__nju_box_ulined_info:Nn #3 { #5 } \tex_par:D + \__nju_box_spread_name:NNn #2 #4 {#5} #1 + \__nju_box_ulined_info:Nn #3 {#5} \tex_par:D } \cs_new:Npn \__nju_cover_entry:NNNn { \__nju_cover_entry:NNNNn \__nju_hskip: } \cs_new_protected:Npn \__nju_cover_entry:NNNnn #1#2#3#4#5 { - \__nju_box_spread_name:NNn #1 #3 { #4 } \__nju_hskip: - \__nju_box_ulined_info:Nn #2 { #4 } \__nju_hskip: - \__nju_box_spread_name:NNn #1 #3 { #5 } \__nju_hskip: - \__nju_box_ulined_info:Nn #2 { #5 } \tex_par:D + \__nju_box_spread_name:NNn #1 #3 {#4} \__nju_hskip: + \__nju_box_ulined_info:Nn #2 {#4} \__nju_hskip: + \__nju_box_spread_name:NNn #1 #3 {#5} \__nju_hskip: + \__nju_box_ulined_info:Nn #2 {#5} \tex_par:D } \cs_new_protected:Npn \__nju_cover_entry_supv:NNNn #1#2#3#4 { @@ -357,20 +343,20 @@ { \clist_item:cn { g__nju_info_ #4 _clist } { 1 } } \tl_set:Nn \l__nju_tmpb_tl { \clist_item:cn { g__nju_info_ #4 _clist } { 2 } } - \__nju_box_spread_name:NNn #1 #3 { #4 } \__nju_hskip: + \__nju_box_spread_name:NNn #1 #3 {#4} \__nju_hskip: \__nju_box_ulined:NN #2 \l__nju_tmpa_tl \__nju_hskip: \__nju_box_spread_name:NNn #1 #3 { supvtitle } \__nju_hskip: \__nju_box_ulined:NN #2 \l__nju_tmpb_tl \tex_par:D } \cs_new_protected:Npn \__nju_emblem:N #1 - { \njuemblem [ \c__nju_fmt_emblemcolor_tl ] { #1 } { ! } } + { \njuemblem [ \c__nju_fmt_emblemcolor_tl ] {#1} { ! } } \cs_new_protected:Npn \__nju_name:N #1 - { \njuname [ \c__nju_fmt_namecolor_tl ] { #1 } { ! } } + { \njuname [ \c__nju_fmt_namecolor_tl ] {#1} { ! } } \cs_new_protected:Npn \__nju_abs_bookmark:nn #1#2 { \phantomsection \__nju_bookmark:Nnn \g__nju_abs_showentry_bool {#1} {#2} - \__nju_chapter_header:n { #1 } + \__nju_chapter_header:n {#1} } \cs_generate_variant:Nn \__nju_abs_bookmark:nn { Vn } \cs_new_protected:Npn \__nju_abs_title:N #1 @@ -382,7 +368,7 @@ { \vbox_set:Nn \l__nju_tmpa_box { - \__nju_get_width:Nn \tex_hangindent:D { #3 } + \__nju_get_width:Nn \tex_hangindent:D {#3} \int_set:Nn \tex_hangafter:D { -1 } \skip_set_eq:NN \tex_leftskip:D #2 \skip_set_eq:NN \tex_rightskip:D \tex_leftskip:D @@ -390,7 +376,7 @@ \int_gzero:N \l__nju_tmpa_int \__nju_breakpar_loop:n { \int_gincr:N \l__nju_tmpa_int } } - \__nju_breakpar_print:nn { #3 } + \__nju_breakpar_print:nn {#3} { \bool_if:NT \g__nju_abs_title_strict_bool { @@ -513,6 +499,13 @@ requires~ loading~ the~ class~ with~ "ntheorem"~ option~ set~ to~ "true". } +\__nju_msg:nn { missing-symbol } + { + \string\mdwhtsquare\ and~ \string\checkmark\ are~ not~ + contained~ in~ the~ standard~ amsmath~ package.~ You~ + should~ redefine~ them~ with~ other~ packages~ loaded~ + to~ properly~ generate~ the~ declaration~ page. + } \__nju_msg:nn { missing-title } { Thesis~ title~ should~ not~ be~ left~ blank.\\ @@ -605,7 +598,7 @@ \cs_new_protected:cpn { __nju_loadpkg_ #2 : } { \bool_if:cT { g__nju_opt_load_ #2 _bool } - { \RequirePackage { #1 } } + { \RequirePackage {#1} } } \clist_put_right:Nn \g__nju_name_optional_pkg_clist {#1} } @@ -650,22 +643,22 @@ { \cs_new_eq:NN \__nju_keys_set:nn \keys_set:nn } \NewDocumentCommand \njusetup { o m } { - \tl_if_novalue:nTF { #1 } - { \__nju_keys_set:nn { nju } { #2 } } + \tl_if_novalue:nTF {#1} + { \__nju_keys_set:nn { nju } {#2} } { - \tl_if_in:nnTF { #1 } { / } + \tl_if_in:nnTF {#1} { / } { \__nju_keys_set:nn { nju } { #1 = {#2} } } { \__nju_keys_set:nn { nju / #1 } {#2} } } } \@onlypreamble \njusetup \NewDocumentCommand \njusetformat { m m } - { \tl_gset:cn { c__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 { c__nju_ #2 _skip } { #3 } } - { \dim_gset:cn { c__nju_ #2 _dim } { #3 } } + \bool_if:nTF {#1} + { \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 } } @@ -673,7 +666,7 @@ { \__nju_set_tokenlist:nnnnn {#1} {#2} {#3} {#4} { text } } \cs_new_protected:Npn \__nju_set_tokenlist:nnnnn #1#2#3#4#5 { - \bool_if:nTF { #1 } + \bool_if:nTF {#1} { \tl_set_eq:NN \l__nju_tmpb_tl \c__nju_name_suffix_en_tl } { \tl_clear:N \l__nju_tmpb_tl } \tl_gset:cn { c__nju_ #5 _ #2 #3 \l__nju_tmpb_tl _tl } {#4} @@ -703,7 +696,15 @@ \__nju_loadpkg_fm: \bool_if:NTF \g__nju_opt_load_um_bool { \RequirePackage { unicode-math } } - { \RequirePackage { amsmath } } + { + \RequirePackage { amsmath } + \bool_if:NT \g__nju_opt_decl_bool + { + \msg_warning:nn { njuthesis } { missing-symbol } + \cs_new:Npn \mdwhtsquare { } + \cs_new:Npn \checkmark { } + } + } \RequirePackage { geometry, @@ -731,16 +732,16 @@ \RequirePackage { lua-ul } \NewDocumentCommand \njuline { m } { \underLine{#1} \__nju_null: } } -\cs_new_protected:Npn \__nju_check_pkg_version:nnn #1#2#3 +\cs_new: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_pkg_version:nnn { luatexja } { 2021/10/24 } { 20211024.0 } } -\cs_new_protected:Npn \__nju_check_pkg_conflict:nn #1#2 +\cs_new:Npn \__nju_check_pkg_conflict:nn #1#2 { - \ctex_at_begin_package:nn { #2 } + \ctex_at_begin_package:nn {#2} { \msg_warning:nnnn { njuthesis } { package-conflict } {#1} {#2} } } \bool_if:NT \g__nju_opt_load_um_bool @@ -750,7 +751,7 @@ amscd, amsfonts, amssymb, bbm, bm, eucal, eufrak, mathrsfs, newtxmath, upgreek } - { \__nju_check_pkg_conflict:nn { unicode-math } { #1 } } + { \__nju_check_pkg_conflict:nn { unicode-math } {#1} } } \exp_args:Nx \file_input:n { @@ -766,8 +767,8 @@ } \clist_map_inline:Nn \g__nju_config_clist { - \msg_info:nnn { njuthesis } { load-config } { #1 } - \file_input:n { #1 } + \msg_info:nnn { njuthesis } { load-config } {#1} + \file_input:n {#1} } \keys_define:nn { nju / info } { @@ -783,22 +784,22 @@ author* .tl_set:N = \g__nju_info_author_en_tl , department .tl_set:N = \g__nju_info_dept_tl , department* .tl_set:N = \g__nju_info_dept_en_tl , - major .tl_set:N = \g__nju_info_major_tl , major* .tl_set:N = \g__nju_info_major_en_tl , field .tl_set:N = \g__nju_info_field_tl , field* .tl_set:N = \g__nju_info_field_en_tl , + major .code:n = + { + \clist_pop:NN \l_keys_value_tl \g__nju_info_major_tl + \clist_pop:NNF \l_keys_value_tl \g__nju_info_majorc_tl + { + \tl_set:Nn \g__nju_info_majorc_tl + { 工程 \g__nju_info_type_tl( \g__nju_info_major_tl ) } + } + }, supervisor .clist_set:N = \g__nju_info_supv_clist , supervisor* .tl_set:N = \g__nju_info_supv_en_tl , supervisor-ii .clist_set:N = \g__nju_info_supvii_clist , supervisor-ii* .tl_set:N = \g__nju_info_supvii_en_tl , - submit-date .tl_set:N = \g__nju_info_submitdate_raw_tl , - submit-date .initial:V = \c__nju_today_tl , - defend-date .tl_set:N = \g__nju_info_defenddate_raw_tl , - defend-date .initial:V = \c__nju_today_tl , - confer-date .tl_set:N = \g__nju_info_conferdate_raw_tl , - confer-date .initial:V = \c__nju_today_tl , - bottom-date .tl_set:N = \g__nju_info_bottomdate_raw_tl , - bottom-date .initial:V = \c__nju_today_tl , chairman .tl_set:N = \g__nju_info_chairman_tl , reviewer .clist_set:N = \g__nju_info_reviewer_clist , clc .tl_set:N = \g__nju_info_clc_tl , @@ -809,7 +810,15 @@ school-code .tl_set:N = \g__nju_info_code_tl , school-code .initial:n = { 10284 } , degree .tl_set:N = \g__nju_info_degree_tl , - degree* .tl_set:N = \g__nju_info_degree_en_tl + degree* .tl_set:N = \g__nju_info_degree_en_tl , + } +\clist_map_inline:nn { submit, defend, confer, bottom } + { + \keys_define:nn { nju / info } + { + #1-date .code:n = \__nju_date:nn {#1} {##1}, + #1-date .initial:V = \c__nju_name_today_tl + } } \clist_map_inline:Nn \c__nju_name_anon_clist { \keys_define:nn { nju / info } { #1 .groups:n = { anonymous } } } @@ -846,7 +855,7 @@ { \__fontspec_main_setmainfont:nn { } { Times~New~Roman } \__fontspec_main_setsansfont:nn { } { Arial } - \__fontspec_main_setmonofont:nn { Scale = MatchLowercase } { #1 } + \__fontspec_main_setmonofont:nn { Scale = MatchLowercase } {#1} } \cs_new_protected:Npn \__nju_loadfont_latin_win: { \__nju_loadfont_latin:n { Courier~New } } @@ -882,19 +891,20 @@ ItalicFont = *-italic, BoldItalicFont = *-bolditalic } -\cs_new_protected:Npn \__nju_hide_no_script_msg: +\cs_new:Npn \__nju_hide_no_script_msg: { \msg_redirect_name:nnn { fontspec } { no-script } { info } } -\cs_new_protected:Npn \__nju_loadfont_cjk_win: - { - \setCJKmainfont { SimSun } - [ \c__nju_name_fakebold_tl, ItalicFont = KaiTi ] - \setCJKsansfont { SimHei } [ \c__nju_name_fakebold_tl ] - \setCJKmonofont { FangSong } [ \c__nju_name_fakebold_tl ] - \setCJKfamilyfont { zhsong } { SimSun } [ \c__nju_name_fakebold_tl ] - \setCJKfamilyfont { zhhei } { SimHei } [ \c__nju_name_fakebold_tl ] - \setCJKfamilyfont { zhfs } { FangSong } [ \c__nju_name_fakebold_tl ] - \setCJKfamilyfont { zhkai } { KaiTi } [ \c__nju_name_fakebold_tl ] - } +\cs_new:Npn \__nju_loadfont_cjk_win:N #1 + { + \setCJKmainfont { SimSun } [ #1, ItalicFont = KaiTi ] + \setCJKsansfont { SimHei } [#1] + \setCJKmonofont { FangSong } [#1] + \setCJKfamilyfont { zhsong } { SimSun } [#1] + \setCJKfamilyfont { zhhei } { SimHei } [#1] + \setCJKfamilyfont { zhfs } { FangSong } [#1] + \setCJKfamilyfont { zhkai } { KaiTi } [#1] + } +\cs_new:Npn \__nju_loadfont_cjk_win: + { \__nju_loadfont_cjk_win:N \c__nju_name_fakebold_tl } \cs_new_protected:Npn \__nju_loadfont_cjk_mac: { \__nju_hide_no_script_msg: @@ -945,9 +955,9 @@ \cs_new_protected:Npn \__nju_loadfont_cjk_founder: { \sys_if_engine_xetex:T - { \xeCJKEditPunctStyle {quanjiao} { optimize-kerning = true } } + { \xeCJKEditPunctStyle { quanjiao } { optimize-kerning = true } } \sys_if_engine_luatex:T - { \defaultCJKfontfeatures { JFM = { zh_CN/{quanjiao,fzpr} } } } + { \defaultCJKfontfeatures { JFM = { zh_CN / { quanjiao, fzpr } } } } \setCJKmainfont { FZShuSong-Z01 } [ BoldFont = FZXiaoBiaoSong-B05, ItalicFont = FZKai-Z03 ] \setCJKsansfont { FZXiHeiI-Z08 } [ BoldFont = FZHei-B01 ] @@ -998,7 +1008,7 @@ ItalicFeatures = FakeSlant, BoldItalicFeatures = FakeSlant } -\cs_new_protected:Npn \__nju_loadfont_stzhongs: +\cs_new:Npn \__nju_loadfont_stzhongs: { \fontspec_font_if_exist:nTF { 华文中宋 } { @@ -1013,7 +1023,7 @@ \cs_new:Npn \__nju_define_math_font:nn #1#2 { \cs_new:cpn { __nju_loadfont_math_ #1 : } - { \__um_setmathfont:nn { } { #2 } } + { \__um_setmathfont:nn { } {#2} } } \clist_map_inline:nn { @@ -1204,20 +1214,20 @@ \cs_new:Npn \__nju_bookmark_toc:nn #1#2 { \phantomsection \__nju_bookmark_toc:n {#1} } \cs_new:Npn \__nju_bookmark_pdf_nosec:nn #1#2 - { \pdfbookmark [0] { #1 } { #2 } } + { \pdfbookmark [0] {#1} {#2} } \cs_new:Npn \__nju_bookmark_pdf:nn #1#2 { \phantomsection \__nju_bookmark_pdf_nosec:nn {#1} {#2} } \cs_new:Npn \__nju_bookmark:Nnn #1#2#3 { \bool_if:NTF #1 - { \__nju_bookmark_toc:n { #2 } } - { \__nju_bookmark_pdf_nosec:nn { #2 } { #3 } } + { \__nju_bookmark_toc:n {#2} } + { \__nju_bookmark_pdf_nosec:nn {#2} {#3} } } \cs_new:Npn \__nju_chapter:Nnn #1#2#3 { - \chapter * { #2 } - \__nju_bookmark:Nnn #1 { #2 } { #3 } - \__nju_chapter_header:n { #2 } + \chapter * {#2} + \__nju_bookmark:Nnn #1 {#2} {#3} + \__nju_chapter_header:n {#2} } \cs_new:Npn \__nju_chapter:n #1 { \__nju_chapter:Nnn \c_true_bool {#1} { } } @@ -1226,10 +1236,10 @@ \cs_new_protected:Npn \__nju_chapter_header:n #1 { \bool_if:NTF \g__nju_opt_twoside_bool - { \markboth { #1 } { #1 } } + { \markboth {#1} {#1} } { \markboth { \hfill #1 \hfill } { } } } -\NewDocumentCommand \njuchapter { m } { \__nju_chapter:n { #1 } } +\NewDocumentCommand \njuchapter { m } { \__nju_chapter:n {#1} } \keys_set:nn { ctex } { chapter / beforeskip = \c__nju_chapterbefore_dim, @@ -1252,7 +1262,7 @@ { chapter/format = \c__nju_fmt_toctitle_tl } \__nju_chapter:cnn { g__nju_ #2 _showentry_bool } {#1} {#2} \group_end: - \@starttoc { #2 } + \@starttoc {#2} } \cs_generate_variant:Nn \__nju_make_toc:nn { vn } \cs_new_protected:Npn \__nju_define_toc_cmd:nnn #1#2#3 @@ -1262,8 +1272,8 @@ toc-entry .bool_set:c = { g__nju_ #3 _showentry_bool }, toc-entry .initial:n = true } - \exp_args:Nc \RenewDocumentCommand { #1 } { } - { \__nju_make_toc:vn { #2 name } { #3 } } + \exp_args:Nc \RenewDocumentCommand {#1} { } + { \__nju_make_toc:vn { #2 name } {#3} } } \clist_map_inline:nn { @@ -1322,7 +1332,7 @@ \bool_if:NT \g__nju_opt_load_blx_bool { \NewDocumentCommand \addbibresource { m } - { \clist_gput_right:Nn \g__nju_blx_resource_clist { #1 } } + { \clist_gput_right:Nn \g__nju_blx_resource_clist {#1} } } \cs_new_protected:Npn \__nju_blx_pre_setup: { @@ -1368,7 +1378,7 @@ pdfcreator = \c__nju_name_pdfcreator_tl } } -\cs_new_protected:Npn \__nju_cref_name:n #1 +\cs_new:Npn \__nju_cref_name:n #1 { \crefname {#1} { \__nju_name:n {#1} } { \__nju_name:n {#1} } } \bool_if:NT \g__nju_opt_load_cref_bool { @@ -1379,7 +1389,7 @@ \crefformat { subsection } { 第~#2#1#3~小节 } \crefformat { subsubsection } { 第~#2#1#3~小节 } \clist_map_inline:nn { figure, table, appendix, proof } - { \__nju_cref_name:n { #1 } } + { \__nju_cref_name:n {#1} } } \clist_set:Nn \g__nju_fn_ctext_option_clist { charf = \scriptsize } \keys_define:nn { nju / footnote } @@ -1428,7 +1438,7 @@ { \group_begin: \bool_set_eq:NN \l__circledtext_negative_bool #1 - \__circledtext_handle:Vn \g__nju_fn_ctext_option_clist { #2 } + \__circledtext_handle:Vn \g__nju_fn_ctext_option_clist {#2} \group_end: } \cs_generate_variant:Nn \__nju_fn_number_circled:Nn { NV } @@ -1492,6 +1502,7 @@ \bool_if:NTF \g__nju_opt_load_um_bool { \tl_const:Nn \c__nju_name_qed_tl { \ensuremath { \mdlgwhtsquare } } } { \tl_const:Nn \c__nju_name_qed_tl { \ensuremath { \rule {1ex} {1ex} } } } +\tl_new:N \l__nju_thm_share_tl \keys_define:nn { nju / theorem } { style .tl_set:N = \l__nju_thm_style_tl, @@ -1515,45 +1526,59 @@ { proof, *+ } { 证明 }, { theorem } { 定理 } }, + share-counter .bool_set:N = \l__nju_thm_share_bool, + share-counter .initial:n = false, define .value_forbidden:n = true, define .code:n = { \clist_if_empty:NT \g__nju_thm_type_clist { \msg_error:nn { njuthesis } { empty-theorem-type } } + \tl_clear:N \l__nju_thm_share_tl \clist_map_inline:Nn \g__nju_thm_type_clist - { \__nju_thm_define:nn ##1 } + { \__nju_thm_define:Nnn \l__nju_thm_share_tl ##1 } } } -\cs_new_protected:Npn \__nju_thm_define:nn #1#2 +\cs_new:Npn \__nju_thm_define:Nnn + { \__nju_thm_define:NNNNnn \l__nju_tmp_clist \l__nju_tmpa_tl \l__nju_tmpb_tl } +\cs_new:Npn \__nju_thm_define:NNNNnn #1#2#3#4#5#6 { \bool_if:NF \g__nju_opt_load_nthm_bool { \msg_error:nn { njuthesis } { missing-ntheorem } } \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 - \clist_set:Nn \l__nju_tmp_clist { #1 } - \clist_pop:NN \l__nju_tmp_clist \l__nju_tmpa_tl - \clist_pop:NN \l__nju_tmp_clist \l__nju_tmpb_tl - \tl_if_in:NnT \l__nju_tmpb_tl { + } + \clist_set:Nn #1 {#5} + \clist_pop:NN #1 #2 + \clist_pop:NN #1 #3 + \tl_if_in:NnT #3 { + } { \exp_args:NV \theoremsymbol \l__nju_thm_qed_symbol_tl } - \tl_if_in:NnTF \l__nju_tmpb_tl { * } - { \__nju_thm_new:VVn \l__nju_tmpa_tl \c_novalue_tl {#2} } - { \__nju_thm_new:VVn \l__nju_tmpa_tl \l__nju_thm_counter_tl {#2} } + \tl_if_in:NnTF #3 { * } + { \__nju_thm_new:VVVn #2 \c_novalue_tl #4 {#6} } + { \__nju_thm_new:VVVn #2 \l__nju_thm_counter_tl #4 {#6} } + \bool_if:NT \l__nju_thm_share_bool + { + \tl_gset_eq:NN #4 #2 + \bool_gset_false:N \l__nju_thm_share_bool + } \bool_if:NT \g__nju_opt_load_cref_bool - { \crefname { \l__nju_tmpa_tl } {#2} {#2} } + { \exp_args:NV \crefname #2 {#6} {#6} } \theoremsymbol { } } -\cs_new_protected:Npn \__nju_thm_new:nnn #1#2#3 +\cs_new_protected:Npn \__nju_thm_new:nnnn #1#2#3#4 { \group_begin: \cs_if_exist:cT { end #1 } { \cs_set_eq:NN \newtheorem \renewtheorem } \tl_if_novalue:nTF {#2} - { \newtheorem * {#1} {#3} } - { \newtheorem {#1} {#3} [#2] } + { \newtheorem * {#1} {#4} } + { + \tl_if_empty:nTF {#3} + { \newtheorem {#1} {#4} [#2] } + { \newtheorem {#1} [#3] {#4} } + } \group_end: } -\cs_generate_variant:Nn \__nju_thm_new:nnn { VVn } +\cs_generate_variant:Nn \__nju_thm_new:nnnn { VVVn } \bool_new:N \g__nju_opt_math_re_bool \bool_new:N \g__nju_opt_math_int_bool \bool_new:N \g__nju_opt_math_leq_bool @@ -1562,8 +1587,8 @@ { \tl_set_eq:NN \c__nju_name_integral_tl \l__um_nolimits_tl } { \tl_set_eq:NN \c__nju_name_integral_tl \c_empty_tl } \bool_if:NTF \g__nju_opt_load_um_bool - { \cs_new:Npn \__nju_um_setup:n #1 { \keys_set:nn { unicode-math } {#1} } } - { \cs_new:Npn \__nju_um_setup:n #1 { } } + { \cs_new:Npn \__nju_um_setup:n #1 { \keys_set:nn { unicode-math } {#1} } } + { \cs_new_eq:NN \__nju_um_setup:n \use_none:n } \keys_define:nn { nju / math } { integral .choice:, @@ -1657,28 +1682,31 @@ }, style .initial:n = GB } -\__nju_at_begin_document:n +\bool_if:NT \g__nju_opt_load_um_bool { - \use:c { __nju_loadfont_math_ \g__nju_font_math_tl : } - \bool_if:NT \g__nju_opt_math_leq_bool - { - \cs_set_eq:NN \le \leqslant - \cs_set_eq:NN \ge \geqslant - \cs_set_eq:NN \leq \leqslant - \cs_set_eq:NN \geq \geqslant - } - \bool_if:NT \g__nju_opt_math_re_bool + \__nju_at_begin_document:n { - \cs_set:Npn \Re { \operatorname { Re } } - \cs_set:Npn \Im { \operatorname { Im } } + \use:c { __nju_loadfont_math_ \g__nju_font_math_tl : } + \bool_if:NT \g__nju_opt_math_leq_bool + { + \cs_set_eq:NN \le \leqslant + \cs_set_eq:NN \ge \geqslant + \cs_set_eq:NN \leq \leqslant + \cs_set_eq:NN \geq \geqslant + } + \bool_if:NT \g__nju_opt_math_re_bool + { + \cs_set:Npn \Re { \operatorname { Re } } + \cs_set:Npn \Im { \operatorname { Im } } + } + \bool_if:NT \g__nju_opt_math_vec_bool + { \cs_set_eq:NN \vec \symbf } } - \bool_if:NT \g__nju_opt_math_vec_bool - { \cs_set_eq:NN \vec \symbf } } \cs_new_protected:Npn \__nju_new_img_cmd:nn #1#2 { \exp_args:Nc \NewDocumentCommand { nju #1 } { o m m } - { \includegraphics [ width = ##2, height = ##3 ] { #2 } } + { \includegraphics [ width = ##2, height = ##3 ] {#2} } } \keys_define:nn { nju / image } { @@ -1707,9 +1735,7 @@ \bool_if:NF \g__nju_opt_draft_bool { \pagenumbering { gobble } - \bool_if:NTF \g__nju_opt_nlcover_bool - { \__nju_make_cover_nl: } - { \__nju_make_cover: } + \__nju_make_cover: } \tl_remove_all:Nn \g__nju_info_title_tl { \\ } \bool_if:NF \g__nju_opt_draft_bool @@ -1741,7 +1767,7 @@ \advance \leftmargin \l__nju_tmpa_dim \__nju_cs_clear:N \makelabel } - \item \clist_use:cn { g__nju_info_keywords #1 _clist } { #2 } + \item \clist_use:cn { g__nju_info_keywords #1 _clist } {#2} \endlist } \skip_new:N \g__nju_abs_title_left_skip @@ -1810,7 +1836,7 @@ \RenewDocumentCommand \mkbibdateshort { m m m } { \textbf { \thefield { ##1 } } } \newrefsection - \nocite { #2 } + \nocite {#2} \printbibliography [ heading = subbibliography, title = #1 ] \endrefsection \group_end: @@ -1834,13 +1860,13 @@ \NewDocumentEnvironment { notation } { O { 10 em } O { 5 em } } { \__nju_chapter:V \c__nju_name_notation_tl - \__nju_make_notation:nn { #1 } { #2 } + \__nju_make_notation:nn {#1} {#2} } { \endlist \cleardoublepage } \NewDocumentEnvironment { notation* } { O { 10 em } O { 5 em } } { \chapter * { \c__nju_name_notation_tl } - \__nju_make_notation:nn { #1 } { #2 } + \__nju_make_notation:nn {#1} {#2} } { \endlist \cleardoublepage } \endinput |