Skip to content
Snippets Groups Projects
njuthesis.dtx 95.7 KiB
Newer Older
Yu Xiong's avatar
Yu Xiong committed
%   \begin{lstlisting}
%   <code>
%   \end{lstlisting}
% \end{latexexample}
Yu Xiong's avatar
Yu Xiong committed
% 行间代码可以使用抄录环境 \tn{verb} (或者 \pkg{listings} 提供的 \tn{lstinline}),
% 格式如 |\verb!<code>!|。其中包裹代码的两个感叹号并不是绝对的,可以替换成任何两个相同的没有在这段代码中出现过的符号。
Yu Xiong's avatar
Yu Xiong committed
%
%
% \subsubsection{数学}
%
Yu Xiong's avatar
Yu Xiong committed
% 符号表可以参考\url{https://www.caam.rice.edu/~heinken/latex/symbols.pdf}。单位请参考\pkg{siunitx}。\pkg{siunitx}是一个更新频繁的包,可能会引发兼容性问题。
Yu Xiong's avatar
Yu Xiong committed
% 行内公式形如|$\mathrm{e}^{(a+2b)x}$|
%
% 带有编号的行间公式\env{equation}
% \begin{latexexample}[emph={[1]equation}]
Yu Xiong's avatar
Yu Xiong committed
%   \begin{equation}\label{eq:myeqlabel}
%       \pi
%   \end{equation}
% \end{latexexample}
Yu Xiong's avatar
Yu Xiong committed
%
% 如不需要编号,可以用\env{equation*}或者 |\[<eq>\]|
%
Yu Xiong's avatar
Yu Xiong committed
% 本模板也提供了一系列的数学环境。证明环境会在结尾添加证毕符号。
% \begin{latexexample}
Yu Xiong's avatar
Yu Xiong committed
%   \begin{proof}
%       证明我是我
%   \end{proof}
% \end{latexexample}
Yu Xiong's avatar
Yu Xiong committed
%
% 普通环境
% \begin{latexexample}
Yu Xiong's avatar
Yu Xiong committed
%   \begin{definition}[他人]
%       定义他人即地狱
%   \end{definition}
% \end{latexexample}
Yu Xiong's avatar
Yu Xiong committed
% \subsubsection{引用}
Yu Xiong's avatar
Yu Xiong committed
% \begin{function}{\cref}
%   \begin{syntax}
%     \tn{cref}\Arg{标签}
%   \end{syntax}
%
% 使用\pkg{cleveref}宏包实现了带图、表等项目名称的智能引用。
% 
% \end{function}
%
% \begin{function}{\href,\url}
Yu Xiong's avatar
Yu Xiong committed
%   \begin{syntax}
%     \tn{href}\Arg{链接}\Arg{名称}
%     \tn{url}\Arg{链接}
Yu Xiong's avatar
Yu Xiong committed
%   \end{syntax}
% 超链接。\tn{href}会将特定字符显示为可点击的超链接,\tn{url}会输出可点击的链接原文。
Yu Xiong's avatar
Yu Xiong committed
% 
% \end{function}
Yu Xiong's avatar
Yu Xiong committed
% 
% \subsection{特殊页面}
% 本模板还提供一系列命令与环境用于生成所需的特殊页面。
Yu Xiong's avatar
Yu Xiong committed
% \subsubsection{封面}
%
Yu Xiong's avatar
Yu Xiong committed
% \begin{function}{\maketitle}
% 用于生成封面。
Yu Xiong's avatar
Yu Xiong committed
% 本科生仅会生成中文封面;研究生会生成中英文封面。
% 如果选择了\opt{nlcover},仅会生成研究生的国家图书馆封面和原创性声明页。
Yu Xiong's avatar
Yu Xiong committed
% \end{function}
Yu Xiong's avatar
Yu Xiong committed
% \subsubsection{摘要页}
Yu Xiong's avatar
Yu Xiong committed
% \changes{v0.11}{2021/10/01}{简化了摘要的编写方式。}
% \begin{latexexample}[emph={[1]abstract,abstract*}]
Yu Xiong's avatar
Yu Xiong committed
%   \begin{abstract}
%       我的中文摘要
%   \end{abstract}
%
%       Abstract in English
% \end{latexexample}
Yu Xiong's avatar
Yu Xiong committed
%
%
% \subsubsection{前言页}
Yu Xiong's avatar
Yu Xiong committed
% 
% \begin{function}{preface}       
Yu Xiong's avatar
Yu Xiong committed
% 使用\env{preface}环境定义
Yu Xiong's avatar
Yu Xiong committed
% \end{function}
% \begin{latexexample}[emph={[1]preface,flushright}]
Yu Xiong's avatar
Yu Xiong committed
%   \begin{preface}
%       我的前言
%       \vspace{1cm}
%       \begin{flushright}
%       我的名字\\
%       时间地点
%       \end{flushright}
Yu Xiong's avatar
Yu Xiong committed
%   \end{preface}
% \end{latexexample}
% \subsubsection{目录页}
%
Yu Xiong's avatar
Yu Xiong committed
% \begin{function}{\tableofcontents,\listoffigures,\listoftables}
% 分别生成目录、图片清单和表格清单。
% \end{function}
Yu Xiong's avatar
Yu Xiong committed
% \subsubsection{致谢页}
%
Yu Xiong's avatar
Yu Xiong committed
% \begin{function}{acknowledgement}
Yu Xiong's avatar
Yu Xiong committed
% 同前言,使用\env{acknowledgement}环境
Yu Xiong's avatar
Yu Xiong committed
% \end{function}
% \begin{latexexample}[emph={[1]acknowledgement}]
Yu Xiong's avatar
Yu Xiong committed
%   \begin{acknowledgement}
%       感谢NJU LUG
%   \end{acknowledgement}
% \end{latexexample}
Yu Xiong's avatar
Yu Xiong committed
%
%
Yu Xiong's avatar
Yu Xiong committed
% \subsubsection{附录页}
Yu Xiong's avatar
Yu Xiong committed
% \begin{function}{\appendix}
% 附录放在本命令后,以英文字母进行编号,编写方式同正文
% \end{function}
% 
% \subsubsection{成果列表}
%
% \begin{function}{\njupaperlist,\njupaperlist*}
%   \begin{syntax}
%     \tn{njupaperlist}\Arg{文献}
%   \end{syntax}
Yu Xiong's avatar
Yu Xiong committed
% 成果列表,分别为发表文章目录与合作文章目录。\Arg{文献}的填写方式同\tn{cite},多个文献需要使用英文半角逗号隔开。
Yu Xiong's avatar
Yu Xiong committed
%
% \subsection{参考文献}
%
% 符合GB7714-2015规范。使用\hologo{biber}作为后端。需要使用 |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
% \end{function}
% 示例参考文献存储于 \file{njuthesis-sample.bib},直接向其中粘贴新的参考文献即可。如果希望额外添加参考文献列表,可以在导言区中多次调用 \tn{addbibresource} 命令。注意本命令与 |\bibliography{bibfile1,bibfile2}| 不同,不可以用逗号分隔多个输入文件,且必须使用带扩展名的完整文件名。
% \begin{function}{\printbibliography}
% 生成参考文献列表页面。
% \end{function}
Yu Xiong's avatar
Yu Xiong committed
%
%
% \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}
% 
%
% \subsubsection{文献管理}
%
% \subparagraph{使用EndNote}
%
% 南京大学信息化建设管理服务中心已购买\href{https://itsc.nju.edu.cn/EndNote/list.htm}{EndNote}供全校师生免费试用,最新版为EndNote 20。
%
%
% \subparagraph{使用Zotero}
%
% \href{https://www.zotero.org/}{Zotero}是一款免费的文献管理软件,支持所有桌面平台。
%
% 在保持Zotero程序运行的情况下,点击浏览器工具栏的Zotero Connector插件即可自动从网页抓取参考文件信息。Zotero可以通过\href{https://github.com/l0o0/jasminum}{jasminum插件}支持中文参考文献的识别。在选中希望使用的文献后右键导出文献条目即可生成\file{.bib}文件。
%
Yu Xiong's avatar
Yu Xiong committed
% \subsection{视觉识别系统}
%
% 视觉识别系统 \pkg{njuvisual} 现已被分离为独立宏包,基本使用方法举例如下:
% \begin{latexexample}[moretexcs={\njuemblem,\njuname}]
%   \njuemblem{!}{3cm}                           % 生成指定大小的紫色南大校徽
%   \njuname{4cm}{!}                             % 生成指定大小的紫色南大中文校名
%   \njuname*{4cm}{!}                            % 生成指定大小的紫色南大英文校名
%   \njuemblem[black]{!}{3cm}                    % 黑色的南大校徽
%   \njuemblem[department=dii]{!}{4cm}           % 紫色匡院徽标
%   \njuemblem[department=cs,color=blue]{!}{3cm} % 纯蓝色计科徽标
% \end{latexexample}
% 本宏包的详细使用方法请参考其\href{http://mirrors.ctan.org/macros/latex/contrib/njuvisual/njuvisual.pdf}{说明文档}。
Yu Xiong's avatar
Yu Xiong committed
%
% \begin{thebibliography}{99}
%
% \newcommand\urlprefix{\newline\hspace*{\fill}}
% \let\OldUrl=\url
% \renewcommand\url[2][]{{\small\textit{#1}~\OldUrl{#2}}}
% \newcommand\CTANurl[2][]{{^^A
%   \small\textit{#1}~\href{http://mirror.ctan.org/#2}{\texttt{CTAN://#2}}}}
%
% \bibitem{latexmk}
% \textsc{Collins J}.
% \newblock \textit{Fully automated \hologo{LaTeX} document generation} [EB/OL].
% \newblock version 4.76,
% \newblock (2021-11-20)
% \urlprefix\url{https://www.ctan.org/pkg/latexmk}
% \urlprefix\CTANurl[文档:]{support/latexmk/latexmk.pdf}
%
% \bibitem{lshort}
% \textsc{Oetiker T}, \textsc{Partl H}, \textsc{Hyna I}, et al.
% \newblock \textit{The Not So Short Introduction to \hologo{LaTeXe}: Or \hologo{LaTeXe} in 139 minutes} [EB/OL].
% \newblock version 6.4,
% \newblock (2021-03-09)
% \urlprefix\url{https://ctan.org/pkg/lshort-english}
% \urlprefix\CTANurl[文档:]{info/lshort/english/lshort.pdf}
%
% \bibitem{lshort-zh-cn}
% \textsc{Oetiker T}, \textsc{Partl H}, \textsc{Hyna I}, et al.
% \newblock \textit{一份(不太)简短的 \hologo{LaTeXe} 介绍: 或 111 分钟了解 \hologo{LaTeXe}} [EB/OL].
% \newblock \CTeX{} 开发小组, 译.
% \newblock 原版版本 version 6.4, 中文版本 version 6.03,
% \newblock (2021-11-21)
% \urlprefix\url{https://ctan.org/pkg/lshort-zh-cn}
% \urlprefix\CTANurl[文档:]{info/lshort/chinese/lshort-zh-cn.pdf}
%
% \end{thebibliography}
%
%
Yu Xiong's avatar
Yu Xiong committed
% \section{代码实现}
Yu Xiong's avatar
Yu Xiong committed
% \changes{v0.10}{2021/09/26}{对代码实现部分进行了整理。}
%
% 本模板使用 \hologo{LaTeX3} 语法编写,依赖 \pkg{expl3} 环境,
% 并需调用 \pkg{l3packages} 中的相关宏包。
%
% 以下代码中有一些形如 |<*class>|
% 的标记,这是 \pkg{DocStrip} 中的“guard”,用来选择性地提取文件。
% “|*|”和“|/|”分别表示该部分的开始和结束。不含
% “|*|”和“|/|”的 guard 出现在行号右侧,它们用来确定
% 单独一行代码的归属。这些 guard 的颜色深浅不一,用以明确嵌套关系。
%
% 另有若干包含 |@@| 的guard,用以表示名空间(模块)。
% 在删除注释生成格式文件时,变量名称中的 |@@| 会被等号后的字段替换,
% 譬如在本模板 \cls{njuthesis} 中 |@@=nju|。
% \subsection{准备}
%    \begin{macrocode}
Yu Xiong's avatar
Yu Xiong committed
%<*class>
Yu Xiong's avatar
Yu Xiong committed
%<@@=nju>
Yu Xiong's avatar
Yu Xiong committed
%    \end{macrocode}
%
Yu Xiong's avatar
Yu Xiong committed
% \changes{v0.11}{2021/10/23}{添加了若干环境检查与警告信息。}
% \changes{v0.12}{2021/12/03}{放宽对于 \pkg{l3packages} 的版本要求。}
% 检查 \hologo{LaTeX3} 编程环境。
%    \begin{macrocode}
\RequirePackage { xtemplate, l3keys2e }
\msg_new:nnn { njuthesis } { l3-too-old }
  {
Yu Xiong's avatar
Yu Xiong committed
    Package~ "#1"~ is~ too~ old. \\
    Please~ update~ an~ up-to-date~ version~ of~
    the~ bundles "l3kernel"~ and~ "l3packages"~
Yu Xiong's avatar
Yu Xiong committed
    using~ your~ TeX~ package~ manager~ or~ from~ \\
Yu Xiong's avatar
Yu Xiong committed
    CTAN.
\clist_map_inline:nn { xtemplate, l3keys2e }
    \@ifpackagelater {#1} { 2020/10/01 }
      { } { \msg_error:nnn { njuthesis } { l3-too-old } {#1} }
  }

%    \end{macrocode}
%
Yu Xiong's avatar
Yu Xiong committed
% 目前 \cls{njuthesis} 仅支持 \hologo{XeTeX} 和 \hologo{LuaTeX}。
%    \begin{macrocode}
\msg_new:nnn { njuthesis } { unsupported-engine }
  {
Yu Xiong's avatar
Yu Xiong committed
    The~ njuthesis~ class~ requires~ either~ 
    XeTeX~ or~ LuaTeX. \\
    "#1"~ is~ not~ supported~ at~ present.~ 
    You~ must~ change your~ typesetting~ engine~
Yu Xiong's avatar
Yu Xiong committed
    to~ "xelatex"~ or~ "lualatex".
  }
\sys_if_engine_xetex:F
  {
    \sys_if_engine_luatex:F
      {
        \msg_fatal:nnx { njuthesis } { unsupported-engine }
          { \c_sys_engine_str }
      }
  }
%    \end{macrocode}
%
Yu Xiong's avatar
Yu Xiong committed
% \begin{variable}{\c_@@_name_type_clist,
%   \c_@@_name_degree_clist,\c_@@_name_degree_en_clist}
% 论文类型与学位类型。
%    \begin{macrocode}
\clist_const:Nn \c_@@_name_type_clist
  { 毕业论文, 毕业设计 }
\clist_const:Nn \c_@@_name_degree_clist
  { 学士, 硕士, 硕士专业, 博士 }
\clist_const:Nn \c_@@_name_degree_en_clist
  { Bachelor, Master, Master, Doctor~of~Philosophy }
%    \end{macrocode}
% \end{variable}
%
% \begin{macro}{\@@_define_name:nn,\@@_define_name:nnn}
% 用来定义默认名称的辅助函数。
%    \begin{macrocode}
\cs_new_protected:Npn \@@_define_name:nn #1#2
  { \tl_const:cn { c_@@_name_ #1 _tl } {#2} }
\cs_new_protected:Npn \@@_define_name:nnn #1#2#3
  {
    \tl_const:cn { c_@@_name_ #1    _tl } {#2}
    \tl_const:cn { c_@@_name_ #1 _en_tl } {#3}
  }
%    \end{macrocode}
% \end{macro}
%
% 默认名称。注意空格是忽略掉的。
%    \begin{macrocode}
\clist_map_inline:nn
  {
    { pdf_creator     } { LaTeX~ with~ njuthesis~ class },
  }
  { \@@_define_name:nn #1 }
\clist_map_inline:nn
  {
    { keywords } { 关键词:    } { Keywords:         },
  }
  { \@@_define_name:nnn #1 }
%    \end{macrocode}
%
% \begin{variable}{\c_@@_orig_decl_text_tl}
% 学位论文原创性声明。
%    \begin{macrocode}
\tl_const:Nn \c_@@_orig_decl_text_tl
  {
    本人郑重声明,所提交的学位论文是本人在导师指导下独立进行科学研究工作
    所取得的成果。除本论文中已经注明引用的内容外,本论文不包含其他个人或
    集体已经发表或撰写过的研究成果,也不包含为获得南京大学或其他教育机构
    的学位证书而使用过的材料。对本文的研究做出重要贡献的个人和集体,均已
    在论文的致谢部分明确标明。本人郑重申明愿承担本声明的法律责任。
  }
%    \end{macrocode}
% \end{variable}
%
%
Yu Xiong's avatar
Yu Xiong committed
% \subsection{模板选项}
Yu Xiong's avatar
Yu Xiong committed
% \changes{v0.11}{2021/11/15}{进行了效率优化。}
% \begin{variable}{\g_@@_info_degree_int,\g_@@_info_type_int,
%   \g_@@_info_diploma_tl}
Yu Xiong's avatar
Yu Xiong committed
% 用于存储学位名称的变量,注意宏的命名,l代表局部变量,g代表全局变量
%    \begin{macrocode}
\int_new:N \g_@@_info_degree_int
\int_new:N \g_@@_info_type_int
\tl_new:N \g_@@_info_diploma_tl
Yu Xiong's avatar
Yu Xiong committed
%    \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}
% 学位类型。
Yu Xiong's avatar
Yu Xiong committed
%    \begin{macrocode}
    degree            .choices:nn   =
      { ug, mg, mf, phd }
      { \int_set_eq:NN \g_@@_info_degree_int \l_keys_choice_int  
Yu Xiong's avatar
Yu Xiong committed
%    \end{macrocode}
% 进行学位的判断。
%    \begin{macrocode}
        \int_compare:nTF { \g_@@_info_degree_int == 1 }
          { \tl_set:Nn \g_@@_info_diploma_tl { ug } }
          { \tl_set:Nn \g_@@_info_diploma_tl { g  } } },
    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 }
      { \int_set_eq:NN \g_@@_info_type_int   \l_keys_choice_int },
    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}
Yu Xiong's avatar
Yu Xiong committed
% 在定义完全部设置以后从tex文件导言区输入参数。
Yu Xiong's avatar
Yu Xiong committed
%    \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}
\keys_define:nn { nju } { 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*}
Yu Xiong's avatar
Yu Xiong committed
% 题目。以下标注星号(*)的为对应的英文字段。
Yu Xiong's avatar
Yu Xiong committed
%    \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
%
% \begin{macro}{info/keywords,info/keywords*}
Yu Xiong's avatar
Yu Xiong committed
% \changes{v0.11}{2021/10/01}{修改了添加关键词的方式。}
Yu Xiong's avatar
Yu Xiong committed
% 关键词列表。
  keywords         .clist_set:N = \l_@@_info_keywords_clist,
  keywords*        .clist_set:N = \l_@@_info_keywords_en_clist,
%    \end{macrocode}
% \end{macro}
% 
% \begin{macro}{info/grade,info/student-id,info/author,info/author*}
Yu Xiong's avatar
Yu Xiong committed
% 年级、学号、姓名。
Yu Xiong's avatar
Yu Xiong committed
%    \begin{macrocode}
    grade             .tl_set:N = \l_@@_info_grade_tl,
    student-id        .tl_set:N = \l_@@_info_id_tl,
    author            .tl_set:N = \l_@@_info_author_tl,
    author*           .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}
% \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}
% \begin{macro}{info/supervisora,info/supervisora*,info/supervisora-title,info/supervisora-title*}
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,
    supervisora-title .tl_set:N = \l_@@_info_supv_a_title_tl,
    supervisora-title*.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
%
% \begin{macro}{info/supervisorb,info/supervisorb*,info/supervisorb-title,info/supervisorb-title*}
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,
    supervisorb-title .tl_set:N = \l_@@_info_supv_b_title_tl,
    supervisorb-title*.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
%
% \begin{macro}{info/submit-date,info/submit-date*}
Yu Xiong's avatar
Yu Xiong committed
% 提交日期
Yu Xiong's avatar
Yu Xiong committed
%    \begin{macrocode}
    submit-date       .tl_set:N = \l_@@_submit_date_tl,
    submit-date*      .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
%
% \begin{macro}{info/defend-date,info/chairman,info/reviewer}
Yu Xiong's avatar
Yu Xiong committed
% 答辩信息。
Yu Xiong's avatar
Yu Xiong committed
%    \begin{macrocode}
    defend-date       .tl_set:N = \l_@@_defend_date_tl,
    chairman          .tl_set:N = \l_@@_info_chairman_tl,
    reviewer       .clist_set:N = \l_@@_info_reviewer_clist,
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/clc,info/secret-level,info/udc,info/supervisor-contact}
Yu Xiong's avatar
Yu Xiong committed
% 国家图书馆封面相关信息。
Yu Xiong's avatar
Yu Xiong committed
%    \begin{macrocode}
    clc               .tl_set:N = \l_@@_info_clc_tl,
    secret-level      .tl_set:N = \l_@@_info_seclv_tl,
    udc               .tl_set:N = \l_@@_info_udc_tl,
    supervisor-contact.tl_set:N = \l_@@_info_supv_cont_tl,
  }
%    \end{macrocode}
Yu Xiong's avatar
Yu Xiong committed
% \end{macro}
%
Yu Xiong's avatar
Yu Xiong committed
% \begin{macro}{\njusetup}
% \changes{v0.6}{2021/09/10}{改用键值对输入信息。}
% \changes{v0.11}{2021/10/01}{将个人信息变量名改为小写字母加连字符的形式。}
% 定义用于设置个人信息的命令
%    \begin{macrocode}
\NewDocumentCommand \njusetup { m } { \keys_set:nn { nju } { #1 } }
%    \end{macrocode}
Yu Xiong's avatar
Yu Xiong committed
% \end{macro}
Yu Xiong's avatar
Yu Xiong committed
% \subsection{载入宏包}
%
% \changes{v0.12}{2021/12/07}{重新组织宏包载入顺序。}
% 将选项传入 \cls{ctexbook} 文档类。
\PassOptionsToClass
  {
    a4paper,
    twoside,
    UTF8,
    scheme=chinese,
Yu Xiong's avatar
Yu Xiong committed
%    \end{macrocode}
% 关于行距,\hologo{LaTeX} 默认1.2行距,word 默认行距是1.3,要求1.5倍 word 行距,故
Yu Xiong's avatar
Yu Xiong committed
% $1.5\times\frac{1.3}{1.2} = 1.625$
Yu Xiong's avatar
Yu Xiong committed
%    \begin{macrocode}
    linespread=1.625,
%    \end{macrocode}
% 默认不载入任何字体,供本模板自行设置。
%    \begin{macrocode}
    fontset=none,
%    \end{macrocode}
% 正文字体设置为小四号。
%    \begin{macrocode}
    zihao=-4
  }
  { ctexbook }
Yu Xiong's avatar
Yu Xiong committed
%    \end{macrocode}
%
% 传入各宏包选项。
%    \begin{macrocode}
\clist_map_inline:nn
  {
    { no-math           } { fontspec },
    { perpage           } { footmisc },
    % { amsmath, thmmarks } { ntheorem },
    { titles            } { tocloft  },
    { hyphens           } { url      },
    { warnings-off={ mathtools-colon, mathtools-overbracket } }
                          { unicode-math },
    { capitalise, nameinlink, noabbrev }
                          { cleveref }
  }
  { \PassOptionsToPackage #1 }
%    \end{macrocode}
%
% 使用\pkg{ctexbook}作为基础文档类。
Yu Xiong's avatar
Yu Xiong committed
%    \begin{macrocode}
\LoadClass { ctexbook } [ 2018/04/01 ]
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
  {
    geometry,
    caption,
    setspace,
    fancyhdr,
    hologo,
% \pkg{tocloft} 用于定制目录样式。
Yu Xiong's avatar
Yu Xiong committed
%    \begin{macrocode}
    tocloft,
%    \end{macrocode}
% \pkg{url} 用于生成链接文本。
%    \begin{macrocode}
    url,
%    \end{macrocode}
% \pkg{emptypage} 用于清除空白页的页码。
%    \begin{macrocode}
    emptypage,
%    \end{macrocode}
% 南京大学视觉形象化标准宏包 \pkg{njuvisual} 用于绘制学校 logo。
%    \begin{macrocode}
    njuvisual,
Yu Xiong's avatar
Yu Xiong committed
%    \end{macrocode}
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}
    amsmath,
    amsthm,
    mathtools,
    thmtools,
    unicode-math,
Yu Xiong's avatar
Yu Xiong committed
%    \end{macrocode}
% 图片与表格。
Yu Xiong's avatar
Yu Xiong committed
%    \begin{macrocode}
    graphicx,
    wrapfig,
    booktabs,
    multirow,
Yu Xiong's avatar
Yu Xiong committed
%    \end{macrocode}
% 列表环境
    listings,
    enumitem,
%    \end{macrocode}
% 按以下顺序加载两个关于引用的包。
% \pkg{hyperref} 覆写了大量命令,因此需要在其他包最后载入。
% 仅有 \pkg{cleveref} 需要在 \pkg{hyperref} 后载入,否则会报错。
%    \begin{macrocode}
    hyperref,
    cleveref
  }
% \begin{macro}{\njuline}
% 针对编译引擎,使用不同的宏包构建可以对中文正常换行的下划线命令。
Yu Xiong's avatar
Yu Xiong committed
%    \begin{macrocode}
\sys_if_engine_xetex:T
  {
    \RequirePackage{xeCJKfntef,microtype}
    \NewDocumentCommand \njuline { m } { \CJKunderline{#1} }
  }
Yu Xiong's avatar
Yu Xiong committed
%    \end{macrocode}
% \pkg{lua-ul} 中需要在结尾使用 \tn{null} 保护尾部空白。
\sys_if_engine_luatex:T
  {
    \RequirePackage{lua-ul,dashundergaps}
    \NewDocumentCommand \njuline { m } { \underLine{#1} \null }
  }
% \end{macro}
% \begin{macro}{\@@_check_package:nnn}
% 检查过时宏包。
%    \begin{macrocode}
\msg_new:nnn { njuthesis } { package-too-old }
  {
    Package~ "#1"~ is~ too~ old. \\
Yu Xiong's avatar
Yu Xiong committed
    The~ njuthesis~ class~ only~ supports~ "#1"~ with~
    a~ version higher~ than~ v#2.\\
    Please~ update~ an~ up-to-date~ version~ of~ it~
Yu Xiong's avatar
Yu Xiong committed
    using~ your TeX~ package~ manager~ or~ from~ CTAN.
  }
\cs_new_protected:Npn \@@_check_package:nnn #1#2#3
  {
    \@ifpackagelater {#1} {#2}
      { } { \msg_error:nnnn { njuthesis } { package-too-old } {#1} {#3} }
  }
%    \end{macrocode}
% \end{macro}
%
% 检查绘制下划线所需的 \pkg{luatexja} 包版本。该宏包在2021-09-18的更新解决了下划线中断问题,然而在2021-10-24的更新才提供了正确的内嵌日期。
%    \begin{macrocode}
\sys_if_engine_luatex:T
  { \@@_check_package:nnn { luatexja } { 2021/10/24 } { 20211024.0 } }
%    \end{macrocode}
%
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
% 判断用户是否自定义了中英文字体。如果其中任意一种未被定义,
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
      { \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
Yu Xiong's avatar
Yu Xiong committed
  { 
    \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  } } } 
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:
Yu Xiong's avatar
Yu Xiong committed
  {
    \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:
Yu Xiong's avatar
Yu Xiong committed
  {
    \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:
Yu Xiong's avatar
Yu Xiong committed
  {
    \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:
Yu Xiong's avatar
Yu Xiong committed
  {
    \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]
  }
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 字体。
Yu Xiong's avatar
Yu Xiong committed
% TODO: 修复 macOS 字体支持,实现开箱即用。
Yu Xiong's avatar
Yu Xiong committed
%    \begin{macrocode}
\cs_new_protected:Npn \@@_load_cjk_font_macos:
Yu Xiong's avatar
Yu Xiong committed
  {
    % 移除 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:
Yu Xiong's avatar
Yu Xiong committed
  {
    % 移除 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:}
% 方正字库(简繁扩展)
Yu Xiong's avatar
Yu Xiong committed
%    \begin{macrocode}
\cs_new_protected:Npn \@@_load_cjk_font_founder:
Yu Xiong's avatar
Yu Xiong committed
    \sys_if_engine_luatex:T
    {
%    \end{macrocode}
% 在 LuaTeX 中调整方正字体括号位置
% XeTeX 暂无好的解决方法
%    \begin{macrocode}
      \defaultCJKfontfeatures{JFM={zh_CN/{quanjiao,fzpr}}}
    }
    \setCJKmainfont{FZSSK}[% 方正书宋
Yu Xiong's avatar
Yu Xiong committed
      BoldFont=FZXBSK,% 方正小标宋
      ItalicFont=FZKTK]% 方正楷体
    \setCJKsansfont{FZXH1K}[% 方正细黑一
Yu Xiong's avatar
Yu Xiong committed
      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]
    \defaultCJKfontfeatures{}
  }
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:
Yu Xiong's avatar
Yu Xiong committed
  {
    % 思源宋体
    \setCJKmainfont[
      UprightFont=NotoSerifSC-Regular,
      BoldFont=NotoSerifSC-Bold,
      ItalicFont=NotoSerifSC-Regular,
      BoldItalicFont=NotoSerifSC-Bold,
      ItalicFeatures=FakeSlant,
      BoldItalicFeatures=FakeSlant]{Noto~Serif~SC}
Yu Xiong's avatar
Yu Xiong committed
    % 思源黑体
    \setCJKsansfont[
      UprightFont=NotoSansSC-Regular,
      BoldFont=NotoSansSC-Bold,
      ItalicFont=NotoSansSC-Regular,
      BoldItalicFont=NotoSansSC-Bold,
      ItalicFeatures=FakeSlant,
      BoldItalicFeatures=FakeSlant]{Noto~Sans~SC}
Yu Xiong's avatar
Yu Xiong committed
    \setCJKmonofont{FZFSK}[Extension=.ttf]% 方正仿宋
Yu Xiong's avatar
Yu Xiong committed
    \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:
Yu Xiong's avatar
Yu Xiong committed
  {
    \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}
Yu Xiong's avatar
Yu Xiong committed
    \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}
%
% \changes{v0.10}{2021/09/28}{修正了数学字体。}
%
Yu Xiong's avatar
Yu Xiong committed
% 设置数学字体 (XITS, 或者 \href{https://www.stixfonts.org}{STIX}, 与 Times New Roman 最为相近)
% \setmathfont{STIXTwoMath-Regular}[Extension = .otf]
\setmathfont{XITSMath-Regular}[
  BoldFont = XITSMath-Bold,
  Extension = .otf]
\setmathfont{latinmodern-math.otf}[range={cal,bb,frak}]
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, 
  headheight = 15 pt
Yu Xiong's avatar
Yu Xiong committed
}
%    \end{macrocode}