diff options
Diffstat (limited to 'Master/texmf-dist/tex/latex/njuthesis/njuthesis.cls')
-rw-r--r-- | Master/texmf-dist/tex/latex/njuthesis/njuthesis.cls | 163 |
1 files changed, 96 insertions, 67 deletions
diff --git a/Master/texmf-dist/tex/latex/njuthesis/njuthesis.cls b/Master/texmf-dist/tex/latex/njuthesis/njuthesis.cls index ac463399b01..0a62158a22a 100644 --- a/Master/texmf-dist/tex/latex/njuthesis/njuthesis.cls +++ b/Master/texmf-dist/tex/latex/njuthesis/njuthesis.cls @@ -10,7 +10,7 @@ %% by Nanjing University Linux User Group <nju.lug@yaoge123.cn> %% %% This file may be distributed and/or modified under the conditions of -%% the LaTeX Project Public License, either version 1.3 of this license +%% the LaTeX Project Public License, either version 1.3c of this license %% or (at your option) any later version. The latest version of this %% license is in: %% @@ -24,10 +24,47 @@ %% \NeedsTeXFormat{LaTeX2e} \RequirePackage{expl3} -\GetIdInfo $Id: njuthesis.dtx 0.11.0 2021-10-01 19:00:00 +0800 NJU LUG <nju.lug@yaoge123.cn> $ +\GetIdInfo $Id: njuthesis.dtx 0.12.0 2021-11-30 11:30:00 +0800 NJU LUG <nju.lug@yaoge123.cn> $ { Thesis template for Nanjing University } \ProvidesExplClass{njuthesis} {\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription} +\RequirePackage { xtemplate, l3keys2e } +\msg_new:nnn { njuthesis } { l3-too-old } + { + Package~ "#1"~ is~ too~ old. \\\\ + Please~ update~ an~ up-to-date~ version~ of~ \\ + the~ bundles "l3kernel"~ and~ "l3packages"~ \\ + using~ your~ TeX~ package manager~ or~ from~ \\ + CTAN. + } +\clist_map_inline:nn { xtemplate, l3keys2e } + { + \@ifpackagelater {#1} { 2021/08/27 } + { } { \msg_error:nnn { njuthesis } { l3-too-old } {#1} } + } + +\msg_new:nnn { njuthesis } { unsupported-engine } + { + The~ njuthesis~ class~ requires~ either~ \\ + XeTeX~ or~ LuaTeX. \\\\ + "#1"~ is~ not~ supported~ at~ present.~ \\ + You~ must~ change your~ typesetting~ engine~ \\ + to~ "xelatex"~ or~ "lualatex". + } +\sys_if_engine_xetex:F + { + \sys_if_engine_luatex:F + { + \msg_fatal:nnx { njuthesis } { unsupported-engine } + { \c_sys_engine_str } + } + } +\clist_const:Nn \c__nju_name_type_clist + { 毕业论文, 毕业设计 } +\clist_const:Nn \c__nju_name_degree_clist + { 学士, 硕士, 硕士专业, 博士 } +\clist_const:Nn \c__nju_name_degree_en_clist + { Bachelor, Master, Master, Doctor~of~Philosophy } \cs_new_protected:Npn \__nju_define_name:nn #1#2 { \tl_const:cn { c__nju_name_ #1 _tl } {#2} } \cs_new_protected:Npn \__nju_define_name:nnn #1#2#3 @@ -45,20 +82,20 @@ { keywords } { 关键词: } { Keywords: }, } { \__nju_define_name:nnn #1 } -\RequirePackage{xparse,xtemplate,l3keys2e} -\tl_new:N \l__nju_info_degree_tl -\tl_new:N \l__nju_info_type_tl +\int_new:N \g__nju_info_degree_int +\int_new:N \g__nju_info_type_int +\tl_new:N \g__nju_info_diploma_tl \tl_new:N \g__nju_latin_fontset_tl \tl_new:N \g__nju_cjk_fontset_tl \keys_define:nn { nju } { degree .choices:nn = - { ug, mg, mg, phd } - { \tl_set_eq:NN \l__nju_info_degree_tl \l_keys_choice_tl }, + { ug, mg, mf, phd } + { \int_set_eq:NN \g__nju_info_degree_int \l_keys_choice_int }, degree .initial:n = ug, type .choices:nn = { thesis, design } - { \tl_set_eq:NN \l__nju_info_type_tl \l_keys_choice_tl }, + { \int_set_eq:NN \g__nju_info_type_int \l_keys_choice_int }, type .initial:n = thesis, nlcover .bool_set:N = \g__nju_nlcover_bool, nlcover .initial:n = false, @@ -70,6 +107,9 @@ { \tl_set_eq:NN \g__nju_cjk_fontset_tl \l_keys_choice_tl }, } \ProcessKeysOptions { nju } +\int_compare:nTF { \g__nju_info_degree_int == 1 } + { \tl_set:Nn \g__nju_info_diploma_tl { ug } } + { \tl_set:Nn \g__nju_info_diploma_tl { g } } \keys_define:nn { nju } { info.meta:nn = { nju / info } { #1 } @@ -100,7 +140,6 @@ keywords* .clist_set:N = \l__nju_info_keywords_en_clist, supervisorb* .tl_set:N = \l__nju_info_supv_b_en_tl, supervisorb-title .tl_set:N = \l__nju_info_supv_b_title_tl, supervisorb-title*.tl_set:N = \l__nju_info_supv_b_title_en_tl, - % 提交日期 submit-date .tl_set:N = \l__nju_submit_date_tl, submit-date* .tl_set:N = \l__nju_submit_date_en_tl, defend-date .tl_set:N = \l__nju_defend_date_tl, @@ -160,6 +199,21 @@ keywords* .clist_set:N = \l__nju_info_keywords_en_clist, \RequirePackage[capitalise,nameinlink,noabbrev]{cleveref} \RequirePackage{njuvisual} \RequirePackage{blindtext,zhlipsum} +\msg_new:nnn { njuthesis } { package-too-old } + { + Package~ "#1"~ is~ too~ old. \\ + The~ njuthesis~ class~ only~ supports~ "#1"~ with~ \\ + a~ version higher~ than~ v#2. \\\\ + Please~ update~ an~ up-to-date~ version~ of~ it~ \\ + using~ your TeX~ package~ manager~ or~ from~ CTAN. + } +\cs_new_protected:Npn \__nju_check_package:nnn #1#2#3 + { + \@ifpackagelater {#1} {#2} + { } { \msg_error:nnnn { njuthesis } { package-too-old } {#1} {#3} } + } +\sys_if_engine_luatex:T + { \__nju_check_package:nnn { luatexja } { 2021/10/24 } { 20211024.0 } } \bool_new:N \g__nju_load_system_fontset_bool \tl_if_empty:NTF \g__nju_latin_fontset_tl { \bool_gset_true:N \g__nju_load_system_fontset_bool } @@ -276,6 +330,12 @@ keywords* .clist_set:N = \l__nju_info_keywords_en_clist, } \cs_new_protected:Npn \__nju_load_cjk_font_founder: { + \sys_if_engine_luatex:T + { + % 在 LuaTeX 中调整方正字体括号位置 + % XeTeX 暂无好的解决方法 + \defaultCJKfontfeatures{JFM={zh_CN/{quanjiao,fzpr}}} + } \setCJKmainfont{FZSSK}[% 方正书宋 Extension=.ttf, BoldFont=FZXBSK,% 方正小标宋 @@ -300,6 +360,7 @@ keywords* .clist_set:N = \l__nju_info_keywords_en_clist, % {FZYouHK_508R}[% 方正悠黑508R % Extension=.ttf, % BoldFont=FZYouHK_511M]% 方正悠黑511M + \defaultCJKfontfeatures{} } \cs_new_protected:Npn \__nju_load_cjk_font_noto: { @@ -347,6 +408,7 @@ keywords* .clist_set:N = \l__nju_info_keywords_en_clist, \geometry{ vmargin = 2.5 cm, hmargin = 3.2 cm, + headheight = 15 pt } \fancypagestyle{njuplain}{ \fancyhead{} @@ -356,7 +418,7 @@ keywords* .clist_set:N = \l__nju_info_keywords_en_clist, \fancyhead{} \fancyfoot[C]{\zihao{5}\thepage} } -\str_if_eq:NNTF {\l__nju_info_degree_tl} { ug } +\int_compare:nTF { \g__nju_info_degree_int == 1 } { % the header line \tl_set:Nn \headrulewidth {0pt} @@ -369,7 +431,6 @@ keywords* .clist_set:N = \l__nju_info_keywords_en_clist, \tl_set:Nn \headrulewidth {1pt} % the footer line \tl_set:Nn \footrulewidth {0pt} - \setlength{\headheight}{20pt} \AtBeginDocument{\pagestyle{fancy}\flushbottom} % 研究生有页眉页脚 } \ctexset{ @@ -680,10 +741,9 @@ numberwithin=section, } \tl_new:N \l__nju_name_degree_tl \tl_new:N \l__nju_name_degree_en_tl -\str_if_eq:NNTF {\l__nju_info_degree_tl} { ug } +\int_compare:nTF { \g__nju_info_degree_int == 1 } { % 本科 - \tl_const:Nn \l__nju_name_diploma_tl { 本科 } \tl_const:Nn \c__nju_name_title_tl { 题\hfill 目 } \tl_const:Nn \c__nju_cover_uline_len_a_tl { 250pt } @@ -699,7 +759,6 @@ numberwithin=section, } { % 本科以外都是研究生 - \tl_const:Nn \l__nju_name_diploma_tl { 研究生 } \tl_const:Nn \c__nju_name_title_tl { 论\hfill 文\hfill 题\hfill 目 } \tl_const:Nn \c__nju_cover_uline_len_a_tl { 250pt } @@ -709,19 +768,6 @@ numberwithin=section, \tl_const:Nn \c__nju_cover_uline_bskip_tl { \hspace{1em} } \tl_const:Nn \c__nju_cover_box_len_tl { 6em } - - % 研究生学位名称 - \str_if_eq:NNTF { \l__nju_info_degree_tl } { phd } - { - \tl_set:Nn \l__nju_name_degree_tl { 博士 } - \tl_set:Nn \l__nju_name_degree_en_tl { Doctor~of~Philosophy } - } - { - \tl_set:Nn \l__nju_name_degree_en_tl { Master } - \str_if_eq:NNTF { \l__nju_info_degree_tl } { mg } - { \tl_set:Nn \l__nju_name_degree_tl { 硕士 } } - { \tl_set:Nn \l__nju_name_degree_tl { 硕士专业 } } - } } \cs_generate_variant:Nn \tl_map_inline:nn { xn } \cs_new_protected:Npn \__nju_spread_box:nn #1#2 @@ -750,14 +796,11 @@ numberwithin=section, \makebox[\c__nju_cover_box_len_tl][s]{ #1\c__nju_cover_uline_bskip_tl} } -\str_if_eq:NNTF { \l__nju_info_type_tl } { thesis } -{ - \tl_const:Nn \l__nju_info_type_tl_name - { \l__nju_name_diploma_tl 毕业论文 } -} +\cs_new_protected:Npn \__nju_cover_degree: { - \tl_const:Nn \l__nju_info_type_tl_name - { \l__nju_name_diploma_tl 毕业设计 } + { (申请 } + \clist_item:Nn \c__nju_name_degree_clist { \g__nju_info_degree_int } + { 学位) } } \cs_new_protected:Npn \__nju_cover_title_breakline: { @@ -781,7 +824,7 @@ numberwithin=section, } \cs_new_protected:Npn \__nju_print_covertab: {% - \str_if_eq:NNTF { \l__nju_info_degree_tl } { ug } +\int_compare:nTF { \g__nju_info_degree_int == 1 } { \begin{tabular}{p{4.2em}c} \__nju_cover_box:n {院\hfill 系} @@ -921,7 +964,7 @@ numberwithin=section, \begin{center} \njuname{!}{3.35cm} \vskip 10mm - {\zihao{1}\bf\songti\__nju_spread_box:nn {9em}{\l__nju_info_type_tl_name}} + {\zihao{1}\bf\songti\__nju_spread_box:nn {9em}{本科毕业论文}} \vfill \vskip\stretch{0} {\bgroup @@ -953,9 +996,9 @@ numberwithin=section, \vskip 15mm \bgroup \zihao{1}\bf\kaishu - \__nju_spread_box:nn {10em}{\l__nju_info_type_tl_name} + \__nju_spread_box:nn {10em}{研究生毕业论文} \vskip 5mm - {(申请\l__nju_name_degree_tl 学位)} + \__nju_cover_degree: \egroup \par\vfill\vskip\stretch{0} \bgroup @@ -989,9 +1032,7 @@ numberwithin=section, \vskip 15mm \end{spacing} \cleardoublepage -} -\cs_new_protected:Npn \__nju_print_cover_en: -{ + \thispagestyle{empty} \pdfbookmark{英文封面}{cover-en} % 将封面插入pdf书签 \begin{center} @@ -1010,11 +1051,13 @@ numberwithin=section, \l__nju_info_supv_b_title_en_tl \hspace{.5em}\l__nju_info_supv_b_en_tl \vskip\stretch{1} - \normalsize\rmfamily{% + \normalsize\rmfamily{ A~dissertation~submitted~to\\ the~graduate~school~of~Nanjing~University\\ in~partial~fulfilment~of~the~requirements~for~the~degree~of\\ - {\textsc{\l__nju_name_degree_en_tl}}\\ + \textsc{ + \clist_item:Nn \c__nju_name_degree_en_clist { \g__nju_info_degree_int } + }\\ in\\ {\l__nju_major_en_tl} } @@ -1030,16 +1073,9 @@ numberwithin=section, \cleardoublepage } \tl_set:Nn \maketitle -{% - \str_if_eq:NNTF { \l__nju_info_degree_tl } { ug } - { - \__nju_print_cover_ug: % 本科封面 - } - { - \bool_if:NT \g__nju_nlcover_bool { \__nju_print_cover_nl: } % 国家图书馆封面 - \__nju_print_cover_g: % 研究生封面 - \__nju_print_cover_en: % 英文封面 - } +{ + \bool_if:NT \g__nju_nlcover_bool { \__nju_print_cover_nl: } % 国家图书馆封面 + \use:c { __nju_print_cover_ \g__nju_info_diploma_tl : } } \cs_new_protected:Npn \__nju_print_keywords: { @@ -1113,7 +1149,7 @@ numberwithin=section, 毕业论文题目:\hspace{0.5em}\njuline{\l__nju_info_title_tl\hfill}\\ \njuline{\makebox[11em]{\l__nju_major_tl}}专业 \njuline{\makebox[4em]{\l__nju_info_grade_tl}}级 - \str_if_eq:NNTF {\l__nju_info_degree_tl} { phd } {博}{硕} + \int_compare:nTF { \g__nju_info_degree_int == 4} { 博 } { 硕 } 士生姓名:\njuline{\hfill\l__nju_info_author_tl\hfill}\\ 指导教师(姓名、职称):\njuline{\hfill\l__nju_info_supv_full_tl\hfill}\par \egroup @@ -1138,19 +1174,12 @@ numberwithin=section, } \zihao{4}\par% } -\str_if_eq:NNTF {\l__nju_info_degree_tl} { ug } -{ - \NewDocumentEnvironment{abstract} {} - {\__nju_print_abstract_ug:}{\__nju_print_keywords:\newpage} - \NewDocumentEnvironment{abstract*} {} - {\__nju_print_abstract_en_ug:}{\__nju_print_keywords_en:\cleardoublepage} -} -{ - \NewDocumentEnvironment{abstract} {} - {\__nju_print_abstract_g:}{\__nju_print_keywords:\newpage} - \NewDocumentEnvironment{abstract*} {} - {\__nju_print_abstract_en_g:}{\__nju_print_keywords_en:\cleardoublepage} -} +\NewDocumentEnvironment{abstract} { +b } + { \use:c { __nju_print_abstract_ \g__nju_info_diploma_tl : } #1 } + { \__nju_print_keywords: \newpage } +\NewDocumentEnvironment{abstract*} { +b } + { \use:c { __nju_print_abstract_en_ \g__nju_info_diploma_tl : } #1 } + { \__nju_print_keywords_en: \cleardoublepage } \endinput %% %% End of file `njuthesis.cls'. |