Skip to content
Snippets Groups Projects
njuthesis.dtx 87.4 KiB
Newer Older
Yu Xiong's avatar
Yu Xiong committed
% 是否需要索引?
Yu Xiong's avatar
Yu Xiong committed
% 
%
% \subsection{参考文献}
%
% 符合GB7714-2015规范。使用\hologo{biber}作为\hologo{BibTeX}后端。需要使用|biber|命令手动编译才会显示
%
Yu Xiong's avatar
Yu Xiong committed
% \begin{function}{\addbibresource}
%   \begin{syntax}
%     \tn{addbibresource}\Arg{文件}
%   \end{syntax}
Yu Xiong's avatar
Yu Xiong committed
% 默认参考文献存储于主目录下的\file{njuthesis.bib},直接向其中粘贴新的参考文献即可。如果希望额外添加参考文献列表,可以在导言区中多次调用\tn{addbibresource}命令。注意本命令与|\bibliography{bibfile1,bibfile2}|不同,不可以用逗号分隔多个输入文件,且必须使用带扩展名的完整文件名。
% \end{function}
% \subsubsection{使用EndNote}
Yu Xiong's avatar
Yu Xiong committed
%
% 南京大学信息化建设管理服务中心已购买\href{https://itsc.nju.edu.cn/EndNote/list.htm}{EndNote}供全校师生免费试用,最新版为EndNote 20。
%
%
%
% 
%
% \subsubsection{使用Zotero}
Yu Xiong's avatar
Yu Xiong committed
%
% \href{https://www.zotero.org/}{Zotero}是一款免费的文献管理软件,支持所有桌面平台。
%
% 在保持Zotero程序运行的情况下,点击浏览器工具栏的Zotero Connector插件即可自动从网页抓取参考文件信息。Zotero也有知网插件
%
% \subsubsection{文段内引用}
%
Yu Xiong's avatar
Yu Xiong committed
% \begin{function}{\cite,\citeauthor,\citeyear}
%   \begin{syntax}
%     \tn{cite}\Arg{文献}
%     \tn{citeauthor}\Arg{文献}
%     \tn{citeyear}\Arg{文献}
%   \end{syntax}
% 引用文献
% \end{function}
Yu Xiong's avatar
Yu Xiong committed
% \subsection{视觉识别系统}
% 
% \begin{function}[added=2021-09-24]{njuviolet,njumagenta,njublue,njuyellow}
%   \begin{syntax}
%     \tn{color}\Arg{颜色}
%   \end{syntax}
% 定义并使用南京大学视觉形象规范化标准中给定的四种标准色:
%
% {\color{njuviolet}紫色}\hspace{1em}{\color{njumagenta}洋红}\hspace{1em}
% {\color{njublue}蓝色}\hspace{1em}{\color{njuyellow}黄色}
%
% \end{function}
%
Yu Xiong's avatar
Yu Xiong committed
% \begin{function}[added=2021-09-24]{\njuemblem}
%   \begin{syntax}
%     \tn{njuemblem}\oarg{颜色}\Arg{宽度}\Arg{高度}
%   \end{syntax}
%
% 生成指定颜色和大小的南京大学校徽
% \end{function}
%
% \begin{function}[added=2021-09-24]{\njuname}
%   \begin{syntax}
%     \tn{njuname}\oarg{颜色}\Arg{宽度}\Arg{高度}
%     \tn{njuname*}\oarg{颜色}\Arg{宽度}\Arg{高度}
%   \end{syntax}
%
% 生成指定颜色和大小的南京大学校名,加星号的为英文校名
% \end{function}
%
Yu Xiong's avatar
Yu Xiong committed
% \begin{function}[added=2021-09-24]{\njumotto}
%   \begin{syntax}
%     \tn{njumotto}\oarg{颜色}\Arg{宽度}\Arg{高度}
%   \end{syntax}
%
% 生成指定颜色和大小的南京大学校训
% \end{function}
%
%
% \begin{function}[added=2021-09-24]{\njuspirit}
%   \begin{syntax}
%     \tn{njuspirit}\oarg{颜色}\Arg{宽度}\Arg{高度}
%   \end{syntax}
%
% 生成指定颜色和大小的南京大学校徽
% \end{function}
%
%
%
% \end{documentation}
%
% \begin{implementation}
%
Yu Xiong's avatar
Yu Xiong committed
% \section{代码实现}
Yu Xiong's avatar
Yu Xiong committed
% \changes{v0.10}{2021/09/26}{对代码实现部分进行了整理。}
%
Yu Xiong's avatar
Yu Xiong committed
% @@在l3docstrip中表示名空间,在生成cls时会被相应字段替换,譬如在\pkg{njuthesis}中|@@=nju|。
Yu Xiong's avatar
Yu Xiong committed
% 尖括号包裹的|<*class>||</class>|用来指定某段代码属于哪个文件。
%    \begin{macrocode}
Yu Xiong's avatar
Yu Xiong committed
%<*class>
Yu Xiong's avatar
Yu Xiong committed
%    \end{macrocode}
%
Yu Xiong's avatar
Yu Xiong committed
% \subsection{模板选项}
Yu Xiong's avatar
Yu Xiong committed
% 用于配置模板选项的宏包。
%    \begin{macrocode}
Yu Xiong's avatar
Yu Xiong committed
\RequirePackage{xparse,xtemplate,l3keys2e}
%    \end{macrocode}
Yu Xiong's avatar
Yu Xiong committed
% \begin{variable}{\l_@@_info_degree_tl,\l_@@_info_type_tl}
% 用于存储学位名称的变量,注意宏的命名,l代表局部变量,g代表全局变量
%    \begin{macrocode}
\tl_new:N \l_@@_info_degree_tl
\tl_new:N \l_@@_info_type_tl
%    \end{macrocode}
% \end{variable}
Yu Xiong's avatar
Yu Xiong committed
%
Yu Xiong's avatar
Yu Xiong committed
% \begin{variable}{\g_@@_latin_fontset_tl,\g_@@_cjk_fontset_tl}
% 用于存储所使用字体名称的全局变量
%    \begin{macrocode}
\tl_new:N \g_@@_latin_fontset_tl
\tl_new:N \g_@@_cjk_fontset_tl
%    \end{macrocode}
% \end{variable}
%
% 学位信息的设置
Yu Xiong's avatar
Yu Xiong committed
%    \begin{macrocode}
\keys_define:nn { nju }
{
Yu Xiong's avatar
Yu Xiong committed
%    \end{macrocode}
%
% \begin{macro}{degree}
% 学位类型。
%    \begin{macrocode}
  degree            .choices:nn   =
  { ug, mg, mg, phd }
  { \tl_set_eq:NN \l_@@_info_degree_tl \l_keys_choice_tl },  
  degree            .initial:n    =   ug,
Yu Xiong's avatar
Yu Xiong committed
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{type}
% 论文类型。
%    \begin{macrocode}
  type              .choices:nn   =
  { thesis, design }
  { \tl_set_eq:NN \l_@@_info_type_tl   \l_keys_choice_tl }, 
  type              .initial:n    =   thesis,
Yu Xiong's avatar
Yu Xiong committed
%    \end{macrocode}
% \end{macro}
% 
% \begin{macro}{nlcover}
% 是否需要国家图书馆封面的设置。
%    \begin{macrocode}
  nlcover           .bool_set:N   =   \g_@@_nlcover_bool,
  nlcover           .initial:n    =   false,
Yu Xiong's avatar
Yu Xiong committed
%    \end{macrocode}
% \end{macro}
% 
% \begin{macro}{customlatinfont,customchinesefont}
% 定义字体选项
%    \begin{macrocode}
  customlatinfont   .choices:nn   =
  { gyre, macos, windows, none }
  { \tl_set_eq:NN \g_@@_latin_fontset_tl \l_keys_choice_tl },  
  customchinesefont .choices:nn   =
  { fandol, founder, macos, noto, windows, none }
  { \tl_set_eq:NN \g_@@_cjk_fontset_tl   \l_keys_choice_tl },
Yu Xiong's avatar
Yu Xiong committed
%    \end{macrocode}
Yu Xiong's avatar
Yu Xiong committed
% \end{macro}
Yu Xiong's avatar
Yu Xiong committed
%
% \begin{macro}{\ProcessKeysOptions}
% 在定义完全部设置以后从tex文件导言区输入参数
%    \begin{macrocode}
\ProcessKeysOptions { nju }
%    \end{macrocode}
% \end{macro}
%
% \subsection{个人信息}
Yu Xiong's avatar
Yu Xiong committed
% 输入个人信息的区域。
Yu Xiong's avatar
Yu Xiong committed
%    \begin{macrocode}
  info.meta:nn = { nju / info } { #1 }
Yu Xiong's avatar
Yu Xiong committed
%    \end{macrocode}
%
%    \begin{macrocode}
\keys_define:nn { nju / info }
{
Yu Xiong's avatar
Yu Xiong committed
%    \end{macrocode}
%
% \begin{macro}{info/TitleA,info/TitleB,info/TitleC,info/Title*}
% 题目
%    \begin{macrocode}
  TitleA            .tl_set:N     =   \l_@@_info_title_a_tl,
  TitleB            .tl_set:N     =   \l_@@_info_title_b_tl,
  TitleC            .tl_set:N     =   \l_@@_info_title_c_tl,
  Title*            .tl_set:N     =   \l_@@_info_title_en_tl,
Yu Xiong's avatar
Yu Xiong committed
%    \end{macrocode}
Yu Xiong's avatar
Yu Xiong committed
% \end{macro}
Yu Xiong's avatar
Yu Xiong committed
%
Yu Xiong's avatar
Yu Xiong committed
% \begin{macro}{info/Grade,info/StudentID,info/StudentName,info/StudentName*}
% 年级、学号、姓名
Yu Xiong's avatar
Yu Xiong committed
%    \begin{macrocode}
  Grade             .tl_set:N     =   \l_@@_info_grade_tl,
  StudentID         .tl_set:N     =   \l_@@_info_id_tl,
  StudentName       .tl_set:N     =   \l_@@_info_author_tl,
  StudentName*      .tl_set:N     =   \l_@@_info_author_en_tl,
Yu Xiong's avatar
Yu Xiong committed
%    \end{macrocode}
Yu Xiong's avatar
Yu Xiong committed
% \end{macro}
Yu Xiong's avatar
Yu Xiong committed
% \begin{macro}{info/Department,info/Department*,info/Major,info/Major*,info/Field,info/Field*}
Yu Xiong's avatar
Yu Xiong committed
% 院系、专业、方向。
Yu Xiong's avatar
Yu Xiong committed
%    \begin{macrocode}
  Department        .tl_set:N     =   \l_@@_info_dept_tl,
  Department*       .tl_set:N     =   \l_@@_info_dept_en_tl,
  Major             .tl_set:N     =   \l_@@_major_tl,
  Major*            .tl_set:N     =   \l_@@_major_en_tl,
  Field             .tl_set:N     =   \l_@@_field_tl,
  Field*            .tl_set:N     =   \l_@@_field_en_tl,
Yu Xiong's avatar
Yu Xiong committed
%    \end{macrocode}
Yu Xiong's avatar
Yu Xiong committed
% \end{macro}
Yu Xiong's avatar
Yu Xiong committed
% \begin{macro}{info/SupervisorA,info/SupervisorA*,info/SupervisorATitle,info/SupervisorATitle*}
Yu Xiong's avatar
Yu Xiong committed
%    \begin{macrocode}
  SupervisorA       .tl_set:N     =   \l_@@_info_supv_a_tl,
  SupervisorA*      .tl_set:N     =   \l_@@_info_supv_a_en_tl,
  SupervisorATitle  .tl_set:N     =   \l_@@_info_supv_a_title_tl,
  SupervisorATitle* .tl_set:N     =   \l_@@_info_supv_a_title_en_tl,
Yu Xiong's avatar
Yu Xiong committed
%    \end{macrocode}
Yu Xiong's avatar
Yu Xiong committed
% \end{macro}
Yu Xiong's avatar
Yu Xiong committed
%
Yu Xiong's avatar
Yu Xiong committed
% \begin{macro}{info/SupervisorB,info/SupervisorB*,info/SupervisorBTitle,info/SupervisorBTitle*}
Yu Xiong's avatar
Yu Xiong committed
%    \begin{macrocode}
  SupervisorB       .tl_set:N     =   \l_@@_info_supv_b_tl,
  SupervisorB*      .tl_set:N     =   \l_@@_info_supv_b_en_tl,
  SupervisorBTitle  .tl_set:N     =   \l_@@_info_supv_b_title_tl,
  SupervisorBTitle* .tl_set:N     =   \l_@@_info_supv_b_title_en_tl,
Yu Xiong's avatar
Yu Xiong committed
%    \end{macrocode}
Yu Xiong's avatar
Yu Xiong committed
% \end{macro}
Yu Xiong's avatar
Yu Xiong committed
%
Yu Xiong's avatar
Yu Xiong committed
% \begin{macro}{info/SubmitDate,info/SubmitDate*}
  % 提交日期
Yu Xiong's avatar
Yu Xiong committed
%    \begin{macrocode}
  SubmitDate        .tl_set:N     =   \l_@@_submit_date_tl,
  SubmitDate*       .tl_set:N     =   \l_@@_submit_date_en_tl,
Yu Xiong's avatar
Yu Xiong committed
%    \end{macrocode}
Yu Xiong's avatar
Yu Xiong committed
% \end{macro}
Yu Xiong's avatar
Yu Xiong committed
%
Yu Xiong's avatar
Yu Xiong committed
% \begin{macro}{info/DefendDate,info/ReviewerChairman,info/ReviewerA,info/ReviewerB,info/ReviewerC,info/ReviewerD}
% 答辩 TODO: 用clist处理答辩委员会成员名称
Yu Xiong's avatar
Yu Xiong committed
%    \begin{macrocode}
  DefendDate        .tl_set:N     =   \l_@@_defend_date_tl,
  ReviewerChairman  .tl_set:N     =   \l_@@_info_chairman_tl,
  ReviewerA         .tl_set:N     =   \l_@@_info_reviewer_a_tl,
  ReviewerB         .tl_set:N     =   \l_@@_info_reviewer_b_tl,
  ReviewerC         .tl_set:N     =   \l_@@_info_reviewer_c_tl,
  ReviewerD         .tl_set:N     =   \l_@@_info_reviewer_d_tl,
Yu Xiong's avatar
Yu Xiong committed
%    \end{macrocode}
Yu Xiong's avatar
Yu Xiong committed
% \end{macro}
Yu Xiong's avatar
Yu Xiong committed
%
Yu Xiong's avatar
Yu Xiong committed
% \begin{macro}{info/Classification,info/SecurityLevel,info/UDC,info/SupervisorContact}
% 国家图书馆封面相关
Yu Xiong's avatar
Yu Xiong committed
%    \begin{macrocode}
Yu Xiong's avatar
Yu Xiong committed
  Classification    .tl_set:N     =   \l_@@_info_clc_tl,
  SecurityLevel     .tl_set:N     =   \l_@@_info_seclv_tl,
  UDC               .tl_set:N     =   \l_@@_info_udc_tl,
  SupervisorContact .tl_set:N     =   \l_@@_info_supv_cont_tl,
%    \end{macrocode}
Yu Xiong's avatar
Yu Xiong committed
% \end{macro}
%
% 定义用于设置个人信息的命令
%    \begin{macrocode}
\NewDocumentCommand \njusetup { m }
{ \keys_set:nn { nju } { #1 } }
%    \end{macrocode}
%
Yu Xiong's avatar
Yu Xiong committed
% \subsection{载入宏包}
Yu Xiong's avatar
Yu Xiong committed
% 使用\pkg{ctexbook}文档类。
Yu Xiong's avatar
Yu Xiong committed
\LoadClass[
  a4paper,
  twoside,
  UTF8,
  scheme=chinese,
%    \end{macrocode}
% 关于行距,\hologo{LaTeX}默认1.2行距,word默认行距是1.3,要求1.5倍word行距,故
% \[ 1.5\times\frac{1.3}{1.2} = 1.625\]
%    \begin{macrocode}
  linespread=1.625,
%    \end{macrocode}
% 默认不载入任何字体,供模板自行设置
%    \begin{macrocode}
  fontset=none,
  zihao=-4
  ]{ctexbook}[2018/04/01]
Yu Xiong's avatar
Yu Xiong committed
%    \end{macrocode}
%
Yu Xiong's avatar
Yu Xiong committed
% 载入各种宏包。
% \pkg{emptypage}用于清除空白页的页码。
Yu Xiong's avatar
Yu Xiong committed
%    \begin{macrocode}
Yu Xiong's avatar
Yu Xiong committed
\RequirePackage
{
  geometry,
  caption,
  floatrow,
  setspace,
  lastpage,
  emptypage,
  fancyhdr,
}
\RequirePackage[titles]{tocloft}
\RequirePackage[hyphens]{url} % generate better linebreaks in the url
Yu Xiong's avatar
Yu Xiong committed
%
% 用于特定学科的包。
Yu Xiong's avatar
Yu Xiong committed
\RequirePackage{siunitx} % 用于书写单位符号
\RequirePackage[version=4]{mhchem} % 用于绘制分子式
Yu Xiong's avatar
Yu Xiong committed
% 用于生成可以被插入书签的LaTeX logo,TODO: 使用hologo创建|latex{}|命令
%    \begin{macrocode}
\RequirePackage{hologo} 
Yu Xiong's avatar
Yu Xiong committed
%    \end{macrocode}
%
%    \begin{macrocode}
% Required to prevent page break right after a sectioning command
% \RequirePackage{needspace} 
% \RequirePackage{xspace} % Better print trailing whitespace
Yu Xiong's avatar
Yu Xiong committed
%    \end{macrocode}
%
Yu Xiong's avatar
Yu Xiong committed
% \begin{macro}{\njuline}
Yu Xiong's avatar
Yu Xiong committed
% 针对编译引擎,使用不同的宏包构建可以对中文正常换行的下划线命令。\pkg{lua-ul}中需要在结尾使用\tn{null}保护尾部空白。
Yu Xiong's avatar
Yu Xiong committed
%    \begin{macrocode}
\sys_if_engine_xetex:T
{
Yu Xiong's avatar
Yu Xiong committed
    \RequirePackage{xeCJKfntef,microtype}
    \newcommand{\njuline}[1]{\CJKunderline{#1}}
Yu Xiong's avatar
Yu Xiong committed
\sys_if_engine_luatex:T
{
Yu Xiong's avatar
Yu Xiong committed
    \RequirePackage{lua-ul,dashundergaps}
    \newcommand{\njuline}[1]{\underLine{#1}\null}
Yu Xiong's avatar
Yu Xiong committed
%    \end{macrocode}
Yu Xiong's avatar
Yu Xiong committed
% \end{macro}
Yu Xiong's avatar
Yu Xiong committed
%
Yu Xiong's avatar
Yu Xiong committed
% 数学,\pkg{amsmath}必须在\pkg{unicode-math}前加载。
% \pkg{unicode-math}指定了\hologo{XeTeX}和\hologo{LuaTeX}下所使用的数学字体。
% 用于配置数学环境的\pkg{mathtools}会与\pkg{unicode-math}发生冲突,此处手动消除其警告。
Yu Xiong's avatar
Yu Xiong committed
%    \begin{macrocode}
Yu Xiong's avatar
Yu Xiong committed
\RequirePackage{amsmath,amsthm,mathtools,thmtools}
\RequirePackage[
Yu Xiong's avatar
Yu Xiong committed
    warnings-off={
        mathtools-colon,
        mathtools-overbracket}
Yu Xiong's avatar
Yu Xiong committed
        ]{unicode-math}
Yu Xiong's avatar
Yu Xiong committed
%    \end{macrocode}
%
Yu Xiong's avatar
Yu Xiong committed
% 配置图片、表格、代码、列表环境
Yu Xiong's avatar
Yu Xiong committed
%    \begin{macrocode}
Yu Xiong's avatar
Yu Xiong committed
\RequirePackage{graphicx,subcaption,wrapfig,tikz}
\DeclareGraphicsExtensions{.pdf,.eps,.jpg,.png}
Yu Xiong's avatar
Yu Xiong committed
\RequirePackage{booktabs,multirow,multicol,listings,enumitem}
Yu Xiong's avatar
Yu Xiong committed
%    \end{macrocode}
%
Yu Xiong's avatar
Yu Xiong committed
% 必须以该顺序加载以下两个关于引用的包。
\RequirePackage[hidelinks,bookmarksnumbered=true]{hyperref}
\RequirePackage[capitalise,nameinlink,noabbrev]{cleveref}
%    \end{macrocode}
%
Yu Xiong's avatar
Yu Xiong committed
% 载入南京大学识别视觉系统。
%    \begin{macrocode}
\RequirePackage{njuvisual}
%    \end{macrocode}
% 
Yu Xiong's avatar
Yu Xiong committed
% 生成用于测试的大段填充文字。
Yu Xiong's avatar
Yu Xiong committed
\RequirePackage{blindtext,zhlipsum} 
% \RequirePackage{showframe} 
Yu Xiong's avatar
Yu Xiong committed
% \subsection{字体设置}
Yu Xiong's avatar
Yu Xiong committed
% \pkg{fontspec}已在C\hologo{TeX}套件中包含,无需另外载入。
Yu Xiong's avatar
Yu Xiong committed
% \subsubsection{操作系统检测}
Yu Xiong's avatar
Yu Xiong committed
% \begin{variable}{\g_@@_load_system_fontset_bool}
Yu Xiong's avatar
Yu Xiong committed
% 定义用于判断是否需要载入系统预装字体的变量。
Yu Xiong's avatar
Yu Xiong committed
\bool_new:N \g_@@_load_system_fontset_bool
%    \end{macrocode}
% \end{variable}
%
% 判断用户是否自定义了中英文字体,如果其中任意一种未被定义,
Yu Xiong's avatar
Yu Xiong committed
% 则使用系统预装字体覆盖字体选项。
%    \begin{macrocode}
\tl_if_empty:NTF \g_@@_latin_fontset_tl
Yu Xiong's avatar
Yu Xiong committed
  { \bool_gset_true:N \g_@@_load_system_fontset_bool }  
{  
  \tl_if_empty:NT \g_@@_cjk_fontset_tl
Yu Xiong's avatar
Yu Xiong committed
    { \bool_gset_true:N \g_@@_load_system_fontset_bool }  
Yu Xiong's avatar
Yu Xiong committed
%    \end{macrocode}
%
% 进行系统检测。
% 检测 Windows 的命令由\pkg{l3kernal}提供,
% 检测 macOS 的命令由\pkg{ctex}提供,
% 这两种情况外的系统被判断为 Linux,一律使用自由字体。
%    \begin{macrocode}
Yu Xiong's avatar
Yu Xiong committed
\bool_if:NT \g_@@_load_system_fontset_bool
{
  \sys_if_platform_windows:TF
  {
    \tl_set:Nn \g_@@_latin_fontset_tl { windows }
    \tl_set:Nn \g_@@_cjk_fontset_tl   { windows }
  }
  {
    \ctex_if_platform_macos:TF
    {
      \tl_set:Nn \g_@@_latin_fontset_tl { macos }
      \tl_set:Nn \g_@@_cjk_fontset_tl   { macos }
    }
    {
      \tl_set:Nn \g_@@_latin_fontset_tl { gyre }
      \tl_set:Nn \g_@@_cjk_fontset_tl { fandol }
    }
  }
}
%    \end{macrocode}
%
Yu Xiong's avatar
Yu Xiong committed
% \subsubsection{定义英文字库}
%
Yu Xiong's avatar
Yu Xiong committed
% 接下来逐个定义所需要使用的字库。
%
% \begin{macro}{\@@_load_latin_font_windows:}
% Windows 西文字体
%    \begin{macrocode}
\cs_new_protected:Npn \@@_load_latin_font_windows:
{
  \setmainfont{Times~New~Roman}
  \setsansfont{Arial}
  \setmonofont{Courier~New}[Scale=MatchLowercase]
}
Yu Xiong's avatar
Yu Xiong committed
%    \end{macrocode}
Yu Xiong's avatar
Yu Xiong committed
%
%
% \begin{macro}{\@@_load_latin_font_macos:}
Yu Xiong's avatar
Yu Xiong committed
% macOS 西文字体。
Yu Xiong's avatar
Yu Xiong committed
%    \begin{macrocode}
\cs_new_protected:Npn \@@_load_latin_font_macos:
{
\setmainfont{Times~New~Roman}
\setsansfont{Arial}
\setmonofont{Menlo}[Scale=MatchLowercase]
Yu Xiong's avatar
Yu Xiong committed
%    \end{macrocode}
Yu Xiong's avatar
Yu Xiong committed
%
%
% \begin{macro}{\@@_load_latin_font_gyre:}
Yu Xiong's avatar
Yu Xiong committed
% 开源的 gyre 西文字体。
Yu Xiong's avatar
Yu Xiong committed
%    \begin{macrocode}
\cs_new_protected:Npn \@@_load_latin_font_gyre:
{
\setmainfont{texgyretermes}[
  Extension=.otf,
  UprightFont=*-regular,
  BoldFont=*-bold,
  ItalicFont=*-italic,
  BoldItalicFont=*-bolditalic]
\setsansfont{texgyreheros}[
  Extension=.otf,
  UprightFont=*-regular,
  BoldFont=*-bold,
  ItalicFont=*-italic,
  BoldItalicFont=*-bolditalic]
\setmonofont{texgyrecursor}[
  Extension=.otf,
  UprightFont=*-regular,
  BoldFont=*-bold,
  ItalicFont=*-italic,
  BoldItalicFont=*-bolditalic,
  Scale=MatchLowercase,
  Ligatures=CommonOff]
Yu Xiong's avatar
Yu Xiong committed
%    \end{macrocode}
Yu Xiong's avatar
Yu Xiong committed
%
Yu Xiong's avatar
Yu Xiong committed
% \subsubsection{定义中文字库}
%
% \begin{macro}{\@@_load_cjk_font_windows:}
Yu Xiong's avatar
Yu Xiong committed
% Windows 中文字体。
Yu Xiong's avatar
Yu Xiong committed
%    \begin{macrocode}
\cs_new_protected:Npn \@@_load_cjk_font_windows:
{
  \setCJKmainfont{SimSun}[
    AutoFakeBold=2.17, 
    ItalicFont=KaiTi]
  \setCJKsansfont{SimHei}
  \setCJKmonofont{FangSong}
  \setCJKfamilyfont{zhsong}{SimSun}[AutoFakeBold=2.17]
  \setCJKfamilyfont{zhhei}{SimHei}
  \setCJKfamilyfont{zhfs}{FangSong}
  \setCJKfamilyfont{zhkai}{KaiTi}[AutoFakeBold=2.17]
  % \setCJKfamilyfont{zhnewhei}{Microsoft~YaHei}[
  %   BoldFont=Microsoft~YaHei~Bold]
Yu Xiong's avatar
Yu Xiong committed
%    \end{macrocode}
Yu Xiong's avatar
Yu Xiong committed
%
%
% \begin{macro}{\@@_load_cjk_font_macos:}
Yu Xiong's avatar
Yu Xiong committed
% macOS 字体。
% TODO: 参考CTeX手册第9节 LuaLATEX 下的中文支持方式解决 issue \#5 问题。
Yu Xiong's avatar
Yu Xiong committed
%    \begin{macrocode}
\cs_new_protected:Npn \@@_load_cjk_font_macos:
{
  % 移除 does not contain script "CJK" 警告
  \msg_redirect_name:nnn {fontspec} {no-script} {info} 
  \setCJKmainfont{Songti~SC~Light}[
    BoldFont=Songti~SC~Bold,
    ItalicFont=Kaiti~SC,
    BoldItalicFont=Kaiti~SC~Bold]
  \setCJKsansfont{Heiti~SC~Light}[BoldFont=Heiti~SC~Medium]
  \setCJKmonofont{STFangsong}
  \setCJKfamilyfont{zhsong}{Songti~SC~Light}[BoldFont=Songti~SC~Bold]
  \setCJKfamilyfont{zhhei}{Heiti~SC~Light}[BoldFont=Heiti~SC~Medium]
  \setCJKfamilyfont{zhfs}{STFangsong}
  \setCJKfamilyfont{zhkai}{Kaiti~SC}[BoldFont=Kaiti~SC~Bold]
  \setCJKfamilyfont{zhnewhei}{PingFang~SC}
Yu Xiong's avatar
Yu Xiong committed
%    \end{macrocode}
Yu Xiong's avatar
Yu Xiong committed
%
%
% \begin{macro}{\@@_load_cjk_font_fandol:}
% Fandol 字体
Yu Xiong's avatar
Yu Xiong committed
%    \begin{macrocode}
\cs_new_protected:Npn \@@_load_cjk_font_fandol:
{
  % 移除 does not contain script "CJK" 警告
  \msg_redirect_name:nnn {fontspec} {no-script} {info} 
  \setCJKmainfont{FandolSong-Regular}[
    Extension=.otf,
    BoldFont=FandolSong-Bold,
    ItalicFont=FandolKai-Regular]
  \setCJKsansfont{FandolHei-Regular}[
    Extension=.otf,
    BoldFont=FandolHei-Bold]
  \setCJKmonofont{FandolFang-Regular}[Extension=.otf]
  \setCJKfamilyfont{zhsong}{FandolSong-Regular}[
    Extension=.otf,
    BoldFont=FandolSong-Bold]
  \setCJKfamilyfont{zhhei}{FandolHei-Regular}[
    Extension=.otf,
    BoldFont=FandolHei-Bold]
  \setCJKfamilyfont{zhfs}{FandolFang-Regular}[Extension=.otf]
  \setCJKfamilyfont{zhkai}{FandolKai-Regular}[
    Extension=.otf,
    AutoFakeBold=2.17]
Yu Xiong's avatar
Yu Xiong committed
%    \end{macrocode}
Yu Xiong's avatar
Yu Xiong committed
%
%
% \begin{macro}{\@@_load_cjk_font_founder:}
% 方正字库(简繁扩展)
% FZYouHK_508R \href{http://www.foundertype.com/index.php/FontInfo/index/id/244}{方正悠黑508R} 设计师非商免费,
% FZYouHK_511M \href{http://www.foundertype.com/index.php/FontInfo/index/id/244}{方正悠黑511M} 设计师非商免费
Yu Xiong's avatar
Yu Xiong committed
%    \begin{macrocode}
\cs_new_protected:Npn \@@_load_cjk_font_founder:
{
  \setCJKmainfont{FZSSK}[% 方正书宋
    Extension=.ttf,
    BoldFont=FZXBSK,% 方正小标宋
    ItalicFont=FZKTK]% 方正楷体
  \setCJKsansfont{FZXH1K}[% 方正细黑一
    Extension=.ttf,
    BoldFont=FZHTK]% FZHTK 方正黑体
  \setCJKmonofont{FZFSK}[Extension=.ttf]% 方正仿宋
  \setCJKfamilyfont{zhsong}
    {FZSSK}[
      Extension=.ttf,
      BoldFont=FZXBSK]
  \setCJKfamilyfont{zhhei}
    {FZHTK}[
      Extension=.ttf,
      AutoFakeBold=2.17]
  \setCJKfamilyfont{zhfs}
    {FZFSK}[Extension=.ttf]
  \setCJKfamilyfont{zhkai}
    {FZKTK}[Extension=.ttf]
  % \setCJKfamilyfont{zhnewhei}
  %   {FZYouHK_508R}[% 方正悠黑508R
  %     Extension=.ttf,
  %     BoldFont=FZYouHK_511M]% 方正悠黑511M
Yu Xiong's avatar
Yu Xiong committed
%    \end{macrocode}
Yu Xiong's avatar
Yu Xiong committed
%
%
% \begin{macro}{\@@_load_cjk_font_noto:}
Yu Xiong's avatar
Yu Xiong committed
% 思源字体。
Yu Xiong's avatar
Yu Xiong committed
%    \begin{macrocode}
\cs_new_protected:Npn \@@_load_cjk_font_noto:
{
  % 思源宋体
  \setCJKmainfont[
    UprightFont=NotoSerifSC-Regular,
    BoldFont=NotoSerifSC-Bold,
    ItalicFont=NotoSerifSC-Regular,
    BoldItalicFont=NotoSerifSC-Bold,
    ItalicFeatures=FakeSlant,
    BoldItalicFeatures=FakeSlant]{Noto~Serif~SC}

  % 思源黑体
  \setCJKsansfont[
    UprightFont=NotoSansSC-Regular,
    BoldFont=NotoSansSC-Bold,
    ItalicFont=NotoSansSC-Regular,
    BoldItalicFont=NotoSansSC-Bold,
    ItalicFeatures=FakeSlant,
    BoldItalicFeatures=FakeSlant]{Noto~Sans~SC}
  \setCJKmonofont{FZFSK}[Extension=.ttf]% 方正仿宋
  \setCJKfamilyfont{zhsong}{Noto~Serif~SC}
  \setCJKfamilyfont{zhhei}{Noto~Sans~SC}
  \setCJKfamilyfont{zhfs}
    {FZFSK}[Extension=.ttf]
  \setCJKfamilyfont{zhkai}
    {FZKTK}[Extension=.ttf]
Yu Xiong's avatar
Yu Xiong committed
%    \end{macrocode}
Yu Xiong's avatar
Yu Xiong committed
%
Yu Xiong's avatar
Yu Xiong committed
% \subsubsection{载入指定字库}
%
Yu Xiong's avatar
Yu Xiong committed
% 载入字体命令。
Yu Xiong's avatar
Yu Xiong committed
%    \begin{macrocode}
\cs_new_protected:Npn \@@_load_font:
  \use:c { @@_load_latin_font_ \g_@@_latin_fontset_tl : }
  \use:c { @@_load_cjk_font_   \g_@@_cjk_fontset_tl   : }
Yu Xiong's avatar
Yu Xiong committed
%    \end{macrocode}
% 自行定义C\hologo{TeX}中的四类字体命令。
%    \begin{macrocode}
  \NewDocumentCommand\songti{}{\CJKfamily{zhsong}}
  \NewDocumentCommand\heiti{}{\CJKfamily{zhhei}}
  \NewDocumentCommand\fangsong{}{\CJKfamily{zhfs}}
  \NewDocumentCommand\kaishu{}{\CJKfamily{zhkai}}
Yu Xiong's avatar
Yu Xiong committed
%    \end{macrocode}
%
% 载入设置的字体。
%    \begin{macrocode}
Yu Xiong's avatar
Yu Xiong committed
%    \end{macrocode}
%
% 设置数学字体 (XITS, 或者 STIX, 与 Times New Roman 最为相近)
% \setmathfont{STIXTwoMath-Regular}[Extension = .otf]
\setmathfont{XITSMath-Regular}[
  BoldFont = XITSMath-Bold,
  Extension = .otf]
Yu Xiong's avatar
Yu Xiong committed
%    \end{macrocode}
%
Yu Xiong's avatar
Yu Xiong committed
% \subsection{页面布局}
%
Yu Xiong's avatar
Yu Xiong committed
% \subsubsection{页边距}
Yu Xiong's avatar
Yu Xiong committed
% 使用\pkg{geometry}设置页边距。
%    \begin{macrocode}
\geometry{
  vmargin    = 2.5 cm,
  hmargin    = 3.2 cm,
}
%    \end{macrocode}
%
% \subsubsection{页眉页脚}
Yu Xiong's avatar
Yu Xiong committed
%
% 本科生页眉页脚 
Yu Xiong's avatar
Yu Xiong committed
%    \begin{macrocode}
\fancypagestyle{njuplain}{%
   \fancyhead{}               
   \fancyfoot[C]{\zihao{5}\thepage} % 页脚居中 五号新罗马体数字
}
Yu Xiong's avatar
Yu Xiong committed
%    \end{macrocode}
%
% TODO: 研究生页眉页脚 
Yu Xiong's avatar
Yu Xiong committed
%    \begin{macrocode}
\fancypagestyle{njuheadings}{%
   \fancyhead{}               
   \fancyfoot[C]{\zihao{5}\thepage}        
}
Yu Xiong's avatar
Yu Xiong committed
%    \end{macrocode}
%
Yu Xiong's avatar
Yu Xiong committed
% 载入页眉页脚设置。
Yu Xiong's avatar
Yu Xiong committed
%    \begin{macrocode}
\str_if_eq:NNTF {\l_@@_info_degree_tl} { ug } 
{
  % the header line
  \tl_set:Nn \headrulewidth {0pt}
  % the footer line
  \tl_set:Nn \footrulewidth {0pt}
  \AtBeginDocument{\pagestyle{njuplain}\flushbottom} % 本科无页眉页脚
}
{
  % the header line
  \tl_set:Nn \headrulewidth {1pt}
  % the footer line
  \tl_set:Nn \footrulewidth {0pt}
  \setlength{\headheight}{20pt}
  % \AtBeginDocument{\pagestyle{njuplain}} % 无页眉页脚
  \AtBeginDocument{\pagestyle{fancy}\flushbottom} % 研究生有页眉页脚
Yu Xiong's avatar
Yu Xiong committed
%    \end{macrocode}
%
Yu Xiong's avatar
Yu Xiong committed
% \subsection{章节标题格式}
Yu Xiong's avatar
Yu Xiong committed
%    \begin{macrocode}
    chapter/format = \zihao{4}\heiti\centering\selectfont,
    chapter/beforeskip = 10pt,
    chapter/afterskip = 60pt,
    section/format = \zihao{4}\heiti\raggedright\selectfont,
    subsection/format = \zihao{4}\heiti\raggedright\selectfont,
    subsubsection/format = \zihao{4}\heiti\raggedright\selectfont,
Yu Xiong's avatar
Yu Xiong committed
%    \end{macrocode}
%
Yu Xiong's avatar
Yu Xiong committed
% \subsection{目录格式}
Yu Xiong's avatar
Yu Xiong committed
%    \begin{macrocode}
\ctexset{
    contentsname = 目录,
    listfigurename = 插图清单, 
    listtablename = 表格清单,
Yu Xiong's avatar
Yu Xiong committed
%    \end{macrocode}
%
% \pkg{tocloft}定制目录文字格式
%    \begin{macrocode}
\cftsetpnumwidth{2em}
\renewcommand{\cftchapleader}{\cftdotfill{\cftchapdotsep}}
\renewcommand{\cftchapdotsep}{\cftdotsep}
\renewcommand{\cftchapfont}{\heiti\zihao{4}}
\setlength{\cftsecindent}{2em}
\setlength{\cftsubsecindent}{52pt}
\setlength{\cftsubsecnumwidth}{2em}
%    \end{macrocode}
%
Yu Xiong's avatar
Yu Xiong committed
% 重定义目录命令,修改标题格式并插入书签。
Yu Xiong's avatar
Yu Xiong committed
%    \begin{macrocode}
\renewcommand\tableofcontents{%
  \raggedbottom
  \begingroup
    \ctexset{
      contentsname = {目\hspace{2em}录},
      chapter/format = {\centering\songti\bf\zihao{3}\selectfont},
    }%
    \chapter*{\contentsname}%
  \endgroup
  \addcontentsline{toc}{chapter}{\contentsname}
  \vskip 20pt 
  \@starttoc{toc}%
}
Yu Xiong's avatar
Yu Xiong committed
%    \end{macrocode}
%
% 重定义插图目录命令,修改标题格式并插入书签。
%    \begin{macrocode}
\renewcommand\listoffigures{%
  \begingroup
  \ctexset{
    chapter/format = {\centering\songti\bf\zihao{3}\selectfont},
  }%
  \chapter*{\listfigurename}%
  \endgroup
  \addcontentsline{toc}{chapter}{\listfigurename}
  \vskip 20pt 
  \@starttoc{lof}%
}
Yu Xiong's avatar
Yu Xiong committed
%    \end{macrocode}
%
% 重定义表格目录命令,修改标题格式并插入书签。
%    \begin{macrocode}
\renewcommand\listoftables{%
  \begingroup
  \ctexset{
    chapter/format = {\centering\songti\bf\zihao{3}\selectfont},
  }%
  \chapter*{\listtablename}%
  \endgroup
  \addcontentsline{toc}{chapter}{\listtablename}
  \vskip 20pt 
  \@starttoc{lot}%
}
Yu Xiong's avatar
Yu Xiong committed
%    \end{macrocode}
%
Yu Xiong's avatar
Yu Xiong committed
% \subsection{前言致谢}
% 
% \begin{environment}{preface}
Yu Xiong's avatar
Yu Xiong committed
%    \begin{macrocode}
\NewDocumentEnvironment{preface}{}
{%
  \chapter*{前言}
  \addcontentsline{toc}{chapter}{前言}
Yu Xiong's avatar
Yu Xiong committed
%    \end{macrocode}
Yu Xiong's avatar
Yu Xiong committed
%
% \begin{environment}{acknowledgement}
Yu Xiong's avatar
Yu Xiong committed
% 单独制作的致谢页。
%    \begin{macrocode}
\NewDocumentEnvironment{acknowledgement}{}
{%
  \chapter*{致谢}
  \addcontentsline{toc}{chapter}{致谢}
Yu Xiong's avatar
Yu Xiong committed
%    \end{macrocode}
Yu Xiong's avatar
Yu Xiong committed
%
Yu Xiong's avatar
Yu Xiong committed
% \subsection{参考文献}
% biblatex设置
\RequirePackage[
    style=gb7714-2015,
    %style=numeric-comp,
    %citestyle=authortitle-icomp,
    % citestyle=numeric-comp,
    %bibstyle=authoryear,
    % bibstyle=numeric,
    sorting=none,
    %sorting=nyt,
    %sortcites=true,
    %autocite=footnote,
    backend=biber, % Compile the bibliography with biber
    hyperref=true,
    backref=false,
    citecounter=true,
    pagetracker=true,
    citetracker=true,
    ibidtracker=context,
    autopunct=true,
    autocite=plain,
    % gbpub=false,         % Uncomment if you do NOT want '[S.l. : s.n.]' 
                           % in reference entries, GitHub Issue (#47)
    % gbnamefmt=lowercase, % Uncomment if you do NOT want uppercase author 
                           % names in reference entries, GitHub Issue (#23)
Yu Xiong's avatar
Yu Xiong committed
%    \end{macrocode}
%
Yu Xiong's avatar
Yu Xiong committed
% 忽略不需要的文献信息。
Yu Xiong's avatar
Yu Xiong committed
%    \begin{macrocode}
\AtEveryBibitem{
	\clearfield{abstract}
	\clearfield{issn}
	\clearfield{isbn}
	\clearfield{archivePrefix}
	\clearfield{arxivId}
	\clearfield{pmid}
	\clearfield{eprint}
	\ifentrytype{online}{}{\ifentrytype{misc}{}{\clearfield{url}}}
	% \ifentrytype{book}{\clearfield{doi}}{}
}
Yu Xiong's avatar
Yu Xiong committed
%    \end{macrocode}
%
Yu Xiong's avatar
Yu Xiong committed
% \subsection{引用}
Yu Xiong's avatar
Yu Xiong committed
% 修改标签名称。默认在名称后面添加空格,删除公式编号的括号
Yu Xiong's avatar
Yu Xiong committed
%    \begin{macrocode}
Yu Xiong's avatar
Yu Xiong committed
\crefdefaultlabelformat{#2#1#3\,}

\crefname{figure}{图}{图}
\crefname{table}{表}{表}
% \crefname{equation}{公式}{公式}
Yu Xiong's avatar
Yu Xiong committed
\crefformat{equation}{公式~#2#1#3~}

\crefformat{chapter}{第#2#1#3章}
\crefformat{section}{第~#2#1#3~节}
\crefformat{subsection}{第~#2#1#3~小节}
\crefformat{subsubsection}{第~#2#1#3~小节}
\crefname{appendix}{附录}{附录}

% \crefname{definition}{定义}{定义}
% \crefname{axiom}{公理}{公理}
% \crefname{property}{性质}{性质}
% \crefname{proposition}{命题}{命题}
% \crefname{lemma}{引理}{引理}
% \crefname{corollary}{推论}{推论}
% \crefname{remark}{注解}{注解}
% \crefname{condition}{条件}{条件}
% \crefname{conclusion}{结论}{结论}
% \crefname{assumption}{假设}{假设}
Yu Xiong's avatar
Yu Xiong committed
%    \end{macrocode}
%
Yu Xiong's avatar
Yu Xiong committed
% \subsection{图表浮动体}
% 
Yu Xiong's avatar
Yu Xiong committed
% \subsubsection{图片表格}
% 
% 图表位置调整
Yu Xiong's avatar
Yu Xiong committed
%    \begin{macrocode}
\floatsetup[figure]{ % Captions for figures
	capposition=bottom,%
	margins=centering,%
	floatwidth=\textwidth%
}
\floatsetup[table]{ % Captions for tables
	capposition=above,%
	margins=centering,%
	floatwidth=\textwidth%
}
Yu Xiong's avatar
Yu Xiong committed
%    \end{macrocode}
Yu Xiong's avatar
Yu Xiong committed
% 
% 图表标题样式
%    \begin{macrocode}
\DeclareCaptionFont{songticap}{\zihao{5}\bf\songti}
\captionsetup{
  font=small,%
  labelfont=songticap,
	textfont=songticap,
	strut=no,%
	hypcap=true, % Links point to the top of the figure
	% indention=0pt, % Suppress indentation
	% % parindent=0pt, % Suppress space between paragraphs
	aboveskip=6pt, % Increase the space between the figure and the caption
	belowskip=6pt, % Increase the space between the caption and the table
}
%    \end{macrocode}
Yu Xiong's avatar
Yu Xiong committed
%
Yu Xiong's avatar
Yu Xiong committed
% \subsubsection{代码}
% 
Yu Xiong's avatar
Yu Xiong committed
%    \begin{macrocode}
Yu Xiong's avatar
Yu Xiong committed
\floatsetup[lstlisting]{ % Captions for lstlistings
	capposition=above,%
	margins=centering,%
	floatwidth=\textwidth%
}
\lstset{
	basicstyle=\ttfamily\linespread{1}\small\selectfont,
    keywordstyle=\bfseries,% use bold style for keywords
    commentstyle=\rmfamily\itshape,% use italic style for comments
    stringstyle=\ttfamily,% 字符串风格
    flexiblecolumns,% ?
    numbers=left,% left-aligned numbering
    showspaces=false,% hide markers for spaces
    showstringspaces=false,
    captionpos=t,% place the caption at the top
	% frame=lrtb,% show all four sides of the frame
	% linewidth=.8\textwidth,
	% breakatwhitespace=true,
	breaklines=true,
	xleftmargin=2em,xrightmargin=2em,% set the width of the code environment
}
Yu Xiong's avatar
Yu Xiong committed
%    \end{macrocode}
%
Yu Xiong's avatar
Yu Xiong committed
%    \begin{macrocode}
\lstdefinestyle{LaTeX}{
  language=TeX,
  morekeywords={
    begin, caption, label, mathrm, frac, 
    toprule, midrule, bottomrule, includegraphics}
Yu Xiong's avatar
Yu Xiong committed
%    \end{macrocode}
%