From e0c6872cf40896c7be36b11dcc744620f10adf1d Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Mon, 2 Sep 2019 13:46:59 +0900 Subject: Initial commit --- macros/latex/contrib/njurepo/njurepo.dtx | 2335 ++++++++++++++++++++++++++++++ 1 file changed, 2335 insertions(+) create mode 100644 macros/latex/contrib/njurepo/njurepo.dtx (limited to 'macros/latex/contrib/njurepo/njurepo.dtx') diff --git a/macros/latex/contrib/njurepo/njurepo.dtx b/macros/latex/contrib/njurepo/njurepo.dtx new file mode 100644 index 0000000000..a5256d3bab --- /dev/null +++ b/macros/latex/contrib/njurepo/njurepo.dtx @@ -0,0 +1,2335 @@ +% \iffalse meta-comment +% +% Copyright (C) 2019 by Zangwei Zheng +% +% This file may be distributed and/or modified under the conditions of +% 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: +% +% http://www.latex-project.org/lppl.txt +% +% and version 1.3c or later is part of all distributions of LaTeX +% version 2005/12/01 or later. +% +% \fi +% +% \iffalse +%<*driver> +\ProvidesFile{njurepo.dtx}[2019/01/29 1.1.2 Nanjing University Report Template] +\documentclass{ltxdoc} +\usepackage{dtx-style} + \EnableCrossrefs + \CodelineIndex + \RecordChanges +\begin{document} + \DocInput{njurepo.dtx} + \PrintChanges + \PrintIndex +\end{document} +% +% \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{v1.0.0}{2019/01/22}{Initial version} +% \changes{v1.0.1}{2019/01/29}{Add more ability} +% \changes{v1.1.0}{2019/01/29}{Stable version} +% \changes{v1.1.1}{2019/02/20}{Fix little bugs} +% \changes{v1.1.2}{2019/03/20}{Fix some typo and add more predined macro. Polish manual} +% +% \GetFileInfo{\jobname.dtx} +% +% \def\indexname{索引} +% \def\glossaryname{修改记录} +% \IndexPrologue{\section{\indexname}} +% \GlossaryPrologue{\section{\glossaryname}} + +% \title{\bfseries\color{violet}\njurepo: 南京大学本科生泛用报告} +% \author{郑奘巍 \\[5pt]\texttt{zhengzangw@gmail.com}} +% \date{\fileversion\ (\filedate)} +% \maketitle\thispagestyle{empty} +% +% \begin{abstract}\noindent +% 此宏包旨在建立一个免于配置的、指令相对简单的南京大学作业、实验报告通用模板。 +% \end{abstract} +% +% +% \vskip2cm +% \def\abstractname{免责声明} +% \begin{abstract} +% \noindent +% \begin{enumerate} +% \item 本模板的发布遵守 \LaTeX\ Project Public License,使用前请认真阅读协议内 +% 容。 +% \item \textbf{本模板为作者自己通常使用的报告模板,与南京大学官方没有任何关系}。任何使用该宏包进行实验报告制作时,请\textbf{务必根据课程要求进行写作}。由于使用本模板而引起的作业验收问题,均与本模板作者无关。 +% \item 本模板借鉴\thuthesis{}宏包的许多内容,需要稳定模板的同学也可以选择使用清华大学的\thuthesis{}宏包并自己进行配置。 +% \item 任何个人或组织以本模板为基础进行修改、扩展而生成的新的专用模板,请严格遵 +% 守 \LaTeX\ Project Public License 协议。由于违犯协议而引起的任何纠纷争端均与 +% 本模板作者无关。 +% \end{enumerate} +% \end{abstract} +% +% \clearpage +% \pagestyle{fancy} +% \begin{multicols}{2}[ +% \setlength{\columnseprule}{.4pt} +% \setlength{\columnsep}{18pt}] +% \tableofcontents +% \end{multicols} +% \clearpage +% +% \section{模板介绍} +% \njurepo\ (\textbf{N}an\textbf{jing} \textbf{U}niversity \LaTeX\ Versatile \textbf{Repo}rt Template)是为南京大学本科生设计的一个免于配置的作业、实验报告模板。希望它可以使你的作业/实验报告不会因形式上的缺陷导致评分的下降。 +% +% 该文档格式基于 ctexbook, 主要完成了除了主体内容以外的几乎\textbf{全部}工作。同时,通过使用 Github 版本宏包,你还可以更好的管理自己的 $\LaTeX$ 文档。 +% +% 本文档将尽量完整的介绍模板的使用方法,如有不清楚之处可以参考示例文档或者根据第 3.1 节说明提问,有兴趣者都可以参与完善此手册,也非常欢迎对代码的贡献。 +% +% \section{安装} +% \label{sec:installation} +% \subsection{CTAN} +% 本宏包已被收纳于 CTAN 中,凡安装完整版 Texlive 用户可直接使用: +% \begin{latex} +% \usepackage{njurepo} +% \end{latex} +% +% \subsection{Github} +% 想获得最新版本的 \njurepo 请前往 Github 主页下载:https://github.com/zhengzangw/njurepo +% +% 同时,面向 Github 版本的说明主要在 README.md 中,如果使用的是 Github 版本,请阅读 README.md +% +% \subsection{模板的组成} +% 下表列出了\njurepo 的主要文件及其功能介绍: +% +% \begin{longtable}{l|p{8cm}} +% \toprule +% {\heiti 文件(夹)} & {\heiti 功能描述}\\\midrule +% \endfirsthead +% \midrule +% {\heiti 文件(夹)} & {\heiti 功能描述}\\\midrule +% \endhead +% \endfoot +% \endlastfoot +% njurepo.ins & \textsc{DocStrip} 驱动文件(开发用) \\ +% njurepo.dtx & \textsc{DocStrip} 源文件(开发用)\\\midrule +% resources/ & 资源路径\\ +% resources/logos/ & 示例文档资源路径\\ +% parts/ & 具体内容\\ +% parts/examples/ & 示例文档具体内容\\ +% ref/ & 参考文献和参考文献样式文件\\ +% njurepo.cls & 模板类文件\\ +% Makefile & 自动运行脚本 \\ +% util.py & 实用管理工具 \\ +% README.md & 说明文件 \\ +% \textbf{njurepo.pdf} & 用户手册(本文档)\\ \bottomrule +% \end{longtable} +% +% \subsection{生成模板} +% 使用Makefile或\XeLaTeX 生成模板文件 +% \begin{shell} +% make cls +% \end{shell} +% +% \subsection{生成论文} +% \subsubsection{latexmk} +% latexmk 命令支持全自动生成\LaTeX{}编写的文档,并且支持使用不同的工具链来进行生成,它会自动运行多次工具直到交叉引用都被解决。下面给出了一个用 latexmk 调用 xelatex 生成最终文档的示例: +% \begin{shell} +% latexmk -xelatex main +% \end{shell} +% +% \subsection{升级} +% 在github上下载最新版,运行: +% \begin{shell} +% make cls +% \end{shell} +% +% 生成新的类文件和配置文件即可。也可以直接拷贝 njurepo.cls,免去上面命令的执行。 +% +% +% \section{使用说明} +% \subsection{示例文件} +% 推荐从模板自带的示例文档入手,其中包括了论文写作用到的所有命令及其使用方法,只需要用自己的内容进行相应替换就可以。对于不清楚的命令可以查阅本手册。下面的例子描述了模板中章节的组织形式,来自于示例文档,具体内容可以参考模板附带的 main.tex 和 parts/examples/。 +% \begin{latex} +% \documentclass[language=english,open=any]{njurepo} +% \begin{document} +% \frontmatter +% \input{parts/examples/cover} +% \input{parts/examples/abstract} +% \maketitlepage +% \makecover +% \makeabstract +% \tableofcontents +% \input{parts/examples/denotation} +% \mainmatter +% \maketitle +% \input{parts/examples/problemsolving} +% \input{parts/examples/mathpro} +% \include{parts/examples/chap01} +% \include{parts/examples/chap02} +% \include{parts/examples/digitalexp} +% \include{parts/examples/code} +% \backmatter +% \listoffigures +% \listoftables +% \listofequations +% \bibliographystyle{ref/numeric} % ref/numeric,ref/author-year,plainnat,IEEEtran +% \bibliography{ref/refs} +% \include{parts/examples/ack} +% %% 附录 +% \begin{appendix} + % \input{parts/examples/appendix01} +% \end{appendix} +% \end{document} +% \end{latex} +% +% \subsection{选项} +% \label{sec:option} +% \DescribeOption{language} +% 论文的主要语言(默认:中文)。可选:\option{chinese},\option{english}。决定了封面、标题、定理的语言。 +% \DescribeOption{open} +% 正规出版物的章节出现在奇数页,也就是右手边的页面,这就是 \option{right},。在这种情况下,如果前一章的最后一页也是奇数,那么模板会自动生成一个纯粹的空白页。 +% 提交的作业如果是电子稿的话,可以使用连续页,即使用\option{any} +% \DescribeOption{wide} +% 是否使用宽页面。如果生成作业的话,宽页面或许好看。 +% \DescribeOption{draft} +% 是否生成水印。生成的水印为 Draft 表示此文档尚为草稿 +% +% \subsection{字体配置} +% \label{sec:font-config} +% 使用\CTeX\ 默认字体配置 +% \subsubsection{字体命令} +% \label{sec:fontcmds} +% \myentry{字体} +% \DescribeMacro{\songti} +% \DescribeMacro{\fangsong} +% \DescribeMacro{\heiti} +% \DescribeMacro{\kaishu} +% 用来切换宋体、仿宋、黑体、楷体四种基本字体。 +% \myentry{字号} +% \DescribeMacro{\chuhao} +% \DescribeMacro{\xiaochu} +% \DescribeMacro{\yihao} +% \DescribeMacro{\xiaoyi} +% \DescribeMacro{\bahao} +% 定义字体大小,分别为 +% \begin{center} +% \begin{tabular}{llllll} +% \toprule +% \cs{chuhao} & \cs{xiaochu} & \cs{yihao} & \cs{xiaoyi} & \cs{erhao} & \cs{xiaoer}\\ +% \cs{sanhao} & \cs{xiaosan} & \cs{sihao} & \cs{banxiaosi} & \cs{xiaosi} & \cs{dawu}\\ +% \cs{wuhao} & \cs{xiaowu} & \cs{liuhao} & \cs{xiaoliu} & \cs{qihao} & \cs{bahao}\\\bottomrule +% \end{tabular} +% \end{center} +% 使用方法为:\cs{command}\oarg{num},其中 command 为字号命令,num 为行距。比 +% 如 \cs{xiaosi}[1.5] 表示选择小四字体,行距 1.5 倍。写作指南要求表格中的字体 +% 是 \cs{dawu},模板已经设置好了。 +% +% \subsection{封面信息} +% 仿照parts/examples/cover.tex 进行设置 +% \subsection{表格} +% \DescribeMacro{\figoptadd} +% \DescribeMacro{\figoptaddcap} +% 定义了两个简单的表格命令 +% \begin{latex} +% \figoptadd{option}{address} +% \figoptaddcap{option}{address}{caption} +% \end{latex} +% \subsection{图片} +% \DescribeMacro{\tabncc} +% \DescribeMacro{\tabnc} +% 定义了两个简单的图片命令 +% \begin{latex} +% \tabncc{number-of-columns}{content}{caption} +% \tabnc{number-of-columns}{content} +% \end{latex} +% \subsection{代码} +% \njurepo 预设了如下的代码环境 +% \begin{longtable}{ccccc} +% \toprule +% code & cpseudo & cplus & shell & commandshell \\ +% verilog & python & latex & &\\ +% \bottomrule +% \end{longtable} +% \subsection{文字} +% \begin{latex} +% \href{link}{words} # 插入链接 +% \magenta{品红色字} +% \CJKunderline{下划线字} +% \end{latex} +% 更多关于预置宏包的内容,可见 README.md 以及 \ref{sec:loadpkg} +% +% +% \section{致谢} +% 感谢以下宏包的作者,本宏包从中使用了部分代码和借鉴: +% \begin{itemize} +% \item 清华大学\thuthesis https://github.com/xueruini/thuthesis +% \end{itemize} +% +% \StopEventually{} +% +% \section{实现细节} +% \subsection{基本信息} +% \begin{macrocode} +%<*cls> +\NeedsTeXFormat{LaTeX2e} +\ProvidesClass{njurepo}[2019/01/25 1.0.0 Nanjing University Report Template] +% \end{macrocode} +% +% \subsection{定义选项} +% \label{sec:defoption} +% 使用kvoptions宏包进行选项设置 +% \begin{macrocode} +\hyphenation{NJU-repo} +\def\njurepo{\textsc{NJU}\-\textsc{repo}} +\def\thuthesis{\textsc{Thu}\-\textsc{Thesis}} +\def\version{1.1.2} +\RequirePackage{kvoptions} +\SetupKeyvalOptions{ + family=nju, + prefix=nju@, + setkeys=\kvsetkeys +} +\DeclareStringOption[chinese]{language}[chinese] +\DeclareStringOption[any]{open}[any] +\DeclareBoolOption{wide} +\DeclareBoolOption{color} +\DeclareBoolOption{draft} +\DeclareDefaultOption{\PassOptionsToClass{\CurrentOption}{ctexbook}} + +\ProcessKeyvalOptions* +% \end{macrocode} +% +% 检测选项是否合法 +% \begin{macrocode} +\newcommand\nju@validate@key[1]{% + \@ifundefined{nju@\csname nju@#1\endcsname true}{% + \ClassError{njurepo}{Invalid value '\csname nju#1\endcsname'}{} + }{% + \csname nju@\csname nju@#1\endcsname true\endcsname + } +} +\newif\ifnju@chinese +\newif\ifnju@english +\nju@validate@key{language} +\newif\ifnju@any +\newif\ifnju@right +\nju@validate@key{open} +% \end{macrocode} +% +% 使用ctexbook宏包 +% \begin{macrocode} +\LoadClass[a4paper,openany,UTF8,zihao=-4,scheme=plain]{ctexbook} +% \end{macrocode} +% +% \subsection{加载宏包} +% \label{sec:loadpkg} +% 用于开发的宏包 +% \begin{macrocode} +\RequirePackage{etoolbox} +\RequirePackage{ifxetex} +\RequirePackage{xparse} +% \end{macrocode} +% 用于图片的宏包 +% \begin{macrocode} +\RequirePackage{graphicx} +\graphicspath{{resources/}} +\graphicspath{{resources/logo/}} +\RequirePackage[labelformat=simple]{subcaption} +\RequirePackage{pdfpages} +\includepdfset{fitpaper=true} +\RequirePackage{tikz} +\usetikzlibrary{decorations.pathmorphing,graphs,calc} +\RequirePackage{dirtree} +% \end{macrocode} +% 用于表格的宏包 +% \begin{macrocode} +\RequirePackage{array} +\RequirePackage{longtable} +\RequirePackage{booktabs} +\RequirePackage{multirow} +\RequirePackage{tabularx} +\RequirePackage{diagbox} +\RequirePackage{makecell} +\RequirePackage{float} +% \end{macrocode} +% 用于符号或数学的宏包 +% \begin{macrocode} +\RequirePackage{CJKfntef} +\RequirePackage{amsmath} +\RequirePackage[amsmath, thmmarks, hyperref]{ntheorem} +\RequirePackage{physics} +\RequirePackage{bbding,stmaryrd} +%\RequirePackage{fontawesome} +% \end{macrocode} +% 其它宏包 +% \begin{macrocode} +\RequirePackage[sort&compress]{natbib} +% \end{macrocode} +% +% 超链接 +% \begin{macrocode} +\RequirePackage{hyperref} +\ifxetex + \hypersetup{% + CJKbookmarks=true} +\else + \hypersetup{% + unicode=true, + CJKbookmarks=false} +\fi +\hypersetup{% + linktoc=all, + bookmarksnumbered=true, + bookmarksopen=true, + bookmarksopenlevel=1, + breaklinks=true, + colorlinks=false, + plainpages=false, + pdfborder=0 0 0} +\urlstyle{same} +\def\UrlBreaks{% + \do\/% + \do\a\do\b\do\c\do\d\do\e\do\f\do\g\do\h\do\i\do\j\do\k\do\l% + \do\m\do\n\do\o\do\p\do\q\do\r\do\s\do\t\do\u\do\v\do\w\do\x\do\y\do\z% + \do\A\do\B\do\C\do\D\do\E\do\F\do\G\do\H\do\I\do\J\do\K\do\L% + \do\M\do\N\do\O\do\P\do\Q\do\R\do\S\do\T\do\U\do\V\do\W\do\X\do\Y\do\Z% + \do0\do1\do2\do3\do4\do5\do6\do7\do8\do9\do=\do/\do.\do:% + \do\*\do\-\do\~\do\'\do\"\do\-} +\Urlmuskip=0mu plus 0.1mu +% \end{macrocode} +% +% 页眉页脚设置 +% \begin{macrocode} +\RequirePackage{fancyhdr} +\RequirePackage{notoccite} +% \end{macrocode} +% +% \subsection{页面设置} +% 使用了thuthesis的非本科生默认配置。 +% \begin{macrocode} +\RequirePackage{geometry} +\ifnju@wide +\geometry{ + a4paper, %210*297mm + hcentering, + ignoreall, + nomarginpar, + left=10mm, + headheight=5mm, + headsep=5mm, + textheight=237mm, + bottom=29mm, + footskip=6mm +}\else +\geometry{ + a4paper, %210*297mm + hcentering, + ignoreall, + nomarginpar, + left=30mm, + headheight=5mm, + headsep=5mm, + textheight=237mm, + bottom=29mm, + footskip=6mm +} +\fi +% \end{macrocode} +% +% \subsection{主文档格式} +% \label{sec:mainbody} +% +% \begin{macro}{\cleardoublepage} +% \begin{macrocode} +\let\nju@cleardoublepage\cleardoublepage +\newcommand{\nju@clearemptydoublepage}{% + \clearpage{\pagestyle{nju@empty}\nju@cleardoublepage}} +\let\cleardoublepage\nju@clearemptydoublepage +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\frontmatter} +% \begin{macro}{\mainmatter} +% \begin{macro}{\backmatter} +% \begin{macrocode} +\renewcommand\frontmatter{% + \ifnju@right\cleardoublepage\else\clearpage\fi + \@mainmatterfalse + \pagenumbering{Roman} + \pagestyle{nju@empty}} +\renewcommand\mainmatter{% + \ifnju@right\cleardoublepage\else\clearpage\fi + \@mainmattertrue + \pagenumbering{arabic} + \pagestyle{nju@headings}} +\renewcommand\backmatter{% + \ifnju@right\cleardoublepage\else\clearpage\fi + \@mainmattertrue} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \subsection{字体与字号} +% \label{sec:font} +% \subsubsection{英文字体} +% 配置英文字体。 +% \begin{macrocode} +\newcommand\nju@fontset{\csname g__ctex_fontset_tl\endcsname} +\ifthenelse{\equal{\nju@fontset}{fandol}}{ + \setmainfont[ + Extension = .otf, + UprightFont = *-regular, + BoldFont = *-bold, + ItalicFont = *-italic, + BoldItalicFont = *-bolditalic, + ]{texgyretermes} + \setsansfont[ + Extension = .otf, + UprightFont = *-regular, + BoldFont = *-bold, + ItalicFont = *-italic, + BoldItalicFont = *-bolditalic, + ]{texgyreheros} + \setmonofont[ + Extension = .otf, + UprightFont = *-regular, + BoldFont = *-bold, + ItalicFont = *-italic, + BoldItalicFont = *-bolditalic, + Scale = MatchLowercase, + ]{texgyrecursor} +}{ + \setmainfont{Times New Roman} + \setsansfont{Arial} + \ifthenelse{\equal{\nju@fontset}{mac}}{ + \setmonofont[Scale=MatchLowercase]{Menlo} + }{ + \setmonofont[Scale=MatchLowercase]{Courier New} + } +} +% \end{macrocode} +% +% \subsubsection{数学环境字体} +% 配置数学字体(使用unicode-math) +% \begin{macrocode} +\RequirePackage{unicode-math} +\unimathsetup{ + math-style = ISO, + bold-style = ISO, + nabla = upright, + partial = upright, +} +\IfFontExistsTF{STIX2Math.otf}{ + \setmathfont[StylisticSet=8]{STIX2Math.otf} + \setmathfont[range={scr,bfscr},StylisticSet=1]{STIX2Math.otf} + \IfFontExistsTF{XITSMath-Regular.otf}{ + \setmathfont[range={\partial,\lbrace,\rbrace}]{XITSMath-Regular.otf} + }{ + \setmathfont[range={\partial,\lbrace,\rbrace}]{xits-math.otf} + } +}{ + \setmathfont[ + Extension = .otf, + BoldFont = *bold, + StylisticSet = 8, + ]{xits-math} + \setmathfont[range={cal,bfcal},StylisticSet=1]{xits-math.otf} +} +% \end{macrocode} +% +% \subsubsection{数学环境符号} +% \begin{macro}{\ldots} +% 省略号一律居中,所以 \cs{ldots} 不再居于底部。 +% \begin{macrocode} +\ifnju@chinese + \def\mathellipsis{\cdots} +\fi +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\le} +% \begin{macro}{\ge} +% \begin{macro}{\leq} +% \begin{macro}{\geq} +% 小于等于号要使用倾斜的形式。 +% \begin{macrocode} +\protected\def\le{\leqslant} +\protected\def\ge{\geqslant} +\AtBeginDocument{% + \renewcommand\leq{\leqslant}% + \renewcommand\geq{\geqslant}% +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\int} +% 积分号 \cs{int} 使用正体,并且上下限默认置于积分号上下两侧。 +% \begin{macrocode} +\removenolimits{% + \int\iint\iiint\iiiint\oint\oiint\oiiint + \intclockwise\varointclockwise\ointctrclockwise\sumint + \intbar\intBar\fint\cirfnint\awint\rppolint + \scpolint\npolint\pointint\sqint\intlarhk\intx + \intcap\intcup\upint\lowint +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\Re} +% \begin{macro}{\Im} +% \begin{macro}{\nabla} +% 实部、虚部操作符使用罗马体 $\mathrm{Re}$、$\mathrm{Im}$ 而不是 fraktur 体 +% $\Re$、$\Im$。\cs{nabla} 使用粗正体。 +% \begin{macrocode} +\AtBeginDocument{% + \renewcommand{\Re}{\operatorname{Re}}% + \renewcommand{\Im}{\operatorname{Im}}% + \renewcommand\nabla{\mbfnabla}% +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\bm} +% \begin{macro}{\boldsymbol} +% 兼容旧的粗体命令:\pkg{bm} 的 \cs{bm} 和 \pkg{amsmath} 的 \cs{boldsymbol}。 +% \begin{macrocode} +\newcommand\bm{\symbf} +\renewcommand\boldsymbol{\symbf} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\square} +% 兼容 \pkg{amssymb} 中的命令。 +% \begin{macrocode} +\newcommand\square{\mdlgwhtsquare} +% \end{macrocode} +% \end{macro} +% +% 允许太长的公式断行、分页等。 +% \begin{macrocode} +\allowdisplaybreaks[4] +\renewcommand\theequation{\ifnum \c@chapter>\z@ \thechapter-\fi\@arabic\c@equation} +% \end{macrocode} +% +% 公式距前后文的距离由 4 个参数控制,参见 \cs{normalsize} 的定义。 +% \begin{macrocode} +\def\make@df@tag{\@ifstar\nju@make@df@tag@@\make@df@tag@@@} +\def\nju@make@df@tag@@#1{\gdef\df@tag{\nju@maketag{#1}\def\@currentlabel{#1}}} +\def\nju@maketag#1{\maketag@@@{(\ignorespaces #1\unskip\@@italiccorr)}} +\def\tagform@#1{\maketag@@@{(\ignorespaces #1\unskip\@@italiccorr)\equcaption{#1}}} +% \end{macrocode} +% 修改 \cs{tagform} 会影响 \cs{eqref}。 +% \begin{macrocode} +\renewcommand{\eqref}[1]{\textup{(\ref{#1})}} +% \end{macrocode} +% +% \subsubsection{中文字体} +% \pkg{ctex}在微软下使用雅黑字体,在macOS下使用苹方字体。这里不做更改。 +% +% \subsubsection{字号} +% WORD 中的字号对应该关系如下(1bp = 72.27/72 pt): +% \begin{center} +% \begin{tabular}{llll} +% \toprule +% 初号 & 42bp & 14.82mm & 42.1575pt \\ +% 小初 & 36bp & 12.70mm & 36.135 pt \\ +% 一号 & 26bp & 9.17mm & 26.0975pt \\ +% 小一 & 24bp & 8.47mm & 24.09pt \\ +% 二号 & 22bp & 7.76mm & 22.0825pt \\ +% 小二 & 18bp & 6.35mm & 18.0675pt \\ +% 三号 & 16bp & 5.64mm & 16.06pt \\ +% 小三 & 15bp & 5.29mm & 15.05625pt \\ +% 四号 & 14bp & 4.94mm & 14.0525pt \\ +% 小四 & 12bp & 4.23mm & 12.045pt \\ +% 五号 & 10.5bp & 3.70mm & 10.59375pt \\ +% 小五 & 9bp & 3.18mm & 9.03375pt \\ +% 六号 & 7.5bp & 2.56mm & \\ +% 小六 & 6.5bp & 2.29mm & \\ +% 七号 & 5.5bp & 1.94mm & \\ +% 八号 & 5bp & 1.76mm & \\\bottomrule +% \end{tabular} +% \end{center} +% +% \begin{macro}{\normalsize} +% 默认正文小四号 (12bp) 字,行距为固定值 20 bp。 +% \begin{macrocode} +\renewcommand\normalsize{% + \@setfontsize\normalsize{12bp}{20bp}% + \abovedisplayskip=12bp \@plus 2bp \@minus 2bp + \abovedisplayshortskip=12bp \@plus 2bp \@minus 2bp + \belowdisplayskip=\abovedisplayskip + \belowdisplayshortskip=\abovedisplayshortskip} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\nju@def@fontsize} +% 根据习惯定义字号。用法: +% \cs{nju@def@fontsize}\marg{字号名称}\marg{磅数} +% +% 避免了字号选择和行距的紧耦合。所有字号定义时为单倍行距,并提供选项指定行距倍数。 +% \begin{macrocode} +\def\nju@def@fontsize#1#2{% + \expandafter\newcommand\csname #1\endcsname[1][1.3]{% + \fontsize{#2}{##1\dimexpr #2}\selectfont}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\chuhao} +% \begin{macro}{\xiaochu} +% \begin{macro}{\yihao} +% \begin{macro}{\xiaoyi} +% \begin{macro}{\erhao} +% \begin{macro}{\xiaoer} +% \begin{macro}{\sanhao} +% \begin{macro}{\xiaosan} +% \begin{macro}{\sihao} +% \begin{macro}{\banxiaosi} +% \begin{macro}{\xiaosi} +% \begin{macro}{\dawu} +% \begin{macro}{\wuhao} +% \begin{macro}{\xiaowu} +% \begin{macro}{\liuhao} +% \begin{macro}{\xiaoliu} +% \begin{macro}{\qihao} +% \begin{macro}{\bahao} +% 一组字号定义。 +% \begin{macrocode} +\nju@def@fontsize{chuhao}{42bp} +\nju@def@fontsize{xiaochu}{36bp} +\nju@def@fontsize{yihao}{26bp} +\nju@def@fontsize{xiaoyi}{24bp} +\nju@def@fontsize{erhao}{22bp} +\nju@def@fontsize{xiaoer}{18bp} +\nju@def@fontsize{sanhao}{16bp} +\nju@def@fontsize{xiaosan}{15bp} +\nju@def@fontsize{sihao}{14bp} +\nju@def@fontsize{banxiaosi}{13bp} +\nju@def@fontsize{xiaosi}{12bp} +\nju@def@fontsize{dawu}{11bp} +\nju@def@fontsize{wuhao}{10.5bp} +\nju@def@fontsize{xiaowu}{9bp} +\nju@def@fontsize{liuhao}{7.5bp} +\nju@def@fontsize{xiaoliu}{6.5bp} +\nju@def@fontsize{qihao}{5.5bp} +\nju@def@fontsize{bahao}{5bp} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \subsubsection{中文标点} +% +% \newcommand\unicodechar[1]{U+#1(\symbol{"#1})} +% 由于 Unicode 的一些标点符号是中西文混用的: +% \unicodechar{00B7}、 +% \unicodechar{2013}、 +% \unicodechar{2014}、 +% \unicodechar{2018}、 +% \unicodechar{2019}、 +% \unicodechar{201C}、 +% \unicodechar{201D}、 +% \unicodechar{2025}、 +% \unicodechar{2026}、 +% \unicodechar{2E3A}, +% 所以要根据语言设置正确的字体。 +% \footnote{\url{https://github.com/CTeX-org/ctex-kit/issues/389}} +% 所以要根据语言设置正确的字体。 +% \begin{macrocode} +\newcommand\nju@setchinese{% + \xeCJKResetPunctClass +} +\newcommand\nju@setenglish{% + \xeCJKDeclareCharClass{HalfLeft}{"2018, "201C}% + \xeCJKDeclareCharClass{HalfRight}{ + "00B7, "2019, "201D, "2013, "2014, "2025, "2026, "2E3A, + }% +} +\newcommand\nju@setdefaultlanguage{% + \ifnju@chinese + \nju@setchinese + \else + \nju@setenglish + \fi +} +% \end{macrocode} +% +% \subsection{局部设置} +% \subsubsection{页眉页脚} +% \label{sec:headerfooter} +% +% 定义页眉和页脚样式。 +% \begin{macro}{\ps@nju@empty} +% \begin{macro}{\ps@nju@plain} +% \begin{macro}{\ps@nju@headings} +% \begin{itemize} +% \item \texttt{nju@empty}:页眉页脚都没有 +% \item \texttt{nju@plain}:只显示页脚的页码。\cs{chapter} 自动调用 +% \cs{thispagestyle\{nju@plain\}}。 +% \item \texttt{nju@headings}:页眉页脚同时显示 +% \end{itemize} +% \begin{macrocode} +\fancypagestyle{nju@empty}{% + \fancyhf{} + \renewcommand{\headrulewidth}{0pt} + \renewcommand{\footrulewidth}{0pt}} +\fancypagestyle{nju@plain}{% + \fancyhead{} + \fancyfoot[C]{\xiaowu\thepage} + \renewcommand{\headrulewidth}{0pt} + \renewcommand{\footrulewidth}{0pt}} +\fancypagestyle{nju@headings}{% + \fancyhead{} + \fancyhead[C]{\wuhao\normalfont\leftmark} + \fancyfoot{} + \fancyfoot[C]{\wuhao\thepage} + \renewcommand{\headrulewidth}{0.4pt} + \renewcommand{\footrulewidth}{0pt}} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \subsubsection{段落} +% \label{sec:paragraph} +% +% 全文首行缩进 2 字符,标点符号用全角 +% \begin{macrocode} +\ctexset{% + punct=quanjiao, + space=auto, + autoindent=true} +% \end{macrocode} +% +% \subsubsection{列表} +% 利用 \pkg{enumitem} 命令调整默认列表环境间的距离,以符合中文习惯。 +% \begin{macrocode} +\RequirePackage[shortlabels]{enumitem} +\RequirePackage{environ} +\setlist{nosep} +% \end{macrocode} +% +% +% \subsubsection{脚注} +% \label{sec:footnote} +% 脚注符合中文习惯,数字带圈。 +% \begin{macrocode} +\ifthenelse{\equal{\nju@fontset}{mac}}{ + \newfontfamily\nju@circlefont{Songti SC Light} +}{ + \ifthenelse{\equal{\nju@fontset}{windows}}{ + \newfontfamily\nju@circlefont{SimSun} + }{ + \IfFontExistsTF{XITS-Regular.otf}{ + \newfontfamily\nju@circlefont{XITS-Regular.otf} + }{ + \newfontfamily\nju@circlefont{xits-regular.otf} + } + } +} +\def\nju@textcircled#1{% + \ifnum\value{#1} >9% + \ClassError{njurepo}% + {Too many footnotes in this page.}{Keep footnote less than 10.}% + \fi + {\nju@circlefont\symbol{\numexpr\value{#1}+"245F\relax}}% +} +\renewcommand{\thefootnote}{\nju@textcircled{footnote}} +\renewcommand{\thempfootnote}{\nju@textcircled{mpfootnote}} +% \end{macrocode} +% +% 定义脚注分割线,字号(宋体小五),以及悬挂缩进(1.5字符)。 +% \begin{macrocode} +\def\footnoterule{\vskip-3\p@\hrule\@width0.3\textwidth\@height0.4\p@\vskip2.6\p@} +\let\nju@footnotesize\footnotesize +\renewcommand\footnotesize{\nju@footnotesize\xiaowu[1.5]} +%\footnotemargin1.5em\relax +% \end{macrocode} +% +% \cs{@makefnmark} 默认是上标样式,而在脚注部分要求为正文大小。利用\cs{patchcmd} 动态调整 \cs{@makefnmark} 的定义。 +% \begin{macrocode} +\let\nju@makefnmark\@makefnmark +\def\nju@@makefnmark{\hbox{{\normalfont\@thefnmark}}} +\pretocmd{\@makefntext}{\let\@makefnmark\nju@@makefnmark}{}{} +\apptocmd{\@makefntext}{\let\@makefnmark\nju@makefnmark}{}{} +% \end{macrocode} +% +% +% \subsubsection{定理环境} +% \label{sec:equation} +% +% 定理标题使用黑体,正文使用宋体,冒号隔开。 +% \begin{macrocode} +\theorembodyfont{\normalfont} +\theoremheaderfont{\normalfont\heiti} +\theoremsymbol{\ensuremath{\square}} +\newtheorem*{proof}{证明} +\theoremsymbol{} +\theoremseparator{:} +\ifnju@chinese + \theoremstyle{plain} + \newcommand\nju@assumption@name{假设} + \newcommand\nju@definition@name{定义} + \newcommand\nju@proposition@name{命题} + \newcommand\nju@lemma@name{引理} + \newcommand\nju@theorem@name{定理} + \newcommand\nju@axiom@name{公理} + \newcommand\nju@corollary@name{推论} + \newcommand\nju@exercise@name{练习} + \newcommand\nju@example@name{例} + \newcommand\nju@remark@name{注释} + \newcommand\nju@conjecture@name{猜想} + \theoremstyle{break} + \newcommand\nju@problem@name{问题} + \newcommand\nju@solution@name{解} +\else + \theoremstyle{plain} + \newcommand\nju@assumption@name{Assumption} + \newcommand\nju@definition@name{Definition} + \newcommand\nju@proposition@name{Proposition} + \newcommand\nju@lemma@name{Lemma} + \newcommand\nju@theorem@name{Theorem} + \newcommand\nju@axiom@name{Axiom} + \newcommand\nju@corollary@name{Corollary} + \newcommand\nju@exercise@name{Exercise} + \newcommand\nju@example@name{Example} + \newcommand\nju@remark@name{Remark} + \newcommand\nju@conjecture@name{Conjecture} + \theoremstyle{break} + \newcommand\nju@problem@name{Problem} + \newcommand\nju@solution@name{Solution} +\fi +\theoremheaderfont{\bfseries} +\newtheorem{assumption}{\nju@assumption@name}[section] +\newtheorem{definition}{\nju@definition@name}[section] +\newtheorem{proposition}{\nju@proposition@name}[section] +\newtheorem{lemma}{\nju@lemma@name}[section] +\newtheorem{theorem}{\nju@theorem@name}[section] +\newtheorem{axiom}{\nju@axiom@name}[section] +\newtheorem{corollary}{\nju@corollary@name}[section] +\newtheorem{exercise}{\nju@exercise@name}[section] +\newtheorem{example}{\nju@example@name}[section] +\newtheorem{remark}{\nju@remark@name}[section] +\newtheorem{problem}{\nju@problem@name}[section] +\newtheorem{conjecture}{\nju@conjecture@name}[section] +\newtheorem{solution}{\nju@solution@name}[section] + +%\RequirePackage{microtype} +\ifnju@chinese +\newcommand{\promisewords}{请独立完成作业,不得抄袭。\\若参考了其它资料,请给出引用。\\鼓励讨论,但需独立书写解题过程。} +\else +\newcommand{\promisewords}{I promise this work is done on my own with no plagiarism.} +\fi +\newcommand{\Hrule}{\noindent\rule{\linewidth}{0.5mm}} + +\theorempostwork{\vspace{-0.5cm}\Hrule} +\newtheorem*{csolution}{\PencilRightDown\nju@solution@name} +\newtheorem*{nsolution}{\PencilRightDown\nju@solution@name} +\RequirePackage[listings]{tcolorbox} +\newtcolorbox{ps@problem}[1]{fonttitle=\bfseries,title=#1,before skip=0.5cm, after skip=-0.5cm} +\newenvironment{cproblem}[1][]{ + \begin{ps@problem}{\Checkmark\ \nju@problem@name\ #1} +}{ + \end{ps@problem} +} +\theoremstyle{plain} +\newtheorem*{nproblem}{\Checkmark\nju@problem@name}[section] +% \subsubsection{浮动对象} +% \label{sec:float} +% 设置浮动对象和文字之间的距离 +% \begin{macrocode} +\setlength{\floatsep}{20bp \@plus4pt \@minus1pt} +\setlength{\intextsep}{20bp \@plus4pt \@minus2pt} +\setlength{\textfloatsep}{20bp \@plus4pt \@minus2pt} +\setlength{\@fptop}{0bp \@plus1.0fil} +\setlength{\@fpsep}{12bp \@plus2.0fil} +\setlength{\@fpbot}{0bp \@plus1.0fil} +% \end{macrocode} +% +% 下面这组命令使浮动对象的缺省值稍微宽松一点,从而防止幅度对象占据过多的文本页面, +% 也可以防止在很大空白的浮动页上放置很小的图形。 +% \begin{macrocode} +\renewcommand{\textfraction}{0.15} +\renewcommand{\topfraction}{0.85} +\renewcommand{\bottomfraction}{0.65} +\renewcommand{\floatpagefraction}{0.60} +% \end{macrocode} +% +% 定制浮动图形和表格标题样式 +% \begin{itemize} +% \item 图表标题字体为 11pt, 这里写作大五号 +% \item 去掉图表号后面的冒号。图序与图名文字之间空一个汉字符宽度。 +% \item 图:caption 在下,段前空 6 磅,段后空 12 磅 +% \item 表:caption 在上,段前空 12 磅,段后空 6 磅 +% \end{itemize} +% +% \begin{macrocode} +\let\old@tabular\@tabular +\def\nju@tabular{\dawu[1.5]\old@tabular} +\DeclareCaptionLabelFormat{nju}{{\dawu[1.5]\normalfont #1~#2}} +\DeclareCaptionLabelSeparator{nju}{\hspace{1em}} +\DeclareCaptionFont{nju}{\dawu[1.5]} +\captionsetup{labelformat=nju,labelsep=nju,font=nju,skip=6bp} +\captionsetup[table]{position=top} +\captionsetup[figure]{position=bottom} +\captionsetup[sub]{font=nju} +\renewcommand{\thesubfigure}{(\alph{subfigure})} +\renewcommand{\thesubtable}{(\alph{subtable})} +% \renewcommand{\p@subfigure}{:} +% \end{macrocode} +% 我们采用 \pkg{longtable} 来处理跨页的表格。同样我们需要设置其默认字体为五号。 +% \begin{macrocode} +\let\nju@LT@array\LT@array +\def\LT@array{\dawu[1.5]\nju@LT@array} % set default font size +% \end{macrocode} +% +% \begin{macro}{\hlinewd} +% 简单的表格使用三线表推荐用 \cs{hlinewd}。如果表格比较复杂还是用 \pkg{booktabs} 的命令好一些。 +% \begin{macrocode} +\def\hlinewd#1{% + \noalign{\ifnum0=`}\fi\hrule \@height #1 \futurelet + \reserved@a\@xhline} +% \end{macrocode} +% \end{macro} +% +% +% \subsubsection{章节标题} +% \label{sec:theor} +% \begin{macrocode} +\ifnju@chinese + \ctexset{% + chapter/name={第,章}, + appendixname=附录, + contentsname={目\hspace{\ccwd}录}, + listfigurename=插图索引, + listtablename=表格索引, + figurename=图, + tablename=表, + bibname=参考文献, + indexname=索引, + } + \newcommand\listequationname{公式索引} + \newcommand\equationname{公式} +\else + \newcommand\listequationname{List of Equations} + \newcommand\equationname{Equation} +\fi +\newcommand{\cabstractname}{摘\hspace{\ccwd}要} +\newcommand{\eabstractname}{Abstract} +\let\CJK@todaysave=\today +\def\CJK@todaysmall@short{\the\year 年 \the\month 月} +\def\CJK@todaysmall{\the\year 年 \the\month 月 \the\day 日} +\def\CJK@todaybig@short{\zhdigits{\the\year}年\zhnumber{\the\month}月} +\def\CJK@todaybig{\zhdigits{\the\year}年\zhnumber{\the\month}月\zhnumber{\the\day}日} +\def\CJK@today{\CJK@todaysmall} +\renewcommand\today{\CJK@today} +\newcommand\CJKtoday[1][1]{% + \ifcase#1\def\CJK@today{\CJK@todaysave} + \or\def\CJK@today{\CJK@todaysmall} + \or\def\CJK@today{\CJK@todaybig} + \fi} +% \end{macrocode} +% +% \pkg{fancyhdr} 定义页眉页脚很方便,但是有一个非常隐蔽的坑。通过 \pkg{fancyhdr} +% 定义的样式在第一次被调用时会修改 \cs{chaptermark},这会导致页眉信息错误(多余 +% 章号并且英文大写)。这是因为在原始的 \file{book.cls} 中定义如下(大意): +% \begin{latex} +% \newcommand\chaptername{Chapter} +% \newcommand\@chapapp{\chaptername} +% \def\chaptermark#1{ +% \markboth{\MakeUppercase{\@chapapp\ \thechapter}}{}} +% \end{latex} +% 很显然这个 \cs{\@chapapp} 不适合中文,因此我们使用\cs{CTEXthechapter}( +% 如,“第 x 章”),同时会将 \cs{MakeUppercase} 去掉。也就是说我们会做如下动作: +% \begin{latex} +% \renewcommand{\chaptermark}[1]{\@mkboth{\CTEXthechapter\hskip\ccwd#1}{}} +% \end{latex} +% 但,\pkg{fancyhdr} 不知何故在 \cs{ps@fancy} 中对 \cs{chaptermark} 进行重定义 +% (其实一模一样),而这个 \cs{ps@fancy} 会在 \cs{fancypagestyle} 中使用,如下: +% \begin{latex} +% \newcommand{\fancypagestyle}[2]{% +% \@namedef{ps@#1}{\let\fancy@gbl\relax#2\relax\ps@fancy}} +% \end{latex} +% 这样的话,\cs{ps@fancy} 会在 \pkg{fancyhdr} 定义的任何样式首次样被激活时调用,从 +% 而覆盖我们的 \cs{chaptermark} 定义(后续样式再激活不会重复覆盖)。所以我们采用如下 +% 方法解决: +% \begin{macrocode} +\AtBeginDocument{% + \pagestyle{nju@empty} + \renewcommand{\chaptermark}[1]{\@mkboth{\CTEXthechapter\hskip\ccwd#1}{}}} +% \end{macrocode} +% +% 各级标题格式设置。 +% \begin{description} +% \item[section] 章序号与章名之间空一个汉字符 黑体三号字,居中书写,单倍行距,段 +% 前空 24 磅,段后空 18 磅。本科要求:段前段后间距 30/20 pt,行距 20pt。但正文 +% 章节 30pt 的话和样例效果不一致。 +% \item[section] 一级节标题,例如:\fbox{2.1 实验装置与实验方法}。节标题序号与标 +% 题名之间空一个汉字符(下同)。采用黑体四号(14pt)字居左书写,行距为固定 +% 值 20 磅,段前空 24 磅,段后空 6 磅。本科:25/12 pt,行距 18pt。 +% \item[subsection] 二级节标题,例如:\fbox{2.1.1 实验装置}。采用黑体 13pt 字居左 +% 书写,行距为固定值 20 磅,段前空 12 磅,段后空 6 磅。本科:中文黑体 12pt 字, +% 英文 13pt 字,段间距 12/6 pt,行距 15pt。 +% \item[subsubsection] 三级节标题,例如:\fbox{2.1.2.1 归纳法}。采用黑体小四号 +% (12pt)字居左书写,行距为固定值 20 磅,段前空 12 磅,段后空 6 磅。 +% +% \end{description} +% \begin{macrocode} +\newcommand\nju@chapter@titleformat[1]{% + \ifthenelse% + {\equal{#1}{\eabstractname}}% + {\bfseries #1}% + {#1}% + } +\ctexset{% + chapter={ + afterindent=true, + pagestyle={nju@headings}, + beforeskip={9bp}, + aftername=\hskip\ccwd, + afterskip={24bp}, + format={\centering\sffamily\sanhao[1]}, + nameformat=\relax, + numberformat=\relax, + titleformat=\nju@chapter@titleformat, + lofskip=0pt, + lotskip=0pt, + }, + section={ + afterindent=true, + beforeskip={24bp\@plus 1ex \@minus .2ex}, + afterskip={6bp\@plus .2ex}, + format={\sffamily\sihao[1.429]}, + }, + subsection={ + afterindent=true, + beforeskip={16bp\@plus 1ex \@minus .2ex}, + afterskip={6bp \@plus .2ex}, + format={\sffamily\banxiaosi[1.538]}, + numberformat={\sffamily\banxiaosi[1.538]}, + }, + subsubsection={ + afterindent=true, + beforeskip={16bp\@plus 1ex \@minus .2ex}, + afterskip={6bp \@plus .2ex}, + format={\sffamily\xiaosi[1.667]}, + }, + paragraph/afterindent=true, + subparagraph/afterindent=true} +% \end{macrocode} +% +% \begin{macro}{\nju@chapter*} +% 默认的 \cs{chapter*} 很难同时满足研究生院和本科生的论文要求。本科论文要求所有的 +% 章都出现在目录里,比如摘要、Abstract、主要符号表等,所以可以简单的扩展默 +% 认\cs{chapter*} 实现这个目的。但是研究生又不要这些出现在目录中,而且致谢和声明 +% 部分的章名、页眉和目录都不同,所以定义一个灵活的 \cs{nju@chapter*} 专门处理这些 +% 要求。 +% +% \cs{nju@chapter*}\oarg{tocline}\marg{title}\oarg{header}: tocline 是出现在目录 +% 中的条目,如果为空则此 chapter 不出现在目录中,如果省略表示目录出现 title; +% title 是章标题;header 是页眉出现的标题,如果忽略则取 title。通过这个宏我才真 +% 正体会到 \TeX\ macro 的力量! +% \begin{macrocode} +\newcounter{nju@bookmark} +\NewDocumentCommand\nju@chapter{s o m o}{ + \IfBooleanF{#1}{% + \ClassError{njurepo}{You have to use the star form: \string\nju@chapter*}{} + }% + \ifnju@right\cleardoublepage\else\clearpage\fi\phantomsection% + \IfValueTF{#2}{% + \ifthenelse{\equal{#2}{}}{% + \addtocounter{nju@bookmark}\@ne + \pdfbookmark[0]{#3}{njuchapter.\thenju@bookmark} + }{% + \addcontentsline{toc}{chapter}{#3} + } + }{% + \addcontentsline{toc}{chapter}{#3} + }% + \ctexset{chapter/beforeskip=25bp} + \chapter*{#3}% + \ctexset{chapter/beforeskip=15bp} + \IfValueTF{#4}{% + \ifthenelse{\equal{#4}{}} + {\@mkboth{}{}} + {\@mkboth{#4}{#4}} + }{% + \@mkboth{#3}{#3} + } +} +% \end{macrocode} +% \end{macro} +% +% +% \subsubsection{目录} +% \label{sec:toc} +% 最多 4 层,即: x.x.x.x,对应的命令和层序号分别是: +% \cs{chapter}(0), \cs{section}(1), \cs{subsection}(2), \cs{subsubsection}(3)。 +% \begin{macrocode} +\setcounter{secnumdepth}{3} +\setcounter{tocdepth}{2} +% \end{macrocode} +% +% 每章标题行前空 6 磅,后空 0 磅。章节名中英文用 Arial 字体,页码仍用 Times。 +% \begin{macro}{\tableofcontents} +% \begin{macrocode} +\renewcommand\tableofcontents{% + \nju@chapter*[]{\contentsname} + \xiaosi[1.65]\@starttoc{toc}\normalsize} +% \end{macrocode} +% 调整目录样式 +% \begin{macrocode} +\def\@pnumwidth{2em} +\def\@tocrmarg{\@pnumwidth} +\def\@dotsep{1} +\renewcommand*\l@chapter[2]{% + \ifnum \c@tocdepth >\m@ne + \addpenalty{-\@highpenalty}% + \vskip 4bp \@plus\p@ + \setlength\@tempdima{4em}% + \begingroup + \parindent \z@ \rightskip \@pnumwidth + \parfillskip -\@pnumwidth + \leavevmode + \advance\leftskip\@tempdima + \hskip -\leftskip + {#1}% + \leaders\hbox{$\m@th\mkern \@dotsep mu\hbox{.}\mkern \@dotsep mu$}\hfill% + \nobreak{#2}\par + \penalty\@highpenalty + \endgroup + \fi} + +\patchcmd{\@dottedtocline}{\hb@xt@\@pnumwidth}{\hbox}{}{} +\renewcommand*\l@section{% + \@dottedtocline{1}{\ccwd}{2.1em}} +\renewcommand*\l@subsection{% + \@dottedtocline{2}{2\ccwd}{3em}} +\renewcommand*\l@subsubsection{% + \@dottedtocline{3}{3.5em}{3.8em}} +% \end{macrocode} +% \end{macro} +% +% \subsection{附加页面} +% \label{sec:etc} +% +% \subsubsection{封面} +% \label{sec:cover} +% 定义封面参数。 +% \begin{macrocode} +\def\nju@def@term#1{% + \define@key{nju}{#1}{\csname #1\endcsname{##1}} + \expandafter\gdef\csname #1\endcsname##1{% + \expandafter\gdef\csname nju@#1\endcsname{##1}} + \csname #1\endcsname{}} +\nju@def@term{ctitle} +\nju@def@term{csubtitle} +\nju@def@term{csubsubtitle} +\nju@def@term{etitle} +\nju@def@term{esubtitle} +\nju@def@term{esubsubtitle} +\nju@def@term{cauthor} +\nju@def@term{csupervisor} +\nju@def@term{cassosupervisor} +\nju@def@term{ccosupervisor} +\nju@def@term{eauthor} +\nju@def@term{esupervisor} +\nju@def@term{eassosupervisor} +\nju@def@term{ecosupervisor} +\nju@def@term{cdegree} +\nju@def@term{edegree} +\nju@def@term{cdepartment} +\nju@def@term{edepartment} +\nju@def@term{cmajor} +\nju@def@term{emajor} +\nju@def@term{cdate} +\nju@def@term{edate} +\nju@def@term{stdid} +\nju@def@term{mail} +\cdate{\CJK@todaybig@short} +\edate{\ifcase \month \or January\or February\or March\or April\or May% + \or June\or July \or August\or September\or October\or November + \or December\fi\unskip,\ \ \the\year} +% \end{macrocode} +% +% \begin{environment}{cabstract} +% \begin{environment}{eabstract} +% 摘要最好以环境的形式出现(否则命令的形式会导致开始结束的括号距离太远,我不喜 +% 欢),这就必须让环境能够自己保存内容留待以后使用。使用 \pkg{environ} 的 +% \cs{Collect@Body} 来实现。 +% \begin{macrocode} +\newcommand{\nju@@cabstract}[1]{\long\gdef\nju@cabstract{#1}} +\newenvironment{cabstract}{\Collect@Body\nju@@cabstract}{} +\newcommand{\nju@@eabstract}[1]{\long\gdef\nju@eabstract{#1}} +\newenvironment{eabstract}{\Collect@Body\nju@@eabstract}{} +% \end{macrocode} +% \end{environment} +% \end{environment} +% +% \begin{macro}{\nju@parse@keywords} +% 不同论文格式关键词之间的分割不太相同,我们用 \cs{ckeywords} 和 +% \cs{ekeywords} 来收集关键词列表,然后用本命令来生成符合要求的格式。 +% \begin{macrocode} +\def\nju@parse@keywords#1{ + \define@key{nju}{#1}{\csname #1\endcsname{##1}} + \expandafter\gdef\csname nju@#1\endcsname{} + \expandafter\gdef\csname #1\endcsname##1{ + \@for\reserved@a:=##1\do{ + \expandafter\ifx\csname nju@#1\endcsname\@empty\else + \expandafter\g@addto@macro\csname nju@#1\endcsname{% + \ignorespaces\csname nju@#1@separator\endcsname} + \fi + \expandafter\expandafter\expandafter\g@addto@macro% + \expandafter\csname nju@#1\expandafter\endcsname\expandafter{\reserved@a}}}} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\ckeywords} +% \begin{macro}{\ekeywords} +% 利用 \cs{nju@parse@keywords} 来定义,内部通过 \cs{nju@ckeywords} 和 +% \cs{nju@ekeywords} 来引用。 +% \begin{macrocode} +\nju@parse@keywords{ckeywords} +\nju@parse@keywords{ekeywords} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\njusetup} +% 由上可见,封面和封底有一大堆信息需要设置,为了简化操作界面,提供一 +% 个 \cs{njusetup} 命令支持 key/value 的方式来设置。key 就是前面各个设置项的 +% 名字。\note[说明:]{只能设置普通项,不支持环境项, +% 如 \texttt{cabstract} 和 \texttt{eabstract}。} 由于这些设置项被 \cs{makecover} +% 调用,所以此命令需要在 \cs{makecover} 之前被调用。 +% \begin{macrocode} +\def\njusetup{\kvsetkeys{nju}} +% \end{macrocode} +% \end{macro} +% +% 定义封面用到的各种文字。 +% \begin{macrocode} +\def\nju@ckeywords@separator{;} +\def\nju@ekeywords@separator{;} +\def\nju@catalog@number@title{分类号} +\def\nju@id@title{编号} +\def\nju@title@sep{:} +\def\nju@schoolname{南京大学} +\def\nju@author@title{姓名} +\def\nju@department@title{系别} +\def\nju@major@title{专业} +\def\nju@supervisor@title{指导教师} +\def\nju@assosuper@title{辅导教师} +\def\nju@studentid@title{学号} +\def\nju@date@title{日期} +\def\nju@mail@title{邮箱} +\newcommand{\nju@ckeywords@title}{关键词:} +\def\nju@title@pre{} + +\def\nju@eng@title@sep{:} +\def\nju@eng@author@title{Name} +\def\nju@eng@studentid@title{StdID} +\def\nju@eng@date@title{Date} +\def\nju@eng@mail@title{E-mail} +% \end{macrocode} +% +% 中文小型标题 +% \begin{macrocode} +\renewcommand{\maketitle}{ + \nju@setup@pdfinfo + \begin{center} {\LARGE \ifnju@chinese\nju@ctitle\else\nju@etitle\fi} + \end{center} + \hspace*{\fill} + \ifnju@chinese + \nju@author@title\nju@title@sep\CJKunderline{\nju@cauthor} + \else + \nju@eng@author@title\nju@eng@title@sep\underline{\nju@eauthor} + \fi + \hspace*{\fill} + \ifx\nju@stdid\@empty\relax + \else + \ifnju@chinese + \nju@studentid@title\nju@title@sep\CJKunderline{\nju@stdid} + \else + \nju@eng@studentid@title\nju@eng@title@sep\underline{\nju@stdid} + \fi + \fi + \hspace*{\fill} + \ifnju@chinese + \nju@date@title\nju@title@sep\CJKunderline{\today} + \else + \nju@eng@date@title\nju@eng@title@sep\CJKunderline{\nju@edate} + \fi + \hspace*{\fill}\\ +} +% \end{macrocode} +% +% 别样封面 +% \begin{macrocode} +\newcommand{\maketitlepage}{ + \nju@setup@pdfinfo + \begin{titlepage} + \begin{center} + \ifx\nju@esubsubtitle\@empty\relax {\LARGE\sffamily\scshape\ifnju@chinese\nju@csubsubtitle\else\nju@esubsubtitle\fi\ }\\[1.5cm] + \else + {\LARGE\sffamily\scshape \ifnju@chinese\nju@csubsubtitle\else\nju@esubsubtitle\fi}\\[1.5cm] + \fi + {\Large\sffamily\scshape \ifnju@chinese\nju@csubtitle\else\nju@esubtitle\fi}\\ + \rule{\linewidth}{0.5mm} \\[0.4cm] + {\huge\sffamily\bfseries \ifnju@chinese\nju@ctitle\else\nju@etitle\fi}\\ + \rule{\linewidth}{0.5mm} \\[1.5cm] + + \begin{center} + \begin{tabular}{@{\hspace{0.5cm}}l@{\hspace{0.5cm}}l} + \nju@eauthor & \nju@stdid\\ + \end{tabular} + \end{center} + \vfill + {\large \nju@edate} + \end{center} + \ifnju@right\cleardoublepage\else\clearpage\fi + \end{titlepage} +} +% \end{macrocode} +% +% \myentry{封面第一页} +% \begin{macro}{\nju@first@titlepage} +% 题名使用一号黑体字,一行写不下时可分两行写,并采用 1.25 倍行距。 +% 申请学位的学科门类: 小二号宋体字。 +% 中文封面页边距: +% 上- 6.0 厘米,下- 5.5 厘米,左- 4.0 厘米,右- 4.0 厘米,装订线 0 厘米; +% +% \begin{macrocode} +\newcommand\nju@underline[2][6em]{\hskip1pt\underline{\hb@xt@ #1{\hss#2\hss}}\hskip3pt} +\newlength{\nju@title@width} +\ifxetex % todo: ugly codes + \newcommand{\nju@put@title}[2][\nju@title@width]{% + \begin{CJKfilltwosides}[b]{#1}#2\end{CJKfilltwosides}} +\else + \newcommand{\nju@put@title}[2][\nju@title@width]{% + \begin{CJKfilltwosides}{#1}#2\end{CJKfilltwosides}} +\fi +\newcommand{\nju@first@titlepage}{ + \begin{center} + \vspace*{-1.6cm} + \parbox[b][2.4cm][t]{\textwidth}{% + \rule{1cm}{0cm}} + \vskip0.65cm + {\includegraphics[width=0.3\textwidth]{njuname0.pdf}} + \par\vskip1.5cm + {\xiaochu\heiti\ziju{0.5}\textbf\nju@csubtitle} + \vskip2.2cm\hskip0.8cm + \noindent\heiti\xiaoer\nju@title@pre + \parbox[t]{12cm}{% + \ignorespaces\yihao[1.51]% + \renewcommand{\CJKunderlinebasesep}{0.25cm}% + \renewcommand{\ULthickness}{1.3pt}% + \ifxetex + \xeCJKsetup{underline/format=\color{black}}% + \else + \def\CJKunderlinecolor{\color{black}}% + \fi + \centering\CJKunderline*{\nju@ctitle} + + }% + \vskip1.3cm +% \end{macrocode} +% +% 作者及导师信息部分使用三号仿宋字 +% \begin{macrocode} + \vskip0.75cm + \ifx\nju@cassosupervisor\@empty% + \def\nju@tempa{7.15cm} + \else% + \def\nju@tempa{8.15cm} + \fi% + \parbox[t][\nju@tempa][t]{\textwidth}{% + {\fangsong\sanhao[1.95]% + \hspace*{1.9cm} + \setlength{\nju@title@width}{4em} + \setlength{\extrarowheight}{6pt} + \ifxetex % todo: ugly codes + \begin{tabular}{p{\nju@title@width}@{}l@{\extracolsep{8pt}}l} + \else + \begin{tabular}{p{\nju@title@width}l@{}l} + \fi + \nju@put@title{\nju@department@title} & \nju@title@sep + & \nju@cdepartment\\ + \nju@put@title{\nju@major@title} & \nju@title@sep + & \nju@cmajor\\ + \nju@put@title{\nju@author@title} & \nju@title@sep + & \nju@cauthor \\ + \nju@put@title{\nju@supervisor@title} & \nju@title@sep + & \nju@csupervisor\\ + \ifx\nju@cassosupervisor\@empty\else% + \nju@put@title{\nju@assosuper@title} & \nju@title@sep + & \nju@cassosupervisor\\ + \fi + \end{tabular} + }} +% \end{macrocode} +% +% 论文成文打印的日期,用三号宋体汉字,不用阿拉伯数字 +% 本科:论文成文打印的日期用阿拉伯数字,采用小四号宋体 +% \begin{macrocode} + \begin{center} + {\vskip-1.0cm\xiaosi + \songti\nju@cdate} + \end{center} + \end{center}} % end of titlepage +% \end{macrocode} +% \end{macro} +% +% \myentry{英文封面} +% \begin{macro}{\nju@engcover} +% \begin{macrocode} +\newcommand{\nju@engcover}{% + \begin{center} + \vspace*{-5pt} + \parbox[t][5.2cm][t]{\paperwidth-7.2cm}{ + \renewcommand{\baselinestretch}{1.5} + \begin{center} + \erhao[1.1]\bfseries\sffamily\nju@etitle% + \end{center}} + \parbox[t][][b]{\paperwidth-7.2cm}{ + \renewcommand{\baselinestretch}{1.3} + \begin{center} + \sanhao\sffamily by\\[3bp] + \bfseries\nju@eauthor% + \ifx\nju@emajor\empty\relax\else + \\(~\nju@emajor~)% + \fi + \end{center}} + \par\vspace{0.9cm} + \parbox[t][2.1cm][t]{\paperwidth-7.2cm}{ + \renewcommand{\baselinestretch}{1.2} + \xiaosan\centering + \begin{tabular}{rl} + Supervisor : & \nju@esupervisor\\ + \ifx\nju@eassosupervisor\@empty + \else Associate Supervisor : & \nju@eassosupervisor\\\fi + \ifx\nju@ecosupervisor\@empty + \else Cooperate Supervisor : & \nju@ecosupervisor\\\fi + \end{tabular}} + \parbox[t][2cm][b]{\paperwidth-7.2cm}{ + \begin{center} + \sanhao\bfseries\sffamily\nju@edate + \end{center}} + \end{center}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\makecover} +% 生成封面总命令。 +% \begin{macrocode} +\def\makecover{% + \nju@setup@pdfinfo\nju@makecover} +\def\nju@setup@pdfinfo{% + \ifnju@chinese + \hypersetup{ + pdftitle = \nju@ctitle, + pdfauthor = \nju@cauthor, + pdfsubject = \nju@cdegree, + pdfkeywords = \nju@ckeywords, + }% + \else + \hypersetup{ + pdftitle = \nju@etitle, + pdfauthor = \nju@eauthor, + pdfsubject = \nju@edegree, + pdfkeywords = \nju@ekeywords, + }% + \fi + \hypersetup{ + pdfcreator={\njurepo-v\version}}} +\NewDocumentCommand{\nju@makecover}{o}{ + \phantomsection + \pdfbookmark[-1]{\nju@ctitle}{ctitle} + \normalsize% + \begin{titlepage} + \ifnju@chinese + \nju@first@titlepage + \else + \nju@engcover + \fi + \ifnju@right\cleardoublepage\else\clearpage\fi + \end{titlepage} +} +\newcommand{\makeabstract}{ + \normalsize + \nju@makeabstract + \let\@tabular\nju@tabular +} +% \end{macrocode} +% \end{macro} +% +% \subsubsection{摘要} +% \label{sec:abstractformat} +% +% \begin{macro}{\nju@put@keywords} +% 排版关键字。 +% \begin{macrocode} +\newbox\nju@kw +\newcommand\nju@put@keywords[2]{% + \begingroup + \setbox\nju@kw=\hbox{#1} + \indent% + \box\nju@kw#2\par + \endgroup} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\nju@makeabstract} +% 中文摘要部分的标题为“\textbf{摘要}”,用黑体三号字。 +% \begin{macrocode} +\newcommand{\nju@makeabstract}{% + \clearpage + \pagestyle{nju@plain} + \pagenumbering{Roman} +% \end{macrocode} +% +% 摘要内容用小四号字书写,两端对齐,汉字用宋体,外文字用 Times New Roman 体, +% 标点符号一律用中文输入状态下的标点符号。 +% \begin{macrocode} + \ifnju@chinese + \nju@setchinese + \nju@chapter*[]{\cabstractname} % no tocline + \nju@cabstract + \vskip12bp + \nju@put@keywords{\textbf\nju@ckeywords@title}{\nju@ckeywords} + \else + \nju@setenglish + \nju@chapter*[]{\eabstractname} % no tocline + \nju@eabstract + \vskip12bp + \nju@put@keywords{% + \textbf{Key Words:\enskip}}{\nju@ekeywords}% + \fi + \nju@setdefaultlanguage +} +% \end{macrocode} +% \end{macro} +% +% +% +% \subsubsection{主要符号表} +% \label{sec:denotationfmt} +% \begin{environment}{denotation} +% 主要符号对照表。 +% \begin{macrocode} +\ifnju@chinese + \newcommand\nju@denotation@name{主要符号对照表} +\else + \newcommand\nju@denotation@name{Nomenclature} +\fi +\newenvironment{denotation}[1][2.5cm]{% + \nju@chapter*[]{\nju@denotation@name} % no tocline + \vskip-30bp\xiaosi[1.6]\begin{nju@denotation}[labelwidth=#1] +}{% + \end{nju@denotation} +} +\newlist{nju@denotation}{description}{1} +\setlist[nju@denotation]{% + nosep, + font=\normalfont, + align=left, + leftmargin=!, % sum of the following 3 lengths + labelindent=0pt, + labelwidth=2.5cm, + labelsep*=0.5cm, + itemindent=0pt, +} +% \end{macrocode} +% \end{environment} +% +% \subsubsection{致谢与声明} +% \label{sec:ackanddeclare} +% +% \begin{environment}{acknowledgement} +% 支持扫描文件替换。 +% \begin{macrocode} +\ifnju@chinese + \newcommand\nju@ack@name{致\hspace{\ccwd}谢} +\else + \newcommand\nju@ack@name{Acknowledgments} +\fi +\newcommand\nju@declarename{声\hspace{\ccwd}明} +\newcommand{\nju@declaretext}{本人郑重声明:所呈交的学位论文,是本人在导师指导下 + ,独立进行研究工作所取得的成果。尽我所知,除文中已经注明引用的内容外,本学位论 + 文的研究成果不包含任何他人享有著作权的内容。对本论文所涉及的研究工作做出贡献的 + 其他个人和集体,均已在文中以明确方式标明。} +\newcommand{\nju@signature}{签\hspace{1em}名:} +\newcommand{\nju@backdate}{日\hspace{1em}期:} +% \end{macrocode} +% +% \cs{cleardoublepage},使新开章节的页码到达正确的状态。否则会因为 \cs{addcontentsline} +% 在 chapter 之前而导致目录页码错误。 +% 定义致谢与声明环境。 +% \begin{macrocode} +\NewDocumentEnvironment{acknowledgement}{o}{% + \nju@chapter*{\nju@ack@name} + } +% \end{macrocode} +% +% 声明部分 +% \begin{macrocode} + { + \ifnju@english\relax\else% + \IfNoValueTF{#1}{% + \nju@chapter*{\nju@declarename} + \par{\xiaosi\parindent2em\nju@declaretext}\vskip2cm + {\xiaosi\hfill\nju@signature\nju@underline[2.5cm]\relax% + \nju@backdate\nju@underline[2.5cm]\relax}% + }{% + \includepdf[pagecommand={\thispagestyle{nju@empty}% + \phantomsection\addcontentsline{toc}{chapter}{\nju@declarename}% + }]{#1}% + }% + \fi + } +% \end{macrocode} +% \end{environment} +% +% \subsubsection{图表索引} +% \label{sec:threeindex} +% \begin{macro}{\listoffigures} +% \begin{macro}{\listoffigures*} +% \begin{macro}{\listoftables} +% \begin{macro}{\listoftables*} +% 定义图表以及公式目录样式。 +% \begin{macrocode} +\def\nju@starttoc#1{% #1: float type, prepend type name in \listof*** entry. + \let\oldnumberline\numberline + \def\numberline##1{\oldnumberline{\csname #1name\endcsname\hskip.4em ##1}} + \@starttoc{\csname ext@#1\endcsname} + \let\numberline\oldnumberline} +\def\nju@listof#1{% #1: float type + \@ifstar + {\nju@chapter*[]{\csname list#1name\endcsname}\nju@starttoc{#1}} + {\nju@chapter*{\csname list#1name\endcsname}\nju@starttoc{#1}}} +\renewcommand\listoffigures{\nju@listof{figure}} +\renewcommand*\l@figure{\addvspace{6bp}\@dottedtocline{1}{0em}{4em}} +\renewcommand\listoftables{\nju@listof{table}} +\let\l@table\l@figure +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\equcaption} +% 本命令只是为了生成公式列表,所以这个 caption 是假的。如果要编号最好用 +% equation 环境,如果是其它编号环境,请手动添加 \cs{equcaption}。 +% 用法如下: +% +% \cs{equcaption}\marg{counter} +% +% \marg{counter} 指定出现在索引中的编号,一般取 \cs{theequation},如果你是用 +% \pkg{amsmath} 的 \cs{tag},那么默认是 \cs{tag} 的参数;除此之外可能需要你 +% 手工指定。 +% +% \begin{macrocode} +\def\ext@equation{loe} +\def\equcaption#1{% + \addcontentsline{\ext@equation}{equation}% + {\protect\numberline{#1}}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\listofequations} +% \begin{macro}{\listofequations*} +% \LaTeX\ 默认没有公式索引,此处定义自己的 \cs{listofequations}。 +% \begin{macrocode} +\newcommand\listofequations{\nju@listof{equation}} +\let\l@equation\l@figure +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \subsection{参考文献} +% \label{sec:ref} +% +% \begin{macro}{\inlinecite} +% 依赖于 \pkg{natbib} 宏包,修改其中的命令。 旧命令 \cs{onlinecite} 依然可用。 +% \begin{macrocode} +\newcommand\bibstyle@inline{\bibpunct{[}{]}{,}{n}{,}{,}} +\DeclareRobustCommand\inlinecite{\@inlinecite} +\def\@inlinecite#1{\begingroup\let\@cite\NAT@citenum\citep{#1}\endgroup} +\let\onlinecite\inlinecite +% \end{macrocode} +% \end{macro} +% +% 参考文献的正文部分用五号字。 +% 行距采用固定值 16 磅,段前空 3 磅,段后空 0 磅。 +% +% 复用 \pkg{natbib} 的 \texttt{thebibliography} 环境,调整距离。 +% \begin{macrocode} +\renewcommand\bibsection{\nju@chapter*{\bibname}} +\renewcommand\bibfont{\wuhao[1.5]} +\setlength\bibhang{2\ccwd} +\addtolength{\bibsep}{-0.7em} +\setlength{\labelsep}{0.4em} +\def\@biblabel#1{[#1]\hfill} +% \end{macrocode} +% +% 两种引用样式: +% \begin{macrocode} +\expandafter\newcommand\csname bibstyle@numeric\endcsname{% + \bibpunct{[}{]}{,}{s}{,}{\textsuperscript{,}}} +\expandafter\newcommand\csname bibstyle@author-year\endcsname{% + \bibpunct{(}{)}{;}{a}{,}{,}} +% \end{macrocode} +% +% 下面修改 \pkg{natbib} 的引用格式,主要是将页码写在上标位置。 +% numeric 模式的 \cs{citet} 的页码: +% \begin{macrocode} +\patchcmd\NAT@citexnum{% + \@ifnum{\NAT@ctype=\z@}{% + \if*#2*\else\NAT@cmt#2\fi + }{}% + \NAT@mbox{\NAT@@close}% +}{% + \NAT@mbox{\NAT@@close}% + \@ifnum{\NAT@ctype=\z@}{% + \if*#2*\else\textsuperscript{#2}\fi + }{}% +}{}{} +% \end{macrocode} +% +% Numeric 模式的 \cs{citep} 的页码: +% \begin{macrocode} +\renewcommand\NAT@citesuper[3]{\ifNAT@swa + \if*#2*\else#2\NAT@spacechar\fi +\unskip\kern\p@\textsuperscript{\NAT@@open#1\NAT@@close\if*#3*\else#3\fi}% + \else #1\fi\endgroup} +% \end{macrocode} +% +% Author-year 模式的 \cs{citet} 的页码: +% \begin{macrocode} +\patchcmd{\NAT@citex}{% + \if*#2*\else\NAT@cmt#2\fi + \if\relax\NAT@date\relax\else\NAT@@close\fi +}{% + \if\relax\NAT@date\relax\else\NAT@@close\fi + \if*#2*\else\textsuperscript{#2}\fi +}{}{} +% \end{macrocode} +% +% Author-year 模式的 \cs{citep} 的页码: +% \begin{macrocode} +\renewcommand\NAT@citesuper[3]{\ifNAT@swa + \if*#2*\else#2\NAT@spacechar\fi +\unskip\kern\p@\textsuperscript{\NAT@@open#1\NAT@@close\if*#3*\else#3\fi}% + \else #1\fi\endgroup} +% \end{macrocode} +% +% 在顺序编码制下,\pkg{natbib} 只有在三个以上连续文献引用才会使用连接号, +% 这里修改为允许两个引用使用连接号。 +% \begin{macrocode} +\patchcmd{\NAT@citexnum}{% + \ifx\NAT@last@yr\relax + \def@NAT@last@yr{\@citea}% + \else + \def@NAT@last@yr{--\NAT@penalty}% + \fi +}{% + \def@NAT@last@yr{-\NAT@penalty}% +}{}{} +% \end{macrocode} +% +% \subsection{附录} +% \label{sec:appendix} +% \begin{environment}{appendix} +% 主要给本科做外文翻译用。 +% \begin{macrocode} +\let\nju@appendix\appendix +\renewenvironment{appendix}{% + \let\title\nju@appendix@title + \nju@appendix}{% + \let\title\@gobble} +% \end{macrocode} +% \end{environment} +% +% \begin{macro}{\title} +% 本科外文翻译文章的标题,用法:\cs{title}\marg{资料标题}。这个命令只能在附录环 +% 境下使用。 +% \begin{macrocode} +\let\title\@gobble +\newcommand{\nju@appendix@title}[1]{% + \begin{center} + \xiaosi[1.667] #1 + \end{center}} +% \end{macrocode} +% \end{macro} +% +% \begin{environment}{translationbib} +% 外文资料的参考文用宋体五号字,取固定行距17pt,段前后3pt。 +% \begin{macrocode} +\newlist{translationbib}{enumerate}{1} +\setlist[translationbib]{label=[\arabic*],align=left,nosep,itemsep=6bp, + leftmargin=10mm,labelsep=!,before=\vspace{0.5\baselineskip}\wuhao[1.3]} +% \end{macrocode} +% \end{environment} +%\marginpar{这是边注} +% +%\subsection{颜色} +% \begin{macrocode} +\RequirePackage{xcolor} +\definecolor{codegreen}{rgb}{0,0.6,0} +\definecolor{codegray}{rgb}{0.5,0.5,0.5} +\definecolor{codepurple}{rgb}{0.58,0,0.82} +\definecolor{backcolour}{rgb}{0.95,0.95,0.92} +\newcommand{\red}[1]{\textcolor{red}{#1}} +\newcommand{\redoverlay}[2]{\textcolor<#2>{red}{#1}} +\newcommand{\green}[1]{\textcolor{green}{#1}} +\newcommand{\greenoverlay}[2]{\textcolor<#2>{green}{#1}} +\newcommand{\blue}[1]{\textcolor{blue}{#1}} +\newcommand{\blueoverlay}[2]{\textcolor<#2>{blue}{#1}} +\newcommand{\purple}[1]{\textcolor{purple}{#1}} +\newcommand{\cyan}[1]{\textcolor{cyan}{#1}} +\newcommand{\teal}[1]{\textcolor{teal}{#1}} +\newcommand{\magenta}[1]{{\color{magenta}#1}} +\newcommand{\note}[2][Note]{{% + \color{magenta}{\bfseries #1}\emph{#2}}} +% \end{macrocode} +% +%\subsection{代码} +% \begin{macrocode} +\RequirePackage{verbatim} +\RequirePackage{algorithm} +\RequirePackage{algpseudocode} +\newcommand{\pseduo}[2]{ +\begin{algorithm} + \caption{\textsc{#1}} + \label{alg:#1} + \begin{algorithmic}[1] + #2 + \end{algorithmic} +\end{algorithm} +} +\RequirePackage{listings} +\lstdefinestyle{lstStyleBase}{% + basicstyle=\small\ttfamily, + aboveskip=\medskipamount, + belowskip=\medskipamount, + lineskip=0pt, + boxpos=c, + showlines=false, + extendedchars=true, + upquote=true, + tabsize=2, + showtabs=false, + showspaces=false, + showstringspaces=false, + numbers=none, + linewidth=\linewidth, + xleftmargin=4pt, + xrightmargin=0pt, + resetmargins=false, + breaklines=true, + breakatwhitespace=false, + breakindent=0pt, + breakautoindent=true, + columns=flexible, + keepspaces=true, + gobble=2, + framesep=3pt, + rulesep=1pt, + framerule=1pt, + backgroundcolor=\color{gray!5}, + stringstyle=\color{green!40!black!100}, + keywordstyle=\bfseries\color{blue!50!black}, + commentstyle=\slshape\color{black!60} +} + +\newtcblisting{commandshell}{colback=black,colupper=white,colframe=yellow!75!black, listing only,listing options={style=tcblatex,language=sh}, +every listing line={\textcolor{red}{\small\ttfamily\bfseries \$>}}} + +\lstdefinestyle{lstStyleShell}{% + style=lstStyleBase, + frame=l, + rulecolor=\color{purple}, + language=bash} + +\lstdefinestyle{lstStyleLaTeX}{% + style=lstStyleBase, + frame=l, + rulecolor=\color{violet}, + language=[LaTeX]TeX} + +\lstdefinestyle{lstStylecdisplay}{% + style=lstStyleBase, + frame=tb, + rulecolor=\color{cyan}, + keywordstyle=\color{magenta}\bfseries\ttfamily, + commentstyle=\color{codegreen}\ttfamily, + stringstyle=\color{codepurple}\ttfamily\sffamily, + backgroundcolor=\color{backcolour}, + captionpos=b, + numbers=left, + numberstyle=\footnotesize\color{codegray}, + stepnumber=1, + numbersep=5pt, + language=C +} + +\lstdefinestyle{lstStylecpseudo}{% + style=lstStyleBase, + frame=none, + keywordstyle=\color{magenta}\bfseries\ttfamily, + commentstyle=\color{codegreen}\ttfamily, + stringstyle=\color{codepurple}\ttfamily\sffamily, + captionpos=b, + numbers=left, + numberstyle=\footnotesize\color{codegray}, + stepnumber=1, + numbersep=5pt, + language=C +} + +\lstdefinestyle{lstStylecplus}{% + style=lstStyleBase, + frame=l, + rulecolor=\color{blue}, + language=C++ +} + +\lstdefinestyle{lstStyleverilog}{% + style=lstStyleBase, + frame=l, + rulecolor=\color{brown}, + language=verilog +} + +\lstdefinestyle{lstStylepython}{% + style=lstStyleBase, + frame=l, + rulecolor=\color{pink}, + language=python +} + +\lstnewenvironment{code}{\lstset{style=lstStyleBase}}{} +\lstnewenvironment{latex}{\lstset{style=lstStyleLaTeX}}{} +\lstnewenvironment{shell}{\lstset{style=lstStyleShell}}{} +\lstnewenvironment{cdisplay}{\lstset{style=lstStylecdisplay}}{} +\lstnewenvironment{cplus}{\lstset{style=lstStylecplus}}{} +\lstnewenvironment{verilog}{\lstset{style=lstStyleverilog}}{} +\lstnewenvironment{python}{\lstset{style=lstStylepython}}{} +\lstnewenvironment{cpseudo}{\lstset{style=lstStylecpseudo}}{} +% \end{macrocode} +% +% \subsection{快速插入图片或图表} +% \begin{macrocode} +\newcommand{\figoptadd}[2]{ + \begin{figure}[H] + \centering + \includegraphics[#1]{figs/#2} + \end{figure} +} + +%%%%%%%%%%%%%%%%%%%% +\newcommand{\figoptaddcap}[3]{ + \begin{figure}[H] + \centering + \includegraphics[#1]{figs/#2} + \caption{#3} + \label{fig:#2} + \end{figure} +} +%%%%%%%%%%%%%%%%%%% +\newcommand{\tabncc}[3]{ + \begin{table}[H] + \centering + \begin{tabular}{|*{#1}{c|}} + \toprule + #2\\ + \bottomrule + \end{tabular} + \caption{#3} + \label{form:#3} +\end{table}} +%%%%%%%%%%%%%%%%%%% +\newcommand{\tabnc}[2]{ + \begin{table}[H] + \centering + \begin{tabular}{|*{#1}{c|}} + \toprule + #2\\ + \bottomrule + \end{tabular} +\end{table}} +\newcommand{\tnl}{\tabularnewline\midrule} +% \end{macrocode} +% +% \subsection{借用dtx文件代码} +% \begin{macrocode} +\def\cmd#1{\cs{\expandafter\cmd@to@cs\string#1}} +\def\cmd@to@cs#1#2{\char\number`#2\relax} +\DeclareRobustCommand\cs[1]{\texttt{\char`\\#1}} +\newcommand*{\meta}[1]{{% + \ensuremath{\langle}\rmfamily\itshape#1\/\ensuremath{\rangle}}} +\providecommand\marg[1]{% + {\ttfamily\char`\{}\meta{#1}{\ttfamily\char`\}}} +\providecommand\oarg[1]{% + {\ttfamily[}\meta{#1}{\ttfamily]}} +\providecommand\parg[1]{% + {\ttfamily(}\meta{#1}{\ttfamily)}} +\providecommand\pkg[1]{{\sffamily#1}} +% \end{macrocode} +% +% \subsection{水印} +% \begin{macrocode} +\RequirePackage{watermark} +\ifnju@draft +\AtEndOfClass{ + \watermark{% + \parbox[b][\paperheight]{\paperwidth}{% + \vfill + \centering% + \begin{tikzpicture}[remember picture,overlay] + \node [rotate=45,scale=10] at ($(current page.center) +(-1cm,1cm)$) + {\textcolor[gray]{0.8}{DRAFT}}; + \node [rotate=45,scale=3] at ($(current page.center) +(1cm,-1cm)$) + {\textcolor[gray]{0.75}{Compile time: \the\year - \the\month - \the\day}}; + \end{tikzpicture}% + \vfill + } + } +} +\fi +% \end{macrocode} +% 补丁 +% \begin{macrocode} +\renewcommand{\thesection}{\arabic{section}} +\newcommand{\nchapter}[1]{ + {\let\clearpage\relax\par\vspace{1cm} \chapter*{\LARGE#1}} +} +\newcommand*{\rom}[1]{\expandafter\@slowromancap\romannumeral #1@} +% \end{macrocode} +% +% \subsection{自定义代码} +% \begin{macrocode} + +\newcommand{\blankpage}{ + \clearpage + \begin{titlepage} + \null\vfil + \begin{center} + \textit{This page intentionally left blank.} + \end{center} + \end{titlepage} +} +\newcommand{\rmnum}[1]{\romannumeral #1} +\newcommand{\Rmnum}[1]{\expandafter\@slowromancap\romannumeral #1@} +% \end{macrocode} +% \subsection{结束部分} +% \label{sec:finish} +% \begin{macrocode} +\AtEndOfClass{\sloppy} +% \end{macrocode} +% +% +% +% +% \iffalse +% \begin{macrocode} +%<*dtx-style> +\ProvidesPackage{dtx-style} +\RequirePackage{hypdoc} +\RequirePackage{ifthen} +\RequirePackage[UTF8,scheme=chinese]{ctex} +\RequirePackage{newpxtext} +\RequirePackage{newpxmath} +\RequirePackage[ + top=2.5cm, bottom=2.5cm, + left=4cm, right=2cm,marginparwidth=2.6cm,marginparsep=3mm, + headsep=3mm]{geometry} +\RequirePackage{array,longtable,booktabs} +\RequirePackage{listings} +\RequirePackage{fancyhdr} +\RequirePackage{xcolor} +\definecolor{codegreen}{rgb}{0,0.6,0} +\definecolor{codegray}{rgb}{0.5,0.5,0.5} +\definecolor{codepurple}{rgb}{0.58,0,0.82} +\definecolor{backcolour}{rgb}{0.95,0.95,0.92} +\newcommand{\red}[1]{\textcolor{red}{#1}} +\newcommand{\redoverlay}[2]{\textcolor<#2>{red}{#1}} +\newcommand{\green}[1]{\textcolor{green}{#1}} +\newcommand{\greenoverlay}[2]{\textcolor<#2>{green}{#1}} +\newcommand{\blue}[1]{\textcolor{blue}{#1}} +\newcommand{\blueoverlay}[2]{\textcolor<#2>{blue}{#1}} +\newcommand{\purple}[1]{\textcolor{purple}{#1}} +\newcommand{\cyan}[1]{\textcolor{cyan}{#1}} +\newcommand{\teal}[1]{\textcolor{teal}{#1}} +\RequirePackage{enumitem} +\RequirePackage{etoolbox} +\RequirePackage{metalogo} +\RequirePackage{mathtools} +\DeclarePairedDelimiter{\ceil}{\lceil}{\rceil} +\DeclarePairedDelimiter{\floor}{\lfloor}{\rfloor} +\DeclareMathOperator{\Hamilton}{\hat{H}} +\ifthenelse{\equal{\@nameuse{g__ctex_fontset_tl}}{mac}}{% + \xeCJKsetwidth{‘’“”}{1em} +}{} + +\colorlet{nju@macro}{blue!60!black} +\colorlet{nju@env}{blue!70!black} +\colorlet{nju@option}{purple} +\patchcmd{\PrintMacroName}{\MacroFont}{\MacroFont\bfseries\color{nju@macro}}{}{} +\patchcmd{\PrintDescribeMacro}{\MacroFont}{\MacroFont\bfseries\color{nju@macro}}{}{} +\patchcmd{\PrintDescribeEnv}{\MacroFont}{\MacroFont\bfseries\color{nju@env}}{}{} +\patchcmd{\PrintEnvName}{\MacroFont}{\MacroFont\bfseries\color{nju@env}}{}{} + +\def\DescribeOption{% + \leavevmode\@bsphack\begingroup\MakePrivateLetters% + \Describe@Option} +\def\Describe@Option#1{\endgroup + \marginpar{\raggedleft\PrintDescribeOption{#1}}% + \nju@special@index{option}{#1}\@esphack\ignorespaces} +\def\PrintDescribeOption#1{\strut \MacroFont\bfseries\sffamily\color{nju@option} #1\ } +\def\nju@special@index#1#2{\@bsphack + \begingroup + \HD@target + \let\HDorg@encapchar\encapchar + \edef\encapchar usage{% + \HDorg@encapchar hdclindex{\the\c@HD@hypercount}{usage}% + }% + \index{#2\actualchar{\string\ttfamily\space#2} + (#1)\encapchar usage}% + \index{#1:\levelchar#2\actualchar + {\string\ttfamily\space#2}\encapchar usage}% + \endgroup + \@esphack} + +\lstdefinestyle{lstStyleBase}{% + basicstyle=\small\ttfamily, + aboveskip=\medskipamount, + belowskip=\medskipamount, + lineskip=0pt, + boxpos=c, + showlines=false, + extendedchars=true, + upquote=true, + tabsize=2, + showtabs=false, + showspaces=false, + showstringspaces=false, + numbers=none, + linewidth=\linewidth, + xleftmargin=4pt, + xrightmargin=0pt, + resetmargins=false, + breaklines=true, + breakatwhitespace=false, + breakindent=0pt, + breakautoindent=true, + columns=flexible, + keepspaces=true, + gobble=2, + framesep=3pt, + rulesep=1pt, + framerule=1pt, + backgroundcolor=\color{gray!5}, + stringstyle=\color{green!40!black!100}, + keywordstyle=\bfseries\color{blue!50!black}, + commentstyle=\slshape\color{black!60}} + +\lstdefinestyle{lstStyleShell}{% + style=lstStyleBase, + frame=l, + rulecolor=\color{purple}, + language=bash} + +\lstdefinestyle{lstStyleLaTeX}{% + style=lstStyleBase, + frame=l, + rulecolor=\color{violet}, + language=[LaTeX]TeX} +\lstdefinestyle{lstStylecplus}{% + style=lstStyleBase, + frame=l, + rulecolor=\color{blue}, + language=C++ + } + +\lstnewenvironment{latex}{\lstset{style=lstStyleLaTeX}}{} +\lstnewenvironment{shell}{\lstset{style=lstStyleShell}}{} +\lstnewenvironment{cplus}{\lstset{style=lstStylecplus}}{} + +\setlist{nosep} + +\DeclareDocumentCommand{\option}{m}{\textsf{#1}} +\DeclareDocumentCommand{\env}{m}{\texttt{#1}} +\DeclareDocumentCommand{\pkg}{s m}{% + \texttt{#2}\IfBooleanF#1{\nju@special@index{package}{#2}}} +\DeclareDocumentCommand{\file}{s m}{% + \texttt{#2}\IfBooleanF#1{\nju@special@index{file}{#2}}} +\newcommand{\myentry}[1]{% + \marginpar{\raggedleft\color{purple}\bfseries\strut #1}} +\newcommand{\note}[2][Note]{{% + \color{magenta}{\bfseries #1}\emph{#2}}} + +\def\njurepo{\textsc{NJU}\-\textsc{repo}} +\def\thuthesis{\textsc{Thu}\-\textsc{Thesis}} +% +% \end{macrocode} +% \fi +% \Finale -- cgit v1.2.3