Newer
Older
3001
3002
3003
3004
3005
3006
3007
3008
3009
3010
3011
3012
3013
3014
3015
3016
3017
3018
3019
3020
3021
3022
3023
3024
3025
3026
3027
3028
3029
3030
3031
3032
3033
3034
3035
3036
3037
3038
3039
3040
3041
3042
3043
3044
3045
3046
3047
3048
3049
supervisor* .tl_set:N = \l_@@_info_supv_en_tl,
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{info/supervisor-ii,info/supervisor-ii*}
% 第二导师信息。
% \begin{macrocode}
supervisor-ii .clist_set:N = \l_@@_info_supv_ii_clist,
supervisor-ii* .tl_set:N = \l_@@_info_supv_ii_en_tl,
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{info/submit-date}
% \changes{v0.14}{2022/01/14}{精简提交日期选项。}
% 提交日期,初始值为编译当天日期。
% \begin{macrocode}
submit-date .tl_set:N = \l_@@_info_sm_date_raw_tl,
submit-date .initial:V = \c_@@_today_tl,
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{info/defend-date}
% \changes{v0.14}{2022/01/14}{精简答辩日期选项。}
% 答辩日期。
% \begin{macrocode}
defend-date .tl_set:N = \l_@@_info_df_date_raw_tl,
defend-date .initial:V = \c_@@_today_tl,
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{info/defend-date,info/chairman,info/reviewer}
% 答辩委员会信息。
% \begin{macrocode}
chairman .tl_set:N = \l_@@_info_chairman_tl,
reviewer .clist_set:N = \l_@@_info_reviewer_clist,
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{info/clc,info/secret-level,info/udc,info/supervisor-contact}
% 国家图书馆封面相关信息。
% \begin{macrocode}
clc .tl_set:N = \l_@@_info_clc_tl,
secret-level .tl_set:N = \l_@@_info_seclv_tl,
udc .tl_set:N = \l_@@_info_udc_tl,
supervisor-contact .tl_set:N = \l_@@_info_supv_cont_tl,
}
% \end{macrocode}
% \end{macro}
%
3050
3051
3052
3053
3054
3055
3056
3057
3058
3059
3060
3061
3062
3063
3064
3065
3066
3067
3068
3069
3070
3071
% \changes{v0.16}{2022/03/06}{正确处理学位和类型信息。}
% 设置学位信息。该设置需要放在 \cs{ProcessKeysOptions}
% 命令以及载入配置文件中的常量信息后进行。
% \begin{macrocode}
\tl_set:Nx \l_@@_info_degree_tl
{
\clist_item:Nn \c_@@_name_degree_clist
{ \g_@@_info_degree_int }
}
\int_compare:nTF { \g_@@_info_degree_int == 1 }
{ \tl_set:Nn \l_@@_info_diploma_tl { ug } }
{ \tl_set:Nn \l_@@_info_diploma_tl { g } }
% \end{macrocode}
%
% 设置类型信息。
% \begin{macrocode}
\tl_set:Nx \l_@@_info_type_tl
{ \clist_item:Nn \c_@@_name_type_clist { \g_@@_info_type_int } }
\tl_put_left:Nx \l_@@_info_type_tl
{ \tl_use:c { c_@@_name_ \l_@@_info_diploma_tl _tl } }
% \end{macrocode}
%
% 在导言区录入用户信息后进行变量设置。此处使用到了 \pkg{ctex} 提供的命令,
% 应当位于载入文档类之后。
3075
3076
3077
3078
3079
3080
3081
3082
3083
3084
3085
3086
3087
3088
3089
3090
3091
3092
3093
3094
3095
3096
3097
3098
3099
3100
3101
3102
3103
3104
3105
3106
3107
3108
% \begin{macrocode}
\ctex_at_end_preamble:n
{
% \end{macrocode}
% 拼合双导师的姓名和职称。
% \begin{macrocode}
\bool_set:Nn \l_@@_second_supv_bool
{ ! \clist_if_empty_p:N \l_@@_info_supv_ii_clist }
\tl_set:Nx \l_@@_info_supv_full_tl
{
\clist_use:Nn \l_@@_info_supv_clist { \@@_hskip: }
\bool_if:NT \l_@@_second_supv_bool
{
\@@_quad:
\clist_use:Nn \l_@@_info_supv_ii_clist { \@@_hskip: }
}
}
\tl_set:Nx \l_@@_info_supv_full_en_tl
{
\l_@@_info_supv_en_tl
\bool_if:NT \l_@@_second_supv_bool
{ \@@_quad: \l_@@_info_supv_ii_en_tl }
}
% \end{macrocode}
% 将 ISO 格式的原始日期字符串格式化为中文日期表示,该字符串需要进行展开。
% \begin{macrocode}
\tl_set:Nn \l_@@_info_sm_date_tl
{
\exp_last_unbraced:NV
\@@_date:www \l_@@_info_sm_date_raw_tl \q_stop
}
% \end{macrocode}
% 英文提交日期以及答辩日期仅用于研究生封面。
% \begin{macrocode}
{
\tl_set:Nn \l_@@_info_sm_date_en_tl
{
\exp_last_unbraced:NV
\@@_date_en:www \l_@@_info_sm_date_raw_tl \q_stop
}
\tl_set:Nn \l_@@_info_df_date_tl
{
\exp_last_unbraced:NV
\@@_date:www \l_@@_info_df_date_raw_tl \q_stop
}
}
}
% \end{macrocode}
%
%
\bool_lazy_or:nnT
{ \tl_if_empty_p:N \g_@@_latin_font_tl }
{ \tl_if_empty_p:N \g_@@_cjk_font_tl }
% 检测 Windows 的命令由 \pkg{l3kernel} 提供,
% 检测 macOS 的命令由 \pkg{ctex} 提供,
{
\tl_set:Nn \g_@@_latin_font_tl { win }
\tl_set:Nn \g_@@_cjk_font_tl { win }
}
{
\ctex_if_platform_macos:TF
{
\tl_set:Nn \g_@@_latin_font_tl { mac }
\tl_set:Nn \g_@@_cjk_font_tl { mac }
}
{
\tl_set:Nn \g_@@_latin_font_tl { gyre }
\tl_set:Nn \g_@@_cjk_font_tl { fandol }
}
}
\setmainfont { Times~New~Roman }
\setsansfont { Arial }
\setmonofont { Courier~New }
[ Scale = MatchLowercase ]
\setmainfont { Times~New~Roman }
\setsansfont { Arial }
\setmonofont { Menlo }
[ Scale = MatchLowercase ]
3200
3201
3202
3203
3204
3205
3206
3207
3208
3209
3210
3211
3212
3213
3214
3215
3216
3217
3218
3219
3220
3221
3222
3223
3224
3225
\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
]
% \begin{macro}{\@@_hide_no_script_msg:}
% 隐藏 |does not contain script "CJK"| 警告。
{ \msg_redirect_name:nnn { fontspec } { no-script } { info } }
% \end{macrocode}
% \end{macro}
%
\setCJKmainfont { SimSun }
[ AutoFakeBold = 2.17, ItalicFont = KaiTi ]
\setCJKsansfont { SimHei } [ AutoFakeBold = 2.17 ]
\setCJKmonofont { FangSong } [ AutoFakeBold = 2.17 ]
\setCJKfamilyfont { zhsong } { SimSun } [ AutoFakeBold = 2.17 ]
\setCJKfamilyfont { zhhei } { SimHei } [ AutoFakeBold = 2.17 ]
\setCJKfamilyfont { zhfs } { FangSong } [ AutoFakeBold = 2.17 ]
\setCJKfamilyfont { zhkai } { KaiTi } [ AutoFakeBold = 2.17 ]
\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]
\setCJKfamilyfont{zhnewhei}{PingFang~SC}
}
% \begin{macro}{\@@_load_cjk_font_fandol:}
% Fandol 字体
3286
3287
3288
3289
3290
3291
3292
3293
3294
3295
3296
3297
3298
3299
3300
3301
3302
3303
3304
3305
3306
3307
3308
3309
3310
3311
3312
3313
3314
3315
3316
\@@_hide_no_script_msg:
\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
]
%
% \begin{macro}{\@@_load_cjk_font_founder:}
% 调整方正字体括号位置。\footnote{\hologo{XeTeX} 的调整方法来自 \url{https://www.zhihu.com/question/46241367/answer/101660183}。}
\sys_if_engine_xetex:T
{ \xeCJKEditPunctStyle {quanjiao} { optimize-kerning = true } }
\sys_if_engine_luatex:T
{ \defaultCJKfontfeatures { JFM = { zh_CN/{quanjiao,fzpr} } } }
[ BoldFont = FZXiaoBiaoSong-B05, ItalicFont = FZKai-Z03 ]
\setCJKsansfont { FZXiHeiI-Z08 } [ BoldFont = FZHei-B01 ]
\setCJKmonofont { FZFangSong-Z02 }
\setCJKfamilyfont { zhsong } { FZShuSong-Z01 }
[ BoldFont = FZXiaoBiaoSong-B05 ]
\setCJKfamilyfont { zhhei } { FZHei-B01 }
3355
3356
3357
3358
3359
3360
3361
3362
3363
3364
3365
3366
3367
3368
3369
3370
3371
3372
3373
3374
3375
3376
3377
3378
3379
3380
3381
3382
3383
\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 { Noto~Sans~Mono~CJK~SC }
\setCJKfamilyfont { zhsong } { Noto~Serif~CJK~SC }
\setCJKfamilyfont { zhhei } { Noto~Sans~CJK~SC }
\setCJKfamilyfont { zhfs } { FZFangSong-Z02 }
\setCJKfamilyfont { zhkai } { FZKai-Z03 }
[AutoFakeBold=2.17]
}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_load_cjk_font_source:}
% \changes{v0.14}{2021/12/20}{增加 Adobe Source Han 作为思源字体。}
3385
3386
3387
3388
3389
3390
3391
3392
3393
3394
3395
3396
3397
3398
3399
3400
3401
3402
3403
3404
3405
3406
3407
3408
3409
3410
3411
3412
% Source Han 思源字体。
% \begin{macrocode}
\cs_new_protected:Npn \@@_load_cjk_font_source:
{
\setCJKmainfont
[
UprightFont = SourceHanSerifSC-Regular,
BoldFont = SourceHanSerifSC-Bold,
ItalicFont = SourceHanSerifSC-Regular,
BoldItalicFont = SourceHanSerifSC-Bold,
ItalicFeatures = FakeSlant,
BoldItalicFeatures = FakeSlant
] { Source~Han~Serif~SC }
\setCJKsansfont
[
UprightFont = SourceHanSansSC-Regular,
BoldFont = SourceHanSansSC-Bold,
ItalicFont = SourceHanSansSC-Regular,
BoldItalicFont = SourceHanSansSC-Bold,
ItalicFeatures = FakeSlant,
BoldItalicFeatures = FakeSlant
] { Source~Han~Sans~SC }
\setCJKmonofont { FZFangSong-Z02 }
\setCJKfamilyfont { zhsong } { Source~Han~Serif~SC }
\setCJKfamilyfont { zhhei } { Source~Han~Sans~SC }
\setCJKfamilyfont { zhfs } { FZFangSong-Z02 }
\setCJKfamilyfont { zhkai } { FZKai-Z03 }
[AutoFakeBold=2.17]
% \subsubsection{定义数学字库}
%
% \begin{macro}{\@@_load_math_font:}
% 设置数学字体 (XITS, 或者 \href{https://www.stixfonts.org}{STIX}, 与 Times New Roman 最为相近)
% 通用数学字体。
% \begin{macrocode}
\cs_new_protected:Npn \@@_load_math_font:
{
% \setmathfont{STIXTwoMath-Regular}[Extension = .otf]
\setmathfont{XITSMath-Regular}[
BoldFont = XITSMath-Bold,
Extension = .otf]
\setmathfont{NewCMMath-Regular.otf}[range={cal,bb,frak}]
\setmathfont{NewCMMath-Regular.otf}[version=bold,range={bfcal}]
}
% \end{macrocode}
% \end{macro}
%
%
\use:c { @@_load_latin_font_ \g_@@_latin_font_tl : }
\use:c { @@_load_cjk_font_ \g_@@_cjk_font_tl : }
% \changes{v0.10}{2021/09/28}{修正了数学字体。}
% \begin{macrocode}
\NewDocumentCommand \songti { } { \CJKfamily { zhsong } }
\NewDocumentCommand \heiti { } { \CJKfamily { zhhei } }
\NewDocumentCommand \fangsong { } { \CJKfamily { zhfs } }
\NewDocumentCommand \kaishu { } { \CJKfamily { zhkai } }
% \end{macrocode}
% 重定义字号命令。
% \begin{macrocode}
\RenewDocumentCommand \large { } { \zihao { 4 } }
% 载入设置的字体。此处设置与文档类一同载入,否则在导言区后载入字体可能导致一部分覆盖字体的命令失效。
% \BeforeBeginEnvironment { document } { \@@_load_font: }
\@@_load_font:
% 草稿模式下显示页面文字范围边界以及页眉、页脚线。
% \begin{macrocode}
\bool_if:NT \g_@@_draft_bool { \geometry { showframe } }
% \end{macrocode}
%
% \begin{macro}{\@@_fancy_head:nn}
% 页眉样式,设置为小号字体、楷书。这里对 \pkg{fancyhdr} 的命令进行了包装。
% \begin{macrocode}
\cs_new_protected:Npn \@@_fancy_head:nn #1#2
{ \fancyhead [#1] { \small \kaishu \nouppercase {#2} } }
% \end{macrocode}
% \end{macro}
%
% 重定义 \pkg{fancyhdr} 的 \opt{plain} 样式,即本科生正文和部分特殊页面使用的的
% 页眉页脚样式。页眉无内容;页脚为居中的页码,使用五号新罗马体数字。注意标记页眉
% 页脚横线宽度的变量并不是 |dim| 类型的,但是采取了该类型的格式。
\fancyfoot [ C ] { \zihao { 5 } \rmfamily \thepage }
\tl_set:Nn \headrulewidth { \c_zero_dim }
\tl_set:Nn \footrulewidth { \c_zero_dim }
% \changes{v0.15}{2022/01/17}{修复单页模式的页眉问题。}
% 以 \opt{plain} 样式为基础,单独设置研究生模板的页眉内容。在 \cs{fancyhead} 的
% 可选参数中,\opt{E} 和 \opt{O} 分别表示在偶数页(even)和奇数页(odd), 而
% \opt{L}、\opt{R} 和 \opt{C} 则分别表示左(left)、右(right)和中间(center)
% 。按照通常的排版规则,在双面模式下,偶数页的中间页眉文字在左,奇数页则在右。
% 单面模式下,左右页眉都要显示。
\@@_fancy_head:nn { EL } { \leftmark }
\@@_fancy_head:nn { OR } { \rightmark }
\@@_fancy_head:nn { L } { \leftmark }
\@@_fancy_head:nn { R } { \rightmark }
\tl_set:Nn \headrulewidth { 0.4 pt }
\dim_set:Nn \headheight { 20 pt }
% \begin{macro}{\frontmatter}
% 重定义 \cs{frontmatter},清空页眉页脚以及页码设置。
% \changes{v0.12}{2021/12/03}{修复了摘要页字体格式泄漏到正文的问题。}
% \changes{v0.12}{2021/12/03}{修复了页眉上长标题重叠的问题。}
% 重定义 \cs{mainmatter},在论文主体部分载入页眉页脚设置,使用阿拉伯数字重新进行
% 页码编号。
% \begin{macrocode}
\RenewDocumentCommand \mainmatter { }
{
\cleardoublepage
\tl_const:Nn \c_@@_sec_format_tl { \large \normalfont \sffamily }
% \begin{macro}{\@@_add_tocline:n,\@@_add_tocline:V}
% 添加目录条目。
\cs_new_protected:Npn \@@_add_tocline:n #1
{ \addcontentsline { toc } { chapter } { \c_@@_sec_format_tl #1 } }
\cs_generate_variant:Nn \@@_add_tocline:n { V }
% \begin{macro}{\@@_chapter:n,\@@_chapter:V}
% 含有目录和 PDF 标签的无编号章。
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_chapter_header:n}
% 单页模式下,目录、摘要、符号表等特殊页面的页眉中间为相应标题,左右为空。这里通
% 过居中的 \tn{leftmark} 实现。
% \begin{macrocode}
\cs_new_protected:Npn \@@_chapter_header:n #1
{
\bool_if:NTF \g_@@_twoside_bool
{ \markboth { #1 } { #1 } }
}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\njuchapter}
\NewDocumentCommand \njuchapter { m } { \@@_chapter:n { #1 } }
chapter / beforeskip = 10 pt,
chapter / afterskip = 60 pt,
chapter / format = \c_@@_sec_format_tl \centering,
section / format = \c_@@_sec_format_tl,
subsection / format = \c_@@_sec_format_tl,
subsubsection / format = \c_@@_sec_format_tl,
% \changes{v0.13}{2021/12/09}{移除 \pkg{tocloft},用 \pkg{ctex} 修改目录样式。}
chapter / tocline = \c_@@_sec_format_tl \CTEXnumberline { #1 } #2
% \begin{macrocode}
\keys_define:nn { nju / style }
{
% \end{macrocode}
% \begin{macro}{style/toc-in-toc}
% \changes{v0.15}{2022/02/04}{可选择目录自身是否出现在目录中。}
% 是否在目录中显示目录自身。
% \begin{macrocode}
toc-in-toc .bool_gset:N = \g_@@_toc_in_toc_bool,
toc-in-toc .initial:n = true
}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_make_toc:nn,\@@_make_toc:Vn}
% 目录自身不出现在目录中时需特别处理。参考
% \url{https://tex.stackexchange.com/a/1821}。
\keys_set:nn { ctex }
{ chapter/format = \centering \zihao { 3 } \bfseries }
\bool_if:NTF \g_@@_toc_in_toc_bool
{ \@@_chapter:n { #1 } }
{
\chapter * { #1 }
\pdfbookmark [0] { #1 } { #2 }
\@@_chapter_header:n { #1 }
}
% \begin{macro}{\tableofcontents,\listoffigures,\listoftables}
% 重定义目录命令,修改标题格式并插入书签。
% 存储传入 \pkg{biblatex} 的选项列表。
% \begin{macrocode}
% \end{macrocode}
% \end{variable}
%
% \begin{variable}{\g_@@_bib_resource_clist}
% 存储参考文献数据源列表。
% \begin{macrocode}
\clist_new:N \g_@@_bib_resource_clist
% \end{macrocode}
% \end{variable}
%
% \begin{macrocode}
\msg_new:nnn { njuthesis } { extra-bib-style }
{
Wrongly-placed~ bib~ style.\\
Please~ use~ the~ `bib/style`~ field.
}
% \end{macrocode}
%
\keys_define:nn { nju / bib }
{
% \end{macrocode}
% \changes{v0.15}{2022/02/11}{可使用国标以外的文献样式。}
% 参考文献样式。国家标准为顺序编码制 \opt{numeric} 和著者-出版年制
% \opt{author-year},分别对应 \pkg{biblatex} 的 \opt{gb7714-2015}
% 和 \opt{gb7714-2015ay} 样式。其余样式一律视作 \opt{unknown}。用户
% 选取的样式会被加入选项列表中,以待传进 \pkg{biblatex} 宏包。
% \begin{macrocode}
style .choice:,
style / numeric .code:n =
% \changes{v0.15}{2022/02/15}{提供传入 \pkg{biblatex} 宏包选项的接口。}
% 待传入 \pkg{biblatex} 的额外宏包选项,以列表形式储存。
% 更为常见的参考文献样式设置已由 \opt{bib/style} 提供,
% 此处对重复的样式设置进行了检查。本设置项等效于在导言区使用
% |\PassoptionToPackage{|\meta{key}|=|\meta{value}|}{biblatex}| 命令。
{
\tl_if_in:VnTF \l_keys_value_tl { style = }
{ \msg_error:nn { njuthesis } { extra-bib-style } }
{
\l_keys_value_tl
}
},
% \end{macrocode}
% \end{macro}
%
resource .code:n =
{
\clist_gput_right:NV \g_@@_bib_resource_clist
\l_keys_value_tl
},
% \end{macro}
%
% \begin{macro}{\addbibresource}
% 为了吸收用户在导言区设置的选项,\pkg{biblatex} 宏包被设置在导言区末尾才会载
% 入。此处单独定义了可以在导言区使用的 \cs{addbibresource} 命令,用于兼容传统的
% 添加参考文献数据源的方法。
% \begin{macrocode}
\NewDocumentCommand \addbibresource { m }
{ \clist_gput_right:Nn \g_@@_bib_resource_clist { #1 } }
% 载入 \pkg{biblatex} 宏包前,必须禁用自行定义的 \cs{addbibresource}
% 命令,并传入用户设置的选项。
% \begin{macrocode}
\cs_new_protected:Npn \@@_biblatex_pre_setup:
{
\clist_gput_right:Nn \g_@@_biblatex_option_clist { backend = biber }
% \begin{macrocode}
\cs_new_protected:Npn \@@_biblatex_post_setup:
{
% \end{macrocode}
% \changes{v0.15}{2022/02/17}{可在每章后附上参考文献表。}
% 修改参考文献的头部样式,自动添加目录条目。默认为 |chapter| 级别。
% 如果需要在每章后附上一个参考文献表,即对 \pkg{biblatex} 传入了
% |refsection = chapter| 选项,则默认为 |section| 级别。
\defbibheading { njubibintoc } [ \bibname ] { \@@_chapter:n { ##1 } }
\tl_if_eq:NnTF \blx@refsecreset@level { 2 }
{ \DeclarePrintbibliographyDefaults { heading = subbibintoc } }
{ \DeclarePrintbibliographyDefaults { heading = njubibintoc } }
% 使用 \pkg{etoolbox} 提供的 \tn{BeforeBeginEnvironment},在 \env{document} 环境
% 开始的钩子前载入 \pkg{biblatex} 并进行相关设置。
\pdfstringdefDisableCommands
{ \cs_set_eq:NN \\ \prg_do_nothing: }
\hypersetup
{
bookmarksnumbered = true,
psdextra = true,
unicode = true,
% \end{macrocode}
% 填写 PDF 元信息。
% \begin{macrocode}
pdfauthor = \l_@@_info_author_tl,
pdfkeywords = \l_@@_info_keywords_clist,
pdfcreator = \c_@@_name_pdf_creator_tl
}
}
% 用于修改 \pkg{cleverref} 的标签名称的辅助函数。
% \begin{macrocode}
\cs_new_protected:Npn \@@_cref_name:n #1
{
\clist_map_inline:nn { #1 }
\crefname { ##1 }
{ \@@_name:n { ##1 } } { \@@_name:n { ##1 _en } }
}
\crefformat { equation } { 公式~#2#1#3~ }
\crefformat { chapter } { 第#2#1#3章 }
\crefformat { section } { 第~#2#1#3~节 }
\crefformat { subsection } { 第~#2#1#3~小节 }
\crefformat { subsubsection } { 第~#2#1#3~小节 }
% \end{macrocode}
%
% 修改 \pkg{cleverref} 的标签名称。
% \begin{macrocode}
\@@_cref_name:n { figure, table, appendix, proof }
%
% 设置默认图片扩展名,允许在不键入扩展名时自动进行补全。
% \begin{macrocode}
% \changes{v0.16}{2022/03/11}{表格内字体设为五号。}
% 表格默认居中,字号设置为五号。^^A https://www.zhihu.com/question/366803177/answer/977853129
% \begin{macrocode}
\BeforeBeginEnvironment { tabular } { \centering \zihao {5} }
% \end{macrocode}
%
% \changes{v0.12}{2021/12/06}{删除了可能导致冲突的 \pkg{floatrow}。}
\DeclareCaptionStyle{njucap}
{
font = small,
labelfont = bf,
labelsep = quad,
justification = centering
}
\captionsetup [ figure ] { style = njucap }
\captionsetup [ table ] { style = njucap }
% \changes{v0.12}{2021/12/07}{删除了 \pkg{enumitem} 的部分列表环境设置。}
% \begin{macro}{\@@_new_theorem:N}
% 用于定义普通定理环境的辅助函数。
% \begin{arguments}
% \item 定理名称列表,|clist| 型变量
% \end{arguments}
% 除证明以外的环境都不需要证毕符号,在此清空其设置。
% \begin{macrocode}
\cs_new_protected:Npn \@@_new_theorem:N #1
\theoremsymbol { }
\clist_map_inline:Nn #1
{ \newtheorem { ##1 } { \@@_name:n { ##1 } } }
}
% \end{macrocode}
% \end{macro}
%
% 定义证明环境。证毕符号使用 \tn{mdlgwhtsquare} 绘制,对应于 |U+25A1| 字符
% \footnote{\url{https://tex.stackexchange.com/questions/567135/how-get-box-like-symbol-with-xelatex}}。
% \begin{macrocode}
\theoremsymbol { \ensuremath { \mdwhtsquare } }
\newtheorem* { proof } { \c_@@_name_proof_tl }
% \end{macrocode}
%
\group_begin:
\clist_remove_all:Nn \g_@@_theorem_type_clist { proof }
\@@_new_theorem:N \g_@@_theorem_type_clist
\group_end:
% \changes{v0.16}{2022/03/01}{将封面部件分离到 \file{.def} 文件。}
% \begin{macro}{cover/ug/emblem-img}
% 本科生封面校徽图片实例。
\@@_declare_element:nn { cover / ug / emblem-img }
{
content = \njuemblem [ black ] { ! } { 3.35 cm },