% \iffalse
%<*driver>
\ProvidesFile{xduts.dtx}
[2022/05/15 v1.15.0.1 Xidian University TeX Suite]
%
%\NeedsTeXFormat{LaTeX2e}
%\RequirePackage{expl3}
%\ProvidesExplPackage{xdufont}
%\ProvidesExplClass{xdupgthesis}
%\ProvidesExplClass{xduugthesis}
% {2022/05/15}{1.15.0.1}
% {Xidian University Font package}
% {Xidian University Postgraduate Thesis document class}
% {Xidian University Undergraduate Thesis document class}
%<*driver>
\PassOptionsToPackage{AutoFakeBold=3}{xeCJK}
\documentclass{ctxdoc}
\changes{v1.9.0.0}{2022/05/03}{支持中文选项默认值加粗}
\changes{v1.9.0.0}{2022/05/03}{增大function环境盒子宽度}
\addtolength{\marginparwidth}{5mm}
\geometry{hmargin={0mm,10mm}}
\changes{v0.6.0.0}{2022/04/10}{新增xdufont宏包}
\changes{v0.5.2.1}{2022/04/09}{修改项目名称}
\changes{v0.4.2.1}{2022/04/05}{调整文档目录缩进}
\usepackage{tocloft}
\setlength{\cftsecindent}{0em}
\setlength{\cftsubsecindent}{1em}
\setlength{\cftsubsubsecindent}{2em}
\setlength{\cftparaindent}{3em}
\setlength{\cftsubparaindent}{4em}
\ctexset{
secnumdepth = 5,
subparagraph = {
afterskip = 1ex plus .2ex,
runin = false
}
}
\setcounter{tocdepth}{5}
\ctexset{punct=quanjiao}
\usepackage{hologo}
\usepackage{fetamont}
\usepackage{xurl}
\usepackage{xspace}
\xspaceaddexceptions{。?!,、;:“”‘’—….--~·《》<>_}
\newcolumntype{Y}{>{\centering\arraybackslash}X}
\usepackage{multirow}
\usepackage{pifont}
\newcommand{\cmark}{\ding{51}}
\usepackage{tabularray}
\SetTblrStyle{caption-tag}{font=\bfseries}
\DefTblrTemplate{caption-sep}{default}{\quad}
\DefTblrTemplate{conthead-text}{default}{(续表)}
\DefTblrTemplate{contfoot-text}{default}{接下页}
% 交叉引用
\newcommand{\secrefx}[1]{第\xspace\ref{#1}\xspace 节}
\newcommand{\tabrefx}[1]{\tablename\xspace\ref{#1}\xspace}
% 文档类选项
\newcommand{\optx}[1]{\xspace\opt{#1}\xspace}
% /name LaTeX3控制序列
\newcommand{\csx}[1]{\xspace\cs{#1}\xspace}
% /name 传统LaTeX2e命令
\newcommand{\tnx}[1]{\xspace\tn{#1}\xspace}
% LaTeX3键值
\newcommand{\metax}[1]{\xspace\meta{#1}\xspace}
% LaTeX3键值对
\newcommand{\breakablethinspace}{\hskip 0.16667em\relax}
\newcommand{\kvoptx}[2]{\xspace\texttt{#1\breakablethinspace=\breakablethinspace#2}\xspace}
% {} LaTeX2e参数
\newcommand{\argx}[1]{\xspace\Arg{#1}\xspace}
% [] LaTeX2e可选参数
\newcommand{\oargx}[1]{\xspace\Arg{#1}\xspace}
% 文件
\usepackage{seqsplit}
\newcommand{\filex}[1]{\xspace{\ttfamily\seqsplit{#1}}\xspace}
% 环境
\newcommand{\envx}[1]{\xspace\env{#1}\xspace}
% 宏包
\newcommand{\pkgx}[1]{\xspace\pkg{#1}\xspace}
% 文档类
\newcommand{\clsx}[1]{\xspace\cls{#1}\xspace}
% 值
\newcommand{\valuex}[1]{\xspace\texttt{#1}\xspace}
% 命令
\newcommand{\cmdx}[1]{\xspace\texttt{#1}\xspace}
% 链接
\newcommand{\footurl}[1]{\footnote{\url{#1}}}
\newcommand{\ctanurl}[1]{\href{https://mirrors.ustc.edu.cn/CTAN/#1}{\ttfamily CTAN://#1}}
\newcommand{\footctan}[1]{\footnote{\ctanurl{#1}}}
% logo
\newcommand{\xduts}{{\bfseries\ffmfamily XDUTS}}
\newcommand{\texlive}{\TeX{} Live}
\newcommand{\mactex}{Mac\TeX{}}
\newcommand{\miktex}{\xspace\hologo{MiKTeX}\xspace}
\newcommand{\bibtex}{\xspace\hologo{BibTeX}\xspace}
\newcommand{\biber}{\xspace\hologo{biber}\xspace\xspace}
% arguments list
\setlist[arguments]{label=\texttt{\#\arabic*}\,:}
% 浮动体默认设置
\makeatletter
\renewcommand{\fps@table}{htbp}
\makeatother
% listings
\definecolor{xdu-ai-orange}{cmyk}{0,0.75,1,0}
\definecolor{xdu-blue}{cmyk}{0.80,0.50,0,0}
\definecolor{xdu-chem-red}{cmyk}{0.28,0.95,0.84,0}
\definecolor{xdu-cs-green}{cmyk}{0.60,0.23,1,0}
\definecolor{xdu-magenta}{cmyk}{0.05,1,0.55,0}
\definecolor{xdu-violet}{cmyk}{0.50,1,0,0.40}
\usepackage{listings}
\lstdefinestyle{style@base}
{
basewidth = 0.5 em,
gobble = 3,
lineskip = 3 pt,
frame = l,
framerule = 1 pt,
framesep = 0 pt,
xleftmargin = 0 em,
xrightmargin = 0 em,
escapeinside = {(*}{*)},
breaklines = true,
basicstyle = \small\ttfamily,
keywordstyle = \bfseries\color{xdu-violet},
commentstyle = \itshape\color{white!50!gray},
stringstyle = \color{xdu-chem-red},
backgroundcolor = \color{white!95!gray}
}
\lstdefinestyle{style@shell}
{
style = style@base,
rulecolor = \color{xdu-magenta},
language = bash,
alsoletter = {-},
emphstyle = \color{xdu-cs-green}
}
\lstdefinestyle{style@latex}
{
style = style@base,
rulecolor = \color{xdu-blue},
language = [LaTeX]TeX,
alsoletter = {*, -},
texcsstyle = *\color{xdu-violet},
emphstyle = [1]\color{xdu-ai-orange},
emphstyle = [2]\color{xdu-cs-green}
}
\lstnewenvironment{shellexample}[1][]{%
\lstset{style=style@shell, #1}}{}
\lstnewenvironment{latexexample}[1][]{%
\lstset{style=style@latex, #1}}{}
\begin{document}
\DocInput{\jobname.dtx}
\IndexLayout
\PrintChanges
\PrintIndex
\end{document}
%
% \fi
% \CheckSum{1315}
% \CharacterTable
% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
% Digits \0\1\2\3\4\5\6\7\8\9
% Exclamation \! Double quote \" Hash (number) \#
% Dollar \$ Percent \% Ampersand \&
% Acute accent \' Left paren \( Right paren \)
% Asterisk \* Plus \+ Comma \,
% Minus \- Point \. Solidus \/
% Colon \: Semicolon \; Less than \<
% Equals \= Greater than \> Question mark \?
% Commercial at \@ Left bracket \[ Backslash \\
% Right bracket \] Circumflex \^ Underscore \_
% Grave accent \` Left brace \{ Vertical bar \|
% Right brace \} Tilde \~}
% \GetFileInfo{\jobname.dtx}
% \title{\bfseries\xduts{}手册}
% \author{\href{https://github.com/note286/}{note286}}
% \date{\href{https://github.com/note286/xduts/releases/tag/\fileversion/}{\fileversion}~(\filedate)}
% \maketitle
% \thispagestyle{empty}
% \begin{abstract}
% \xduts{}是面向西安电子科技大学本科生/研究生的\LaTeXiii{}文档类和宏包套装,
% 仅支持\XeLaTeX{},
% 仅支持\texlive{}、\mactex{}、\miktex{},
% 支持Windows、macOS、GNU/Linux、Overleaf和TeXPage。
% \end{abstract}
% \renewcommand{\abstractname}{免责声明}
% \begin{abstract}
% 在使用\xduts{}时,默认您同意以下内容:
% \begin{enumerate}
% \item \xduts{}作者不对使用\xduts{}产生的格式审查问题负责。
% \item \xduts{}的发布遵守
% \LaTeX{} Project Public License\footurl{https://www.latex-project.org/lppl.txt},
% 使用前请认真阅读协议内容。
% \item 任何个人或组织以\xduts{}为基础进行修改、扩展而生成的新的\LaTeX{}文档类/宏包,
% 请严格遵守\LaTeX{} Project Public License,
% 由于违犯协议而引起的任何纠纷争端均与\xduts{}作者无关。
% \end{enumerate}
% \end{abstract}
% \clearpage
% \tableofcontents
% \clearpage
% \section{介绍}
% \xduts{} (Xidian University \TeX{} Suite)
% 是为了帮助西安电子科技大学本科生/研究生撰写开题报告/学位论文及其他文档
% 而编写的\LaTeXiii{}文档类和宏包套装,目前有:
% \begin{itemize}
% \item \pkgx{xdufont},中/英/数学字体配置宏包。
% \item \clsx{xduugthesis},本科毕业设计论文。
% \end{itemize}
% 正在开发:
% \begin{itemize}
% \item \clsx{xdupgthesis},研究生学位论文。
% \end{itemize}
% 即将支持:
% \begin{itemize}
% \item \clsx{xdupgtp},研究生学位论文开题报告表。
% \item \clsx{xduugtp},本科毕业设计论文开题报告表。
% \end{itemize}
% \par
% \changes{v1.2.0.1}{2022/04/19}{增加GitHub Discussions}
% 本文档将尽量完整地介绍\xduts{}的使用方法,
% 如有不清楚之处,或者想提出改进建议,
% 可以在GitHub Discussions\footurl{https://github.com/note286/xduts/discussions/}
% 参与讨论或提问。
% 如确定\xduts{}存在bug,
% 可以在GitHub Issues\footurl{https://github.com/note286/xduts/issues/}
% 具体描述。另外,\textbf{不接受任何Pull Requests}。
% \StopEventually{}
% \section{使用说明}
% \label{使用说明}
% 《一份(不太)简短的\LaTeXe{}介绍》\footctan{info/lshort/chinese/lshort-zh-cn.pdf}
% 中提及的内容本文档将不再赘述。
% \xduts{}中的所有文档类和宏包仅内置了实现功能所需的宏包,
% 对于常用的宏包如\pkgx{subfig}、\pkgx{algpseudocodex}、
% \pkgx{amsmath}、\pkgx{amsthm}和\pkgx{siunitx}等\textbf{均未内置},
% 用户可以参考\secrefx{兼容性说明}后,视需求自行加载。
% 相应格式规范均已实现,用户仅需要撰写文章内容即可,请勿随意添加格式修改命令。
% \changes{v1.1.2.1}{2022/04/15}{增加默认值说明}
% \textbf{部分样式的默认值并不严格符合学校规范},
% 用户可以结合学校规范并参考\secrefx{功能说明}功能说明自行修改。
% \par
% 请在最新版\LaTeX{}环境中使用最新版\xduts{},
% 认真阅读相应文档类/宏包使用说明章节即可使用\xduts{}。
% \subsection{xdufont}
% \pkgx{xdufont}宏包基于\pkgx{xeCJK},相较于\pkgx{ctex}宏包的主要优势为默认支持宋体粗体、斜体,内置多种字体配置,可任意搭配中/英/数学字体,更加符合校内各种文档的撰写要求。
% \par
% \secrefx{编译}介绍了如何编译,\secrefx{参数设置}介绍了如何自定义配置,具体的配置选项见\secrefx{字体选项}。\pkgx{xdufont}可以搭配任意文档类进行使用,例如:
% \begin{latexexample}[moretexcs={\xdusetup},emph={[1]document}]
% \documentclass{article}
% \usepackage{xdufont}
% \xdusetup{}
% \begin{document}
% 宋体\textbf{加粗}\textsl{加斜}
% \textsf{黑体}\textbf{\textsf{加粗}}\textsl{\textsf{加斜}}
% \end{document}
% \end{latexexample}
% \par
% 学会以上用法后即可使用\pkgx{xdufont}宏包。
% \changes{v1.4.0.0}{2022/04/26}{新增研究生学位论文}
% \subsection{xdupgthesis}
% \subsection{xduugthesis}
% \pkgx{xduugthesis}基于\clsx{ctexbook}文档类,
% 提供多种字体配置,部分样式可自定义,信息录入便捷。
% \changes{v1.3.1.1}{2022/04/26}{英文本科生毕业设计规范参考说明}
% 论文语言为英文时,部分格式符合《外国语学院学士论文写作手册》。
% 请在阅读《本科生毕业设计(论文)工作手册》后再使用\pkgx{xduugthesis}。
% \par
% 典型的\clsx{xduugthesis}主文件结构如下所示:
% \begin{latexexample}[moretexcs={\xdusetup,\frontmatter,\mainmatter,\chapter,\backmatter},emph={[1]document}]
% \documentclass{xduugthesis}
% \xdusetup{}
% \begin{document}
% \frontmatter
% \mainmatter
% \chapter{欢迎}
% 使用\LaTeX{}!
% \backmatter
% \end{document}
% \end{latexexample}
% \par
% \secrefx{编译}介绍了如何编译,
% \secrefx{参考文献引用}介绍了如何引用参考文献,
% \secrefx{参数设置}介绍了如何自定义配置。
% 其中,字体选项见\secrefx{字体选项},
% 部分英文字体切换见\secrefx{英文字体},
% 参考文献配置见\secrefx{参考文献配置},
% 页面配置见\secrefx{页面配置},
% 交叉引用配置见\secrefx{交叉引用配置},
% Caption配置见\secrefx{Caption配置},
% 表格配置见\secrefx{表格配置},
% 算法配置见\secrefx{算法配置},
% 章节配置见\secrefx{章节配置}。
% 如需附录,请使用附录环境,具体见\secrefx{附录环境}。
% 仅支持如下信息录入,具体每个选项的含义见\secrefx{信息录入},如没有部分选项,则删除该行即可。
% \begin{latexexample}[moretexcs={\xdusetup},emph={[2]info}]
% \xdusetup {
% info = {
% title = {第一行标题\\第二行标题},
% department = {电子工程学院},
% major = {电子信息工程},
% author = {张三},
% supervisor = {李四},
% supervisor-department = {王五},
% supervisor-enterprise = {赵六},
% supervisor-school = {刘七},
% class-id = {123456},
% student-id = {12345678910},
% abstract = {abstract-zh.tex},
% abstract* = {abstract-en.tex},
% keywords = {我,就是,充数的,关键词},
% keywords* = {Dummy,Keywords,Here,it is},
% acknowledgements = {acknowledgements.tex}
% }
% }
% \end{latexexample}
% \par
% 学会以上用法后即可使用\clsx{xduugthesis}文档类。
% 另外,在\secrefx{额外命令}中提供了部分额外命令来增强排版。
% \changes{v1.3.0.1}{2022/04/20}{增加兼容性说明}
% \section{兼容性说明}
% \label{兼容性说明}
% \xduts{}对部分常见宏包进行了针对性地适配,
% 需要注意的是,这些宏包仍需用户视需求自行加载。
% \subsection{算法}
% 主要适配算法内容字号和默认浮动位置。
% \pkgx{algorithm}宏包提供了算法浮动体\envx{algorithm}环境,
% 可以搭配\pkgx{algpseudocodex}等宏包使用。
% \pkgx{algorithm2e}宏包提供了算法环境,
% 该宏包提供的\envx{algorithm}环境实际将浮动体与算法内容合二为一。
% \subsection{图片}
% \changes{v1.13.5.1}{2022/05/08}{补充子图引用样式文档}
% 主要适配子图caption字体字号和子图引用样式,
% \changes{v1.4.1.1}{2022/04/27}{修正子图适配宏包名称}
% 包括\pkgx{subfig}宏包和\pkgx{subcaption}宏包。
% \subsection{表格}
% 主要适配表格内容字号,
% 包括所有使用\envx{table}浮动体的表格、
% \pkgx{tabularray}宏包提供的\envx{tblr}、\envx{longtblr}环境
% 和\pkgx{longtable}宏包提供的\envx{longtable}环境。
% \section{功能说明}
% \label{功能说明}
% 请根据\secrefx{使用说明}中相应文档类/宏包的说明来选择性地阅读本节内容。
% \subsection{编译}
% \label{编译}
% \changes{v0.5.1.2}{2022/04/07}{增加编译说明}
% \LaTeX{}本身是命令行程序,通过不同的命令调用所需的编译引擎,编辑器提供的快捷按钮实际只是做了包装。
% \xduts{}仅支持\XeLaTeX{},参考文献默认使用\biber{},也可以切换为\bibtex{}。
% \subsection{参考文献引用}
% \label{参考文献引用}
% \xduts{}提供了两种参考文献处理方式,
% 一种是\pkgx{natbib}和\pkgx{gbt7714}宏包组合,搭配\cmdx{bibtex}命令;
% 另一种是\pkgx{biblatex}宏包,搭配\cmdx{biber}命令。
% 引用参考文献时,\tnx{cite}为上标样式,\tnx{parencite}为非上标样式。
% \subsection{参数设置}
% \label{参数设置}
% \changes{v0.5.1.1}{2022/04/06}{增加xdusetup配置文档}
% \begin{function}[added=2022-03-07]{\xdusetup}
% \begin{syntax}
% \tnx{xdusetup}=\argx{键值列表}
% \end{syntax}
% \xduts{}提供了一系列选项,可自行配置。
% 载入文档类/宏包之后,以下所有选项均可通过统一的命令\tnx{xdusetup}来设置。
% \csx{xdusetup}的参数是一组由(英文)逗号隔开的选项列表,
% 下文中尖括号内列出了若干个允许的选项,其中加粗的为默认选项。
% 列表中的选项通常是\kvoptx{\metax{key}}{\metax{value}}的形式。
% \csx{xdusetup}采用\LaTeXiii{}风格的键值设置,
% 支持不同类型以及多种层次的选项设定。
% 键值列表中,“|=|”左右的空格不影响设置;
% 但需注意,参数列表中不可以出现空行。
% 一些选项包含子选项,如\optx{style}和\optx{info}等,
% 它们可以按如下两种等价方式来设定:
% \begin{latexexample}[morekeywords={\xdusetup},emph={[1]style,cjk-font,latin-font,info,title,author,department}]
% \xdusetup{
% style = { cjk-font = adobe, latin-font = tacn },
% info = {
% title = {论如何让用户认真阅读文档},
% author = {张三},
% department = {排版学院}
% }
% }
% \end{latexexample}
% 或者
% \begin{latexexample}[morekeywords={\xdusetup},emph={[1]style,cjk-font,latin-font,info,title,author,department}]
% \xdusetup{
% style / cjk-font = adobe,
% style / latin-font = tacn,
% info / title = {论如何让用户认真阅读文档},
% info / author = {张三},
% info / department = {排版学院}
% }
% \end{latexexample}
% \end{function}
% \subsection{字体选项}
% \label{字体选项}
% \begin{function}[added=2022-03-06]{style/cjk-font}
% \begin{syntax}
% \optx{style/cjk-font}=\metax{adobe|(fandol)|founder|sinotype|win|none}
% \end{syntax}
% 设置中文字体,具体配置见\tabrefx{tab:cjk-font}。
% \end{function}
% \begin{optdesc}
% \item[none] 关闭内置中文字体配置,需自行配置中文字体。
% \end{optdesc}
% \begin{table}
% \begin{threeparttable}
% \caption{中文字体配置}
% \label{tab:cjk-font}
% \centering
% \begin{tabularx}{\linewidth}{cccc}
% \toprule
% \strong{选项名称} & \strong{罗马字体族} & \strong{无衬线字体族} & \strong{打字机字体族} \\
% \midrule
% |adobe|\tnote{1} & Adobe 宋体 Std/Adobe 楷体 Std & Adobe 黑体 Std & Adobe 仿宋 Std \\
% |fandol| & FandolSong/FandolKai & FandolHei & FandolFang \\
% |founder|\tnote{2} & 方正书宋_GBK/方正楷体_GBK & 方正黑体_GBK & 方正仿宋_GBK \\
% |sinotype|\tnote{3} & 华文宋体/华文楷体 & 华文细黑/华文黑体 & 华文仿宋 \\
% |win|\tnote{4} & 中易宋体/中易楷体 & 中易黑体 & 中易仿宋 \\
% \bottomrule
% \end{tabularx}
% \begin{tablenotes}
% \item [1] \filex{adobesongstd-light.otf}、\filex{adobekaitistd-regular.otf}、\filex{adobeheitistd-regular.otf}和\filex{Adobe-Fangsong-Std-R-Font.otf}。
% \item [2] \filex{FZShuSong-Z01.ttf}、\filex{FZKai-Z03.ttf}、\filex{FZHei-B01.ttf}和\filex{FZFSK.TTF}。
% \item [3] \filex{STSONG.TTF}、\filex{STKAITI.TTF}、\filex{STXIHEI.TTF}、\filex{STHeiti.ttf}和\filex{STFANGSO.TTF}。
% \item [4] \filex{simsun.ttc}、\filex{simkai.ttf}、\filex{simhei.ttf}和\filex{simfang.ttf}。
% \end{tablenotes}
% \end{threeparttable}
% \end{table}
% \begin{function}[added=2022-04-01]{style/cjk-fake-bold}
% \begin{syntax}
% \optx{style/cjk-fake-bold}=\metax{伪粗体粗细程度}
% \end{syntax}
% 设置中文字体伪粗体粗细程度。默认为\valuex{3},对于部分存在对应粗体字体的中文字体,如FandolSong和FandolHei等,该选项不生效。
% \end{function}
% \begin{function}[added=2022-04-01]{style/cjk-fake-slant}
% \begin{syntax}
% \optx{style/cjk-fake-slant}=\metax{伪斜体倾斜程度}
% \end{syntax}
% 设置中文字体伪斜体倾斜程度。默认为\valuex{0.2}。
% \end{function}
% \begin{function}[added=2022-03-06,updated=2022-05-06]{style/latin-font}
% \begin{syntax}
% \optx{style/latin-font}=\metax{tac|tacn|thcs|(gyre)|none}
% \end{syntax}
% 设置英文字体,具体配置见\tabrefx{tab:latin-font}。
% \end{function}
% \begin{optdesc}
% \item[none] 关闭内置英文字体配置,需自行配置英文字体。
% \end{optdesc}
% \begin{table}
% \begin{threeparttable}
% \caption{英文字体配置}
% \label{tab:latin-font}
% \centering
% \begin{tabularx}{\linewidth}{cYYY}
% \toprule
% \strong{选项名称} & \strong{罗马字体族} & \strong{无衬线字体族} & \strong{打字机字体族} \\
% \midrule
% |tac|\tnote{1} & Times New Roman & Arial & Consolas \\
% |tacn|\tnote{2} & Times New Roman & Arial & Courier New \\
% |thcs|\tnote{3} & Times New Roman & Helvetica & Courier Std \\
% |gyre| & TeX Gyre Termes & TeX Gyre Heros & TeX Gyre Cursor \\
% \bottomrule
% \end{tabularx}
% \begin{tablenotes}
% \item [1] \filex{times.ttf}、\filex{timesbd.ttf}、\filex{timesi.ttf}、\filex{timesbi.ttf}、\filex{arial.ttf}、\filex{arialbd.ttf}、\filex{ariali.ttf}、\filex{arialbi.ttf}、\filex{consola.ttf}、\filex{consolab.ttf}、\filex{consolai.ttf}和\filex{consolaz.ttf}。
% \item [2] \filex{times.ttf}、\filex{timesbd.ttf}、\filex{timesi.ttf}、\filex{timesbi.ttf}、\filex{arial.ttf}、\filex{arialbd.ttf}、\filex{ariali.ttf}、\filex{arialbi.ttf}、\filex{cour.ttf}、\filex{courbd.ttf}、\filex{couri.ttf}和\filex{courbi.ttf}。
% \item [3] \filex{times.ttf}、\filex{timesbd.ttf}、\filex{timesi.ttf}、\filex{timesbi.ttf}、\filex{Helvetica.ttf}、\filex{Helvetica~Bold.ttf}、\filex{Helvetica~Oblique.ttf}、\filex{Helvetica~Bold~Oblique.ttf}、\filex{CourierStd.otf}、\filex{CourierStd-Bold.otf}、\filex{CourierStd-Oblique.otf}和\filex{CourierStd-BoldOblique.otf}。
% \end{tablenotes}
% \end{threeparttable}
% \end{table}
% \begin{function}[added=2022-03-06,updated=2022-03-09]{style/math-font}
% \begin{syntax}
% \optx{style/math-font}=\metax{asana|cambria|(cm)|fira|garamond|lm|...|termes|xits|none}
% \end{syntax}
% 设置数学字体,具体配置见\tabrefx{tab:math-font}。除Computer Modern字体外,均使用\pkgx{unicode-math}宏包调用字体。
% \end{function}
% \changes{v0.1.4.1}{2022/04/04}{数学字体风格介绍}
% \begin{optdesc}
% \item[cambria] 微软Office预装的数学字体。
% \item[fira] 无衬线数学字体。
% \item[garamond] Garamond风格。
% \item[lm] 基于Computer Modern风格。
% \item[libertinus] Linux Libertine风格。
% \item[stix] Times风格。
% \item[dejavu] DejaVu风格。
% \item[pagella] Palatino风格。
% \item[termes] Times风格。
% \item[xits] 基于STIX,Times风格,有粗体XITS Math Bold可用。
% \item[none] 关闭内置数学字体配置,需自行配置数学字体。
% \end{optdesc}
% \begin{table}
% \begin{threeparttable}
% \caption{数学字体配置}
% \label{tab:math-font}
% \centering
% \begin{tabularx}{\linewidth}{cY}
% \toprule
% \strong{选项名称} & \strong{字体名称} \\
% \midrule
% |asana| & Asana Math \\
% |cambria|\tnote{1} & Cambria Math \\
% |cm| & Computer Modern \\
% |fira| & Fira Math \\
% |garamond| & Garamond Math \\
% |lm| & Latin Modern Math \\
% |libertinus| & Libertinus Math \\
% |stix| & STIX Math \\
% |bonum| & TeX Gyre Bonum Math \\
% |dejavu| & TeX Gyre DejaVu Math \\
% |pagella| & TeX Gyre Pagella Math \\
% |schola| & TeX Gyre Schola Math \\
% |termes| & TeX Gyre Termes Math \\
% |xits| & XITS Math \\
% \bottomrule
% \end{tabularx}
% \begin{tablenotes}
% \item [1] \filex{cambria.ttc}。
% \end{tablenotes}
% \end{threeparttable}
% \end{table}
% \begin{function}[added=2022-03-14]{style/unicode-math}
% \begin{syntax}
% \optx{style/unicode-math}=\argx{unicode-math宏包选项}
% \end{syntax}
% 修改\pkgx{unicode-math}默认选项,具体配置参考\pkgx{unicode-math}宏包文档,仅在数学字体不为Computer Modern时有效。
% \end{function}
% \begin{function}[added=2022-03-07]{style/font-type}
% \begin{syntax}
% \optx{style/font-type}=\metax{(font)|file}
% \end{syntax}
% 设置字体调用方式。
% \end{function}
% \begin{optdesc}
% \item[font] 相应字体已安装,使用字体名称调用字体。
% \item[file] 相应字体未安装,使用字体文件名称调用字体,适合Overleaf或TeXPage等在线平台,或不方便安装字体的情况。
% \end{optdesc}
% \begin{function}[added=2022-03-07]{style/font-path}
% \begin{syntax}
% \optx{style/font-path}=\argx{路径}
% \end{syntax}
% 设置字体文件路径,即\metax{路径}目录内存储全部所需中文、英文和数学字体文件,仅在\optx{font-type}等于|file|时有效,默认值为\valuex{fonts}。
% \end{function}
% \subsection{英文字体}
% \label{英文字体}
% \begin{function}[added=2022-04-01]{style/en-cjk-font}
% \begin{syntax}
% \optx{style/en-cjk-font}=\metax{true|(false)}
% \end{syntax}
% 切换字体族时,英文是否使用中文字体。主要作用于封面、章节标题、caption、页眉页脚、参考文献列表等。
% \end{function}
% \begin{optdesc}
% \item[true] 英文使用相对应字体族的中文字体。
% \item[false] 英文使用相对应字体族的英文字体。
% \end{optdesc}
% \subsection{语言配置}
% \label{语言配置}
% \begin{function}[added=2022-03-29]{style/language}
% \begin{syntax}
% \optx{style/language}=\metax{(zh)|en}
% \end{syntax}
% 设置论文语言。
% \end{function}
% \begin{optdesc}
% \item[zh] 中文。
% \item[en] 英文。
% \end{optdesc}
% \subsection{参考文献配置}
% \label{参考文献配置}
% \begin{function}[added=2022-04-02,updated=2022-04-03]{style/bib-backend}
% \begin{syntax}
% \optx{style/bib-backend}=\metax{bibtex|(biblatex)}
% \end{syntax}
% 设置参考文献支持方式。
% \end{function}
% \begin{optdesc}
% \item[bibtex] 使用\bibtex{}处理文献,样式由\pkgx{natbib}宏包负责。
% \item[biblatex] 使用\biber{}处理文献,样式由\pkgx{biblatex}宏包负责。
% \end{optdesc}
% \begin{function}[added=2022-04-02]{style/bib-resource}
% \begin{syntax}
% \optx{style/bib-resource}=\argx{参考文献文件路径}
% \end{syntax}
% 设置参考文献\filex{.bib}文件,多个文件之间需要使用英文半角逗号隔开。
% \end{function}
% \subsection{页面配置}
% \label{页面配置}
% \begin{function}[added=2022-04-12]{style/symmetric-margin}
% \begin{syntax}
% \optx{style/symmetric-margin}=\metax{true|(false)}
% \end{syntax}
% 设置左右页边距是否对称。
% \end{function}
% \begin{optdesc}
% \item[true] 对称。
% \item[false] 不对称。
% \end{optdesc}
% \begin{function}[added=2022-05-08]{style/page-vertical-align}
% \begin{syntax}
% \optx{style/page-vertical-align}=\metax{分散对齐|(顶部对齐)}
% \end{syntax}
% 设置页面垂直方向的对齐方式。
% \end{function}
% \begin{optdesc}
% \item[分散对齐] 页面高度均匀地填满,使每一页的底部直接对齐。
% \item[顶部对齐] 页面中的内容保持它的自然高度,每一页的页面底部用空白填满。
% \end{optdesc}
% \subsection{交叉引用配置}
% \label{交叉引用配置}
% \begin{function}[added=2022-04-16,updated=2022-05-08]{style/ref-add-space}
% \begin{syntax}
% \optx{style/ref-add-space}=\metax{true|(false)}
% \end{syntax}
% 是否自动调整\tnx{ref}和\tnx{pageref}两侧中英文间空白。
% \end{function}
% \begin{optdesc}
% \item[true] 自动调整\tnx{ref}和\tnx{pageref}两侧中英文间空白。
% 未避免产生不正常的空白宽度,请不要在\tnx{ref}和\tnx{pageref}两侧输入空格。
% 仅在\optx{language}等于|zh|时有效。
% 请不要使用\pkgx{subcaption}宏包的提供的\tnx{subref}和\tnx{subref*}命令。
% \item[false] 保持原始\tnx{ref}和\tnx{pageref}命令效果。
% \end{optdesc}
% \subsection{Caption配置}
% \label{Caption配置}
% \changes{v1.0.0.0}{2022/04/14}{设置图、表、算法标签与后面标题之间的间距}
% \begin{function}[added=2022-04-14]{style/caption-label-sep}
% \begin{syntax}
% \optx{style/caption-label-sep}=\argx{间距}
% \end{syntax}
% 设置图、表、算法标签与后面标题之间的间距,默认值为\valuex{0.75em}。
% \end{function}
% \begin{function}[added=2022-04-03]{style/fig-label-sep}
% 已弃用。
% \end{function}
% \subsection{表格配置}
% \label{表格配置}
% \changes{v0.10.0.1}{2022/04/13}{补充表格内容字号文档说明}
% \begin{function}[added=2022-04-13,updated=2022-04-15]{style/table-small-font}
% \begin{syntax}
% \optx{style/table-small-font}=\metax{(true)|false}
% \end{syntax}
% 设置表格内容字号是否为五号。
% \end{function}
% \begin{optdesc}
% \item[true] 五号。
% \item[false] 小四号。
% \end{optdesc}
% \subsection{算法配置}
% \label{算法配置}
% \begin{function}[added=2022-04-15]{style/algorithm-small-font}
% \begin{syntax}
% \optx{style/algorithm-small-font}=\metax{(true)|false}
% \end{syntax}
% 设置算法内容字号是否为五号。
% \end{function}
% \begin{optdesc}
% \item[true] 五号。
% \item[false] 小四号。
% \end{optdesc}
% \subsection{章节配置}
% \label{章节配置}
% \begin{function}[added=2022-04-05]{style/before-skip}
% \begin{syntax}
% \optx{style/before-skip}=\argx{间距列表}
% \end{syntax}
% 设置章节标题前的垂直间距,默认值为\valuex{\{24pt, 18pt, 12pt, 12pt, 12pt, 12pt\}},分别对应\tnx{chapter}、\tnx{section}、\tnx{subsection}、\tnx{subsubsection}、\tnx{paragraph}和\tnx{subparagraph}。
% \end{function}
% \begin{function}[added=2022-04-05]{style/after-skip}
% \begin{syntax}
% \optx{style/after-skip}=\argx{间距列表}
% \end{syntax}
% 设置章节标题后的垂直间距,默认值为\valuex{\{18pt, 12pt, 6pt, 6pt, 6pt, 6pt\}},分别对应\tnx{chapter}、\tnx{section}、\tnx{subsection}、\tnx{subsubsection}、\tnx{paragraph}和\tnx{subparagraph}。
% \end{function}
% \begin{function}[added=2022-04-11]
% {
% style/chap-zihao,
% style/sec-zihao,
% style/subsec-zihao,
% style/subsubsec-zihao,
% style/para-zihao,
% style/subpara-zihao
% }
% \begin{syntax}
% \optx{style/chap-zihao}=\metax{0|-0|1|-1|2|-2|3|-3|4|-4|5|-5|6|-6|7|8}
% \optx{style/sec-zihao}=\metax{0|-0|1|-1|2|-2|3|-3|4|-4|5|-5|6|-6|7|8}
% \optx{style/subsec-zihao}=\metax{0|-0|1|-1|2|-2|3|-3|4|-4|5|-5|6|-6|7|8}
% \optx{style/subsubsec-zihao}=\metax{0|-0|1|-1|2|-2|3|-3|4|-4|5|-5|6|-6|7|8}
% \optx{style/para-zihao}=\metax{0|-0|1|-1|2|-2|3|-3|4|-4|5|-5|6|-6|7|8}
% \optx{style/subpara-zihao}=\metax{0|-0|1|-1|2|-2|3|-3|4|-4|5|-5|6|-6|7|8}
% \end{syntax}
% 设置章节标题字号。
% 当论文语言为中文时,默认值分别为\valuex{3}、\valuex{4}、\valuex{4}、\valuex{4}、\valuex{4}、\valuex{4}。
% 当论文语言为英文时,默认值分别为\valuex{4}、\valuex{-4}、\valuex{-4}、\valuex{-4}、\valuex{-4}、\valuex{-4}。
% \end{function}
% \begin{optdesc}
% \item[0] 初号
% \item[−0] 小初号
% \item[1] 一号
% \item[-1] 小一号
% \item[2] 二号
% \item[-2] 小二号
% \item[3] 三号
% \item[-3] 小三号
% \item[4] 四号
% \item[-4] 小四号
% \item[5] 五号
% \item[-5] 小五号
% \item[6] 六号
% \item[-6] 小六号
% \item[7] 七号
% \item[8] 八号
% \end{optdesc}
% \subsection{附录环境}
% \label{附录环境}
% \begin{function}[added=2022-04-04]{appendixes}
% 附录位于参考文献后,即在\tnx{backmatter}后。
% \begin{latexexample}[emph={[1]appendixes}]
% \begin{appendixes}
% \chapter{这是一个附录}
% \chapter{这是另一个附录}
% \end{appendixes}
% \end{latexexample}
% \end{function}
% \subsection{信息录入}
% \label{信息录入}
% \changes{v1.9.0.0}{2022/05/03}{增加信息录入选项分类表}
% \changes{v1.10.3.1}{2022/05/04}{移除专业博士校外导师信息录入}
% 用户根据\tabrefx{tblr:info}选择相应的选项进行信息录入。
% \begin{tblr}
% [
% long,
% caption = {信息录入选项分类},
% label = {tblr:info}
% ]
% {
% width = \linewidth,
% colspec = lX[c]X[c]X[c]X[c]X[c]X[c],
% cell{1}{1} = {r = 2}{},
% cell{1}{2} = {c = 2}{},
% cell{1}{4} = {c = 2}{},
% cell{1}{6} = {c = 2}{},
% hline{1,Z} = {.08em},
% hline{2} = {2-3}{.08em, leftpos = -1, rightpos = -1, endpos},
% hline{2} = {4-5}{.08em, leftpos = -1, rightpos = -1, endpos},
% hline{2} = {6-7}{.08em, leftpos = -1, rightpos = -1, endpos},
% hline{3} = {.08em},
% cell{odd[3-Z]}{1-Z} = {gray9},
% cell{3-Z}{1} = {cmd = \texttt},
% rowhead = 2
% }
% & 本科 & & 硕士 & & 博士 & \\
% & 校内 & 校外 & 学术 & 专业 & 学术 & 专业 \\
% graduate-type & & & \cmark & \cmark & \cmark & \cmark \\
% degree-type & & & \cmark & \cmark & \cmark & \cmark \\
% degree & & & \cmark & \cmark & \cmark & \cmark \\
% degree* & & & & \cmark & & \\
% title & \cmark & \cmark & \cmark & \cmark & \cmark & \cmark \\
% title* & & & \cmark & \cmark & \cmark & \cmark \\
% department & \cmark & \cmark & \cmark & \cmark & \cmark & \cmark \\
% major & \cmark & \cmark & \cmark & & \cmark & \\
% major* & & & \cmark & & \cmark & \\
% sub-major & & & \cmark & & \cmark & \\
% domain & & & & \cmark & & \cmark \\
% author & \cmark & \cmark & \cmark & \cmark & \cmark & \cmark \\
% author* & & & \cmark & \cmark & \cmark & \cmark \\
% supervisor & \cmark & & \cmark & \cmark & \cmark & \cmark \\
% supervisor* & & & \cmark & \cmark & \cmark & \cmark \\
% supervisor-department & \cmark & & & & & \\
% supervisor-enterprise & & \cmark & & \cmark & & \\
% supervisor-enterprise* & & & & \cmark & & \\
% supervisor-school & & \cmark & & & & \\
% supervisor-title & & & \cmark & \cmark & \cmark & \cmark \\
% supervisor-title* & & & \cmark & \cmark & \cmark & \cmark \\
% supervisor-enterprise-title & & & & \cmark & & \\
% supervisor-enterprise-title* & & & & \cmark & & \\
% class-id & \cmark & \cmark & & & & \\
% student-id & \cmark & \cmark & \cmark & \cmark & \cmark & \cmark \\
% clc & & & \cmark & \cmark & \cmark & \cmark \\
% secret-level & & & \cmark & \cmark & \cmark & \cmark \\
% submit-date & & & \cmark & \cmark & \cmark & \cmark \\
% abstract & \cmark & \cmark & \cmark & \cmark & \cmark & \cmark \\
% abstract* & \cmark & \cmark & \cmark & \cmark & \cmark & \cmark \\
% keywords & \cmark & \cmark & \cmark & \cmark & \cmark & \cmark \\
% keywords* & \cmark & \cmark & \cmark & \cmark & \cmark & \cmark \\
% acknowledgements & \cmark & \cmark & \cmark & \cmark & \cmark & \cmark \\
% \end{tblr}
% \changes{v1.9.0.0}{2022/05/03}{增加研究生信息录入选项文档}
% \begin{function}[added=2022-05-02,updated=2022-05-03]{info/graduate-type}
% \begin{syntax}
% \optx{info/graduate-type}=\metax{(硕士)|博士}
% \end{syntax}
% 设置研究生类型。
% \end{function}
% \begin{optdesc}
% \item[硕士] 硕士研究生。
% \item[博士] 博士研究生。
% \end{optdesc}
% \begin{function}[added=2022-05-03]{info/degree-type}
% \begin{syntax}
% \optx{info/degree-type}=\metax{(学术)|专业}
% \end{syntax}
% 设置研究生学位类型。
% \end{function}
% \begin{optdesc}
% \item[学术] 学术学位。
% \item[专业] 专业学位。
% \end{optdesc}
% \begin{function}[added=2022-05-03]{info/degree,info/degree*}
% \begin{syntax}
% \optx{info/degree}=\argx{研究生学位类别中文名称}
% \optx{info/degree*}=\argx{研究生学位类别英文名称}
% \end{syntax}
% 设置研究生学位类别。
% \end{function}
% \begin{function}[added=2022-04-01,updated=2022-05-03]{info/title,info/title*}
% \begin{syntax}
% \optx{info/title}=\argx{论文中文标题}
% \optx{info/title*}=\argx{论文英文标题}
% \end{syntax}
% 设置论文标题。如果需要手动制定换行位点,请使用换行控制符(|\\|),最多两行。
% \end{function}
% \begin{function}[added=2022-04-01]{info/department}
% \begin{syntax}
% \optx{info/department}=\argx{院系名称}
% \end{syntax}
% 设置院系名称。
% \end{function}
% \begin{function}[added=2022-04-01,updated=2022-05-03]{info/major,info/major*}
% \begin{syntax}
% \optx{info/major}=\argx{专业名称/一级学科名称}
% \optx{info/major*}=\argx{一级学科英文名称}
% \end{syntax}
% 设置专业名称/一级学科名称。
% \end{function}
% \begin{function}[added=2022-05-03]{info/sub-major}
% \begin{syntax}
% \optx{info/sub-major}=\argx{二级学科名称}
% \end{syntax}
% 设置二级学科名称。
% \end{function}
% \begin{function}[added=2022-05-03]{info/domain}
% \begin{syntax}
% \optx{info/domain}=\argx{领域}
% \end{syntax}
% 设置领域名称。
% \end{function}
% \begin{function}[added=2022-04-01,updated=2022-05-03]{info/author,info/author*}
% \begin{syntax}
% \optx{info/author}=\argx{作者姓名}
% \optx{info/author*}=\argx{作者姓名拼音}
% \end{syntax}
% 设置作者姓名。
% \end{function}
% \begin{function}[added=2022-04-01,updated=2022-05-03]{info/supervisor,info/supervisor*}
% \begin{syntax}
% \optx{info/supervisor}=\argx{导师姓名}
% \optx{info/supervisor*}=\argx{导师姓名拼音}
% \end{syntax}
% 设置导师姓名。
% \end{function}
% \begin{function}[added=2022-04-01]{info/supervisor-department}
% \begin{syntax}
% \optx{info/supervisor-department}=\argx{院内导师姓名}
% \end{syntax}
% 设置院内导师姓名。
% \end{function}
% \begin{function}[added=2022-04-01,updated=2022-05-03]{info/supervisor-enterprise,info/supervisor-enterprise*}
% \begin{syntax}
% \optx{info/supervisor-enterprise}=\argx{校外导师姓名}
% \optx{info/supervisor-enterprise*}=\argx{校外导师姓名拼音}
% \end{syntax}
% 设置校外导师姓名。
% \end{function}
% \begin{function}[added=2022-04-01]{info/supervisor-school}
% \begin{syntax}
% \optx{info/supervisor-school}=\argx{校内导师姓名}
% \end{syntax}
% 设置校内导师姓名。
% \end{function}
% \begin{function}[added=2022-05-03]{info/supervisor-title,info/supervisor-title*}
% \begin{syntax}
% \optx{info/supervisor-title}=\argx{导师职称}
% \optx{info/supervisor-title*}=\argx{导师职称英文名称}
% \end{syntax}
% 设置导师职称。
% \end{function}
% \begin{function}[added=2022-05-03]{info/supervisor-enterprise-title,info/supervisor-enterprise-title*}
% \begin{syntax}
% \optx{info/supervisor-enterprise-title}=\argx{校外导师职称}
% \optx{info/supervisor-enterprise-title*}=\argx{校外导师职称英文名称}
% \end{syntax}
% 设置校外导师职称。
% \end{function}
% \begin{function}[added=2022-04-01]{info/class-id}
% \begin{syntax}
% \optx{info/class-id}=\argx{作者班级号}
% \end{syntax}
% 设置作者班级号。
% \end{function}
% \begin{function}[added=2022-04-01]{info/student-id}
% \begin{syntax}
% \optx{info/student-id}=\argx{作者学号}
% \end{syntax}
% 设置作者学号。
% \end{function}
% \begin{function}[added=2022-05-03]{info/clc}
% \begin{syntax}
% \optx{info/clc}=\argx{中图分类号}
% \end{syntax}
% 设置中图分类号。
% \end{function}
% \begin{function}[added=2022-05-03]{info/secret-level}
% \begin{syntax}
% \optx{info/secret-level}=\metax{秘密|(公开)}
% \end{syntax}
% 设置密级。
% \end{function}
% \begin{function}[added=2022-05-03]{info/submit-date}
% \begin{syntax}
% \optx{info/submit-date}=\argx{提交日期}
% \end{syntax}
% 设置提交日期。
% \end{function}
% \begin{function}[added=2022-04-02]{info/abstract,info/abstract*}
% \begin{syntax}
% \optx{info/abstract}=\argx{中文摘要文件路径}
% \optx{info/abstract*}=\argx{英文摘要文件路径}
% \end{syntax}
% 设置摘要文件路径,相应文件内仅撰写摘要内容,无需任何环境。
% \end{function}
% \begin{function}[added=2022-04-02]{info/keywords,info/keywords*}
% \begin{syntax}
% \optx{info/keywords}=\argx{中文关键词}
% \optx{info/keywords*}=\argx{英文关键词}
% \end{syntax}
% 设置关键词,关键词之间需要使用英文半角逗号隔开。
% \end{function}
% \begin{function}[added=2022-04-02]{info/acknowledgements}
% \begin{syntax}
% \optx{info/acknowledgements}=\argx{致谢文件路径}
% \end{syntax}
% 设置致谢文件路径,相应文件内仅撰写致谢内容,无需任何环境。
% \end{function}
% \subsection{额外命令}
% \label{额外命令}
% \begin{function}[added=2022-05-13]{\noauxwrite}
% \begin{syntax}
% \tn{noauxwrite}\marg{参考文献引用命令}
% \end{syntax}
% \tnx{noauxwrite}允许添加不影响现有引用列表顺序的引用。
% 一个简单的例子如下所示:
% \begin{latexexample}[moretexcs={\noauxwrite,\caption,\parencite}]
% \caption{本文与文献\noauxwrite{\parencite{某文献}}计算开销对比}
% \end{latexexample}
% \end{function}
% \section{贡献者}
% \xduts{}的开发过程中,唯一维护者为
% \href{https://github.com/note286/}{\ttfamily @note286}。
% \changes{v1.15.0.1}{2022/05/15}{增加\clsx{xduugthesis}内测人员}
% 其中,在\clsx{xduugthesis}的开发过程中,
% \href{https://github.com/Ke-Huo}{\ttfamily @Ke-Huo}、
% \href{https://github.com/GRHun}{\ttfamily @RH}、
% \href{https://github.com/songyueran}{\ttfamily @syr-bloom}
% 等人参与了内测。
% 同时,也要感谢所有在GitHub和睿思上反馈问题和提出建议的同学、老师们。
% \xduts{}的持续发展,离不开你们的帮助与支持。
% \section{致谢}
% 在学习文学编程的过程中,
% 《在\LaTeX{}中进行文学编程》\footurl{https://liam.page/2015/01/23/literate-programming-in-latex/}
% 和《Good things come in little packages: An introduction to writing .ins and .dtx files》\footurl{https://www.tug.org/TUGboat/tb29-2/tb92pakin.pdf}
% 提供了很大帮助。
% 在文档的编写过程中,参考了
% \filex{ctex.dtx}\footctan{language/chinese/ctex/ctex.dtx}、
% \filex{fduthesis.dtx}\footctan{macros/latex/contrib/fduthesis/fduthesis.dtx}、
% \filex{njuthesis.dtx}\footctan{macros/unicodetex/latex/njuthesis/njuthesis.dtx}
% 和\filex{thuthesis.dtx}\footctan{macros/latex/contrib/thuthesis/thuthesis.dtx}。
% \clearpage
% \section{代码实现}
% \changes{v0.1.0.0}{2022/04/03}{基本完成本科毕业设计论文模板}
% \setlength\parindent{0pt}
% \begin{macrocode}
%<@@=xdu>
% \end{macrocode}
% \subsection{文档类和宏包}
% \begin{macrocode}
%<*class|sty>
% \end{macrocode}
% \begin{macrocode}
\RequirePackage { xparse, l3keys2e }
% \end{macrocode}
% \begin{macro}{\PassOptionsToPackage}
% 忽略字体警告。
% \begin{macrocode}
\PassOptionsToPackage { quiet } { xeCJK }
% \end{macrocode}
% \end{macro}
% \begin{macrocode}
%
%<*class>
% \end{macrocode}
% \begin{macro}{\PassOptionsToClass,\LoadClass}
% \changes{v0.3.2.0}{2022/04/04}{修正行间距为1.5倍}
% \changes{v1.8.1.0}{2022/05/03}{修正页面尺寸}
% \changes{v1.9.2.0}{2022/05/04}{修正行间距为1.625倍}
% 加载\clsx{ctexbook}文档类。
% \\
% \LaTeX{}中基本行距是字号大小的1.2倍,Microsoft Word中基本行距是字号大小的1.3倍,
% Microsoft Word中1.5倍行距,相当于LaTeX中$1.5\times\frac{1.3}{1.2}=1.625$倍行距。
% \begin{macrocode}
\PassOptionsToClass
{
a4paper,
zihao=-4,
sub4section,
% linespread = 1.625,
fontset = none
}
{ ctexbook }
\LoadClass { ctexbook }
% \end{macrocode}
% \end{macro}
% 设置纸张尺寸为A4。
% \begin{macrocode}
\RequirePackage { geometry }
\geometry { paper = a4paper }
% \end{macrocode}
% \begin{macrocode}
%
%<*thesis>
% \end{macrocode}
% \begin{macrocode}
\RequirePackage { fancyhdr }
\RequirePackage { xeCJKfntef }
\RequirePackage { graphicx }
% \end{macrocode}
% \begin{macrocode}
%
%<*xdufont>
% \end{macrocode}
% \begin{macrocode}
\RequirePackage { xeCJK }
% \end{macrocode}
% \begin{macrocode}
%
% \end{macrocode}
% \subsection{字体配置}
% \begin{macrocode}
%<*class|xdufont>
% \end{macrocode}
% \begin{variable}
% {
% \l_@@_cjk_font_tl,
% \l_@@_fake_bold_tl,
% \l_@@_fake_slant_tl,
% \l_@@_latin_font_tl,
% \l_@@_math_font_tl,
% \l_@@_unicode_math_tl,
% \l_@@_font_type_tl,
% \l_@@_font_path_tl
% }
% 中文字体配置名称。
% \begin{macrocode}
\tl_new:N \l_@@_cjk_font_tl
% \end{macrocode}
% \changes{v0.8.2.0}{2022/04/12}{修复LaTeX3新接口导致的Overleaf无法编译}
% 中文字体伪粗体粗细程度。
% \begin{macrocode}
\tl_new:N \l_@@_fake_bold_tl
% \end{macrocode}
% 中文字体伪斜体倾斜程度。
% \begin{macrocode}
\tl_new:N \l_@@_fake_slant_tl
% \end{macrocode}
% 英文字体配置名称。
% \begin{macrocode}
\tl_new:N \l_@@_latin_font_tl
% \end{macrocode}
% 数学字体配置名称。
% \begin{macrocode}
\tl_new:N \l_@@_math_font_tl
% \end{macrocode}
% unicode-math配置选项。
% \begin{macrocode}
\tl_new:N \l_@@_unicode_math_tl
% \end{macrocode}
% 字体名称/文件名称。
% \begin{macrocode}
\tl_new:N \l_@@_font_type_tl
% \end{macrocode}
% 字体文件路径。
% \begin{macrocode}
\tl_new:N \l_@@_font_path_tl
% \end{macrocode}
% \end{variable}
% \begin{macro}{\keys_define:nn}
% 定义样式键值。
% \begin{macrocode}
\keys_define:nn { xdu / style }
{
% \end{macrocode}
% 中文字体配置。
% \begin{macrocode}
cjk-font .choices:nn =
{ win, adobe, founder, sinotype, fandol, none }
{ \tl_set_eq:NN \l_@@_cjk_font_tl \l_keys_choice_tl },
% \end{macrocode}
% 中文字体伪粗体粗细程度。
% \begin{macrocode}
cjk-fake-bold .tl_set:N = \l_@@_fake_bold_tl,
% \end{macrocode}
% 中文字体伪斜体倾斜程度。
% \begin{macrocode}
cjk-fake-slant .tl_set:N = \l_@@_fake_slant_tl,
% \end{macrocode}
% 英文字体配置。
% \begin{macrocode}
latin-font .choices:nn = { tac, tacn, thcs, gyre, none }
{ \tl_set_eq:NN \l_@@_latin_font_tl \l_keys_choice_tl },
% \end{macrocode}
% 数学字体配置。
% \begin{macrocode}
math-font .choices:nn =
{
asana, cambria, cm, fira, garamond, lm, libertinus, stix,
bonum, dejavu, pagella, schola, termes, xits, none
}
{ \tl_set_eq:NN \l_@@_math_font_tl \l_keys_choice_tl },
unicode-math .tl_set:N = \l_@@_unicode_math_tl,
% \end{macrocode}
% 字体调用方式配置,文件名称/字体名称。
% \begin{macrocode}
font-type .choices:nn = { font, file }
{ \tl_set_eq:NN \l_@@_font_type_tl \l_keys_choice_tl },
% \end{macrocode}
% 字体文件路径配置。
% \begin{macrocode}
font-path .tl_set:N = \l_@@_font_path_tl
}
% \end{macrocode}
% \end{macro}
% \begin{macro}{\keys_set:nn}
% \changes{v0.9.1.0}{2022/04/13}{修改中英文字体默认配置}
% 初始设置。
% \begin{macrocode}
\keys_set:nn { xdu }
{
style / cjk-font = fandol,
style / cjk-fake-bold = 3,
style / cjk-fake-slant = 0.2,
style / latin-font = gyre,
style / math-font = cm,
style / unicode-math = { },
style / font-type = font,
style / font-path = fonts
}
% \end{macrocode}
% \end{macro}
% \begin{macro}{\@@_if_platform_macos:FT}
% \changes{v0.5.1.0}{2022/04/06}{判断操作系统是否是macOS}
% 判断操作系统是否是macOS。
% \begin{arguments}
% \item 非macOS。
% \item macOS。
% \end{arguments}
% \begin{macrocode}
\cs_new:Npn \@@_if_platform_macos:FT #1#2
{ \file_if_exist:nTF { /System/Library/Fonts/Menlo.ttc } { #2 } { #1 } }
% \end{macrocode}
% \end{macro}
% \begin{macro}{\@@_texmf_font:nn}
% \changes{v0.5.1.0}{2022/04/06}{加载字体时自动判断是否为macOS平台}
% 调用TEXMF中的字体时根据操作系统是否是macOS自动选择调用字体名或文件名。
% \begin{arguments}
% \item 字体名。
% \item 文件名。
% \end{arguments}
% \begin{macrocode}
\cs_new:Npn \@@_texmf_font:nn #1#2
{ \@@_if_platform_macos:FT { #1 } { #2 } }
% \end{macrocode}
% \end{macro}
% \begin{macro}{\@@_select_font:nn}
% 自动选择字体文件名称或字体名称。
% \begin{arguments}
% \item 字体名称。
% \item 字体文件名称。
% \end{arguments}
% \begin{macrocode}
\cs_new:Npn \@@_select_font:nn #1#2
{
\str_if_eq:NNTF { \l_@@_font_type_tl } { font }
{ #1 }
{ #2 }
}
% \end{macrocode}
% \end{macro}
% \begin{macro}{\@@_font_path:}
% 当选择使用字体文件配置字体时,设置字体文件路径。
% \begin{macrocode}
\cs_new:Npn \@@_font_path:
{
\str_if_eq:NNTF { \l_@@_font_type_tl } { font }
{ }
{ Path = \l_@@_font_path_tl / , }
}
% \end{macrocode}
% \end{macro}
% \subsubsection{中文字体}
% \begin{macro}{\@@_cfg_cjk_font_sub_b:}
% 中文粗体。
% \begin{macrocode}
\cs_new:Npn \@@_cfg_cjk_font_sub_b:n #1
{
BoldFont = { #1 }
}
% \end{macrocode}
% \end{macro}
% \begin{macro}{\@@_cfg_cjk_font_sub_fb:n}
% 中文伪粗体。
% \begin{macrocode}
\cs_new:Npn \@@_cfg_cjk_font_sub_fb:n #1
{
BoldFont = { #1 },
BoldFeatures = { FakeBold = \l_@@_fake_bold_tl }
}
% \end{macrocode}
% \end{macro}
% \begin{macro}{\@@_cfg_cjk_font_sub_fs:n}
% 中文伪斜体。
% \begin{macrocode}
\cs_new:Npn \@@_cfg_cjk_font_sub_fs:n #1
{
SlantedFont = { #1 },
SlantedFeatures = { FakeSlant = \l_@@_fake_slant_tl }
}
% \end{macrocode}
% \end{macro}
% \begin{macro}{\@@_cfg_cjk_font_sub_fbfs:n}
% 中文伪粗斜体。
% \begin{macrocode}
\cs_new:Npn \@@_cfg_cjk_font_sub_fbfs:n #1
{
BoldSlantedFont = { #1 },
BoldSlantedFeatures =
{
FakeBold = \l_@@_fake_bold_tl,
FakeSlant = \l_@@_fake_slant_tl
}
}
% \end{macrocode}
% \end{macro}
% \begin{macro}{\@@_cfg_cjk_font_sub_bfs:n}
% 中文粗伪斜体。
% \begin{macrocode}
\cs_new:Npn \@@_cfg_cjk_font_sub_bfs:n #1
{
BoldSlantedFont = { #1 },
BoldSlantedFeatures = { FakeSlant = \l_@@_fake_slant_tl }
}
% \end{macrocode}
% \end{macro}
% \begin{macro}{\@@_cfg_cjk_font_sub_i:n}
% 中文意大利体。
% \begin{macrocode}
\cs_new:Npn \@@_cfg_cjk_font_sub_i:n #1
{
ItalicFont = { #1 }
}
% \end{macrocode}
% \end{macro}
% \begin{macro}{\@@_cfg_cjk_font_sub_fi:n}
% 中文伪意大利体,即伪斜体。
% \begin{macrocode}
\cs_new:Npn \@@_cfg_cjk_font_sub_fi:n #1
{
ItalicFont = { #1 },
ItalicFeatures = { FakeSlant = \l_@@_fake_slant_tl }
}
% \end{macrocode}
% \end{macro}
% \begin{macro}{\@@_cfg_cjk_font_sub_ifb:n}
% 中文意大利体伪粗体。
% \begin{macrocode}
\cs_new:Npn \@@_cfg_cjk_font_sub_ifb:n #1
{
BoldItalicFont = { #1 },
BoldItalicFeatures = { FakeBold = \l_@@_fake_bold_tl }
}
% \end{macrocode}
% \end{macro}
% \begin{macro}{\@@_cfg_cjk_font_sub_fifb:n}
% 中文伪意大利体伪粗体。
% \begin{macrocode}
\cs_new:Npn \@@_cfg_cjk_font_sub_fifb:n #1
{
BoldItalicFont = { #1 },
BoldItalicFeatures =
{
FakeBold = \l_@@_fake_bold_tl,
FakeSlant = \l_@@_fake_slant_tl
}
}
% \end{macrocode}
% \end{macro}
% \begin{macro}{\@@_cfg_cjk_font_r:n}
% 配置中文字体,包括粗体、斜体、斜粗体、意大利体、粗意大利体。
% \begin{macrocode}
\cs_new:Npn \@@_cfg_cjk_font_r:n #1
{
\@@_cfg_cjk_font_sub_fb:n { #1 },
\@@_cfg_cjk_font_sub_fs:n { #1 },
\@@_cfg_cjk_font_sub_fbfs:n { #1 },
\@@_cfg_cjk_font_sub_fi:n { #1 },
\@@_cfg_cjk_font_sub_fifb:n { #1 }
}
% \end{macrocode}
% \end{macro}
% \begin{macro}{\@@_cfg_cjk_font_rb:nn}
% 配置中文字体,包括粗体、斜体、斜粗体、意大利体、粗意大利体,其中粗体和斜粗体为其他字体。
% \begin{arguments}
% \item 常规字体。
% \item 粗体字体。
% \end{arguments}
% \begin{macrocode}
\cs_new:Npn \@@_cfg_cjk_font_rb:nn #1#2
{
\@@_cfg_cjk_font_sub_b:n { #2 },
\@@_cfg_cjk_font_sub_fs:n { #1 },
\@@_cfg_cjk_font_sub_bfs:n { #2 },
\@@_cfg_cjk_font_sub_fi:n { #1 },
\@@_cfg_cjk_font_sub_fifb:n { #1 }
}
% \end{macrocode}
% \end{macro}
% \begin{macro}{\@@_cfg_cjk_font_ri:nn}
% 配置中文字体,包括粗体、斜体、斜粗体、意大利体、粗意大利体,其中意大利体和粗意大利体为其他字体。
% \begin{arguments}
% \item 常规字体。
% \item 意大利体字体。
% \end{arguments}
% \begin{macrocode}
\cs_new:Npn \@@_cfg_cjk_font_ri:nn #1#2
{
\@@_cfg_cjk_font_sub_fb:n { #1 },
\@@_cfg_cjk_font_sub_fs:n { #1 },
\@@_cfg_cjk_font_sub_fbfs:n { #1 },
\@@_cfg_cjk_font_sub_i:n { #2 },
\@@_cfg_cjk_font_sub_ifb:n { #2 }
}
% \end{macrocode}
% \end{macro}
% \begin{macro}{\@@_cfg_cjk_font_rbi:nnn}
% 配置中文字体,包括粗体、斜体、斜粗体、意大利体、粗意大利体,其中粗体、斜粗体、意大利体和粗意大利体为其他字体。
% \begin{arguments}
% \item 常规字体。
% \item 粗体字体。
% \item 意大利体字体。
% \end{arguments}
% \begin{macrocode}
\cs_new:Npn \@@_cfg_cjk_font_rbi:nnn #1#2#3
{
\@@_cfg_cjk_font_sub_b:n { #2 },
\@@_cfg_cjk_font_sub_fs:n { #1 },
\@@_cfg_cjk_font_sub_bfs:n { #2 },
\@@_cfg_cjk_font_sub_i:n { #3 },
\@@_cfg_cjk_font_sub_ifb:n { #3 }
}
% \end{macrocode}
% \end{macro}
% \begin{macro}{\@@_set_cjk_main_font:nn,\@@_set_cjk_main_font:nnn}
% 配置中文罗马族字体。
% \begin{arguments}
% \item 宋体字体。
% \item 楷体字体。
% \end{arguments}
% \begin{macrocode}
\cs_new:Npn \@@_set_cjk_main_font:nn #1#2
{
\setCJKmainfont { #1 }
[ \@@_font_path: \@@_cfg_cjk_font_ri:nn { #1 } { #2 } ]
}
\cs_new:Npn \@@_set_cjk_main_font:nnn #1#2#3
{
\setCJKmainfont { #1 }
[ \@@_font_path: \@@_cfg_cjk_font_rbi:nnn { #1 } { #2 } { #3 } ]
}
% \end{macrocode}
% \end{macro}
% \begin{macro}{\@@_set_cjk_sans_font:n,\@@_set_cjk_sans_font:nn}
% 配置中文无衬线族字体。
% \begin{macrocode}
\cs_new:Npn \@@_set_cjk_sans_font:n #1
{
\setCJKsansfont { #1 }
[ \@@_font_path: \@@_cfg_cjk_font_r:n { #1 } ]
}
\cs_new:Npn \@@_set_cjk_sans_font:nn #1#2
{
\setCJKsansfont { #1 }
[ \@@_font_path: \@@_cfg_cjk_font_rb:nn { #1 } { #2 } ]
}
% \end{macrocode}
% \end{macro}
% \begin{macro}{\@@_set_cjk_mono_font:n}
% 配置中文等宽族字体。
% \begin{macrocode}
\cs_new:Npn \@@_set_cjk_mono_font:n #1
{
\setCJKmonofont { #1 }
[ \@@_font_path: \@@_cfg_cjk_font_r:n { #1 } ]
}
% \end{macrocode}
% \end{macro}
% \begin{macro}{\@@_load_cjk_font_win:}
% 中文字体配置\valuex{win}。
% \begin{macrocode}
\cs_new:Npn \@@_load_cjk_font_win:
{
\@@_set_cjk_main_font:nn
{ \@@_select_font:nn { SimSun } { simsun.ttc } }
{ \@@_select_font:nn { KaiTi } { simkai.ttf } }
\@@_set_cjk_sans_font:n
{ \@@_select_font:nn { SimHei } { simhei.ttf } }
\@@_set_cjk_mono_font:n
{ \@@_select_font:nn { FangSong } { simfang.ttf } }
}
% \end{macrocode}
% \end{macro}
% \begin{macro}{\@@_load_cjk_font_adobe:}
% 中文字体配置\valuex{adobe}。
% \begin{macrocode}
\cs_new:Npn \@@_load_cjk_font_adobe:
{
\@@_set_cjk_main_font:nn
{ \@@_select_font:nn { Adobe~Song~Std } { adobesongstd-light.otf } }
{ \@@_select_font:nn { Adobe~Kaiti~Std } { adobekaitistd-regular.otf } }
\@@_set_cjk_sans_font:n
{ \@@_select_font:nn { Adobe~Heiti~Std } { adobeheitistd-regular.otf } }
\@@_set_cjk_mono_font:n
{ \@@_select_font:nn { Adobe~Fangsong~Std } { Adobe-Fangsong-Std-R-Font.otf } }
}
% \end{macrocode}
% \end{macro}
% \begin{macro}{\@@_load_cjk_font_founder:}
% \changes{v0.5.1.0}{2022/04/06}{适配macOS平台方正字体}
% 中文字体配置\valuex{founder}。
% \begin{macrocode}
\cs_new:Npn \@@_load_cjk_font_founder:
{
\@@_set_cjk_main_font:nn
{ \@@_select_font:nn { FZShuSong-Z01 } { FZShuSong-Z01.ttf } }
{ \@@_select_font:nn { FZKai-Z03 } { FZKai-Z03.ttf } }
\@@_set_cjk_sans_font:n
{ \@@_select_font:nn { FZHei-B01 } { FZHei-B01.ttf } }
\@@_set_cjk_mono_font:n
{ \@@_select_font:nn { FZFangSong-Z02 } { FZFSK.TTF } }
}
% \end{macrocode}
% \end{macro}
% \begin{macro}{\@@_load_cjk_font_sinotype:}
% 中文字体配置\valuex{sinotype}。
% \begin{macrocode}
\cs_new:Npn \@@_load_cjk_font_sinotype:
{
\@@_set_cjk_main_font:nn
{ \@@_select_font:nn { STSong } { STSONG.TTF } }
{ \@@_select_font:nn { STKaiti } { STKAITI.TTF } }
\@@_set_cjk_sans_font:nn
{ \@@_select_font:nn { STXihei } { STXIHEI.TTF } }
{ \@@_select_font:nn { STHeiti } { STHeiti.ttf } }
\@@_set_cjk_mono_font:n
{ \@@_select_font:nn { STFangsong } { STFANGSO.TTF } }
}
% \end{macrocode}
% \end{macro}
% \begin{macro}{\@@_load_cjk_font_fandol:}
% \changes{v0.5.1.0}{2022/04/06}{适配macOS平台Fandol字体}
% 中文字体配置\valuex{fandol}。
% \begin{macrocode}
\cs_new:Npn \@@_load_cjk_font_fandol:
{
\@@_set_cjk_main_font:nnn
{ FandolSong-Regular.otf }
{ FandolSong-Bold.otf }
{ FandolKai-Regular.otf }
\@@_set_cjk_sans_font:nn
{ FandolHei-Regular.otf }
{ FandolHei-Bold.otf }
\@@_set_cjk_mono_font:n
{ FandolFang-Regular.otf }
}
% \end{macrocode}
% \end{macro}
% \begin{macro}{\@@_load_cjk_font_none:}
% 中文字体配置\valuex{none}。
% \begin{macrocode}
\cs_new:Npn \@@_load_cjk_font_none: { }
% \end{macrocode}
% \end{macro}
% \subsubsection{英文字体}
% \begin{macro}{\@@_set_latin_font:nnn}
% 配置英文字体。
% \begin{macrocode}
\cs_new:Npn \@@_set_latin_font:nnn #1#2#3
{
BoldFont = { #1 },
SlantedFont = { #2 },
BoldSlantedFont = { #3 },
ItalicFont = { #2 },
BoldItalicFont = { #3 }
}
% \end{macrocode}
% \end{macro}
% \begin{macro}{\@@_off_latin_ligatures:}
% \changes{v0.8.3.0}{2022/04/13}{匹配小写字母字符高度}
% 匹配小写字母字符高度。
% \begin{macrocode}
\cs_new:Npn \@@_set_latin_scale:
{ Scale = MatchLowercase , }
% \end{macrocode}
% \end{macro}
% \begin{macro}{\@@_off_latin_ligatures:}
% \changes{v0.8.3.0}{2022/04/13}{关闭连字}
% 关闭连字。
% \begin{macrocode}
\cs_new:Npn \@@_off_latin_ligatures:
{ Ligatures = CommonOff , }
% \end{macrocode}
% \end{macro}
% \begin{macro}{\@@_set_latin_main_font:nnnnn}
% 配置英文罗马族字体,参数分别为字体名称、字体文件名称(常规、粗体、意大利体、粗意大利体)。
% \begin{arguments}
% \item 字体名称。
% \item 常规字体名称。
% \item 粗体字体名称。
% \item 意大利体字体名称。
% \item 粗意大利体字体名称。
% \end{arguments}
% \begin{macrocode}
\cs_new:Npn \@@_set_latin_main_font:nnnnn #1#2#3#4#5
{
\str_if_eq:NNTF { \l_@@_font_type_tl } { font }
{ \setmainfont { #1 } }
{
\setmainfont { #2 }
[
\@@_font_path:
\@@_set_latin_font:nnn { #3 } { #4 } { #5 }
]
}
}
% \end{macrocode}
% \end{macro}
% \begin{macro}{\@@_set_latin_sans_font:nnnnn}
% \changes{v0.8.3.0}{2022/04/13}{修正英文无衬线族字体字符高度}
% 配置英文无衬线族字体,参数分别为字体名称、字体文件名称(常规、粗体、意大利体、粗意大利体)。
% \begin{arguments}
% \item 字体名称。
% \item 常规字体名称。
% \item 粗体字体名称。
% \item 意大利体字体名称。
% \item 粗意大利体字体名称。
% \end{arguments}
% \begin{macrocode}
\cs_new:Npn \@@_set_latin_sans_font:nnnnn #1#2#3#4#5
{
\str_if_eq:NNTF { \l_@@_font_type_tl } { font }
{ \setsansfont { #1 } [ \@@_set_latin_scale: ] }
{
\setsansfont { #2 }
[
\@@_font_path:
\@@_set_latin_scale:
\@@_set_latin_font:nnn { #3 } { #4 } { #5 }
]
}
}
% \end{macrocode}
% \end{macro}
% \begin{macro}{\@@_set_latin_mono_font:nnnnn}
% \changes{v0.8.3.0}{2022/04/13}{修正英文等宽族字体字符高度并取消连字}
% 配置英文等宽族字体,参数分别为字体名称、字体文件名称(常规、粗体、意大利体、粗意大利体)。
% \begin{arguments}
% \item 字体名称。
% \item 常规字体名称。
% \item 粗体字体名称。
% \item 意大利体字体名称。
% \item 粗意大利体字体名称。
% \end{arguments}
% \begin{macrocode}
\cs_new:Npn \@@_set_latin_mono_font:nnnnn #1#2#3#4#5
{
\str_if_eq:NNTF { \l_@@_font_type_tl } { font }
{ \setmonofont{ #1 } [ \@@_set_latin_scale: \@@_off_latin_ligatures: ]}
{
\setmonofont{ #2 }
[
\@@_font_path:
\@@_set_latin_scale:
\@@_off_latin_ligatures:
\@@_set_latin_font:nnn { #3 } { #4 } { #5 }
]
}
}
% \end{macrocode}
% \end{macro}
% \begin{macro}{\@@_set_latin_main_font:nnnn}
% \changes{v0.9.0.0}{2022/04/13}{配置TeX Live内置英文罗马族字体}
% 配置英文罗马族字体,参数分别为字体文件名称(常规、粗体、意大利体、粗意大利体)。
% \begin{arguments}
% \item 常规字体名称。
% \item 粗体字体名称。
% \item 意大利体字体名称。
% \item 粗意大利体字体名称。
% \end{arguments}
% \begin{macrocode}
\cs_new:Npn \@@_set_latin_main_font:nnnn #1#2#3#4
{
\setmainfont { #1 }
[
\@@_set_latin_font:nnn { #2 } { #3 } { #4 }
]
}
% \end{macrocode}
% \end{macro}
% \begin{macro}{\@@_set_latin_sans_font:nnnn}
% \changes{v0.9.0.0}{2022/04/13}{配置TeX Live内置英文无衬线族字体}
% 配置英文无衬线族字体,参数分别为字体文件名称(常规、粗体、意大利体、粗意大利体)。
% \begin{arguments}
% \item 常规字体名称。
% \item 粗体字体名称。
% \item 意大利体字体名称。
% \item 粗意大利体字体名称。
% \end{arguments}
% \begin{macrocode}
\cs_new:Npn \@@_set_latin_sans_font:nnnn #1#2#3#4
{
\setsansfont { #1 }
[
\@@_set_latin_scale:
\@@_set_latin_font:nnn { #2 } { #3 } { #4 }
]
}
% \end{macrocode}
% \end{macro}
% \begin{macro}{\@@_set_latin_mono_font:nnnn}
% \changes{v0.9.0.0}{2022/04/13}{配置TeX Live内置英文等宽族字体}
% 配置英文等宽族字体,参数分别为字体文件名称(常规、粗体、意大利体、粗意大利体)。
% \begin{arguments}
% \item 常规字体名称。
% \item 粗体字体名称。
% \item 意大利体字体名称。
% \item 粗意大利体字体名称。
% \end{arguments}
% \begin{macrocode}
\cs_new:Npn \@@_set_latin_mono_font:nnnn #1#2#3#4
{
\setmonofont{ #1 }
[
\@@_set_latin_scale:
\@@_off_latin_ligatures:
\@@_set_latin_font:nnn { #2 } { #3 } { #4 }
]
}
% \end{macrocode}
% \end{macro}
% \begin{macro}{\@@_load_latin_font_tac:}
% \changes{v1.12.0.0}{2022/05/06}{新增Arial和Consolas英文字体配置}
% 英文字体配置\valuex{tac}。
% \begin{macrocode}
\cs_new:Npn \@@_load_latin_font_tac:
{
\@@_set_latin_main_font:nnnnn
{ Times~New~Roman } { times.ttf } { timesbd.ttf } { timesi.ttf } { timesbi.ttf }
\@@_set_latin_sans_font:nnnnn
{ Arial } { arial.ttf } { arialbd.ttf } { ariali.ttf } { arialbi.ttf }
\@@_set_latin_mono_font:nnnnn
{ Consolas } { consola.ttf } { consolab.ttf } { consolai.ttf } { consolaz.ttf }
}
% \end{macrocode}
% \end{macro}
% \begin{macro}{\@@_load_latin_font_tacn:}
% 英文字体配置\valuex{tacn}。
% \begin{macrocode}
\cs_new:Npn \@@_load_latin_font_tacn:
{
\@@_set_latin_main_font:nnnnn
{ Times~New~Roman } { times.ttf } { timesbd.ttf } { timesi.ttf } { timesbi.ttf }
\@@_set_latin_sans_font:nnnnn
{ Arial } { arial.ttf } { arialbd.ttf } { ariali.ttf } { arialbi.ttf }
\@@_set_latin_mono_font:nnnnn
{ Courier~New } { cour.ttf } { courbd.ttf } { couri.ttf } { courbi.ttf }
}
% \end{macrocode}
% \end{macro}
% \begin{macro}{\@@_load_latin_font_thcs:}
% 英文字体配置\valuex{thcs}。
% \begin{macrocode}
\cs_new:Npn \@@_load_latin_font_thcs:
{
\@@_set_latin_main_font:nnnnn
{ Times~New~Roman }
{ times.ttf }
{ timesbd.ttf }
{ timesi.ttf }
{ timesbi.ttf }
\@@_set_latin_sans_font:nnnnn
{ Helvetica }
{ Helvetica.ttf }
{ Helvetica~Bold.ttf }
{ Helvetica~Oblique.ttf }
{ Helvetica~Bold~Oblique.ttf }
\@@_set_latin_mono_font:nnnnn
{ Courier~Std }
{ CourierStd.otf }
{ CourierStd-Bold.otf }
{ CourierStd-Oblique.otf }
{ CourierStd-BoldOblique.otf }
}
% \end{macrocode}
% \end{macro}
% \begin{macro}{\@@_load_latin_font_gyre:}
% \changes{v0.9.0.0}{2022/04/13}{新增gyre系列英文字体配置}
% 英文字体配置\valuex{gyre}。
% \begin{macrocode}
\cs_new:Npn \@@_load_latin_font_gyre:
{
\@@_set_latin_main_font:nnnn
{ texgyretermes-regular.otf }
{ texgyretermes-bold.otf }
{ texgyretermes-italic.otf }
{ texgyretermes-bolditalic.otf }
\@@_set_latin_sans_font:nnnn
{ texgyreheros-regular.otf }
{ texgyreheros-bold.otf }
{ texgyreheros-italic.otf }
{ texgyreheros-bolditalic.otf }
\@@_set_latin_mono_font:nnnn
{ texgyrecursor-regular.otf }
{ texgyrecursor-bold.otf }
{ texgyrecursor-italic.otf }
{ texgyrecursor-bolditalic.otf }
}
% \end{macrocode}
% \end{macro}
% \begin{macro}{\@@_load_latin_font_none:}
% 英文字体配置\valuex{none}。
% \begin{macrocode}
\cs_new:Npn \@@_load_latin_font_none: { }
% \end{macrocode}
% \end{macro}
% \subsubsection{数学字体}
% \begin{macro}{\@@_load_unicode_math_pkg:}
% \changes{v1.14.1.0}{2022/05/10}{使用\tnx{PassOptionsToPackage}传递\pkgx{unicode-math}宏包参数}
% 加载\pkgx{unicode-math}宏包。
% \begin{macrocode}
\cs_new:Npn \@@_load_unicode_math_pkg:
{
\PassOptionsToPackage { \l_@@_unicode_math_tl } { unicode-math }
\RequirePackage { unicode-math }
}
% \end{macrocode}
% \end{macro}
% \begin{macro}{\@@_load_math_font_cambria:}
% 数学字体配置\valuex{cambria}。
% \begin{macrocode}
\cs_new:Npn \@@_load_math_font_cambria:
{
\@@_load_unicode_math_pkg:
\str_if_eq:NNTF { \l_@@_font_type_tl} { font}
{ \setmathfont { Cambria~Math} }
{ \setmathfont { cambria.ttc} [ Path = \l_@@_font_path_tl/, FontIndex = 1 ] }
}
% \end{macrocode}
% \end{macro}
% \begin{macro}{\@@_define_math_font:nn}
% 批量定义数学字体配置。
% \changes{v0.2.0.0}{2022/04/04}{增加Garamond Math数学字体}
% \changes{v0.5.1.0}{2022/04/06}{适配macOS平台MacTeX内置数学字体}
% \begin{arguments}
% \item 配置名称。
% \item 字体名称。
% \end{arguments}
% \begin{macrocode}
\cs_new:Npn \@@_define_math_font:nn #1#2
{
\cs_new:cpn { @@_load_math_font_ #1 : }
{
\@@_load_unicode_math_pkg:
\setmathfont { #2 }
}
}
\clist_map_inline:nn
{
{ asana } { Asana-Math.otf },
{ fira } { FiraMath-Regular.otf },
{ garamond } { Garamond-Math.otf },
{ lm } { latinmodern-math.otf },
{ libertinus } { LibertinusMath-Regular.otf },
{ stix } { STIXMath-Regular.otf },
{ bonum } { texgyrebonum-math.otf },
{ dejavu } { texgyredejavu-math.otf },
{ pagella } { texgyrepagella-math.otf },
{ schola } { texgyreschola-math.otf },
{ termes } { texgyretermes-math.otf }
}
{ \@@_define_math_font:nn #1 }
% \end{macrocode}
% \end{macro}
% \begin{macro}{\@@_load_math_font_xits:}
% \changes{v0.5.1.0}{2022/04/06}{适配macOS平台MacTeX内置XITSMath数学字体}
% 数学字体配置\valuex{xits}。
% \begin{macrocode}
\cs_new:Npn \@@_load_math_font_xits:
{
\@@_load_unicode_math_pkg:
\@@_if_platform_macos:FT
{
\setmathfont { XITS~Math }
}
{
\@@_load_unicode_math_pkg:
\setmathfont { XITSMath-Regular.otf }
\setmathfont { XITSMath-Bold.otf }
[ range= { bfup -> up, bfit -> it } ]
}
}
% \end{macrocode}
% \end{macro}
% \begin{macro}{\@@_load_math_font_cm:}
% 数学字体配置\valuex{cm}。
% \begin{macrocode}
\cs_new:Npn \@@_load_math_font_cm: { }
% \end{macrocode}
% \end{macro}
% \begin{macro}{\@@_load_math_font_none:}
% 数学字体配置\valuex{none}。
% \begin{macrocode}
\cs_new:Npn \@@_load_math_font_none: { }
% \end{macrocode}
% \end{macro}
% \subsubsection{加载字体}
% \begin{macro}{\@@_load_font:}
% 加载中文字体、英文字体和数学字体。
% \begin{macrocode}
\cs_new:Npn \@@_load_font:
{
\use:c { @@_load_cjk_font_ \l_@@_cjk_font_tl : }
\use:c { @@_load_latin_font_ \l_@@_latin_font_tl : }
\use:c { @@_load_math_font_ \l_@@_math_font_tl : }
}
% \end{macrocode}
% 在导言区末尾加载中文字体、英文字体和数学字体。
% \begin{macrocode}
\ctex_at_end_preamble:n { \@@_load_font: }
% \end{macrocode}
% \end{macro}
% \begin{macrocode}
%
%<*thesis>
% \end{macrocode}
% \subsection{信息录入}
% \changes{v1.8.0.0}{2022/05/02}{拆分信息录入选项}
% \begin{variable}
% {
% \l_@@_title_str,
% \l_@@_title_i_str,
% \l_@@_title_ii_str,
% \l_@@_dept_str,
% \l_@@_major_str,
% \l_@@_author_str,
% \l_@@_supv_str,
% \l_@@_supv_ent_str,
% \l_@@_student_id_str,
% \l_@@_abstract_zh_tl,
% \l_@@_abstract_en_tl,
% \l_@@_keywords_zh_clist,
% \l_@@_keywords_en_clist,
% \l_@@_ack_tl
% }
% 论文标题。
% \begin{macrocode}
\str_new:N \l_@@_title_str
\str_new:N \l_@@_title_i_str
\str_new:N \l_@@_title_ii_str
% \end{macrocode}
% 院系名称。
% \begin{macrocode}
\str_new:N \l_@@_dept_str
% \end{macrocode}
% 专业名称。
% \begin{macrocode}
\str_new:N \l_@@_major_str
% \end{macrocode}
% 作者姓名。
% \begin{macrocode}
\str_new:N \l_@@_author_str
% \end{macrocode}
% 导师姓名。
% \begin{macrocode}
\str_new:N \l_@@_supv_str
% \end{macrocode}
% 校外导师姓名。
% \begin{macrocode}
\str_new:N \l_@@_supv_ent_str
% \end{macrocode}
% 作者学号。
% \begin{macrocode}
\str_new:N \l_@@_student_id_str
% \end{macrocode}
% 中文摘要。
% \begin{macrocode}
\tl_new:N \l_@@_abstract_zh_tl
% \end{macrocode}
% 英文摘要。
% \begin{macrocode}
\tl_new:N \l_@@_abstract_en_tl
% \end{macrocode}
% 中文关键词。
% \begin{macrocode}
\clist_new:N \l_@@_keywords_zh_clist
% \end{macrocode}
% 英文关键词。
% \begin{macrocode}
\clist_new:N \l_@@_keywords_en_clist
% \end{macrocode}
% 致谢。
% \begin{macrocode}
\tl_new:N \l_@@_ack_tl
% \end{macrocode}
% \end{variable}
% \begin{macro}{\keys_define:nn}
% 定义信息键值。
% \begin{macrocode}
\keys_define:nn { xdu / info }
{
% \end{macrocode}
% 论文标题。
% \begin{macrocode}
title .tl_set:N = \l_@@_title_str,
% \end{macrocode}
% 院系名称。
% \begin{macrocode}
department .tl_set:N = \l_@@_dept_str,
% \end{macrocode}
% 专业名称。
% \begin{macrocode}
major .tl_set:N = \l_@@_major_str,
% \end{macrocode}
% 作者姓名。
% \begin{macrocode}
author .tl_set:N = \l_@@_author_str,
% \end{macrocode}
% 导师姓名。
% \begin{macrocode}
supervisor .tl_set:N = \l_@@_supv_str,
% \end{macrocode}
% 校外导师姓名。
% \begin{macrocode}
supervisor-enterprise .tl_set:N = \l_@@_supv_ent_str,
% \end{macrocode}
% 作者学号。
% \begin{macrocode}
student-id .tl_set:N = \l_@@_student_id_str,
% \end{macrocode}
% 中文摘要。
% \begin{macrocode}
abstract .tl_set:N = \l_@@_abstract_zh_tl,
% \end{macrocode}
% 英文摘要。
% \begin{macrocode}
abstract* .tl_set:N = \l_@@_abstract_en_tl,
% \end{macrocode}
% 中文关键词。
% \begin{macrocode}
keywords .clist_set:N = \l_@@_keywords_zh_clist,
% \end{macrocode}
% 英文关键词。
% \begin{macrocode}
keywords* .clist_set:N = \l_@@_keywords_en_clist,
% \end{macrocode}
% 致谢。
% \begin{macrocode}
acknowledgements .tl_set:N = \l_@@_ack_tl
}
% \end{macrocode}
% \end{macro}
% \begin{macro}{\keys_set:nn}
% 初始设置。
% \begin{macrocode}
\keys_set:nn { xdu }
{
info / title = { },
info / department = { },
info / major = { },
info / author = { },
info / supervisor = { },
info / supervisor-enterprise = { },
info / student-id = { },
info / abstract = { },
info / abstract* = { },
info / keywords = { },
info / keywords* = { },
info / acknowledgements = { }
}
% \end{macrocode}
% \end{macro}
% \begin{macrocode}
%<*xduugthesis>
% \end{macrocode}
% \subsubsection{本科生}
% \begin{variable}
% {
% \l_@@_supv_dept_str,
% \l_@@_supv_sch_str,
% \l_@@_class_id_str
% }
% 院内导师姓名。
% \begin{macrocode}
\str_new:N \l_@@_supv_dept_str
% \end{macrocode}
% 校内导师姓名。
% \begin{macrocode}
\str_new:N \l_@@_supv_sch_str
% \end{macrocode}
% 作者班级号。
% \begin{macrocode}
\str_new:N \l_@@_class_id_str
% \end{macrocode}
% \end{variable}
% \begin{macro}{\keys_define:nn}
% 定义信息键值。
% \begin{macrocode}
\keys_define:nn { xdu / info }
{
% \end{macrocode}
% 院内导师姓名。
% \begin{macrocode}
supervisor-department .tl_set:N = \l_@@_supv_dept_str,
% \end{macrocode}
% 校内导师姓名。
% \begin{macrocode}
supervisor-school .tl_set:N = \l_@@_supv_sch_str,
% \end{macrocode}
% 作者班级号。
% \begin{macrocode}
class-id .tl_set:N = \l_@@_class_id_str
}
% \end{macrocode}
% \end{macro}
% \begin{macro}{\keys_set:nn}
% 初始设置。
% \begin{macrocode}
\keys_set:nn { xdu }
{
info / supervisor-department = { },
info / supervisor-school = { },
info / class-id = { }
}
% \end{macrocode}
% \end{macro}
% \begin{macrocode}
%
%<*xdupgthesis>
% \end{macrocode}
% \subsubsection{研究生}
% \changes{v1.9.0.0}{2022/05/03}{增加研究生信息录入选项}
% \begin{variable}
% {
% \l_@@_gr_type_tl,
% \l_@@_degree_type_tl,
% \l_@@_degree_str,
% \l_@@_degree_en_str,
% \l_@@_author_en_str,
% \l_@@_supv_en_str,
% \l_@@_supv_ent_en_str,
% \l_@@_supv_t_str,
% \l_@@_supv_t_en_str,
% \l_@@_supv_ent_t_str,
% \l_@@_supv_ent_t_en_str,
% \l_@@_title_en_str,
% \l_@@_major_en_str,
% \l_@@_sub_major_str,
% \l_@@_domain_str,
% \l_@@_clc_str,
% \l_@@_secret_lv_str,
% \l_@@_submit_date_str
% }
% 研究生类型。
% \begin{macrocode}
\tl_new:N \l_@@_gr_type_tl
% \end{macrocode}
% 学位类型。
% \begin{macrocode}
\tl_new:N \l_@@_degree_type_tl
% \end{macrocode}
% 学位类别。
% \begin{macrocode}
\str_new:N \l_@@_degree_str
\str_new:N \l_@@_degree_en_str
% \end{macrocode}
% 作者姓名拼音。
% \begin{macrocode}
\str_new:N \l_@@_author_en_str
% \end{macrocode}
% 导师姓名拼音。
% \begin{macrocode}
\str_new:N \l_@@_supv_en_str
% \end{macrocode}
% 校外导师姓名拼音。
% \begin{macrocode}
\str_new:N \l_@@_supv_ent_en_str
% \end{macrocode}
% 导师职称。
% \begin{macrocode}
\str_new:N \l_@@_supv_t_str
\str_new:N \l_@@_supv_t_en_str
% \end{macrocode}
% 校外导师职称。
% \begin{macrocode}
\str_new:N \l_@@_supv_ent_t_str
\str_new:N \l_@@_supv_ent_t_en_str
% \end{macrocode}
% 论文标题英文。
% \begin{macrocode}
\str_new:N \l_@@_title_en_str
% \end{macrocode}
% 一级学科英文名称。
% \begin{macrocode}
\str_new:N \l_@@_major_en_str
% \end{macrocode}
% 二级学科。
% \begin{macrocode}
\str_new:N \l_@@_sub_major_str
% \end{macrocode}
% 领域。
% \begin{macrocode}
\str_new:N \l_@@_domain_str
% \end{macrocode}
% 中图分类号。
% \begin{macrocode}
\str_new:N \l_@@_clc_str
% \end{macrocode}
% 密级。
% \begin{macrocode}
\str_new:N \l_@@_secret_lv_str
% \end{macrocode}
% 提交日期。
% \begin{macrocode}
\str_new:N \l_@@_submit_date_str
% \end{macrocode}
% \end{variable}
% \begin{macro}{\keys_define:nn}
% 定义信息键值。
% \begin{macrocode}
\keys_define:nn { xdu / info }
{
% \end{macrocode}
% 研究生类型。
% \begin{macrocode}
graduate-type .choices:nn = { 硕士, 博士 }
{ \tl_set_eq:NN \l_@@_gr_type_tl \l_keys_choice_tl },
% \end{macrocode}
% 学位类型。
% \begin{macrocode}
degree-type .choices:nn = { 学术, 专业 }
{ \tl_set_eq:NN \l_@@_degree_type_tl \l_keys_choice_tl },
% \end{macrocode}
% 学位类别。
% \begin{macrocode}
degree .tl_set:N = \l_@@_degree_str,
degree* .tl_set:N = \l_@@_degree_en_str,
% \end{macrocode}
% 作者姓名拼音。
% \begin{macrocode}
author* .tl_set:N = \l_@@_author_en_str,
% \end{macrocode}
% 导师姓名拼音。
% \begin{macrocode}
supervisor* .tl_set:N = \l_@@_supv_en_str,
% \end{macrocode}
% 校外导师姓名拼音。
% \begin{macrocode}
supervisor-enterprise* .tl_set:N = \l_@@_supv_ent_en_str,
% \end{macrocode}
% 导师职称。
% \begin{macrocode}
supervisor-title .tl_set:N = \l_@@_supv_t_str,
supervisor-title* .tl_set:N = \l_@@_supv_t_en_str,
% \end{macrocode}
% 校外导师职称。
% \begin{macrocode}
supervisor-enterprise-title .tl_set:N = \l_@@_supv_ent_t_str,
supervisor-enterprise-title* .tl_set:N = \l_@@_supv_ent_t_en_str,
% \end{macrocode}
% 论文标题英文。
% \begin{macrocode}
title* .tl_set:N = \l_@@_title_en_str,
% \end{macrocode}
% 一级学科英文名称。
% \begin{macrocode}
major* .tl_set:N = \l_@@_major_en_str,
% \end{macrocode}
% 二级学科。
% \begin{macrocode}
sub-major .tl_set:N = \l_@@_sub_major_str,
% \end{macrocode}
% 领域。
% \begin{macrocode}
domain .tl_set:N = \l_@@_domain_str,
% \end{macrocode}
% 中图分类号。
% \begin{macrocode}
clc .tl_set:N = \l_@@_clc_str,
% \end{macrocode}
% 密级。
% \begin{macrocode}
secret-level .choices:nn = { 秘密, 公开 }
{ \tl_set_eq:NN \l_@@_secret_lv_str \l_keys_choice_tl },
% \end{macrocode}
% 提交日期。
% \begin{macrocode}
submit-date .tl_set:N = \l_@@_submit_date_str
}
% \end{macrocode}
% \end{macro}
% \begin{macro}{\keys_set:nn}
% \changes{v1.7.1.0}{2022/05/02}{设置研究生类型默认值}
% \changes{v1.7.2.0}{2022/05/02}{修正guard}
% 初始设置。
% \begin{macrocode}
\keys_set:nn { xdu }
{
info / graduate-type = { 硕士 },
info / degree-type = { 学术 },
info / degree = { },
info / degree* = { },
info / author* = { },
info / supervisor* = { },
info / supervisor-enterprise* = { },
info / supervisor-title = { },
info / supervisor-title* = { },
info / supervisor-enterprise-title = { },
info / supervisor-enterprise-title* = { },
info / title* = { },
info / major* = { },
info / sub-major = { },
info / domain = { },
info / clc = { },
info / secret-level = { 公开 },
info / submit-date = { }
}
% \end{macrocode}
% \end{macro}
% \begin{macrocode}
%
% \end{macrocode}
% \subsection{样式配置}
% \begin{variable}
% {
% \l_@@_en_cjk_font_bool,
% \l_@@_lang_tl,
% \l_@@_bib_tool_tl,
% \l_@@_bib_file_clist,
% \l_@@_cap_label_sep_tl,
% \l_@@_tab_small_bool,
% \l_@@_alg_small_bool,
% \l_@@_before_skip_clist,
% \l_@@_after_skip_clist,
% \l_@@_chap_tl,
% \l_@@_sec_tl,
% \l_@@_subsec_tl,
% \l_@@_subsubsec_tl,
% \l_@@_para_tl,
% \l_@@_subpara_tl,
% \l_@@_sym_mgn_bool,
% \l_@@_page_v_align_tl
% }
% 英文是否使用中文字体。
% \begin{macrocode}
\bool_new:N \l_@@_en_cjk_font_bool
% \end{macrocode}
% 语言。
% \begin{macrocode}
\tl_new:N \l_@@_lang_tl
% \end{macrocode}
% 参考文献支持方式。
% \begin{macrocode}
\tl_new:N \l_@@_bib_tool_tl
% \end{macrocode}
% 参考文献文件。
% \begin{macrocode}
\clist_new:N \l_@@_bib_file_clist
% \end{macrocode}
% 是否在\tnx{ref}和\tnx{pageref}两侧自动调整中英文间空白。
% \begin{macrocode}
\tl_new:N \l_@@_ref_add_space
% \end{macrocode}
% 标签与后面标题之间的间距。
% \begin{macrocode}
\tl_new:N \l_@@_cap_label_sep_tl
% \end{macrocode}
% 设置表格字号是否为五号。
% \begin{macrocode}
\bool_new:N \l_@@_tab_small_bool
% \end{macrocode}
% 设置算法字号是否为五号。
% \begin{macrocode}
\bool_new:N \l_@@_alg_small_bool
% \end{macrocode}
% 设置章节标题前后的垂直间距。
% \begin{macrocode}
\clist_new:N \l_@@_before_skip_clist
\clist_new:N \l_@@_after_skip_clist
% \end{macrocode}
% 设置章节标题字号。
% \begin{macrocode}
\tl_new:N \l_@@_chap_tl
\tl_new:N \l_@@_sec_tl
\tl_new:N \l_@@_subsec_tl
\tl_new:N \l_@@_subsubsec_tl
\tl_new:N \l_@@_para_tl
\tl_new:N \l_@@_subpara_tl
% \end{macrocode}
% 设置页边距是否对称。
% \begin{macrocode}
\bool_new:N \l_@@_sym_mgn_bool
% \end{macrocode}
% 设置页面垂直方向的对齐方式。
% \begin{macrocode}
\tl_new:N \l_@@_page_v_align_tl
% \end{macrocode}
% \end{variable}
% \begin{macro}{\keys_define:nn}
% 定义样式键值。
% \begin{macrocode}
\keys_define:nn { xdu / style }
{
% \end{macrocode}
% 英文是否使用中文字体。
% \begin{macrocode}
en-cjk-font .bool_set:N = \l_@@_en_cjk_font_bool,
% \end{macrocode}
% 论文语言配置。
% \begin{macrocode}
language .choices:nn = { zh, en }
{ \tl_set_eq:NN \l_@@_lang_tl \l_keys_choice_tl },
% \end{macrocode}
% 参考文献支持方式配置。
% \begin{macrocode}
bib-backend .choices:nn = { bibtex, biblatex }
{ \tl_set_eq:NN \l_@@_bib_tool_tl \l_keys_choice_tl },
% \end{macrocode}
% 参考文献文件。
% \begin{macrocode}
bib-resource .clist_set:N = \l_@@_bib_file_clist,
% \end{macrocode}
% 是否在\tnx{ref}和\tnx{pageref}两侧自动调整中英文间空白。
% \begin{macrocode}
ref-add-space .bool_set:N = \l_@@_ref_add_space,
% \end{macrocode}
% 标签与后面标题之间的间距。
% \begin{macrocode}
caption-label-sep .tl_set:N = \l_@@_cap_label_sep_tl,
% \end{macrocode}
% 设置表格字号是否为五号。
% \begin{macrocode}
table-small-font .bool_set:N = \l_@@_tab_small_bool,
% \end{macrocode}
% 设置算法字号是否为五号。
% \begin{macrocode}
algorithm-small-font .bool_set:N = \l_@@_alg_small_bool,
% \end{macrocode}
% 设置章节标题前的垂直间距。
% \begin{macrocode}
before-skip .clist_set:N = \l_@@_before_skip_clist,
% \end{macrocode}
% 设置章节标题后的垂直间距。
% \begin{macrocode}
after-skip .clist_set:N = \l_@@_after_skip_clist,
% \end{macrocode}
% 设置章节标题字号。
% \begin{macrocode}
chap-zihao .tl_set:N = \l_@@_chap_tl,
sec-zihao .tl_set:N = \l_@@_sec_tl,
subsec-zihao .tl_set:N = \l_@@_subsec_tl,
subsubsec-zihao .tl_set:N = \l_@@_subsubsec_tl,
para-zihao .tl_set:N = \l_@@_para_tl,
subpara-zihao .tl_set:N = \l_@@_subpara_tl,
% \end{macrocode}
% 设置页边距是否对称。
% \begin{macrocode}
symmetric-margin .bool_set:N = \l_@@_sym_mgn_bool,
% \end{macrocode}
% 设置页面垂直方向的对齐方式。
% \begin{macrocode}
page-vertical-align .tl_set:N = \l_@@_page_v_align_tl
}
% \end{macrocode}
% \end{macro}
% \begin{macro}{\keys_set:nn}
% 初始设置。
% \begin{macrocode}
\keys_set:nn { xdu }
{
style / en-cjk-font = false,
style / language = zh,
style / bib-backend = biblatex,
style / bib-resource = { },
style / ref-add-space = false,
style / caption-label-sep = { 0.75em },
style / table-small-font = true,
style / algorithm-small-font = true,
style / before-skip = { 24pt, 18pt, 12pt, 12pt, 12pt, 12pt },
style / after-skip = { 18pt, 12pt, 6pt, 6pt, 6pt, 6pt },
style / symmetric-margin = false,
style / page-vertical-align = {顶部对齐}
}
% \end{macrocode}
% \end{macro}
% \begin{macrocode}
%
% \end{macrocode}
% \begin{macrocode}
%<*class|xdufont>
% \end{macrocode}
% \subsection{键值选项}
% \begin{macro}{\xdusetup}
% 用户设置接口。
% \begin{macrocode}
\NewDocumentCommand \xdusetup { m }
{ \keys_set:nn { xdu } { #1 } }
% \end{macrocode}
% \end{macro}
% \begin{macro}{\keys_define:nn}
% 定义元(meta)键值对。
% \begin{macrocode}
\keys_define:nn { xdu }
{
style .meta:nn = { xdu / style } { #1 },
info .meta:nn = { xdu / info } { #1 }
}
% \end{macrocode}
% \end{macro}
% \begin{macro}{\ProcessKeysOptions}
% 处理选项。
% \begin{macrocode}
\ProcessKeysOptions { xdu / style }
% \end{macrocode}
% \end{macro}
% \begin{macrocode}
%
%<*xdupgthesis>
% \end{macrocode}
% \subsection{内部文本}
% \begin{variable}{l_@@_header_str}
% \changes{v1.7.0.0}{2022/05/02}{研究生页眉文本}
% 研究生页眉文本。
% \begin{macrocode}
\str_new:N \l_@@_header_str
\ctex_at_end_preamble:n
{
\@@_lang_switch:nn
{
\tl_if_eq:NnTF \l_@@_gr_type_tl { 硕士 }
{ \str_set:Nn \l_@@_header_str { 西安电子科技大学硕士学位论文 } }
{ \str_set:Nn \l_@@_header_str { 西安电子科技大学博士学位论文 } }
}
{
\tl_if_eq:NnTF \l_@@_gr_type_tl { 硕士 }
{
\str_set:Nn \l_@@_header_str
{ Master~Thesis~of~XIDIAN~UNIVERSITY }
}
{
\str_set:Nn \l_@@_header_str
{ Doctoral~Dissertation~of~XIDIAN~UNIVERSITY }
}
}
}
% \end{macrocode}
% \end{variable}
% \begin{macrocode}
%
%<*thesis>
% \end{macrocode}
% \subsection{内部函数}
% \begin{macro}{\@@_lang_switch:nn}
% 根据论文语言自动选择中文对应内容或英文对应内容。
% \begin{arguments}
% \item 中文对应内容。
% \item 英文对应内容。
% \end{arguments}
% \begin{macrocode}
\cs_new:Npn \@@_lang_switch:nn #1#2
{
\str_if_eq:NNTF { \l_@@_lang_tl } { zh }
{ #1 }
{ #2 }
}
% \end{macrocode}
% \end{macro}
% \begin{macro}{\@@_rm_family:,\@@_sf_family:,\@@_tt_family:}
% 切换字体族时,英文根据配置选择是否使用中文字体。
% \begin{macrocode}
\cs_new:Npn \@@_rm_family:
{ \bool_if:NTF \l_@@_en_cjk_font_bool { \CJKfamily+ { rm } } { \rmfamily } }
\cs_new:Npn \@@_sf_family:
{ \bool_if:NTF \l_@@_en_cjk_font_bool { \CJKfamily+ { sf } } { \sffamily } }
\cs_new:Npn \@@_tt_family:
{ \bool_if:NTF \l_@@_en_cjk_font_bool { \CJKfamily+ { tt } } { \ttfamily } }
% \end{macrocode}
% \end{macro}
% \begin{variable}{\l_@@_pure_title_str}
% 移除标题中换行符。
% \begin{macrocode}
\ctex_at_end_preamble:n
{
\str_new:N \l_@@_pure_title_str
\str_set_eq:NN \l_@@_pure_title_str \l_@@_title_str
\str_remove_all:Nn \l_@@_pure_title_str { \\ }
}
% \end{macrocode}
% \end{variable}
% \begin{macro}{\@@_uline:n}
% 绘制下划线。
% \begin{macrocode}
\cs_new:Npn \@@_uline:n #1
{ \CJKunderline [ thickness = 0.5pt ] { #1 } }
% \end{macrocode}
% \end{macro}
% \begin{macro}{\@@_tl_set_if_empty:Nn}
% \changes{v0.7.0.0}{2022/04/11}{对空凭据表赋值}
% 对空凭据表赋值。
% \begin{macrocode}
\cs_new:Npn \@@_tl_set_if_empty:Nn #1#2
{ \tl_if_empty:NT #1 { \tl_set:Nn #1 { #2 } } }
% \end{macrocode}
% \end{macro}
% \begin{macro}{\@@_get_text_width:Nn,\@@_get_text_width:NV}
% 获取文本宽度。
% \begin{arguments}
% \item 文本宽度。
% \item 文本。
% \end{arguments}
% \begin{macrocode}
\cs_new:Npn \@@_get_text_width:Nn #1#2
{
\box_clear_new:N \l_@@_tmp_box
\hbox_set:Nn \l_@@_tmp_box { #2 }
\dim_set:Nn #1 { \box_wd:N \l_@@_tmp_box }
}
\cs_generate_variant:Nn \@@_get_text_width:Nn { NV }
% \end{macrocode}
% \end{macro}
% \begin{macro}{\@@_add_bookmark:n}
% 为当前位置添加书签。
% \begin{macrocode}
\cs_new:Npn \@@_add_bookmark:n #1
{ \currentpdfbookmark { #1 } { #1 } }
% \end{macrocode}
% \end{macro}
% \begin{macro}{\@@_add_toc:n}
% 章节添加目录。
% \begin{macrocode}
\cs_new:Npn \@@_add_toc:n #1
{
\cleardoublepage
\phantomsection
\addcontentsline { toc } { chapter } { #1 }
}
% \end{macrocode}
% \end{macro}
% \begin{macro}{\@@_n_chapter_head:n}
% 新建无编号章节并添加页眉和书签。
% \begin{macrocode}
\cs_new:Npn \@@_n_chapter_head:n #1
{
\@@_add_bookmark:n { #1 }
\chapter* { #1 }
\markboth { #1 } { }
}
% \end{macrocode}
% \end{macro}
% \begin{macro}{\@@_n_chapter_head_ii:nn}
% 新建无编号章节并添加页眉和书签并单独设置标题样式。
% \begin{arguments}
% \item 章节标题处。
% \item 章节标题样式。
% \end{arguments}
% \begin{macrocode}
\cs_new:Npn \@@_n_chapter_head_ii:nn #1#2
{
{
\ctexset { chapter / format = { #2 } }
\@@_n_chapter_head:n { #1 }
}
}
% \end{macrocode}
% \end{macro}
% \begin{macro}{\@@_n_chapter_head:nn}
% \changes{v1.1.4.0}{2022/04/16}{新建无编号章节并单独添加页眉和书签}
% 新建无编号章节并添加页眉和书签,多用于章节标题为2个汉字的情况。
% \begin{arguments}
% \item 书签和页眉处。
% \item 章节标题处。
% \end{arguments}
% \begin{macrocode}
\cs_new:Npn \@@_n_chapter_head:nn #1#2
{
\@@_add_bookmark:n { #1 }
\chapter* { #2 }
\markboth { #1 } { }
}
% \end{macrocode}
% \end{macro}
% \begin{macro}{\@@_n_chapter_head_ii:nnn}
% \changes{v1.2.1.0}{2022/04/19}{新建无编号章节并单独添加页眉和书签并单独设置标题样式}
% 新建无编号章节并添加页眉和书签并单独设置标题样式,多用于章节标题为2个汉字的情况。
% \begin{arguments}
% \item 章节标题处。
% \item 书签和页眉处。
% \item 章节标题样式。
% \end{arguments}
% \begin{macrocode}
\cs_new:Npn \@@_n_chapter_head_ii:nnn #1#2#3
{
{
\ctexset { chapter / format = { #3 } }
\@@_n_chapter_head:nn { #1 } { #2 }
}
}
% \end{macrocode}
% \end{macro}
% \begin{macro}{\@@_n_chapter_head_toc:n}
% 新建无编号章节并添加目录及页眉。
% \begin{macrocode}
\cs_new:Npn \@@_n_chapter_head_toc:n #1
{
\@@_add_toc:n { #1 }
\chapter* { #1 }
\markboth { #1 } { }
}
% \end{macrocode}
% \end{macro}
% \begin{macro}{\@@_n_chapter_head_toc:nn}
% \changes{v1.1.4.0}{2022/04/16}{新建无编号章节并单独添加目录及页眉}
% 新建无编号章节并添加目录及页眉,多用于章节标题为2个汉字的情况。
% \begin{arguments}
% \item 目录、书签、页眉处。
% \item 章节标题处。
% \end{arguments}
% \begin{macrocode}
\cs_new:Npn \@@_n_chapter_head_toc:nn #1#2
{
\@@_add_toc:n { #1 }
\chapter* { #2 }
\markboth { #1 } { }
}
% \end{macrocode}
% \end{macro}
% \begin{macro}{\@@_typeout_keywords:nNn}
% 排版关键词。
% \begin{arguments}
% \item 标签名称。
% \item 关键词列表。
% \item 关键词分隔符。
% \end{arguments}
% \begin{macrocode}
\cs_new:Npn \@@_typeout_keywords:nNn #1#2#3
{
\str_clear_new:N \l_@@_keywords_label_str
\str_set:Nn \l_@@_keywords_label_str { #1 }
\dim_zero_new:N \l_@@_keywords_label_dim
\@@_get_text_width:NV \l_@@_keywords_label_dim \l_@@_keywords_label_str
\begin { list } { \l_@@_keywords_label_str }
{
\labelwidth \l_@@_keywords_label_dim
\labelsep \c_zero_dim
\rightmargin \c_zero_dim
\leftmargin \l_@@_keywords_label_dim
}
\item \clist_use:Nnnn #2 { #3 } { #3 } { #3 }
\end { list }
}
% \end{macrocode}
% \end{macro}
% \subsection{额外命令}
% \begin{macro}{\noauxwrite}
% \changes{v1.15.0.0}{2022/05/13}{\tnx{noauxwrite}允许添加不影响现有引用列表顺序的引用}
% \tnx{noauxwrite}允许添加不影响现有引用列表顺序的引用。
% \begin{macrocode}
\NewDocumentCommand \noauxwrite { m }
{
\if@filesw
\@fileswfalse
#1
\@fileswtrue
\else
#1
\fi
}
% \end{macrocode}
% \end{macro}
% \subsection{页面设置}
% \subsubsection{页面尺寸}
% \begin{macro}{\geometry,\newgeometry,\savegeometry}
% \changes{v1.5.1.0}{2022/05/01}{修正页脚高度}
% \changes{v1.5.2.0}{2022/05/02}{修正底部页边距高度}
% 正文页面。
% \begin{description}
% \item[本科生] 上3、下2、内3、外2;装订线1;页眉2、页脚1。
% \item[研究生] 上3、\textbf{下2.5}、内2.5、外2.5;装订线0.5;页眉2、页脚$2.5-1.75=0.75$。
% \end{description}
% \begin{macrocode}
\newgeometry
{
%<*xduugthesis>
top = 3cm,
bottom = 2cm,
inner = 3cm,
outer = 2cm,
bindingoffset = 1cm,
head = 2cm,
foot = 1cm
%
%<*xdupgthesis>
top = 3cm,
bottom = 2.5cm,
inner = 2.5cm,
outer = 2.5cm,
bindingoffset = 0.5cm,
head = 2cm,
foot = 0.75cm
%
}
\savegeometry { main }
% \end{macrocode}
% \changes{v1.5.1.0}{2022/05/01}{修正页脚高度}
% \changes{v1.5.2.0}{2022/05/02}{修正底部页边距高度}
% 左右对称正文页面。
% \begin{description}
% \item[本科生] 上3、下2、内3、外3;页眉2、页脚1。
% \item[研究生] 上3、\textbf{下2.5}、内2.75、外2.75;页眉2、页脚$2.5-1.75=0.75$。
% \end{description}
% \begin{macrocode}
\newgeometry
{
%<*xduugthesis>
top = 3cm,
bottom = 2cm,
inner = 3cm,
outer = 3cm,
head = 2cm,
foot = 1cm
%
%<*xdupgthesis>
top = 3cm,
bottom = 2.5cm,
inner = 2.75cm,
outer = 2.75cm,
head = 2cm,
foot = 0.75cm
%
}
\savegeometry { main-sym }
% \end{macrocode}
% \changes{v0.10.3.0}{2022/04/14}{修复封面超页}
% 封面页面。
% \begin{description}
% \item[本科生] 上2.5、下2、内3、外2。
% \item[研究生] 上3、下2、内3、外2.5。
% \end{description}
% \begin{macrocode}
\newgeometry
{
%<*xduugthesis>
top = 2.5cm,
bottom = 2cm,
inner = 3cm,
outer = 2cm
%
%<*xdupgthesis>
top = 3cm,
bottom = 2cm,
inner = 3cm,
outer = 2.5cm
%
}
\savegeometry { cover }
% \end{macrocode}
% \end{macro}
% \begin{macro}{\@@_load_main_geometry:}
% \changes{v0.8.0.0}{2022/04/12}{根据用户配置加载正文页边距配置}
% 根据用户配置加载正文页边距配置。
% \begin{macrocode}
\cs_new:Npn \@@_load_main_geometry:
{
\bool_if:NTF \l_@@_sym_mgn_bool
{ \loadgeometry { main-sym } }
{ \loadgeometry { main } }
}
% \end{macrocode}
% \end{macro}
% \subsubsection{页眉页脚}
% \begin{macro}
% {
% \@@_chinese:,
% \@@_arabic:,
% \@@_roman:,
% \@@_Roman:,
% \@@_alph:,
% \@@_Alph:,
% \@@_fnsymbol:
% }
% \changes{v1.2.2.0}{2022/04/20}{定义序号转换函数}
% 定义序号转换函数。
% \begin{macrocode}
\clist_map_inline:nn
{
{ chinese },
{ arabic },
{ roman },
{ Roman },
{ alph },
{ Alph },
{ fnsymbol }
}
{ \cs_new_eq:cc { @@ _ #1 : } { #1 } }
% \end{macrocode}
% \end{macro}
% \begin{variable}{\l_@@_chaptername}
% \changes{v1.2.2.0}{2022/04/20}{页眉内部英文章节名}
% 页眉内部英文章节名。
% \begin{macrocode}
\tl_set:Nn \chaptername { Chapter }
\tl_new:N \l_@@_chaptername
\tl_set_eq:NN \l_@@_chaptername \chaptername
% \end{macrocode}
% \end{variable}
% \begin{macro}{\chaptermark}
% 设置奇数页页眉为章标题。
% \begin{macrocode}
\renewcommand { \chaptermark } [ 1 ]
{
\markboth
{
\@@_lang_switch:nn
{ \CTEXthechapter }
{ \l_@@_chaptername \space \@@_Roman: { chapter } }
\quad #1
}
{ }
}
% \end{macrocode}
% \end{macro}
% \begin{macro}{\fancypagestyle}
% \changes{v0.1.1.0}{2022/04/03}{修正页眉字号}
% \changes{v1.6.0.0}{2022/05/02}{设置页脚页码}
% \changes{v1.7.0.0}{2022/05/02}{设置页眉}
% 设置正文页眉页脚。
% \begin{description}
% \item[本科生] 页眉:宋体五号,居中排列。左面页眉为论文题目,右面页眉为章次和章标题。页眉底划线的宽度为0.75磅。页码:宋体小五号,排在页眉行的最外侧,不加任何修饰。
% \item[研究生] 页眉设置:单面页码页眉标题为章节题目,每一章节的起始页必须在单面页码,双面页码页眉标题统一为“西安电子科技大学博/硕士学位论文”,页眉标题居中排列,字体为宋体,字号为五号。页眉文字下添加双横线,双横线宽度为0.5磅。页眉的“西安电子科技大学博士/硕士学位论文”统一翻译成:Doctoral Dissertation of XIDIAN UNIVERSITY/Master Thesis of XIDIAN UNIVERSITY。页码设置:前置部分的页码用罗马数字标识,字体为Times New Roman,字号为小五号;主体部分的页码用阿拉伯数字标识,字体为宋体,字号为小五号。页码统一居于页面底端中部,不加任何修饰。
% \end{description}
% \begin{macrocode}
\fancypagestyle { plain }
{
\pagestyle { fancy }
\fancyhf { }
%<*xduugthesis>
\fancyhead [ CE ] { \@@_rm_family: \zihao { 5 } \l_@@_pure_title_str }
\fancyhead [ CO ] { \@@_rm_family: \zihao { 5 } \leftmark }
\fancyhead [ LE ] { \@@_rm_family: \zihao { -5 } \thepage }
\fancyhead [ RO ] { \@@_rm_family: \zihao { -5 } \thepage }
\renewcommand { \headrulewidth } { 0.75pt }
%
%<*xdupgthesis>
\fancyhead [ CE ] { \@@_rm_family: \zihao { 5 } \l_@@_header_str }
\fancyhead [ CO ] { \@@_rm_family: \zihao { 5 } \leftmark }
\fancyfoot [ CE ] { \@@_rm_family: \zihao { -5 } \thepage }
\fancyfoot [ CO ] { \@@_rm_family: \zihao { -5 } \thepage }
\cs_set:Npn \headrulewidth { 0.5pt }
\cs_set:Npn \headrule
{
\hrule \@height \headrulewidth
\skip_vertical:N \headrulewidth
\hrule \@height \headrulewidth
\skip_vertical:N -\headrulewidth
}
%
}
%<*xdupgthesis>
\fancypagestyle { front }
{
\pagestyle { plain }
\fancyfoot [ CE ] { \rmfamily \zihao { -5 } \thepage }
\fancyfoot [ CO ] { \rmfamily \zihao { -5 } \thepage }
}
%
% \end{macrocode}
% \end{macro}
% \subsubsection{对齐方式}
% \begin{macro}{\raggedbottom,\flushbottom}
% \changes{v1.13.0.0}{2022/05/08}{设置页面垂直方向的对齐方式}
% \begin{macrocode}
\ctex_at_end_preamble:n
{
\tl_if_eq:NnTF \l_@@_page_v_align_tl { 顶部对齐 }
{ \raggedbottom }
{ \flushbottom }
}
% \end{macrocode}
% \end{macro}
% \begin{macrocode}
%
%<*xduugthesis>
% \end{macrocode}
% \subsection{标题设置}
% 中文章标题黑体,三号,居中排列。节标题宋体,四号,居中排列。英文一级标题字体为Times New Roman,四号,正体,左对齐,以大写罗马数字(I、II 等)标出序号。其余各级标题的字体均为Times New Roman,小四号,正体。二级及以下级别的标题依次缩进4个英文字符,以1.1,1.2,1.1.1,1.1.2形式标出序号。
% \subsubsection{章节层次}
% \begin{macro}{\ctexset}
% 设置章节层次为subparagraph。
% \begin{macrocode}
\ctexset { secnumdepth=5 }
% \end{macrocode}
% \end{macro}
% \subsubsection{章节名字}
% \begin{macro}{\ctexset}
% 设置章节的名字。
% \begin{macrocode}
\ctexset
{
chapter / name =
{
\@@_lang_switch:nn { 第 } { \l_@@_chaptername \space },
\@@_lang_switch:nn { 章 } { }
},
section / name = { },
subsection / name = { },
subsubsection / name = { },
paragraph / name = { },
subparagraph / name = { }
}
% \end{macrocode}
% \end{macro}
% \subsubsection{章节编号}
% \begin{macro}{\ctexset}
% \changes{v1.2.1.0}{2022/04/19}{修正英文论文标题序号}
% 设置章节编号的数字输出格式。
% \begin{macrocode}
\ctex_at_end_preamble:n
{
\@@_lang_switch:nn
{
\ctexset
{
chapter / number = { \chinese { chapter } },
section / number = { \thesection },
subsection / number = { \thesubsection },
subsubsection / number = { \thesubsubsection },
paragraph / number = { \theparagraph },
subparagraph / number = { \thesubparagraph }
}
}
{
\ctexset
{
chapter / number = { \Roman { chapter } },
section / number = { \thesection },
subsection / number = { \thesubsection },
subsubsection / number = { ( \roman { subsubsection } ) },
paragraph / number = { ( \alph { paragraph } ) },
subparagraph / number = { ( \arabic { subparagraph } ) }
}
}
}
% \end{macrocode}
% \end{macro}
% \subsubsection{章节和标题}
% \begin{macro}{\@@_zh_t:nnn}
% 设置中文章节名字和随后的标题内容格式。
% \begin{arguments}
% \item 字体族。
% \item 字号。
% \item 位置。
% \end{arguments}
% \begin{macrocode}
\cs_new:Npn \@@_zh_t:nnn #1#2#3
{
\use:c { @@_ #1 _family : }
\zihao { \use:c { l_@@_ #2 _tl } }
\str_if_eq:ccTF { #3 } { c }
{ \centering }
{ \raggedright }
}
% \end{macrocode}
% \end{macro}
% \begin{macro}{\@@_en_t:nnn}
% \changes{v1.2.1.0}{2022/04/19}{英文章节样式增加位置参数}
% 设置英文章节名字和随后的标题内容格式。
% \begin{arguments}
% \item 字号。
% \item 位置。
% \end{arguments}
% \begin{macrocode}
\cs_new:Npn \@@_en_t:nn #1#2
{
\rmfamily
\zihao { \use:c { l_@@_ #1 _tl } }
\bfseries
\str_if_eq:ccTF { #2 } { c }
{ \centering }
{ \raggedright }
}
% \end{macrocode}
% \end{macro}
% \begin{macro}{\ctexset}
% \changes{v0.7.0.0}{2022/04/11}{自定义章节标题字号}
% 设置章节名字和随后的标题内容格式。
% \begin{macrocode}
\ctex_at_end_preamble:n
{
\@@_lang_switch:nn
{
\@@_tl_set_if_empty:Nn \l_@@_chap_tl { 3 }
\@@_tl_set_if_empty:Nn \l_@@_sec_tl { 4 }
\@@_tl_set_if_empty:Nn \l_@@_subsec_tl { 4 }
\@@_tl_set_if_empty:Nn \l_@@_subsubsec_tl { 4 }
\@@_tl_set_if_empty:Nn \l_@@_para_tl { 4 }
\@@_tl_set_if_empty:Nn \l_@@_subpara_tl { 4 }
\ctexset
{
chapter / format = { \@@_zh_t:nnn { sf } { chap } { c } },
section / format = { \@@_zh_t:nnn { rm } { sec } { c } },
subsection / format = { \@@_zh_t:nnn { rm } { subsec } { l } },
subsubsection / format = { \@@_zh_t:nnn { rm } { subsubsec } { l } },
paragraph / format = { \@@_zh_t:nnn { rm } { para } { l } },
subparagraph / format = { \@@_zh_t:nnn { rm } { subpara } { l } }
}
}
{
\@@_tl_set_if_empty:Nn \l_@@_chap_tl { 3 }
\@@_tl_set_if_empty:Nn \l_@@_sec_tl { 4 }
\@@_tl_set_if_empty:Nn \l_@@_subsec_tl { -4 }
\@@_tl_set_if_empty:Nn \l_@@_subsubsec_tl { -4 }
\@@_tl_set_if_empty:Nn \l_@@_para_tl { -4 }
\@@_tl_set_if_empty:Nn \l_@@_subpara_tl { -4 }
\ctexset
{
chapter / format = { \@@_en_t:nn { chap } { c } },
section / format = { \@@_en_t:nn { sec } { l } },
subsection / format = { \@@_en_t:nn { subsec } { l } },
subsubsection / format = { \@@_en_t:nn { subsubsec } { l } },
paragraph / format = { \@@_en_t:nn { para } { l } },
subparagraph / format = { \@@_en_t:nn { subpara } { l } }
}
}
}
% \end{macrocode}
% \end{macro}
% \begin{macro}{\ctexset}
% 设置章节标题前后的垂直间距。
% \changes{v0.4.0.0}{2022/04/05}{设置章节标题前后的垂直间距}
% \begin{macrocode}
\ctexset
{
chapter / fixskip = true,
section / fixskip = true,
subsection / fixskip = true,
subsubsection / fixskip = true,
paragraph / fixskip = true,
subparagraph / fixskip = true,
chapter / beforeskip = { \clist_item:Nn \l_@@_before_skip_clist { 1 } },
section / beforeskip = { \clist_item:Nn \l_@@_before_skip_clist { 2 } },
subsection / beforeskip = { \clist_item:Nn \l_@@_before_skip_clist { 3 } },
subsubsection / beforeskip = { \clist_item:Nn \l_@@_before_skip_clist { 4 } },
paragraph / beforeskip = { \clist_item:Nn \l_@@_before_skip_clist { 5 } },
subparagraph / beforeskip = { \clist_item:Nn \l_@@_before_skip_clist { 6 } },
chapter / afterskip = { \clist_item:Nn \l_@@_after_skip_clist { 1 } },
section / afterskip = { \clist_item:Nn \l_@@_after_skip_clist { 2 } },
subsection / afterskip = { \clist_item:Nn \l_@@_after_skip_clist { 3 } },
subsubsection / afterskip = { \clist_item:Nn \l_@@_after_skip_clist { 4 } },
paragraph / afterskip = { \clist_item:Nn \l_@@_after_skip_clist { 5 } },
subparagraph / afterskip = { \clist_item:Nn \l_@@_after_skip_clist { 6 } }
}
% \end{macrocode}
% \end{macro}
% \subsection{目录}
% \begin{macro}{\RequirePackage}
% \changes{v0.4.1.0}{2022/04/05}{设置目录样式}
% \changes{v1.14.1.0}{2022/05/10}{使用\tnx{PassOptionsToPackage}传递\pkgx{tocloft}宏包参数}
% 设置目录样式。
% \begin{macrocode}
\PassOptionsToPackage { titles } { tocloft }
\RequirePackage { tocloft }
% \end{macrocode}
% \end{macro}
% \begin{variable}{\cftchapleader}
% 修改目录中一级标题引导点。
% \begin{macrocode}
\cs_set:Npn \cftchapleader { \bfseries \cftdotfill { \cftdotsep } }
% \end{macrocode}
% \end{variable}
% \begin{variable}
% {
% \cftbeforechapskip,
% \cftbeforesecskip
% }
% \changes{v1.10.1.0}{2022/05/04}{修正目录条目间距}
% 设置一级标题与其余各级标题条目前垂直间距一致。
% \begin{macrocode}
\dim_set_eq:NN \cftbeforechapskip \cftbeforesecskip
% \end{macrocode}
% \end{variable}
% \begin{variable}
% {
% \cftchapfont,
% \cftchappagefont
% }
% 设置一级标题及相应页码字体字号。
% \begin{macrocode}
\clist_map_inline:nn
{
\cftchapfont,
\cftchappagefont
}
{ \renewcommand { #1 } { \@@_rm_family: \zihao { -4 } \bfseries } }
% \end{macrocode}
% \end{variable}
% \begin{variable}
% {
% \cftsecfont,,
% \cftsubsecfont,,
% \cftsubsubsecfont,,
% \cftparafont,,
% \cftsubparafont,,
% \cftsecpagefont,,
% \cftsubsecpagefont,,
% \cftsubsubsecpagefont,,
% \cftparapagefont,,
% \cftsubparapagefont
% }
% 设置二三四五六级标题及相应页码字体字号。
% \begin{macrocode}
\clist_map_inline:nn
{
\cftsecfont,
\cftsubsecfont,
\cftsubsubsecfont,
\cftparafont,
\cftsubparafont,
\cftsecpagefont,
\cftsubsecpagefont,
\cftsubsubsecpagefont,
\cftparapagefont,
\cftsubparapagefont
}
{ \renewcommand { #1 } { \@@_rm_family: \zihao { -4 } } }
% \end{macrocode}
% \end{variable}
% \begin{macrocode}
%
%<*thesis>
% \end{macrocode}
% \subsection{公式}
% \begin{macro}{\theequation}
% 重定义公式编号样式。
% \begin{macrocode}
\renewcommand { \theequation } { \thechapter - \arabic { equation } }
% \end{macrocode}
% \end{macro}
% \subsection{算法}
% \begin{macro}{\ALG@name,\algorithmcfname}
% \changes{v1.1.1.0}{2022/04/15}{汉化算法标签名称}
% 算法标签名称。
% \begin{macrocode}
\ctex_at_end_preamble:n
{
\clist_map_inline:nn
{
{ \algorithmname },
{ \ALG@name },
{ \algorithmcfname }
}
{ \cs_set:Npn #1 { \@@_lang_switch:nn { 算法 } { Algorithm } } }
}
% \end{macrocode}
% \end{macro}
% \begin{macro}{\thealgorithm,\floatplacement}
% \changes{v0.10.1.0}{2022/04/13}{重定义算法编号样式}
% \changes{v0.10.2.0}{2022/04/14}{修正算法环境未加载导致的无法编译}
% \changes{v0.10.4.0}{2022/04/14}{修正\pkgx{algorithm}算法编号样式}
% \changes{v1.0.1.0}{2022/04/14}{修改\pkgx{algorithm}算法浮动体默认浮动位置}
% \changes{v1.1.2.0}{2022/04/15}{检测是否加载\pkgx{algorithm}}
% 重定义\pkgx{algorithm}宏包算法编号样式并修改默认浮动位置。
% \begin{macrocode}
\PassOptionsToPackage { chapter } { algorithm }
\ctex_at_end_preamble:n
{
\@ifpackageloaded { algorithm }
{
\cs_if_exist:NT \thealgorithm
{
\floatplacement { algorithm } { tbp }
\cs_set:Npn \thealgorithm { \thechapter . \arabic { algorithm } }
% \end{macrocode}
% \end{macro}
% \begin{macro}{\renewenvironment}
% \changes{v1.1.0.0}{2022/04/15}{设置\pkgx{algorithm}算法内容字号}
% 设置\pkgx{algorithm}算法内容字号。
% \begin{macrocode}
\bool_if:NT \l_@@_alg_small_bool
{
\renewenvironment { algorithm }
{
\@nameuse { fst@algorithm }
\@float@setevery { algorithm }
\ctex_gadd_ltxhook:nn
{ cmd/@floatboxreset/after }
{ \zihao { 5 } }
\@float { algorithm }
}
{ \float@end }
}
}
}
{ }
}
% \end{macrocode}
% \end{macro}
% \begin{macro}{\thealgocf}
% \changes{v0.10.4.0}{2022/04/14}{修正\pkgx{algorithm2e}算法编号样式}
% \changes{v1.1.2.0}{2022/04/15}{检测是否加载\pkgx{algorithm2e}}
% 重定义\pkgx{algorithm2e}宏包算法编号样式。
% \begin{macrocode}
\PassOptionsToPackage { algochapter } { algorithm2e }
\ctex_at_end_preamble:n
{
\@ifpackageloaded { algorithm2e }
{
\cs_if_exist:NT \thealgocf
{
\cs_set:Npn \thealgocf { \thechapter . \arabic { algocf } }
% \end{macrocode}
% \end{macro}
% \begin{macro}{\renewenvironment}
% \changes{v1.0.3.0}{2022/04/15}{修改\pkgx{algorithm2e}算法浮动体默认浮动位置}
% 修改\pkgx{algorithm2e}算法浮动体默认浮动位置。
% \begin{macrocode}
\renewenvironment { \algocf@envname } [ 1 ] [ tbp ]
{
\setboolean { algocf@algostar } { false }
\setboolean { algocf@procenvironment } { false }
\gdef \algocfautorefname { \algorithmautorefname }
\begin { algocf@algorithm } [ #1 ] \ignorespaces
}
{ \end { algocf@algorithm } \ignorespacesafterend }
% \end{macrocode}
% \end{macro}
% \begin{macro}{\SetAlFnt}
% \changes{v1.1.0.0}{2022/04/15}{设置\pkgx{algorithm2e}算法内容字号}
% 设置\pkgx{algorithm2e}算法内容字号。
% \begin{macrocode}
\bool_if:NT \l_@@_alg_small_bool
{ \SetAlFnt { \zihao { 5 } } }
}
}
{ }
}
% \end{macrocode}
% \end{macro}
% \subsection{Caption}
% \begin{macro}{\DeclareCaptionLabelSeparator,\DeclareCaptionFont,\captionsetup}
% \changes{v0.1.2.0}{2022/04/03}{设置图片标签与后面标题之间的间距}
% \changes{v0.1.3.0}{2022/04/03}{设置图片标签与标题字体字号}
% 设置图表标签与后面标题之间的间距及caption字体字号。
% \begin{macrocode}
\RequirePackage { caption }
\DeclareCaptionLabelSeparator { customskip } { \hskip \l_@@_cap_label_sep_tl }
\DeclareCaptionFont { customfont } { \@@_rm_family: \zihao { 5 } }
\captionsetup
{
labelsep = customskip,
font = customfont
}
% \end{macrocode}
% \end{macro}
% \begin{macro}{\captionsetup}
% \changes{v1.0.4.0}{2022/04/15}{设置\pkgx{algorithm}算法标签与标题字体字号及标签与后面标题之间的间距}
% \changes{v1.1.3.0}{2022/04/15}{修正\pkgx{algorithm}算法标签字体系列}
% 设置\pkgx{algorithm}算法标签与标题字体字号及标签与后面标题之间的间距。
% \begin{macrocode}
\captionsetup [ algorithm ]
{
labelsep = customskip,
labelfont = customfont,
font = customfont
}
% \end{macrocode}
% \end{macro}
% \begin{macro}{\SetAlgoCaptionSeparator,\SetAlCapNameFnt,\SetAlCapFnt}
% \changes{v1.0.0.0}{2022/04/14}{修正\pkgx{algorithm2e}算法标签与后面标题之间的间距}
% \changes{v1.0.4.0}{2022/04/15}{修正\pkgx{algorithm2e}算法标签与标题字体字号}
% 设置\pkgx{algorithm2e}算法标签与标题字体字号及标签与后面标题之间的间距。
% \begin{macrocode}
\ctex_at_end_preamble:n
{
\cs_if_exist:NT \thealgocf
{
\SetAlgoCaptionSeparator { \hbox_to_wd:nn { \l_@@_cap_label_sep_tl } { } }
\SetAlCapNameFnt { \@@_rm_family: \zihao { 5 } }
\SetAlCapFnt { \@@_rm_family: \zihao { 5 } }
\SetAlCapSty { }
}
}
% \end{macrocode}
% \end{macro}
% \begin{macro}{\SetTblrStyle,\DefTblrTemplate}
% \changes{v1.11.0.0}{2022/05/06}{适配\pkgx{tabularray}宏包caption样式}
% 设置\pkgx{tabularray}宏包中表格标签与后面标题之间的间距及caption字体字号。
% \begin{macrocode}
\ctex_at_end_preamble:n
{
\@ifpackageloaded { tabularray }
{
\SetTblrStyle { head } { font = \@@_rm_family: \zihao { 5 } }
\DefTblrTemplate { caption-sep } { default }
{ \hskip \l_@@_cap_label_sep_tl }
}
{ }
}
% \end{macrocode}
% \end{macro}
% \subsection{图片}
% \begin{macro}{\PassOptionsToPackage,\captionsetup}
% \changes{v0.4.2.0}{2022/04/05}{设置子图标签与标题字体字号}
% 设置子图标签与标题字体字号,支持\pkgx{subfig}和\pkgx{subcaption}宏包。
% \begin{macrocode}
\PassOptionsToPackage { font = small } { subfig }
\captionsetup [ sub ] { font = customfont }
% \end{macrocode}
% \end{macro}
% \begin{macro}{\captionsetup}
% \changes{v1.13.4.0}{2022/05/08}{设置\pkgx{subfig}宏包子图引用样式}
% 设置\pkgx{subfig}宏包子图引用样式。
% \begin{macrocode}
\ctex_at_end_preamble:n
{
\@ifpackageloaded { subfig }
{ \captionsetup [ subfloat ] { subrefformat = parens } }
{ }
}
% \end{macrocode}
% \end{macro}
% \begin{macro}{\thesubfigure}
% \changes{v1.13.5.0}{2022/05/08}{设置\pkgx{subcaption}宏包子图引用样式}
% 设置\pkgx{subcaption}宏包子图引用样式。
% \begin{macrocode}
\ctex_at_end_preamble:n
{
\@ifpackageloaded { subcaption }
{ \cs_set:Npn \thesubfigure { ( \alph { subfigure } ) } }
{ }
}
% \end{macrocode}
% \end{macro}
% \subsection{表格}
% \changes{v0.10.0.0}{2022/04/13}{设置表格字号是否为五号}
% \changes{v1.0.2.0}{2022/04/14}{修复表格五号字无法设定浮动位置}
% \begin{macro}{table}
% 设置表格字号是否为五号。
% \begin{macrocode}
\ctex_at_end_preamble:n
{
\bool_if:NT \l_@@_tab_small_bool
{
\renewenvironment { table }
{ \def\@floatboxreset { \reset@font\small\@setminipage } \@float { table } }
{ \end@float }
}
}
% \end{macrocode}
% \end{macro}
% \begin{macro}{longtable}
% \changes{v1.3.0.0}{2022/04/20}{设置\envx{longtable}环境字号是否为五号}
% 设置\pkgx{longtable}宏包中\envx{longtable}环境字号是否为五号。
% \begin{macrocode}
\ctex_at_end_preamble:n
{
\@ifpackageloaded { longtable }
{
\bool_if:NT \l_@@_tab_small_bool
{
\ctex_gadd_ltxhook:nn
{ env/longtable/begin }
{ \small }
}
}
{ }
}
% \end{macrocode}
% \end{macro}
% \begin{macro}{tblr,longtblr}
% \changes{v1.11.0.0}{2022/05/06}{适配\pkgx{tabularray}宏包中\envx{tblr}和\envx{longtblr}环境字号}
% 设置\pkgx{tabularray}宏包中\envx{tblr}和\envx{longtblr}环境字号是否为五号。
% \begin{macrocode}
\ctex_at_end_preamble:n
{
\@ifpackageloaded { tabularray }
{
\bool_if:NT \l_@@_tab_small_bool
{
\ctex_gadd_ltxhook:nn
{ env/tblr/begin }
{ \small }
\ctex_gadd_ltxhook:nn
{ env/longtblr/begin }
{ \small }
}
}
{ }
}
% \end{macrocode}
% \end{macro}
% \subsection{超链接和PDF元数据}
% \begin{macro}{\hyperref}
% \changes{v0.5.0.0}{2022/04/05}{添加PDF主题元数据}
% \changes{v1.10.0.0}{2022/05/04}{添加PDF应用程序元数据}
% 配置超链接和PDF元数据。
% \begin{macrocode}
\RequirePackage{ hyperref }
\hypersetup
{
bookmarksnumbered,
hidelinks
}
\ctex_at_end_preamble:n
{
\hypersetup
{
pdftitle = \l_@@_pure_title_str,
% pdfsubject = { 西安电子科技大学本科毕业设计论文 },
% pdfcreator = { XeLaTeX~with~xduugthesis~class~in~XDUTS },
% pdfsubject = \l_@@_header_str,
% pdfcreator = { XeLaTeX~with~xdupgthesis~class~in~XDUTS },
pdfauthor = \l_@@_author_str
}
}
% \end{macrocode}
% \end{macro}
% \subsection{交叉引用}
% \begin{macro}{\ref,\pageref}
% \changes{v1.2.0.0}{2022/04/16}{优化中文环境下\tnx{ref}两侧中英文间空白}
% \changes{v1.13.3.0}{2022/05/08}{优化中文环境下\tnx{pageref}两侧中英文间空白}
% 优化中文环境下\tnx{ref}和\tnx{pageref}两侧中英文间空白。
% \begin{macrocode}
\ctex_at_end_preamble:n
{
\bool_if:NT \l_@@_ref_add_space
{
\str_if_eq:NNT { \l_@@_lang_tl } { zh }
{
\RequirePackage { xspace }
\xspaceaddexceptions { 。?!,、;:“”‘’—….--~·《》<>_ }
\cs_generate_variant:Nn \str_if_in:nnTF { xnTF }
\ctex_after_end_preamble:n
{
\cs_set_eq:NN \@@_trad_ref:n \ref
\cs_set:Npn \ref #1
{
\str_if_in:xnTF { \__hyp_get_anchor:n { #1 } } { chapter }
{ \@@_trad_ref:n { #1 } }
{ \xspace \@@_trad_ref:n { #1 } \xspace }
}
\cs_set_eq:NN \@@_trad_page_ref:n \pageref
\cs_set:Npn \pageref #1
{ \xspace \@@_trad_page_ref:n { #1 } \xspace }
}
}
}
}
% \end{macrocode}
% \end{macro}
% \subsection{参考文献}
% \begin{macro}{\@@_begin_document:n}
% 钩子。
% \begin{macrocode}
\cs_new_protected:Npn \@@_begin_document:n #1
{ \ctex_gadd_ltxhook:nn { env/document/begin } { #1 } }
% \end{macrocode}
% \end{macro}
% \begin{macro}{\RequirePackage,\bibliographystyle,\addbibresource}
% \changes{v1.13.6.0}{2022/05/09}{移除\pkgx{natbib}宏包显式调用}
% \changes{v1.14.0.0}{2022/05/10}{为\bibtex{}提供\tnx{parencite}命令}
% \changes{v1.14.1.0}{2022/05/10}{使用\tnx{PassOptionsToPackage}传递\pkgx{gbt7714}和\pkgx{biblatex}宏包参数}
% 参考文献。
% \begin{macrocode}
\PassOptionsToPackage { sort&compress } { gbt7714 }
\PassOptionsToPackage { style = gb7714-2015 } { biblatex }
\@@_begin_document:n
{
\tl_if_eq:NnTF \l_@@_bib_tool_tl { bibtex }
{
\RequirePackage { gbt7714 }
\bibliographystyle { gbt7714-numerical }
\NewDocumentCommand \parencite { m }
{ \group_begin: \citestyle { numbers } \cite { #1 } \group_end: }
}
{
\RequirePackage { biblatex }
\clist_map_inline:Nn \l_@@_bib_file_clist { \addbibresource { #1 } }
}
}
% \end{macrocode}
% \end{macro}
% \begin{macrocode}
%
%<*xduugthesis>
% \end{macrocode}
% \subsection{附录}
% \begin{macro}{appendixes}
% 附录环境。
% \changes{v0.3.0.0}{2022/04/04}{新增附录环境}
% \changes{v0.3.1.0}{2022/04/04}{修正附录中图表编号样式}
% \changes{v0.10.2.0}{2022/04/14}{修正附录中算法编号样式}
% \changes{v0.10.4.0}{2022/04/14}{修正附录中\pkgx{algorithm2e}算法编号样式}
% \changes{v1.2.2.0}{2022/04/20}{修正英文附录编号}
% \begin{macrocode}
\RequirePackage { environ }
\NewEnviron { appendixes }
{
\cs_set:Npn \appendixname { \@@_lang_switch:nn { 附录 } { Appendix } }
\tl_set_eq:NN \l_@@_chaptername \appendixname
\cs_set_eq:NN \@@_Roman: \@@_Alph:
\appendix
\renewcommand { \thefigure } { \thechapter \arabic { figure } }
\renewcommand { \thetable } { \thechapter \arabic { table } }
\cs_if_exist:NT \thealgorithm
{ \cs_set:Npn \thealgorithm { \thechapter \arabic { algorithm } } }
\cs_if_exist:NT \thealgocf
{ \cs_set:Npn \thealgocf { \thechapter \arabic { algocf } } }
\BODY
}
% \end{macrocode}
% \end{macro}
% \subsection{封面}
% \subsubsection{本科生}
% \begin{macro}{\@@_cover_i:nn}
% 绘制班级和学号。
% \begin{arguments}
% \item 标签名称。
% \item 班级和学号对应值。
% \end{arguments}
% \begin{macrocode}
\cs_new:Npn \@@_cover_i:nn #1#2
{
\vbox_to_ht:nn { 12pt }
{
\mode_leave_vertical:
\hfill
\hbox:n
{
\@@_rm_family: \zihao { -4 } \bfseries
\hbox_to_wd:nn { 3em } { #1 }
\skip_horizontal:n { 1em }
\@@_uline:n { \hbox_to_wd:nn { 15ex } { \hfil #2 \hfil } }
\skip_horizontal:n { 1.5cm }
}
}
}
% \end{macrocode}
% \end{macro}
% \begin{macro}{\@@_cover_ii:nnn}
% \changes{v0.6.1.0}{2022/04/11}{修复logo不存在导致的无法编译}
% \changes{v1.13.1.0}{2022/05/08}{使用融合logo文件}
% 绘制西电logo。
% \begin{arguments}
% \item 盒子高度。
% \item logo高度。
% \item logo类型。
% \end{arguments}
% \begin{macrocode}
\cs_new:Npn \@@_cover_ii:nnn #1#2#3
{
\vbox_to_ht:nn { #1 }
{
\mode_leave_vertical:
\hfil
\file_if_exist:nT { xdulogo.pdf }
{
\str_if_eq:nnTF { #3 } { text }
{ \includegraphics [ page = 1, height = #2 ] { xdulogo.pdf } }
{ \includegraphics [ page = 2, height = #2 ] { xdulogo.pdf } }
}
\hfil
}
}
% \end{macrocode}
% \end{macro}
% \begin{macro}{\@@_cover_iii:nnnnn}
% 绘制论文信息。
% \begin{arguments}
% \item 标签宽度。
% \item 标签名称。
% \item 字体族。
% \item 字号。
% \item 论文信息。
% \end{arguments}
% \begin{macrocode}
\cs_new:Npn \@@_cover_iii:nnnnn #1#2#3#4#5
{
\vbox_to_ht:nn { 42.5pt }
{
\vfill
\mode_leave_vertical:
\hfil
\hbox:n
{
\@@_rm_family:
\zihao { 3 }
\hbox_to_wd:nn { #1 } { \bfseries #2 }
\skip_horizontal:n { 1em }
\zihao { -3 }
\@@_uline:n
{
\hbox_to_wd:nn { 16em }
{ \hfil \use:c { @@_ #3 _family : } \zihao { #4 } #5 \hfil }
}
}
\hfil
}
}
% \end{macrocode}
% \end{macro}
% \begin{macro}{\@@_split_title:Nn,\@@_split_title:Nn}
% 拆分标题。
% \begin{arguments}
% \item 拆分后标题。
% \item 拆分前标题。
% \end{arguments}
% \begin{macrocode}
\cs_new_protected:Npn \@@_split_title:Nn #1#2
{
\seq_new:N \l_@@_title_seq
\tl_if_in:nnTF { #2 } { \\ }
{
\seq_set_split:Nnn \l_@@_title_seq { \\ } { #2 }
\clist_set_from_seq:NN #1 \l_@@_title_seq
}
{
\clist_put_right:Nx #1 { \tl_range:nnn { #2 } { 1 } { 14 } }
\clist_put_right:Nx #1 { \tl_range:nnn { #2 } { 15 } { -1 } }
}
}
\cs_generate_variant:Nn \@@_split_title:Nn { NV }
% \end{macrocode}
% \end{macro}
% \begin{variable}{\l_@@_is_ent_bool,\l_@@_is_wide_bool}
% \changes{v0.8.1.0}{2022/04/12}{封面导师标签标志位}
% 是否为校外毕设,是否为宽名称。
% \begin{macrocode}
\bool_new:N \l_@@_is_ent_bool
\bool_new:N \l_@@_is_wide_bool
% \end{macrocode}
% \end{variable}
% \begin{macro}{\@@_cover_iii:nnnn}
% \changes{v0.8.1.0}{2022/04/12}{使用标志位计算论文信息标签宽度}
% \changes{v0.1.4.0}{2022/04/03}{自动调整论文信息标签宽度}
% 绘制论文信息并自动调整论文信息标签宽度。
% \begin{arguments}
% \item 标签名称。
% \item 字体族。
% \item 字号。
% \item 论文信息。
% \end{arguments}
% \begin{macrocode}
\ctex_at_end_preamble:n
{
\tl_if_blank:VF \l_@@_supv_dept_str
{ \bool_set_true:N \l_@@_is_wide_bool }
\tl_if_blank:VF \l_@@_supv_ent_str
{ \bool_set_true:N \l_@@_is_wide_bool }
\tl_if_blank:VF \l_@@_supv_sch_str
{ \bool_set_true:N \l_@@_is_wide_bool }
\cs_new:Npn \@@_cover_iii:nnnn #1#2#3#4
{
\bool_if:NTF \l_@@_is_wide_bool
{ \@@_cover_iii:nnnnn { 6em } { #1 } { #2 } { #3 } { #4 } }
{ \@@_cover_iii:nnnnn { 4em } { #1 } { #2 } { #3 } { #4 } }
}
}
% \end{macrocode}
% \end{macro}
% \begin{macro}{\frontmatter}
% \changes{v1.9.1.0}{2022/05/04}{修正封面元素位置及尺寸}
% 排版正文前部分。
% \begin{macrocode}
\renewcommand { \frontmatter }
{
\loadgeometry { cover }
\pagestyle { empty }
\dim_set:Nn \parindent { 0pt }
\@@_add_bookmark:n { \@@_lang_switch:nn { 封面 } { Cover } }
% \end{macrocode}
% 排版班级和学号。
% \begin{macrocode}
\@@_cover_i:nn { 班级 } { \l_@@_class_id_str }
\@@_cover_i:nn { 学号 } { \l_@@_student_id_str }
\skip_vertical:n { 30pt }
% \end{macrocode}
% 排版西电文字logo。
% \begin{macrocode}
\@@_cover_ii:nnn { 65pt } { 35pt } { text }
% \end{macrocode}
% \changes{v1.13.2.0}{2022/05/08}{修正封面标题偏移}
% 排版封面标题。
% \begin{macrocode}
\vbox_to_ht:nn { 90pt }
{
\mode_leave_vertical:
\hfil
\hbox_to_wd:nn { 375pt } { \sffamily \zihao { 0 } 本科毕业设计论文 }
\hfil
}
% \end{macrocode}
% 排版西电logo。
% \begin{macrocode}
\@@_cover_ii:nnn { 140pt } { 120pt } { icon }
% \end{macrocode}
% 拆分论文标题并排版。
% \begin{macrocode}
\clist_new:N \l_@@_title_clist
\@@_split_title:NV \l_@@_title_clist \l_@@_title_str
\str_set:Nx \l_@@_title_i_str { \clist_item:Nn \l_@@_title_clist { 1 } }
\str_set:Nx \l_@@_title_ii_str { \clist_item:Nn \l_@@_title_clist { 2 } }
\@@_cover_iii:nnnn { 题目 } { sf } { 3 } { \l_@@_title_i_str }
\tl_if_blank:VF \l_@@_title_ii_str
{ \@@_cover_iii:nnnn { } { sf } { 3 } { \l_@@_title_ii_str } }
% \end{macrocode}
% 排版学院、专业、学生姓名。
% \begin{macrocode}
\@@_cover_iii:nnnn { 学院 } { rm } { -3 } { \l_@@_dept_str }
\@@_cover_iii:nnnn { 专业 } { rm } { -3 } { \l_@@_major_str }
\@@_cover_iii:nnnn { 学生姓名 } { rm } { -3 } { \l_@@_author_str }
% \end{macrocode}
% \changes{v0.8.1.0}{2022/04/12}{修正封面论文信息标签宽度}
% 校外毕设,排版校外导师姓名、校内导师姓名。
% \begin{macrocode}
\tl_if_blank:VF \l_@@_supv_ent_str
{ \bool_set_true:N \l_@@_is_ent_bool }
\tl_if_blank:VF \l_@@_supv_sch_str
{ \bool_set_true:N \l_@@_is_ent_bool }
\bool_if:NTF \l_@@_is_ent_bool
{
\@@_cover_iii:nnnn { 校外导师姓名 } { rm } { -3 } { \l_@@_supv_ent_str }
\@@_cover_iii:nnnn { 校内导师姓名 } { rm } { -3 } { \l_@@_supv_sch_str }
}
% \end{macrocode}
% 校内毕设,排版导师姓名、院内导师姓名。
% \begin{macrocode}
{
\@@_cover_iii:nnnn { 导师姓名 } { rm } { -3 } { \l_@@_supv_str }
\tl_if_blank:VF \l_@@_supv_dept_str
{
\@@_cover_iii:nnnn
{ 院内导师姓名 }
{ rm }
{ -3 }
{ \l_@@_supv_dept_str }
}
}
\cleardoublepage
% \end{macrocode}
% \changes{v0.8.0.0}{2022/04/12}{支持对称页边距}
% \changes{v1.10.2.0}{2022/05/04}{修正正文前页码样式}
% 更换页面尺寸、页面样式和页码样式。
% \begin{macrocode}
\@@_load_main_geometry:
\pagestyle { plain }
\pagenumbering { roman }
% \end{macrocode}
% \changes{v1.2.1.0}{2022/04/19}{修正英文论文下中文摘要标题样式}
% 中文摘要,宋体小四号。
% \begin{macrocode}
\@@_lang_switch:nn
{ \@@_n_chapter_head:nn { 摘要 } { 摘 { \quad } 要 } }
{
\@@_n_chapter_head_ii:nnn
{ 摘要 }
{ 摘 { \quad } 要 }
{ \@@_sf_family: \zihao { 3 } \centering }
}
{
\dim_set:Nn \parindent { 2 \ccwd }
\rmfamily \zihao { -4 }
\file_if_exist_input:n { \l_@@_abstract_zh_tl }
}
% \end{macrocode}
% \changes{v1.10.3.0}{2022/05/04}{使用弹性长度分隔关键词}
% 关键词弹性分隔间距。
% \begin{macrocode}
\cs_new:Npn \@@_keywords_space: { \hspace{ 2em plus 1em minus 1em } }
% \end{macrocode}
% 中文关键词,黑体小四号。
% \begin{macrocode}
{
\sffamily \zihao { -4 } \par
\@@_typeout_keywords:nNn
{ 关键词: } { \l_@@_keywords_zh_clist } { \@@_keywords_space: }
}
\cleardoublepage
% \end{macrocode}
% 英文摘要,Times New Roman字体,小四号。
% \changes{v0.4.3.0}{2022/04/05}{修正英文摘要标题字体}
% \begin{macrocode}
\@@_n_chapter_head_ii:nn
{ ABSTRACT } { \rmfamily \zihao { 3 } \bfseries \centering }
{
\dim_set:Nn \parindent { 2 \ccwd }
\rmfamily \zihao { -4 }
\file_if_exist_input:n { \l_@@_abstract_en_tl }
}
% \end{macrocode}
% 英文关键词,Times New Roman字体加粗,小四号。
% \begin{macrocode}
{
\rmfamily \zihao { -4 } \bfseries \par
\@@_typeout_keywords:nNn
{ Keywords: } { \l_@@_keywords_en_clist } { \@@_keywords_space: }
}
\cleardoublepage
% \end{macrocode}
% \changes{v1.1.4.0}{2022/04/16}{为目录章节标题增加间距}
% \changes{v1.1.5.0}{2022/04/16}{目录中移除目录章节}
% 目录。
% \begin{macrocode}
\setcounter { tocdepth } { 5 }
\@@_n_chapter_head:nn
{ \@@_lang_switch:nn { 目录 } { Contents } }
{ \@@_lang_switch:nn { 目 { \quad } 录 } { Contents } }
\@starttoc { toc }
\cleardoublepage
}
% \end{macrocode}
% \end{macro}
% \begin{macrocode}
%
%<*xdupgthesis>
% \end{macrocode}
% \subsubsection{研究生}
% \begin{macro}{\frontmatter}
% \changes{v1.5.0.0}{2022/05/01}{设置封面页边距}
% \changes{v1.6.0.0}{2022/05/02}{设置页脚页码}
% 排版正文前部分。
% \begin{macrocode}
\renewcommand { \frontmatter }
{
\loadgeometry { cover }
\pagestyle { empty }
\@@_load_main_geometry:
\pagestyle { front }
\pagenumbering { Roman }
}
% \end{macrocode}
% \end{macro}
% \begin{macrocode}
%
%<*xduugthesis>
% \end{macrocode}
% \subsection{正文}
% \subsubsection{本科生}
% \begin{macro}{\mainmatter}
% \changes{v0.8.0.0}{2022/04/12}{支持对称页边距}
% 排版正文部分。
% \begin{macrocode}
\renewcommand { \mainmatter }
{
\@@_load_main_geometry:
\pagestyle { plain }
\pagenumbering { arabic }
\dim_set:Nn \parindent { 2 \ccwd }
\rmfamily \zihao { -4 }
}
% \end{macrocode}
% \end{macro}
% \begin{macro}{\backmatter}
% 排版正文后部分。
% \begin{macrocode}
\renewcommand { \backmatter }
{
% \end{macrocode}
% \changes{v1.1.4.0}{2022/04/16}{为致谢章节标题增加间距}
% 致谢。
% \begin{macrocode}
\@@_n_chapter_head_toc:nn
{ \@@_lang_switch:nn { 致谢 } { Acknowledgements } }
{ \@@_lang_switch:nn { 致 { \quad } 谢 } { Acknowledgements } }
{
\dim_set:Nn \parindent { 2 \ccwd }
\rmfamily \zihao { -4 }
\file_if_exist_input:n { \l_@@_ack_tl }
}
% \end{macrocode}
% 参考文献。
% \changes{v0.2.1.0}{2022/04/04}{参考文献添加至目录}
% \changes{v0.5.2.0}{2022/04/07}{修正参考文献列表字体字号}
% \changes{v1.3.1.0}{2022/04/21}{修复参考文献列表字体字号}
% \changes{v1.4.1.0}{2022/04/27}{修复bibtex产生的多余参考文献列表章节}
% \begin{macrocode}
\cs_set:Npn \bibname { \@@_lang_switch:nn { 参考文献 } { Bibliography } }
\@@_n_chapter_head_toc:n { \bibname }
{
\tl_if_eq:NnTF \l_@@_bib_tool_tl { bibtex }
{
\cs_set:Npn \bibsection { }
\@@_rm_family: \zihao { 5 }
\bibliography { \l_@@_bib_file_clist }
}
{
\defbibheading { bibliography } [ ] { }
\cs_set:Npn \bibfont { \@@_rm_family: \zihao { 5 } }
\printbibliography
}
}
}
% \end{macrocode}
% \end{macro}
% \begin{macrocode}
%
% \end{macrocode}
% \begin{macrocode}
%<*xdupgthesis>
% \end{macrocode}
% \subsubsection{研究生}
% \begin{macro}{\mainmatter}
% \changes{v1.5.0.0}{2022/05/01}{设置正文页边距}
% \changes{v1.6.0.0}{2022/05/02}{设置页脚页码}
% 排版正文部分。
% \begin{macrocode}
\renewcommand { \mainmatter }
{
\@@_load_main_geometry:
\pagestyle { plain }
\pagenumbering { arabic }
}
% \end{macrocode}
% \end{macro}
% \begin{macrocode}
%
% \end{macrocode}
% \begin{macrocode}
%<@@=>
% \end{macrocode}
% \Finale
\endinput