texlive[62939] Master/texmf-dist: njuthesis (27mar22)
commits+karl at tug.org
commits+karl at tug.org
Wed Apr 6 00:09:37 CEST 2022
Revision: 62939
http://tug.org/svn/texlive?view=revision&revision=62939
Author: karl
Date: 2022-04-06 00:09:37 +0200 (Wed, 06 Apr 2022)
Log Message:
-----------
njuthesis (27mar22)
Modified Paths:
--------------
trunk/Master/texmf-dist/doc/latex/njuthesis/njuthesis.pdf
trunk/Master/texmf-dist/source/latex/njuthesis/njuthesis.dtx
trunk/Master/texmf-dist/source/latex/njuthesis/njuthesis.ins
trunk/Master/texmf-dist/tex/latex/njuthesis/njuthesis-graduate.def
trunk/Master/texmf-dist/tex/latex/njuthesis/njuthesis-undergraduate.def
trunk/Master/texmf-dist/tex/latex/njuthesis/njuthesis.cls
Modified: trunk/Master/texmf-dist/doc/latex/njuthesis/njuthesis.pdf
===================================================================
(Binary files differ)
Modified: trunk/Master/texmf-dist/source/latex/njuthesis/njuthesis.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/njuthesis/njuthesis.dtx 2022-04-05 22:09:21 UTC (rev 62938)
+++ trunk/Master/texmf-dist/source/latex/njuthesis/njuthesis.dtx 2022-04-05 22:09:37 UTC (rev 62939)
@@ -111,7 +111,7 @@
%
%<class>\NeedsTeXFormat{LaTeX2e}
%<*!(driver|install)>
-%<+!driver>\GetIdInfo $Id: njuthesis.dtx 0.16.0 2022-03-19 12:00:00 +0800 NJU LUG <git+nju-lug-email-3104-issue- at yaoge123.cn>$
+%<+!driver>\GetIdInfo $Id: njuthesis.dtx 0.16.1 2022-03-27 13:00:00 +0800 NJU LUG <git+nju-lug-email-3104-issue- at yaoge123.cn>$
%<class> {Thesis template for Nanjing University}
%<class>\ProvidesExplClass{njuthesis}
%<definition-ug> {Undergraduate definition file for njuthesis}
@@ -142,6 +142,7 @@
\UseTblrLibrary{booktabs,diagbox,siunitx}
\DefTblrTemplate{caption-tag}{default}{表\hspace{0.25em}\thetable}
\SetTblrStyle{caption-tag}{font=\bfseries}
+\SetTblrInner{row{1}={font=\bfseries}}
\DefTblrTemplate{caption-sep}{default}{\quad}
\lstdefinestyle{style at base}
{
@@ -191,13 +192,15 @@
%</driver>
% \fi
%
-% \title{\color{njuviolet}{The \cls{njuthesis} class\\ \textbf{南京大学学位论文模板}}}
+% \title{\color{njuviolet}{The \cls{njuthesis} class\\
+% \textbf{南京大学学位论文模板}}}
%
% \author{^^A
% 南京大学 Linux 用户组
-% \thanks{E-mail: \href{mailto:git+nju-lug-email-3104-issue- at yaoge123.cn}{git+nju-lug-email-3104-issue- at yaoge123.cn}}}
+% \thanks{E-mail: \href{mailto:git+nju-lug-email-3104-issue- at yaoge123.cn}
+% {git+nju-lug-email-3104-issue- at yaoge123.cn}}}
%
-% \date{v0.16.0 \quad 2022-03-19}
+% \date{v0.16.1 \quad 2022-03-27}
%
% \changes{v0.1}{2021/09/04}{开始开发。}
% \changes{v0.2}{2021/09/07}{初步搭建了可用的模板。}
@@ -245,12 +248,13 @@
% 在使用本模板时,我们默认您同意以下内容:
% \begin{enumerate}
% \item 本模板通过 LPPL 1.3c 协议开放源代码,您可以随意使用编译出的 PDF 文件。
-% \item 本模板与学校官方部门并不存在合作关系,作者不对使用本模板产生的格式审查问题负责。
+% \item 本模板与学校官方部门并不存在合作关系,
+% 作者不对使用本模板产生的格式审查问题负责。
% \item 遇到本文档没有覆盖的问题属于正常情况,欢迎提交反馈意见。
% \end{enumerate}
%
-% 我们的 \href{https://git.nju.edu.cn/nju-lug/lug-introduction}{Linux 用户组}始终欢迎
-% 您的加入!
+% 我们的 \href{https://git.nju.edu.cn/nju-lug/lug-introduction}
+% {Linux 用户组}始终欢迎您的加入!
% \end{abstract}
%
% \clearpage
@@ -266,9 +270,12 @@
%
% \section{模板介绍}
%
-% \cls{njuthesis},即南京大学学位论文模板,是一个由南京大学 Linux 用户组维护的,用于处理本校学生毕业论文排版需求的 \hologo{LaTeX} 模板。
+% \cls{njuthesis},即南京大学学位论文模板,是一个由南京大学 Linux
+% 用户组维护的,用于处理本校学生毕业论文排版需求的 \hologo{LaTeX} 模板。
%
-% 本模板使用的本科生毕业论文模板格式依据《关于启动南京大学2022届本科毕业论文(设计)工作的通知》\cite{nju2021},研究生学位论文格式依据研究生院提供的材料包。
+% 本模板使用的本科生毕业论文模板格式依据
+% 《关于启动南京大学2022届本科毕业论文(设计)工作的通知》\cite{nju2021},
+% 研究生学位论文格式依据研究生院提供的材料包。
%
%
% \subsection{开始之前}
@@ -280,35 +287,41 @@
% \fcolorbox{olgreen}{gray!5}{\parbox{\textwidth-5em}{%
% \hspace{2em}\begin{minipage}[c]{10cm}
% \begin{enumerate}
-% \item 访问 \url{https://tex.nju.edu.cn}
-% \item 点击右上角~\olbutton{注册}~按钮,用\href{https://itsc.nju.edu.cn/1b/ce/c21586a334798/page.htm}{南大邮箱}注册账号
-% \item 登录您的账号
-% \item 点击左上角~\olbutton{创建新项目}~按钮,选择~\olbutton{论文模板}
-% \item 随意取名,点击~\olbutton{创建}~按钮
+% \item 访问 \url{https://tex.nju.edu.cn}
+% \item 点击右上角~\olbutton{注册}~按钮,
+% 用\href{https://itsc.nju.edu.cn/1b/ce/c21586a334798/page.htm}
+% {南大邮箱}注册账号
+% \item 登录您的账号
+% \item 点击左上角~\olbutton{创建新项目}~按钮,选择~\olbutton{论文模板}
+% \item 随意取名,点击~\olbutton{创建}~按钮
% \end{enumerate}
% \end{minipage}}}
%
% \bigskip
-% 稍等片刻,您会在浏览器右侧发现一份新生成的空白论文。如果它的效果令您满意,不妨以此为基础开始写作。
+% 稍等片刻,您会在浏览器右侧发现一份新生成的空白论文。
+% 如果它的效果令您满意,不妨以此为基础开始写作。
%
% \subparagraph{我一定要体验上述流程吗?}
-% 是,但也不一定。有人坚持认为应该做一些\emph{直观、清晰、有手就行、一条路走到底}的教程,而不是
-% \emph{长篇累牍的精细介绍},其核心论据在于:现代人类总体上需要快速取得成就感,而且大部分可能用
-% 到本模板的同学不会具备必要的基础知识。反驳的观点在于过分简单的实验总是浪费时间的,尤其是在您
-% 可能早已掌握基本用法的情况下。但,不论如何,这番操作总会使您预览到 \cls{njuthesis} 论文模板的
-% 实际样式。
+% 是,但也不一定。有人坚持认为应该做一些\emph{直观、清晰、有手就行、一
+% 条路走到底}的教程,而不是\emph{长篇累牍的精细介绍},其核心论据在于:
+% 现代人类总体上需要快速取得成就感,而且大部分可能用到本模板的同学不
+% 会具备必要的基础知识。反驳的观点在于过分简单的实验总是浪费时间的,
+% 尤其是在您可能早已掌握基本用法的情况下。但,不论如何,这番操作总会
+% 使您预览到 \cls{njuthesis} 论文模板的实际样式。
%
% \subparagraph{我并没有见到理想的结果。}
-% 具体是哪里不满意?如果是\emph{样式存在偏差},请联系模板的作者;如果\emph{不能访问前文提到的在
-% 线编译网站},请考虑检查网络连接,依次咨询本校
-% \href{https://itsc.nju.edu.cn}{信息化管理建设服务中心} 和该网站的维护者
-% \href{mailto:my at yaoge123.cn}{姚舸老师};如果\emph{报错},请点击左上角的菜单按钮,查看编译器是
-% 否显示为 |XeLaTeX|;再如果\emph{还有其他原因},通过这几分钟的实验我们也可以得到一个相当有益的
-% 结论:\emph{也许 Word 模板更加适合您}。这可以节省下熟悉 \hologo{TeX} 排版软件使用方法所需的可
-% 观时间。
+% 具体是哪里不满意?如果是\emph{样式存在偏差},请联系模板的作者;如果
+% \emph{不能访问前文提到的在线编译网站},请考虑检查网络连接,依次咨询
+% 本校\href{https://itsc.nju.edu.cn}{信息化管理建设服务中心}和该网站
+% 的维护者\href{mailto:my at yaoge123.cn}{姚舸老师};如果\emph{报错},请
+% 点击左上角的菜单按钮,查看编译器是否显示为 |XeLaTeX|;
+% 再如果\emph{还有其他原因},通过这几分钟的实验我们也可以得到一个相当
+% 有益的结论:\emph{也许 Word 模板更加适合您}。这可以节省下熟悉
+% \hologo{TeX} 排版软件使用方法所需的可观时间。
%
% \subparagraph{但我依然对 \hologo{LaTeX} 一无所知!}
-% 这意味着您也许得花些时间在\emph{长篇累牍的精细介绍}上。请接着向后阅读,有需要时善用搜索。
+% 这意味着您也许得花些时间在\emph{长篇累牍的精细介绍}上。
+% 请接着向后阅读,有需要时善用搜索。
%
%
% \subsection{历史沿革}
@@ -315,16 +328,27 @@
%
% 十几年来,多位热心校友发布过自己编写的模板,在 GitHub 网站上可考的包括:
% \begin{enumerate}
-% \item 杨文博(\href{http://yangwenbo.com/}{@solrex})的 njuthesis(2010 - 2018) \cite{wenboyang2013}
-% \item \href{https://github.com/fireblue}{@fireblue} 基于杨文博模板的 NJUThesis(2013)\cite{fireblue2013}
-% \item \href{https://github.com/wenhai-zheng}{@wenhai-zheng} 的 NJUThesis(2013)\cite{wenhai-zheng2013}
-% \item 曹增乐(\href{https://github.com/ZLCao}{@ZLCao})的 NJUBachelor(2013 - 2016)\cite{zenglecao2013}
-% \item 胡海星(\href{http://haixing-hu.github.io/}{@Haixing-Hu})的 NJU-Thesis(2013 - 2018)\cite{haixinghu2013}
-% \item 张楚珩(\href{https://github.com/zhangchuheng123}{@zhangchuheng123})基于胡海星模板的 NJUThesis(2016)\cite{chuhengzhang2016}
-% \item 蒋炎岩(\href{http://ics.nju.edu.cn/~jyy/}{@jiangyy})的 njuthesis(2017 - 2019)\cite{yanyanjiang2017}
-% \item \href{https://github.com/njuHan}{@njuHan} 基于胡海星模板的 NJU-Thesis(2018 - 2021)
-% \item 饶安逸(\href{https://anyirao.com/}{@AnyiRao})基于张楚珩模板的 NJU Thesis 2018(2018)\cite{anyirao2018}
-% \item 赵懿晨(\href{https://fengchendian.github.io/about.html}{@FengChendian})基于饶安逸模板的 NJU Thesis 2021(2021)\cite{yichenzhao2021}
+% \item 杨文博(\href{http://yangwenbo.com/}{@solrex})的
+% njuthesis(2010 - 2018) \cite{wenboyang2013}
+% \item \href{https://github.com/fireblue}{@fireblue} 基于杨文博模板的
+% NJUThesis(2013)\cite{fireblue2013}
+% \item \href{https://github.com/wenhai-zheng}{@wenhai-zheng} 的
+% NJUThesis(2013)\cite{wenhai-zheng2013}
+% \item 曹增乐(\href{https://github.com/ZLCao}{@ZLCao})的
+% NJUBachelor(2013 - 2016)\cite{zenglecao2013}
+% \item 胡海星(\href{http://haixing-hu.github.io/}{@Haixing-Hu})的
+% NJU-Thesis(2013 - 2018)\cite{haixinghu2013}
+% \item 张楚珩(\href{https://github.com/zhangchuheng123}{@zhangchuheng123})
+% 基于胡海星模板的 NJUThesis(2016)\cite{chuhengzhang2016}
+% \item 蒋炎岩(\href{http://ics.nju.edu.cn/~jyy/}{@jiangyy})的
+% njuthesis(2017 - 2019)\cite{yanyanjiang2017}
+% \item \href{https://github.com/njuHan}{@njuHan} 基于胡海星模板的
+% NJU-Thesis(2018 - 2021)
+% \item 饶安逸(\href{https://anyirao.com/}{@AnyiRao})基于张楚珩模板的
+% NJU Thesis 2018(2018)\cite{anyirao2018}
+% \item 赵懿晨(\href{https://fengchendian.github.io/about.html}
+% {@FengChendian})基于饶安逸模板的
+% NJU Thesis 2021(2021)\cite{yichenzhao2021}
% \end{enumerate}
% 至于不幸而未进行代码版本管理的,甚至于说以压缩包形式流传于各人硬盘中的,就更不可计数了。
%
@@ -415,28 +439,37 @@
% \href{https://github.com/nju-lug/NJUThesis}{Github仓库}。仓库内仅包含源代码、
% 空白模板及测试文件,不可直接用于写作。这些文件对应的使用方法请参考
% \ref{subsubsec:on-the-fly-installation}。如果由于网络原因不便访问主仓库,也可
-% 以从\href{https://git.nju.edu.cn/nju-lug/nju-latex-templates/njuthesis}{NJU Git 同步镜像} 获取项目工程文件。
+% 以从 \href{https://git.nju.edu.cn/nju-lug/nju-latex-templates/njuthesis}
+% {NJU Git 同步镜像}获取项目工程文件。
%
% \subparagraph{GitHub Releases}
-% 本模板不定期将已有的新功能和问题修复打包为新的正式发行版,赋以更改后的版本号,发布在 \href{https://github.com/nju-lug/NJUThesis/releases/latest}{Github Releases 页面}。如果由于网络原因不便访问主仓库,也可以从\href{https://mirror.nju.edu.cn/github-release/nju-lug/NJUThesis/LatestRelease/}{南京大学镜像站下载页面}获取。可供下载的文件包括下列三种:
+% 本模板不定期将已有的新功能和问题修复打包为新的正式发行版,赋以更改后的版本号,
+% 发布在 \href{https://github.com/nju-lug/NJUThesis/releases/latest}{Github
+% Releases 页面}。如果由于网络原因不便访问主仓库,也可以从\ignorespaces
+% \href{https://mirror.nju.edu.cn/github-release/nju-lug/NJUThesis/LatestRelease/}
+% {南京大学镜像站下载页面}获取。可供下载的文件包括下列三种:
% \begin{description}
% \item[\file{njuthesis-v*.pdf}] 模板说明文档(本文档)。
-% \item[\file{njuthesis-user-v*.zip}] 交付给用户的完整模板包,包括格式文件和范本文档,可在解压后用于本地编译,也可直接上传至在线编译网站。
-% \item[\file{njuthesis-ctan-v*.zip}] 交付给 CTAN 的源代码包,普通用户请忽略。
+% \item[\file{njuthesis-user-v*.zip}] 交付给用户的完整模板包,
+% 包括格式文件和范本文档,可在解压后用于本地编译,
+% 也可直接上传至在线编译网站。
+% \item[\file{njuthesis-ctan-v*.zip}] 交付给 CTAN 的源代码包,
+% 普通用户请忽略。
% \end{description}
%
%
% \subsubsection{文件构成}
%
-% 本模板由数量众多的文件组成,\emph{所有可能遇到的}文件如表 \ref{tab:njuthesis-files} 所示。
+% 本模板由数量众多的文件组成,\emph{所有可能遇到的}文件如表
+% \ref{tab:njuthesis-files} 所示。
%
% \begin{table}[ht]
% \centering
% \begin{talltblr}[
-% caption = {\cls{njuthesis}文件构成},
-% label = {tab:njuthesis-files},
-% note{a} = {仅供开发使用,并不会在发布版本中出现。}
-% ] {ll}
+% caption = {\cls{njuthesis}文件构成},
+% label = {tab:njuthesis-files},
+% note{a} = {仅供开发使用,并不会在发布版本中出现。}
+% ] { row{1} = {font=\bfseries}, colspec = {ll} }
% \toprule
% 名称 & 说明 \\
% \midrule
@@ -513,8 +546,10 @@
%
% \subsubsection{安装\hologo{TeX}发行版}
%
-% 首先需要下载并安装 \hologo{TeX} 软件发行版,其中包括引擎、宏包、字体、文档等。各操作系统适用情况请参考表~\ref {tab:texdistribution}。第一次编译前请务必通过 MiKTeX Console、TeX Live
-% Manager 等图形化程序或 \pkg{tlmgr} \emph{手动更新全部宏包}以避免潜在的兼容性问题。
+% 首先需要下载并安装 \hologo{TeX} 软件发行版,其中包括引擎、宏包、字体、
+% 文档等。各操作系统适用情况请参考表~\ref {tab:texdistribution}。第一次
+% 编译前请务必通过 MiKTeX Console、TeX LiveManager 等图形化程序或
+% \pkg{tlmgr} \emph{手动更新全部宏包}以避免潜在的兼容性问题。
% \begin{table}[ht]
% \centering
% \caption{\hologo{TeX} 软件发行版一览}
@@ -533,11 +568,16 @@
% 以下是一些值得注意的要点:
% \begin{itemize}
% \item 可以参照这份\emph{手把手的教程}\cite{install-latex-guide-zh-cn}。
-% \item 校园网环境中访问\href{https://mirror.nju.edu.cn/download/TeX%20%E6%8E%92%E7%89%88%E7%B3%BB%E7%BB%9F}{南京大学开源软件镜像站}可以获得最佳的下载体验。
+% \item 校园网环境中访问\ignorespaces
+% \href{https://mirror.nju.edu.cn/download/TeX%20排版系统}
+% {南京大学开源软件镜像站}可以获得最佳的下载体验。
% \item 使用最新的发行版,即版本号为2021或者21。
% \item 对于 Windows 和 macOS 用户,更推荐轻量化的 \hologo{MiKTeX} 套件。
-% \item Linux 用户请尽可能下载 full 版本,如 |texlive-full|。换言之,下载最大的软件包。
-% \item 对于一部分用到新版本特性的宏包,\cls{njuthesis} 内置了版本检查\footnote{譬如遇到 l3 过时问题请运行 |tlmgr update l3packages|。},请确认各宏包已升级至最新版。
+% ^^A \item Linux 用户请尽可能下载 full 版本,如 |texlive-full|。
+% ^^A 换言之,下载最大的软件包。
+% \item 对于一部分用到新版本特性的宏包,\cls{njuthesis} 内置了版本检查
+% \footnote{譬如遇到 l3 过时问题请运行 |tlmgr update l3packages|。}
+% ,请确认各宏包已升级至最新版。
% \end{itemize}
%
%
@@ -546,22 +586,30 @@
%
% 配置完编译器后,还需要一个\emph{文本编辑器}来完成 \file{.tex} 文件内容的写作。
%
-% 关于具体使用哪一种,至今仍有相当一部分人认为Windows自带的\emph{记事本}是最好的
-% 文本编辑器。但对于本项目而言,在此诚心诚意地推荐您使用\emph{更现代更美观更多功
-% 能}的编辑器,譬如\emph{安装了 LaTeX Workshop 插件的 \href{https://code.visualstudio.com/}{Visual Studio Code}}。您也可以根据个人的喜好随意使用 TeXworks、TeXstudio 等编辑器,顺手就行。
+% 关于具体使用哪一种,至今仍有相当一部分人认为Windows自带的\emph{记事本}是
+% 最好的文本编辑器。但对于本项目而言,在此诚心诚意地推荐您使用\emph{更现代
+% 更美观更多功能}的编辑器,譬如\emph{安装了 \hologo{LaTeX} Workshop 插件的
+% \href{https://code.visualstudio.com/}{Visual Studio Code}}。您也可以根据
+% 个人的喜好随意使用 TeXworks、TeXstudio 等编辑器,顺手就行。
%
% \cls{njuthesis} 为一些常见编辑器提供了配置文件,如
% \begin{description}
-% \item[Visual Studio Code] 本模板在 \file{.vscode/} 中提供一份 \hologo{LaTeX} Workshop 插件的简易配置,在打开文件夹后将自动导入,可以省略初始配置步骤直接使用。
-% \item[TeXstudio] 本模板提供 \file{conf.txsprofile},可以使用快捷键 |alt+O+P| 导入配置文件。为了简化流程\footnote{当然,也可以设置为使用 \hologo{XeLaTeX} 编译,然后按照 \ref{subsubsec:compileseq} 内容使用快捷键 |F8| 手动编译参考文献。},该配置文件使用 \pkg{latexmk},第一次编译前请参考下一节内容安装 Perl。
+% \item[Visual Studio Code] 本模板在 \file{.vscode/} 中提供一份
+% \hologo{LaTeX} Workshop 插件的简易配置,在打开文件夹后将自动导入,
+% 可以省略初始配置步骤直接使用。
+% \item[TeXstudio] 本模板提供 \file{conf.txsprofile},可以使用快捷键
+% |alt+O+P| 导入配置文件。为了简化流程\footnote{当然,也可以设置
+% 为使用 \hologo{XeLaTeX} 编译,然后按照 \ref{subsubsec:compileseq}
+% 内容使用快捷键 |F8| 手动编译参考文献。},该配置文件使用
+% \pkg{latexmk},第一次编译前请参考下一节内容安装 Perl。
% \end{description}
%
%
% \subsubsection{编译顺序}
% \label{subsubsec:compileseq}
-% \hologo{TeX} 本身是命令行程序,通过不同的命令调用所需的编译引擎,编辑器提供的
-% 快捷按钮实际只是做了包装。为了便于排查运行错误,以下通过具体终端命令简要描述编
-% 译过程。
+% \hologo{TeX} 本身是命令行程序,通过不同的命令调用所需的编译引擎,
+% 编辑器提供的快捷按钮实际只是做了包装。为了便于排查运行错误,
+% 以下通过具体终端命令简要描述编译过程。
%
% 编译本模板的过程可以概括为下述步骤:
% \begin{enumerate}
@@ -570,8 +618,9 @@
% \item 生成页码、编号、目录
% \item 将参考文献列表页插入目录
% \end{enumerate}
-% 总计需要编译四次。\emph{假设即将使用的主文件名为 \file{njuthesis-sample.tex}},应采用以
-% 下命令顺序进行编译,以生成内容正确的 \file{njuthesis-sample.pdf}。输出的 PDF
+% 总计需要编译四次。\emph{假设即将使用的主文件名为
+% \file{njuthesis-sample.tex}},应采用以下命令顺序进行编译,
+% 以生成内容正确的 \file{njuthesis-sample.pdf}。输出的 PDF
% 文档位于同一目录下。该目录下同时会生成若干中间文件。
%
% 编译命令具体为引擎名称加主文件名,在编译 \file{.tex} 文件时,
@@ -604,10 +653,13 @@
%
%
% \subparagraph{使用 \pkg{latexmk}}
-% \pkg{latexmk}\cite{latexmk} 是一个基于 Perl 脚本的自动编译工具,宗旨是通过单一命令简化上述的多次编译流程。在使用该命令前,请确保安装了以下软件:
+% \pkg{latexmk}\cite{latexmk} 是一个基于 Perl 脚本的自动编译工具,
+% 宗旨是通过单一命令简化上述的多次编译流程。
+% 在使用该命令前,请确保安装了以下软件:
% \begin{description}
-% \item[Perl] 一般预装于 macOS 和 Linux,而 Windows 用户需要单独安装 \href{https://strawberryperl.com/}{Strawberry Perl}。
-% \item[\pkg{latexmk}] \hologo{MiKTeX} 已预装;如果终端找不到 |latexmk| 命令,\hologo{TeX}\,Live 用户需使用 \pkg{tlmgr} 单独安装。
+% \item[Perl] 一般预装于 macOS 和 Linux,而 Windows 用户需要单独安装
+% \href{https://strawberryperl.com/}{Strawberry Perl}。
+% \item[\pkg{latexmk}] 如果终端找不到 |latexmk| 命令,需使用包管理器单独安装。
% \end{description}
%
% 该命令的使用方法为
@@ -817,23 +869,26 @@
% \begin{table}[htbp]
% \centering
% \begin{talltblr}[
-% caption = {中文字体配置列表},
-% label = {tab:cjk-fontset},
-% note{a} = {请下载简繁扩展(即 GBK 编码)版本},
-% note{b} = {使用
-% \href{http://www.foundertype.com/index.php/FontInfo/index/id/164}{方正小标宋}
-% 作为方正书宋的粗体},
-% note{c} = {使用
-% \href{http://www.foundertype.com/index.php/FontInfo/index/id/131}{方正黑体}
-% 作为方正细黑一的粗体},
-% note{d} = {在部分操作系统中可能已经预装 Google Noto 字体。考虑到获取字体的难易程度,单独安装时请采用
+% caption = {中文字体配置列表},
+% label = {tab:cjk-fontset},
+% note{a} = {请下载简繁扩展(即 GBK 编码)版本},
+% note{b} = {使用\ignorespaces
+% \href{http://www.foundertype.com/index.php/FontInfo/index/id/164}
+% {方正小标宋}作为方正书宋的粗体},
+% note{c} = {使用\ignorespaces
+% \href{http://www.foundertype.com/index.php/FontInfo/index/id/131}
+% {方正黑体}作为方正细黑一的粗体},
+% note{d} = {在部分操作系统中可能已经预装 Google Noto 字体。
+% 考虑到获取字体的难易程度,单独安装时请采用
% \href{https://mirrors.nju.edu.cn/download/Adobe%20Source%20Han}{Adobe Source Han}
% 字体表示思源字体,请下载 Simplified Chinese(即后缀名为 SC)的版本},
% note{e} = {思源字体并不包含楷书和仿宋,而 Adobe 楷体和仿宋难以直接下载,
-% 因此使用方正字体代替},
-% ] { cell{2}{2,4} = {white!70!njuyellow}, cell{4}{4} = {white!70!njuyellow}, colspec = {ccccc} }
+% 因此使用方正字体代替} ]
+% { cell{2}{2,4} = {white!70!njuyellow},
+% cell{4}{4} = {white!70!njuyellow},
+% row{1} = {font=\bfseries}, colspec = {ccccc} }
% \toprule
-% \bf 配置名称 & \bf 宋体 & \bf 黑体 & \bf 楷书 & \bf 仿宋 \\
+% 配置名称 & 宋体 & 黑体 & 楷书 & 仿宋 \\
% \midrule
% Windows & 中易宋体 & 中易黑体 & 中易楷体 & 中易仿宋 \\
% macOS & 华文宋体 & 华文黑体 & 华文楷体 & 华文仿宋 \\
@@ -847,7 +902,7 @@
% \href{https://github.com/adobe-fonts}{思源}\TblrNote{d}
% & \href{https://mirrors.nju.edu.cn/adobe-fonts/source-han-serif/OTF/SimplifiedChinese/}{思源宋体}
% & \href{https://mirrors.nju.edu.cn/adobe-fonts/source-han-sans/OTF/SimplifiedChinese/}{思源黑体}
-% & 方正楷体\TblrNote{e} & 方正仿宋 \\
+% & 方正楷体\TblrNote{e} & 方正仿宋 \\
% \bottomrule
% \end{talltblr}
% \end{table}
@@ -903,9 +958,17 @@
% title = \Arg{标题}
% title* = \Arg{英文标题}
% \end{syntax}
-% 题目。由于封面上提供给中文题目的横线长度有限\footnote{单行最长为15个汉字,建议总长度不超过45字},本模板默认会自动对标题进行换行。如果需要手动制定换行位点,请使用换行控制符( |\\| ),最多两处。
+% 题目。由于封面上提供给中文题目的横线长度有限\footnote{单行最长为15个汉字,建议总长度不超过45字},本模板默认会自动对标题进行换行。如果需要手动指定换行位点,请使用换行控制符( |\\| ),最多两处。
% \end{function}
%
+% 绘制封面及摘要中的标题涉及断行处理,无法对空字符串产生正确结果。
+% 因而在手动将标题设置为空时,本模板将抛出如下错误:
+% \begin{shellexample}[deletekeywords={in}]
+% ! Package njuthesis Error: The title should not be left blank.
+% (njuthesis) Please check whether you have fill in both
+% (njuthesis) Chinese and English titles.
+% \end{shellexample}
+%
% \begin{function}[updated=2021-10-01]{info/keywords,info/keywords*}
% \begin{syntax}
% keywords = \Arg{关键词}
@@ -1434,7 +1497,8 @@
% \item[著者-出版年制] 正文引用的文献采用著者-出版年制时,各篇文献的标注内容由著者姓氏与出版年构成,并置于"()"内。参考文献表采用著者-出版年制组织时,各篇文献首先按文种集中,然后按著者字顺和出版年排列。
% \end{description}
%
-% 对于本科生而言,学校规定文件表明参考文献表应当“用数字加方括号表示”\cite{nju2021},符合顺序编码制的格式,保持默认设置即可。
+% 对于本科生而言,学校规定文件表明参考文献表应当“用数字加方括号
+% 表示”\cite{nju2021},符合顺序编码制的格式,保持默认设置即可。
%
% \begin{function}[added=2022-02-15]{bib/option}
% \begin{syntax}
@@ -1450,7 +1514,8 @@
% \begin{syntax}
% resource = \Arg{文件}
% \end{syntax}
-% 参考文献数据源。类似于 \tn{addbibresource} 命令,但可以使用逗号分隔的列表形式。必须使用带扩展名(\file{.bib})的完整文件名。
+% 参考文献数据源。类似于 \tn{addbibresource} 命令,但可以使用逗号分隔的
+% 列表形式。必须使用带扩展名(\file{.bib})的完整文件名。
% \end{function}
%
% \begin{function}{\addbibresource}
@@ -1457,11 +1522,14 @@
% \begin{syntax}
% \tn{addbibresource}\Arg{文件}
% \end{syntax}
-% 添加参考文献源文件。为了与 \pkg{biblatex} 进行兼容,也可使用本命令添加数据源。本命令不支持逗号分隔多个文件的形式,如果希望额外添加参考文献列表,需要在导言区中多次调用。
+% 添加参考文献源文件。为了与 \pkg{biblatex} 进行兼容,也可使用本命令
+% 添加数据源。本命令不支持逗号分隔多个文件的形式,如果希望额外添加参
+% 考文献列表,需要在导言区中多次调用。
% \end{function}
%
% 可以参考如下范例进行参考文献设置。
-% 其中 \opt{bib/option} 的内容旨在关闭部分不需显示的文献信息,可根据需要使用。
+% 其中 \opt{bib/option} 的内容旨在关闭部分不需显示的文献信息,
+% 并采取仅首字母大写的作者姓名格式,可根据需要使用。
% \begin{latexexample}[moretexcs={\njusetup},emph={[2]bib}]
% \njusetup {
% bib = {
@@ -1471,7 +1539,8 @@
% doi = false,
% isbn = false,
% url = false,
-% eprint = false
+% eprint = false,
+% gbnamefmt = lowercase
% }
% }
% }
@@ -1516,40 +1585,43 @@
% 引用命令 \tn{cite} 含有多个变体,以便使用文献条目中不同的信息域。在两种参考文献样式下,这些命令的行为具体存在一些差异,详见表 \ref{tab:numeric-style} 和表 \ref{tab:author-year-style}。
%
% \begin{table}[ht]
-% \caption{顺序编码制下的引用样式}
-% \label{tab:numeric-style}
% \centering
-% \begin{tblr}{cll}
+% \begin{talltblr} [
+% caption = {顺序编码制下的引用样式},
+% label = {tab:numeric-style} ]
+% { row{1} = {font=\bfseries}, colspec = {cll} }
% \toprule
-% \bf 引用方式 & \bf 命令 & \bf 排版效果 \\
+% 引用方式 & 命令 & 排版效果 \\
% \midrule
-% 单篇文献 & \tn{cite} & 上标可设置页码 \\
-% 单篇文献 & \tn{parencite} & 非上标可设置页码 \\
-% 多篇文献 & \tn{cite} & 上标,逗号隔开或短横线连接 \\
-% 标注页码 & \tn{pagescite} & 上标加自动页码 \\
-% 标注作者 & \tn{textcite} & 作者为主语加非上标编号 \\
-% 标注作者 & \tn{authornumcite} & 作者为主语加上标编号 \\
-% 完整脚注 & \tn{footfullcite} & 脚注方式 \\
+% 单篇文献 & \tn{cite} & 上标可设置页码 \\
+% 单篇文献 & \tn{parencite} & 非上标可设置页码 \\
+% 多篇文献 & \tn{cite} & 上标,逗号隔开或短横线连接 \\
+% 标注页码 & \tn{pagescite} & 上标加自动页码 \\
+% 标注作者 & \tn{textcite} & 作者为主语加非上标编号 \\
+% 标注作者 & \tn{authornumcite} & 作者为主语加上标编号 \\
+% 完整脚注 & \tn{footfullcite} & 脚注方式 \\
% \bottomrule
-% \end{tblr}
+% \end{talltblr}
% \end{table}
%
% \begin{table}[ht]
% \centering
-% \begin{talltblr}[
-% caption = {著者-出版年制下的引用样式},
-% label = {tab:author-year-style},
-% note{a} = {在此样式下 \tn{parencite} 效果等同于 \tn{cite}} ] {cll}
+% \begin{talltblr} [
+% caption = {著者-出版年制下的引用样式},
+% label = {tab:author-year-style},
+% note{a} = {在此样式下 \tn{parencite} 效果等同于 \tn{cite}。} ]
+% { row{1} = {font=\bfseries}, colspec = {cll} }
% \toprule
-% \bf 引用方式 & \bf 命令 & \bf 排版效果 \\
+% 引用方式 & 命令 & 排版效果 \\
% \midrule
-% 单篇文献 & \tn{cite}\TblrNote{a} & 作者加年份用括号包围可设置页码 \\
-% 多篇文献 & \tn{cite} & 分号隔开 \\
-% 标注页码 & \tn{pagescite} & 作者加年份用括号包围自动页码 \\
-% 标注年份 & \tn{yearcite} & 用括号包围的年份 \\
-% 标注年份、页码 & \tn{yearpagescite} & 提供年份用括号包围自动页码 \\
-% 标注作者 & \tn{textcite} & 作者为主语加加括号包围年份 \\
-% 完整脚注 & \tn{footfullcite} & 脚注方式 \\
+% 单篇文献 & \tn{cite}\TblrNote{a} &
+% 作者加年份用括号包围可设置页码 \\
+% 多篇文献 & \tn{cite} & 分号隔开 \\
+% 标注页码 & \tn{pagescite} & 作者加年份用括号包围自动页码 \\
+% 标注年份 & \tn{yearcite} & 用括号包围的年份 \\
+% 标注年份、页码 & \tn{yearpagescite} & 提供年份用括号包围自动页码 \\
+% 标注作者 & \tn{textcite} & 作者为主语加加括号包围年份 \\
+% 完整脚注 & \tn{footfullcite} & 脚注方式 \\
% \bottomrule
% \end{talltblr}
% \end{table}
@@ -1632,7 +1704,25 @@
% 关闭此选项后摘要页将不会出现在目录中,仅保留其 PDF 书签。
% \end{function}
%
+% \begin{function}[added=2022-03-26]{style/abstract-title}
+% \begin{syntax}
+% abstract-title = <(strict)|centered|natural>
+% \end{syntax}
+% 选择研究生摘要标题样式。
+% 默认为严格模式(\opt{strict}),即完全模仿材料包要求。
+% \end{function}
%
+% 材料包中的 Word 空白模板仅有两行空白下划线。
+% 根据填写习惯的不同,模板预置了三种样式:
+% \begin{itemize}
+% \item \opt{strict},在两行空白下划线上左对齐填写标题。
+% 如果该标题不足一行,则第二行下划线留空;
+% 如果长度超出两行,则向后延伸并抛出一个警告信息。
+% \item \opt{centered},将严格模式的左对齐改为居中。
+% \item \opt{natural},仅居中标题,不做行数检查。
+% 本模式更适合较短的题目。
+% \end{itemize}
+%
% \subsubsection{前言页}
%
% \begin{function}{preface}
@@ -1801,6 +1891,8 @@
% \begin{itemize}
% \item \pkg{natbib} 和 \pkg{gbt7714} 等 \hologo{BibTeX} 相关的参考文献宏包。
% \item \pkg{bm} 等使用传统数学字体配置方案的宏包。
+% \item \pkg{babel} 在直接使用时会覆盖默认的中文名称设置。
+% \item \pkg{microtype} 在 \hologo{XeTeX} 和 \hologo{LuaTeX} 下支持有限。
% \end{itemize}
%
%
@@ -2014,8 +2106,8 @@
%
%
% \end{documentation}
+% \clearpage
%
-%
% \begin{implementation}
%
% \section{代码实现}
@@ -2106,12 +2198,13 @@
% \end{variable}
%
% \begin{variable}{\l_@@_info_degree_tl,\l_@@_info_diploma_tl,
-% \l_@@_info_type_tl}
+% \l_@@_info_type_tl,\l_@@_info_type_en_tl}
% 用于存储学位名称的变量。
% \begin{macrocode}
\tl_new:N \l_@@_info_degree_tl
\tl_new:N \l_@@_info_diploma_tl
\tl_new:N \l_@@_info_type_tl
+\tl_new:N \l_@@_info_type_en_tl
% \end{macrocode}
% \end{variable}
%
@@ -2283,7 +2376,7 @@
\cs_new_protected:Npn \@@_ulined_center_box:nn #1#2
{
\mode_leave_vertical:
- \rule [ -0.5 ex ] { #1 } { 0.4 pt }
+ \rule [ -0.55 ex ] { #1 } { 0.4 pt }
\skip_horizontal:n { -#1 }
\hbox_to_wd:nn { #1 } { \hfil #2 \hfil }
}
@@ -2358,7 +2451,7 @@
\cs_new_protected:Npn \@@_uline:n #1
{
\mode_leave_vertical:
- \rule [ -0.5 ex ] { #1 } { 0.4 pt }
+ \rule [ -0.55 ex ] { #1 } { 0.4 pt }
\skip_horizontal:n { -#1 }
}
% \end{macrocode}
@@ -2469,6 +2562,16 @@
% \subsubsection{封面相关}
% \changes{v0.16}{2022/03/10}{将封面和摘要内部函数定义移动到前部。}
%
+% 定义关于标题的报错信息。
+% \begin{macrocode}
+\msg_new:nnn { njuthesis } { missing-title }
+ {
+ The~ title~ should~ not~ be~ left~ blank.\\
+ Please~ check~ whether~ you~ have~ fill~ in~
+ both~ Chinese~ and~ English~ titles.
+ }
+% \end{macrocode}
+%
% \begin{macro}{\@@_split_title:n,\@@_split_title:V}
% 分割标题。
% \begin{macrocode}
@@ -2505,6 +2608,8 @@
% \begin{macrocode}
\cs_new_protected:Npn \@@_multiline_title:nnn #1#2#3
{
+ \tl_if_empty:NT \l_@@_info_title_tl
+ { \msg_error:nn { njuthesis } { missing-title } }
\@@_split_title:V \l_@@_info_title_tl
\@@_spread_box:nnV { #2 } { \kaishu } \c_@@_name_title_tl
\@@_hskip:
@@ -2612,7 +2717,78 @@
% \end{macrocode}
% \end{macro}
%
+% \begin{macro}{\@@_uline_box:}
+% 用于摘要标题的下划线盒子。
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_uline_box:
+ { \vtop{\box1\kern-\prevdepth\kern0.5ex\hrule} }
+% \end{macrocode}
+% \end{macro}
%
+% 定义关于标题的报错信息。
+% \begin{macrocode}
+\msg_new:nnn { njuthesis } { abs-title-too-long }
+ {
+ Your~ title~ is~ too~ long~ to~ fit~ in~ two~ lines.\\
+ I~ have~ drawn~ additional~ lines~ to~ contain~ it,~
+ which~ will~ probably~ make~ your~ abstract~ page~
+ look~ slightly~ different~ from~ the~ standard.\\
+ You~ can~ use~ the~ "style/abstract-title"~ key~
+ to~ disable~ this~ message.
+ }
+% \end{macrocode}
+%
+% \begin{macro}{\@@_uline_list:nnn,\@@_uline_list:xnn}
+% \changes{v0.16}{2022/03/25}{使用原生断行算法处理摘要页标题。}
+% 用于研究生摘要页面的多行标题。
+% \begin{arguments}
+% \item 标签名
+% \item 内容
+% \item 左边距
+% \end{arguments}
+% 这里使用了 Primitive \TeX{} 语法以利用原生的断行算法\footnote{\url{https://tex.stackexchange.com/questions/637861/underline-list-item-to-page-width}}。
+% 对其语法的简要介绍可以参考 \href{http://petr.olsak.net/ftp/olsak/optex/tex-nutshell.pdf}{\file{tex-nutshell.pdf}}。
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_uline_list:nnn #1#2#3
+ {
+ \hbox_set:Nn \l_@@_tmp_box {#1}
+ \setbox0=\vbox{\hangindent=\wd\l_@@_tmp_box \hangafter=-1
+ \leftskip=#3 \rightskip=\leftskip \parindent=\z@ #2\par
+ \global\setbox2=\hbox{}
+ \int_gzero:N \l_@@_tmp_int
+ \loop
+ \setbox1=\lastbox \unskip\unpenalty
+ \unless\ifvoid1
+ \global\setbox2=\hbox{\@@_uline_box:\penalty0\unhbox2}
+ \int_gincr:N \l_@@_tmp_int
+ \repeat
+ }
+ {
+ \noindent\copy\l_@@_tmp_box\unhbox2
+% \end{macrocode}
+% 在使用自然断行算法后,研究生的摘要标题可选择 \opt{strict}
+% 或者 \opt{natural} 模式。前者会为少于两行的标题补齐下划线,
+% 并对多于三行的标题生成警告信息。这里通过行数处理边界条件,
+% 包括标题未填写、标题只有一行,以及标题过长的情况。
+% \begin{macrocode}
+ \bool_if:NT \g_@@_strict_abs_title_bool
+ {
+ \int_case:nnF { \l_@@_tmp_int }
+ {
+ { 0 } { \msg_error:nn { njuthesis } { missing-title } }
+ { 1 } { \@@_uline:n { \textwidth } }
+ { 2 } { \prg_do_nothing: }
+ }
+ { \msg_warning:nn { njuthesis } { abs-title-too-long } }
+ \par
+ }
+ }
+ }
+\cs_generate_variant:Nn \@@_uline_list:nnn { xnn }
+% \end{macrocode}
+% \end{macro}
+%
+%
% \subsection{页面对象}
% \changes{v0.15}{2022/01/24}{使用 \pkg{xtemplate} 重构封面。}
%
@@ -3035,10 +3211,10 @@
% \begin{macrocode}
\msg_new:nnn { njuthesis } { load-config }
{ I~ am~ loading~ config~ file~ "#1". }
-\clist_if_empty:NF \g_@@_config_clist
+\clist_map_inline:Nn \g_@@_config_clist
{
- \msg_info:nnx { njuthesis } { load-config } { \g_@@_config_tl }
- \clist_map_inline:Nn \g_@@_config_clist { \file_input:n { #1 } }
+ \msg_info:nnn { njuthesis } { load-config } { #1 }
+ \file_input:n { #1 }
}
% \end{macrocode}
%
@@ -3060,6 +3236,7 @@
title .tl_set:N = \l_@@_info_title_tl,
title .initial:n = { 空 },
title* .tl_set:N = \l_@@_info_title_en_tl,
+ title* .initial:n = { Empty },
% \end{macrocode}
% \end{macro}
%
@@ -3166,7 +3343,9 @@
% 设置类型信息。
% \begin{macrocode}
\tl_set:Nx \l_@@_info_type_tl
- { \clist_item:Nn \c_@@_name_type_clist { \g_@@_info_type_int } }
+ { \clist_item:Nn \c_@@_name_type_clist { \g_@@_info_type_int } }
+\tl_set:Nx \l_@@_info_type_en_tl
+ { \clist_item:Nn \c_@@_name_type_en_clist { \g_@@_info_type_int } }
\tl_put_left:Nx \l_@@_info_type_tl
{ \tl_use:c { c_@@_name_ \l_@@_info_diploma_tl _tl } }
% \end{macrocode}
@@ -4539,7 +4718,7 @@
\@@_ulined_center_box:nn { 9 em } { \l_@@_info_clc_tl } \hfill
\@@_spread_box:nnV { 3.2 em } { } \c_@@_name_seclv_tl \@@_hskip:
\@@_ulined_center_box:nn { 9 em } { \l_@@_info_seclv_tl } \\
- V { 3.2 em } { } { \c_@@_name_udc_tl } \@@_hskip:
+ \@@_spread_box:nnV { 3.2 em } { } \c_@@_name_udc_tl \@@_hskip:
\@@_ulined_center_box:nn { 9 em } { \l_@@_info_udc_tl } \hfill \null
}
% \end{macrocode}
@@ -4853,8 +5032,9 @@
%<definition-g> content = \@@_abs_info_g:n { : },
%<definition-ug> format = \zihao { -4 } \kaishu,
%<definition-g> format = \zihao { 4 } \kaishu,
- align = l,
- bottom-skip = 1 cm
+%<definition-ug> bottom-skip = 1 cm,
+%<definition-g> bottom-skip = 2 cm,
+ align = l
}
% \end{macrocode}
% \end{macro}
@@ -4880,8 +5060,9 @@
%<definition-g> content = \@@_abs_info_en_g:n { :~ },
%<definition-ug> format = \zihao { -4 },
%<definition-g> format = \zihao { 4 },
- align = l,
- bottom-skip = 1 cm
+%<definition-ug> bottom-skip = 1 cm,
+%<definition-g> bottom-skip = 2 cm,
+ align = l
}
%</(definition-ug|definition-g)>
% \end{macrocode}
@@ -4926,6 +5107,30 @@
% \paragraph{研究生}
% \changes{v0.13}{2021/12/12}{使用 \hologo{LaTeX3} 语法重构研究生摘要。}
%
+% \begin{macro}{abstract/mark}
+% 英文摘要标题实例。
+% \begin{macrocode}
+\@@_declare_element:nn { abstract / mark }
+ {
+ content = \c_@@_name_abstract_b_tl,
+ format = \sffamily \zihao { -3 },
+ bottom-skip = 1 cm
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{abstract/en/mark}
+% 英文摘要标题实例。
+% \begin{macrocode}
+\@@_declare_element:nn { abstract / en / mark }
+ {
+ content = \c_@@_name_abstract_b_en_tl,
+ format = \sffamily \zihao { -3 },
+ bottom-skip = 1 cm
+ }
+% \end{macrocode}
+% \end{macro}
+%
% \begin{macro}{\@@_abs_info_g:n}
% 绘制研究生中文摘要信息栏。
% \begin{arguments}
@@ -4936,15 +5141,12 @@
%<*definition-g>
\cs_new_protected:Npn \@@_abs_info_g:n #1
{
- \@@_full_uline:NV \l_@@_tmp_dim
+ \@@_uline_list:xnn
{
\clist_item:Nn \c_@@_name_type_clist { \g_@@_info_type_int }
\c_@@_name_title_a_tl #1
}
- \@@_ulined_center_box:nn { \l_@@_tmp_dim }
- { \tl_range:Nnn \l_@@_info_title_tl { 1 } { 20 } } \\
- \@@_uline:n { \textwidth } \@@_qquad:
- \tl_range:Nnn \l_@@_info_title_tl { 21 } { -1 } \\
+ { \l_@@_info_title_tl } { \g_@@_abs_title_left_skip }
% \end{macrocode}
% 专业、年级、姓名。
% \begin{macrocode}
@@ -4977,21 +5179,16 @@
% \begin{macrocode}
\cs_new_protected:Npn \@@_abs_info_en_g:n #1
{
- \@@_full_uline:NV \l_@@_tmp_dim
- { \clist_item:Nn \c_@@_name_type_en_clist
- { \g_@@_info_type_int } #1 }
- \@@_ulined_center_box:nn { \l_@@_tmp_dim }
- { \tl_range:Nnn \l_@@_info_title_en_tl { 1 } { 40 } } \\
- \@@_uline:n { \textwidth } \@@_qquad:
- \tl_range:Nnn \l_@@_info_title_en_tl { 41 } { -1 }
+ \@@_uline_list:xnn { \l_@@_info_type_en_tl #1 }
+ { \l_@@_info_title_en_tl } { \g_@@_abs_title_left_skip }
% \end{macrocode}
% 使用循环输出专业、姓名、导师。注意这里将 |\\| 放置在前部,
% 以避免末尾生成多余的换行符产生 |Underfull \vbox| 信息。
% \begin{macrocode}
\clist_map_inline:nn { major, author, supv_full }
- { \\
+ {
\@@_uline_entry:Nnnn \l_@@_tmp_dim
- { ##1 _en } { ##1 _en } { #1 }
+ { ##1 _en } { ##1 _en } { #1 } \par
}
}
%</definition-g>
@@ -5016,7 +5213,7 @@
% \end{macrocode}
% 关键词列表的悬挂缩进样式由 \tn{list} 环境产生。
% \begin{macrocode}
- \list { }
+ \list { \l_@@_tmp_tl }
{
\labelwidth \l_@@_tmp_dim
\labelsep \c_zero_dim
@@ -5028,8 +5225,7 @@
% \begin{macrocode}
\cs_set_eq:NN \makelabel \textbf
}
- \item [ \l_@@_tmp_tl ]
- \clist_use:cn { l_@@_info_keywords #1 _clist } { #2 }
+ \item \clist_use:cn { l_@@_info_keywords #1 _clist } { #2 }
\endlist
}
%</class>
@@ -5038,6 +5234,7 @@
%
%
% \subsubsection{绘制摘要}
+% \changes{v0.16}{2022/03/26}{补上研究生摘要页面的小标题。}
%
% \begin{macro}{\@@_make_abstract:,\@@_make_abstract_en:}
% 绘制摘要页面。
@@ -5047,11 +5244,13 @@
{
\UseInstance { nju } { abstract / title }
\UseInstance { nju } { abstract / info }
+%<definition-g> \UseInstance { nju } { abstract / mark }
}
\cs_new_protected:Npn \@@_make_abstract_en:
{
\UseInstance { nju } { abstract / en / title }
\UseInstance { nju } { abstract / en / info }
+%<definition-g> \UseInstance { nju } { abstract / en / mark }
}
%</(definition-ug|definition-g)>
% \end{macrocode}
@@ -5060,8 +5259,15 @@
%
% \subsubsection{用户接口}
%
+% \begin{macro}{\g_@@_abs_title_left_skip}
+% 研究生摘要标题左边距。
% \begin{macrocode}
%<*class>
+\skip_new:N \g_@@_abs_title_left_skip
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
\keys_define:nn { nju / style }
{
% \end{macrocode}
@@ -5069,8 +5275,32 @@
% \changes{v0.15}{2022/02/04}{可选择摘要是否出现在目录中。}
% 是否将摘要添加到目录。
% \begin{macrocode}
- abstract-in-toc .bool_gset:N = \g_@@_abs_in_toc_bool,
- abstract-in-toc .initial:n = true
+ abstract-in-toc .bool_gset:N = \g_@@_abs_in_toc_bool,
+ abstract-in-toc .initial:n = true,
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{style/abstract-title}
+% \changes{v0.16}{2022/03/26}{可选择研究生摘要标题样式。}
+% 选择摘要样式,默认为 \opt{strict}。
+% \begin{macrocode}
+ abstract-title .choice:,
+ abstract-title / strict .code:n =
+ {
+ \bool_gset_true:N \g_@@_strict_abs_title_bool
+ \skip_gset:Nn \g_@@_abs_title_left_skip { 1 em }
+ },
+ abstract-title / centered .code:n =
+ {
+ \bool_gset_true:N \g_@@_strict_abs_title_bool
+ \skip_gset:Nn \g_@@_abs_title_left_skip { 0 pt plus 1 fill }
+ },
+ abstract-title / natural .code:n =
+ {
+ \bool_gset_false:N \g_@@_strict_abs_title_bool
+ \skip_gset:Nn \g_@@_abs_title_left_skip { 0 pt plus 1 fill }
+ },
+ abstract-title .initial:n = strict
}
% \end{macrocode}
% \end{macro}
@@ -5262,6 +5492,8 @@
{ abstract } { 摘要 } { ABSTRACT },
% 用于书签的摘要名称字样
{ abstract_a } { 中文摘要 } { ABSTRACT },
+ % 用于小标题的摘要名称字样
+ { abstract_b } { 摘\qquad{}要 } { ABSTRACT },
{ appendix } { 附录 } { appendix },
{ dept } { 院系 } { DEPARTMENT },
{ figure } { 图 } { figure },
Modified: trunk/Master/texmf-dist/source/latex/njuthesis/njuthesis.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex/njuthesis/njuthesis.ins 2022-04-05 22:09:21 UTC (rev 62938)
+++ trunk/Master/texmf-dist/source/latex/njuthesis/njuthesis.ins 2022-04-05 22:09:37 UTC (rev 62939)
@@ -76,6 +76,18 @@
\Msg{*************************************************************}
\endbatchfile
+\__nju_declare_element:nn { abstract / mark }
+ {
+ content = \c__nju_name_abstract_b_tl,
+ format = \sffamily \zihao { -3 },
+ bottom-skip = 1 cm
+ }
+\__nju_declare_element:nn { abstract / en / mark }
+ {
+ content = \c__nju_name_abstract_b_en_tl,
+ format = \sffamily \zihao { -3 },
+ bottom-skip = 1 cm
+ }
\endinput
%%
%% End of file `njuthesis.ins'.
Modified: trunk/Master/texmf-dist/tex/latex/njuthesis/njuthesis-graduate.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/njuthesis/njuthesis-graduate.def 2022-04-05 22:09:21 UTC (rev 62938)
+++ trunk/Master/texmf-dist/tex/latex/njuthesis/njuthesis-graduate.def 2022-04-05 22:09:37 UTC (rev 62939)
@@ -23,7 +23,7 @@
%% To produce the documentation run the original source files ending with
%% `.dtx' through XeTeX.
%%
-\GetIdInfo $Id: njuthesis.dtx 0.16.0 2022-03-19 12:00:00 +0800 NJU LUG <git+nju-lug-email-3104-issue- at yaoge123.cn>$
+\GetIdInfo $Id: njuthesis.dtx 0.16.1 2022-03-27 13:00:00 +0800 NJU LUG <git+nju-lug-email-3104-issue- at yaoge123.cn>$
{Graduate definition file for njuthesis}
\ProvidesExplFile{njuthesis-graduate.def}
{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription}
@@ -165,7 +165,7 @@
\__nju_ulined_center_box:nn { 9 em } { \l__nju_info_clc_tl } \hfill
\__nju_spread_box:nnV { 3.2 em } { } \c__nju_name_seclv_tl \__nju_hskip:
\__nju_ulined_center_box:nn { 9 em } { \l__nju_info_seclv_tl } \\
- V { 3.2 em } { } { \c__nju_name_udc_tl } \__nju_hskip:
+ \__nju_spread_box:nnV { 3.2 em } { } \c__nju_name_udc_tl \__nju_hskip:
\__nju_ulined_center_box:nn { 9 em } { \l__nju_info_udc_tl } \hfill \null
}
\cs_new_protected:Npn \__nju_cover_title_nl:
@@ -258,8 +258,8 @@
{
content = \__nju_abs_info_g:n { : },
format = \zihao { 4 } \kaishu,
- align = l,
- bottom-skip = 1 cm
+ bottom-skip = 2 cm,
+ align = l
}
\__nju_declare_element:nn { abstract / en / title }
{
@@ -271,20 +271,29 @@
{
content = \__nju_abs_info_en_g:n { :~ },
format = \zihao { 4 },
- align = l,
+ bottom-skip = 2 cm,
+ align = l
+ }
+\__nju_declare_element:nn { abstract / mark }
+ {
+ content = \c__nju_name_abstract_b_tl,
+ format = \sffamily \zihao { -3 },
bottom-skip = 1 cm
}
+\__nju_declare_element:nn { abstract / en / mark }
+ {
+ content = \c__nju_name_abstract_b_en_tl,
+ format = \sffamily \zihao { -3 },
+ bottom-skip = 1 cm
+ }
\cs_new_protected:Npn \__nju_abs_info_g:n #1
{
- \__nju_full_uline:NV \l__nju_tmp_dim
+ \__nju_uline_list:xnn
{
\clist_item:Nn \c__nju_name_type_clist { \g__nju_info_type_int }
\c__nju_name_title_a_tl #1
}
- \__nju_ulined_center_box:nn { \l__nju_tmp_dim }
- { \tl_range:Nnn \l__nju_info_title_tl { 1 } { 20 } } \\
- \__nju_uline:n { \textwidth } \__nju_qquad:
- \tl_range:Nnn \l__nju_info_title_tl { 21 } { -1 } \\
+ { \l__nju_info_title_tl } { \g__nju_abs_title_left_skip }
\__nju_full_uline:NV \l__nju_tmp_dim
{
\__nju_ulined_center_box:nn { 11 em } { \l__nju_info_major_tl }
@@ -301,17 +310,12 @@
}
\cs_new_protected:Npn \__nju_abs_info_en_g:n #1
{
- \__nju_full_uline:NV \l__nju_tmp_dim
- { \clist_item:Nn \c__nju_name_type_en_clist
- { \g__nju_info_type_int } #1 }
- \__nju_ulined_center_box:nn { \l__nju_tmp_dim }
- { \tl_range:Nnn \l__nju_info_title_en_tl { 1 } { 40 } } \\
- \__nju_uline:n { \textwidth } \__nju_qquad:
- \tl_range:Nnn \l__nju_info_title_en_tl { 41 } { -1 }
+ \__nju_uline_list:xnn { \l__nju_info_type_en_tl #1 }
+ { \l__nju_info_title_en_tl } { \g__nju_abs_title_left_skip }
\clist_map_inline:nn { major, author, supv_full }
- { \\
+ {
\__nju_uline_entry:Nnnn \l__nju_tmp_dim
- { ##1 _en } { ##1 _en } { #1 }
+ { ##1 _en } { ##1 _en } { #1 } \par
}
}
\cs_new_protected:Npn \__nju_make_abstract:
@@ -318,11 +322,13 @@
{
\UseInstance { nju } { abstract / title }
\UseInstance { nju } { abstract / info }
+ \UseInstance { nju } { abstract / mark }
}
\cs_new_protected:Npn \__nju_make_abstract_en:
{
\UseInstance { nju } { abstract / en / title }
\UseInstance { nju } { abstract / en / info }
+ \UseInstance { nju } { abstract / en / mark }
}
\clist_map_inline:nn
{
@@ -342,6 +348,8 @@
{ abstract } { 摘要 } { ABSTRACT },
% 用于书签的摘要名称字样
{ abstract_a } { 中文摘要 } { ABSTRACT },
+ % 用于小标题的摘要名称字样
+ { abstract_b } { 摘\qquad{}要 } { ABSTRACT },
{ appendix } { 附录 } { appendix },
{ dept } { 院系 } { DEPARTMENT },
{ figure } { 图 } { figure },
Modified: trunk/Master/texmf-dist/tex/latex/njuthesis/njuthesis-undergraduate.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/njuthesis/njuthesis-undergraduate.def 2022-04-05 22:09:21 UTC (rev 62938)
+++ trunk/Master/texmf-dist/tex/latex/njuthesis/njuthesis-undergraduate.def 2022-04-05 22:09:37 UTC (rev 62939)
@@ -23,7 +23,7 @@
%% To produce the documentation run the original source files ending with
%% `.dtx' through XeTeX.
%%
-\GetIdInfo $Id: njuthesis.dtx 0.16.0 2022-03-19 12:00:00 +0800 NJU LUG <git+nju-lug-email-3104-issue- at yaoge123.cn>$
+\GetIdInfo $Id: njuthesis.dtx 0.16.1 2022-03-27 13:00:00 +0800 NJU LUG <git+nju-lug-email-3104-issue- at yaoge123.cn>$
{Undergraduate definition file for njuthesis}
\ProvidesExplFile{njuthesis-undergraduate.def}
{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription}
@@ -99,8 +99,8 @@
{
content = \__nju_abs_info_ug:nn { } { : },
format = \zihao { -4 } \kaishu,
- align = l,
- bottom-skip = 1 cm
+ bottom-skip = 1 cm,
+ align = l
}
\__nju_declare_element:nn { abstract / en / title }
{
@@ -112,8 +112,8 @@
{
content = \__nju_abs_info_ug:nn { _en } { :~ },
format = \zihao { -4 },
- align = l,
- bottom-skip = 1 cm
+ bottom-skip = 1 cm,
+ align = l
}
\cs_new_protected:Npn \__nju_abs_info_ug:nn #1#2
{
@@ -126,6 +126,18 @@
{ \__nju_name:n { ##1 #1 } #2 \__nju_info:n { ##1 #1 } \\ }
\__nju_name:n { abstract #1 } #2
}
+\__nju_declare_element:nn { abstract / mark }
+ {
+ content = \c__nju_name_abstract_b_tl,
+ format = \sffamily \zihao { -3 },
+ bottom-skip = 1 cm
+ }
+\__nju_declare_element:nn { abstract / en / mark }
+ {
+ content = \c__nju_name_abstract_b_en_tl,
+ format = \sffamily \zihao { -3 },
+ bottom-skip = 1 cm
+ }
\cs_new_protected:Npn \__nju_make_abstract:
{
\UseInstance { nju } { abstract / title }
@@ -154,6 +166,8 @@
{ abstract } { 摘要 } { ABSTRACT },
% 用于书签的摘要名称字样
{ abstract_a } { 中文摘要 } { ABSTRACT },
+ % 用于小标题的摘要名称字样
+ { abstract_b } { 摘\qquad{}要 } { ABSTRACT },
{ appendix } { 附录 } { appendix },
{ dept } { 院系 } { DEPARTMENT },
{ figure } { 图 } { figure },
Modified: trunk/Master/texmf-dist/tex/latex/njuthesis/njuthesis.cls
===================================================================
--- trunk/Master/texmf-dist/tex/latex/njuthesis/njuthesis.cls 2022-04-05 22:09:21 UTC (rev 62938)
+++ trunk/Master/texmf-dist/tex/latex/njuthesis/njuthesis.cls 2022-04-05 22:09:37 UTC (rev 62939)
@@ -24,7 +24,7 @@
%% `.dtx' through XeTeX.
%%
\NeedsTeXFormat{LaTeX2e}
-\GetIdInfo $Id: njuthesis.dtx 0.16.0 2022-03-19 12:00:00 +0800 NJU LUG <git+nju-lug-email-3104-issue- at yaoge123.cn>$
+\GetIdInfo $Id: njuthesis.dtx 0.16.1 2022-03-27 13:00:00 +0800 NJU LUG <git+nju-lug-email-3104-issue- at yaoge123.cn>$
{Thesis template for Nanjing University}
\ProvidesExplClass{njuthesis}
{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription}
@@ -65,6 +65,7 @@
\tl_new:N \l__nju_info_degree_tl
\tl_new:N \l__nju_info_diploma_tl
\tl_new:N \l__nju_info_type_tl
+\tl_new:N \l__nju_info_type_en_tl
\bool_new:N \g__nju_twoside_bool
\bool_set_true:N \g__nju_twoside_bool
\bool_new:N \l__nju_second_supv_bool
@@ -124,7 +125,7 @@
\cs_new_protected:Npn \__nju_ulined_center_box:nn #1#2
{
\mode_leave_vertical:
- \rule [ -0.5 ex ] { #1 } { 0.4 pt }
+ \rule [ -0.55 ex ] { #1 } { 0.4 pt }
\skip_horizontal:n { -#1 }
\hbox_to_wd:nn { #1 } { \hfil #2 \hfil }
}
@@ -156,7 +157,7 @@
\cs_new_protected:Npn \__nju_uline:n #1
{
\mode_leave_vertical:
- \rule [ -0.5 ex ] { #1 } { 0.4 pt }
+ \rule [ -0.55 ex ] { #1 } { 0.4 pt }
\skip_horizontal:n { -#1 }
}
\cs_new_protected:Npn \__nju_uuline:n #1
@@ -194,6 +195,12 @@
{ \__zhnum_date_aux:nnn { #1 } { #2 } { #3 } }
\cs_new:Npn \__nju_date_en:www #1-#2-#3 \q_stop
{ \clist_item:Nn \c__nju_month_en_clist { #2 } ~#3 , ~#1 }
+\msg_new:nnn { njuthesis } { missing-title }
+ {
+ The~ title~ should~ not~ be~ left~ blank.\\
+ Please~ check~ whether~ you~ have~ fill~ in~
+ both~ Chinese~ and~ English~ titles.
+ }
\cs_new_protected:Npn \__nju_split_title:n #1
{
\tl_if_in:nnTF { #1 } { \\ }
@@ -210,6 +217,8 @@
\cs_generate_variant:Nn \__nju_split_title:n { V }
\cs_new_protected:Npn \__nju_multiline_title:nnn #1#2#3
{
+ \tl_if_empty:NT \l__nju_info_title_tl
+ { \msg_error:nn { njuthesis } { missing-title } }
\__nju_split_title:V \l__nju_info_title_tl
\__nju_spread_box:nnV { #2 } { \kaishu } \c__nju_name_title_tl
\__nju_hskip:
@@ -262,6 +271,47 @@
\__nju_uuline:n { \l__nju_tmp_dim } #1
}
\cs_generate_variant:Nn \__nju_abs_title:n { V }
+\cs_new_protected:Npn \__nju_uline_box:
+ { \vtop{\box1\kern-\prevdepth\kern0.5ex\hrule} }
+\msg_new:nnn { njuthesis } { abs-title-too-long }
+ {
+ Your~ title~ is~ too~ long~ to~ fit~ in~ two~ lines.\\
+ I~ have~ drawn~ additional~ lines~ to~ contain~ it,~
+ which~ will~ probably~ make~ your~ abstract~ page~
+ look~ slightly~ different~ from~ the~ standard.\\
+ You~ can~ use~ the~ "style/abstract-title"~ key~
+ to~ disable~ this~ message.
+ }
+\cs_new_protected:Npn \__nju_uline_list:nnn #1#2#3
+ {
+ \hbox_set:Nn \l__nju_tmp_box {#1}
+ \setbox0=\vbox{\hangindent=\wd\l__nju_tmp_box \hangafter=-1
+ \leftskip=#3 \rightskip=\leftskip \parindent=\z@ #2\par
+ \global\setbox2=\hbox{}
+ \int_gzero:N \l__nju_tmp_int
+ \loop
+ \setbox1=\lastbox \unskip\unpenalty
+ \unless\ifvoid1
+ \global\setbox2=\hbox{\__nju_uline_box:\penalty0\unhbox2}
+ \int_gincr:N \l__nju_tmp_int
+ \repeat
+ }
+ {
+ \noindent\copy\l__nju_tmp_box\unhbox2
+ \bool_if:NT \g__nju_strict_abs_title_bool
+ {
+ \int_case:nnF { \l__nju_tmp_int }
+ {
+ { 0 } { \msg_error:nn { njuthesis } { missing-title } }
+ { 1 } { \__nju_uline:n { \textwidth } }
+ { 2 } { \prg_do_nothing: }
+ }
+ { \msg_warning:nn { njuthesis } { abs-title-too-long } }
+ \par
+ }
+ }
+ }
+\cs_generate_variant:Nn \__nju_uline_list:nnn { xnn }
\DeclareObjectType { nju } { \c_zero_int }
\DeclareTemplateInterface { nju } { element } { \c_zero_int }
{
@@ -436,10 +486,10 @@
{ \file_input:n { njuthesis- graduate.def } }
\msg_new:nnn { njuthesis } { load-config }
{ I~ am~ loading~ config~ file~ "#1". }
-\clist_if_empty:NF \g__nju_config_clist
+\clist_map_inline:Nn \g__nju_config_clist
{
- \msg_info:nnx { njuthesis } { load-config } { \g__nju_config_tl }
- \clist_map_inline:Nn \g__nju_config_clist { \file_input:n { #1 } }
+ \msg_info:nnn { njuthesis } { load-config } { #1 }
+ \file_input:n { #1 }
}
\keys_define:nn { nju / info }
{
@@ -446,6 +496,7 @@
title .tl_set:N = \l__nju_info_title_tl,
title .initial:n = { 空 },
title* .tl_set:N = \l__nju_info_title_en_tl,
+ title* .initial:n = { Empty },
keywords .clist_set:N = \l__nju_info_keywords_clist,
keywords* .clist_set:N = \l__nju_info_keywords_en_clist,
grade .tl_set:N = \l__nju_info_grade_tl,
@@ -482,7 +533,9 @@
{ \tl_set:Nn \l__nju_info_diploma_tl { ug } }
{ \tl_set:Nn \l__nju_info_diploma_tl { g } }
\tl_set:Nx \l__nju_info_type_tl
- { \clist_item:Nn \c__nju_name_type_clist { \g__nju_info_type_int } }
+ { \clist_item:Nn \c__nju_name_type_clist { \g__nju_info_type_int } }
+\tl_set:Nx \l__nju_info_type_en_tl
+ { \clist_item:Nn \c__nju_name_type_en_clist { \g__nju_info_type_int } }
\tl_put_left:Nx \l__nju_info_type_tl
{ \tl_use:c { c__nju_name_ \l__nju_info_diploma_tl _tl } }
\ctex_at_end_preamble:n
@@ -1059,11 +1112,23 @@
\exp_args:NV \pagestyle \c__nju_pagestyle_tl
\pagenumbering { Roman }
}
+\__nju_declare_element:nn { abstract / mark }
+ {
+ content = \c__nju_name_abstract_b_tl,
+ format = \sffamily \zihao { -3 },
+ bottom-skip = 1 cm
+ }
+\__nju_declare_element:nn { abstract / en / mark }
+ {
+ content = \c__nju_name_abstract_b_en_tl,
+ format = \sffamily \zihao { -3 },
+ bottom-skip = 1 cm
+ }
\cs_new_protected:Npn \__nju_print_keywords:nn #1#2
{
\tl_set:Nv \l__nju_tmp_tl { c__nju_name_keywords #1 _tl }
\__nju_get_text_width:NV \l__nju_tmp_dim \l__nju_tmp_tl
- \list { }
+ \list { \l__nju_tmp_tl }
{
\labelwidth \l__nju_tmp_dim
\labelsep \c_zero_dim
@@ -1072,14 +1137,31 @@
\advance \leftmargin \l__nju_tmp_dim
\cs_set_eq:NN \makelabel \textbf
}
- \item [ \l__nju_tmp_tl ]
- \clist_use:cn { l__nju_info_keywords #1 _clist } { #2 }
+ \item \clist_use:cn { l__nju_info_keywords #1 _clist } { #2 }
\endlist
}
+\skip_new:N \g__nju_abs_title_left_skip
\keys_define:nn { nju / style }
{
- abstract-in-toc .bool_gset:N = \g__nju_abs_in_toc_bool,
- abstract-in-toc .initial:n = true
+ abstract-in-toc .bool_gset:N = \g__nju_abs_in_toc_bool,
+ abstract-in-toc .initial:n = true,
+ abstract-title .choice:,
+ abstract-title / strict .code:n =
+ {
+ \bool_gset_true:N \g__nju_strict_abs_title_bool
+ \skip_gset:Nn \g__nju_abs_title_left_skip { 1 em }
+ },
+ abstract-title / centered .code:n =
+ {
+ \bool_gset_true:N \g__nju_strict_abs_title_bool
+ \skip_gset:Nn \g__nju_abs_title_left_skip { 0 pt plus 1 fill }
+ },
+ abstract-title / natural .code:n =
+ {
+ \bool_gset_false:N \g__nju_strict_abs_title_bool
+ \skip_gset:Nn \g__nju_abs_title_left_skip { 0 pt plus 1 fill }
+ },
+ abstract-title .initial:n = strict
}
\NewDocumentEnvironment { abstract } { +b }
{
More information about the tex-live-commits
mailing list.