% \iffalse meta-comment % % Copyright (C) 2005-2021 by Nanjing University Linux User Group <my@yaoge123.com> % ------------------------------------------------------- % % 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. % % \fi % % \iffalse %<*driver> \ProvidesFile{njuthesis.dtx} %</driver> %<class>\NeedsTeXFormat{LaTeX2e} %<class>\ProvidesExplClass{njuthesis}{2021-09-12}{0.8.3}{NJU Thesis LaTeX Template} % %<*driver> \documentclass{ltxdoc} \usepackage{dtx-style} \EnableCrossrefs \CodelineIndex \begin{document} \DocInput{njuthesis.dtx} \end{document} %</driver> % \fi % % \CheckSum{0} % % \CharacterTable % {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z % Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z % Digits \0\1\2\3\4\5\6\7\8\9 % Exclamation \! Double quote \" Hash (number) \# % Dollar \$ Percent \% Ampersand \& % Acute accent \' Left paren \( Right paren \) % Asterisk \* Plus \+ Comma \, % Minus \- Point \. Solidus \/ % Colon \: Semicolon \; Less than \< % Equals \= Greater than \> Question mark \? % Commercial at \@ Left bracket \[ Backslash \\ % Right bracket \] Circumflex \^ Underscore \_ % Grave accent \` Left brace \{ Vertical bar \| % Right brace \} Tilde \~} % % % \DoNotIndex{\newenvironment,\@bsphack,\@empty,\@esphack,\sfcode} % \DoNotIndex{\addtocounter,\label,\let,\linewidth,\newcounter} % \DoNotIndex{\noindent,\normalfont,\par,\parskip,\phantomsection} % \DoNotIndex{\providecommand,\ProvidesPackage,\refstepcounter} % \DoNotIndex{\RequirePackage,\setcounter,\setlength,\string,\strut} % \DoNotIndex{\textbackslash,\texttt,\ttfamily,\usepackage} % \DoNotIndex{\begin,\end,\begingroup,\endgroup,\par,\\} % \DoNotIndex{\if,\ifx,\ifdim,\ifnum,\ifcase,\else,\or,\fi} % \DoNotIndex{\let,\def,\xdef,\edef,\newcommand,\renewcommand} % \DoNotIndex{\expandafter,\csname,\endcsname,\relax,\protect} % \DoNotIndex{\Huge,\huge,\LARGE,\Large,\large,\normalsize} % \DoNotIndex{\small,\footnotesize,\scriptsize,\tiny} % \DoNotIndex{\normalfont,\bfseries,\slshape,\sffamily,\interlinepenalty} % \DoNotIndex{\textbf,\textit,\textsf,\textsc} % \DoNotIndex{\hfil,\par,\hskip,\vskip,\vspace,\quad} % \DoNotIndex{\centering,\raggedright,\ref} % \DoNotIndex{\c@secnumdepth,\@startsection,\@setfontsize} % \DoNotIndex{\ ,\@plus,\@minus,\p@,\z@,\@m,\@M,\@ne,\m@ne} % \DoNotIndex{\@@par,\DeclareOperation,\RequirePackage,\LoadClass} % \DoNotIndex{\AtBeginDocument,\AtEndDocument} % % % \changes{v0.8.3}{2021/09/12}{Initial docstrip version} % % \GetFileInfo{njuthesis.dtx} % % \def\indexname{索引} % \IndexPrologue{\section{\indexname}} % % \title{南京大学学位论文模板} % \author{Nanjing University Linux User Group \\[5pt]\texttt{my@yaoge123.com}} % \date{v\fileversion\ (\filedate)} % \maketitle\thispagestyle{empty} % % \section{Introduction} % % Put text here. % % \section{Usage} % % Put text here. % \begin{macrocode} \LoadClass[ a4paper, twoside, UTF8, scheme=chinese, linespread=1.625,% laTex默认1.2行距,word默认行距是1.3,要求1.5倍word行距,故1.5/1.2*1.3 = 1.625 fontset=none, zihao=-4 ]{ctexbook}[2018/04/01] % \end{macrocode} % % Put text here. % \begin{macrocode} \RequirePackage{l3keys2e} % \end{macrocode} % % \DescribeMacro{\dummyMacro} % This macro does nothing.\index{doing nothing|usage} It is merely an % example. If this were a real macro, you would put a paragraph here % describing what the macro is supposed to do, what its mandatory and % optional arguments are, and so forth. % \begin{macrocode} \keys_define:nn { nju } { titlelength .int_set:N = \nju_titlelength, titlelength .initial:n = 1, secondmentor .bool_set:N = \nju_second_mentor, secondmentor .initial:n = false, nlcover .bool_set:N = \nju_nl_cover, nlcover .initial:n = false, degree .tl_set:N = \nju_degree, degree .initial:n = UG, type .tl_set:N = \nju_type, type .initial:n = thesis, systemfont .bool_set:N = \nju_systemfont, systemfont .initial:n = true, customlatinfont .tl_set:N = \nju_customlatinfont, customlatinfont .initial:n = windows, customchinesefont .tl_set:N = \nju_customchinesefont, customchinesefont .initial:n = windows, info .meta:nn = { nju / info } { #1 } } % \end{macrocode} % % Put text here. % % \begin{macrocode} \keys_define:nn { nju / info } { % 题目 TitleA .tl_set:N = \nju_title_a, TitleB .tl_set:N = \nju_title_b, TitleC .tl_set:N = \nju_title_c, TitleEN .tl_set:N = \nju_title_en, % 年级学号姓名 Grade .tl_set:N = \nju_grade, StudentID .tl_set:N = \nju_student_id, StudentName .tl_set:N = \nju_student_name, StudentNameEN .tl_set:N = \nju_student_name_en, % 院系专业方向 Department .tl_set:N = \nju_department, DepartmentEN .tl_set:N = \nju_department_en, Major .tl_set:N = \nju_major, MajorEN .tl_set:N = \nju_major_en, Field .tl_set:N = \nju_field, FieldEN .tl_set:N = \nju_field_en, % 导师 MentorA .tl_set:N = \nju_mentor_a, MentorAEN .tl_set:N = \nju_mentor_a_en, MentorATitle .tl_set:N = \nju_mentor_a_title, MentorATitleEN .tl_set:N = \nju_mentor_a_title_en, % 第二导师 MentorB .tl_set:N = \nju_mentor_b, MentorBEN .tl_set:N = \nju_mentor_b_en, MentorBTitle .tl_set:N = \nju_mentor_b_title, MentorBTitleEN .tl_set:N = \nju_mentor_b_title_en, % 提交日期 SubmitDate .tl_set:N = \nju_submit_date, % 答辩 DefendDate .tl_set:N = \nju_defend_date, ReviewerChairman .tl_set:N = \nju_reviewer_chairman, ReviewerA .tl_set:N = \nju_reviewer_a, ReviewerB .tl_set:N = \nju_reviewer_b, ReviewerC .tl_set:N = \nju_reviewer_c, ReviewerD .tl_set:N = \nju_reviewer_d, % 国家图书馆封面相关 Classification .tl_set:N = \nju_classification, SecurityLevel .tl_set:N = \nju_securitylevel, UDC .tl_set:N = \nju_udc, MentorInfo .tl_set:N = \nju_mentor_info, } % \end{macrocode} % % \DescribeEnv{dummyEnv} % This environment does nothing. It is merely an example. % If this were a real environment, you would put a paragraph here % describing what the environment is supposed to do, what its % mandatory and optional arguments are, and so forth. % \begin{macrocode} \NewDocumentCommand \njusetup { m } { \keys_set:nn { nju } { #1 } } % \end{macrocode} % mandatory and optional arguments are, and so forth. % \begin{macrocode} \ProcessKeysOptions { nju } % \end{macrocode} % % mandatory and optional arguments are, and so forth. % \begin{macrocode} \RequirePackage{expl3} \RequirePackage{fontspec} \RequirePackage[ top=2.5cm, bottom=2.5cm, left=3.2cm, right=3.2cm ]{geometry} % \RequirePackage{ifthen} \RequirePackage{xparse} % \RequirePackage{etoolbox} % \RequirePackage{titlesec} % 修改章节标题功能由CTeX提供 \RequirePackage{titletoc} % 修改目录内标题格式 % \RequirePackage{appendix} % 定义附录样式 \RequirePackage{fancyhdr} % 调整页眉页脚 \RequirePackage[hyphens]{url} % generate better linebreaks in the url % \RequirePackage[normalem]{ulem} % 绘制下划线 % \RequirePackage{soul} % 用不起来 % \RequirePackage{soulutf8} \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} % 用于生成可以被插入书签的LaTeX logo % \RequirePackage{needspace} % Required to prevent page break right after a sectioning command % \RequirePackage{xspace} % Better print trailing whitespace \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{showframe} % 加载以后展示内容边界 \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{varioref} \RequirePackage[hidelinks,bookmarksnumbered=true]{hyperref} \RequirePackage[capitalise,nameinlink,noabbrev]{cleveref} % \end{macrocode} % % and so forth. % \begin{macrocode} % 设置西文字体 \NewDocumentCommand\set_latin_fontset_windows{}{ \setmainfont{Times~New~Roman} \setsansfont{Arial} \setmonofont{Courier~New}[Scale=MatchLowercase] } \NewDocumentCommand\set_latin_fontset_macos{}{ \setmainfont{Times~New~Roman} \setsansfont{Arial} \setmonofont{Menlo}[Scale=MatchLowercase] } \NewDocumentCommand\set_latin_fontset_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] } % 设置中文字体 \NewDocumentCommand\set_chinese_fontset_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] } \NewDocumentCommand\set_chinese_fontset_macos{}{ \msg_redirect_name:nnn {fontspec} {no-script} {info} % 移除 does not contain script "CJK" 警告 \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, % 参考CTeX手册第9节 LuaLATEX 下的中文支持方式 % AlternateFont = % { % {⟨character range1⟩} {⟨alternate font name1⟩} % {⟨alternate font features2⟩} , % ...... % } ] \setCJKfamilyfont{zhnewhei}{PingFang~SC} } \NewDocumentCommand\set_chinese_fontset_fandol{}{ \msg_redirect_name:nnn {fontspec} {no-script} {info} % 移除 does not contain script "CJK" 警告 \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] } % 方正字符集 \NewDocumentCommand\set_chinese_fontset_founder{}{ % FZSSK 方正书宋(简繁扩展) http://www.foundertype.com/index.php/FontInfo/index/id/151 免费商用 % FZXBSK 方正小标宋(简繁扩展) http://www.foundertype.com/index.php/FontInfo/index/id/164 设计师非商免费 % FZKTK 方正楷体(简繁扩展) http://www.foundertype.com/index.php/FontInfo/index/id/137 免费商用 \setCJKmainfont{FZSSK}[ Extension=.ttf, BoldFont=FZXBSK, ItalicFont=FZKTK] % FZXH1K 方正细黑一(简繁扩展) http://www.foundertype.com/index.php/FontInfo/index/id/161 设计师非商免费 % FZHTK 方正黑体(简繁扩展) http://www.foundertype.com/index.php/FontInfo/index/id/131 免费商用 \setCJKsansfont{FZXH1K}[ Extension=.ttf, BoldFont=FZHTK] % FZFSK 方正仿宋(简繁扩展) http://www.foundertype.com/index.php/FontInfo/index/id/128 \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] % FZYouHK_508R 方正悠黑508R(简繁扩展) http://www.foundertype.com/index.php/FontInfo/index/id/244 设计师非商免费 % FZYouHK_511M 方正悠黑511M(简繁扩展) http://www.foundertype.com/index.php/FontInfo/index/id/244 设计师非商免费 \setCJKfamilyfont{zhnewhei}{FZYouHK_508R}[ Extension=.ttf, BoldFont=FZYouHK_511M] } \NewDocumentCommand\set_chinese_fontset_noto{}{ % 思源宋体 https://www.google.com/get/noto/#serif-hans \setCJKmainfont[ UprightFont=NotoSerifCJKsc-Regular, BoldFont=NotoSerifCJKsc-Bold, ItalicFont=NotoSerifCJKsc-Regular, BoldItalicFont=NotoSerifCJKsc-Bold, ItalicFeatures=FakeSlant, BoldItalicFeatures=FakeSlant]{Noto~Serif~CJK~SC} % 思源黑体 https://www.google.com/get/noto/#sans-hans \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} % 方正楷体、方正仿宋为免费商用字体,且支持CJK字符集 % 方正仿宋 http://www.foundertype.com/index.php/FontInfo/index/id/128.html % 方正楷体 http://www.foundertype.com/index.php/FontInfo/index/id/137.html \setCJKfamilyfont{zhfs}{方正仿宋简体}[AutoFakeBold=2.17] \setCJKfamilyfont{zhkai}{方正楷体简体}[AutoFakeBold=2.17] } % 字体判断 \bool_if:NTF \nju_systemfont % 根据操作系统自动选择相应字体 { % 检测是否是 Windows \sys_if_platform_windows:TF { \set_latin_fontset_windows \set_chinese_fontset_windows } { % 检测是否是 macOS \ctex_if_platform_macos:TF { \set_latin_fontset_macos \set_chinese_fontset_macos } % 其余系统一律使用自由字体 { \set_latin_fontset_gyre \set_chinese_fontset_fandol } } } { % 如果用户需要自定义字体 % 此处需要使用\str_case_e而不是\str_case使宏展开为字符串 \str_case_e:nn { \nju_customlatinfont } { { windows } { \set_latin_fontset_windows } { macos } { \set_latin_fontset_macos } { gyre } { \set_latin_fontset_gyre } { null } {} } \str_case_e:nn { \nju_customchinesefont } { { windows } { \set_chinese_fontset_windows } { macos } { \set_chinese_fontset_macos } { gyre } { \set_chinese_fontset_gyre } { founder } { \set_chinese_fontset_founder } { noto } { \set_chinese_fontset_noto } { null } {} } } % 选择其他字体,请确保相应字体已安装 % 设置数学字体 (XITS, 或者 STIX, 与 Times New Roman 最为相近) % \setmathfont{STIXTwoMath-Regular}[Extension = .otf] \setmathfont{XITSMath-Regular}[ BoldFont = XITSMath-Bold, Extension = .otf] \NewDocumentCommand\songti{}{\CJKfamily{zhsong}} \NewDocumentCommand\heiti{}{\CJKfamily{zhhei}} \NewDocumentCommand\fangsong{}{\CJKfamily{zhfs}} \NewDocumentCommand\kaishu{}{\CJKfamily{zhkai}} % \NewDocumentCommand\lishu{}{\CJKfamily{zhli}} % 本科生页眉页脚 \fancypagestyle{njuplain}{% \fancyhead{} \fancyfoot[C]{\zihao{5}\thepage} % 页脚居中 五号新罗马体数字 } % TODO: 研究生页眉页脚 \fancypagestyle{njuheadings}{% \fancyhead{} \fancyfoot[C]{\zihao{5}\thepage} } \str_if_eq:NNTF {\nju_degree} { 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}} % 研究生有页眉页脚 } % ctex格式设置 % 目录标题 三号宋体加粗 % 各部分标题 四号黑体 \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} } % 定制前言、致谢环境 \newenvironment{preface} {% \chapter*{前言} \addcontentsline{toc}{chapter}{前言} }{} \newenvironment{acknowledgement} {% \chapter*{致谢} \addcontentsline{toc}{chapter}{致谢} }{} \ProvidesExplPackage{profile/reference}{2021-09-11}{0.6.0}{NJU Thesis bibliography and reference} % biblatex设置 \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} % Remove some unwanted entries from the bibliography \AtEveryBibitem{ \clearfield{abstract} \clearfield{issn} \clearfield{isbn} \clearfield{archivePrefix} \clearfield{arxivId} \clearfield{pmid} \clearfield{eprint} \ifentrytype{online}{}{\ifentrytype{misc}{}{\clearfield{url}}} % \ifentrytype{book}{\clearfield{doi}}{} } % 修改标签名称 \crefdefaultlabelformat{#2#1#3\,} % 默认在名称后面添加空格 \crefname{figure}{图}{图} \crefname{table}{表}{表} % \crefname{equation}{公式}{公式} \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{chapter}{§}{§} % \crefname{section}{§}{§} % \crefname{subsection}{§}{§} % \crefname{subsubsection}{§}{§} \crefname{appendix}{附录}{附录} % \crefname{definition}{定义}{定义} % \crefname{axiom}{公理}{公理} % \crefname{property}{性质}{性质} % \crefname{proposition}{命题}{命题} % \crefname{lemma}{引理}{引理} % \crefname{corollary}{推论}{推论} % \crefname{remark}{注解}{注解} % \crefname{condition}{条件}{条件} % \crefname{conclusion}{结论}{结论} % \crefname{assumption}{假设}{假设} \ProvidesExplPackage{profile/components}{2021-09-11}{0.6.0}{NJU Thesis components configuration} % 图表位置调整 \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 % frame=lrtb,% show all four sides of the frame % linewidth=.8\textwidth, % breakatwhitespace=true, 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 % indention=0pt, % Suppress indentation % % parindent=0pt, % Suppress space between paragraphs aboveskip=6pt, % Increase the space between the figure and the caption belowskip=6pt, % Increase the space between the caption and the table } % list configuration \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={算法,算法}, % numberwithin=section, ]{algorithm} \declaretheorem[ name=假设, style=njuthm, refname={假设,假设}, Refname={假设,假设}, % numberwithin=section, ]{assumption} \declaretheorem[ name=公理, style=njuthm, refname={公理,公理}, Refname={公理,公理}, % numberwithin=section, ]{axiom} \declaretheorem[ name=结论, style=njuthm, refname={结论,结论}, Refname={结论,结论}, % numberwithin=section, ]{conclusion} \declaretheorem[ name=条件, style=njuthm, refname={条件,条件}, Refname={条件,条件}, % numberwithin=section, ]{condition} \declaretheorem[ name=推论, style=njuthm, refname={推论,推论}, Refname={推论,推论}, % numberwithin=section, ]{corollary} \declaretheorem[ name=定义, style=njuthm, refname={定义,定义}, Refname={定义,定义}, % numberwithin=section, ]{definition} \declaretheorem[ name=例, style=njuthm, refname={例,例}, Refname={例,例}, % numberwithin=section, ]{example} \declaretheorem[ name=引理, style=njuthm, refname={引理,引理}, Refname={引理,引理}, % numberwithin=section, ]{lemma} \declaretheorem[ name=性质, style=njuthm, refname={性质,性质}, Refname={性质,性质}, % numberwithin=section, ]{property} \declaretheorem[ name=命题, style=njuthm, refname={命题,命题}, Refname={命题,命题}, % numberwithin=section, ]{proposition} \declaretheorem[ name=注解, style=njuthm, refname={注解,注解}, Refname={注解,注解}, % numberwithin=section, ]{remark} \declaretheorem[ name=定理, style=njuthm, refname={定理,定理}, Refname={定理,定理}, numberwithin=section, ]{theorem} \ProvidesExplPackage{profile/cover}{2021-09-11}{0.7.0}{NJU Thesis cover design} % 拼合标题 \tl_const:Nn \nju_title {\nju_title_a \nju_title_b \nju_title_c} % 拼合导师 \bool_if:NTF \nju_second_mentor { \tl_const:Nn \nju_mentor_full { \nju_mentor_a\ \nju_mentor_a_title \ \ \nju_mentor_b\ \nju_mentor_b_title } \tl_const:Nn \nju_mentor_full_en { \nju_mentor_a_en\ \nju_mentor_a_title_en \ \ \nju_mentor_b_en\ \nju_mentor_b_title_en } } { \tl_const:Nn \nju_mentor_full { \nju_mentor_a\ \nju_mentor_a_title } \tl_const:Nn \nju_mentor_full_en { \nju_mentor_a_en\ \nju_mentor_a_title_en } } % 判断学位进行命令定义 \str_if_eq:NNTF {\nju_degree} { ug } { % 本科 \tl_const:Nn \nju_degree_name {本\hfill 科\hfill } % 本科强制不打印国家图书馆封面 \bool_set_false:N \nju_nl_cover % 封面下划线 \cs_new:Npn \nju_cover_underline_ug:nn #1 #2 { \uline{\makebox[#1]{\rm\songti#2}} } % 封面表格边框 \cs_new:Npn \nju_coverbox_ug:n #1 { \makebox[4.2em][s]{#1} } } { % 本科以外都是研究生 \tl_const:Nn \nju_degree_name {研\hfill 究\hfill 生\hfill } % 封面下划线 \cs_new:Npn \nju_cover_underline_g:n #1 { \uline{\makebox[250pt]{\rm\kaishu#1}} } % 国家图书馆封面下划线 \cs_new:Npn \nju_cover_underline_nl:nn #1 #2 { \uline{\makebox[#1]{#2}} } % 封面表格边框 \cs_new:Npn \nju_coverbox_g:n #1 { \makebox[6em][s]{#1\hspace{1em}} } % 研究生学位分类 \str_case:Nn { \nju_degree } { { mg } { \tl_const:Nn \nju_degree_title {硕士} } { mf } { \tl_const:Nn \nju_degree_title {硕士专业} } { phd } { \tl_const:Nn \nju_degree_title {博士} } } } % 判断类型 \str_if_eq:NNTF {\nju_type} {thesis} { \tl_const:Nn \nju_type_name { \nju_degree_name 毕\hfill 业\hfill 论\hfill 文 } } { \tl_const:Nn \nju_type_name { \nju_degree_name 毕\hfill 业\hfill 设\hfill 计 } } % 封面信息栏 本科 \tl_new:N \nju_printcoverinfo_ug \tl_set:Nn \nju_printcoverinfo_ug { \begin{tabular}{p{4.2em}c} \nju_coverbox_ug:n {院\hfill 系} & \nju_cover_underline_ug:nn {250pt}{\nju_department}\\ \nju_coverbox_ug:n {专\hfill 业} & \nju_cover_underline_ug:nn {250pt}{\nju_major}\\ % 标题换行 \int_case:nn { \nju_titlelength } { { 1 } { \nju_coverbox_ug:n {题\hfill 目} & \nju_cover_underline_ug:nn {250pt}{\bf{\nju_title_a}} \\ } { 2 } { \nju_coverbox_ug:n {题\hfill 目} & \nju_cover_underline_ug:nn {250pt}{\bf{\nju_title_a}} \\ & \nju_cover_underline_ug:nn {250pt}{\bf{\nju_title_b}} \\ } { 3 } { \nju_coverbox_ug:n {题\hfill 目} & \nju_cover_underline_ug:nn {250pt}{\bf{\nju_title_a}} \\ & \nju_cover_underline_ug:nn {250pt}{\bf{\nju_title_b}} \\ & \nju_cover_underline_ug:nn {250pt}{\bf{\nju_title_c}} \\} } \end{tabular}\\ \begin{tabular}{p{4.2em}cp{4.2em}c} \nju_coverbox_ug:n {年\hfill 级} & \nju_cover_underline_ug:nn {90pt}{\nju_grade} & \nju_coverbox_ug:n {学\hfill 号} & \nju_cover_underline_ug:nn {90pt}{\nju_student_id}\\ \end{tabular}\\ \begin{tabular}{p{4.2em}c} \nju_coverbox_ug:n {学\hfill 生\hfill 姓\hfill 名} & \nju_cover_underline_ug:nn {250pt}{\nju_student_name} \end{tabular}\\ \begin{tabular}{p{4.2em}cp{4.2em}c} \nju_coverbox_ug:n {导\hfill 师} & \nju_cover_underline_ug:nn {90pt}{\nju_mentor_a} & \nju_coverbox_ug:n {职\hfill 称} & \nju_cover_underline_ug:nn {90pt}{\nju_mentor_a_title}\\ % 第二导师 \bool_if:NT \nju_second_mentor { \nju_coverbox_ug:n {第\hfill 二\hfill 导\hfill 师} & \nju_cover_underline_ug:nn {90pt}{\nju_mentor_b} & \nju_coverbox_ug:n {职\hfill 称} & \nju_cover_underline_ug:nn {90pt}{\nju_mentor_b_title}\\ } \end{tabular}\\ \begin{tabular}{p{4.2em}c} \nju_coverbox_ug:n {提\hfill 交\hfill 日\hfill 期} & \nju_cover_underline_ug:nn {250pt}{\nju_submit_date}\\ \end{tabular} } % 封面信息栏 研究生 \tl_new:N \nju_printcoverinfo_g \tl_set:Nn \nju_printcoverinfo_g { \begin{tabular}{p{6em}c} % 标题换行 \int_case:nn {\nju_titlelength} { { 1 } { \nju_coverbox_g:n {论\hfill 文\hfill 题\hfill 目} & \nju_cover_underline_g:n {\nju_title_a} \\ } { 2 } { \nju_coverbox_g:n {论\hfill 文\hfill 题\hfill 目} & \nju_cover_underline_g:n {\nju_title_a} \\ & \nju_cover_underline_g:n {\nju_title_b} \\ } { 3 } { \nju_coverbox_g:n {论\hfill 文\hfill 题\hfill 目} & \nju_cover_underline_g:n {\nju_title_a} \\ & \nju_cover_underline_g:n {\nju_title_b} \\ & \nju_cover_underline_g:n {\nju_title_c} \\} } \nju_coverbox_g:n {作\hfill 者\hfill 姓\hfill 名} & \nju_cover_underline_g:n {\nju_student_name}\\ \nju_coverbox_g:n {专\hfill 业\hfill 名\hfill 称} & \nju_cover_underline_g:n {\nju_major}\\ \nju_coverbox_g:n {研\hfill 究\hfill 方\hfill 向} & \nju_cover_underline_g:n {\nju_field}\\ \nju_coverbox_g:n {指\hfill 导\hfill 教\hfill 师} & \nju_cover_underline_g:n {\nju_mentor_full}\\ \end{tabular} } % 绘制封面命令 \tl_new:N \nju_printcover_nl % 国家图书馆封面 \tl_new:N \nju_printcover_ug % 本科封面 \tl_new:N \nju_printcover_g % 研究生封面 % 按需绘制国家图书馆封面,修改自旧模板 \bool_if:NT \nju_nl_cover { \tl_set:Nn \nju_printcover_nl { \thispagestyle{empty} \pdfbookmark[0]{国家图书馆封面}{nl} { % 顶端 \hspace{0mm} \vskip -20mm \hskip -15mm \songti\zihao{-4} \makebox[40pt][l]{分类号} \nju_cover_underline_nl:nn {150pt}{\nju_classification} \hfill \makebox[40pt][l]{密级} \nju_cover_underline_nl:nn {150pt}{\nju_securitylevel} \vskip 10pt \hskip -15mm \makebox[40pt][l]{UDC} \nju_cover_underline_nl:nn {150pt}{\nju_udc} } % 中部 \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_underline_nl:nn {14em}{\nju_title_a}\\ \nju_cover_underline_nl:nn {14em}{\nju_title_b}\\ \nju_cover_underline_nl:nn {14em}{\nju_title_c}\\ } \vskip \stretch{1} {\kaishu\zihao{4}(题名和副题名)} \vskip \stretch{1} \vskip 5mm {\kaishu\zihao{1}\uline{\makebox{\nju_student_name}}} \vskip \stretch{1} {\kaishu\zihao{4}(作者姓名)} \end{center} % 底部 \vskip\stretch{1} { \kaishu\zihao{4} \noindent 指导教师姓名、职务、职称、学位、单位名称及地址% \nju_cover_underline_nl:nn {94pt}{\nju_mentor_a}\par \noindent\nju_cover_underline_nl:nn {\textwidth}{% \nju_mentor_info}\par \noindent 申请学位级别% \nju_cover_underline_nl:nn {9em}{\nju_degree_title}% \noindent 专业名称% \uline{\hfill\nju_major\hfill}\par% 需要调整下划线长度 \noindent 论文提交日期% \nju_cover_underline_nl:nn {9em}{\nju_submit_date}% 论文答辩日期% \uline{\hfill\nju_defend_date\hfill}\par% 需要调整下划线长度 \noindent 学位授予单位和日期\uline{\hfill}\par \noindent\hfill 答辩委员会主席:% \nju_cover_underline_nl:nn {9em}{\nju_reviewer_chairman}\par \noindent\hfill 评阅人:% \nju_cover_underline_nl:nn {9em}{\nju_reviewer_a}\par \noindent\hfill\nju_cover_underline_nl:nn {9em}{\nju_reviewer_b}\par \noindent\hfill\nju_cover_underline_nl:nn {9em}{\nju_reviewer_c}\par \noindent\hfill\nju_cover_underline_nl:nn {9em}{\nju_reviewer_d}\par \begin{center} \kaishu\zihao{3}\hspace{2em} 年\hspace{1em} 月\hspace{1em} 日 \end{center} \vskip -10mm } \cleardoublepage } } % 本科封面 \tl_set:Nn \nju_printcover_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\nju_type_name}}} \vfill \vskip\stretch{0} {\bgroup \kaishu\zihao{3} \def\tabcolsep{1pt} \def\arraystretch{1.5} \nju_printcoverinfo_ug % 绘制信息框 \egroup} \vfill \end{center} \end{spacing} \cleardoublepage % \vfill % \newpage } % 研究生封面 \tl_set:Nn \nju_printcover_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\nju_type_name}}} \vskip 5mm {\zihao{1}\bf{\kaishu{(申请\nju_degree_title 学位)}}} \par\vfill \vskip\stretch{0} {\bgroup \bf\kaishu\zihao{3} \def\tabcolsep{1pt} \def\arraystretch{1.5} \vskip 10mm \nju_printcoverinfo_g % 绘制信息框 \egroup} \vfill \vskip 10mm \bf\kaishu\zihao{4}\nju_submit_date \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{\nju_student_id} \par \makebox[6em][s]{\bf\kaishu 论文答辩日期}:\nju_defend_date \par \makebox[6em][s]{\bf\kaishu 指\hfill 导\hfill 教\hfill 师}:\hspace{50mm}(签字) \par \egroup} \vskip 15mm \end{spacing} \cleardoublepage } % 重定义maketitle生成封面 \tl_set:Nn \maketitle {% \str_if_eq:NNTF { \nju_degree } { ug } { \nju_printcover_nl % 国家图书馆封面 \nju_printcover_ug % 本科封面 } { \nju_printcover_nl % 国家图书馆封面 \nju_printcover_g % 研究生封面 } } \ProvidesExplPackage{profile/abstract}{2021-09-11}{0.7.0}{NJU Thesis abstract design} % 判断学位 \str_if_eq:NNTF {\nju_degree} { 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 题目: \nju_title \\ 院系: \nju_department \\ 专业: \nju_major \\ 本科生姓名: \nju_student_name \\ 指导教师(姓名、职称):\nju_mentor_full \\ 摘要: \egroup } \kaishu\zihao{-4}\par% }{% \newpage } % 中文关键词 \NewDocumentCommand \keywords {m} {% \par\vspace{2ex}\noindent% {\kaishu\zihao{-4}\makebox[4em][s]{关键词{:}}}~{#1}% } % 英文摘要 \NewDocumentEnvironment{englishabstract} {} {% \pagestyle{plain} % \phantomsection\addcontentsline{toc}{chapter}{英文摘要} % 将摘要插入目录和pdf书签 \pdfbookmark[0]{英文摘要}{英文摘要} % 将摘要插入pdf书签,与上一行不可共存 \begin{center} \kaishu\zihao{-2}{\textbf{\uuline{南京大学本科生毕业论文(设计、作品)英文摘要}}} \end{center} { \bgroup THESIS: ~~\nju_title_en \\ DEPARTMENT: ~~\nju_department_en \\ SPECIALIZATION: ~~\nju_major_en \\ UNDERGRADUATE:~~\nju_student_name_en \\ MENTOR:~~\nju_mentor_full_en \\ ABSTRACT: \egroup } \zihao{-4}\par% }{% \cleardoublepage \newpage } % 英文关键词 \NewDocumentCommand \englishkeywords {m} {% \par\vspace{2ex}\noindent% {KEYWORDS{:}}~~{#1}% } } { % 研究生摘要环境 \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 {\nju_title\hfill}\\ \uline{\makebox[9em]{\nju_major}}专业\uline{\makebox[4em]{\nju_grade}}级 \str_if_eq:NNTF {\nju_degree} { phd } {博}{硕} 士生姓名:\uline{\hfill\nju_student_name\hfill} \\ 指导教师(姓名、职称):\uline{\hfill\nju_mentor_full\hfill}\par \egroup \kaishu\zihao{4}\par% }{% \newpage } % 中文关键词 \NewDocumentCommand \keywords {m} {% \par\vspace{2ex}\noindent% {\kaishu\zihao{4}\makebox[4em][s]{关键词{:}}}~{#1}% } % 英文摘要 \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: ~~\nju_title_en \\ SPECIALIZATION: ~~\nju_major_en \\ POSTGRADUATE:~~\nju_student_name_en \\ MENTOR:~~\nju_mentor_full_en\par \egroup } \zihao{4}\par% }{% \cleardoublepage \newpage } % 英文关键词 \NewDocumentCommand \englishkeywords {m} {% \par\vspace{2ex}\noindent% {KEYWORDS{:}}~~{#1}% } } % \end{macrocode} % % \Finale \endinput