summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/njuthesis/njuthesis.cls
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2021-11-30 22:50:54 +0000
committerKarl Berry <karl@freefriends.org>2021-11-30 22:50:54 +0000
commit5a1e7ce59584a8376352116875e8557056bb135e (patch)
tree650ef93fc567d94310f16407f917554916707083 /Master/texmf-dist/tex/latex/njuthesis/njuthesis.cls
parent513764aaf15b7d3e47c1c12a91e8558ddc49fa2b (diff)
njuthesis (30nov21)
git-svn-id: svn://tug.org/texlive/trunk@61189 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/njuthesis/njuthesis.cls')
-rw-r--r--Master/texmf-dist/tex/latex/njuthesis/njuthesis.cls163
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'.