diff options
Diffstat (limited to 'macros/latex/contrib/fduthesis/fduthesis-code.dtx')
-rw-r--r-- | macros/latex/contrib/fduthesis/fduthesis-code.dtx | 6316 |
1 files changed, 6316 insertions, 0 deletions
diff --git a/macros/latex/contrib/fduthesis/fduthesis-code.dtx b/macros/latex/contrib/fduthesis/fduthesis-code.dtx new file mode 100644 index 0000000000..786bbfa049 --- /dev/null +++ b/macros/latex/contrib/fduthesis/fduthesis-code.dtx @@ -0,0 +1,6316 @@ +% \iffalse meta-comment +% !TeX program = XeLaTeX +% !TeX encoding = UTF-8 +% +% Copyright (C) 2017--2023 by Xiangdong Zeng <xdzeng96@gmail.com> +% +% This work may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either +% version 1.3c of this license or (at your option) any later +% version. The latest version of this license is in: +% +% http://www.latex-project.org/lppl.txt +% +% and version 1.3 or later is part of all distributions of +% LaTeX version 2005/12/01 or later. +% +% This work has the LPPL maintenance status `maintained'. +% +% The Current Maintainer of this work is Xiangdong Zeng. +% +% This work consists of the files fduthesis.dtx, +% fduthesis-doc.dtx, +% fduthesis-logo.dtx, +% and the derived files fduthesis.ins, +% fduthesis.cls, +% fduthesis-en.cls, +% fduthesis.def, +% fdudoc.cls, +% fdulogo.sty, +% fdulogo-example.tex, +% fduthesis-cover.tex, +% fduthesis-en.tex, +% fudan-emblem.pdf, +% fudan-emblem-new.pdf, +% fudan-name.pdf, +% fduthesis.pdf, +% fduthesis-en.pdf, +% fduthesis-code.pdf, +% and README.md. +% +%<*internal> +\iffalse +%</internal> +% +%<*readme> +The `fduthesis` Class +===================== + +*LaTeX thesis template for Fudan University, v0.9* + +Overview +-------- + +This template supports doctoral or master dissertion and undergraduate +thesis, both in Chinese or English. With the help of modern LaTeX +technology, `fduthesis` aims to create a simple interface, a normative +format, as well as a hackable class for the users. + +At present, `fduthesis` only supports XeTeX and LuaTeX engines. +Support for pdfTeX and [ApTeX](https://github.com/clerkma/ptex-ng) is +still under development. `fduthesis` only allows UTF-8 encoding. + +The documentation can be found in +[fduthesis.pdf](http://mirrors.ctan.org/macros/latex/contrib/fduthesis/fduthesis.pdf) +(in Chinese) or +[fduthesis-en.pdf](http://mirrors.ctan.org/macros/latex/contrib/fduthesis/fduthesis-en.pdf) +(in English). + +GitHub repository: <https://github.com/stone-zeng/fduthesis>. + +Installation +------------ + +To install `fduthesis`, you can use one of the following methods: + +- If you are running TeX Live, the simplest way is to run + + tlmgr install fduthesis + +- Download + [fduthesis.tds.zip](http://mirror.ctan.org/install/macros/latex/contrib/fduthesis.tds.zip) + from CTAN, extract it in the root of one of your TDS trees, and + update the filename database. + +- Get the source from GitHub: + + git clone https://github.com/stone-zeng/fduthesis.git + + Run `install-win.bat` (Windows) or `install-unix.sh` (Linux or macOS) + to generate the templates and configuration files. These files would + be found in a new-created `thesis` folder. You can enjoy `fduthesis` + here at once. + + For permanent installation, you may move the following files into a + directory where LaTeX will find them (e.g. + `TEXMF/tex/latex/fduthesis/`): + + - `fduthesis.cls` + - `fduthesis-en.cls` + - `fduthesis.def` + - `fdudoc.cls` + - `fdulogo.sty` + - `fudan-emblem.pdf` + - `fudan-emblem-new.pdf` + - `fudan-name.pdf` + + Do not forget to update the filename database afterwards. + +Contributing +------------ + +[Issues](https://github.com/stone-zeng/fduthesis/issues) and +[pull requests](https://github.com/stone-zeng/fduthesis/pulls) +are always welcome. + +License +------- + +This work may be distributed and/or modified under the conditions of +the [LaTeX Project Public License](http://www.latex-project.org/lppl.txt), +either version 1.3c of this license or (at your option) any later +version. + +----- + +Copyright (C) 2017–2023 by Xiangdong Zeng <xdzeng96@gmail.com>. +%</readme> +% +%<*internal> +\fi +\begingroup + \def\NameOfLaTeXe{LaTeX2e} +\expandafter\endgroup\ifx\NameOfLaTeXe\fmtname\else +\csname fi\endcsname +%</internal> +% +%<*install> +\input docstrip.tex +\keepsilent +\askforoverwritefalse + +\preamble + + Copyright (C) 2017--2023 by Xiangdong Zeng <xdzeng96@gmail.com> + + This work may be distributed and/or modified under the + conditions of the LaTeX Project Public License, either + version 1.3c of this license or (at your option) any later + version. The latest version of this license is in: + + http://www.latex-project.org/lppl.txt + + and version 1.3 or later is part of all distributions of + LaTeX version 2005/12/01 or later. + + This work has the LPPL maintenance status `maintained'. + + The Current Maintainer of this work is Xiangdong Zeng. + + This work consists of the files fduthesis.dtx, + fduthesis-doc.dtx, + fduthesis-logo.dtx, + and the derived files fduthesis.ins, + fduthesis.cls, + fduthesis-en.cls, + fduthesis.def, + fdudoc.cls, + fdulogo.sty, + fdulogo-example.tex, + fduthesis-cover.tex, + fduthesis-en.tex, + fudan-emblem.pdf, + fudan-emblem-new.pdf, + fudan-name.pdf, + fduthesis.pdf, + fduthesis-en.pdf, + fduthesis-code.pdf, + and README.md. + +\endpreamble + +\generate{ + \usedir{tex/latex/fduthesis} + \file{\jobname.cls} {\from{\jobname.dtx}{class}} + \file{\jobname-en.cls} {\from{\jobname.dtx}{class-en}} + \file{\jobname.def} {\from{\jobname.dtx}{definition}} + \file{fdudoc.cls} {\from{\jobname.dtx}{doc} + \from{\jobname-doc.dtx}{doc}} + \file{fdulogo.sty} {\from{\jobname.dtx}{logo} + \from{\jobname-logo.dtx}{logo}} + \file{fdulogo-example.tex} {\from{\jobname.dtx}{ex-logo} + \from{\jobname-logo.dtx}{ex-logo}} + \file{\jobname-cover.tex} {\from{\jobname.dtx}{cover} + \from{\jobname-logo.dtx}{cover}} +%<*internal> + \usedir{source/latex/fduthesis} + \file{\jobname.ins} {\from{\jobname.dtx}{install}} +%</internal> + \usedir{doc/latex/fduthesis} + \nopreamble\nopostamble + \file{README.md} {\from{\jobname.dtx}{readme}} +} + +\obeyspaces +\Msg{*************************************************************} +\Msg{* *} +\Msg{* To finish the installation you have to move the following *} +\Msg{* files into a directory searched by TeX: *} +\Msg{* *} +\Msg{* The recommended directory is TDS:tex/latex/fduthesis *} +\Msg{* *} +\Msg{* fduthesis.cls *} +\Msg{* fduthesis-en.cls *} +\Msg{* fduthesis.def *} +\Msg{* fdudoc.cls *} +\Msg{* fdulogo.sty *} +\Msg{* *} +\Msg{* To produce the documentation, run the file fduthesis.dtx *} +\Msg{* through XeLaTeX. *} +\Msg{* *} +\Msg{* Happy TeXing! *} +\Msg{* *} +\Msg{*************************************************************} + +\endbatchfile +%</install> +% +%<*internal> +\fi +%</internal> +% +%<class|class-en|doc|logo>\NeedsTeXFormat{LaTeX2e}[2020/10/01] +%<*!(driver|install|ex-logo|cover)> +%<!readme>\GetIdInfo $Id: fduthesis.dtx 0.9 2023-02-26 12:00:00Z Xiangdong Zeng <xdzeng96@gmail.com> $ +%<class> {Thesis template for Fudan University} +%<class>\ProvidesExplClass{\ExplFileName} +%<class-en> {Thesis template for Fudan University (English version)} +%<class-en>\ProvidesExplClass{\ExplFileName-en} +%<definition> {Definition file for fduthesis} +%<definition>\ProvidesExplFile{\ExplFileName.def} +%<doc> {Documentation class for fduthesis} +%<doc>\ProvidesExplClass{fdudoc} +%<logo> {Fudan University's Visual Identity} +%<logo>\ProvidesExplPackage{fdulogo} +%<!readme> {\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription} +%</!(driver|install|ex-logo|cover)> +%<*driver> +% \PassOptionsToPackage{showframe}{geometry} +\documentclass{fdudoc} +\usepackage{xeCJKfntef} +\hypersetup{ + pdftitle = {fduthesis: 复旦大学论文模板}, + pdfauthor = {曾祥东}} +% 全角标点放在引号中,需要改成半角式,否则间距过大,不好看 +\def\FSID{“{\xeCJKsetup{PunctStyle=banjiao}。}”} % U+3002 +\def\FSFW{“{\xeCJKsetup{PunctStyle=banjiao}.}”} % U+FF0E +\def\COFW{“{\xeCJKsetup{PunctStyle=banjiao}:}”} % U+FF1A +\def\SCFW{“{\xeCJKsetup{PunctStyle=banjiao};}”} % U+FF1B +%^^A! \PassOptionsToPackage{scheme=plain, linespread=1.1}{ctex} +%^^A! \documentclass{fdudoc} +%^^A! \hypersetup{ +%^^A! pdftitle = {fduthesis: LaTeX Thesis Template for Fudan University}, +%^^A! pdfauthor = {Xiangdong Zeng}} +%^^A! \ctexset{ +%^^A! section = {name = {}, format+ = \raggedright}, +%^^A! subsubsection/tocline = {\CTEXnumberline{#1}#2}} +%^^A! \pagestyle{headings} +%^^A! \def\FSID{{\xeCJKsetup{PunctStyle=banjiao}。}} +%^^A! \def\FSFW{{\xeCJKsetup{PunctStyle=banjiao}.}} +%^^A! + +\title{\textcolor{MaterialIndigo800}{\textbf{fduthesis: 复旦大学论文模板}}} +\author{曾祥东} +\date{2023/02/26\quad v0.9% + \thanks{\url{https://github.com/stone-zeng/fduthesis}.}} +%^^A! \title{\textcolor{MaterialIndigo800}{% +%^^A! \textbf{The \textsf{fduthesis} Class \\ +%^^A! \LaTeX{} Thesis Template for Fudan University}}} +%^^A! \author{Xiangdong Zeng} +%^^A! \date{2023/02/26\quad v0.9% +%^^A! \thanks{\url{https://github.com/stone-zeng/fduthesis}.}} +%^^A! + +\begin{document} +%^^A! \begin{document} +%^^A! + \DisableImplementation + \EnableImplementation + \def\FDUCODEDOC{} + \DocInput{fduthesis.dtx} + \DocInput{fduthesis-doc.dtx,fduthesis-logo.dtx} + \IndexLayout + \PrintChanges + \PrintIndex +\end{document} +%</driver> +% \fi +% +% \changes{v0.1}{2017/02/15}{开始编写模板。} +% \changes{v0.2}{2017/02/19}{使用 Git 进行版本控制,并发布至 GitHub。} +% \changes{v0.3}{2017/02/21}{使用 \cls{doc} 和 \pkg{DocStrip}。} +% \changes{v0.3}{2017/03/04}{支持 \LuaLaTeX{}。} +% \changes{v0.3}{2017/03/20}{添加测试文件。} +% \changes{v0.3}{2017/05/26}{使用 Travis CI 进行持续集成。} +% \changes{v0.3}{2017/06/23}{添加复旦大学视觉识别系统。} +% \changes{v0.3}{2017/07/05}{新增声明页。} +% \changes{v0.3}{2017/07/10}{添加英文模板。} +% \changes{v0.3}{2017/07/19}{使用 \pkg{l3docstrip} 管理名字空间。} +% \changes{v0.3}{2017/07/28}{整理代码,编写用户文档。} +% \changes{v0.4}{2017/08/03}{拆分 \file{.dtx} 文件。} +% \changes{v0.4}{2017/08/11}{添加错误信息提示。} +% \changes{v0.6}{2017/11/23}{同步 \pkg{ctex} v2.4.11。} +% \changes{v0.6}{2017/11/29}{添加英文版用户文档。} +% \changes{v0.7}{2018/01/26}{使用 \pkg{l3build} 进行回归测试。} +% \changes{v0.7}{2018/01/31}{不再需要 \file{fduthesis-user.def}。} +% \changes{v0.7}{2018/03/04}{所有选项更改为用连字符隔开的形式。} +% \changes{v0.7a}{2018/04/09}{更新文档,发布至 CTAN。} +% \changes{v0.7b}{2018/04/29}{支持 \TeXLive{} 2018。} +% \changes{v0.7b}{2018/05/06}{将校名、校徽图片添加至发行版。} +% +%^^A 禁止使用 " 符号作为抄录文本缩略符 +% \DeleteShortVerb\" +%^^A! \DeleteShortVerb\" +%^^A! +% +%^^A 封面与目录的页边距 +%^^A+ +% \newgeometry{ +% left = 1.25 in, +% right = 1.25 in, +% top = 1.25 in, +% bottom = 1.00 in +% } +% +% \maketitle +% \vfill +% \begin{center} +% \includegraphics[width=8cm]{../logo/fduthesis-cover.pdf} +% \end{center} +% \vfill +% \thispagestyle{plain} +% \clearpage +% +% \tableofcontents +% +%^^A- +% +% \EnableDocumentation +%^^A \DisableDocumentation +% +% \begin{documentation} +% +%^^A 用户手册的页边距 +%^^A+ +% \newgeometry{ +% left = 1.65 in, +% right = 0.80 in, +% top = 1.25 in, +% bottom = 1.00 in +% } +% +%^^A- +% +% \section{介绍} +%^^A! \section{Introduction} +%^^A! +% +% 本模板编写之初,可以找到的复旦大学 \LaTeX{} 论文模板有以下这些: +% \begin{itemize} +% \item 数学科学学院的本科毕业论文模版 \cite{数院本科毕业论文写作模板},主要贡献者为 2001 级的 +% 何力同学、李湛同学和 2004 级的张越同学; +% \item Pandoxie 编写的 \cls{FDU-Thesis-Latex} \cite{pandoxie2014fduthesislatex},基本满足了博士 +% (硕士)毕业论文格式要求,在当时使用人数较多; +% \item richarddzh 编写的硕士论文模板 \cls{fudan-thesis} \cite{richard2016fudanthesis}。 +% \end{itemize} +% 以上模板大都没有经过系统的设计,也缺乏后续维护。相比之下,清华大学 \cite{thuthesis}、 +% 北京大学 \cite{pkuthss}、重庆大学 \cite{cquthesis}、中国科学技术大学 \cite{ustcthesis}、 +% 中国科学院大学 \cite{ucasthesis} 以及友校上海交通大学 \cite{sjtuthesis} 等,都有较为成熟、稳定 +% 的解决方案,也积累了广泛的用户基础,值得参考与借鉴。 +% +% 考虑到开发与持续维护的需要,本模板使用 \LaTeX3 \cite{source3} 语法编写。同时将构建一套简洁的 +% 接口,以方便用户使用。 +%^^A! \cls{fduthesis} is a thesis template for Fudan University. +%^^A! This template is mostly written in \LaTeX3 syntax, and +%^^A! provides a simple interface for users. +%^^A! +% +% \subsection*{\LaTeX{} 入门} +%^^A! \subsection*{Getting started with \LaTeX{}} +%^^A! +% +% 本文档不是一份 \LaTeX{} 零基础教程。如果缺乏使用 \LaTeX{} 的经验,建议先阅读有关入门文档,如 +% 刘海洋编著的《\LaTeX{} 入门》\cite{刘海洋2013latex入门} 第一章,或“\pkg{lshort}” \cite{lshort} +% 及其中文翻译版 \cite{lshort-zh-cn}。当然,网络上的 \LaTeX{} 教程数量甚多,也可自行选取。 +%^^A! This documentation is \emph{not} a \LaTeX{} tutorial at +%^^A! starter's level. If you are totally a newbie, please read some +%^^A! introductions like the famous \pkg{lshort}. Of course, there +%^^A! are countless \LaTeX{} tutorials on the Internet. You can +%^^A! choose whatever you like. +%^^A! +% +% \subsection*{关于本文档} +%^^A! \subsection*{About this documentation} +%^^A! +% +% 本文档采用不同字体表示不同内容。无衬线字体表示宏包名称,如 \pkg{xeCJK} 宏包、\cls{fduthesis} +% 文档类等;等宽字体表示代码或文件名,如 \cs{fdusetup} 命令、\env{abstract} 环境、\TeX{} 文档 +% \file{thesis.tex} 等;带有尖括号的楷体(或西文斜体)表示命令参数,如 \meta{模板选项}、 +% \meta{English title} 等。在使用时,参数两侧的尖括号不必输入。示例代码进行了语法高亮处理, +% 以方便阅读。 +%^^A! In this documentation, different typefaces are used to +%^^A! represent different contents. Packages and classes are shown +%^^A! in sans-serif font, e.g.\ \pkg{xeCJK} package and +%^^A! \cls{fduthesis} class. Commands and file names are shown in +%^^A! monospaced font, e.g.\ command \cs{fdusetup}, environment +%^^A! \env{abstract} and \TeX{} document \file{thesis.tex}. +%^^A! Italic-shaped font with angle brackets outside means arguments, +%^^A! e.g.\ \meta{English title}. However, you do not need to type +%^^A! the brackets when using these commands. The example code has +%^^A! proper syntax highlighting so it will be much easier to read. +%^^A! +% +% 在用户手册中,带有蓝色侧边线的为 \LaTeX{} 代码,而带有粉色侧边线的则为命令行代码,请注意区分。 +% 模板提供的选项、命令、环境等,均列在左边栏并用横线框起,同时给出使用语法和相关说明。 +%^^A! \LaTeX{} code lines will have a blue line on their left, while +%^^A! for command lines there will be a pink line. The options, +%^^A! commands and environments in \cls{fduthesis} will be surrounded +%^^A! by two horizontal lines. Their usages and descriptions are +%^^A! provided at the same time. +%^^A! +% +% 本模板中的选项、命令或环境可以分为以下三类: +% \begin{itemize} +% \item 名字后面带有 \rexptarget\rexpstar{} 的,表示只能在\emph{中文模板}中使用; +% \item 名字后面带有 \exptarget\expstar{} 的,表示只能在\emph{英文模板}中使用; +% \item 名字后面不带有特殊标记的,表示既可以在中文模板中使用,也可以在英文模板中使用。 +% \end{itemize} +%^^A! The options, commands and environments in \cls{fduthesis} can be +%^^A! divided into the following three types: +%^^A! \begin{itemize} +%^^A! \item Those can be only used in \emph{Chinese templates} are +%^^A! indicated by \rexptarget\rexpstar{}. +%^^A! \item Those can be only used in \emph{English templates} are +%^^A! indicated by \rexptarget\expstar{}. +%^^A! \item If they do not have marks afterwards, then you can use +%^^A! them in both Chinese and English templates. +%^^A! \end{itemize} +%^^A! +% +% \section{安装} +%^^A! \section{Installation} +%^^A! +% +% \subsection{获取 \cls{fduthesis}} +%^^A! \subsection{Obtaining \cls{fduthesis}} +%^^A! +% +% \subsubsection{标准安装} +%^^A! \subsubsection{Standard installation} +%^^A! +% +% 如果没有特殊理由,始终建议使用宏包管理器安装 \cls{fduthesis}。例如在 \TeXLive{} 中,执行(可能 +% 需要管理员权限) +% \begin{shellexample}[morekeywords={tlmgr,install}] +% tlmgr install fduthesis +% \end{shellexample} +% 即可完成安装。如果已经装有完整版的 \TeXLive{},则 \cls{fduthesis} 应当已经包含在其中,此时即可 +% 直接使用,也可以执行 +% \begin{shellexample}[morekeywords={tlmgr,update},emph={--all}] +% tlmgr update --all +% \end{shellexample} +% 检查并更新全部宏包。 +%^^A! If there are no special reasons, it is always recommended to +%^^A! install \cls{fduthesis} with a package manager. For example, +%^^A! the following command will install the package in \TeXLive{} +%^^A! (administrator permission may be required): +%^^A! \begin{shellexample}[morekeywords={tlmgr,install}] +%^^A! tlmgr install fduthesis +%^^A! \end{shellexample} +%^^A! +% +% 在 \TeXLive{} 和 \MiKTeX{} 中,还可以通过图形界面进行安装和更新,此处不再赘述。 +%^^A! In \TeXLive{} and \MiKTeX{}, you can also install \cls{fduthesis} +%^^A! through a graphical interface. It's rather simple and will not be +%^^A! described here. +%^^A! +% +% \subsubsection{手动安装} +%^^A! \subsubsection{Install manually} +%^^A! +% +% 如果需要从 CTAN 上自行下载并手动安装,可使用 TDS 安装包: +% \begin{itemize} +% \item 从 CTAN 上下载 \cls{fduthesis} 的 +% \href{https://mirror.ctan.org/install/macros/latex/contrib/fduthesis.tds.zip}{TDS 安装包}; +% \item 按目录结构将 \file{fduthesis.tds.zip} 中的文件复制到 \TeX{} 发行版的本地 TDS 根目录; +% \item 执行 \texttt{mktexlsr} 命令刷新文件名数据库以完成安装。 +% \end{itemize} +%^^A! If you want to download the template from CTAN and install it +%^^A! manually, the recommended way is to use the TDS ZIP file: +%^^A! \begin{itemize} +%^^A! \item Download the \href{http://mirror.ctan.org/install/macros/latex/contrib/fduthesis.tds.zip}% +%^^A! {TDS ZIP file} for \cls{fduthesis}; +%^^A! \item Copy all the files in \file{fduthesis.tds.zip} into the +%^^A! local TDS directory of \TeX{} distribution. +%^^A! \item Run \texttt{mktexlsr} to update the ls-R database. +%^^A! \end{itemize} +%^^A +% +% \subsubsection{开发版本} +%^^A! \subsubsection{Development version} +%^^A! +% +% CTAN 上仅提供了 \cls{fduthesis} 的稳定版,其更新可能较为滞后,一些 bug 常常不能得到及时修复。 +% 如果需要使用开发版(托管在 GitHub 上),可以使用模板提供的安装脚本: +% \begin{itemize} +% \item 打开 \href{https://github.com/stone-zeng/fduthesis}{项目主页},点击“Code”按钮,并选择 +% “Download ZIP”,下载 \file{fduthesis-main.zip};如果已经装有 Git 程序,也可通过以下命令直接 +% 克隆代码仓库: +% \begin{shellexample}[gobble=7,alsoletter={.},morekeywords={git,clone}] +% git clone https://github.com/stone-zeng/fduthesis.git +% \end{shellexample} +% \item 执行 \file{install-win.bat}(Windows 系统)或 \file{install-unix.sh}(Linux 或 macOS +% 系统),所有需要的文件便会在 \file{thesis} 文件夹中生成。 +% \end{itemize} +%^^A! On CTAN, only the stable version of \cls{fduthesis} is provided, where new features and +%^^A! bug fixes may not be included in time. To use the latest development version on GitHub, +%^^A! you can use the install script: +%^^A! \begin{itemize} +%^^A! \item Open the project's \href{https://github.com/stone-zeng/fduthesis}{homepage}, click +%^^A! ``Code'' button and choose ``Download ZIP'' to download \file{fduthesis-main.zip}. +%^^A! If you have git program on your computer, you can also clone the repository directly: +%^^A! \begin{shellexample}[gobble=5,alsoletter={.},morekeywords={git,clone}] +%^^A! git clone https://github.com/stone-zeng/fduthesis.git +%^^A! \end{shellexample} +%^^A! \item Run \file{install-win.bat} (Windows) or \file{install-unix.sh} (Linux or macOS), +%^^A! all the necessary files will be found in the \file{thesis} folder then. +%^^A! \end{itemize} +%^^A! +% +% \subsubsection{Overleaf} +%^^A! \subsubsection{Overleaf} +%^^A! +% +% \cls{fduthesis} 也提供了 \href{https://www.overleaf.com/latex/templates/fduthesis-latex-thesis-template-for-fudan-university/svtdhhstkmkt}{Overleaf 的版本}, +% 打开链接并登录后即可直接编辑。 +%^^A! \cls{fduthesis} also provides the \href{https://www.overleaf.com/latex/templates/fduthesis-latex-thesis-template-for-fudan-university/svtdhhstkmkt}{Overleaf version}. +%^^A! You can follow the link and login to edit directly on the web. +%^^A! +% +% \subsection{模板组成} +%^^A! \subsection{Composition of the template} +%^^A! +% +% 本模板主要包含核心文档类、配置文件、附属宏包以及用户文档等几个部分,其具体组成见 +% 表~\ref{tab:fduthesis-components}。 +%^^A! There are several parts in \cls{fduthesis}, including kernel template +%^^A! classes, configuration files, affiliated packages and user's guides. +%^^A! More details are listed in table~\ref{tab:fduthesis-components}. +%^^A! +% +% \begin{table}[ht] +% \caption{\cls{fduthesis} 的主要组成部分} +% \label{tab:fduthesis-components} +% \centering +% \small +% \begin{tabular}{ll} +% \toprule +% \textbf{文件} & \textbf{功能说明} \\ +% \midrule +% \file{fduthesis.cls} & 中文模板文档类 \\ +% \file{fduthesis-en.cls} & 英文模板文档类 \\ +% \file{fduthesis.def} & 参数配置文件,用于设定初始参数,不建议自行改动 \\ +% \file{fdudoc.cls} & 用户手册文档类 \\ +% \file{fdulogo.sty} & 复旦大学视觉识别系统 \\ +% \file{fudan-emblem.pdf} & 校徽 \\ +% \file{fudan-emblem-new.pdf} & 校徽(重修版) \\ +% \file{fudan-name.pdf} & 校名图片 \\ +% \file{README.md} & 简要自述 \\ +% \ifdefined\FDUCODEDOC +% \file{fduthesis.pdf} & 中文用户手册 \\ +% \file{fduthesis-en.pdf} & 英文用户手册 \\ +% \file{fduthesis-code.pdf} & 模板实现代码(本文档) \\ +% \else +% \file{fduthesis.pdf} & 中文用户手册(本文档) \\ +% \file{fduthesis-en.pdf} & 英文用户手册 \\ +% \file{fduthesis-code.pdf} & 模板实现代码 \\ +% \fi +% \bottomrule +% \end{tabular} +% \end{table} +%^^A! \begin{table}[ht] +%^^A! \caption{The main components of \cls{fduthesis}} +%^^A! \label{tab:fduthesis-components} +%^^A! \centering +%^^A! \begin{tabular}{lp{24em}} +%^^A! \toprule +%^^A! \textbf{Files} & \textbf{Descriptions} \\ +%^^A! \midrule +%^^A! \file{fduthesis.cls} & Document class for Chinese thesis. \\ +%^^A! \file{fduthesis-en.cls} & Document class for English thesis.\\ +%^^A! \file{fduthesis.def} & Configuration parameters file +%^^A! for \cls{fduthesis}. Please do \emph{not} modify it. \\ +%^^A! \file{fdudoc.cls} & Document class for user guides. \\ +%^^A! \file{fdulogo.sty} & Fudan University's visual identity. \\ +%^^A! \file{fudan-emblem.pdf} & University emblem. \\ +%^^A! \file{fudan-emblem-new.pdf} & University emblem (revised version). \\ +%^^A! \file{fudan-name.pdf} & Figure of university name. \\ +%^^A! \file{README.md} & The brief introduction. \\ +%^^A! \file{fduthesis.pdf} & User's guide in Chinese. \\ +%^^A! \file{fduthesis-en.pdf} & User's guide in English (this +%^^A! document). \\ +%^^A! \file{fduthesis-code.pdf} & Code implementation. \\ +%^^A! \bottomrule +%^^A! \end{tabular} +%^^A! \end{table} +%^^A! +% +% \section{使用说明} +%^^A! \section{User's guide} +%^^A! +% +% \subsection{基本用法} +%^^A! \subsection{Getting started} +%^^A! +% +% 以下是一份简单的 \TeX{} 文档,它演示了 \cls{fduthesis} 的最基本用法: +%^^A! Here is a minimal \TeX{} file for \cls{fduthesis}: +%^^A+ +% \begin{latexexample}[deletetexcs={\documentclass}, +% moretexcs={\chapter},morekeywords={\documentclass}, +% emph={[2]document}] +% % thesis.tex +% \documentclass{fduthesis} +% \begin{document} +% \chapter{欢迎} +% \section{Welcome to fduthesis!} +% 你好,\LaTeX{}! +% \end{document} +% \end{latexexample} +%^^A- +%^^A! +% +% 按照 \ref{subsec:编译方式}~小节中的方式编译该文档,您应当得到 +% 一篇 5 页的文章。当然,这篇文章的绝大部分都是空白的。 +%^^A! Compile this file under the instructions in +%^^A! subsection~\ref{subsec:compilation}, you will get a 5-page article. +%^^A! Of course, most of it will be blank, as you may predicate. +%^^A! +% +% 英文模板可以用类似的方式使用: +%^^A! The English version can be used in the same way: +%^^A+ +% \begin{latexexample}[deletetexcs={\documentclass}, +% moretexcs={\chapter},morekeywords={\documentclass}, +% emph={[2]document}] +% % thesis-en.tex +% \documentclass{fduthesis-en} +% \begin{document} +% \chapter{Welcome} +% \section{Welcome to fduthesis!} +% Hello, \LaTeX{}! +% \end{document} +% \end{latexexample} +%^^A- +% 英文模板只对正文部分进行了改动,封面、指导小组成员以及声明页仍将 +% 显示为中文。 +%^^A! The differences between English and Chinese version only +%^^A! live in the main body. Thesis cover, instructors list and +%^^A! declaration page are still printed in Chinese. +%^^A! +% +% \subsection{编译方式} \label{subsec:编译方式} +%^^A! \subsection{Compilation} \label{subsec:compilation} +%^^A! +% +% 本模板不支持 \pdfTeX{} 引擎,请使用 \XeLaTeX{} 或 \LuaLaTeX{} +% 编译。推荐使用 \XeLaTeX{}。为了生成正确的目录、脚注以及交叉引用, +% 您至少需要连续编译两次。 +%^^A! \cls{fduthesis} does NOT support \pdfTeX{}. Please use +%^^A! \XeLaTeX{} or \LuaLaTeX{} to compile, and \XeLaTeX{} is +%^^A! recommended. To get the correct table of contents, footnotes +%^^A! and cross-references, you need to compile the source file at +%^^A! least twice. +%^^A! +% +% 以下代码中,假设您的 \TeX{} 源文件名为 \file{thesis.tex}。 +% 使用 \XeLaTeX{} 编译论文,请在命令行中执行 +% \begin{shellexample}[morekeywords={xelatex}] +% xelatex thesis +% xelatex thesis +% \end{shellexample} +% 或使用 \pkg{latexmk}: +% \begin{shellexample}[morekeywords={latexmk},emph={-xelatex}] +% latexmk -xelatex thesis +% \end{shellexample} +%^^A! In the following example, suppose your \TeX{} source file is +%^^A! \file{thesis.tex}. Please execute the following commands if +%^^A! you want to use \XeLaTeX{}: +%^^A! \begin{shellexample}[morekeywords={xelatex}] +%^^A! xelatex thesis +%^^A! xelatex thesis +%^^A! \end{shellexample} +%^^A! You can use \pkg{latexmk} as well: +%^^A! \begin{shellexample}[morekeywords={latexmk},emph={-xelatex}] +%^^A! latexmk -xelatex thesis +%^^A! \end{shellexample} +%^^A! +% +% 使用 \LuaLaTeX{} 编译论文,请在命令行中执行 +% \begin{shellexample}[morekeywords={lualatex}] +% lualatex thesis +% lualatex thesis +% \end{shellexample} +% 或者 +% \begin{shellexample}[morekeywords={latexmk},emph={-lualatex}] +% latexmk -lualatex thesis +% \end{shellexample} +%^^A! \LuaLaTeX{} can be used in a similar way: +%^^A! \begin{shellexample}[morekeywords={lualatex}] +%^^A! lualatex thesis +%^^A! lualatex thesis +%^^A! \end{shellexample} +%^^A! or +%^^A! \begin{shellexample}[morekeywords={latexmk},emph={-lualatex}] +%^^A! latexmk -lualatex thesis +%^^A! \end{shellexample} +%^^A! +% +% \subsection{模板选项} +%^^A! \subsection{Options of the template} +%^^A! +% +% 所谓“模板选项”,指需要在引入文档类的时候指定的选项: +% \begin{latexexample}[deletetexcs={\documentclass}, +% morekeywords={\documentclass}] +% \documentclass(*\oarg{模板选项}*){fduthesis} +% \documentclass(*\oarg{模板选项}*){fduthesis-en} +% \end{latexexample} +%^^A! You can specify some \emph{template options} when loading +%^^A! \cls{fduthesis}: +%^^A! \begin{latexexample}[deletetexcs={\documentclass}, +%^^A! morekeywords={\documentclass}] +%^^A! \documentclass(*\oarg{options}*){fduthesis} +%^^A! \documentclass(*\oarg{options}*){fduthesis-en} +%^^A! \end{latexexample} +%^^A! +% +% 有些模板选项为布尔型,它们只能在 \opt{true} 和 \opt{false} +% 中取值。对于这些选项,\kvopt{\meta{选项}}{true} 中的“|= true|” +% 可以省略。 +%^^A! Some options are \emph{boolean} --- they only take the value +%^^A! \opt{true} or \opt{false}. For these options, you can +%^^A! abbreviate ``\kvopt{\meta{option}}{true}'' simply to +%^^A! ``\opt{\meta{option}}''. +%^^A! +% +%^^A+ +% \begin{function}[added=2018-02-01]{type} +% \begin{fdusyntax}[emph={[1]type}] +% type = (*<doctor|master|(bachelor)>*) +% \end{fdusyntax} +%^^A- +% 选择论文类型。三种选项分别代表博士学位论文、硕士学位论文和本科 +% 毕业论文。 +% \end{function} +%^^A! Choose the type of your thesis. The three options represent +%^^A! doctoral dissertation, master degree thesis and undergraduate +%^^A! thesis, respectively. +%^^A! \end{function} +%^^A! +% +% \begin{function}{oneside,twoside} +% 指明论文的单双面模式,默认为 \opt{twoside}。该选项会影响每章 +% 的开始位置,还会影响页眉样式。 +% \end{function} +%^^A! \begin{function}{oneside,twoside} +%^^A! Specify whether single or double sided output should be +%^^A! generated. \opt{twoside} will be chosen by default. These +%^^A! option will determine where the new chapters begin and how +%^^A! the headers display. The option \opt{twoside} does +%^^A! \emph{not} tell the printer to actually make a two-sided +%^^A! printout. +%^^A! \end{function} +%^^A! +% +% 在双面模式(\opt{twoside})下,按照通常的排版惯例,每章应只从 +% 奇数页(在右)开始;而在单页模式(\opt{oneside})下,则可以从 +% 任意页面开始。本模板中,目录、摘要、符号表等均视作章,也按相同 +% 方式排版。 +%^^A! If choosing \opt{twoside}, chapters will begin at the odd pages +%^^A! (right hand). However, they will begin at arbitrary pages +%^^A! available when choosing \opt{oneside}. Table of contents, +%^^A! abstract and the list of symbols are considered as chapters and +%^^A! processed in the same way. +%^^A! +% +% 双面模式下,正文部分偶数页(在左)的左页眉显示章标题,奇数页 +% (在右)的右页眉显示节标题;前置部分的页眉按同样格式显示,但文字 +% 均为对应标题(如“目录”、“摘要”等)。 +% 而在单面模式下,正文部分则页面不分奇偶,均同时显示左、右页眉, +% 文字分别为章标题和节标题;前置部分只有中间页眉,显示对应标题。 +%^^A! At two-sided mode, left headers on the even pages (left hand) +%^^A! in \emph{main body} will show the title of chapters, while the +%^^A! right headers on the odd pages (right hand) will show the +%^^A! title of sections. Headers in \emph{front matter} have the +%^^A! same style, but they will only show the title as ``Contents'', +%^^A! ``Abstract'', etc. +%^^A! +%^^A! At one-sided mode, both left and right headers on \emph{all} +%^^A! pages in main body will be shown. The text is the title of +%^^A! chapters and sections, respectively. In front matter, there +%^^A! are only middle headers, which show the corresponding titles. +%^^A! +% +% \begin{function}{draft} +% \begin{fdusyntax}[emph={[1]draft}] +% draft = (*<\TFF>*) +% \end{fdusyntax} +% 选择是否开启草稿模式,默认关闭。 +% \end{function} +%^^A! \begin{function}{draft} +%^^A! \begin{fdusyntax}[emph={[1]draft}] +%^^A! draft = (*<\TFF>*) +%^^A! \end{fdusyntax} +%^^A! Enable draft mode. Default off. +%^^A! \end{function} +%^^A! +% +% 草稿模式为全局选项,会影响到很多宏包的工作方式。 +% 开启之后,主要的变化有: +% \begin{itemize} +% \item 把行溢出的盒子显示为黑色方块; +% \item 不实际插入图片,只输出一个占位方框; +% \item 关闭超链接渲染,也不再生成 PDF 书签; +% \item 显示页面边框。 +% \end{itemize} +%^^A! \opt{draft} is a global option and will affect many packages. +%^^A! You may notice the following changes when using \opt{draft}: +%^^A! \begin{itemize} +%^^A! \item Lines with overfull \tn{hbox}'s will be marked with +%^^A! a thick black square on the right margin. +%^^A! \item Will not include graphics files actually, but instead +%^^A! print a box of the size the graphic would take up, as well +%^^A! as the file name. +%^^A! \item Will not make hyperlinks and PDF bookmarks. +%^^A! \item Show the page frames. +%^^A! \end{itemize} +%^^A! +% +% \begin{function}[added=2018-01-31]{config} +% \begin{fdusyntax}[emph={[1]config}] +% config = (*\marg{文件}*) +% \end{fdusyntax} +% 用户配置文件的文件名。默认为空,即不载入用户配置文件。 +% \end{function} +%^^A! \begin{function}[added=2018-01-31]{config} +%^^A! \begin{fdusyntax}[emph={[1]config}] +%^^A! config = (*\marg{file}*) +%^^A! \end{fdusyntax} +%^^A! File name of user profile. Default value is empty, so no +%^^A! profile is loaded automatically. +%^^A! \end{function} +%^^A! +% +% \subsection{参数设置} +%^^A! \subsection{More options} +%^^A! +% +% \begin{function}{\fdusetup} +% \begin{fdusyntax}[morekeywords={\fdusetup}] +% \fdusetup(*\marg{键值列表}*) +% \end{fdusyntax} +% 本模板提供了一系列选项,可由您自行配置。载入文档类之后,以下 +% 所有选项均可通过统一的命令 \cs{fdusetup} 来设置。 +% \end{function} +%^^A! \begin{function}{\fdusetup} +%^^A! \begin{fdusyntax}[morekeywords={\fdusetup}] +%^^A! \fdusetup(*\marg{key-value list}*) +%^^A! \end{fdusyntax} +%^^A! \cls{fduthesis} has provided a number of options, which +%^^A! can be given via the general command \cs{fdusetup}. +%^^A! \end{function} +%^^A! +% +% \cs{fdusetup} 的参数是一组由(英文)逗号隔开的选项列表,列表中的 +% 选项通常是 \kvopt{\meta{key}}{\meta{value}} 的形式。部分选项的 +% \meta{value} 可以省略。对于同一项,后面的设置将会覆盖前面的设置。 +% 在下文的说明中,将用\textbf{粗体}表示默认值。 +%^^A! The argument of \cs{fdusetup} is a set of comma-separated option list. +%^^A! The options usually have the form of \kvopt{\meta{key}}{\meta{value}} +%^^A! and in some cases \meta{value} can be omitted. +%^^A! For the same option, the values given later will override the +%^^A! the previous ones. Default values are indicated in +%^^A! \textbf{boldface} in the following descriptions. +%^^A! +% +% \cs{fdusetup} 采用 \LaTeX3 风格的键值设置,支持不同类型以及多种 +% 层次的选项设定。键值列表中,“|=|”左右的空格不影响设置;但需注意, +% 参数列表中不可以出现空行。 +%^^A! \cs{fdusetup} follows \LaTeX3 key-value style, and different +%^^A! types as well as various levels options are supported. In the +%^^A! key-value list, spaces around ``|=|'' will be trimmed; however, +%^^A! blank lines should never appear in the argument. +%^^A! +% +% 与模板选项相同,布尔型的参数可以省略 \kvopt{\meta{选项}}{true} +% 中的“\kvopt{}{true}”。 +%^^A! Similar with template options, ``\kvopt{\meta{option}}{true}'' +%^^A! can be abbreviated to \opt{\meta{option}} for boolean type. +%^^A! +% +% 另有一些选项包含子选项,如 \opt{style} 和 \opt{info} 等。它们可以 +% 按如下两种等价方式来设定: +%^^A! Some options, such as \opt{style} and \opt{info}, may have +%^^A! sub-options. They can be set by the following two equivalent +%^^A! methods: +%^^A+ +% \begin{latexexample}[morekeywords={\fdusetup}, +% emph={[1]style,cjk-font,font-size,info,title,title*,author,author*,department}] +% \fdusetup{ +% style = {cjk-font = adobe, font-size = -4}, +% info = { +% title = {论动体的电动力学}, +% title* = {On the Electrodynamics of Moving Bodies}, +% author = {阿尔伯特·爱因斯坦}, +% author* = {Albert Einstein}, +% department = {物理学系} +% } +% } +% \end{latexexample} +%^^A- +% 或者 +%^^A! or +%^^A+ +% \begin{latexexample}[morekeywords={\fdusetup}, +% emph={[1]style,cjk-font,font-size,info,title,title*,author,author*,department}] +% \fdusetup{ +% style/cjk-font = adobe, +% style/font-size = -4, +% info/title = {论动体的电动力学}, +% info/title* = {On the Electrodynamics of Moving Bodies}, +% info/author = {阿尔伯特·爱因斯坦}, +% info/author* = {Albert Einstein}, +% info/department = {物理学系} +% } +% \end{latexexample} +%^^A- +%^^A! +% +% 注意 “|/|” 的前后均不可以出现空白字符。 +%^^A! Note that you may \emph{not} put spaces around ``|/|''. +%^^A! +% +% \subsubsection{论文格式} \label{subsubsec:论文格式} +%^^A! \subsubsection{Style and format} \label{subsubsec:style-and-format} +%^^A! +% +% \begin{function}{style} +% \begin{fdusyntax}[emph={[1]style}] +% style = (*\marg{键值列表}*) +% style/(*\meta{key}*) = (*\meta{value}*) +% \end{fdusyntax} +% 该选项包含许多子项目,用于设置论文格式。具体内容见下。 +% \end{function} +%^^A! \begin{function}{style} +%^^A! \begin{fdusyntax}[emph={[1]style}] +%^^A! style = (*\marg{key-value list}*) +%^^A! style/(*\meta{key}*) = (*\meta{value}*) +%^^A! \end{fdusyntax} +%^^A! This general option is for setting the thesis style and format. +%^^A! See the following details. +%^^A! \end{function} +%^^A! +% +%^^A+ +% \begin{function}[updated=2019-03-05]{style/font} +% \begin{fdusyntax}[emph={[1]font}] +% font = (*<garamond|libertinus|lm|palatino|(times)|times*|none>*) +% \end{fdusyntax} +%^^A- +% 设置西文字体(包括数学字体)。具体配置见表~\ref{tab:font}。 +% \end{function} +%^^A! Set fonts (including math fonts). The details can be found in table~\ref{tab:font}. +%^^A! \end{function} +%^^A! +% +% \begin{table}[ht] +% \centering +% \begin{threeparttable} +% \caption{西文字体配置} +% \label{tab:font} +% \small +% \begin{tabular}{ccccc} +% \toprule +% & \textbf{正文字体} & \textbf{无衬线字体} & \textbf{等宽字体} & \textbf{数学字体} \\ +% \midrule +% |garamond| & EB Garamond & Libertinus Sans & LM Mono\tnote{a} & Garamond Math \\ +% |libertinus| & Libertinus Serif & Libertinus Sans & LM Mono & Libertinus Math \\ +% |lm| & LM Roman & LM Sans & LM Mono & LM Math \\ +% |palatino| & TG Pagella\tnote{b} & Libertinus Sans & LM Mono & TG Pagella Math \\ +% |times| & XITS & TG Heros & TG Cursor & XITS Math \\ +% |times*|\tnote{c} & Times New Roman & Arial & Courier New & XITS Math \\ +% \bottomrule +% \end{tabular} +% \begin{tablenotes} +% \item[a] “LM”是 Latin Modern 的缩写。 +% \item[b] “TG”是 TeX Gyre 的缩写。 +% \item[c] 本行中,Times New Roman、Arial 和 Courier New 是商业字体, +% 不包含在 \TeXLive{} 发行版中,但在 Windows 和 macOS 系统上均默认安装。 +% \end{tablenotes} +% \end{threeparttable} +% \end{table} +%^^A! \begin{table}[ht] +%^^A! \begin{threeparttable} +%^^A! \caption{Font configuration} +%^^A! \label{tab:font} +%^^A! \centering +%^^A! \begin{tabular}{ccccc} +%^^A! \toprule +%^^A! & \textbf{Roman} & \textbf{Sans-serif} & \textbf{Monospaced} & \textbf{Math} \\ +%^^A! \midrule +%^^A! |garamond| & EB Garamond & Libertinus Sans & LM Mono\tnote{a} & Garamond Math \\ +%^^A! |libertinus| & Libertinus Serif & Libertinus Sans & LM Mono & Libertinus Math \\ +%^^A! |lm| & LM Roman & LM Sans & LM Mono & LM Math \\ +%^^A! |palatino| & TG Pagella\tnote{b} & Libertinus Sans & LM Mono & TG Pagella Math \\ +%^^A! |times| & XITS & TG Heros & TG Cursor & XITS Math \\ +%^^A! |times*|\tnote{c} & Times New Roman & Arial & Courier New & XITS Math \\ +%^^A! \bottomrule +%^^A! \end{tabular} +%^^A! \begin{tablenotes} +%^^A! \item[a] ``LM'' is the abbreviation of Latin Modern. +%^^A! \item[b] ``TG'' is the abbreviation of TeX Gyre. +%^^A! \item[c] Here, Times New Roman, Arial and Courier New are commercial fonts. They are +%^^A! installed on Windows and macOS by default. +%^^A! \end{tablenotes} +%^^A! \end{threeparttable} +%^^A! \end{table} +% +%^^A+ +% \begin{function}[rEXP,updated=2019-03-05]{style/cjk-font} +% \begin{fdusyntax}[emph={[1]cjk-font}] +% cjk-font = (*<adobe|(fandol)|founder|mac|sinotype|sourcehan|windows|none>*) +% \end{fdusyntax} +%^^A- +% 设置中文字体。具体配置见表~\ref{tab:cjk-font}。 +% \end{function} +%^^A! Set CJK (Chinese, Japanese and Korean) fonts. The details can be found in +%^^A! table~\ref{tab:cjk-font}. +%^^A! \end{function} +%^^A! +% +% \begin{table}[ht] +% \caption{中文字体配置} +% \label{tab:cjk-font} +% \centering +% \small +% \begin{tabular}{ccccc} +% \toprule +% & \textbf{正文字体(宋体)} & \textbf{无衬线字体(黑体)} & \textbf{等宽字体(仿宋)} & \textbf{楷体} \\ +% \midrule +% |adobe| & Adobe 宋体 & Adobe 黑体 & Adobe 仿宋 & Adobe 楷体 \\ +% |fandol| & Fandol 宋体 & Fandol 黑体 & Fandol 仿宋 & Fandol 楷体 \\ +% |founder| & 方正书宋 & 方正黑体 & 方正仿宋 & 方正楷体 \\ +% |mac| & (华文)宋体-简 & (华文)黑体-简 & 华文仿宋 & (华文)楷体-简 \\ +% |sinotype| & 华文宋体 & 华文黑体 & 华文仿宋 & 华文楷体 \\ +% |sourcehan| & 思源宋体 & 思源黑体 & --- & --- \\ +% |windows| & (中易)宋体 & (中易)黑体 & (中易)仿宋 & (中易)楷体 \\ +% \bottomrule +% \end{tabular} +% \end{table} +%^^A! \begin{table}[ht] +%^^A! \caption{CJK font configuration} +%^^A! \label{tab:cjk-font} +%^^A! \centering +%^^A! \begin{tabular}{cccc} +%^^A! \toprule +%^^A! & \textbf{Roman (song)} & \textbf{Sans-serif (hei)} & \textbf{Monospaced (fang)} \\ +%^^A! \midrule +%^^A! |adobe| & Adobe Song Std & Adobe Heiti Std & Adobe Fangsong Std \\ +%^^A! |fandol| & FandolSong & FandolHei & FandolFang \\ +%^^A! |founder| & FZShuSong-Z01 & FZHei-B01 & FZFangSong-Z02 \\ +%^^A! |mac| & Songti SC & Heiti SC & STFangsong \\ +%^^A! |sinotype| & STSong & STHeiti & STFangsong \\ +%^^A! |sourcehan| & Source Han Serif SC & Source Han Sans SC & --- \\ +%^^A! |windows| & SimSun & SimHei & FangSong \\ +%^^A! \bottomrule +%^^A! \end{tabular} +%^^A! \end{table} +%^^A! +% +% 启用 \kvopt{font}{none} 或 \kvopt{cjk-font}{none} 之后,模板将关闭 +% 默认西文 / 中文字体设置。此时,您需要自行使用 \cs{setmainfont}、 +% \cs{setCJKmainfont}、\cs{setmathfont} 等命令来配置字体。 +%^^A! When you choose \kvopt{font}{none} or \kvopt{cjk-font}{none}, +%^^A! \cls{fduthesis} will disable the default western/CJK font +%^^A! settings. You may use \cs{setmainfont}, \cs{setCJKmainfont} +%^^A! and \cs{set\-math\-font}, etc.\ to configure the fonts manually. +%^^A! +% +%^^A+ +% \begin{function}{style/font-size} +% \begin{fdusyntax}[emph={[1]font-size}] +% font-size = (*<(-4)|5>*) +% \end{fdusyntax} +%^^A- +% 设置论文的基础字号。 +% \end{function} +%^^A! Specify the basic font size in your thesis. +%^^A! \end{function} +%^^A! +% +%^^A+ +% \begin{function}[rEXP,updated=2017-10-14]{style/fullwidth-stop} +% \begin{fdusyntax}[emph={[1]fullwidth-stop}] +% fullwidth-stop = (*<catcode|mapping|(false)>*) +% \end{fdusyntax} +%^^A- +% 选择是否把全角实心句点\FSFW 作为默认的句号形状。 +% 这种句号一般用于科技类文章,以避免与下标“$_o$”或“$_0$”混淆。 +% \end{function} +%^^A! Let full-width full stop ``\FSFW'' as the default full stop. +%^^A! Generally, this punctuation is used for scientific articles, +%^^A! where ``\FSID'' is easily to be confused with subscript +%^^A! ``$_o$'' or ``$_0$''. +%^^A! \end{function} +%^^A! +% +% 选择 \kvopt{fullwidth-stop}{catcode} 或 \opt{mapping} 后,都会实现上述效果。 +% 有所不同的是,在选择 \opt{catcode} 后,只有\emph{显式的}\FSID 会被替换 +% 为\FSFW;但在选择 \opt{mapping} 后,\emph{所有的}\FSID 都会被替换。例如, +% 如果您用宏保存了一些含有\FSID 的文字,那么在选择 \opt{catcode} 时,其中 +% 的\FSID 不会将被替换为\FSFW。 +%^^A! If you choose \kvopt{fullwidth-stop}{catcode}, only +%^^A! \emph{explicit} ``\FSID'' will be replaced by ``\FSFW''; when +%^^A! choosing \kvopt{fullwidth-stop}{mapping}, however, \emph{all} +%^^A! the ``\FSID'' will be replaced. +%^^A! +% +% 选项 \kvopt{fullwidth-stop}{mapping} 只在 \XeTeX{} 下有效。使用 +% \LuaTeX{} 编译时,该选项相当于 \kvopt{fullwidth-stop}{catcode}。 +%^^A! \opt{mapping} is valid only under \XeTeX{}. When compiling +%^^A! with \LuaTeX{}, it is equivalent to \opt{catcode}. +%^^A! +% +% 如果您在选择 \kvopt{fullwidth-stop}{mapping} 后仍需要临时显示\FSID, +% 可以按如下方法操作: +% \begin{latexexample}[moretexcs={\CJKfontspec},emph={[1]Mapping}] +% % 请使用 XeTeX 编译 +% % 外侧的花括号表示分组 +% 这是一个句号{\CJKfontspec{(*\meta{字体名}*)}[Mapping=full-stop]。} +% \end{latexexample} +%^^A! If you want to display ``\FSID'' temporarily after setting +%^^A! \kvopt{fullwidth-stop}{mapping}, the following code snippet +%^^A! will be helpful: +%^^A! \begin{latexexample}[moretexcs={\CJKfontspec},emph={[1]Mapping}] +%^^A! % Compiled with XeTeX +%^^A! % The outside braces is used for group +%^^A! 这是一个句号{\CJKfontspec{(*\meta{font name}*)}[Mapping=full-stop]。} +%^^A! \end{latexexample} +%^^A! +% +% \begin{function}{style/footnote-style} +%^^A 这里奇怪的东西是用来控制对齐的。fdusyntax 会吃掉开头的几个 +%^^A 空格,因此这里用 . 来占位。 +% \begin{fdusyntax}[emph={[1]footnote-style}] +% footnote-style = (*<plain|\\ +% ......\mbox{}~~~~~~~~~~~~~~~~~libertinus|libertinus*|libertinus-sans|\\ +% ......\mbox{}~~~~~~~~~~~~~~~~~pifont|pifont*|pifont-sans|pifont-sans*|\\ +% ......\mbox{}~~~~~~~~~~~~~~~~~xits|xits-sans|xits-sans*>*) +% \end{fdusyntax} +% 设置脚注编号样式。西文字体设置会影响其默认取值(见 +% 表~\ref{tab:footnote-font})。因此,要使得该选项生效,需将其 +% 放置在 \opt{font} 选项之后。带有 |sans| 的为相应的无衬线字体 +% 版本;带有 |*| 的为阴文样式(即黑底白字)。 +% \end{function} +%^^A! \begin{function}{style/footnote-style} +%^^A! \begin{fdusyntax}[emph={[1]footnote-style}] +%^^A! footnote-style = (*<plain|\\ +%^^A! ....\mbox{}~~~~~~~~~~~~~~~~~libertinus|libertinus*|libertinus-sans|\\ +%^^A! ....\mbox{}~~~~~~~~~~~~~~~~~pifont|pifont*|pifont-sans|pifont-sans*|\\ +%^^A! ....\mbox{}~~~~~~~~~~~~~~~~~xits|xits-sans|xits-sans*>*) +%^^A! \end{fdusyntax} +%^^A! Set the style of footnote numbers. Note that western fonts +%^^A! will affect its default value (see table~\ref{tab:footnote-font}), +%^^A! so you may put it after |font| option. The one with |sans| +%^^A! is for the corresponding sans-serif version, while |*| +%^^A! for white on black version. +%^^A! \end{function} +%^^A! +% +% \begin{table}[ht] +% \caption{西文字体与脚注编号样式默认值的对应关系} +% \label{tab:footnote-font} +% \centering +% \small +% \begin{tabular}{ccccc} +% \toprule +% \textbf{西文字体设置} & +% |libertinus| & |lm| & |palatino| & |times| \\ +% \midrule +% \textbf{脚注编号样式默认值} & +% |libertinus| & |pifont| & |pifont| & |xits| \\ +% \bottomrule +% \end{tabular} +% \end{table} +%^^A! \begin{table}[ht] +%^^A! \caption{Relationship between option \opt{font} and the +%^^A! default value of \opt{footnote-style}} +%^^A! \label{tab:footnote-font} +%^^A! \centering +%^^A! \begin{tabular}{ccccc} +%^^A! \toprule +%^^A! \textbf{Western fonts settings} & +%^^A! |libertinus| & |lm| & |palatino| & |times| \\ +%^^A! \midrule +%^^A! \textbf{Default value of footnote number style} & +%^^A! |libertinus| & |pifont| & |pifont| & |xits| \\ +%^^A! \bottomrule +%^^A! \end{tabular} +%^^A! \end{table} +%^^A! +% +%^^A+ +% \begin{function}[added=2017-08-13]{style/hyperlink} +% \begin{fdusyntax}[emph={[1]hyperlink}] +% hyperlink = (*<border|(color)|none>*) +% \end{fdusyntax} +%^^A- +% 设置超链接样式。\opt{border} 表示在超链接四周绘制方框; +% \opt{color} 表示用彩色显示超链接;\opt{none} 表示没有特殊装饰, +% 可用于生成最终的打印版文稿。 +% \end{function} +%^^A! Set the style of hyperlinks. \opt{border} draws borders around +%^^A! hyperlinks; \opt{color} displays hyperlinks in colorful text; +%^^A! \opt{none} leads to plain text, which is useful when printing +%^^A! the final document. +%^^A! \end{function} +%^^A! +% +% \begin{function}[added=2017-08-13,updated=2021-12-27]{style/hyperlink-color} +% \begin{fdusyntax}[emph={[1]hyperlink-color}] +% hyperlink-color = (*<(default)|classic|material|graylevel|prl>*) +% \end{fdusyntax} +% 设置超链接颜色。该选项在 \kvopt{hyperlink}{none} 时无效。 +% 各选项所代表的颜色见表~\ref{tab:hyperlink-color}。 +% \end{function} +%^^A! \begin{function}[added=2017-08-13,updated=2021-12-27]{style/hyperlink-color} +%^^A! \begin{fdusyntax}[emph={[1]hyperlink-color}] +%^^A! hyperlink-color = (*<(default)|classic|material|graylevel|prl>*) +%^^A! \end{fdusyntax} +%^^A! Set the color of hyperlinks. It is invalid if +%^^A! \kvopt{hyperlink}{none}. The related colors can be found +%^^A! in table~\ref{tab:hyperlink-color}. +%^^A! \end{function} +%^^A! +% +%^^A+ +% \begin{table}[ht] +% \centering +% \small +%^^A- +% \newcommand\linkcolorexam[3]{^^A +% {\small 图~\textcolor[HTML]{#1}{1-2}, +% (\textcolor[HTML]{#1}{3.4})~式} & +% {\small \textcolor[HTML]{#2}{\texttt{https://g.cn}}} & +% {\small 文献~[\textcolor[HTML]{#3}{1}], +% (\textcolor[HTML]{#3}{Knuth~1986})}} +%^^A! \newcommand\linkcolorexam[3]{% +%^^A! {\small Fig.~\textcolor[HTML]{#1}{1-2}, +%^^A! Eq.~(\textcolor[HTML]{#1}{3.4})} & +%^^A! {\small \textcolor[HTML]{#2}{\texttt{http://g.cn}}} & +%^^A! {\small Ref.~[\textcolor[HTML]{#3}{1}], +%^^A! (\textcolor[HTML]{#3}{Knuth~1986})}} +% \begin{threeparttable} +% \caption{预定义的超链接颜色方案} +% \label{tab:hyperlink-color} +%^^A! \begin{threeparttable} +%^^A! \caption{Pre-defined hyperlink color schemes} +%^^A! \label{tab:hyperlink-color} +% \begin{tabular}{c*{3}{>{\hspace{0.2cm}}c<{\hspace{0.2cm}}}} +% \toprule +% \textbf{选项} & \textbf{链接} & \textbf{URL} & \textbf{引用} \\ +%^^A! \begin{tabular}{c*{3}{>{\hspace{0.2cm}}c<{\hspace{0.2cm}}}} +%^^A! \toprule +%^^A! \textbf{Options} & \textbf{Cross references} & \textbf{URL} & \textbf{Citation} \\ +%^^A+ +% \midrule +% \opt{default} & \linkcolorexam{990000}{0000B2}{007F00} \\ +% \opt{classic} & \linkcolorexam{FF0000}{0000FF}{00FF00} \\ +% \opt{material}\tnote{a} & \linkcolorexam{E91E63}{009688}{4CAF50} \\ +% \opt{graylevel}\tnote{a} & \linkcolorexam{616161}{616161}{616161} \\ +% \opt{prl}\tnote{b} & \linkcolorexam{2D3092}{2D3092}{2D3092} \\ +% \bottomrule +% \end{tabular} +% \begin{tablenotes} +%^^A- +% \item[a] 取自 Material 色彩方案 +% (见 \url{https://material.io/guidelines/style/color.html})。 +% \item[b] \textit{Physical Review Letter} 杂志配色。 +%^^A! \item[a] Material Design color palette +%^^A! (See \url{https://material.io/guidelines/style/color.html}). +%^^A! \item[b] \textit{Physical Review Letter} magazine. +%^^A+ +% \end{tablenotes} +% \end{threeparttable} +% \end{table} +%^^A- +%^^A! +% +%^^A+ +% \begin{function}[added=2018-01-25]{style/bib-backend} +% \begin{fdusyntax}[emph={[1]bib-backend}] +% bib-backend = (*<bibtex|biblatex>*) +% \end{fdusyntax} +%^^A- +% 选择参考文献的支持方式。选择 \opt{bibtex} 后,将使用 \BibTeX{} +% 处理文献,样式由 \pkg{natbib} 宏包负责;选择 \opt{biblatex} 后, +% 将使用 \biber{} 处理文献,样式则由 \pkg{biblatex} 宏包负责。 +% \end{function} +%^^A! Specify the backend or driver of bibliography processing. +%^^A! \BibTeX{} and \pkg{natbib} package will be used if you choose +%^^A! \opt{bibtex}, while \biber{} and \pkg{biblatex} will be used +%^^A! if you choose \opt{biblatex}. +%^^A! \end{function} +%^^A! +% +% \begin{function}[added=2017-10-28,updated=2018-01-25]{style/bib-style} +% \begin{fdusyntax}[emph={[1]bib-style}] +% bib-style = (*<author-year|(numerical)|\meta{其他样式}>*) +% \end{fdusyntax} +% 设置参考文献样式。\opt{author-year} 和 \opt{numerical} 分别对应 +% 国家标准 GB/T 7714--2015 \cite{gb-t-7714-2015} 中的著者—出版年制和 +% 顺序编码制。选择 \meta{其他样式} 时,如果 \kvopt{bib-backend}{bibtex}, +% 需保证相应的 \file{.bst} 格式文件能被调用;而如果 +% \kvopt{bib-backend}{biblatex},则需保证相应的 \file{.bbx} 格式文件 +% 能被调用。 +% \end{function} +%^^A! \begin{function}[added=2017-10-28,updated=2018-01-25]{style/bib-style} +%^^A! \begin{fdusyntax}[emph={[1]bib-style}] +%^^A! bib-style = (*<author-year|(numerical)|\meta{other style}>*) +%^^A! \end{fdusyntax} +%^^A! Set the style of bibliography. \opt{author-year} and +%^^A! \opt{numerical} will follow the standard GB/T 7714--2015. +%^^A! By setting \kvopt{bib-style}{\meta{other style}}, you can use +%^^A! other bibliography style (\file{.bst} file for +%^^A! \kvopt{bib-backend}{bibtex} and \file{.bbx} file for +%^^A! \kvopt{bib-backend}{biblatex}). Suffix is not needed. +%^^A! \end{function} +%^^A! +% +% \begin{function}[added=2018-01-25]{style/cite-style} +% \begin{fdusyntax}[emph={[1]cite-style}] +% cite-style = (*\marg{引用样式}*) +% \end{fdusyntax} +% 选择引用格式。默认为空,即与参考文献样式(著者—出版年制或顺序 +% 编码制)保持一致。如果手动填写,需保证相应的 \file{.cbx} 格式文件 +% 能被调用。该选项在 \kvopt{bib-backend}{bibtex} 时无效。 +% \end{function} +%^^A! \begin{function}[added=2018-01-25]{style/cite-style} +%^^A! \begin{fdusyntax}[emph={[1]cite-style}] +%^^A! cite-style = (*\marg{style}*) +%^^A! \end{fdusyntax} +%^^A! Select citation style. Default value is empty, which means +%^^A! the citation style will follow your bibliography style +%^^A! (author-year or numeric). If you want change the citation +%^^A! style, the corresponding \file{.cbx} file must be available. +%^^A! This option is invalid when \kvopt{bib-backend}{bibtex}. +%^^A! \end{function} +%^^A! +% +% \begin{function}[added=2018-01-25]{style/bib-resource} +% \begin{fdusyntax}[emph={[1]bib-resource}] +% bib-resource = (*\marg{文件}*) +% \end{fdusyntax} +% 参考文献数据源。可以是单个文件,也可以是用英文逗号隔开的一组文件。 +% 如果 \kvopt{bib-backend}{biblatex},则必须明确给出 \file{.bib} +% 后缀名。 +% \end{function} +%^^A! \begin{function}[added=2018-01-25]{style/bib-resource} +%^^A! \begin{fdusyntax}[emph={[1]bib-resource}] +%^^A! bib-resource = (*\marg{bib file\symbol{"28}s\symbol{"29}}*) +%^^A! \end{fdusyntax} +%^^A! Specify the bibliography database (usually in \file{.bib} +%^^A! format). If using more than one files, the file names should +%^^A! be separated with comma. When \kvopt{bib-backend}{biblatex}, +%^^A! you must type in the ``\file{.bib}'' suffix. +%^^A! \end{function} +%^^A! +% +% \begin{function}[added=2017-08-10]{style/logo} +% \begin{fdusyntax}[emph={[1]logo}] +% logo = (*\marg{文件}*) +% \end{fdusyntax} +% 封面中校名图片的文件名。默认值为 \file{fudan-name.pdf}。 +% \end{function} +%^^A! \begin{function}[added=2017-08-10]{style/logo} +%^^A! \begin{fdusyntax}[emph={[1]logo}] +%^^A! logo = (*\marg{file}*) +%^^A! \end{fdusyntax} +%^^A! File name of the logo in thesis cover. Default value is +%^^A! \file{fudan-name.pdf}. +%^^A! \end{function} +%^^A! +% +% \begin{function}[added=2017-08-10]{style/logo-size} +% \begin{fdusyntax}[emph={[1]logo-size}] +% logo-size = (*\marg{宽度}*) +% logo-size = {(*\meta{宽度}*), (*\meta{高度}*)} +% \end{fdusyntax} +% 校名图片的大小。默认仅指定了宽度,为 |0.5\textwidth|\/。 +% 如果仅需指定高度,可在 \meta{宽度} 处填入一个空的分组 |{}|。 +% \end{function} +%^^A! \begin{function}[added=2017-08-10]{style/logo-size} +%^^A! \begin{fdusyntax}[emph={[1]logo-size}] +%^^A! logo-size = (*\marg{width}*) +%^^A! logo-size = {(*\meta{width}*), (*\meta{height}*)} +%^^A! \end{fdusyntax} +%^^A! Size of the logo. By default, only width is set to +%^^A! |0.5\textwidth|. To set height only, you can put an +%^^A! empty group ``|{}|'' at \meta{width}. +%^^A! \end{function} +%^^A! +% +%^^A+ +% \begin{function}[added=2017-07-06]{style/auto-make-cover} +% \begin{fdusyntax}[emph={[1]auto-make-cover}] +% auto-make-cover = (*<\TTF>*) +% \end{fdusyntax} +%^^A- +% 是否自动生成论文封面(封一)、指导小组成员名单(封二)和 +% 声明页(封三)。封面中的各项信息,可通过 \cs{fdusetup} 录入, +% 具体请参阅 \ref{subsubsec:信息录入}~节。 +% \end{function} +%^^A! Whether generate thesis cover, list of instructors (inside +%^^A! front cover) and declaration page (inside back cover) +%^^A! automatically. Entries in the cover can be specified also +%^^A! via \cs{fdusetup}, and you can find more details in +%^^A! subsubsection~\ref{subsubsec:information}. +%^^A! \end{function} +%^^A! +% +% \begin{function}[added=2021-09-21]{style/declaration-page} +% \begin{fdusyntax}[emph={[1]declaration-page}] +% declaration-page = (*\marg{文件}*) +% \end{fdusyntax} +% 插入扫描版的声明页 PDF 文档。如果为空(默认),则使用模板预定义的声明页。 +% \end{function} +%^^A! \begin{function}[added=2021-09-21]{style/declaration-page} +%^^A! \begin{fdusyntax}[emph={[1]declaration-page}] +%^^A! declaration-page = (*\marg{file}*) +%^^A! \end{fdusyntax} +%^^A! Insert the scanned declaration page PDF file. If empty (default), +%^^A! then the pre-defined declaration page will be inserted. +%^^A! \end{function} +%^^A! +% +% \begin{function}{\makecoveri,\makecoverii,\makecoveriii} +% 用于手动生成论文封面、指导小组成员名单和声明页。这几个命令不能 +% 确保页码的正确编排,因此除非必要,您应当始终使用自动生成的封面。 +% \end{function} +%^^A! \begin{function}{\makecoveri,\makecoverii,\makecoveriii} +%^^A! For generating thesis cover, list of instructors and +%^^A! declaration page manually. These commands cannot guarantee +%^^A! the correct page numbers, hence you should always use the +%^^A! auto-generated thesis cover unless necessary. +%^^A! \end{function} +%^^A! +% +% \subsubsection{信息录入} \label{subsubsec:信息录入} +%^^A! \subsubsection{Personal information} \label{subsubsec:information} +%^^A! +% +% \begin{function}{info} +% \begin{fdusyntax}[emph={[1]info}] +% info = (*\marg{键值列表}*) +% info/(*\meta{key}*) = (*\meta{value}*) +% \end{fdusyntax} +% 该选项包含许多子项目,用于录入论文信息。具体内容见下。以下带“|*|” +% 的项目表示对应的英文字段。 +% \end{function} +%^^A! \begin{function}{info} +%^^A! \begin{fdusyntax}[emph={[1]info}] +%^^A! info = (*\marg{key-value list}*) +%^^A! info/(*\meta{key}*) = (*\meta{value}*) +%^^A! \end{fdusyntax} +%^^A! This general option is for entering your personal information. +%^^A! See the following details. Note that options with ``|*|'' are +%^^A! the corresponding English items. +%^^A! \end{function} +%^^A! +% +%^^A+ +% \begin{function}[added=2018-02-01,updated=2019-03-12]{info/degree} +% \begin{fdusyntax}[emph={[1]degree}] +% degree = (*<(academic)|professional>*) +% \end{fdusyntax} +%^^A- +% 学位类型,仅适用于博士和硕士学位论文。\opt{academic} 和 \opt{professional} +% 分别表示学术学位和专业学位。 +% \end{function} +%^^A! Degree type. This option can only be used in master degree +%^^A! thesis. +%^^A! \end{function} +%^^A! +% +% \begin{function}{info/title,info/title*} +% \begin{fdusyntax}[emph={[1]title,title*}] +% title = (*\marg{中文标题}*) +% title* = (*\marg{英文标题}*) +% \end{fdusyntax} +% 论文标题。默认会在约 20 个汉字字宽处强制断行,但为了语义的 +% 连贯以及排版的美观,如果您的标题长于一行,建议使用“|\\|” +% 手动断行。 +% \end{function} +%^^A! \begin{function}{info/title,info/title*} +%^^A! \begin{fdusyntax}[emph={[1]title,title*}] +%^^A! title = (*\marg{title in Chinese}*) +%^^A! title* = (*\marg{title in English}*) +%^^A! \end{fdusyntax} +%^^A! Title of your thesis. The line width is about \qty{30}{em} by +%^^A! default, but you may break it with |\\| manually. +%^^A! \end{function} +%^^A! +% +% \begin{function}{info/author,info/author*} +% \begin{fdusyntax}[emph={[1]author,author*}] +% author = (*\marg{姓名}*) +% author* = (*\marg{英文姓名(或拼音)}*) +% \end{fdusyntax} +% 作者姓名。 +% \end{function} +%^^A! \begin{function}{info/author,info/author*} +%^^A! \begin{fdusyntax}[emph={[1]author,author*}] +%^^A! author = (*\marg{name in Chinese}*) +%^^A! author* = (*\marg{name in English \lparen or Pinyin\rparen}*) +%^^A! \end{fdusyntax} +%^^A! Author's name. +%^^A! \end{function} +%^^A! +% +% \begin{function}{info/supervisor} +% \begin{fdusyntax}[emph={[1]supervisor}] +% supervisor = (*\marg{姓名}*) +% \end{fdusyntax} +% 导师姓名。 +% \end{function} +%^^A! \begin{function}{info/supervisor} +%^^A! \begin{fdusyntax}[emph={[1]supervisor}] +%^^A! supervisor = (*\marg{name}*) +%^^A! \end{fdusyntax} +%^^A! Supervisor's name. +%^^A! \end{function} +%^^A! +% +% \begin{function}{info/department} +% \begin{fdusyntax}[emph={[1]department}] +% department = (*\marg{名称}*) +% \end{fdusyntax} +% 院系名称。 +% \end{function} +%^^A! \begin{function}{info/department} +%^^A! \begin{fdusyntax}[emph={[1]department}] +%^^A! department = (*\marg{name}*) +%^^A! \end{fdusyntax} +%^^A! Name of the department. +%^^A! \end{function} +%^^A! +% +% \begin{function}{info/major} +% \begin{fdusyntax}[emph={[1]major}] +% major = (*\marg{名称}*) +% \end{fdusyntax} +% 专业名称。 +% \end{function} +%^^A! \begin{function}{info/major} +%^^A! \begin{fdusyntax}[emph={[1]major}] +%^^A! major = (*\marg{name}*) +%^^A! \end{fdusyntax} +%^^A! Name of the major. +%^^A! \end{function} +%^^A! +% +% \begin{function}{info/student-id} +% \begin{fdusyntax}[emph={[1]student-id}] +% student-id = (*\marg{数字}*) +% \end{fdusyntax} +% 作者学号。 +% \end{function} +%^^A! \begin{function}{info/student-id} +%^^A! \begin{fdusyntax}[emph={[1]student-id}] +%^^A! student-id = (*\marg{number}*) +%^^A! \end{fdusyntax} +%^^A! Author's student ID. +%^^A! \end{function} +%^^A! +% +% 复旦大学学号共 11 位,前两位为入学年份,之后一位为学生类型 +% 代码(博士生为 1,硕士生为 2,本科生为 3),接下来的五位为 +% 专业代码,最后三位为顺序号。 +%^^A! In Fudan University, student ID has 11 digits. The first two +%^^A! are the year of attendance; next one represents the student's +%^^A! type (1 for doctor, 2 for master and 3 for bachelor); the +%^^A! following five digits are major ID while the last three are +%^^A! serial number. +%^^A! +% +% \begin{function}{info/school-id} +% \begin{fdusyntax}[emph={[1]school-id}] +% school-id = (*\marg{数字}*) +% \end{fdusyntax} +% 学校代码。默认值为 10246(这是复旦大学的学校代码)。 +% \end{function} +%^^A! \begin{function}{info/school-id} +%^^A! \begin{fdusyntax}[emph={[1]school-id}] +%^^A! school-id = (*\marg{number}*) +%^^A! \end{fdusyntax} +%^^A! School ID. Default value is 10246 (school ID of Fudan University). +%^^A! \end{function} +%^^A! +% +% \begin{function}{info/date} +% \begin{fdusyntax}[emph={[1]date}] +% date = (*\marg{日期}*) +% \end{fdusyntax} +% 论文完成日期。默认值为文档编译日期(\tn{today})。 +% \end{function} +%^^A! \begin{function}{info/date} +%^^A! \begin{fdusyntax}[emph={[1]date}] +%^^A! date = (*\marg{date}*) +%^^A! \end{fdusyntax} +%^^A! Finish date of your thesis. Default value is the compilation +%^^A! date (\tn{today}). +%^^A! \end{function} +%^^A! +% +%^^A+ +% \begin{function}[added=2017-07-04]{info/secret-level} +% \begin{fdusyntax}[emph={[1]secret-level}] +% secret-level = (*<(none)|i|ii|iii>*) +% \end{fdusyntax} +%^^A- +% 密级。\opt{i}、\opt{ii}、\opt{iii} 分别表示秘密、机密、绝密; +% \opt{none} 表示论文不涉密,即不显示密级与保密年限。 +% \end{function} +%^^A! Secret level. \opt{i}, \opt{ii} and \opt{iii} means +%^^A! ``秘密'' (secret), ``机密'' (confidential) and ``绝密'' +%^^A! (top secret) respectively. \opt{none} means your thesis is +%^^A! not secret-related and secret level and year will not be +%^^A! shown. +%^^A! \end{function} +%^^A! +% +% \begin{function}[added=2017-07-04]{info/secret-year} +% \begin{fdusyntax}[emph={[1]secret-year}] +% secret-year = (*\marg{年限}*) +% \end{fdusyntax} +% 保密年限。建议您使用中文,如“五年”。该选项在设置 +% \kvopt{secret-level}{none} 时无效。 +% \end{function} +%^^A! \begin{function}[added=2017-07-04]{info/secret-year} +%^^A! \begin{fdusyntax}[emph={[1]secret-year}] +%^^A! secret-year = (*\marg{year}*) +%^^A! \end{fdusyntax} +%^^A! Secret year. It's recommended to use Chinese word as ``五年'' +%^^A! (5 years) here. This option is invalid if you have set +%^^A! \kvopt{secret-level}{none}. +%^^A! \end{function} +%^^A! +% +% \begin{function}{info/instructors} +% \begin{fdusyntax}[emph={[1]instructors}] +% instructors = (*\marg{成员 1, 成员 2, ...}*) +% \end{fdusyntax} +% 指导小组成员。各成员之间需使用英文逗号隔开。为防止歧义, +% 可以用分组括号“|{...}|”把各成员字段括起来。 +% \end{function} +%^^A! \begin{function}{info/instructors} +%^^A! \begin{fdusyntax}[emph={[1]instructors}] +%^^A! instructors = (*\marg{member 1, member 2, ...}*) +%^^A! \end{fdusyntax} +%^^A! Instructors' name. Each name should be separated with +%^^A! comma. To disambiguate, you may put text containing comma +%^^A! into a group ``|{...}|''. +%^^A! \end{function} +%^^A! +% +% \begin{function}{info/keywords,info/keywords*} +% \begin{fdusyntax}[emph={[1]keywords,keywords*}] +% keywords = (*\marg{中文关键字}*) +% keywords* = (*\marg{英文关键字}*) +% \end{fdusyntax} +% 关键字列表。各关键字之间需使用英文逗号隔开。为防止歧义, +% 可以用分组括号“|{...}|”把各字段括起来。 +% \end{function} +%^^A! \begin{function}{info/keywords,info/keywords*} +%^^A! \begin{fdusyntax}[emph={[1]keywords,keywords*}] +%^^A! keywords = (*\marg{keywords in Chinese}*) +%^^A! keywords* = (*\marg{keywords in English}*) +%^^A! \end{fdusyntax} +%^^A! Keywords list. Each keyword should be separated with comma. +%^^A! To disambiguate, you may put text containing comma into a +%^^A! group ``|{...}|''. +%^^A! \end{function} +%^^A! +% +% \begin{function}{info/clc} +% \begin{fdusyntax}[emph={[1]clc}] +% clc = (*\marg{分类号}*) +% \end{fdusyntax} +% 中图分类号(CLC)。 +% \end{function} +%^^A! \begin{function}{info/clc} +%^^A! \begin{fdusyntax}[emph={[1]clc}] +%^^A! clc = (*\marg{classification codes}*) +%^^A! \end{fdusyntax} +%^^A! Chinese Library Classification (CLC). +%^^A! \end{function} +%^^A! +% +% \begin{function}[added=2021-09-16]{info/jel} +% \begin{fdusyntax}[emph={[1]jel}] +% jel = (*\marg{分类号}*) +% \end{fdusyntax} +% JEL 分类号,仅适用于部分院系。当被指定时,英文摘要中将仅显示 JEL +% 分类号,而不再显示中图分类号。 +% \end{function} +%^^A! \begin{function}[added=2021-09-16]{info/jel} +%^^A! \begin{fdusyntax}[emph={[1]jel}] +%^^A! jel = (*\marg{classification codes}*) +%^^A! \end{fdusyntax} +%^^A! \textit{Journal of Economic Literature} (JEL) Classification +%^^A! Code. It's only mandatory for some departments. When specified, +%^^A! CLC code in the English abstract will be replaced by it. +%^^A! \end{function} +%^^A! +% +% \subsection{正文编写} +%^^A! \subsection{Writing your thesis} +%^^A! +% +% \begin{quotation} +% 喬孟符(吉)博學多能,以樂府稱。嘗云:「作樂府亦有法, +% 曰\CJKunderdot{鳳頭、豬肚、豹尾}六字是也。」大概起要美麗,中要浩蕩, +% 結要響亮。尤貴在首尾貫穿,意思清新。苟能若是,斯可以言樂府矣。 +% \end{quotation} +% \hfill ^^^^2e3a陶宗儀《南村輟耕錄·作今樂府法》 ^^A ^^^^2e3a = 破折号 +% +% \subsubsection{凤头} +%^^A! \subsubsection{Front matter} +%^^A! +% +% \begin{function}{\frontmatter} +% 声明前置部分开始。 +% \end{function} +%^^A! \begin{function}{\frontmatter} +%^^A! Declare the beginning of front matter. +%^^A! \end{function} +%^^A! +% +% 在本模板中,前置部分包含目录、中英文摘要以及符号表等。 +% 前置部分的页码采用小写罗马字母,并且与正文分开计数。 +%^^A! Front matter contains table of contents, abstracts and notation +%^^A! list. The page numbers in front matter will be shown in +%^^A! lowercase Roman numerals, and will be counted separately with +%^^A! main matter. +%^^A! +% +% \begin{function}{\tableofcontents,\listoffigures,\listoftables} +% 生成目录。为了生成完整、正确的目录,您至少需要编译\emph{两次}。对于图表 +% 较多的论文,也可以使用 \cs{listoffigures} 和 \cs{listoftables} 生成单独的 +% 插图、表格目录。 +% \end{function} +%^^A! \begin{function}{\tableofcontents} +%^^A! Generate the table of contents (TOC). You need to compile +%^^A! the source file at least \emph{twice} to get the correct TOC. +%^^A! If your thesis contains many figures or tables, you may also +%^^A! use \cs{listoffigures} or \cs{listoftables} to generate a list +%^^A! of them. +%^^A! \end{function} +%^^A! +% +%^^A TODO: \DescribeEnv{abstract} +%^^A TODO: \DescribeEnv{abstract*} +% \begin{function}{abstract} +% \begin{fdusyntax}[emph={[2]abstract}] +% % 中文论文模板 (fduthesis) % 英文论文模板 (fduthesis-en) +% \begin{abstract} \begin{abstract} +% (*\meta{中文摘要} \hspace{3.52cm} \meta{英文摘要}*) +% \end{abstract} \end{abstract} +% \end{fdusyntax} +% \end{function} +% \begin{function}[rEXP]{abstract*} +% \begin{fdusyntax}[emph={[2]abstract*}] +% % 中文论文模板 (fduthesis) +% \begin{abstract*} +% (*\meta{英文摘要}*) +% \end{abstract*} +% \end{fdusyntax} +% 摘要。中文模板中,不带星号和带星号的版本分别用来输入中文摘要 +% 和英文摘要;英文模板中没有带星号的版本,您只需输入英文摘要。 +% \end{function} +%^^A! \begin{function}{abstract} +%^^A! \begin{fdusyntax}[emph={[2]abstract}] +%^^A! % fduthesis (Chinese thesis) % fduthesis-en (English thesis) +%^^A! \begin{abstract} \begin{abstract} +%^^A! (*\meta{Chinese abstract} \hspace{3cm} \meta{English abstract}*) +%^^A! \end{abstract} \end{abstract} +%^^A! \end{fdusyntax} +%^^A! \end{function} +%^^A! \begin{function}[rEXP]{abstract*} +%^^A! \begin{fdusyntax}[emph={[2]abstract*}] +%^^A! % Only for fduthesis +%^^A! \begin{abstract*} +%^^A! (*\meta{English abstract}*) +%^^A! \end{abstract*} +%^^A! \end{fdusyntax} +%^^A! Abstract environment. In \cls{fduthesis}, \env{abstract} and +%^^A! \env{abstract*} are used for Chinese and English abstract, +%^^A! respectively; while in \cls{fduthesis-en}, there is no +%^^A! \env{abstract*} environment and you need to write the English +%^^A! abstract merely. +%^^A! \end{function} +%^^A! +% +% 摘要的最后,会显示关键字列表以及中图分类号(CLC)或 JEL 分类号。这两项 +% 可通过 \cs{fdusetup} 录入,具体请参阅 \ref{subsubsec:信息录入}~节。 +%^^A! At the end of abstract (both Chinese and English, if available), +%^^A! keywords list and CLC or JEL code will be shown. They can be +%^^A! specified via command \cs{fdusetup} and you may refer to +%^^A! subsubsection~\ref{subsubsec:information} for more details. +%^^A! +% +%^^A TODO: \DescribeEnv{notation} +% \begin{function}{notation} +% \begin{fdusyntax}[emph={[2]notation}] +% \begin{notation}(*\oarg{列格式说明}*) +% (*\meta{符号 1}*) & (*\meta{说明}*) \\ +% (*\meta{符号 2}*) & (*\meta{说明}*) \\ +% (*\phantom{\meta{符号 $n$}}*) (*$\vdots$*) +% (*\meta{符号\ \kern-0.1em$n$}*) & (*\meta{说明}*) +% \end{notation} +% \end{fdusyntax} +% 符号表。可选参数 \meta{列格式说明}与 \LaTeX{} 中标准表格的列格 +% 式说明语法一致,默认值为“|lp{7.5cm}|”,即第一列宽度自动调整, +% 第二列限宽 \qty{7.5}{cm},两列均为左对齐。 +% \end{function} +%^^A! \begin{function}{notation} +%^^A! \begin{fdusyntax}[emph={[2]notation}] +%^^A! \begin{notation}(*\oarg{column format}*) +%^^A! (*\meta{symbol 1}*) & (*\meta{description}*) \\ +%^^A! (*\meta{symbol 2}*) & (*\meta{description}*) \\ +%^^A! (*\phantom{\meta{symbol $n$}}*) (*$\vdots$*) +%^^A! (*\meta{symbol \kern-0.1em$n$}*) & (*\meta{description}*) +%^^A! \end{notation} +%^^A! \end{fdusyntax} +%^^A! Notation list (or symbol list, nomenclature) environment. +%^^A! The optional argument \meta{column format} is the same as +%^^A! in a standard \LaTeX{} table. The default value is +%^^A! ``|lp{7.5cm}|'', which means auto-width for the first column +%^^A! and fix-width (\qty{7.5}{cm}) for the second; both columns will +%^^A! be left-aligned. +%^^A! \end{function} +%^^A! +% +% \subsubsection{猪肚} +%^^A! \subsubsection{Main matter} +%^^A! +% +% \begin{function}{\mainmatter} +% 声明主体部分开始。 +% \end{function} +%^^A! \begin{function}{\mainmatter} +%^^A! Declare the beginning of main matter. +%^^A! \end{function} +%^^A! +% +% 主体部分是论文的核心,您可以分章节撰写。如有需求,也可以采用 +% 多文件编译的方式。主体部分的页码采用阿拉伯数字。 +%^^A! As the name suggests, ``main matter'' is the main body of your +%^^A! thesis. When working on a big projects, it's usually a good +%^^A! idea to split the source file into several parts. The page +%^^A! numbers in main matter are shown in arabic numerals. +%^^A! +% +% \begin{function}[updated=2018-01-15]{\footnote} +% \begin{fdusyntax}[deletetexcs={\footnote},morekeywords={\footnote}] +% \footnote(*\marg{脚注文字}*) +% \end{fdusyntax} +% 插入脚注。脚注编号样式可利用 \opt{style/footnote-style} 选项控制, +% 具体见 \ref{subsubsec:论文格式}~小节。 +% \end{function} +%^^A! \begin{function}[updated=2018-01-15]{\footnote} +%^^A! \begin{fdusyntax}[deletetexcs={\footnote},morekeywords={\footnote}] +%^^A! \footnote(*\marg{text}*) +%^^A! \end{fdusyntax} +%^^A! Insert a footnote. The style of footnote numbers can be set +%^^A! with option \opt{style/foot\-note\-style}. See +%^^A! subsubsection~\ref{subsubsec:style-and-format} for more details. +%^^A! \end{function} +%^^A! +% +% \begin{function}{\caption} +% \begin{fdusyntax}[deletetexcs={\caption},morekeywords={\caption}] +% \caption(*\marg{图表标题}*) +% \caption(*\oarg{短标题}\marg{长标题}*) +% \end{fdusyntax} +% 插入图表标题。可选参数 \meta{短标题} 用于图表目录。在 +% \meta{长标题} 中,您可以进行长达多段的叙述;但 \meta{短标题} +% 和单独的 \meta{图表标题} 中则不允许分段。 +% \cite{刘海洋2013latex入门} +% \end{function} +%^^A! \begin{function}{\caption} +%^^A! \begin{fdusyntax}[deletetexcs={\caption},morekeywords={\caption}] +%^^A! \caption(*\marg{caption}*) +%^^A! \caption(*\oarg{short caption}\marg{long caption}*) +%^^A! \end{fdusyntax} +%^^A! Insert the caption of figure or table. The optional argument +%^^A! \meta{short caption} will be shown in the list of figures/tables. +%^^A! In \meta{long caption}, you can write descriptions for several +%^^A! paragraphs, but \meta{short caption} and the single +%^^A! \meta{caption} will not allow multi-paragraph text (i.e.\ +%^^A! text containing \tn{par}) inside. +%^^A! \end{function} +%^^A! +% +% 按照排版惯例,建议您将表格的标题放置在绘制表格的命令之前, +% 而将图片的标题放置在绘图或插图的命令之后。另需注意, +% \tn{caption} 命令必须放置在浮动体环境(如 \env{table} 和 +% \env{figure})中。 +%^^A! By convention, caption of a table is usually put \emph{before} +%^^A! the table itself, while for figure it's the opposite. +%^^A! In addition, command \tn{caption} must be put inside float +%^^A! environments (e.g.\ \env{table} and \env{figure}). +%^^A! +% +% \paragraph{参考文献引用} +%^^A! \paragraph{Citations} +% +% \begin{function}[updated=2021-09-20]{\cite} +% \begin{fdusyntax}[deletetexcs={\cite},morekeywords={\cite}] +% \cite(*\marg{文献标签}*) +% \cite(*\oarg{页码}\marg{文献标签}*) +% \end{fdusyntax} +% 插入所引用的文献。可选参数 \meta{页码} 可用来标注引文的页码。在不同的 +% 参考文献样式中,引用的样式也不尽相同。根据需要,模板还提供了更多的命令 +% 用来标记引用。顺序编码制和著者—出版年制下的各种引用方式见 +% 表~\ref{tab:citation-numerical} 和表~\ref{tab:citation-author-year}。 +% \end{function} +%^^A! \begin{function}[updated=2021-09-20]{\cite} +%^^A! \begin{fdusyntax}[deletetexcs={\cite},morekeywords={\cite}] +%^^A! \cite(*\marg{bib key}*) +%^^A! \cite(*\oarg{page number}\marg{bib key}*) +%^^A! \end{fdusyntax} +%^^A! Insert citations. The optional argument \meta{page number} can be +%^^A! used to indicate the page number of the citation. The citation style +%^^A! varies among different bibliography styles. More commands are also +%^^A! provided to mark the citations, which can be found in +%^^A! table~\ref{tab:citation-numerical} (numerical style) and +%^^A! \ref{tab:citation-author-year} (author-year style). +%^^A! \end{function} +%^^A! +% +%^^A+ +% \NewDocumentCommand\verbcite{O{cite}om}{^^A +% \IfNoValueTF{#2}{^^A +% \texttt{\textbackslash#1\{#3\}}^^A +% }{^^A +% \texttt{\textbackslash#1[#2]\{#3\}}^^A +% }} +%^^A- +% +% \begin{table}[ht] +% \caption{顺序编码制下的引用样式} \label{tab:citation-numerical} +% \centering +% \small +% \begin{tabularx}{\textwidth}{cCll} +% \toprule +% \textbf{引用方式} & +% \textbf{排版效果} & +% \textbf{\kvopt{bib-backend}{bibtex}} & +% \textbf{\kvopt{bib-backend}{biblatex}} \\ +% \midrule +% 单篇文献 & +% 引文\cite{texbook} & +% \verbcite{texbook} & +% 同左 \\ +% 多篇文献 & +% 引文\cite{texbook,companion} & +% \verbcite{texbook,companion} & +% 同左 \\ +% 标注页码 & +% 引文\cite[126--137]{texbook} & +% \verbcite[cite][126--137]{texbook} & +% 同左 \\ +% 标注作者 & +% \citet{texbook}指出 & +% \verbcite[citet]{texbook} & +% \verbcite[authornumcite]{texbook} \\ +% 标注作者、页码 & +% \citet[42]{texbook}指出 & +% \verbcite[citet][42]{texbook} & +% \verbcite[authornumcite][42]{texbook} \\ +% 非上标 & +% 引文{\citestyle{numbers}\cite{texbook}} & +% \verbcite[parencite]{texbook} & +% 同左 \\ +% \bottomrule +% \end{tabularx} +% \end{table} +%^^A! \begin{table}[ht] +%^^A! \caption{Citations in numerical style} \label{tab:citation-numerical} +%^^A! \centering +%^^A! \small +%^^A! \def\C#1{\textcolor{MaterialGreen}{#1}} +%^^A! \begin{tabularx}{\textwidth}{cCll} +%^^A! \toprule +%^^A! \textbf{Styles} & +%^^A! \textbf{Results} & +%^^A! \textbf{\kvopt{bib-backend}{bibtex}} & +%^^A! \textbf{\kvopt{bib-backend}{biblatex}} \\ +%^^A! \midrule +%^^A! Single & +%^^A! Text\textsuperscript{[\C1]} & +%^^A! \verbcite{texbook} & +%^^A! Same as left \\ +%^^A! Multiple & +%^^A! Text\textsuperscript{[\C1--\C2]} & +%^^A! \verbcite{texbook,companion} & +%^^A! Same as left \\ +%^^A! With page & +%^^A! Text\textsuperscript{[\C1]126--137} & +%^^A! \verbcite[cite][126--137]{texbook} & +%^^A! Same as left \\ +%^^A! With author & +%^^A! Knuth\textsuperscript{[\C1]} states & +%^^A! \verbcite[citet]{texbook} & +%^^A! \verbcite[authornumcite]{texbook} \\ +%^^A! With page and author & +%^^A! Knuth\textsuperscript{[\C1]42} states & +%^^A! \verbcite[citet][42]{texbook} & +%^^A! \verbcite[authornumcite][42]{texbook} \\ +%^^A! No superscript & +%^^A! Text [\C1] & +%^^A! \verbcite[parencite]{texbook} & +%^^A! Same as left \\ +%^^A! \bottomrule +%^^A! \end{tabularx} +%^^A! \end{table} +%^^A! +% +% \begin{table}[ht] +% \caption{著者—出版年制下的引用样式} \label{tab:citation-author-year} +% \centering +% \small +% \def\!{\kern-1.5pt} +% \begin{tabularx}{\textwidth}{cCll} +% \toprule +% \textbf{引用方式} & +% \textbf{排版效果} & +% \textbf{\kvopt{bib-backend}{bibtex}} & +% \textbf{\kvopt{bib-backend}{biblatex}} \\ +% \midrule +% 单篇文献 & +% (\citeauthor{texbook}\!, \citeyear{texbook}\!) & +% \verbcite[citep]{texbook} & +% \verbcite{texbook} \\ +% 多篇文献 & +% (\citeauthor{texbook}\!, \citeyear{texbook}\!; +% \citeauthor{companion}\!, \citeyear{companion}\!) & +% \verbcite[citep]{texbook,companion} & +% \verbcite{texbook,companion} \\ +% 标注页码 & +% (\citeauthor{texbook}\!, \citeyear{texbook}\!)^^A +% \textsuperscript{126--137} & +% \verbcite[citep][126--137]{texbook} & +% \verbcite[cite][126--137]{texbook} \\ +% 标注作者 & +% \citeauthor{texbook}(\citeyear{texbook}\!) & +% \verbcite[citet]{texbook} & +% 同左 \\ +% 标注作者、页码 & +% \citeauthor{texbook}(\citeyear{texbook}\!)\textsuperscript{42} & +% \verbcite[citet][42]{texbook} & +% 同左 \\ +% \bottomrule +% \end{tabularx} +% \end{table} +%^^A! \begin{table}[ht] +%^^A! \caption{Citations in author-year style} \label{tab:citation-author-year} +%^^A! \centering +%^^A! \small +%^^A! \def\C#1{\textcolor{MaterialGreen}{#1}} +%^^A! \begin{tabularx}{\textwidth}{cCll} +%^^A! \toprule +%^^A! \textbf{Styles} & +%^^A! \textbf{Results} & +%^^A! \textbf{\kvopt{bib-backend}{bibtex}} & +%^^A! \textbf{\kvopt{bib-backend}{biblatex}} \\ +%^^A! \midrule +%^^A! Single & +%^^A! (\C{Knuth}, \C{1986}) & +%^^A! \verbcite[citep]{texbook} & +%^^A! \verbcite{texbook} \\ +%^^A! Multiple & +%^^A! (\C{Knuth}, \C{1986}; \C{Mittelbach et al.}, \C{2004}) & +%^^A! \verbcite[citep]{texbook,companion} & +%^^A! \verbcite{texbook,companion} \\ +%^^A! With page & +%^^A! (\C{Knuth}, \C{1986})\textsuperscript{126--137} & +%^^A! \verbcite[citep][126--137]{texbook} & +%^^A! \verbcite[cite][126--137]{texbook} \\ +%^^A! With author & +%^^A! \C{Knuth} (\C{1986}) & +%^^A! \verbcite[citet]{texbook} & +%^^A! Same as left \\ +%^^A! With page and author & +%^^A! \C{Knuth} (\C{1986})\textsuperscript{42} & +%^^A! \verbcite[citet][42]{texbook} & +%^^A! Same as left \\ +%^^A! \bottomrule +%^^A! \end{tabularx} +%^^A! \end{table} +%^^A! +% +% \paragraph{定理类环境} +%^^A! \paragraph{Theorem-like environments} +% +%^^A TODO: \DescribeEnv{proof} +% \begin{function}{axiom,corollary,definition,example,lemma, +% proof,theorem} +% \begin{fdusyntax}[emph={[2]proof}] +% \begin{proof}(*\oarg{小标题}*) +% (*\meta{证明过程}*) +% \end{proof} +% \end{fdusyntax} +% 一系列预定义的数学环境。具体含义见表~\ref{tab:theorem}。 +% \end{function} +%^^A! \begin{function}{axiom,corollary,definition,example,lemma, +%^^A! proof,theorem} +%^^A! \begin{fdusyntax}[emph={[2]proof}] +%^^A! \begin{proof}(*\oarg{subheading}*) +%^^A! (*\meta{procedure of proof}*) +%^^A! \end{proof} +%^^A! \end{fdusyntax} +%^^A! A series of pre-defined math environments. +%^^A! \end{function} +%^^A! +% +% \begin{table}[ht] +% \caption{预定义的数学环境} \label{tab:theorem} +% \centering +% \small +% \begin{tabular}{*{8}{c}} +% \toprule +% \textbf{名称} & +% \env{axiom} & \env{corollary} & \env{definition} & \env{example} & +% \env{lemma} & \env{proof} & \env{theorem} \\ +% \midrule +% \textbf{含义} & +% 公理 & 推论 & 定义 & 例 & +% 引理 & 证明 & 定理 \\ +% \bottomrule +% \end{tabular} +% \end{table} +% +% 证明环境(\env{proof})的最后会添加证毕符号“$\QED$”。要确保 +% 该符号在正确的位置显示,您需要按照 \ref{subsec:编译方式}~节 +% 中的有关说明编译\emph{两次}。 +%^^A! A QED\footnote{Abbreviation of Latin phrase \emph{quod erat +%^^A! demonstrandum}, means ``what was to be demonstrated''.} +%^^A! symbol ``$\QED$'' will be added at the end of \env{proof} +%^^A! environment. You need to compile the source file \emph{twice} +%^^A! as in subsection~\ref{subsec:compilation} in order to make +%^^A! the position of QED symbol correct. +%^^A! +% +% \begin{function}[updated=2023-02-08]{\newtheorem} +% \begin{fdusyntax}[deletetexcs={\newtheorem}, +% morekeywords={\newtheorem,\newtheorem*}] +% \newtheorem(*\oarg{选项}\marg{环境名}\marg{标题}*) +% \newtheorem*(*\oarg{选项}\marg{环境名}\marg{标题}*) +% \begin(*\marg{环境名}\oarg{小标题}*) +% (*\meta{内容}*) +% \end(*\marg{环境名}*) +% \end{fdusyntax} +% 声明新的定理类环境(数学环境)。带星号的版本表示不进行编号, +% 并且会默认添加证毕符号“$\QED$”。声明后,即可同预定义的数学环境 +% 一样使用。 +% \end{function} +%^^A! \begin{function}[updated=2017-12-12]{\newtheorem} +%^^A! \begin{fdusyntax}[deletetexcs={\newtheorem}, +%^^A! morekeywords={\newtheorem,\newtheorem*}] +%^^A! \newtheorem(*\oarg{options}\marg{environment}\marg{title}*) +%^^A! \newtheorem*(*\oarg{options}\marg{environment}\marg{title}*) +%^^A! \begin(*\marg{environment}\oarg{subheading}*) +%^^A! (*\meta{contents}*) +%^^A! \end(*\marg{environment}*) +%^^A! \end{fdusyntax} +%^^A! Declare new math environments (theorems). If you use +%^^A! \cs{newtheorem*}, then the theorem will not be numbered, and +%^^A! a QED symbol ``$\QED$'' will be added at the end of the +%^^A! environment. All the theorem environments defined by yourself +%^^A! can be used as the pre-defined ones. +%^^A! \end{function} +%^^A! +% +% 事实上,表~\ref{tab:theorem} 中预定义的环境正是通过以下方式定义的: +% \begin{latexexample}[deletetexcs={\newtheorem}, +% morekeywords={\newtheorem,\newtheorem*}] +% \newtheorem*{proof}{证明} +% \newtheorem{axiom}{公理} +% \newtheorem{corollary}{定理} +% ... +% \end{latexexample} +%^^A! Actually, the pre-defined math environments are just defined +%^^A! with \cs{new\-the\-o\-rem} and \cs{new\-the\-o\-rem*}: +%^^A! \begin{latexexample}[deletetexcs={\newtheorem}, +%^^A! morekeywords={\newtheorem,\newtheorem*}] +%^^A! \newtheorem*{proof}{proof} +%^^A! \newtheorem{axiom}{axiom} +%^^A! \newtheorem{corollary}{corollary} +%^^A! ... +%^^A! \end{latexexample} +%^^A! +% +% 与 \cs{fdusetup} 相同,\cs{newtheorem} 的可选参数 \meta{选项} +% 也为一组键值列表。可用的选项见下。注意您无需输入“|theorem/|”。 +%^^A! Similar with \cs{fdusetup}, the optional argument \meta{options} +%^^A! of \cs{newtheorem} is a key-value list as well. The available +%^^A! are described below. Note that you don't need to type in the +%^^A! ``|theorem/|'' prefix. +%^^A! +% +% \begin{function}{theorem/style} +% \begin{fdusyntax}[emph={[1]style}] +% style = (*<(plain)|margin|change|\\ +% XXXXXX\mbox{}~~~~~~~~break|marginbreak|changebreak>*) +% \end{fdusyntax} +% 定理类环境的总体样式。 +% \end{function} +%^^A! \begin{function}{theorem/style} +%^^A! \begin{fdusyntax}[emph={[1]style}] +%^^A! style = (*<(plain)|margin|change|\\ +%^^A! XXXX\mbox{}~~~~~~~~break|marginbreak|changebreak>*) +%^^A! \end{fdusyntax} +%^^A! The overall style of the theorem environment. +%^^A! \end{function} +%^^A! +% +% \begin{function}{theorem/header-font} +% \begin{fdusyntax}[emph={[1]header-font}] +% header-font = (*\marg{字体}*) +% \end{fdusyntax} +% 定理头(即标题)的字体。中文模板默认为 \tn{sffamily},即无衬线体 +% (黑体);英文模板默认为 |\bfseries\upshape|,即加粗直立体。 +% \end{function} +%^^A! \begin{function}{theorem/header-font} +%^^A! \begin{fdusyntax}[emph={[1]header-font}] +%^^A! header-font = (*\marg{font}*) +%^^A! \end{fdusyntax} +%^^A! Font of the theorem header. Default value is \tn{sffamily} +%^^A! and |\bfseries\upshape| for Chinese and English template, +%^^A! respectively. +%^^A! \end{function} +%^^A! +% +% \begin{function}{theorem/body-font} +% \begin{fdusyntax}[emph={[1]body-font}] +% body-font = (*\marg{字体}*) +% \end{fdusyntax} +% 定理内容的字体。中文模板默认为 \tn{fdu@kai},即楷体;英文模板 +% 默认为 \tn{itshape},即斜体。 +% \end{function} +%^^A! \begin{function}{theorem/body-font} +%^^A! \begin{fdusyntax}[emph={[1]body-font}] +%^^A! body-font = (*\marg{font}*) +%^^A! \end{fdusyntax} +%^^A! Font of the theorem body. Default value is \tn{fdu@kai} +%^^A! (\textit{楷体}) and \tn{itshape} for Chinese and English +%^^A! template, respectively. +%^^A! \end{function} +%^^A! +% +% \begin{function}{theorem/qed} +% \begin{fdusyntax}[emph={[1]qed}] +% qed = (*\marg{符号}*) +% \end{fdusyntax} +% 定理结束标记(即证毕符号)。如果用 \cs{newtheorem} 声明定理,则默认为空; +% 用 \cs{newtheorem*} 声明,则默认为 |\ensuremath{\QED}|,即“$\QED$”。 +% \end{function} +%^^A! \begin{function}{theorem/qed} +%^^A! \begin{fdusyntax}[emph={[1]qed}] +%^^A! qed = (*\marg{symbol}*) +%^^A! \end{fdusyntax} +%^^A! Theorem end mark. For \cs{newtheorem}, default value is +%^^A! empty; for \cs{newtheorem*}, default value is +%^^A! |\ensuremath{\QED}| (i.e.\ ``$\QED$''). +%^^A! \end{function} +%^^A! +% +% \begin{function}{theorem/counter} +% \begin{fdusyntax}[emph={[1]counter}] +% counter = (*\marg{计数器}*) +% \end{fdusyntax} +% 定理计数器,表示定理编号在 \meta{计数器} 的下一级,并会随 \meta{计数器} +% 的变化而清零。\cite{刘海洋2013latex入门}默认为 |chapter|,表示按章编号。 +% 使用 \cs{newtheorem*} 时,该选项无效。 +% \end{function} +%^^A! \begin{function}{theorem/counter} +%^^A! \begin{fdusyntax}[emph={[1]counter}] +%^^A! counter = (*\marg{counter}*) +%^^A! \end{fdusyntax} +%^^A! The theorem will be enumerated within \meta{counter}. For +%^^A! example, the default value is |chapter|, which means with +%^^A! each new \tn{chapter}, the enumeration begins again with 1. +%^^A! This option is invalid for \cs{newtheorem*}. +%^^A! \end{function} +%^^A! +% +% \subsubsection{豹尾} +%^^A! \subsubsection{Back matter} +%^^A! +% +% \begin{function}{\backmatter} +% 声明后置部分开始。 +% \end{function} +%^^A! \begin{function}{\backmatter} +%^^A! Declare the beginning of back matter. +%^^A! \end{function} +%^^A! +% +% 后置部分包含参考文献、声明页等。 +%^^A! Back matter contains bibliography, declaration page, etc. +%^^A! +% +% \begin{function}[updated=2018-01-25]{\printbibliography} +% \begin{fdusyntax}[morekeywords={\printbibliography}] +% \printbibliography(*\oarg{选项}*) +% \end{fdusyntax} +% 打印参考文献列表。如果 \kvopt{bib-backend}{bibtex},则 \meta{选项} +% 无效,相当于 \tn{bibliography} \texttt{\marg{文献数据库}},其中的 +% \meta{文献数据库} 可利用 \opt{style/bib-resource} 选项指定,具体见 +% \ref{subsubsec:论文格式}~小节;而如果 \kvopt{bib-backend}{biblatex}, +% 则该命令由 \pkg{biblatex} 宏包直接提供,可用选项请参阅其文档 +% \cite{biblatex}。 +% \end{function} +%^^A! \begin{function}[updated=2018-01-25]{\printbibliography} +%^^A! \begin{fdusyntax}[morekeywords={\printbibliography}] +%^^A! \printbibliography(*\oarg{options}*) +%^^A! \end{fdusyntax} +%^^A! Print the bibliography. When \kvopt{bib-backend}{bibtex}, then +%^^A! \meta{options} is invalid and this command is equivalent to +%^^A! \tn{bibliography} \texttt{\marg{bib files}}, where \meta{bib files} +%^^A! should be specified with option \opt{style/bib-resource} (see +%^^A! subsubsection~\ref{subsubsec:style-and-format}). When +%^^A! \kvopt{bib-backend}{bibtex}, then \tn{printbibliography} is +%^^A! provided by \pkg{biblatex} and the available options can be +%^^A! found in its documentation. +%^^A! \end{function} +%^^A! +% +% \begin{function}[added=2023-02-06]{acknowledgements} +% \begin{fdusyntax}[emph={[2]acknowledgements}] +% \begin{acknowledgements} +% (*\meta{致谢内容}*) +% \end{acknowledgements} +% \end{fdusyntax} +% 致谢。 +% \end{function} +%^^A! \begin{function}[added=2023-02-06]{acknowledgements} +%^^A! \begin{fdusyntax}[emph={[2]acknowledgements}] +%^^A! \begin{acknowledgements} +%^^A! (*\meta{acknowledgements}*) +%^^A! \end{acknowledgements} +%^^A! \end{fdusyntax} +%^^A! Acknowledgements. +%^^A! \end{function} +%^^A! +% +% \section{宏包依赖情况} +%^^A! \section{Packages dependencies} +%^^A! +% +% 使用不同编译方式、指定不同选项,会导致宏包依赖情况有所不同。 +% 具体如下: +% \begin{itemize} +% \item 在任何情况下,本模板都会\emph{显式}调用以下宏包 +% (或文档类): +% \begin{itemize} +% \item \pkg{xtemplate} 和 \pkg{l3keys2e},用于扩展 \LaTeX3 编程环境。 +% 它们属于 \pkg{l3packages} 宏集。 +% \item \cls{ctexbook},提供中文排版的通用框架。属于 \CTeX{} +% 宏集 \cite{CTeX}。 +% \item \pkg{amsmath},对 \LaTeX{} 的数学排版功能进行了 +% 全面扩展。属于 \AmSLaTeX{} 套件。 +% \item \pkg{unicode-math},负责处理 Unicode 编码的 +% OpenType 数学字体。 +% \item \pkg{geometry},用于调整页面尺寸。 +% \item \pkg{fancyhdr},处理页眉页脚。 +% \item \pkg{footmisc},处理脚注。 +% \item \pkg{ntheorem},提供增强版的定理类环境。 +% \item \pkg{graphicx},提供图形插入的接口。 +% \item \pkg{longtable},长表格(允许跨页)支持。 +% \item \pkg{caption},用于设置题注。 +% \item \pkg{xcolor},提供彩色支持。 +% \item \pkg{hyperref},提供交叉引用、超链接、电子书签等功能。 +% \end{itemize} +% \item 开启 \kvopt{style/footnote-style}{pifont} 后,会调用 +% \pkg{pifont} 宏包。它属于 \pkg{psnfss} 套件。 +% \item 开启 \kvopt{style/bib-backend}{bibtex} 后,会调用 +% \pkg{natbib} 宏包,并依赖 \BibTeX{} 程序。参考文献样式由 +% \pkg{gbt7714} 宏包提供 \cite{natbib,gbt7714}。 +% \item 开启 \kvopt{style/bib-backend}{biblatex} 后,会调用 +% \pkg{biblatex} 宏包,并依赖 \biber{} 程序。参考文献样式由 +% \pkg{biblatex-gb7714-2015} 宏包提供 +% \cite{biblatex,biblatex-gb7714-2015}。 +% \end{itemize} +%^^A! Different compilation methods and options will result in a +%^^A! different packages dependency. Details are as follows: +%^^A! \begin{itemize} +%^^A! \item In any case, \cls{fduthesis} will load the following +%^^A! packages \emph{explicitly}: +%^^A! \begin{itemize} +%^^A! \item \pkg{xtemplate} and \pkg{l3keys2e}, belong to +%^^A! \pkg{l3packages} bundle +%^^A! \item \cls{ctexbook}, belongs to \CTeX{} bundle +%^^A! \item \pkg{amsmath}, belongs to \AmSLaTeX{} bundle +%^^A! \item \pkg{unicode-math} +%^^A! \item \pkg{geometry} +%^^A! \item \pkg{fancyhdr} +%^^A! \item \pkg{footmisc} +%^^A! \item \pkg{ntheorem} +%^^A! \item \pkg{graphicx} +%^^A! \item \pkg{longtable} +%^^A! \item \pkg{caption} +%^^A! \item \pkg{xcolor} +%^^A! \item \pkg{hyperref} +%^^A! \end{itemize} +%^^A! \item When chosen \kvopt{style/footnote-style}{pifont}, +%^^A! package \pkg{pifont} will be loaded. It belongs to +%^^A! \pkg{psnfss} bundle. +%^^A! \item When chosen \kvopt{style/bib-backend}{bibtex}, +%^^A! package \pkg{natbib} will be loaded. Meanwhile, program +%^^A! \BibTeX{} will be required for compilation. The +%^^A! bibliography style is provided by \pkg{gbt7714}. +%^^A! \item When chosen \kvopt{style/bib-backend}{biblatex}, +%^^A! package \pkg{biblatex} will be loaded. Program \biber{} +%^^A! will be required then. The bibliography style is provided +%^^A! by \pkg{biblatex-gb7714-2015}. +%^^A! \end{itemize} +%^^A! +% +% 这里只列出了本模板直接调用的宏包。这些宏包自身的调用情况, +% 此处不再具体展开。如有需要,请参阅相关文档。 +%^^A! Only the packages loaded directly by \cls{fduthesis} are listed +%^^A! here. If you need to know the dependencies of the packages +%^^A! themselves, please refer to the corresponding manuals. +%^^A! +% +% \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{https://mirror.ctan.org/#2}{\texttt{CTAN://#2}}}} +% +% \subsection{图书} +% +% \bibitem[Knuth(1986)]{texbook} +% \textsc{Knuth D E}. +% \newblock \textit{The \TeX book: Computers \& Typesetting, volume A} [M]. +% \newblock Boston: Addison--Wesley Publishing Company, 1986 +% \urlprefix \CTANurl[源代码^^A +% \footnote{此代码只可作为学习之用。未经 Knuth 本人同意,您不应当编译此文档。}:]^^A +% {systems/knuth/dist/tex/texbook.tex} +% +% \bibitem[Mittelbach et~al.(2004)]{companion} +% \textsc{Mittelbach F} and \textsc{Goossens M}. +% \newblock \textit{The \LaTeX{} Companion} [M]. +% \newblock 2nd ed. +% \newblock Boston: Addison--Wesley Publishing Company, 2004 +% +% \bibitem[()]{胡伟2017latex2e} +% 胡伟. +% \newblock \textit{\LaTeXe{} 文类和宏包学习手册} [M]. +% \newblock 北京: 清华大学出版社, 2017 +% +% \bibitem[()]{刘海洋2013latex入门} +% 刘海洋. +% \newblock \textit{\LaTeX{} 入门} [M]. +% \newblock 北京: 电子工业出版社, 2013 +% +% \subsection{标准、规范} +% +% \bibitem[()]{gb-t-7713.1-2006} +% 国务院学位委员会办公室, 全国信息与文献标准化技术委员会. +% \newblock \textit{学位论文编写规则: GB/T 7713.1--2006} [S]. +% \newblock 北京: 中国标准出版社, 2007 +% +% \bibitem[()]{gb-t-7714-2015} +% 全国信息与文献标准化技术委员会. +% \newblock \textit{信息与文献\quad 参考文献著录规则: GB/T 7714--2015} [S]. +% \newblock 北京: 中国标准出版社, 2015 +% +% \bibitem[()]{gb-t-15834-2011} +% 教育部语言文字信息管理司. +% \newblock \textit{标点符号用法: GB/T 15834--2011} [S/OL]. +% \newblock 北京: 中国标准出版社, 2012 +% \urlprefix\url{http://www.moe.gov.cn/ewebeditor/uploadfile/2015/01/13/20150113091548267.pdf} +% +% \bibitem[()]{clreq} +% W3C. +% \newblock \textit{中文排版需求(Requirements for Chinese Text Layout)} [EB/OL]. +% \newblock W3C Editor's Draft. +% \newblock (2022-09-01) +% \urlprefix\url{https://w3c.github.io/clreq/} +% +% \bibitem[()]{复旦大学论文规范} +% 复旦大学图书馆, 复旦大学研究生院. +% \newblock \textit{复旦大学博士、硕士学位论文规范} [EB/OL]. +% \newblock 2017 年 3 月修订版. +% \newblock (2017-03-27) +% \urlprefix\url{http://www.gs.fudan.edu.cn/_upload/article/4c/a8/a82545ef443b9c057c14ba13782c/c883c6f3-6d7f-410c-8f30-d8bde6fcb990.doc} +% +% \subsection{宏包、模版} +% +% \bibitem[()]{source2e} +% \textsc{Braams J}, \textsc{Carlisle D}, \textsc{Jeffrey A}, et al. +% \newblock \textit{The \LaTeXe{} Sources} [CP/OL]. +% \newblock (2022-06-01) +% \urlprefix\url{https://ctan.org/pkg/latex} +% \urlprefix\CTANurl[源代码:]{macros/latex/base/source2e.pdf} +% +% \bibitem[()]{CTeX} +% \textsc{CTEX.ORG}. +% \newblock \textit{\CTeX{} 宏集手册} [EB/OL]. +% \newblock version 2.5.10, +% \newblock (2022-07-14) +% \urlprefix\url{https://ctan.org/pkg/ctex} +% \urlprefix\CTANurl[文档及源代码:]{language/chinese/ctex/ctex.pdf} +% +% \bibitem[()]{xeCJK} +% \textsc{CTEX.ORG}. +% \newblock \textit{\pkg{xeCJK} 宏包} [EB/OL]. +% \newblock version 3.9.1, +% \newblock (2022-08-05) +% \urlprefix\url{https://ctan.org/pkg/xecjk} +% \urlprefix\CTANurl[文档及源代码:]{macros/xetex/latex/xecjk/xeCJK.pdf} +% +% \bibitem[()]{natbib} +% \textsc{Daly P W}. +% \newblock \textit{Natural Sciences Citations and References} [EB/OL]. +% \newblock version 8.31b, +% \newblock (2010-09-13) +% \urlprefix\url{https://ctan.org/pkg/natbib} +% \urlprefix\CTANurl[文档及源代码:]{macros/latex/contrib/natbib/natbib.pdf} +% +% \bibitem[()]{source3} +% \textsc{The \LaTeX3 Project}. +% \newblock \textit{The \LaTeX3 Sources} [CP/OL]. +% \newblock (2022-08-30) +% \urlprefix\url{https://ctan.org/pkg/l3kernel} +% \urlprefix\CTANurl[源代码:]{macros/latex/contrib/l3kernel/source3.pdf} +% +% \bibitem[()]{biblatex} +% \textsc{Kime P}, \textsc{Wemheuer M}, \textsc{Lehman P}. +% \newblock \textit{The \pkg{biblatex} Package} [EB/OL]. +% \newblock version 3.18b, +% \newblock (2022-07-12) +% \urlprefix\url{https://ctan.org/pkg/biblatex} +% \urlprefix\CTANurl[文档:]{macros/latex/contrib/biblatex/doc/biblatex.pdf} +% +% \bibitem[()]{lshort} +% \textsc{Oetiker T}, \textsc{Partl H}, \textsc{Hyna I}, et al. +% \newblock \textit{The Not So Short Introduction to \LaTeXe{}: Or \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{一份(不太)简短的 \LaTeXe{} 介绍: 或 111 分钟了解 \LaTeXe{}} [EB/OL]. +% \newblock \CTeX{} 开发小组, 译. +% \newblock 原版版本 version 6.4, 中文版本 version 6.03, +% \newblock (2021-11-20) +% \urlprefix\url{https://ctan.org/pkg/lshort-zh-cn} +% \urlprefix\CTANurl[文档:]{info/lshort/chinese/lshort-zh-cn.pdf} +% +% \bibitem[()]{biblatex-gb7714-2015} +% 胡振震. +% \newblock \textit{符合 GB/T 7714-2015 标准的 biblatex 参考文献样式} [EB/OL]. +% \newblock version 1.1j, +% \newblock (2022-08-29) +% \urlprefix\url{https://ctan.org/pkg/biblatex-gb7714-2015} +% \urlprefix\CTANurl[文档:]{biblatex-contrib/biblatex-gb7714-2015/biblatex-gb7714-2015.pdf} +% +% \bibitem[()]{gbt7714} +% 李泽平(\textsc{Zeping L}). +% \newblock \textit{GB/T 7714-2015 \BibTeX{} Style} [EB/OL]. +% \newblock version 2.1.4, +% \newblock (2022-03-12) +% \urlprefix\url{https://ctan.org/pkg/gbt7714} +% \urlprefix\CTANurl[文档:]{biblio/bibtex/contrib/gbt7714/gbt7714.pdf} +% +% \bibitem[()]{cquthesis} +% 李振楠. +% \newblock \textit{\textsc{CquThesis}:重庆大学毕业论文 \LaTeX{} 模板} [EB/OL]. +% \newblock version 1.50, +% \newblock (2020-06-23) +% \urlprefix\url{https://ctan.org/pkg/cquthesis} +% \urlprefix\CTANurl[文档及源代码:]{macros/latex/contrib/cquthesis/cquthesis.pdf} +% +% \bibitem[()]{pkuthss} +% Casper Ti. Vector. +% \newblock \textit{北京大学学位论文模版:pkuthss} [EB/OL]. +% \newblock version 1.9.2, +% \newblock (2022-05-05) +% \urlprefix\url{https://ctan.org/pkg/pkuthss} +% \urlprefix\CTANurl[文档及源代码:]{macros/latex/contrib/pkuthss/pkuthss.pdf} +% +% \bibitem[()]{thuthesis} +% 清华大学 TUNA 协会. +% \newblock \textit{\textsc{ThuThesis}:清华大学学位论文模板} [EB/OL]. +% \newblock version 7.3.0, +% \newblock (2022-05-17) +% \urlprefix\url{https://ctan.org/pkg/thuthesis} +% \urlprefix\CTANurl[文档及源代码:]{macros/latex/contrib/thuthesis/thuthesis.pdf} +% +% \emph{以下模版未收录至 CTAN,但仍然保持活跃更新。} +% +% \bibitem[()]{sjtuthesis} +% \textsc{SJTUG}. +% \newblock \textit{上海交通大学学位论文模板} [EB/OL]. +% \newblock version 1.1.1, +% \newblock (2022-08-04) +% \urlprefix\url{https://github.com/sjtug/SJTUThesis} +% \urlprefix\url[源代码仓库:]{https://github.com/sjtug/SJTUTeX} +% +% \bibitem[()]{ustcthesis} +% \textsc{USTC \TeX{} User Group}. +% \newblock \textit{中国科学技术大学学位论文 \LaTeX{} 模板} [EB/OL]. +% \newblock version 3.3.3, +% \newblock (2022-05-17) +% \urlprefix\url{https://github.com/ustctug/ustcthesis} +% +% \bibitem[()]{ucasthesis} +% \textsc{mohuangrui}. +% \newblock \textit{\pkg{ucasthesis} 国科大学位论文 \LaTeX{} 模板} [EB/OL]. +% \newblock (2021-10-29) +% \urlprefix\url{https://github.com/mohuangrui/ucasthesis} +% +% \emph{以下模版现已停止更新。} +% +% \bibitem[()]{pandoxie2014fduthesislatex} +% \textsc{Pandoxie}. +% \newblock \textit{Fudan University-Latex Template} [EB/OL]. +% \newblock (2014-06-07) +% \urlprefix\url{https://github.com/Pandoxie/FDU-Thesis-Latex} +% +% \bibitem[()]{richard2016fudanthesis} +% \textsc{richard}. +% \newblock \textit{复旦大学硕士学位论文模板} [EB/OL]. +% \newblock (2016-01-31) +% \urlprefix\url{https://github.com/richarddzh/fudan-thesis} +% +% \bibitem{数院本科毕业论文写作模板} +% 复旦大学数学科学学院. +% \newblock \textit{2019 春季本科毕业论文写作模板} [EB/OL]. +% \newblock (2019-03-12) +% \urlprefix\url{https://math.fudan.edu.cn/f3/e1/c30360a324577/page.htm} +% +% \subsection{其他} +% +% \bibitem[()]{wright2009dtxfile} +% \textsc{Wright J}. +% \newblock \textit{A model dtx file} [EB/OL]. +% \newblock (2009-10-06) +% \urlprefix\url{https://www.texdev.net/2009/10/06/a-model-dtx-file/} +% +% \bibitem[()]{孔雀计划} +% 刘庆(\textsc{Eric Q L}). +% \newblock \textit{孔雀计划:中文字体排印的思路} [EB/OL]. +% \urlprefix\url{https://thetype.com/kongque/} +% +% \end{thebibliography} +% +% \clearpage +% +%^^A! \end{document} +% +% \end{documentation} +% +% \begin{implementation} +% +%^^A 代码部分的页边距 +% \newgeometry{ +% left = 2.25 in, +% right = 1.00 in, +% top = 1.25 in, +% bottom = 1.00 in, +% marginpar = 2.25 in +% } +% +% \section{实现细节} +% +% 本模板使用 \LaTeX3 语法编写,依赖 \pkg{expl3} 环境, +% 并需调用 \pkg{l3packages} 中的相关宏包。 +% +% 按照 \LaTeX3 语法,代码中的空格、换行、回车与制表符完全忽略, +% 而下划线“|_|”和冒号“|:|”则可作为一般字母使用。 +% 正常的空格可以使用“|~|”代替;至于 |~| 原来所表示的“带子”, +% 则要用 \LaTeXe{} 的原始命令 \tn{nobreakspace} 代替。 +% +% 以下代码中有一些形如 \textcolor[HTML]{2E3191}{\textsf{<*class>}} +% 的标记,这是 \pkg{DocStrip} 中的“guard”,用来选择性地提取文件。 +% “\textsf{*}”和“\textsf{/}”分别表示该部分的开始和结束。不含 +% “\textsf{*}”和“\textsf{/}”的 guard 出现在行号左侧,它们用来确定 +% 单独一行代码的归属。这些 guard 的颜色深浅不一,用以明确嵌套关系。 +% +% 另有若干形如 \textcolor{MaterialPink}{\textsf{<@@=fdu>}} 的 guard, +% 它们用来指示名字空间(模块)。 +% +% \subsection{准备} +% +% \begin{macrocode} +%<@@=fdu> +%<*class|class-en> +% \end{macrocode} +% +% \changes{v0.8}{2021/09/15}{同步 \LaTeX{} 2020/10/01,不再显式调用 +% \pkg{expl3} 和 \pkg{xparse} 宏包。} +% \changes{v0.8}{2022/02/17}{在使用前声明提示信息。} +% +% 检查 \LaTeX3 编程环境。 +% \begin{macrocode} +\RequirePackage { xtemplate, l3keys2e } +\msg_new:nnn { fduthesis } { l3-too-old } + { + Package~ "#1"~ is~ too~ old. \\\\ + Please~ update~ an~ up-to-date~ version~ of~ the~ bundles \\ + "l3kernel"~ and~ "l3packages"~ using~ your~ TeX~ package \\ + manager~ or~ from~ CTAN. + } +\clist_map_inline:nn { xtemplate, l3keys2e } + { + \@ifpackagelater {#1} { 2020/07/17 } + { } { \msg_error:nnn { fduthesis } { l3-too-old } {#1} } + } +% \end{macrocode} +% +% 目前 \cls{fduthesis} 仅支持 \XeTeX{} 和 \LuaTeX{}。 +% \begin{macrocode} +\msg_new:nnn { fduthesis } { unsupported-engine } + { + The~ fduthesis~ class~ requires~ either~ XeTeX~ or~ LuaTeX. \\\\ + "#1"~ is~ not~ supported~ at~ present.~ You~ must~ change \\ + your~ typesetting~ engine~ to~ "xelatex"~ or~ "lualatex". + } +\sys_if_engine_xetex:F + { + \sys_if_engine_luatex:F + { + \msg_fatal:nnx { fduthesis } { unsupported-engine } + { \c_sys_engine_str } + } + } +% \end{macrocode} +% +% \subsubsection{内部变量声明} +% +% \begin{variable}{\l_@@_tmpa_box, +% \l_@@_tmpa_clist, +% \l_@@_tmpa_dim, +% \l_@@_tmpa_skip, +% \l_@@_tmpa_tl,\l_@@_tmpb_tl} +% 临时变量。 +% \begin{macrocode} +\box_new:N \l_@@_tmpa_box +\clist_new:N \l_@@_tmpa_clist +\dim_new:N \l_@@_tmpa_dim +\skip_new:N \l_@@_tmpa_skip +\tl_new:N \l_@@_tmpa_tl +\tl_new:N \l_@@_tmpb_tl +% \end{macrocode} +% \end{variable} +% +% \begin{variable}{\g_@@_thesis_type_int} +% 论文类型。取值 1、2、3 分别对应博士、硕士、本科(学士),这与学号 +% 第三位是一致的。 +% \begin{macrocode} +\int_new:N \g_@@_thesis_type_int +% \end{macrocode} +% \end{variable} +% +% \begin{variable}{\g_@@_to_ctexbook_clist,\g_@@_to_hyperref_clist} +% 分别保存由 \cls{fduthesis} 传入 \cls{ctexbook} 文档类和 +% \pkg{hyperref} 宏包的选项列表。 +% \begin{macrocode} +\clist_new:N \g_@@_to_ctexbook_clist +\clist_new:N \g_@@_to_hyperref_clist +% \end{macrocode} +% \end{variable} +% +% \begin{variable}{\g_@@_twoside_bool} +% 是否开启双页模式(默认打开)。 +% \begin{macrocode} +\bool_new:N \g_@@_twoside_bool +\bool_set_true:N \g_@@_twoside_bool +% \end{macrocode} +% \end{variable} +% +% \begin{variable}{\g_@@_draft_bool} +% 是否开启草稿模式。 +% \begin{macrocode} +\bool_new:N \g_@@_draft_bool +% \end{macrocode} +% \end{variable} +% +% \begin{variable}{\g_@@_config_tl} +% 保存配置文件名称。默认为空。 +% \begin{macrocode} +\tl_new:N \g_@@_config_tl +% \end{macrocode} +% \end{variable} +% +% \subsubsection{内部函数} +% +% \begin{macro}{\file_input:V,\int_to_arabic:v,\keys_define:nx,\regex_replace_all:nnc} +% \begin{macro}[TF]{\tl_if_eq:Vn} +% \LaTeX3{} 函数变体。 +% \begin{macrocode} +\cs_generate_variant:Nn \file_input:n { V } +\cs_generate_variant:Nn \int_to_arabic:n { v } +\cs_generate_variant:Nn \keys_define:nn { nx } +\cs_generate_variant:Nn \regex_replace_all:nnN { nnc } +\prg_generate_conditional_variant:Nnn \tl_if_eq:nn { Vn } { T, TF } +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@@_quad:,\@@_qquad:} +% 等价于 \LaTeXe{} 中的 \tn{quad} 和 \tn{qquad}。 +% \begin{macrocode} +\cs_new:Npn \@@_quad: { \skip_horizontal:n { 1 em } } +\cs_new:Npn \@@_qquad: { \skip_horizontal:n { 2 em } } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_vspace:N,\@@_vspace:n,\@@_vspace:c} +% 类似 \LaTeXe{} 中的 \tn{vspace*}。 +% \begin{macrocode} +\cs_new_protected:Npn \@@_vspace:N #1 + { + \dim_set_eq:NN \l_@@_tmpa_dim \prevdepth + \hrule height \c_zero_dim + \nobreak + \skip_vertical:N #1 + \skip_vertical:N \c_zero_skip + \dim_set_eq:NN \prevdepth \l_@@_tmpa_dim + } +\cs_new_protected:Npn \@@_vspace:n #1 + { + \skip_set:Nn \l_@@_tmpa_skip {#1} + \@@_vspace:N \l_@@_tmpa_skip + } +\cs_generate_variant:Nn \@@_vspace:N { c } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_symbol:n} +% 等价于 \LaTeXe{} 中的 \tn{symbol}。 +% \begin{macrocode} +\cs_new:Npn \@@_symbol:n #1 { \tex_char:D #1 \scan_stop: } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_arabic:n} +% 等价于 \LaTeXe{} 中的 \tn{arabic}。 +% \begin{macrocode} +\cs_new:Npn \@@_arabic:n #1 + { \int_to_arabic:v { c@ #1 } } +% \end{macrocode} +% \end{macro} +% +% \changes{v0.8}{2021/09/15}{统一使用 \LaTeX{} 2020/10/01 新的钩子机制。} +% +% \begin{macro}{\@@_gadd_ltxhook:nn} +% 封装 \LaTeX{} 的钩子管理机制。本模板中的字体加载命令位于 +% \texttt{begindocument/\allowbreak before} 钩子中,需确保在 \pkg{xeCJK} 之前执行。 +% \begin{macrocode} +\cs_new_protected:Npn \@@_gadd_ltxhook:nn #1#2 + { \hook_gput_code:nnn {#1} { . } {#2} } +\hook_gset_rule:nnnn { begindocument/before } { . } { < } { xeCJK } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_patch_cmd:Nnn,\@@_appto_cmd:Nn} +% 补丁工具,来自 \pkg{ctexpatch} 宏包。 +% \begin{macrocode} +\cs_new_protected:Npn \@@_patch_cmd:Nnn #1#2#3 + { + \ctex_patch_cmd_once:NnnnTF #1 { } {#2} {#3} + { } { \ctex_patch_failure:N #1 } + } +\cs_new_protected:Npn \@@_appto_cmd:Nn #1#2 + { + \ctex_appto_cmd:NnnTF #1 { } {#2} + { } { \ctex_patch_failure:N #1 } + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_define_fn_style:nn, +% \@@_define_punct:nn, +% \@@_define_name:nn, +% \@@_define_name:nnn} +% 用来定义脚注样式、标点、默认名称的辅助函数。 +% \begin{macrocode} +\cs_new_protected:Npn \@@_define_fn_style:nn #1#2 + { \tl_const:cn { c_@@_fn_style_ #1 _tl } {#2} } +\cs_new_protected:Npn \@@_define_punct:nn #1#2 + { \tl_const:cn { c_@@_ #1 _tl } {#2} } +\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{macro}{\@@_msg_new:nn, +% \@@_error:n,\@@_error:nn,\@@_error:nx,\@@_error:nnn,\@@_error:nnnn, +% \@@_warning:n,\@@_warning:nn,\@@_warning:nxx, +% \@@_info:nx} +% 各种信息函数的缩略形式。 +% \begin{macrocode} +\cs_new:Npn \@@_msg_new:nn { \msg_new:nnn { fduthesis } } +\cs_new:Npn \@@_error:n { \msg_error:nn { fduthesis } } +\cs_new:Npn \@@_error:nn { \msg_error:nnn { fduthesis } } +\cs_new:Npn \@@_error:nx { \msg_error:nnx { fduthesis } } +\cs_new:Npn \@@_error:nnn { \msg_error:nnnn { fduthesis } } +\cs_new:Npn \@@_error:nnnn { \msg_error:nnnnn { fduthesis } } +\cs_new:Npn \@@_warning:n { \msg_warning:nn { fduthesis } } +\cs_new:Npn \@@_warning:nn { \msg_warning:nnn { fduthesis } } +\cs_new:Npn \@@_warning:nxx { \msg_warning:nnxx { fduthesis } } +\cs_new:Npn \@@_info:nx { \msg_info:nnx { fduthesis } } +% \end{macrocode} +% \end{macro} +% +% \subsection{选项处理} +% +% 定义 |fdu/option| 键值类。 +% \begin{macrocode} +\keys_define:nn { fdu / option } + { +% \end{macrocode} +% +% \changes{v0.7}{2018/02/01}{新增 \opt{type} 选项。} +% +% \begin{macro}{type} +% 设置论文类型。设为模板选项主要是为了以后的兼容性。论文类型可能会 +% 影响很多设置,只是暂时还不考虑。默认为本科毕业论文。 +% \begin{macrocode} + type .choice:, + type .value_required:n = true, + type .choices:nn = + { doctor, master, bachelor } + { \int_set_eq:NN \g_@@_thesis_type_int \l_keys_choice_int }, + type .initial:n = bachelor, +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{oneside,twoside} +% 设置页面类型为单面或双面。 +% \begin{macrocode} + oneside .value_forbidden:n = true, + twoside .value_forbidden:n = true, + oneside .code:n = + { + \clist_gput_right:Nn \g_@@_to_ctexbook_clist { oneside } + \bool_set_false:N \g_@@_twoside_bool + }, + twoside .code:n = + { + \clist_gput_right:Nn \g_@@_to_ctexbook_clist { twoside } + \bool_set_true:N \g_@@_twoside_bool + }, +% \end{macrocode} +% \end{macro} +% +% \changes{v0.5}{2017/09/23}{移除 \opt{nofonts} 选项。} +% +% \begin{macro}{draft} +% 是否开启草稿模式(默认关闭)。 +% \begin{macrocode} + draft .choice:, + draft / true .code:n = + { + \bool_set_true:N \g_@@_draft_bool + \clist_gput_right:Nn \g_@@_to_ctexbook_clist { draft } + }, + draft / false .code:n = + { \bool_set_false:N \g_@@_draft_bool }, + draft .default:n = true, + draft .initial:n = false, +% \end{macrocode} +% \end{macro} +% +% \changes{v0.7}{2018/01/31}{新增 \opt{config} 选项。} +% +% \begin{macro}{config} +% 配置文件名。 +% \begin{macrocode} + config .tl_set:N = \g_@@_config_tl, +% \end{macrocode} +% \end{macro} +% +% 处理未知选项。 +% \begin{macrocode} + unknown .code:n = { \@@_error:n { unknown-option } } + } +\@@_msg_new:nn { unknown-option } + { Class~ option~ "\l_keys_key_str"~ is~ unknown. } +% \end{macrocode} +% +% 将文档类选项传给 |fdu/option|。 +% \begin{macrocode} +\ProcessKeysOptions { fdu / option } +% \end{macrocode} +% +% 载入参数配置文件。 +% \begin{macrocode} +\file_input:n { fduthesis.def } +\@@_msg_new:nn { load-config-file } + { You~ are~ loading~ config~ file~ "#1". } +\tl_if_empty:NF \g_@@_config_tl + { + \@@_info:nx { load-config-file } { \g_@@_config_tl } + \file_input:V \g_@@_config_tl + } +% \end{macrocode} +% +% \subsection{载入宏包、文档类} +% +% \changes{v0.7}{2018/01/19}{使用 \cls{ctexbook} 文档类,而非直接使用 +% 标准文档类 \cls{book}。} +% +% 将选项传入 \cls{ctexbook} 文档类。 +% \begin{macrocode} +% TODO: (2017-07-22) Chinese fonts in fduthesis-en +\PassOptionsToClass + { + UTF8, +%<class-en> scheme = plain, + heading = true, +%<class> fontset = none, +%<class-en> fontset = fandol, + zihao = -4, +%<class> linespread = \c_@@_line_spread_fp, + \g_@@_to_ctexbook_clist + } + { ctexbook } +% \end{macrocode} +% +% 传入各宏包选项。 +% \begin{macrocode} +\clist_map_inline:nn + { + { no-math } { fontspec }, + { perpage } { footmisc }, + { amsmath, thmmarks } { ntheorem } + } + { \PassOptionsToPackage #1 } +% \end{macrocode} +% +% 载入 \cls{ctexbook} 文档类。 +% 在使用 \XeLaTeX{} 编译时,\cls{ctexbook} 的底层将调用 \pkg{xeCJK} +% 宏包;而在使用 \LuaLaTeX{} 编译时,则将调用 \pkg{LuaTeX-ja} 宏包。 +% 两种情况下 \cls{ctexbook} 均会调用 \pkg{fontspec} 宏包。 +% \begin{macrocode} +\LoadClass { ctexbook } +% \end{macrocode} +% +% \changes{v0.4}{2017/08/13}{提供彩色支持。} +% +% 载入各宏包。其中,\pkg{amsmath} 必须在 \pkg{unicode-math} 之前引入。 +% \begin{macrocode} +\RequirePackage + { + amsmath, + unicode-math, + geometry, + fancyhdr, + footmisc, + ntheorem, + graphicx, + longtable, + caption, + xcolor + } +% \end{macrocode} +% +% \changes{v0.8}{2021/09/16}{只检查 \cls{ctexbook} 和 \pkg{xeCJK} 的版本。} +% +% \begin{macro}{\@@_check_package:nnn,\@@_check_class:nnn} +% 检查过时宏包和文档类。 +% \begin{macrocode} +\cs_new_protected:Npn \@@_check_package:nnn #1#2#3 + { + \@ifpackagelater {#1} {#2} + { } { \@@_error:nnnn { package-too-old } { Package } {#1} {#3} } + } +\cs_new_protected:Npn \@@_check_class:nnn #1#2#3 + { + \@ifclasslater {#1} {#2} + { } { \@@_error:nnnn { package-too-old } { Class } {#1} {#3} } + } +\@@_msg_new:nn { package-too-old } + { + #1~ "#2"~ is~ too~ old. \\ + The~ fduthesis~ class~ only~ supports~ "#2" \\ + with~ a~ version~ higher~ than~ v#3. \\\\ + Please~ update~ an~ up-to-date~ version~ of~ it \\ + using~ your~ TeX~ package~ manager~ or~ from~ CTAN. + } +% \end{macrocode} +% \end{macro} +% +% \begin{macrocode} +\@@_check_class:nnn { ctexbook } { 2021/03/14 } { 2.5.6 } +\sys_if_engine_xetex:T + { \@@_check_package:nnn { xeCJK } { 2020/05/01 } { 3.8.3 } } +% \end{macrocode} +% +% \subsection{页面布局} +% +% 利用 \pkg{geometry} 宏包设置纸张大小、页面边距以及页眉高度。这里, +% $\qty{2.54}{\centi\meter}=\qty{1}{in}$, +% $\qty{3.18}{\centi\meter}=\qty{1.25}{in}$。 +% \begin{macrocode} +\geometry + { + paper = a4paper, + vmargin = 2.54 cm, + hmargin = 3.18 cm, + headheight = 15 pt + } +% \end{macrocode} +% +% 草稿模式下显示页面边框及页眉、页脚线。 +% \begin{macrocode} +\bool_if:NT \g_@@_draft_bool { \geometry { showframe } } +% \end{macrocode} +% +% \subsection{字体} +% +% \subsubsection{预定义字体配置} +% +% \changes{v0.7c}{2019/03/05}{重构字体配置,并兼容 macOS。} +% +% \begin{variable}{\g_@@_fontset_tl, \g_@@_cjk_fontset_tl} +% 存放字体选项值。 +% \begin{macrocode} +\tl_new:N \g_@@_fontset_tl +%<class>\tl_new:N \g_@@_cjk_fontset_tl +% \end{macrocode} +% \end{variable} +% +% \begin{macro}{style/font} +% \changes{v0.7c}{2019/03/05}{新增 \opt{garamond} 和 \opt{times*} 样式。} +% 预定义西文字体。 +% \begin{macrocode} +\keys_define:nn { fdu / style } + { + font .choices:nn = + { garamond, libertinus, lm, palatino, times, times*, none } + { \tl_set_eq:NN \g_@@_fontset_tl \l_keys_choice_tl } + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{style/cjk-font} +% \changes{v0.7c}{2019/03/05}{新增 \opt{sinotype} 和 \opt{sourcehan} 样式。} +% 预定义中文字体。 +% \begin{macrocode} +%<*class> +\keys_define:nn { fdu / style } + { + cjk-font .choices:nn = + { adobe, fandol, founder, mac, sinotype, sourcehan, windows, none } + { \tl_set_eq:NN \g_@@_cjk_fontset_tl \l_keys_choice_tl } + } +% \end{macrocode} +%</class> +% \end{macro} +% +% \begin{macro}{ +% \@@_setmainfont:nn, +% \@@_setsansfont:nn, +% \@@_setmonofont:nn, +% \@@_setmathfont:nn} +% 用于设置西文字体的辅助函数,来源于 \pkg{fontspec} 和 \pkg{unicode-math}。 +% \begin{arguments} +% \item 字体名 +% \item 选项 +% \end{arguments} +% \begin{macrocode} +\cs_new_protected:Npn \@@_setmainfont:nn #1#2 + { \__fontspec_main_setmainfont:nn {#2} {#1} } +\cs_new_protected:Npn \@@_setsansfont:nn #1#2 + { \__fontspec_main_setsansfont:nn {#2} {#1} } +\cs_new_protected:Npn \@@_setmonofont:nn #1#2 + { \__fontspec_main_setmonofont:nn {#2} {#1} } +\cs_new_protected:Npn \@@_setmathfont:nn #1#2 + { \__um_setmathfont:nn {#2} {#1} } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{ +% \@@_setCJKmainfont:nn, +% \@@_setCJKsansfont:nn, +% \@@_setCJKmonofont:nn} +% \changes{v0.8}{2021/09/15}{展开字体族名称。} +% 用于设置中文字体的辅助函数,来源于 \pkg{xeCJK} 和 \pkg{ctex} 宏包。 +% \begin{macrocode} +%<*class> +\cs_new_protected:Npn \@@_setCJKmainfont:nn #1#2 + { \@@_set_family:xnn { \CJKrmdefault } {#2} {#1} } +\cs_new_protected:Npn \@@_setCJKsansfont:nn #1#2 + { \@@_set_family:xnn { \CJKsfdefault } {#2} {#1} } +\cs_new_protected:Npn \@@_setCJKmonofont:nn #1#2 + { \@@_set_family:xnn { \CJKttdefault } {#2} {#1} } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_set_cjk_font_kai:nn,\fdu@kai} +% 楷体需要单独设置。 +% \begin{macrocode} +\cs_new_protected:Npn \@@_set_cjk_font_kai:nn #1#2 + { \@@_set_family:nnn { fdu@kai } {#2} {#1} } +\cs_new_protected:Npn \fdu@kai + { \@@_switch_family:n { fdu@kai } } +% \end{macrocode} +% \end{macro} +% +% \changes{v0.7d}{2019/03/29}{在字体未提供对应粗体的情况下,允许使用伪粗。} +% +% \begin{macro}{ +% \@@_cjk_font_options:, +% \@@_setCJKmainfont:n, +% \@@_setCJKsansfont:n, +% \@@_setCJKmonofont:n, +% \@@_set_cjk_font_kai:n} +% 将 bold、italic 和 bold italic 统一按照 roman 设置。 +% \begin{macrocode} +\tl_const:Nn \@@_cjk_font_options: + { UprightFont = *, ItalicFont = *, AutoFakeBold = true } +\cs_new_protected:Npx \@@_setCJKmainfont:n #1 + { \@@_setCJKmainfont:nn {#1} { \@@_cjk_font_options: } } +\cs_new_protected:Npx \@@_setCJKsansfont:n #1 + { \@@_setCJKsansfont:nn {#1} { \@@_cjk_font_options: } } +\cs_new_protected:Npx \@@_setCJKmonofont:n #1 + { \@@_setCJKmonofont:nn {#1} { \@@_cjk_font_options: } } +\cs_new_protected:Npx \@@_set_cjk_font_kai:n #1 + { \@@_set_cjk_font_kai:nn {#1} { \@@_cjk_font_options: } } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_set_family:nnn,\@@_set_family:xnn,\@@_switch_family:n} +% 封装 CJK 字体族的设定和切换命令。 +% \begin{macrocode} +\sys_if_engine_xetex:TF + { + \cs_new_eq:NN \@@_set_family:nnn \xeCJK_set_family:nnn + \cs_new_eq:NN \@@_switch_family:n \xeCJK_switch_family:n + } + { + \cs_new_eq:NN \@@_set_family:nnn \ctex_ltj_set_family:nnn + \cs_new_eq:NN \@@_switch_family:n \ctex_ltj_switch_family:n + } +\cs_generate_variant:Nn \@@_set_family:nnn { x } +%</class> +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{ +% \setmainfont, +% \setsansfont, +% \setmonofont, +% \setmathfont, +% \setCJKmainfont, +% \setCJKsansfont, +% \setCJKmonofont} +% 重新定义以上宏包提供的字体选择命令。我们把它放在导言区末尾,使得用户配置不被 +% 模板配置覆盖。 +% \begin{macrocode} +\cs_new_protected:Npn \@@_set_font_helper:n #1 + { + \exp_args:Nc \RenewDocumentCommand { set #1 font } { O { } m O { } } + { + \ctex_at_end_preamble:n + { \use:c { @@_set #1 font:nn } {##2} { ##1, ##3 } } + } + } +\clist_map_inline:nn { main, sans, mono, math } + { \@@_set_font_helper:n {#1} } +%<class>\clist_map_inline:nn { CJKmain, CJKsans, CJKmono } +%<class> { \@@_set_font_helper:n {#1} } +% \end{macrocode} +% \end{macro} +% +% \changes{v0.7e}{2019/04/10}{兼容 Libertinus 和 XITS 字体的文件名变动。} +% \changes{v0.8}{2021/09/15}{判断 Libertinus Sans Bold Oblique 字体是否存在。} +% \changes{v0.9}{2023/02/18}{不再检查 Libertinus 和 XITS 字体的文件名。} +% +% \begin{macro}{\@@_load_font_garamond:} +% EB Garamond 系列。 +% \begin{macrocode} +\cs_new_protected:Npn \@@_load_font_garamond: + { + \@@_setmainfont:nn { EBGaramond } + { + Extension = .otf, + UprightFont = *-Regular, + BoldFont = *-Bold, + ItalicFont = *-Italic, + BoldItalicFont = *-BoldItalic + } + \@@_setsansfont:nn { LibertinusSans } + { + Extension = .otf, + UprightFont = *-Regular, + BoldFont = *-Bold, + ItalicFont = *-Italic, + } + \@@_setmonofont:nn { lmmonolt10 } + { + Extension = .otf, + UprightFont = *-regular, + BoldFont = *-bold, + ItalicFont = *-oblique, + BoldItalicFont = *-boldoblique + } + \@@_setmathfont:nn { Garamond-Math.otf } { } + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_load_font_libertinus:} +% Libertinus 系列。 +% \begin{macrocode} +\cs_new_protected:Npn \@@_load_font_libertinus: + { + \@@_setmainfont:nn { LibertinusSerif } + { + Extension = .otf, + UprightFont = *-Regular, + BoldFont = *-Bold, + ItalicFont = *-Italic, + BoldItalicFont = *-BoldItalic, + } + \@@_setsansfont:nn { LibertinusSans } + { + Extension = .otf, + UprightFont = *-Regular, + BoldFont = *-Bold, + ItalicFont = *-Italic, + } + \@@_setmonofont:nn { lmmonolt10 } + { + Extension = .otf, + UprightFont = *-regular, + BoldFont = *-bold, + ItalicFont = *-oblique, + BoldItalicFont = *-boldoblique + } + \@@_setmathfont:nn { LibertinusMath-Regular.otf } { } + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_load_font_lm:} +% Latin Modern 系列。在 \XeLaTeX{} 和 \LuaLaTeX{} 中已作为默认字体,所以仅需 +% 额外处理数学部分。 +% \begin{macrocode} +\cs_new_protected:Npn \@@_load_font_lm: + { \@@_setmathfont:nn { latinmodern-math.otf } { } } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_load_font_palatino:} +% Palatino 系列。 +% \begin{macrocode} +\cs_new_protected:Npn \@@_load_font_palatino: + { + \@@_setmainfont:nn { texgyrepagella } + { + Extension = .otf, + UprightFont = *-regular, + BoldFont = *-bold, + ItalicFont = *-italic, + BoldItalicFont = *-bolditalic + } + \@@_setsansfont:nn { LibertinusSans } + { + Extension = .otf, + UprightFont = *-Regular, + BoldFont = *-Bold, + ItalicFont = *-Italic, + Scale = MatchUppercase, + } + \@@_setmonofont:nn { lmmonolt10 } + { + Extension = .otf, + UprightFont = *-regular, + BoldFont = *-bold, + ItalicFont = *-oblique, + BoldItalicFont = *-boldoblique + } + \@@_setmathfont:nn { texgyrepagella-math.otf } { } + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_load_font_times:} +% Times 系列。 +% \begin{macrocode} +\cs_new_protected:Npn \@@_load_font_times: + { + \@@_setmainfont:nn { XITS } + { + Extension = .otf, + UprightFont = *-Regular, + BoldFont = *-Bold, + ItalicFont = *-Italic, + BoldItalicFont = *-BoldItalic, + } + \@@_setsansfont:nn { texgyreheros } + { + Extension = .otf, + UprightFont = *-regular, + BoldFont = *-bold, + ItalicFont = *-italic, + BoldItalicFont = *-bolditalic + } + \@@_setmonofont:nn { texgyrecursor } + { + Extension = .otf, + UprightFont = *-regular, + BoldFont = *-bold, + ItalicFont = *-italic, + BoldItalicFont = *-bolditalic, + Ligatures = CommonOff + } + \@@_setmathfont:nn { XITSMath-Regular.otf } + { BoldFont = XITSMath-Bold.otf } + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_load_font_times*:} +% Times* 系列,除数学部分外采用系统字体。 +% \begin{macrocode} +\cs_new_protected:cpn { @@_load_font_ times* : } + { + \@@_setmainfont:nn { Times~ New~ Roman } { } + \@@_setsansfont:nn { Arial } { } + \@@_setmonofont:nn { Courier~ New } { } + \@@_setmathfont:nn { XITSMath-Regular.otf } + { BoldFont = XITSMath-Bold.otf } + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_load_cjk_font_adobe:} +% Adobe 字库。 +% \begin{macrocode} +\cs_new_protected:Npn \@@_load_cjk_font_adobe: + { + \@@_setCJKmainfont:n { AdobeSongStd-Light } + \@@_setCJKsansfont:n { AdobeHeitiStd-Regular } + \@@_setCJKmonofont:n { AdobeFangsongStd-Regular } + \@@_set_cjk_font_kai:n { AdobeKaitiStd-Regular } + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_load_cjk_font_fandol:} +% Fandol 字库。注意它是安装在 TeX 发行版中的,所以使用文件名调用。 +% \begin{macrocode} +\cs_new_protected:Npn \@@_load_cjk_font_fandol: + { + \@@_setCJKmainfont:nn { FandolSong } + { + Extension = .otf, + UprightFont = *-Regular, + BoldFont = *-Bold, + ItalicFont = *-Regular, + BoldItalicFont = *-Bold + } + \@@_setCJKsansfont:nn { FandolHei } + { + Extension = .otf, + UprightFont = *-Regular, + BoldFont = *-Bold, + ItalicFont = *-Regular, + BoldItalicFont = *-Bold + } + \@@_setCJKmonofont:nn { FandolFang } + { + Extension = .otf, + UprightFont = *-Regular, + BoldFont = *-Regular, + ItalicFont = *-Regular, + BoldItalicFont = *-Regular + } + \@@_set_cjk_font_kai:nn { FandolKai } + { + Extension = .otf, + UprightFont = *-Regular, + BoldFont = *-Regular, + ItalicFont = *-Regular, + BoldItalicFont = *-Regular + } + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_load_cjk_font_founder:} +% 方正字库。虽然有粗体(方正小标宋)等,但并非免费,故这里不做处理。 +% \begin{macrocode} +\cs_new_protected:Npn \@@_load_cjk_font_founder: + { + \@@_setCJKmainfont:n { FZShuSong-Z01 } + \@@_setCJKsansfont:n { FZHei-B01 } + \@@_setCJKmonofont:n { FZFangSong-Z02 } + \@@_set_cjk_font_kai:n { FZKai-Z03 } + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_load_cjk_font_mac:} +% macOS 自带中文字体。 +% \begin{macrocode} +\cs_new_protected:Npn \@@_load_cjk_font_mac: + { + \@@_setCJKmainfont:nn { STSongti-SC } + { + UprightFont = *-Light, + BoldFont = *-Bold, + ItalicFont = *-Light, + BoldItalicFont = *-Bold + } + \@@_setCJKsansfont:nn { STHeitiSC } + { + UprightFont = *-Medium, + BoldFont = *-Medium, + ItalicFont = *-Medium, + BoldItalicFont = *-Medium + } + \@@_setCJKmonofont:n { STFangsong } + \@@_set_cjk_font_kai:nn { STKaitiSC } + { + UprightFont = *-Regular, + BoldFont = *-Bold, + ItalicFont = *-Regular, + BoldItalicFont = *-Bold + } + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_load_cjk_font_sinotype:} +% 华文字库。 +% \begin{macrocode} +\cs_new_protected:Npn \@@_load_cjk_font_sinotype: + { + \@@_setCJKmainfont:n { STSong } + \@@_setCJKsansfont:n { STHeiti } + \@@_setCJKmonofont:n { STFangsong } + \@@_set_cjk_font_kai:n { STKaiti } + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_load_cjk_font_sourcehan:} +% 思源宋体、思源黑体。由于没有对应的楷体和仿宋,这里直接给出警告。 +% \begin{macrocode} +\cs_new_protected:Npn \@@_load_cjk_font_sourcehan: + { + \@@_setCJKmainfont:nn { SourceHanSerifSC } + { + UprightFont = *-Regular, + BoldFont = *-Bold, + ItalicFont = *-Regular, + BoldItalicFont = *-Bold + } + \@@_setCJKsansfont:nn { SourceHanSansSC } + { + UprightFont = *-Regular, + BoldFont = *-Bold, + ItalicFont = *-Regular, + BoldItalicFont = *-Bold + } + \@@_warning:n { source-han } + } +\@@_msg_new:nn { source-han } + { Font~ set~ "sourcehan"~ does~ not~ contain~ kaiti~ and~ fangsong. } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_load_cjk_font_windows:} +% Windows 自带中文字体。 +% \begin{macrocode} +\cs_new_protected:Npn \@@_load_cjk_font_windows: + { + \@@_setCJKmainfont:n { SimSun } + \@@_setCJKsansfont:n { SimHei } + \@@_setCJKmonofont:n { FangSong } + \@@_set_cjk_font_kai:n { KaiTi } + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_load_font:} +% 字体加载命令。 +% \begin{macrocode} +\cs_new_protected:Npn \@@_load_font: + { + \use:c { @@_load_font_ \g_@@_fontset_tl : } +%<class> \use:c { @@_load_cjk_font_ \g_@@_cjk_fontset_tl : } + } +\ctex_at_end_preamble:n { \@@_load_font: } +% \end{macrocode} +% \end{macro} +% +%^^A 以下相关代码已在 v0.7c 中移除。 +% \changes{v0.5}{2017/09/09}{重新实现字体调用。核心内容是分离字体的声明与设定, +% 并按照宋、黑、仿、楷划分中文字体。} +% \changes{v0.6}{2017/11/11}{额外处理 XITS 字体的小型大写字母。} +% \changes{v0.5}{2017/09/23}{新增 \kvopt{font}{none} 选项。} +% \changes{v0.5}{2017/09/23}{新增 \kvopt{cjk-font}{none} 选项。} +% \changes{v0.5}{2017/09/23}{同步 \pkg{fontspec} v2.6e。} +% \changes{v0.6}{2017/10/11}{同步 \pkg{unicode-math} v0.8h。} +% +% \subsubsection{数学字体设置} +% +% 根据 GB 3102.11--93 以及 ISO 80000-2:2009 的规定,数学表达式中 +% 表示变量的拉丁字母和希腊字母均应当使用斜体。 +% 这里的 |\keys_set:nn{unicode-math}| 实际相当于 \cs{unimathsetup}。 +% \begin{macrocode} +% TODO: (2018-01-19) Do we need `mathrm=sym`? +\keys_set:nn { unicode-math } + { + math-style = ISO, + bold-style = ISO, +% mathrm = sym + } +% \end{macrocode} +% +% \subsubsection{字号} +% +% \begin{macro}{style/font-size} +% \changes{v0.9}{2023/02/08}{通过引入 \file{ctex-c5size.clo} 来修改字号。} +% |font-size| 不是文档类选项,不能传给 \cls{ctexbook} 文档类,因此 +% 需要手动引入 |.clo| 文件。 +% \begin{macrocode} +\keys_define:nn { fdu / style } + { + font-size .choice:, + font-size .value_required:n = true, + font-size / -4 .code:n = { }, + font-size / 5 .code:n = { \ctex_file_input:n { ctex-c5size.clo } }, +%<class-en> } +% \end{macrocode} +% \end{macro} +% +% \subsubsection{其他设置} +% +% \begin{macro}{style/fullwidth-stop} +% \changes{v0.6}{2017/10/14}{支持类别码和 TECKit 映射两种机制。} +% 设置句号形状(圆圈或是圆点)。 +% \begin{macrocode} +%<*class> + fullwidth-stop .choice:, + fullwidth-stop .value_required:n = true, +% \end{macrocode} +% 利用类别码机制切换,只有显式的\FSID 会被替换。 +% \begin{macrocode} + fullwidth-stop / catcode .code:n = + { \@@_set_fullwidth_stop_catcode: }, +% \end{macrocode} +% 利用 TECKit 映射机制切换,相当于设置了 \tn{defaultCJKfontfeatures} +% |{|\kvopt{Map\-ping}{fullwidth-stop}|}|。这种手段会替换所有出现的\FSID, +% 并且将影响所有字体。只在 \XeTeX{} 下可用。 +% \begin{macrocode} + fullwidth-stop / mapping .code:n = + { + \sys_if_engine_xetex:TF + { + \clist_gset:Nn \g__xeCJK_default_features_clist + { Mapping = fullwidth-stop } + } + { +% \end{macrocode} +% \LuaTeX{} 下改用类别码机制代替,并给出警告。 +% \begin{macrocode} + \sys_if_engine_luatex:T + { + \@@_warning:n { mapping-not-available } + \@@_set_fullwidth_stop_catcode: + } + } + }, + fullwidth-stop / false .code:n = { } + } +% \end{macrocode} +% \end{macro} +% 提示信息。 +% \begin{macrocode} +\@@_msg_new:nn { mapping-not-available } + { + Option~ "fullwidth-stop = mapping"~ is~ not~ available~ in~ LuaTeX. \\ + "fullwidth-stop = catcode"~ will~ be~ set~ instead. + } +% \end{macrocode} +% +% \begin{macro}{\@@_set_fullwidth_stop_catcode:} +% \changes{v0.8}{2021/09/16}{将类别码设置应用于预定义的文本中,并优化实现。} +% 将\FSID 设置为活动符,并定义为句点\FSFW。 +% \begin{macrocode} +\cs_new:Npn \@@_set_fullwidth_stop_catcode: + { + \char_set_active_eq:NN ^^^^3002 \c_@@_fwid_full_stop_tl + \char_set_catcode_active:N ^^^^3002 + \clist_map_inline:nn + { \c_@@_orig_decl_text_tl, \c_@@_auth_decl_text_tl } + { \tl_set_rescan:Nno ##1 { } {##1} } + } +%</class> +% \end{macrocode} +% \end{macro} +% +% \changes{v0.8}{2021/09/15}{允许 \tn{emph} 对中文生效。} +% +% 声明 \tn{emph} 样式序列,使得中文强调以楷体显示。 +% \begin{macrocode} +%<*class> +\DeclareEmphSequence + { + \itshape \fdu@kai, + \upshape \CJKfamily { \CJKfamilydefault }, + } +%</class> +% \end{macrocode} +% +% \changes{v0.6}{2017/10/28}{优化 \LuaTeX{} 下希腊字母、西里尔字母和带圈数字的 +% 显示(\pkg{ctex} v2.4.11 已默认进行处理)。} +% +% \subsection{页眉页脚} +% +% 清除默认页眉页脚格式。 +% \begin{macrocode} +\fancyhf { } +% \end{macrocode} +% +% \begin{macro}{\@@_fancy_head:nn} +% 页眉样式。 +% \begin{macrocode} +\cs_new_protected:Npn \@@_fancy_head:nn #1#2 + { + \fancyhead [#1] +%<class> { \small \fdu@kai \nouppercase {#2} } +%<class-en> { \small \itshape \nouppercase {#2} } + } +% \end{macrocode} +% \end{macro} +% +% 构建页眉,要在单面或双面下分别设置。 +% +% \cs{fancyhead} 的选项中,\opt{E} 和 \opt{O} 分别表示偶数(even)和奇数(odd), 而 \opt{L}、 +% \opt{R} 和 \opt{C} 则分别表示左(left)、右(right)和中间(center)。按照通常的排版规则, +% 双面模式下,偶数页的中间页眉文字在左,奇数页则在右;单面模式下,左右页眉都会显示。 +% \begin{macrocode} +\bool_if:NTF \g_@@_twoside_bool + { + \@@_fancy_head:nn { EL } { \leftmark } + \@@_fancy_head:nn { OR } { \rightmark } + } + { + \@@_fancy_head:nn { L } { \leftmark } + \@@_fancy_head:nn { R } { \rightmark } + } +% \end{macrocode} +% +% 构建页脚,用来显示页码。选项 \opt{C} 表示居中(center)。 +% \begin{macrocode} +\fancyfoot [ C ] { \small \thepage } +% \end{macrocode} +% +% 关闭横线显示(未启用)。 +% \begin{macrocode} +% \RenewDocumentCommand \headrulewidth { } { 0 pt } +% \end{macrocode} +% +% \begin{macro}{\cleardoublepage} +% 重定义 \tn{cleardoublepage},使得偶数页面在没有内容时也不显示页眉页脚,见 +% \url{https://tex.stackexchange.com/a/1683}。 +% \begin{macrocode} +\RenewDocumentCommand \cleardoublepage { } + { + \clearpage + \bool_if:NT \g_@@_twoside_bool + { + \int_if_odd:nF \c@page + { \hbox:n { } \thispagestyle { empty } \newpage } + } + } +% \end{macrocode} +% \end{macro} +% +% \pkg{ctex} 宏包使用 \opt{heading} 选项后,会把页面格式设置为 |headings|。 +% 因此必须在 \pkg{ctex} 调用之后重新设置 \cs{pagestyle} 为 |fancy|。 +% \begin{macrocode} +\pagestyle { fancy } +% \end{macrocode} +% +% \subsection{章节标题结构} +% +% |\keys_set:nn{ctex}| 实际相当于 \cs{ctexset}。 +% \begin{macrocode} +\keys_set:nn { ctex } + { +% \end{macrocode} +% 设置章(chapter)、节(section)与小节(sub-section)标题样式。 +% 此处使用 \kvopt{fixskip}{true} 选项来抑制前后的多余间距。 +% \begin{macrocode} + chapter = + { +%<class> format = \huge \normalfont \sffamily \centering, +%<*class-en> + format = \centering, + nameformat = \LARGE \bfseries, + titleformat = \huge \bfseries, + aftername = \par \nobreak \vskip 10 pt, +%</class-en> + beforeskip = 50 pt, + afterskip = 40 pt, + number = \@@_arabic:n { chapter }, + fixskip = true + }, + section = + { +%<class> format = \Large \normalfont \sffamily \raggedright, +%<class-en> format = \Large \bfseries \raggedright, + beforeskip = 3.5 ex plus 1.0 ex minus 0.2 ex, + afterskip = 2.7 ex plus 0.5 ex, + fixskip = true + }, + subsection = + { +%<class> format = \large \normalfont \sffamily \raggedright, +%<class-en> format = \large \bfseries \raggedright, + beforeskip = 3.25 ex plus 1.0 ex minus 0.2 ex, + afterskip = 2.5 ex plus 0.3 ex, + fixskip = true + } + } +% \end{macrocode} +% +% \changes{v0.7d}{2019/03/24}{优化目录、摘要、参考文献等的标题实现。} +% \changes{v0.9}{2023/02/05}{在目录和书签中删除章标题中的 \tn{quad}。} +% +% \begin{macro}{\@@_sanitize_chapter_title:n} +% 删除章标题中的 \tn{quad}。 +% \begin{macrocode} +\cs_new_protected:Npn \@@_sanitize_chapter_title:n #1 + { + \tl_clear:N \l_@@_tmpa_tl + \tl_set:No \l_@@_tmpa_tl {#1} + \tl_remove_all:Nn \l_@@_tmpa_tl { \quad } + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_chapter:n,\@@_chapter:V} +% 手动生成章的标题,用于摘要、参考文献等。 +% \begin{macrocode} +\cs_new_protected:Npn \@@_chapter:n #1 + { + \@@_sanitize_chapter_title:n {#1} + \group_begin: + \ctexset { chapter / numbering = false } + \chapter [ \l_@@_tmpa_tl ] {#1} + \group_end: + \@@_chapter_header:n {#1} + } +\cs_generate_variant:Nn \@@_chapter:n { V } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_chapter_no_toc:n,\@@_chapter_no_toc:V} +% 目录自身不出现在目录中,需特别处理。参考 +% \url{https://tex.stackexchange.com/a/1821}。 +% \begin{macrocode} +\cs_new_protected:Npn \@@_chapter_no_toc:n #1 + { + \chapter * {#1} + \@@_sanitize_chapter_title:n {#1} + \pdfbookmark [0] { \l_@@_tmpa_tl } { toc } + \@@_chapter_header:n {#1} + } +\cs_generate_variant:Nn \@@_chapter_no_toc:n { V } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_chapter_header:n} +% \changes{v0.8}{2022/01/18}{简化单页模式下页眉的实现方式。} +% 单页模式下,目录、摘要、符号表等的页眉中间为相应标题,左右为空。这里通过居中的 +% \tn{leftmark} 实现。 +% \begin{macrocode} +\cs_new_protected:Npn \@@_chapter_header:n #1 + { + \bool_if:NTF \g_@@_twoside_bool + { \markboth {#1} {#1} } + { \markboth { \hfill #1 \hfill } { } } + } +% \end{macrocode} +% \end{macro} +% +% \subsection{脚注} +% +% \changes{v0.3}{2017/02/21}{支持脚注。} +% +% \subsubsection{编号样式} +% +% 各种脚注编号样式的名称。 +% \begin{macrocode} +\clist_map_inline:nn + { + { plain } { plain }, + { libertinus } { libertinus }, + { libertinus_neg } { libertinus* }, + { libertinus_sans } { libertinus-sans }, + { pifont } { pifont }, + { pifont_neg } { pifont* }, + { pifont_sans } { pifont-sans }, + { pifont_sans_neg } { pifont-sans* }, + { xits } { xits }, + { xits_sans } { xits-sans }, + { xits_sans_neg } { xits-sans* } + } + { \@@_define_fn_style:nn #1 } +% \end{macrocode} +% +% \begin{variable}{\l_@@_fn_style_tl} +% 保存当前使用的脚注编号样式。 +% \begin{macrocode} +\tl_new:N \l_@@_fn_style_tl +% \end{macrocode} +% \end{variable} +% +% \begin{macrocode} +\keys_define:nn { fdu / style } + { +% \end{macrocode} +% +% \begin{macro}{style/footnote-style} +% 脚注类型共分四大类: +% \begin{itemize} +% \item \opt{plain}:使用当前字体; +% \item \opt{libertinus}:取自 Libertinus Serif 和 Libertinus Sans +% 字体; +% \item \opt{pifont}:使用 \pkg{pifont} 宏包; +% \item \opt{xits}:取自 XITS 字体。 +% \end{itemize} +% 不带任何修饰的为衬线阳文符号,带“|sans|”的为无衬线符号,带“|*|”的 +% 为阴文版本。 +% \begin{macrocode} + footnote-style .choices:nn = + { + plain, + libertinus, libertinus*, libertinus-sans, + pifont, pifont*, pifont-sans, pifont-sans*, + xits, xits-sans, xits-sans* + } +% \end{macrocode} +% \changes{v0.6}{2017/11/12}{不再依赖 XITS-Math 字体。} +% 若使用 \opt{pifont} 类型,则需引入 \pkg{pifont} 宏包。 +% \begin{macrocode} + { + \tl_gset_eq:NN \l_@@_fn_style_tl \l_keys_choice_tl + \int_compare:nT { 5 <= \l_keys_choice_int <= 8 } + { \RequirePackage { pifont } } + }, + footnote-style .value_required:n = true + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_fn_symbol_libertinus:n} +% \opt{libertinus} 普通版。\numrange{1}{20} 为数字,\numrange{21}{46} +% 为小写英文字母,\numrange{47}{72} 为大写英文字母。 +% \begin{macrocode} +\cs_new:Npn \@@_fn_symbol_libertinus:n #1 + { + \int_compare:nTF { #1 >= 21 } + { + \int_compare:nTF { #1 >= 47 } + { \@@_symbol:n { \int_eval:n { "24B6 - 47 + #1 } } } + { \@@_symbol:n { \int_eval:n { "24D0 - 21 + #1 } } } + } + { \@@_symbol:n { \int_eval:n { "2460 - 1 + #1 } } } + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_fn_symbol_libertinus_neg:n} +% \opt{libertinus} 阴文衬线版。只含 \numrange{1}{20}。 +% \begin{macrocode} +\cs_new:Npn \@@_fn_symbol_libertinus_neg:n #1 + { + \int_compare:nTF { #1 >= 11 } + { \@@_symbol:n { \int_eval:n { "24EB - 11 + #1 } } } + { \@@_symbol:n { \int_eval:n { "2776 - 1 + #1 } } } + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_fn_symbol_pifont:n} +% \opt{pifont} 普通版。以下四种都只包含 \numrange{1}{10}。 +% \begin{macrocode} +\cs_new:Npn \@@_fn_symbol_pifont:n #1 + { \ding { \int_eval:n { 171 + #1 } } } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_fn_symbol_pifont_neg:n} +% \opt{pifont} 阴文衬线版。 +% \begin{macrocode} +\cs_new:Npn \@@_fn_symbol_pifont_neg:n #1 + { \ding { \int_eval:n { 181 + #1 } } } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_fn_symbol_pifont_sans:n} +% \opt{pifont} 阳文无衬线版。 +% \begin{macrocode} +\cs_new:Npn \@@_fn_symbol_pifont_sans:n #1 + { \ding { \int_eval:n { 191 + #1 } } } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_fn_symbol_pifont_sans_neg:n} +% \opt{pifont} 阴文无衬线版。 +% \begin{macrocode} +\cs_new:Npn \@@_fn_symbol_pifont_sans_neg:n #1 + { \ding { \int_eval:n { 201 + #1 } } } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_fn_symbol_xits:n} +% \opt{xits} 普通版。\numrange{1}{9} 为数字,\numrange{10}{35} +% 为小写英文字母,\numrange{36}{61} 为大写英文字母。 +% \begin{macrocode} +\cs_new:Npn \@@_fn_symbol_xits:n #1 + { + \int_compare:nTF { #1 >= 10 } + { + \int_compare:nTF { #1 >= 36 } + { \@@_symbol:n { \int_eval:n { "24B6 - 36 + #1 } } } + { \@@_symbol:n { \int_eval:n { "24D0 - 10 + #1 } } } + } + { \@@_symbol:n { \int_eval:n { "2460 - 1 + #1 } } } + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_fn_symbol_xits_sans:n} +% \opt{xits} 阳文无衬线版。只包含 \numrange{1}{10}。 +% \begin{macrocode} +\cs_new:Npn \@@_fn_symbol_xits_sans:n #1 + { \@@_symbol:n { \int_eval:n { "2780 - 1 + #1 } } } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_fn_symbol_xits_sans_neg:n} +% \opt{xits} 阴文无衬线版。也只包含 \numrange{1}{10}。 +% \begin{macrocode} +\cs_new:Npn \@@_fn_symbol_xits_sans_neg:n #1 + { \@@_symbol:n { \int_eval:n { "278A - 1 + #1 } } } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\thefootnote} +% \changes{v0.7}{2018/01/17}{改为可完全展开的命令。} +% 重定义脚注编号。 +% \begin{macrocode} +\cs_set:Npn \thefootnote { \fdu_footnote_number:N \c@footnote } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\fdu_footnote_number:N} +% 脚注编号样式。 +% \begin{macrocode} +\cs_new:Npn \fdu_footnote_number:N #1 + { + \tl_case:NnF \l_@@_fn_style_tl + { +% \end{macrocode} +% \opt{plain} 类型直接使用计数器 |footnote| 的值。 +% \begin{macrocode} + \c_@@_fn_style_plain_tl + { \int_use:N #1 } +% \end{macrocode} +% \opt{libertinus} 类型需要使用 Libertinus Serif 或 +% Libertinus Sans 字体。 +% \begin{macrocode} + \c_@@_fn_style_libertinus_tl + { + \fontspec { LibertinusSerif-Regular.otf } + \@@_fn_symbol_libertinus:n {#1} + } + \c_@@_fn_style_libertinus_neg_tl + { + \fontspec { LibertinusSerif-Regular.otf } + \@@_fn_symbol_libertinus_neg:n {#1} + } + \c_@@_fn_style_libertinus_sans_tl + { + \fontspec { LibertinusSans-Regular.otf } + \@@_fn_symbol_libertinus:n {#1} + } +% \end{macrocode} +% \opt{pifont} 类型无需进行额外的操作。 +% \begin{macrocode} + \c_@@_fn_style_pifont_tl + { \@@_fn_symbol_pifont:n {#1} } + \c_@@_fn_style_pifont_neg_tl + { \@@_fn_symbol_pifont_neg:n {#1} } + \c_@@_fn_style_pifont_sans_tl + { \@@_fn_symbol_pifont_sans:n {#1} } + \c_@@_fn_style_pifont_sans_neg_tl + { \@@_fn_symbol_pifont_sans_neg:n {#1} } +% \end{macrocode} +% \opt{xits} 类型需要临时切换数学字体。 +% \begin{macrocode} + \c_@@_fn_style_xits_tl + { + \fontspec { XITS-Regular.otf } + \@@_fn_symbol_xits:n {#1} + } + \c_@@_fn_style_xits_sans_tl + { + \fontspec { XITS-Regular.otf } + \@@_fn_symbol_xits_sans:n {#1} + } + \c_@@_fn_style_xits_sans_neg_tl + { + \fontspec { XITS-Regular.otf } + \@@_fn_symbol_xits_sans_neg:n {#1} + } + } +% \end{macrocode} +% 变量 \cs{l_@@_fn_style_tl} 保存的类型未知时,默认使用 \opt{plain} +% 类型。 +% \begin{macrocode} + { \int_use:N #1 } + } +% \end{macrocode} +% \end{macro} +% +% \subsubsection{整体样式} +% +% \begin{macro}[int]{\@makefntext} +% \changes{v0.7}{2018/01/18}{简化实现,兼容 \pkg{fancyvrb} 宏包。 +% 不再使用悬挂缩进。} +% 重定义内部脚注文字命令,使脚注编号不使用上标,宽度为 \qty{1.5}{em}。 +% 见 \url{http://tex.stackexchange.com/q/19844} 和 +% \url{https://www.zhihu.com/question/53030087}。 +% \begin{macrocode} +\cs_set:Npn \@makefntext #1 + { + \mode_leave_vertical: + \hbox_to_wd:nn { 1.5 em } { \@thefnmark \hfil } + #1 + } +% \end{macrocode} +% \end{macro} +% +% \subsection{定理环境} +% +% \changes{v0.3}{2017/05/07}{新增定理环境。} +% +% \begin{variable}{\c_@@_thm_style_plain_clist, +% \c_@@_thm_style_break_clist} +% 保存 \opt{plain}、\opt{break} 两种类型的定理样式名称。 +% \begin{macrocode} +\clist_const:Nn \c_@@_thm_style_plain_clist + { plain, margin, change } +\clist_const:Nn \c_@@_thm_style_break_clist + { break, marginbreak, changebreak } +% \end{macrocode} +% \end{variable} +% +% \begin{variable}{\l_@@_thm_style_tl, +% \l_@@_thm_header_font_tl, +% \l_@@_thm_body_font_tl, +% \l_@@_thm_qed_tl, +% \l_@@_thm_counter_tl} +% 定理所需的一些字段。 +% \begin{macrocode} +\tl_new:N \l_@@_thm_style_tl +\tl_new:N \l_@@_thm_header_font_tl +\tl_new:N \l_@@_thm_body_font_tl +\tl_new:N \l_@@_thm_qed_tl +\tl_new:N \l_@@_thm_counter_tl +% \end{macrocode} +% \end{variable} +% +% \begin{macro}{theorem/style, +% theorem/header-font, +% theorem/body-font, +% theorem/qed, +% theorem/counter} +% 定义 |fdu/theorem| 键值类。 +% \begin{macrocode} +\keys_define:nn { fdu / theorem } + { + style .tl_set:N = \l_@@_thm_style_tl, + header-font .tl_set:N = \l_@@_thm_header_font_tl, + body-font .tl_set:N = \l_@@_thm_body_font_tl, + qed .tl_set:N = \l_@@_thm_qed_tl, + counter .tl_set:N = \l_@@_thm_counter_tl + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_thm_ntheorem_style:n,\@@_thm_ntheorem_new:w} +% 拷贝 \pkg{ntheorem} 命令。 +% \begin{macrocode} +\cs_new_eq:NN \@@_thm_ntheorem_style:n \theoremstyle +\cs_new_eq:NN \@@_thm_ntheorem_new:w \newtheorem +% \end{macrocode} +% \end{macro} +% +% \changes{v0.7}{2017/12/12}{原 \cs{fdunewtheorem} 命令更名为 +% \cs{new\-the\-orem}。} +% +% \begin{macro}{\newtheorem} +% \changes{v0.9}{2023/02/08}{改用 \cs{DeclareDocumentCommand} 定义。} +% 定义新的定理环境。 +% \begin{macrocode} +\DeclareDocumentCommand \newtheorem { s o m m } + { +% \end{macrocode} +% 默认情况下,由 \cs{newtheorem*} 创建的定理其证毕符号为 \cs{QED}, +% 而由 \cs{new\-the\-orem} 创建的则不带证毕符号。符号 \cs{QED} 由 +% \pkg{unicode-math} 宏包提供。 +% \begin{macrocode} + \IfBooleanTF {#1} + { \tl_set:Nn \l_@@_thm_qed_tl { \ensuremath { \QED } } } + { \tl_set:Nn \l_@@_thm_qed_tl { } } +% \end{macrocode} +% 设置默认样式为 \opt{plain}。 +% \begin{macrocode} +% TODO: (2017-12-07) Move to interface + \tl_set:Nn \l_@@_thm_style_tl { plain } +% \end{macrocode} +% 处理可选参数。利用 |fdu/theorem| 键值对设置,并按此修改证毕符号、 +% 定理头字体和定理正文字体。 +% \begin{macrocode} + \IfValueT {#2} { \keys_set:nn { fdu / theorem } {#2} } + \fdu_thm_set_header_font:V \l_@@_thm_header_font_tl + \fdu_thm_set_body_font:V \l_@@_thm_body_font_tl + \fdu_thm_set_qed:V \l_@@_thm_qed_tl +% \end{macrocode} +% \cs{newtheorem} 负责创建编号定理,而 \cs{newtheorem*} +% 则负责创建无编号定理。以下分这两种情况处理。 +% \begin{macrocode} + \IfBooleanTF {#1} + { +% \end{macrocode} +% 带 |*| 的版本原则上只接受 \opt{plain} 和 \opt{break} 两种样式, +% 其余样式将被转换成这两者其中之一。 +% \begin{macrocode} + \clist_if_in:nVF { plain, break } \l_@@_thm_style_tl + { + \clist_if_in:NVTF + \c_@@_thm_style_plain_clist \l_@@_thm_style_tl + { \@@_thm_redefine_style:n { plain } } + { + \clist_if_in:NVTF + \c_@@_thm_style_break_clist \l_@@_thm_style_tl + { \@@_thm_redefine_style:n { break } } + { + \@@_error:nx { unknown-theorem-style } + { \l_@@_thm_style_tl } + } + } + } +% \end{macrocode} +% \pkg{ntheorem} 宏包提供的无编号定理带有 |nonumber| 前缀, +% 这里将其加上。 +% \begin{macrocode} + \tl_put_left:Nn \l_@@_thm_style_tl { nonumber } + \fdu_thm_new_no_number:Vxx \l_@@_thm_style_tl {#3} {#4} + } + { +% \end{macrocode} +% 不带 |*| 的版本支持不含“|nonumber|”的所有定理样式。 +% \begin{macrocode} + \clist_clear:N \l_@@_tmpa_clist + \clist_concat:NNN \l_@@_tmpa_clist + \c_@@_thm_style_plain_clist \c_@@_thm_style_break_clist + \clist_if_in:NVF \l_@@_tmpa_clist \l_@@_thm_style_tl + { + \@@_error:nx { unknown-theorem-style } + { \l_@@_thm_style_tl } + } + \fdu_thm_new:VVxx \l_@@_thm_style_tl \l_@@_thm_counter_tl + {#3} {#4} + } + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_thm_redefine_style:n} +% 重定义定理样式,并给出警告。 +% \begin{macrocode} +\cs_new:Npn \@@_thm_redefine_style:n #1 + { + \@@_warning:nxx { redefine-theorem-style } + {#1} { \l_@@_thm_style_tl } + \tl_set:Nn \l_@@_thm_style_tl {#1} + } +% \end{macrocode} +% \end{macro} +% +% 提示信息。 +% \begin{macrocode} +\@@_msg_new:nn { redefine-theorem-style } + { Theorem~ style~ "#2"~ will~ be~ redefined~ as~ "#1". } +\@@_msg_new:nn { unknown-theorem-style } + { Theorem~ style~ "#1"~ is~ unknown. } +% \end{macrocode} +% +% \begin{macro}{\fdu_thm_new:nnnn,\fdu_thm_new:VVxx} +% 带编号的定理环境。 +% \begin{arguments} +% \item 样式 +% \item 计数器 +% \item 定理环境名称 +% \item 定理头文字 +% \end{arguments} +% \begin{macrocode} +\cs_new:Npn \fdu_thm_new:nnnn #1#2#3#4 + { + \@@_thm_ntheorem_style:n {#1} + \@@_thm_ntheorem_new:w {#3} {#4} [#2] + } +\cs_generate_variant:Nn \fdu_thm_new:nnnn { VVxx } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\fdu_thm_new_no_number:nnn, +% \fdu_thm_new_no_number:Vxx} +% 不带编号的定理环境。 +% \begin{arguments} +% \item 样式 +% \item 定理环境名称 +% \item 定理头文字 +% \end{arguments} +% \begin{macrocode} +\cs_new:Npn \fdu_thm_new_no_number:nnn #1#2#3 + { + \@@_thm_ntheorem_style:n {#1} + \@@_thm_ntheorem_new:w {#2} {#3} + } +\cs_generate_variant:Nn \fdu_thm_new_no_number:nnn { Vxx } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\fdu_thm_set_qed:n, +% \fdu_thm_set_header_font:n, +% \fdu_thm_set_body_font:n, +% \fdu_thm_set_qed:V, +% \fdu_thm_set_header_font:V, +% \fdu_thm_set_body_font:V} +% 封装 \pkg{ntheorem} 宏包提供的若干命令,分别用以设置证毕符号、 +% 定理头字体和定理正文字体。 +% \begin{macrocode} +\cs_new:Npn \fdu_thm_set_qed:n #1 { \theoremsymbol {#1} } +\cs_new:Npn \fdu_thm_set_header_font:n #1 { \theoremheaderfont {#1} } +\cs_new:Npn \fdu_thm_set_body_font:n #1 { \theorembodyfont {#1} } +\cs_generate_variant:Nn \fdu_thm_set_qed:n { V } +\cs_generate_variant:Nn \fdu_thm_set_header_font:n { V } +\cs_generate_variant:Nn \fdu_thm_set_body_font:n { V } +% \end{macrocode} +% \end{macro} +% +% \subsection{图表绘制;浮动体} +% +% \changes{v0.3}{2017/07/09}{支持浮动体。} +% +% 分别设置浮动体 \env{figure} 和 \env{table} 的标题样式。 +% \begin{macrocode} +\captionsetup [ figure ] + { + font = small, + labelsep = quad + } +\captionsetup [ table ] + { + font = { small, sf }, + labelsep = quad + } +% \end{macrocode} +% +% \begin{macro}{\thefigure,\thetable} +% \changes{v0.7}{2018/01/17}{改为可完全展开的命令。} +% \changes{v0.8}{2021/03/10}{直接调用 \tn{thechapter} 使得附录中的图表编号正确显示。} +% 重定义图表编号。 +% \begin{macrocode} +\cs_set:Npn \thefigure + { \thechapter - \@@_arabic:n { figure } } +\cs_set:Npn \thetable + { \thechapter - \@@_arabic:n { table } } +% \end{macrocode} +% \end{macro} +% +% \subsection{封面} +% +% \subsubsection{信息录入} +% +% \begin{variable}{\l_@@_info_title_tl, +% \l_@@_info_date_tl, +% \l_@@_info_author_tl, +% \l_@@_info_supervisor_tl, +% \l_@@_info_department_tl, +% \l_@@_info_major_tl, +% \l_@@_info_student_id_tl, +% \l_@@_info_school_id_tl, +% \l_@@_info_clc_tl, +% \l_@@_info_jel_tl, +% \l_@@_info_instructors_clist, +% \l_@@_info_keywords_clist} +% 封面所需的一些字段。 +% \begin{macrocode} +\clist_map_inline:nn + { + title, date, author, supervisor, department, major, student_id, + school_id, clc, jel + } + { \tl_new:c { l_@@_info_ #1 _tl } } +\clist_new:N \l_@@_info_instructors_clist +\clist_new:N \l_@@_info_keywords_clist +% \end{macrocode} +% \end{variable} +% +% \begin{variable}{\l_@@_info_title_en_tl, +% \l_@@_info_author_en_tl, +% \l_@@_info_supervisor_en_tl, +% \l_@@_info_department_en_tl, +% \l_@@_info_major_en_tl, +% \l_@@_info_keywords_en_clist} +% 对应的英文字段。 +% \begin{macrocode} +\clist_map_inline:nn + { title, author, supervisor, department, major } + { \tl_new:c { l_@@_info_ #1 _en_tl } } +\clist_new:N \l_@@_info_keywords_en_clist +% \end{macrocode} +% \end{variable} +% +% \begin{variable}{\l_@@_info_degree_type_int} +% 学位类型。1 为学术学位,2 为专业学位。 +% \begin{macrocode} +\int_new:N \l_@@_info_degree_type_int +% \end{macrocode} +% \end{variable} +% +% \changes{v0.9}{2023/02/12}{删除论文标题中的 \tn{\textbackslash} 和汉字间的空格。} +% +% \begin{variable}{\l_@@_info_title_sanitized_tl, +% \l_@@_info_title_en_sanitized_tl} +% 处理后的论文标题。 +% \begin{macrocode} +\tl_new:N \l_@@_info_title_sanitized_tl +\tl_new:N \l_@@_info_title_en_sanitized_tl +% \end{macrocode} +% \end{variable} +% +% \begin{macro}{\@@_set_title:nn} +% 设置论文标题,并删除其中的 |\\| 和汉字间的空格。 +% \begin{macrocode} +\cs_new_protected:Npn \@@_set_title:nn #1#2 + { + \tl_set:cn { l_@@_info_ #1 _tl } {#2} + \tl_set:cn { l_@@_info_ #1 _sanitized_tl } {#2} + \tl_replace_all:cnn { l_@@_info_ #1 _sanitized_tl } { \\ } { ~ } + \regex_replace_all:nnc + { \s+ } { \ } + { l_@@_info_ #1 _sanitized_tl } + \regex_replace_all:nnc + { ([\x{4e00}-\x{9fff}]) \s+ ([\x{4e00}-\x{9fff}]) } { \1 \2 } + { l_@@_info_ #1 _sanitized_tl } + } +% \end{macrocode} +% \end{macro} +% +% 定义 |fdu/info| 键值类。 +% \begin{macrocode} +\keys_define:nn { fdu / info } + { +% \end{macrocode} +% +% \changes{v0.7}{2018/02/01}{新增 \opt{info/degree} 选项。} +% +% \begin{macro}{info/degree} +% 学位类型。只对硕士论文有效。 +% \begin{macrocode} + degree .choices:nn = + { academic, professional } + { \int_set_eq:NN \l_@@_info_degree_type_int \l_keys_choice_int }, +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{info/title,info/title*} +% 论文题目。以下带星号的项目均表示相应的英文字段。 +% \begin{macrocode} + title .code:n = { \@@_set_title:nn { title } {#1} }, + title* .code:n = { \@@_set_title:nn { title_en } {#1} }, +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{info/date} +% 论文完成日期。 +% \begin{macrocode} + date .tl_set:N = \l_@@_info_date_tl, +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{info/author,info/author*} +% 作者姓名。 +% \begin{macrocode} + author .tl_set:N = \l_@@_info_author_tl, + author* .tl_set:N = \l_@@_info_author_en_tl, +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{info/supervisor,info/supervisor*} +% 导师姓名。 +% \begin{macrocode} + supervisor .tl_set:N = \l_@@_info_supervisor_tl, +% supervisor* .tl_set:N = \l_@@_info_supervisor_en_tl, +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{info/instructors} +% 指导小组成员。 +% \begin{macrocode} + instructors .clist_set:N = \l_@@_info_instructors_clist, +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{info/department,info/department*} +% 院系。 +% \begin{macrocode} + department .tl_set:N = \l_@@_info_department_tl, +% department* .tl_set:N = \l_@@_info_department_en_tl, +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{info/major,info/major*} +% 专业。 +% \begin{macrocode} + major .tl_set:N = \l_@@_info_major_tl, +% major* .tl_set:N = \l_@@_info_major_en_tl, +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{info/student-id} +% 学号。 +% \begin{macrocode} + student-id .tl_set:N = \l_@@_info_student_id_tl, +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{info/school-id} +% 学校代码。 +% \begin{macrocode} + school-id .tl_set:N = \l_@@_info_school_id_tl, +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{info/keywords,info/keywords*} +% 论文关键字。 +% \begin{macrocode} + keywords .clist_set:N = \l_@@_info_keywords_clist, + keywords* .clist_set:N = \l_@@_info_keywords_en_clist, +% \end{macrocode} +% \end{macro} +% +% \changes{v0.8}{2021/09/16}{新增 \opt{info/jel} 选项。} +% +% \begin{macro}{info/clc,info/jel} +% 中图分类号和 JEL 分类号。 +% \begin{macrocode} + clc .tl_set:N = \l_@@_info_clc_tl, + jel .tl_set:N = \l_@@_info_jel_tl + } +% \end{macrocode} +% \end{macro} +% +% \changes{v0.4}{2017/08/10}{新增 \opt{style/logo} 与 +% \opt{style/logo-size} 选项。} +% +% \begin{variable}{\l_@@_cover_logo_tl,\l_@@_cover_logo_size_clist} +% \begin{macrocode} +\tl_new:N \l_@@_cover_logo_tl +\clist_new:N \l_@@_cover_logo_size_clist +% \end{macrocode} +% \end{variable} +% +% \begin{macro}{style/logo,style/logo-size} +% 校名图片的文件名和尺寸。 +% \begin{macrocode} +\keys_define:nn { fdu / style } + { + logo .tl_set:N = \l_@@_cover_logo_tl, + logo-size .clist_set:N = \l_@@_cover_logo_size_clist + } +% \end{macrocode} +% \end{macro} +% +% \subsubsection{密级} +% +% \changes{v0.3}{2017/07/04}{新增 \opt{info/secret-level} 与 +% \opt{info/secret-year} 选项。} +% +% \begin{variable}{\l_@@_secret_bool} +% 是否显示密级。 +% \begin{macrocode} +\bool_new:N \l_@@_secret_bool +% \end{macrocode} +% \end{variable} +% +% \begin{variable}{\l_@@_info_secret_level_tl} +% 保存当前的密级。 +% \begin{macrocode} +\tl_new:N \l_@@_info_secret_level_tl +% \end{macrocode} +% \end{variable} +% +% \begin{macrocode} +\keys_define:nn { fdu / info } + { +% \end{macrocode} +% +% \begin{macro}{info/secret-level} +% \changes{v0.6}{2017/11/11}{不再依赖 XITS-Math 字体。} +% 密级。\opt{none} 表示不涉密,\opt{i}、\opt{ii}、\opt{iii} 分别为 +% 秘密、机密、绝密。 +% \begin{macrocode} + secret-level .choices:nn = + { none, i, ii, iii } + { + \int_compare:nTF { \l_keys_choice_int >= 2 } + { + \bool_set_true:N \l_@@_secret_bool + \tl_set:Nn \l_@@_info_secret_level_tl + { + \clist_item:Nn \c_@@_secret_clist + { \l_keys_choice_int - 1 } + } + } + { \bool_set_false:N \l_@@_secret_bool } + }, + secret-level .value_required:n = true, +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{info/secret-year} +% 保密年限。 +% \begin{macrocode} + secret-year .tl_set:N = \l_@@_info_secret_year_tl + } +% \end{macrocode} +% \end{macro} +% +% \subsubsection{定义内部函数} +% +% \begin{macro}{\@@_spread_box:nn,\@@_spread_box:no} +% 分散对齐的水平盒子。 +% \begin{arguments} +% \item 宽度 +% \item 内容 +% \end{arguments} +% 利用 \cs{tl_map_inline:nn} 在字符间插入 \tn{hfil};紧随其后的 \tn{unskip} +% 将会去掉最后一个 \tn{hfil}。见 \url{https://tex.stackexchange.com/q/169689}。 +% \begin{macrocode} +\cs_new_protected:Npn \@@_spread_box:nn #1#2 + { + \mode_leave_vertical: + \hbox_to_wd:nn {#1} { \tl_map_inline:nn {#2} { ##1 \hfil } \unskip } + } +\cs_generate_variant:Nn \@@_spread_box:nn { no } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_center_box:nn,\@@_center_box:Vn} +% 居中对齐的水平盒子。 +% \begin{macrocode} +\cs_new_protected:Npn \@@_center_box:nn #1#2 + { + \mode_leave_vertical: + \hbox_to_wd:nn {#1} { \hfil #2 \hfil } + } +\cs_generate_variant:Nn \@@_center_box:nn { Vn } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_fixed_width_box:nn} +% 限宽盒子(允许换行)。 +% \begin{macrocode} +\cs_new:Npn \@@_fixed_width_box:nn #1#2 + { \parbox {#1} {#2} } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_fixed_width_center_box:nn} +% 居中对齐的限宽盒子(允许换行)。 +% \begin{macrocode} +\cs_new:Npn \@@_fixed_width_center_box:nn #1#2 + { \parbox {#1} { \centering #2 } } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_get_text_width:Nn,\@@_get_text_width:NV} +% 获取文本宽度,并存入 |dim| 型变量。 +% \begin{arguments} +% \item |dim| 型变量 +% \item 内容 +% \end{arguments} +% \begin{macrocode} +\cs_new:Npn \@@_get_text_width:Nn #1#2 + { + \hbox_set:Nn \l_@@_tmpa_box {#2} + \dim_set:Nn #1 { \box_wd:N \l_@@_tmpa_box } + } +\cs_generate_variant:Nn \@@_get_text_width:Nn { NV } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_blank_underline:n} +% \changes{v0.4}{2017/08/14}{改用 \tn{rule} 绘制下划线,不再依赖 +% \pkg{ulem} 宏包。} +% 下划线占位符。|#1|: 长度。 +% \begin{macrocode} +\cs_new:Npn \@@_blank_underline:n #1 + { \rule [ -0.5 ex ] {#1} { 0.4 pt } } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_line_spread:N,\@@_line_spread:n} +% 设置行距。|#1|: 行距倍数 |fp| 变量。 +% \begin{macrocode} +\cs_new:Npn \@@_line_spread:N #1 + { \linespread { \fp_use:N #1 } \selectfont } +\cs_new:Npn \@@_line_spread:n #1 + { \linespread {#1} \selectfont } +% \end{macrocode} +% \end{macro} +% +% \subsubsection{封面各部件} +% +% \changes{v0.5}{2017/09/19}{使用 \pkg{expl3} 以及内部函数改写 +% 封面,减少对 \LaTeXe{} 的依赖。} +% +% \begin{macro}{\@@_cover_id:,\@@_cover_id_aux:n} +% 右上角的学校代码和学号。 +% \begin{macrocode} +\cs_new_protected:Npn \@@_cover_id: + { + \@@_fixed_width_box:nn { 120 pt } + { + \bool_if:NT \l_@@_secret_bool + { + \group_begin: + \sffamily + \@@_cover_id_aux:n { secret_level } + \c_@@_name_secret_star_tl + \l_@@_info_secret_year_tl + \group_end: + \par + } + \@@_cover_id_aux:n { school_id } \par + \@@_cover_id_aux:n { student_id } + } +% \end{macrocode} +% 插入一个宽度为负的水平盒子以减少右侧边距。 +% \begin{macrocode} + \hbox_to_wd:nn { -24 pt } { } + } +\cs_new:Npn \@@_cover_id_aux:n #1 + { + \tl_use:c { c_@@_name_ #1 _tl } + \c_@@_fwid_colon_tl + \tl_use:c { l_@@_info_ #1 _tl } + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_cover_logo:} +% 插入校名图片。根据参数 \opt{width} 和 \opt{height} 是否为空依次 +% 判断。\cs{l_@@_cover_logo_size_clist} 中超过两个的参数将被忽略。 +% \begin{macrocode} +\cs_new_protected:Npn \@@_cover_logo: + { + \clist_pop:NN \l_@@_cover_logo_size_clist \l_@@_tmpa_tl + \clist_pop:NNTF \l_@@_cover_logo_size_clist \l_@@_tmpb_tl + { + \tl_if_empty:NTF \l_@@_tmpa_tl + { \includegraphics [ height = \l_@@_tmpb_tl ] } + { + \includegraphics + [ width = \l_@@_tmpa_tl, height = \l_@@_tmpb_tl ] + } + } + { \includegraphics [ width = \l_@@_tmpa_tl ] } + { \l_@@_cover_logo_tl } + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_cover_type:} +% 论文类型。 +% \begin{macrocode} +\cs_new_protected:Npn \@@_cover_type: + { + \tl_set:Nx \l_@@_tmpa_tl + { + \clist_item:Nn \c_@@_thesis_type_clist + { \g_@@_thesis_type_int } + } + \@@_spread_box:no { 0.45 \textwidth } { \l_@@_tmpa_tl } + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_cover_degree:} +% \changes{v0.7c}{2019/03/12}{允许博士学位论文使用学位类型。} +% 学位类型。 +% \begin{macrocode} +\cs_new_protected:Npn \@@_cover_degree: + { + \int_compare:nT { \g_@@_thesis_type_int != 3 } + { + \c_@@_fwid_left_paren_tl + \clist_item:Nn \c_@@_degree_type_clist + { \l_@@_info_degree_type_int } + \c_@@_fwid_right_paren_tl + } + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_cover_info_left:n} +% 信息栏左侧字段。 +% \begin{macrocode} +\cs_new_protected:Npn \@@_cover_info_left:n #1 + { + \int_case:nn { \l_@@_info_degree_type_int } + { + { 1 } { \_@@_spread_box:nn { 6 em } {#1} } + { 2 } { \_@@_spread_box:nn { 9 em } {#1} } + } + } +% \end{macrocode} +% \end{macro} +% +% \begin{variable}{\c_@@_cover_info_align_tl} +% 信息栏对齐格式:左右两栏均居中,中间以冒号分隔。 +% \begin{macrocode} +\tl_const:Nn \c_@@_cover_info_align_tl + { c @ { \c_@@_fwid_colon_tl } c } +% \end{macrocode} +% \end{variable} +% +% \begin{macro}{\@@_cover_info:} +% \changes{v0.8}{2021/09/21}{调整专业学位的封面信息栏。} +% \changes{v0.9}{2023/02/05}{封面信息栏改用表格实现。} +% 信息栏。 +% \begin{macrocode} +\cs_new_protected:Npn \@@_cover_info: + { + \group_begin: + \zihao { 4 } +% \end{macrocode} +% 专业学位与学术学位对应的左侧字段有所不同,这里统一存入 \cs{c_@@_name_major_tl}。 +% \begin{macrocode} + \int_compare:nNnT { \l_@@_info_degree_type_int } = { 2 } + { + \tl_set_eq:NN + \c_@@_name_major_tl \c_@@_name_major_professional_tl + } +% \end{macrocode} +% 将信息栏的每一行存入 |clist| 变量中。 +% \begin{macrocode} + \clist_clear:N \l_@@_tmpa_clist + \clist_map_inline:nn { department, major, author, supervisor, date } + { + \clist_gput_right:Nn \l_@@_tmpa_clist + { + \exp_args:Nx \@@_cover_info_left:n + { \tl_use:c { c_@@_name_ ##1 _tl } } + & + \tl_use:c { l_@@_info_ ##1 _tl } + } + } +% \end{macrocode} +% 通过 \env{tabular} 环境输出。 +% \begin{macrocode} + \begin{tabular} { \c_@@_cover_info_align_tl } + \clist_use:Nn \l_@@_tmpa_clist { \\ [ 1 ex ] } + \end{tabular} + \group_end: + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_cover_signature:N} +% 签名行。 +% \begin{macrocode} +\cs_new_protected:Npn \@@_cover_signature:N #1 + { + \clist_map_inline:Nn #1 + { + ##1 \c_@@_fwid_colon_tl + \@@_blank_underline:n { 6 em } + \@@_quad: + } + } +% \end{macrocode} +% \end{macro} +% +% \subsubsection{封面模板} +% +% \changes{v0.7}{2018/02/27}{使用 \pkg{xtemplate} 重构封面布局。} +% +% 声明封面对象。不需要带参数。 +% \begin{macrocode} +%<@@=fdu_cover> +\DeclareObjectType { fdu / cover } { \c_zero_int } +% \end{macrocode} +% +% \begin{macro}{\DeclareCoverTemplate,\fdu_cover_declare_template:nn} +% 声明封面模板。 +% \begin{arguments} +% \item 模板名称 +% \item 封面部件列表,以逗号分隔 +% \end{arguments} +% \begin{macrocode} +\NewDocumentCommand \DeclareCoverTemplate { m m } + { \fdu_cover_declare_template:nn {#1} {#2} } +\cs_new_protected:Npn \fdu_cover_declare_template:nn #1#2 + { + \tl_set:Nn \l_@@_template_tl {#1} +% \end{macrocode} +% 构建模板接口。 +% \begin{macrocode} + \@@_declare_template_interface:nx {#1} + { + format : tokenlist, + top-skip : skip, + bottom-skip : skip, + \clist_map_function:nN {#2} \@@_key_type:n + } +% \end{macrocode} +% 声明所用变量。 +% \begin{macrocode} + \tl_new:c { l_@@ / #1 / format_tl } + \skip_new:c { l_@@ / #1 / top_skip } + \skip_new:c { l_@@ / #1 / bottom_skip } + \clist_map_inline:nn {#2} + { + \tl_new:c { l_@@ / #1 / ##1 / content_tl } + \tl_new:c { l_@@ / #1 / ##1 / format_tl } + \skip_new:c { l_@@ / #1 / ##1 / bottom_skip } + } +% \end{macrocode} +% 声明模板代码。^^A 以下名字空间为 `fdu_cover' 而非 `fdu' +% \begin{macrocode} + \@@_declare_template_code:nxn {#1} + { + format = \exp_not:c { l_@@ / #1 / format_tl }, + top-skip = \use:c { l_@@ / #1 / top_skip }, + bottom-skip = \use:c { l_@@ / #1 / bottom_skip }, + \clist_map_function:nN {#2} \@@_key_binding:n + } + { + \AssignTemplateKeys + \tl_use:c { l_@@ / #1 / format_tl } + \__fdu_vspace:c { l_@@ / #1 / top_skip } + \clist_map_inline:nn {#2} + { + \use:c { @@ / #1 / ####1 / align:n } + { + \tl_use:c { l_@@ / #1 / ####1 / format_tl } + \tl_use:c { l_@@ / #1 / ####1 / content_tl } + \par + } + \__fdu_vspace:c { l_@@ / #1 / ####1 / bottom_skip } + } + \__fdu_vspace:c { l_@@ / #1 / bottom_skip } + } + } +% \end{macrocode} +% \end{macro} +% +% \begin{variable}{\l_@@_template_tl} +% 保存模板名称。 +% \begin{macrocode} +\tl_new:N \l_@@_template_tl +% \end{macrocode} +% \end{variable} +% +% \begin{macro}{\@@_declare_template_interface:nn, +% \@@_declare_template_code:nnn, +% \@@_declare_template_interface:nx, +% \@@_declare_template_code:nxn} +% 为了展开的方便,这里需要封装 \pkg{xtemplate} 的一些函数。 +% \begin{macrocode} +\cs_new_protected:Npn \@@_declare_template_interface:nn #1#2 + { \DeclareTemplateInterface { fdu / cover } {#1} { \c_zero_int } {#2} } +\cs_new_protected:Npn \@@_declare_template_code:nnn #1#2#3 + { \DeclareTemplateCode { fdu / cover } {#1} { \c_zero_int } {#2} {#3} } +\cs_generate_variant:Nn \@@_declare_template_interface:nn { nx } +\cs_generate_variant:Nn \@@_declare_template_code:nnn { nxn } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_key_type:n} +% \begin{macrocode} +\cs_new:Npn \@@_key_type:n #1 + { + #1 / content : tokenlist, + #1 / format : tokenlist, + #1 / bottom-skip : skip, + #1 / align : choice { left, right, center, normal } = normal, + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_key_binding:n} +% \begin{macrocode} +\cs_new:Npn \@@_key_binding:n #1 + { + #1 / content = + \exp_not:c + { l_@@ / \l_@@_template_tl / #1 / content_tl }, + #1 / format = + \exp_not:c + { l_@@ / \l_@@_template_tl / #1 / format_tl }, + #1 / bottom-skip = + \exp_not:c + { l_@@ / \l_@@_template_tl / #1 / bottom_skip }, + #1 / align = + { + left = + \exp_not:N \cs_set_protected:cpn + { @@ / \l_@@_template_tl / #1 / align:n } + \exp_not:n {##1} + { + \exp_not:n + { + \group_begin: + \flushleft ##1 \endflushleft + \group_end: + } + }, + right = + \exp_not:N \cs_set_protected:cpn + { @@ / \l_@@_template_tl / #1 / align:n } + \exp_not:n {##1} + { + \exp_not:n + { + \group_begin: + \flushright ##1 \endflushright + \group_end: + } + }, + center = + \exp_not:N \cs_set_protected:cpn + { @@ / \l_@@_template_tl / #1 / align:n } + \exp_not:n {##1} + { + \exp_not:n + { + \group_begin: + \center ##1 \endcenter + \group_end: + } + }, + normal = + \exp_not:N \cs_set_protected:cpn + { @@ / \l_@@_template_tl / #1 / align:n } + \exp_not:n {##1} + { \exp_not:n { \group_begin: ##1 \group_end: } } + }, + } +%<@@=fdu> +% \end{macrocode} +% \end{macro} +% +% \subsubsection{绘制封面} +% +% \changes{v0.9}{2023/02/18}{为封面添加 PDF 页码。} +% +% \begin{macro}{\makecoveri} +% 论文封面(封一)。 +% \begin{macrocode} +\NewDocumentCommand \makecoveri { } + { + \thispagestyle { empty } + \tl_set:Nn \thepage { A } + \UseInstance { fdu / cover } { cover-i-default } + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\makecoverii} +% \changes{v0.8}{2021/09/21}{\opt{info/instructors} 为空时不再显示指导小组 +% 成员名单。} +% 指导小组成员名单(封二)。 +% \begin{macrocode} +\NewDocumentCommand \makecoverii { } + { + \thispagestyle { empty } + \tl_set:Nn \thepage { B } + \clist_if_empty:NTF \l_@@_info_instructors_clist + { \hbox:n { } } + { \UseInstance { fdu / cover } { cover-ii-default } } + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\makecoveriii} +% 声明页(封三)。 +% \begin{macrocode} +\NewDocumentCommand \makecoveriii { } + { + \cleardoublepage + \thispagestyle { empty } + \tl_set:Nn \thepage { C } + \tl_if_empty:NTF \l_@@_declaration_page_tl + { \UseInstance { fdu / cover } { cover-iii-default } } + { \includepdf { \l_@@_declaration_page_tl } } + } +% \end{macrocode} +% \end{macro} +% +% 声明各封面模板组成部分。 +% \begin{macrocode} +\DeclareCoverTemplate { cover-i } + { id, logo, type, degree, title, title-en, info } +\DeclareCoverTemplate { cover-ii } { title, name-list } +\DeclareCoverTemplate { cover-iii } + { + originality-decl-name, + originality-decl-text, + originality-decl-sig, + authorization-decl-name, + authorization-decl-text, + authorization-decl-sig + } +% \end{macrocode} +% +% \changes{v0.7d}{2019/03/29}{封面中文标题改为加粗宋体(可能使用伪粗)。} +% +% 定义封面的具体配置参数。 +% \begin{macrocode} +\DeclareInstance { fdu / cover } { cover-i-default } { cover-i } + { +%<class-en> format = \@@_line_spread:N \c_@@_line_spread_fp, + bottom-skip = 0 pt plus 1.5 fill, + id / content = \@@_cover_id:, + logo / content = \@@_cover_logo:, + type / content = \@@_cover_type:, + degree / content = \@@_cover_degree:, + title / content = + \@@_fixed_width_center_box:nn + { 0.9 \textwidth } { \l_@@_info_title_tl }, + title-en / content = + \@@_fixed_width_center_box:nn + { 0.9 \textwidth } { \l_@@_info_title_en_tl }, + info / content = \@@_cover_info:, + id / format = \zihao { -5 }, + type / format = \zihao { 2 }, + degree / format = \zihao { 4 }, + title / format = \zihao { -2 } \bfseries, + title-en / format = + \@@_line_spread:n { 1.2 } \zihao { 4 } \bfseries, + id / bottom-skip = 0 pt plus 1.6 fill, + logo / bottom-skip = 0 pt plus 0.3 fill, + type / bottom-skip = -18 pt, + degree / bottom-skip = 0 pt plus 0.8 fill, + title-en / bottom-skip = 0 pt plus 2.5 fill, + id / align = right, + logo / align = center, + type / align = center, + degree / align = center, + title / align = center, + title-en / align = center, + info / align = center, + } +\DeclareInstance { fdu / cover } { cover-ii-default } { cover-ii } + { +%<class-en> format = \@@_line_spread:N \c_@@_line_spread_fp, + title / content = + \@@_spread_box:no { 7 em } { \c_@@_name_instructors_tl }, + name-list / content = + \clist_use:Nn \l_@@_info_instructors_clist { \par }, + title / format = \zihao { 2 } \sffamily, + name-list / format = \large, + title / align = center, + name-list / align = center, + } +\DeclareInstance { fdu / cover } { cover-iii-default } { cover-iii } + { + format = +%<class> \@@_line_spread:n { 1.8 }, +%<class-en> \@@_line_spread:n { 1.8 } \dim_set:Nn \parindent { 2 \ccwd }, + top-skip = 0 pt plus 0.2 fill, + bottom-skip = 0 pt plus 2.5 fill, + originality-decl-name / content = \c_@@_name_orig_decl_tl, + originality-decl-text / content = \c_@@_orig_decl_text_tl, + originality-decl-sig / content = + \@@_cover_signature:N \c_@@_orig_decl_sign_clist, + authorization-decl-name / content = \c_@@_name_auth_decl_tl, + authorization-decl-text / content = \c_@@_auth_decl_text_tl, + authorization-decl-sig / content = + \@@_cover_signature:N \c_@@_auth_decl_sign_clist, + originality-decl-name / format = + \@@_line_spread:n { 1.2 } \zihao { -2 } \bfseries, + authorization-decl-name / format = + \@@_line_spread:n { 1.2 } \zihao { -2 } \bfseries, + originality-decl-name / bottom-skip = 0.4 cm, + originality-decl-text / bottom-skip = 0.4 cm, + originality-decl-sig / bottom-skip = 0 pt plus 2.5 fill, + authorization-decl-name / bottom-skip = 0.4 cm, + authorization-decl-text / bottom-skip = 0.4 cm, + originality-decl-name / align = center, + originality-decl-sig / align = right, + authorization-decl-name / align = center, + authorization-decl-sig / align = right, + } +% \end{macrocode} +% +% \begin{variable}{\l_@@_auto_make_cover_bool,\l_@@_declaration_page_tl} +% \begin{macrocode} +\bool_new:N \l_@@_auto_make_cover_bool +\tl_new:N \l_@@_declaration_page_tl +% \end{macrocode} +% \end{variable} +% +% \begin{macro}{style/auto-make-cover} +% 是否自动生成封面。 +% \begin{macrocode} +\keys_define:nn { fdu / style } + { + auto-make-cover .bool_set:N = \l_@@_auto_make_cover_bool, + auto-make-cover .default:n = true, +% \end{macrocode} +% \end{macro} +% +% \changes{v0.8}{2021/09/21}{新增 \opt{style/declaration-page} 选项。} +% +% \begin{macro}{style/declaration-page} +% 设置扫描版的声明页 PDF 文档。 +% \begin{macrocode} + declaration-page .code:n = + { + \tl_set_eq:NN \l_@@_declaration_page_tl \l_keys_value_tl + \RequirePackage { pdfpages } + }, + } +% \end{macrocode} +% \end{macro} +% +% 在 \env{document} 开始位置添加封面以及指导小组成员名单。 +% \begin{macrocode} +\ctex_after_end_preamble:n + { + \bool_if:NT \l_@@_auto_make_cover_bool + { + \begin{titlepage} + \makecoveri \newpage \makecoverii + \end{titlepage} + } + } +% \end{macrocode} +% +% 在 \env{document} 结束位置添加声明页。 +% \begin{macrocode} +\@@_gadd_ltxhook:nn { enddocument } + { \bool_if:NT \l_@@_auto_make_cover_bool { \makecoveriii } } +% \end{macrocode} +% +% \subsection{目录} +% +% 设置目录标题。 +% \begin{macrocode} +\keys_set:nn { ctex } + { +%<class> contentsname = \c_@@_name_toc_tl, +%<class> listfigurename = \c_@@_name_lof_tl, +%<class> listtablename = \c_@@_name_lot_tl, +% \end{macrocode} +% +% 设置目录中章节标题的样式。 +% \begin{macrocode} + chapter / tocline = + { +%<class> \normalfont \sffamily +%<class-en> \bfseries + \CTEXnumberline {#1} #2 + }, + section / tocline = + { +%<class-en> \bfseries + \CTEXnumberline {#1} #2 + }, + subsection / tocline = + { +%<class> \fdu@kai + \CTEXnumberline {#1} #2 + } + } +% \end{macrocode} +% +% \changes{v0.7e}{2019/05/12}{增加对插图、表格目录的处理。} +% +% \begin{macro}{\tableofcontents,\listoffigures,\listoftables} +% 修改 \cs{tableofcontents}、\cs{listoffigures} 和 \cs{listoftables} 的定义, +% 使得页眉正确显示,并出现在目录及 PDF 书签中。来自于 \LaTeXe{} 标准文档类 +% \file{book.cls}^^A +% \footnote{原代码中只有 \cs{tableofcontents} 的 \cs{@mkboth} 出现在 +% \cs{chapter*} 内部,这是出于兼容性的考虑而非 typo。}。 +% \begin{macrocode} +\@@_patch_cmd:Nnn \tableofcontents + { + \chapter*{\contentsname + \@mkboth{\MakeUppercase\contentsname} + {\MakeUppercase\contentsname}} + } + { \@@_chapter_no_toc:V \contentsname } +\@@_patch_cmd:Nnn \listoffigures + { + \chapter*{\listfigurename} + \@mkboth{\MakeUppercase\listfigurename} + {\MakeUppercase\listfigurename} + } + { \@@_chapter:V \listfigurename } +\@@_patch_cmd:Nnn \listoftables + { + \chapter*{\listtablename} + \@mkboth{\MakeUppercase\listtablename} + {\MakeUppercase\listtablename} + } + { \@@_chapter:V \listtablename } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}[int]{\@starttoc} +% 修改 \tn{@starttoc} 的定义以调整英文模板中的目录行距。 +% \begin{macrocode} +%<*class-en> +\@@_patch_cmd:Nnn \@starttoc + { \begingroup } + { + \begingroup + \@@_line_spread:N \c_@@_line_spread_fp + } +%</class-en> +% \end{macrocode} +% \end{macro} +% +% \subsection{摘要} +% +% \begin{environment}{abstract} +% \begin{environment}{abstract*} +% \changes{v0.7}{2018/03/05}{整理代码。} +% 摘要环境。在中文模板定义了中英文双语摘要,但在英文模板中则没有定义中文摘要。 +% \begin{macrocode} +\NewDocumentEnvironment { abstract } { } +%<class> { \@@_abstract_begin: } { \@@_abstract_end: } +%<class-en> { \@@_abstract_en_begin: } { \@@_abstract_en_end: } +%<*class> +\NewDocumentEnvironment { abstract* } { } + { \@@_abstract_en_begin: } { \@@_abstract_en_end: } +%</class> +% \end{macrocode} +% \end{environment} +% \end{environment} +% +% \begin{macro}{\@@_abstract_begin:,\@@_abstract_en_begin:} +% 摘要页标题。 +% \begin{macrocode} +%<*class> +\cs_new_protected:Npn \@@_abstract_begin: + { \@@_chapter:V \c_@@_name_abstract_tl } +%</class> +\cs_new_protected:Npn \@@_abstract_en_begin: + { \@@_chapter:V \c_@@_name_abstract_en_tl } +% \end{macrocode} +% \end{macro} +% +% \changes{v0.7d}{2019/03/28}{优化关键字列表的显示。} +% \changes{v0.8}{2021/12/22}{没有指定 CLC/JEL 分类号时不再显示。} +% +% \begin{macro}{\@@_abstract_end:} +% 摘要正文完成后,输出关键字列表和 CLC/JEL 分类号。 +% \begin{macrocode} +%<*class> +\cs_new_protected:Npn \@@_abstract_end: + { + \@@_keywords:nNn + { \sffamily \c_@@_name_keywords_tl \c_@@_fwid_colon_tl } + \l_@@_info_keywords_clist { \c_@@_fwid_semicolon_tl } + \tl_if_empty:NF \l_@@_info_clc_tl + { + \@@_clc_jel:nn + { \sffamily \c_@@_name_clc_tl \c_@@_fwid_colon_tl } + { \l_@@_info_clc_tl } + } + } +%</class> +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_abstract_en_end:} +% 英文摘要中,如果指定了 JEL 分类号,则 CLC 分类号不再显示。 +% \begin{macrocode} +\cs_new_protected:Npn \@@_abstract_en_end: + { + \@@_keywords:nNn + { \bfseries \c_@@_name_keywords_en_tl \@@_quad: } + \l_@@_info_keywords_en_clist { ; ~ } + \tl_if_empty:NTF \l_@@_info_jel_tl + { + \tl_if_empty:NF \l_@@_info_clc_tl + { + \@@_clc_jel:nn + { \bfseries \c_@@_name_clc_en_tl \@@_quad: } + { \l_@@_info_clc_tl } + } + } + { + \@@_clc_jel:nn + { \bfseries \c_@@_name_jel_en_tl \@@_quad: } + { \l_@@_info_jel_tl } + } + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_keywords:nNn,\@@_keywords_prevdepth:,\@@_clc_jel:nn} +% 关键字列表前要空一行,使用悬挂缩进;分类号不缩进。\tn{parbox} 之后的间距 +% 需要调整,见 \url{https://tex.stackexchange.com/a/34982}。 +% \begin{macrocode} +\cs_new_protected:Npn \@@_keywords:nNn #1#2#3 + { + \par \mode_leave_vertical: \par \noindent + \@@_get_text_width:Nn \l_@@_tmpa_dim {#1} + \group_begin: #1 \group_end: + \parbox [t] { \dim_eval:n { \textwidth - \l_@@_tmpa_dim } } + { + \clist_use:Nn #2 {#3} \par + \cs_gset:Npx \@@_keywords_prevdepth: + { \dim_use:N \tex_prevdepth:D } + } + } +\cs_new_protected:Npn \@@_clc_jel:nn #1#2 + { + \par \tex_prevdepth:D \@@_keywords_prevdepth: \noindent + \group_begin: #1 \group_end: + #2 + } +% \end{macrocode} +% \end{macro} +% +% \subsection{符号表} +% +% \begin{environment}{notation} +% \changes{v0.7}{2018/03/05}{整理代码。} +% 符号表环境,利用 \env{longtable} 封装。可选参数为表格列格式说明符。 +% \begin{macrocode} +\NewDocumentEnvironment { notation } { O { l p { 7.5 cm } } } + { + \@@_notation_begin: + \group_begin: + \@@_notation_long_table_setup: + \longtable {#1} + } + { + \endlongtable + \group_end: + } +% \end{macrocode} +% \end{environment} +% +% \begin{macro}{\@@_notation_begin:} +% 符号表页标题。 +% \begin{macrocode} +\cs_new_protected:Npn \@@_notation_begin: + { +%<class> \@@_chapter:V \c_@@_name_notation_tl +%<class-en> \@@_chapter:V \c_@@_name_notation_en_tl + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_notation_long_table_setup:} +% 调整 \cs{LTpre} 和 \cs{LTpost},以删去 \env{longtable} 前后的空白。 +% 英文模板中还需要调整表格的行距。注意 \tn{arraystretch} 只是一个简单 +% 宏,不能使用 \cs{fp_set:Nn}。 +% \begin{macrocode} +\cs_new_protected:Npn \@@_notation_long_table_setup: + { +%<class-en> \tl_set:Nn \arraystretch { 1.3 } + \dim_set_eq:NN \LTpre \c_zero_dim + \dim_set_eq:NN \LTpost \c_zero_dim + } +% \end{macrocode} +% \end{macro} +% +% \subsection{致谢} +% +% \changes{v0.9}{2023/02/06}{新增致谢环境。} +% +% \begin{environment}{acknowledgements} +% 致谢环境。 +% \begin{macrocode} +\NewDocumentEnvironment { acknowledgements } { } + { \@@_acknowledgements_begin: } { } +% \end{macrocode} +% \end{environment} +% +% \begin{macro}{\@@_acknowledgements_begin:} +% 致谢页标题。 +% \begin{macrocode} +\cs_new_protected:Npn \@@_acknowledgements_begin: + { +%<class> \@@_chapter:V \c_@@_name_acknowledgements_tl +%<class-en> \@@_chapter:V \c_@@_name_acknowledgements_en_tl + } +% \end{macrocode} +% \end{macro} +% +% \subsection{参考文献著录与引用} +% +% \changes{v0.6}{2017/10/27}{支持 \BibTeX{},以实现参考文献的著录与引用。} +% \changes{v0.7}{2018/01/25}{支持 \biber{} 与 \pkg{biblatex}。} +% +% \begin{variable}{\l_@@_bibtex_bool} +% 是否使用 \BibTeX{} 作为参考文献处理程序。若为否,则使用 +% \pkg{biblatex}/\biber{}。 +% \begin{macrocode} +\bool_new:N \l_@@_bibtex_bool +% \end{macrocode} +% \end{variable} +% +% \begin{variable}{\l_@@_bib_style_tl,\l_@@_bib_gb_style_tl, +% \l_@@_cite_style_tl} +% 保存参考文献及引用样式。 +% \begin{macrocode} +\tl_new:N \l_@@_bib_style_tl +\tl_new:N \l_@@_bib_gb_style_tl +\tl_new:N \l_@@_cite_style_tl +% \end{macrocode} +% \end{variable} +% +% \begin{variable}{\l_@@_bib_resource_clist} +% \changes{v0.8}{2021/03/07}{改用 \texttt{clist} 型变量,允许在 \pkg{biblatex} +% 下使用多个数据源。} +% 保存参考文献数据库列表。 +% \begin{macrocode} +\clist_new:N \l_@@_bib_resource_clist +% \end{macrocode} +% \end{variable} +% +% \changes{v0.6}{2017/10/28}{新增 \opt{style/bib-style} 选项。} +% \changes{v0.7}{2018/01/25}{新增 \opt{style/bib-backend}、 +% \opt{style/cite-style} 和 \opt{style/bib-resource} 选项。} +% \changes{v0.8}{2021/09/20}{直接调用 \pkg{gbt7714} 宏包。} +% +% \begin{macrocode} +\keys_define:nn { fdu / style } + { +% \end{macrocode} +% \begin{macro}{style/bib-backend} +% 参考文献后端。 +% \begin{macrocode} + bib-backend .choice:, + bib-backend .value_required:n = true, + bib-backend / bibtex .code:n = + { \bool_set_true:N \l_@@_bibtex_bool }, + bib-backend / biblatex .code:n = + { \bool_set_false:N \l_@@_bibtex_bool }, +% \end{macrocode} +% \end{macro} +% \begin{macro}{style/bib-style} +% 参考文献样式。 +% \begin{macrocode} + bib-style .choice:, + bib-style .value_required:n = true, + bib-style / numerical .code:n = + { + \tl_set:Nn \l_@@_bib_gb_style_tl { numerical } + \tl_clear:N \l_@@_bib_style_tl + }, + bib-style / author-year .code:n = + { + \tl_set:Nn \l_@@_bib_gb_style_tl { author-year } + \tl_clear:N \l_@@_bib_style_tl + }, + bib-style / unknown .code:n = + { + \tl_set_eq:NN \l_@@_bib_style_tl \l_keys_value_tl + \tl_clear:N \l_@@_bib_gb_style_tl + }, +% \end{macrocode} +% \end{macro} +% \begin{macro}{style/cite-style} +% \changes{v0.8}{2021/09/17}{允许在 \BibTeX{} 下使用。} +% 引用样式。 +% \begin{macrocode} + cite-style .tl_set:N = \l_@@_cite_style_tl, +% \end{macrocode} +% \end{macro} +% \begin{macro}{style/bib-resource} +% 参考文献数据源。 +% \begin{macrocode} + bib-resource .clist_set:N = \l_@@_bib_resource_clist + } +% \end{macrocode} +% \end{macro} +% +% \changes{v0.8}{2021/03/28}{正确使用导言区末尾钩子。} +% +% 为了保证导言区中的设置能起作用,\pkg{gbt774}、\pkg{natbib} 或 \pkg{biblatex} +% 宏包均需要在导言区末尾载入(仍在 \pkg{hyperref} 之前),并做相关设置。 +% \begin{macrocode} +\ctex_at_end_preamble:n + { + \bool_if:NT \l_@@_bibtex_bool + { + \tl_if_empty:NTF \l_@@_bib_style_tl + { + \RequirePackage [ sort & compress ] { gbt7714 } + \exp_args:No \bibliographystyle + { gbt7714- \l_@@_bib_gb_style_tl } + } + { + \RequirePackage [ sort & compress ] { natbib } + \exp_args:No \bibliographystyle + { \l_@@_bib_style_tl } + } + \@@_bibtex_setup: + } + } +% \end{macrocode} +% \pkg{biblatex} 会写入 |begindocument/before| 钩子,因此需在其之前通过 +% \texttt{env/doc\-u\-ment/begin} 钩子载入 \pkg{biblatex} 宏包。注意这个 +% 钩子仅适用于 |\begin{document}| 的写法,对于 |\document| 命令本身无效。 +% \begin{macrocode} +\@@_gadd_ltxhook:nn { env/document/begin } + { + \bool_if:NF \l_@@_bibtex_bool + { + \@@_biblatex_pre_setup: + \RequirePackage { biblatex } + \@@_biblatex_post_setup: + } + } +% \end{macrocode} +% +% \changes{v0.7}{2018/01/25}{统一使用 \cs{printbibliography} 命令 +% 生成参考文献列表。} +% \changes{v0.7d}{2019/03/23}{使参考文献在目录中正常显示。} +% \changes{v0.7e}{2020/08/30}{同步 \pkg{gbt7714} v2.0。} +% \changes{v0.8}{2021/09/20}{新增不带上标的文内引用命令。} +% +% \begin{macro}{\@@_bibtex_setup:,\parencite,\printbibliography} +% \BibTeX{} 相关设置。 +% \begin{macrocode} +\cs_new_protected:Npn \@@_bibtex_setup: + { +% \end{macrocode} +% 行内引用命令。这里定义比较繁琐,是为了与 \tn{cite} 等命令保持一致。 +% \begin{macrocode} + \tl_if_eq:VnTF \l_@@_bib_gb_style_tl { numerical } + { + \exp_args:NNx \DeclareRobustCommand \parencite + { \exp_args:No \exp_not:o { \cs:w cite ~ \cs_end: } } + \exp_args:Nc \ctex_patch_cmd:Nnn { parencite ~ } + { \begingroup } + { \begingroup \bibstyle@numbers } + } + { \cs_set_eq:NN \parencite \cite } +% \end{macrocode} +% 引用样式。 +% \begin{macrocode} + \tl_if_empty:NF \l_@@_cite_style_tl + { \exp_args:NV \citestyle \l_@@_cite_style_tl } +% \end{macrocode} +% 使用 \tn{textendash} “\textendash”作为数字间的连接号。 +% \begin{macrocode} + \ctex_patch_cmd:Nnn \NAT@citexnum + { - \NAT@penalty } + { \textendash \NAT@penalty } +% \end{macrocode} +% 修改参考文献标题。 +% \begin{macrocode} + \cs_set:Npn \bibsection { \@@_chapter:V \bibname } +% \end{macrocode} +% \BibTeX{} 下接口与 \pkg{biblatex} 保持统一。 +% \begin{macrocode} + \NewDocumentCommand \printbibliography { o } + { + \exp_args:NV \bibliography \l_@@_bib_resource_clist + \IfValueT {##1} + { \@@_warning:nn { invalid-option-in-bibtex } {##1} } + } + } +\@@_msg_new:nn { invalid-option-in-bibtex } + { Option(s)~ "#1"~ are~ invalid~ in~ BibTeX. } +% \end{macrocode} +% \end{macro} +% +% \changes{v0.8}{2022/01/08}{补充定义 \tn{addbibresource} 命令以兼容 \pkg{biblatex} 的用法。} +% +% \begin{macro}{\addbibresource} +% 由于 \pkg{biblatex} 在导言区后才载入,需要单独定义添加参考文献数据源的命令以实现兼容。 +% 该命令需要在载入宏包前取消定义。 +% \begin{macrocode} +\bool_if:NF \l_@@_bibtex_bool + { + \NewDocumentCommand \addbibresource { m } + { \clist_gput_right:Nn \l_@@_bib_resource_clist {#1} } + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_biblatex_pre_setup:,\@@_biblatex_post_setup:} +% \pkg{biblatex} 相关设置。 +% \begin{macrocode} +\cs_new_protected:Npn \@@_biblatex_pre_setup: + { + \cs_undefine:N \addbibresource + \clist_new:N \l_@@_biblatex_options_clist + \clist_put_right:Nn \l_@@_biblatex_options_clist { hyperref = manual } +% \end{macrocode} +% 参考文献样式。 +% \begin{macrocode} + \clist_put_right:Nx \l_@@_biblatex_options_clist + { + style = + \tl_if_empty:NTF \l_@@_bib_style_tl + { + \str_if_eq:VnTF \l_@@_bib_gb_style_tl { numerical } + { gb7714-2015 } { gb7714-2015ay } + } + { \l_@@_bib_style_tl } + } +% \end{macrocode} +% 引用样式。 +% \changes{v0.8}{2021/03/09}{正确调用引用样式。} +% \begin{macrocode} + \tl_if_empty:NF \l_@@_cite_style_tl + { + \clist_put_right:Nx \l_@@_biblatex_options_clist + { citestyle = \l_@@_cite_style_tl } + } + \exp_args:NV \PassOptionsToPackage \l_@@_biblatex_options_clist + { biblatex } + } +\cs_new_protected:Npn \@@_biblatex_post_setup: + { + \clist_map_function:NN \l_@@_bib_resource_clist \addbibresource + \@@_biblatex_allow_url_break: + \@@_biblatex_use_en_dash: +% \end{macrocode} +% 修改参考文献标题。 +% \begin{macrocode} + \defbibheading { bibliography } [ \bibname ] { \@@_chapter:n {##1} } +%<*class-en> + \exp_args:Nnx \DefineBibliographyStrings { english } + { bibliography = { \c_@@_name_bib_en_tl } } +%</class-en> + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_biblatex_allow_url_break:} +% \pkg{biblatex} 下允许 URL 在字母、数字和一些特殊符号处断行。 +% \begin{macrocode} +\cs_new:Npn \@@_biblatex_allow_url_break: + { + \int_set_eq:NN \c@biburlucpenalty \c_one_int + \int_set_eq:NN \c@biburlnumpenalty \c_one_int + \int_set_eq:NN \c@biburllcpenalty \c_one_int + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_biblatex_use_en_dash:} +% 使用 \tn{textendash} “\textendash”作为数字间的连接号。 +% \begin{macrocode} +\cs_new:Npn \@@_biblatex_use_en_dash: + { + \DefineBibliographyExtras { english } + { + \cs_set_nopar:Npn \bibrangedash + { \textendash \penalty \hyphenpenalty } + } + \DefineBibliographyExtras { russian } + { + \cs_set_nopar:Npn \bibrangedash + { \textendash \penalty \hyphenpenalty } + } + } +% \end{macrocode} +% \end{macro} +% +% \changes{v0.7}{2018/01/25}{同步 \pkg{gbt7714} v1.0,移除有关超链接的额外设置。} +% \changes{v0.8}{2021/09/20}{不再将著录用符号修改为中文标点符号。} +% +% \subsection{\pkg{hyperref} 相关配置} +% +% \changes{v0.4}{2017/08/13}{新增 \pkg{hyperref} 相关配置,包括超链接 +% 样式(\opt{style/hyperlink} 与 \opt{style/hyperlink-color} 选项) +% 及 PDF 元信息等。} +% \changes{v0.7}{2018/01/23}{将 \pkg{hyperref} 相关配置移至模板末尾, +% 以减少冲突。} +% +% \begin{macro}{\hypersetup} +% \changes{v0.9}{2023/02/08}{改用 \cs{DeclareDocumentCommand} 定义。} +% \begin{macro}{\fdu_hyperref_setup:n} +% \pkg{hyperref} 宏包是在导言区之后才引入的。若要在导言区中使用 +% \tn{hypersetup} 命令,必须另行定义。 +% \begin{macrocode} +\DeclareDocumentCommand \hypersetup { m } + { \fdu_hyperref_setup:n {#1} } +\cs_new_protected:Npn \fdu_hyperref_setup:n #1 + { \clist_gput_right:Nn \g_@@_to_hyperref_clist {#1} } +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@@_set_hyperlink_color_key:n} +% 设置超链接颜色选项。最后的逗号用于确保 \pkg{l3keys} 可以正确解析,不能省去。 +% \begin{macrocode} +\cs_new:Npn \@@_set_hyperlink_color_key:n #1 + { + hyperlink-color / \clist_item:nn {#1} {1} .code:n = + { + \@@_define_hyperlink_color:nnn + { \clist_item:nn {#1} {2} } + { \clist_item:nn {#1} {3} } + { \clist_item:nn {#1} {4} } + \fdu_hyperref_setup:n + { + linkcolor = fdu@link, linkbordercolor = fdu@link, + urlcolor = fdu@url, urlbordercolor = fdu@url, + citecolor = fdu@cite, citebordercolor = fdu@cite + } + }, + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_define_hyperlink_color:nnn} +% 定义超链接颜色。 +% \begin{macrocode} +\cs_new_protected:Npn \@@_define_hyperlink_color:nnn #1#2#3 + { + \definecolorset { HTML } { fdu@ } { } + { link, #1; url, #2; cite, #3 } + } +% \end{macrocode} +% \end{macro} +% +% \begin{macrocode} +\keys_define:nx { fdu / style } + { +% \end{macrocode} +% +% \begin{macro}{style/hyperlink} +% \changes{v0.8}{2021/12/27}{修复边框不显示的问题;不需要为 \opt{hidelinks} 选项传递参数。} +% 超链接样式。 +% \begin{macrocode} + hyperlink .choice:, + hyperlink .value_required:n = true, + hyperlink / border .code:n = + { \fdu_hyperref_setup:n { colorlinks = false } }, + hyperlink / color .code:n = + { \fdu_hyperref_setup:n { colorlinks = true } }, + hyperlink / none .code:n = + { \fdu_hyperref_setup:n { hidelinks } }, +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{style/hyperlink-color} +% \changes{v0.8}{2021/12/27}{移除不常用的超链接颜色。} +% 超链接颜色。 +% \begin{macrocode} + hyperlink-color .choice:, + hyperlink-color .value_required:n = true, + \clist_map_function:nN + { + { classic, FF0000, 0000FF, 00FF00 }, + { default, 990000, 0000B2, 007F00 }, + { material, E91E63, 009688, 4CAF50 }, + { graylevel, 616161, 616161, 616161 }, + { prl, 2D3092, 2D3092, 2D3092 } + } + \@@_set_hyperlink_color_key:n + } +% \end{macrocode} +% \end{macro} +% +% \changes{v0.6}{2017/10/29}{优化 URL 断行设置。} +% +% \begin{macro}{\fdu_allow_url_break:,\@@_add_url_break_points:} +% 允许 URL 在字母、数字和一些特殊符号处断行。见 +% \url{https://bit.ly/2hhIjLW}。 +% \begin{macrocode} +\cs_new:Npn \fdu_allow_url_break: + { + \cs_new:Npn \@@_add_url_break_points: + { \tl_map_function:NN \c_@@_url_break_points_tl \do } + \@@_appto_cmd:Nn \UrlBreaks + { \UrlOrds \@@_add_url_break_points: } + } +% \end{macrocode} +% \end{macro} +% +% \begin{variable}{\c_@@_url_break_points_tl} +% 额外的断行位置是 26 个英文字母(大小写)以及 10 个阿拉伯数字。 +% \pkg{url} 提供的宏 \tn{UrlBreaks} 还包含了特殊符号 |*|、|-|、 +% |~|、|'|、|"|、|-|,也被设置为允许断行。 +% \begin{macrocode} +\tl_const:Nn \c_@@_url_break_points_tl + { + abcdefghijklmnopqrstuvwxyz + ABCDEFGHIJKLMNOPQRSTUVWXYZ + 0123456789 + } +% \end{macrocode} +% \end{variable} +% +% \changes{v0.7e}{2019/04/23}{处理 \pkg{hyperref} 与 \pkg{unicode-math} +% 的兼容性问题。} +% +% 在导言区末尾引入 \pkg{hyperref} 宏包。 +% \begin{macrocode} +\ctex_at_end_preamble:n + { + \RequirePackage { hyperref } +% \end{macrocode} +% 此后 \tn{hypersetup} 命令由 \pkg{hyperref} 宏包接管。 +% \begin{macrocode} + \hypersetup + { + bookmarksnumbered = true, + psdextra = true, + unicode = true, +% \end{macrocode} +% 填写 PDF 元信息。 +% \begin{macrocode} +%<*class> + pdftitle = \l_@@_info_title_sanitized_tl, + pdfauthor = \l_@@_info_author_tl, + pdfkeywords = \l_@@_info_keywords_clist, +%</class> +%<*class-en> + pdftitle = \l_@@_info_title_en_sanitized_tl, + pdfauthor = \l_@@_info_author_en_tl, + pdfkeywords = \l_@@_info_keywords_en_clist, +%</class-en> +% pdfsubject = , + pdfcreator = \c_@@_name_pdf_creator_tl + } +% \end{macrocode} +% 将导言区中通过 \cs{fdu_hyperref_setup:n} 进行的设置传入 \tn{hypersetup}。 +% \begin{macrocode} + \exp_args:NV \hypersetup \g_@@_to_hyperref_clist +% \end{macrocode} +% URL 断行处理。 +% \begin{macrocode} + \fdu_allow_url_break: +% \end{macrocode} +% 由于 \pkg{hyperref} 在 \pkg{biblatex} 之后调用,所以需要手动开启相关功能。 +% \begin{macrocode} + \bool_if:NF \l_@@_bibtex_bool { \BiblatexManualHyperrefOn } + } +% \end{macrocode} +% +% 在 PDF 字符串中设置 \tn{fdu@kai} 命令为空,以抑制 \pkg{hyperref} 的警告信息。 +% \begin{macrocode} +\ctex_at_end_package:nn { hyperref } + { + \pdfstringdefDisableCommands + { + \cs_set_eq:NN \fdu@kai \prg_do_nothing: + \cs_set_eq:NN \quad \c_space_tl + \cs_set_eq:NN \qquad \c_space_tl + } + } +% \end{macrocode} +% +% \subsection{用户接口} +% +% \begin{macro}{info,style} +% 定义元(meta)键值对。 +% \begin{macrocode} +\keys_define:nn { fdu } + { + info .meta:nn = { fdu / info } {#1}, + style .meta:nn = { fdu / style } {#1} + } +% \end{macrocode} +% \end{macro} +% +% 文档类初始设置。 +% \begin{macrocode} +\keys_set:nn { fdu } + { + style / font = times, +%<class> style / cjk-font = fandol, + style / font-size = -4, +%<class> style / fullwidth-stop = false, + style / auto-make-cover = true, + style / logo = { fudan-name.pdf }, + style / logo-size = { 0.5 \textwidth }, + style / hyperlink = color, + style / hyperlink-color = default, + style / bib-style = numerical, + info / degree = academic, + info / secret-level = none, + info / school-id = { 10246 }, + info / date = { \zhtoday }, +%<class> theorem / header-font = { \sffamily }, +%<class-en> theorem / header-font = { \bfseries \upshape }, +%<class> theorem / body-font = { \fdu@kai }, +%<class-en> theorem / body-font = { \itshape }, + theorem / counter = { chapter } + } +% \end{macrocode} +% +% \begin{macro}{\fdusetup} +% 用户设置接口。 +% \begin{macrocode} +\NewDocumentCommand \fdusetup { m } + { \keys_set:nn { fdu } {#1} } +% \end{macrocode} +% \end{macro} +% +% \begin{environment}{proof} +% \begin{environment}{axiom} +% \begin{environment}{corollary} +% \begin{environment}{definition} +% \begin{environment}{example} +% \begin{environment}{lemma} +% \begin{environment}{theorem} +% 模板预定义的常用数学环境。 +% 其中的“证明”比较特殊,它不编号,但会添加证毕符号。 +% \begin{macrocode} +%<*class> +\newtheorem* { proof } { \c_@@_name_proof_tl } +\newtheorem { axiom } { \c_@@_name_axiom_tl } +\newtheorem { corollary } { \c_@@_name_corollary_tl } +\newtheorem { definition } { \c_@@_name_definition_tl } +\newtheorem { example } { \c_@@_name_example_tl } +\newtheorem { lemma } { \c_@@_name_lemma_tl } +\newtheorem { theorem } { \c_@@_name_theorem_tl } +%</class> +%<*class-en> +\newtheorem* { proof } { \c_@@_name_proof_en_tl } +\newtheorem { axiom } { \c_@@_name_axiom_en_tl } +\newtheorem { corollary } { \c_@@_name_corollary_en_tl } +\newtheorem { definition } { \c_@@_name_definition_en_tl } +\newtheorem { example } { \c_@@_name_example_en_tl } +\newtheorem { lemma } { \c_@@_name_lemma_en_tl } +\newtheorem { theorem } { \c_@@_name_theorem_en_tl } +%</class-en> +%</class|class-en> +% \end{macrocode} +% \end{environment} +% \end{environment} +% \end{environment} +% \end{environment} +% \end{environment} +% \end{environment} +% \end{environment} +% +% \subsection{模板参数配置文件} +% +% \changes{v0.3}{2017/06/27}{分离文档类与参数配置文件。} +% +% \begin{macrocode} +%<*definition> +% \end{macrocode} +% +% \subsubsection{通用配置} +% +% \begin{variable}{\c_@@_name_simp_tl,\c_@@_name_trad_tl,\c_@@_name_en_tl} +% 学校名称。 +% \begin{macrocode} +\tl_const:Nn \c_@@_name_simp_tl { 复旦大学 } +\tl_const:Nn \c_@@_name_trad_tl { 復旦大學 } +\tl_const:Nn \c_@@_name_en_tl { Fudan~ University } +% \end{macrocode} +% \end{variable} +% +% 常用标点符号,见表~\ref{tab:punctuations}。 +% \begin{macrocode} +\clist_map_inline:nn + { + { ideo_comma } { ^^^^3001 }, + { ideo_full_stop } { ^^^^3002 }, + { fwid_comma } { ^^^^ff0c }, + { fwid_full_stop } { ^^^^ff0e }, + { fwid_colon } { ^^^^ff1a }, + { fwid_semicolon } { ^^^^ff1b }, + { fwid_left_paren } { ^^^^ff08 }, + { fwid_right_paren } { ^^^^ff09 } + } + { \@@_define_punct:nn #1 } +% \end{macrocode} +% +% \begin{table}[ht] +% \caption{常用标点符号} +% \label{tab:punctuations} +% \centering +% \begin{tabular}{cccc} +% \toprule +% \textbf{中文名称} & +% \textbf{英文名称} & +% \textbf{符号} & +% \textbf{Unicode 码位} \\ +% \midrule +% 中文顿号 & Ideographic comma & ^^^^3001 & U+3001 \\ +% 中文句号 & Ideographic full stop & ^^^^3002 & U+3002 \\ +% 中文逗号 & Fullwidth comma & ^^^^ff0c & U+FF0C \\ +% 全角西文句点 & Fullwidth full stop & ^^^^ff0e & U+FF0E \\ +% 中文冒号 & Fullwidth colon & ^^^^ff1a & U+FF1A \\ +% 中文分号 & Fullwidth semicolon & ^^^^ff1b & U+FF1B \\ +% 中文左圆括号 & Fullwidth left parenthesis & ^^^^ff08 & U+FF08 \\ +% 中文右圆括号 & Fullwidth right parenthesis & ^^^^ff09 & U+FF09 \\ +% \bottomrule +% \end{tabular} +% \end{table} +% +% \begin{variable}{\c_@@_line_spread_fp} +% 行距倍数。行距倍数 $k$ 由下式确定: +% \begin{equation*} +% 1.2 \times k \times \qty{12}{bp} = \qty{20}{pt}. +% \end{equation*} +% 式中,1.2 是基本行距与文字大小之比,\qty{12}{bp} 是小四号字的大小, +% \qty{20}{pt} 是行距固定值。 +% \begin{macrocode} +\fp_const:Nn \c_@@_line_spread_fp + { \dim_ratio:nn { 20 pt } { 12 bp } / 1.2 } +% \end{macrocode} +% \end{variable} +% +% \subsubsection{声明页} +% +% \begin{variable}{\c_@@_orig_decl_text_tl} +% 论文独创性声明。 +% \begin{macrocode} +\tl_const:Nn \c_@@_orig_decl_text_tl + { + 本人郑重声明:所呈交的学位论文,是本人在导师的指导下,独立进行研究 + 工作所取得的成果。论文中除特别标注的内容外,不包含任何其他个人或机 + 构已经发表或撰写过的研究成果。对本研究做出重要贡献的个人和集体,均 + 已在论文中作了明确的声明并表示了谢意。本声明的法律结果由本人承担。 + } +% \end{macrocode} +% \end{variable} +% +% \begin{variable}{\c_@@_auth_decl_text_tl} +% 论文使用授权声明。 +% \begin{macrocode} +\tl_const:Nn \c_@@_auth_decl_text_tl + { + 本人完全了解复旦大学有关收藏和利用博士、硕士学位论文的规定,即:学 + 校有权收藏、使用并向国家有关部门或机构送交论文的印刷本和电子版本; + 允许论文被查阅和借阅;学校可以公布论文的全部或部分内容,可以采用影 + 印、缩印或其它复制手段保存论文。涉密学位论文在解密后遵守此规定。 + } +% \end{macrocode} +% \end{variable} +% +% \begin{variable}{\c_@@_orig_decl_sign_clist, +% \c_@@_auth_decl_sign_clist} +% 声明页签名项目。 +% \begin{macrocode} +\clist_const:Nn \c_@@_orig_decl_sign_clist + { 作者签名, 日期 } +\clist_const:Nn \c_@@_auth_decl_sign_clist + { 作者签名, 导师签名, 日期 } +% \end{macrocode} +% \end{variable} +% +% \subsubsection{杂项} +% +% \begin{variable}{\c_@@_thesis_type_clist, +% \c_@@_degree_type_clist} +% 论文类型与学位类型。 +% \begin{macrocode} +\clist_const:Nn \c_@@_thesis_type_clist + { 博士学位论文, 硕士学位论文, 本科毕业论文 } +\clist_const:Nn \c_@@_degree_type_clist + { 学术学位, 专业学位 } +% \end{macrocode} +% \end{variable} +% +% \begin{variable}{\c_@@_secret_clist} +% 三种密级。 +% \begin{macrocode} +\clist_const:Nn \c_@@_secret_clist { 秘密, 机密, 绝密 } +% \end{macrocode} +% \end{variable} +% +% 默认名称。注意空格是忽略掉的。 +% \begin{macrocode} +\clist_map_inline:nn + { + { secret_level } { 密 \qquad 级 }, + { secret_star } { \textrm { \bigstar } }, + { school_id } { 学校代码 }, + { student_id } { 学 \qquad 号 }, + { department } { 院系 }, + { major } { 专业 }, + { major_professional } { 专业学位类别(领域) }, + { author } { 姓名 }, + { supervisor } { 指导教师 }, + { date } { 完成日期 }, + { instructors } { 指导小组成员 }, + { author_sign } { 作者签名 }, + { supervisor_sign } { 导师签名 }, + { sign_date } { 日期 }, + { toc } { 目 \quad 录 }, + { lof } { 插图目录 }, + { lot } { 表格目录 }, + { bib_en } { Bibliography }, + { pdf_creator } { LaTeX~ with~ fduthesis~ class }, + { orig_decl } + { \c_@@_name_simp_tl \\ 学位论文独创性声明 }, + { auth_decl } + { \c_@@_name_simp_tl \\ 学位论文使用授权声明 }, + } + { \@@_define_name:nn #1 } +\clist_map_inline:nn + { + { abstract } { 摘 \quad 要 } { Abstract }, + { keywords } { 关键字 } { Keywords: }, + { clc } { 中图分类号 } { CLC~ code: }, + { jel } { JEL 分类号 } { JEL~ code: }, + { notation } { 符号表 } { List~ of~ Symbols }, + { acknowledgements } { 致 \quad 谢 } { Acknowledgements } + } + { \@@_define_name:nnn #1 } +% \end{macrocode} +% +% 默认定理头名称。 +% \begin{macrocode} +\clist_map_inline:nn + { + { proof } { 证明 } { Proof }, + { axiom } { 公理 } { Axiom }, + { corollary } { 推论 } { Corollary }, + { definition } { 定义 } { Definition }, + { example } { 例 } { Example }, + { lemma } { 引理 } { Lemma }, + { theorem } { 定理 } { Theorem } + } + { \@@_define_name:nnn #1 } +% \end{macrocode} +% +% \begin{variable}{\c_@@_name_major_professional_tl} +% \changes{v0.9}{2023/02/05}{处理右括号带来的间距。} +% 处理右括号带来的间距。 +% \begin{macrocode} +\tl_put_right:Nn \c_@@_name_major_professional_tl + { { \skip_horizontal:n { -0.5 em } } } +%</definition> +%<@@=> +% \end{macrocode} +% \end{variable} +% +% \clearpage +% +% \end{implementation} +% |