%% %% This is file `njuthesis.cls', %% generated with the docstrip utility. %% %% The original source files were: %% %% njuthesis.dtx (with options: `class') %% %% Copyright (C) 2021 %% by Nanjing University Linux User Group %% %% This file may be distributed and/or modified under the conditions of %% the LaTeX Project Public License, either version 1.3 of this license %% or (at your option) any later version. The latest version of this %% license is in: %% %% http://www.latex-project.org/lppl.txt %% %% and version 1.3 or later is part of all distributions of LaTeX version %% 2005/12/01 or later. %% %% To produce the documentation run the original source files ending with `.dtx' %% through XeTeX. %% \NeedsTeXFormat{LaTeX2e} \RequirePackage{expl3} \GetIdInfo $Id: njuthesis.dtx 0.9.2 2021-09-17 22:00:00 +0800 NJU LUG $ {Thesis template for Nanjing University} \ProvidesExplClass{\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription} \LoadClass[ a4paper, twoside, UTF8, scheme=chinese, linespread=1.625, fontset=none, zihao=-4 ]{ctexbook}[2018/04/01] \RequirePackage{l3keys2e} \tl_new:N \l__nju_info_degree_tl \tl_new:N \l__nju_info_type_tl \keys_define:nn { nju } { nlcover .bool_set:N = \g__nju_nlcover_bool, nlcover .initial:n = false, } \keys_define:nn { nju } { degree .choices:nn = { ug, mg, mg, phd } { \tl_set_eq:NN \l__nju_info_degree_tl \l_keys_choice_tl }, degree .initial:n = ug, type .choices:nn = { thesis, design } { \tl_set_eq:NN \l__nju_info_type_tl \l_keys_choice_tl }, type .initial:n = thesis, } \keys_define:nn { nju } { info.meta:nn = { nju / info } { #1 } } \keys_define:nn { nju / info } { TitleA .tl_set:N = \l__nju_info_title_a_tl, TitleB .tl_set:N = \l__nju_info_title_b_tl, TitleC .tl_set:N = \l__nju_info_title_c_tl, Title* .tl_set:N = \l__nju_info_title_en_tl, } \keys_define:nn { nju / info } { Grade .tl_set:N = \l__nju_info_grade_tl, StudentID .tl_set:N = \l__nju_info_id_tl, StudentName .tl_set:N = \l__nju_info_author_tl, StudentName* .tl_set:N = \l__nju_info_author_en_tl, } \keys_define:nn { nju / info } { Department .tl_set:N = \l__nju_info_dept_tl, Department* .tl_set:N = \l__nju_info_dept_en_tl, Major .tl_set:N = \l__nju_major_tl, Major* .tl_set:N = \l__nju_major_en_tl, Field .tl_set:N = \l__nju_field_tl, Field* .tl_set:N = \l__nju_field_en_tl, } \keys_define:nn { nju / info } { SupervisorA .tl_set:N = \l__nju_info_supv_a_tl, SupervisorA* .tl_set:N = \l__nju_info_supv_a_en_tl, SupervisorATitle .tl_set:N = \l__nju_info_supv_a_title_tl, SupervisorATitle* .tl_set:N = \l__nju_info_supv_a_title_en_tl, } \keys_define:nn { nju / info } { SupervisorB .tl_set:N = \l__nju_info_supv_b_tl, SupervisorB* .tl_set:N = \l__nju_info_supv_b_en_tl, SupervisorBTitle .tl_set:N = \l__nju_info_supv_b_title_tl, SupervisorBTitle* .tl_set:N = \l__nju_info_supv_b_title_en_tl, } \keys_define:nn { nju / info } { SubmitDate .tl_set:N = \l__nju_submit_date_tl, SubmitDate* .tl_set:N = \l__nju_submit_date_en_tl, } \keys_define:nn { nju / info } { DefendDate .tl_set:N = \l__nju_defend_date_tl, ReviewerChairman .tl_set:N = \l__nju_info_chairman_tl, ReviewerA .tl_set:N = \l__nju_info_reviewer_a_tl, ReviewerB .tl_set:N = \l__nju_info_reviewer_b_tl, ReviewerC .tl_set:N = \l__nju_info_reviewer_c_tl, ReviewerD .tl_set:N = \l__nju_info_reviewer_d_tl, } \keys_define:nn { nju / info } { Classification .tl_set:N = \l__nju_info_classif_tl, SecurityLevel .tl_set:N = \l__nju_info_seclv_tl, UDC .tl_set:N = \l__nju_info_udc_tl, SupervisorContact .tl_set:N = \l__nju_info_supv_cont_tl, } \NewDocumentCommand \njusetup { m } { \keys_set:nn { nju } { #1 } } \RequirePackage[ top=2.5cm, bottom=2.5cm, left=3.2cm, right=3.2cm ]{geometry} \RequirePackage{xparse} \RequirePackage{titletoc} % 修改目录内标题格式 \RequirePackage[hyphens]{url} % generate better linebreaks in the url \RequirePackage{dashundergaps} \RequirePackage{setspace} \RequirePackage{lastpage} \RequirePackage{emptypage} % 清除空白页的页码 \RequirePackage{listings} % 代码环境 \RequirePackage{enumitem} % 用于修改列表环境 \RequirePackage{caption} \RequirePackage{floatrow} % 用于图表等页面元素的定位 \RequirePackage{booktabs} % 用于绘制三线表 \RequirePackage{multirow} % Cells occupying multiple rows in tables \RequirePackage{multicol} % Multiple columns in dictionary \RequirePackage{siunitx} % 用于书写单位符号 \RequirePackage[version=4]{mhchem} % 用于绘制分子式 \RequirePackage{hologo} \sys_if_engine_xetex:T { \RequirePackage{microtype} % 加中文下划线,不能用于lualatex \RequirePackage{xeCJKfntef} \cs_new:Npn \nju_underline:n #1 {\CJKunderline{#1}} } \sys_if_engine_luatex:T{ % 加中文下划线 \RequirePackage{lua-ul} \cs_new:Npn \nju_underline:n #1 {\underLine{#1}} % emoji支持 % \RequirePackage{emoji} % \setemojifont{Segoe~UI~Emoji} % windows % \setemojifont{Apple~Color~Emoji} % macos % \setemojifont{Noto~Color~Emoji} % For windows. % Shipped with the best `grinning-face-with-sweat' support. } \RequirePackage{blindtext} \RequirePackage{zhlipsum} \RequirePackage{amsmath} % Must be loaded before unicode-math \RequirePackage{amsthm} % Mathematical environments \RequirePackage{mathtools} % Mathematical tools to use with amsmath \RequirePackage{thmtools} % Theorem styles \RequirePackage[ warnings-off={% 消除与mathtools合用产生的警告 mathtools-colon, mathtools-overbracket} ]{unicode-math} % Math fonts in xetex or luatex \RequirePackage{graphicx} \DeclareGraphicsExtensions{.pdf,.eps,.jpg,.png} \graphicspath{{figure/}} % 图片路径 \RequirePackage{wrapfig} % Wrap text around figures \RequirePackage[hidelinks,bookmarksnumbered=true]{hyperref} \RequirePackage[capitalise,nameinlink,noabbrev]{cleveref} \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_bool \tl_if_empty:NTF \g__nju_latin_fontset_tl { \bool_gset_true:N \g__nju_load_system_fontset_bool } { \tl_if_empty:NT \g__nju_cjk_fontset_tl { \bool_gset_true:N \g__nju_load_system_fontset_bool } } \bool_if:NT \g__nju_load_system_fontset_bool { % 检测是否是 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] } \cs_new_protected:Npn \__nju_load_latin_font_macos: { \setmainfont{Times~New~Roman} \setsansfont{Arial} \setmonofont{Menlo}[Scale=MatchLowercase] } \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] } \cs_new_protected:Npn \__nju_load_cjk_font_windows: { \setCJKmainfont{SimSun}[ AutoFakeBold=2.17, ItalicFont=KaiTi] \setCJKsansfont{SimHei} \setCJKmonofont{FangSong} \setCJKfamilyfont{zhsong}{SimSun}[AutoFakeBold=2.17] \setCJKfamilyfont{zhhei}{SimHei} \setCJKfamilyfont{zhfs}{FangSong} \setCJKfamilyfont{zhkai}{KaiTi}[AutoFakeBold=2.17] \setCJKfamilyfont{zhnewhei}{Microsoft~YaHei}[ BoldFont=Microsoft~YaHei~Bold] } \cs_new_protected:Npn \__nju_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, % AlternateFont = % { % {character range1} {alternate font name1} % {alternate font features2} , % ...... % } ] \setCJKfamilyfont{zhnewhei}{PingFang~SC} } \cs_new_protected:Npn \__nju_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] } \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}[ Extension=.ttf, AutoFakeBold=2.17] \setCJKfamilyfont{zhfs} {FZFSK}[Extension=.ttf] \setCJKfamilyfont{zhkai} {FZKTK}[Extension=.ttf] \setCJKfamilyfont{zhnewhei} {FZYouHK_508R}[% 方正悠黑508R Extension=.ttf, BoldFont=FZYouHK_511M]% 方正悠黑511M } \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} % 思源黑体 \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] } \cs_new_protected:Npn \__nju_load_font: { \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] \RequirePackage{fancyhdr} % 调整页眉页脚 \fancypagestyle{njuplain}{% \fancyhead{} \fancyfoot[C]{\zihao{5}\thepage} % 页脚居中 五号新罗马体数字 } \fancypagestyle{njuheadings}{% \fancyhead{} \fancyfoot[C]{\zihao{5}\thepage} } \str_if_eq:NNTF {\l__nju_info_degree_tl} { ug } { % the header line \tl_set:Nn \headrulewidth {0pt} % the footer line \tl_set:Nn \footrulewidth {0pt} \AtBeginDocument{\pagestyle{njuplain}} % 本科无页眉页脚 } { % the header line \tl_set:Nn \headrulewidth {1pt} % the footer line \tl_set:Nn \footrulewidth {0pt} % \AtBeginDocument{\pagestyle{njuplain}} % 无页眉页脚 \AtBeginDocument{\pagestyle{headings}} % 研究生有页眉页脚 } \ctexset{ contentsname = 目录, listfigurename = 插图清单, listtablename = 表格清单, chapter/format = \zihao{4}\heiti\centering, chapter/beforeskip = 10pt, chapter/afterskip = 60pt, section/format = \zihao{4}\heiti\raggedright, subsection/format = \zihao{4}\heiti\raggedright, subsubsection/format = \zihao{4}\heiti\raggedright } \titlecontents{chapter}% 标题级别 [5em]% 标题左间距 {\heiti\zihao{4}\vspace{10pt}}% 标题格式 {\contentslabel{4em}}% 标题标志 {\hspace*{-4em}}% 无序号标题 {~\titlerule*[0.6pc]{$.$}~\contentspage}% 指引线与页码 \titlecontents{section} [5em] {\zihao{-4}\vspace{0pt}} {\contentslabel{2.5em}} {\hspace*{-4em}} {~\titlerule*[0.6pc]{$.$}~\contentspage} \titlecontents{subsection} [8em] {\zihao{-4}\vspace{0pt}} {\contentslabel{3em}} {\hspace*{-4em}} {~\titlerule*[0.6pc]{$.$}~\contentspage} \cs_set:Npn \CTEX@addtocline #1#2 { \addcontentsline { toc } {#1} { \use:c { CTEX@#1@tocline } {#1} {#2} } } \cs_new:Npn \nju_tocpagestyle:nnn #1 #2 #3 { \newpage \hspace{0pt} \vskip 10pt \begin{center} \mbox{\songti\bf\zihao{3}{#1}} % 目录页面标题 \phantomsection \addcontentsline{toc}{chapter}{#2} % 插入目录 \end{center} \vskip 40pt \@starttoc{#3}% \cleardoublepage } \tl_set:Nn \tableofcontents { \nju_tocpagestyle:nnn {目\hspace{2em}录}{\contentsname}{toc} } \tl_set:Nn \listoffigures { \nju_tocpagestyle:nnn {\listfigurename}{\listfigurename}{lof} } \tl_set:Nn \listoftables { \nju_tocpagestyle:nnn {\listtablename}{\listtablename}{lot} } \NewDocumentEnvironment{preface}{} {% \chapter*{前言} \addcontentsline{toc}{chapter}{前言} }{} \NewDocumentEnvironment{acknowledgement}{} {% \chapter*{致谢} \addcontentsline{toc}{chapter}{致谢} }{} \RequirePackage[ style=gb7714-2015, %style=numeric-comp, %citestyle=authortitle-icomp, % citestyle=numeric-comp, %bibstyle=authoryear, % bibstyle=numeric, sorting=none, %sorting=nyt, %sortcites=true, %autocite=footnote, backend=biber, % Compile the bibliography with biber hyperref=true, backref=false, citecounter=true, pagetracker=true, citetracker=true, ibidtracker=context, autopunct=true, autocite=plain, % gbpub=false, % Uncomment if you do NOT want '[S.l. : s.n.]' % in reference entries, GitHub Issue (#47) % gbnamefmt=lowercase, % Uncomment if you do NOT want uppercase author % names in reference entries, GitHub Issue (#23) ]{biblatex} \AtEveryBibitem{ \clearfield{abstract} \clearfield{issn} \clearfield{isbn} \clearfield{archivePrefix} \clearfield{arxivId} \clearfield{pmid} \clearfield{eprint} \ifentrytype{online}{}{\ifentrytype{misc}{}{\clearfield{url}}} } \crefdefaultlabelformat{#2#1#3\,} % 默认在名称后面添加空格 \crefname{figure}{图}{图} \crefname{table}{表}{表} \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~小节} \crefname{appendix}{附录}{附录} \floatsetup[lstlisting]{ % Captions for lstlistings capposition=above,% margins=centering,% floatwidth=\textwidth% } \floatsetup[figure]{ % Captions for figures capposition=bottom,% margins=centering,% floatwidth=\textwidth% } \floatsetup[table]{ % Captions for tables capposition=above,% margins=centering,% floatwidth=\textwidth% } \lstset{ basicstyle=\ttfamily\linespread{1}\small\selectfont, keywordstyle=\bfseries,% use bold style for keywords commentstyle=\rmfamily\itshape,% use italic style for comments stringstyle=\ttfamily,% 字符串风格 flexiblecolumns,% ? numbers=left,% left-aligned numbering showspaces=false,% hide markers for spaces showstringspaces=false, captionpos=t,% place the caption at the top breaklines=true, 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} } \DeclareCaptionFont{songticap}{\zihao{5}\bf\songti} \captionsetup{ font=small,% labelfont=songticap, textfont=songticap, strut=no,% hypcap=true, % Links point to the top of the figure aboveskip=6pt, % Increase the space between the figure and the caption belowskip=6pt, % Increase the space between the caption and the table } \renewcommand{\labelitemi}{\tiny$\blacktriangleright$} \renewcommand{\labelitemii}{\textbullet} \setlist[itemize]{noitemsep} \setlist[enumerate]{noitemsep} \setlist[description]{noitemsep} \declaretheoremstyle[ %spaceabove=.5\thm@preskip, %spacebelow=.5\thm@postskip, headfont=\bf\songti,%\scshape, notefont=\songti,% notebraces={ (}{)}, bodyfont=\songti, %headformat={\NAME\space\NUMBER\space\NOTE}, headpunct={}, %postheadspace={.5em plus .1em minus .1em}, %prefoothook={\hfill\qedsymbol} ]{njuthm} \theoremstyle{njuthm} \let\oldproofname=\proofname \renewcommand*{\proofname}{\rm\bf\songti{\oldproofname}} % 修改证明环境标题 \declaretheorem[ name=算法, style=njuthm, refname={算法,算法}, Refname={算法,算法}, ]{algorithm} \declaretheorem[ name=假设, style=njuthm, refname={假设,假设}, Refname={假设,假设}, ]{assumption} \declaretheorem[ name=公理, style=njuthm, refname={公理,公理}, Refname={公理,公理}, ]{axiom} \declaretheorem[ name=结论, style=njuthm, refname={结论,结论}, Refname={结论,结论}, ]{conclusion} \declaretheorem[ name=条件, style=njuthm, refname={条件,条件}, Refname={条件,条件}, ]{condition} \declaretheorem[ name=推论, style=njuthm, refname={推论,推论}, Refname={推论,推论}, ]{corollary} \declaretheorem[ name=定义, style=njuthm, refname={定义,定义}, Refname={定义,定义}, ]{definition} \declaretheorem[ name=例, style=njuthm, refname={例,例}, Refname={例,例}, % numberwithin=section, ]{example} \declaretheorem[ name=引理, style=njuthm, refname={引理,引理}, Refname={引理,引理}, ]{lemma} \declaretheorem[ name=性质, style=njuthm, refname={性质,性质}, Refname={性质,性质}, ]{property} \declaretheorem[ name=命题, style=njuthm, refname={命题,命题}, Refname={命题,命题}, ]{proposition} \declaretheorem[ name=注解, style=njuthm, refname={注解,注解}, Refname={注解,注解}, ]{remark} \declaretheorem[ name=定理, style=njuthm, refname={定理,定理}, Refname={定理,定理}, numberwithin=section, ]{theorem} \tl_const:Nn \l__nju_info_title_tl { \l__nju_info_title_a_tl \l__nju_info_title_b_tl \l__nju_info_title_c_tl } %% \begin{variable}{\l_@@_info_supv_full_tl,\l_@@_info_supv_full_en_tl} \tl_new:N \l__nju_info_supv_full_tl \tl_new:N \l__nju_info_supv_full_en_tl \tl_set: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 } \tl_set:Nn \l__nju_info_supv_full_en_tl { \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 } \tl_new:N \c__nju_name_degree_tl \tl_new:N \c__nju_name_degree_en_tl \str_if_eq:NNTF {\l__nju_info_degree_tl} { ug } { % 本科 \tl_const:Nn \l__nju_name_diploma_tl { 本\hfill 科\hfill } \tl_const:Nn \c__nju_name_title_tl { 题\hfill 目 } \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 {} \tl_const:Nn \c__nju_cover_box_len_tl { 4.2em } % 本科强制不打印国家图书馆封面 \bool_set_false:N \g__nju_nlcover_bool } { % 本科以外都是研究生 \tl_const:Nn \l__nju_name_diploma_tl { 研\hfill 究\hfill 生\hfill } \tl_const:Nn \c__nju_name_title_tl { 论\hfill 文\hfill 题\hfill 目 } \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} } \tl_const:Nn \c__nju_cover_box_len_tl { 6em } % 研究生学位名称 \str_if_eq:NNTF { \l__nju_info_degree_tl } { phd } { \tl_set:Nn \c__nju_name_degree_tl { 博士 } \tl_set:Nn \c__nju_name_degree_en_tl { Doctor~of~Philosophy } } { \tl_set:Nn \c__nju_name_degree_en_tl { Master } \str_if_eq:NNTF { \l__nju_info_degree_tl } { mg } { \tl_set:Nn \c__nju_name_degree_tl { 硕士 } } { \tl_set: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 { \l__nju_info_type_tl } { thesis } { \tl_const:Nn \l__nju_info_type_tl_name { \l__nju_name_diploma_tl 毕\hfill 业\hfill 论\hfill 文 } } { \tl_const:Nn \l__nju_info_type_tl_name { \l__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 } \\ } } } \cs_new_protected:Npn \__nju_print_covertab: {% \str_if_eq:NNTF { \l__nju_info_degree_tl } { ug } { \begin{tabular}{p{4.2em}c} \__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_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_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_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}\\ % 第二导师 \tl_if_empty:NF \l__nju_info_supv_b_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_cover_box:n {提\hfill 交\hfill 日\hfill 期} & \__nju_cover_uline_a:n {\l__nju_submit_date_tl}\\ \end{tabular} } { \begin{tabular}{p{6em}c} \__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} } } \cs_new_protected:Npn \__nju_print_cover_nl: { \thispagestyle{empty} \pdfbookmark[0]{国家图书馆封面}{nl} { % 顶端 \hspace{0mm} \vskip -20mm \hskip -15mm \songti\zihao{-4} \makebox[40pt][l]{分类号} \__nju_cover_uline_b:n {\l__nju_info_classif_tl} \hfill \makebox[40pt][l]{密级} \__nju_cover_uline_b:n {\l__nju_info_seclv_tl} \vskip 10pt \hskip -15mm \makebox[40pt][l]{UDC} \__nju_cover_uline_b:n {\l__nju_info_udc_tl} } % 中部 \vskip\stretch{2} \begin{center} \def\ULthickness{1pt} {\kaishu\zihao{-0} 学\hspace{0.5em}位\hspace{0.5em}论\hspace{0.5em}文} { \kaishu\zihao{1} \vskip \stretch{1} \__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}(题名和副题名)} \vskip \stretch{1} \vskip 5mm {\kaishu\zihao{1}\uline{\makebox{\l__nju_info_author_tl}}} \vskip \stretch{1} {\kaishu\zihao{4}(作者姓名)} \end{center} % 底部 \vskip\stretch{1} { \kaishu\zihao{4} \noindent 指导教师姓名、职务、职称、学位、单位名称及地址% \__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}{\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}% 论文答辩日期% \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 \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 \begin{center} \kaishu\zihao{3}\hspace{2em} 年\hspace{1em} 月\hspace{1em} 日 \end{center} \vskip -10mm } \cleardoublepage } \cs_new_protected:Npn \__nju_print_cover_ug: { \thispagestyle{empty} \pagenumbering{Roman} % Start \pdfbookmark{封面}{封面} % 将封面插入pdf书签 \begin{spacing}{1.25} \vskip 0mm \hspace{-10mm} \includegraphics[height=3cm]{njulogo}\smallskip \begin{center} \includegraphics[height=3.35cm]{njuname} \vskip 10mm {\zihao{1}\makebox[9em][s]{\bf{\songti\l__nju_info_type_tl_name}}} \vfill \vskip\stretch{0} {\bgroup \kaishu\zihao{3} \def\tabcolsep{1pt} \def\arraystretch{1.5} % 绘制信息框 \__nju_print_covertab: \egroup} \vfill \end{center} \end{spacing} \cleardoublepage % \vfill % \newpage } \cs_new_protected:Npn \__nju_print_cover_g: { \thispagestyle{empty} \pagenumbering{Roman} % Start \pdfbookmark{封面}{封面} % 将封面插入pdf书签 \begin{spacing}{1.25} \begin{center} \hspace{0pt} \vskip 5mm \includegraphics[height=1.9cm]{njulogo} \vskip 10mm \includegraphics[height=2cm]{njuname-large} \vskip 15mm {\zihao{1}\makebox[10em][s]{\bf{\kaishu\l__nju_info_type_tl_name}}} \vskip 5mm {\zihao{1}\bf{\kaishu{(申请\c__nju_name_degree_tl 学位)}}} \par\vfill \vskip\stretch{0} {\bgroup \bf\kaishu\zihao{3} \def\tabcolsep{1pt} \def\arraystretch{1.5} \vskip 10mm % 绘制信息框 \__nju_print_covertab: \egroup} \vfill \vskip 10mm \bf\kaishu\zihao{4}\l__nju_submit_date_tl \vskip 15mm \end{center} \end{spacing} \newpage % 封面背面 \thispagestyle{empty} \begin{spacing}{1.625} % TODO: 等待调整格式 \hspace{0pt} \vfill {\bgroup \kaishu\zihao{3} \makebox[6em][s]{\bf\kaishu 学\hfill 号}:\MakeUppercase{\l__nju_info_id_tl} \par \makebox[6em][s]{\bf\kaishu 论文答辩日期}:\l__nju_defend_date_tl \par \makebox[6em][s]{\bf\kaishu 指\hfill 导\hfill 教\hfill 师}:\hspace{50mm}(签字) \par \egroup} \vskip 15mm \end{spacing} \cleardoublepage } \cs_new_protected:Npn \__nju_print_cover_en: { \thispagestyle{empty} \pdfbookmark{英文封面}{English~cover} % 将封面插入pdf书签 \begin{center} \vspace*{20pt} \bf\sffamily\zihao{2}\l__nju_info_title_en_tl \vskip \stretch{1} \normalfont\rmfamily\zihao{4}{by} \vskip 3pt \bf\sffamily\zihao{4}\l__nju_info_author_en_tl \vskip\stretch{1} \normalfont\rmfamily\zihao{4}{Supervised~by} \vskip 3pt \normalfont\sffamily\zihao{4}\l__nju_info_supv_a_title_en_tl \hspace{.5em}\l__nju_info_supv_a_en_tl \vskip\stretch{1} \normalsize\rmfamily{% A~dissertation~submitted~to\\ the~graduate~school~of~Nanjing~University\\ in~partial~fulfilment~of~the~requirements~for~the~degree~of\\ {\textsc{\c__nju_name_degree_en_tl}}\\ in\\ {\l__nju_major_en_tl} } \vskip\stretch{2} \includegraphics[width=2.5cm]{njulogo} \\ \vskip 3mm \normalfont\l__nju_info_dept_en_tl\\ {Nanjing~University} \vskip 30pt \normalfont\normalsize\l__nju_submit_date_en_tl \end{center} \normalfont \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: % 英文封面 } } \NewDocumentCommand \keywords {m} {% \par\vspace{2ex}\noindent% {\kaishu\zihao{-4}\makebox[4em][s]{关键词{:}}}~{#1}% } \NewDocumentCommand \englishkeywords {m} {% \par\vspace{2ex}\noindent% {KEYWORDS{:}}~~{#1}% } \str_if_eq:NNTF {\l__nju_info_degree_tl} { ug } { % 本科摘要环境 \NewDocumentEnvironment{abstract} {} {% % \pagestyle{plain} % \pagenumbering{Roman} % \phantomsection\addcontentsline{toc}{chapter}{中文摘要} % 将摘要插入目录和pdf书签 \pdfbookmark[0]{中文摘要}{中文摘要} % 将摘要插入pdf书签,与上一行不可共存 \begin{center} \kaishu\zihao{-2}{\textbf{ \uuline{南京大学本科生毕业论文(设计、作品)中文摘要}}} \end{center} {\bgroup \kaishu\zihao{-4} \tl_set:Nn \tabcolsep {0pt} \tl_set:Nn \arraystretch {0.8} \noindent 题目: \l__nju_info_title_tl \\ 院系: \l__nju_info_dept_tl \\ 专业: \l__nju_major_tl \\ 本科生姓名: \l__nju_info_author_tl \\ 指导教师(姓名、职称):\l__nju_info_supv_full_tl \\ 摘要: \egroup } \kaishu\zihao{-4}\par% }{% \newpage } % 英文摘要 \NewDocumentEnvironment{englishabstract} {} {% \pagestyle{plain} % \phantomsection\addcontentsline{toc}{chapter}{英文摘要} % 将摘要插入目录和pdf书签 \pdfbookmark[0]{英文摘要}{英文摘要} % 将摘要插入pdf书签,与上一行不可共存 \begin{center} \kaishu\zihao{-2}{\textbf{\uuline{ 南京大学本科生毕业论文(设计、作品)英文摘要}}} \end{center} { \bgroup THESIS: ~~\l__nju_info_title_en_tl \\ DEPARTMENT: ~~\l__nju_info_dept_en_tl \\ SPECIALIZATION: ~~\l__nju_major_en_tl \\ UNDERGRADUATE:~~\l__nju_info_author_en_tl \\ MENTOR:~~\l__nju_info_supv_full_en_tl \\ ABSTRACT: \egroup } \zihao{-4}\par% }{% \cleardoublepage \newpage } } { % 研究生摘要环境 \NewDocumentEnvironment{abstract} {} {% \pagestyle{plain} \pagenumbering{Roman} % \phantomsection\addcontentsline{toc}{chapter}{中文摘要} % 将摘要插入目录和pdf书签 \pdfbookmark[0]{中文摘要}{中文摘要} % 将摘要插入pdf书签,与上一行不可共存 \begin{center} \kaishu\zihao{-2}{\textbf{\uuline{ 南京大学研究生毕业论文中文摘要首页用纸}}} \end{center} \bgroup \kaishu\zihao{4} \tl_set:Nn \tabcolsep {0pt} \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}}级 \str_if_eq:NNTF {\l__nju_info_degree_tl} { phd } {博}{硕} 士生姓名:\uline{\hfill\l__nju_info_author_tl\hfill} \\ 指导教师(姓名、职称):\uline{\hfill\l__nju_info_supv_full_tl\hfill}\par \egroup \kaishu\zihao{4}\par% }{% \newpage } % 英文摘要 \NewDocumentEnvironment{englishabstract} {} {% \pagestyle{plain} % \phantomsection\addcontentsline{toc}{chapter}{英文摘要} % 将摘要插入目录和pdf书签 \pdfbookmark[0]{英文摘要}{英文摘要} % 将摘要插入pdf书签,与上一行不可共存 \begin{center} \kaishu\zihao{-2}{\textbf{\uuline{ 南京大学研究生毕业论文英文摘要首页用纸}}} \end{center} { \bgroup \zihao{4} THESIS: ~~\l__nju_info_title_en_tl \\ SPECIALIZATION: ~~\l__nju_major_en_tl \\ POSTGRADUATE:~~\l__nju_info_author_en_tl \\ MENTOR:~~\l__nju_info_supv_full_en_tl\par \egroup } \zihao{4}\par% }{% \cleardoublepage \newpage } } \endinput %% %% End of file `njuthesis.cls'.