diff options
author | Karl Berry <karl@freefriends.org> | 2022-04-09 20:29:34 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2022-04-09 20:29:34 +0000 |
commit | dc3f6c27d3ca58b293c798446665a35176d9ffc0 (patch) | |
tree | 4786e956de387b4b3e6f0d3f7f55ed8aab43624c /Master/texmf-dist | |
parent | d170ae99c358f2add1c0076626bb0204d778b914 (diff) |
xduts (9apr22)
git-svn-id: svn://tug.org/texlive/trunk@62987 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist')
-rw-r--r-- | Master/texmf-dist/doc/xelatex/xduts/README.md | 26 | ||||
-rw-r--r-- | Master/texmf-dist/doc/xelatex/xduts/xduts.pdf | bin | 0 -> 306881 bytes | |||
-rw-r--r-- | Master/texmf-dist/doc/xelatex/xduts/xidian-logo.pdf | bin | 0 -> 463660 bytes | |||
-rw-r--r-- | Master/texmf-dist/doc/xelatex/xduts/xidian-text.pdf | bin | 0 -> 416455 bytes | |||
-rw-r--r-- | Master/texmf-dist/source/xelatex/xduts/xduts.dtx | 2351 | ||||
-rw-r--r-- | Master/texmf-dist/source/xelatex/xduts/xduts.ins | 29 | ||||
-rw-r--r-- | Master/texmf-dist/tex/xelatex/xduts/xduugthesis.cls | 914 |
7 files changed, 3320 insertions, 0 deletions
diff --git a/Master/texmf-dist/doc/xelatex/xduts/README.md b/Master/texmf-dist/doc/xelatex/xduts/README.md new file mode 100644 index 00000000000..120464e3bf7 --- /dev/null +++ b/Master/texmf-dist/doc/xelatex/xduts/README.md @@ -0,0 +1,26 @@ +# XDUTS + +XDUTS(Xidian University TeX Suite)是面向西安电子科技大学本科生/研究生的LaTeX3模板套装,支持XeLaTeX,支持TeX Live、MacTeX、MiKTeX,支持Windows、macOS、GNU/Linux、Overleaf和TeXPage。旨在帮助西安电子科技大学本科生/研究生撰写开题报告/学位论文,目前有: + +- xduugthesis,本科毕业设计论文 + +即将支持: + +- xduugtp,本科生开题报告 +- xdupgthesis,研究生学位论文 +- xdupgtp,研究生开题报告 + +# 获取 + +```shell +xetex xduts.ins +xelatex xduts.dtx +makeindex -s gind.ist -o xduts.ind xduts.idx +makeindex -s gglo.ist -o xduts.gls xduts.glo +xelatex xduts.dtx +xelatex xduts.dtx +``` + +# 许可 + +This material is subject to [the LaTeX Project Public License 1.3c](https://ctan.org/license/lppl1.3). diff --git a/Master/texmf-dist/doc/xelatex/xduts/xduts.pdf b/Master/texmf-dist/doc/xelatex/xduts/xduts.pdf Binary files differnew file mode 100644 index 00000000000..e59fc17ef2a --- /dev/null +++ b/Master/texmf-dist/doc/xelatex/xduts/xduts.pdf diff --git a/Master/texmf-dist/doc/xelatex/xduts/xidian-logo.pdf b/Master/texmf-dist/doc/xelatex/xduts/xidian-logo.pdf Binary files differnew file mode 100644 index 00000000000..1f676b4fafc --- /dev/null +++ b/Master/texmf-dist/doc/xelatex/xduts/xidian-logo.pdf diff --git a/Master/texmf-dist/doc/xelatex/xduts/xidian-text.pdf b/Master/texmf-dist/doc/xelatex/xduts/xidian-text.pdf Binary files differnew file mode 100644 index 00000000000..aca2d6291ad --- /dev/null +++ b/Master/texmf-dist/doc/xelatex/xduts/xidian-text.pdf diff --git a/Master/texmf-dist/source/xelatex/xduts/xduts.dtx b/Master/texmf-dist/source/xelatex/xduts/xduts.dtx new file mode 100644 index 00000000000..81d798f991a --- /dev/null +++ b/Master/texmf-dist/source/xelatex/xduts/xduts.dtx @@ -0,0 +1,2351 @@ +% \iffalse +%<*driver> +\ProvidesFile{xduts.dtx} +[2022/04/09 v0.5.2.1 Xidian University TeX Suite] +%</driver> +%<class>\NeedsTeXFormat{LaTeX2e} +%<class>\RequirePackage{expl3} +%<xduugthesis>\ProvidesExplClass{xduugthesis} +%<xduugthesis> {2022/04/09}{0.5.2.1}{Xidian University Undergraduate Thesis class} +%<*driver> +\documentclass{ctxdoc} +\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} +\usepackage{hologo} +\usepackage{fetamont} +\usepackage{xurl} +\usepackage{xspace} +\xspaceaddexceptions{。?!,、;:“”‘’—….--~·《》<>_} +\usepackage{tabularx} +\newcolumntype{Y}{>{\centering\arraybackslash}X} +\usepackage{multirow} +\usepackage{makecell} +% 交叉引用 +\newcommand{\secref}[1]{第\xspace\ref{#1}\xspace{节}} +\newcommand{\tableref}[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} +% <name> 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} +% {<name>} LaTeX2e参数 +\newcommand{\argx}[1]{\xspace\Arg{#1}\xspace} +% [<name>] LaTeX2e可选参数 +\newcommand{\oargx}[1]{\xspace\Arg{#1}\xspace} +% 文件 +\newcommand{\filex}[1]{\xspace\texttt{#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*}\,:} +% 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 = 2 em, + xrightmargin = 3 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} +%</driver> +% \fi +% \CheckSum{822} +% \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} +% \noindent +% \begin{enumerate} +% \item 本模板的发布遵守 +% \LaTeX{} Project Public License\footurl{https://www.latex-project.org/lppl.txt}, +% 使用前请认真阅读协议内容。 +% \item 任何个人或组织以本模板为基础进行修改、扩展而生成的新的专用模板, +% 请严格遵守\LaTeX{} Project Public License, +% 由于违犯协议而引起的任何纠纷争端均与本模板作者无关。 +% \end{enumerate} +% \end{abstract} +% \clearpage +% \tableofcontents +% \clearpage +% \section{介绍} +% \xduts{} (Xidian University \TeX{} Suite) +% 是为了帮助西安电子科技大学本科生/研究生撰写开题报告/学位论文而编写的\LaTeX{}模板套装,目前有: +% \begin{itemize} +% \item \clsx{xduugthesis},本科毕业设计论文。 +% \end{itemize} +% \par +% 本文档将尽量完整的介绍模板的使用方法, +% 如有不清楚之处,或者想提出改进建议, +% 可以在GitHub Issues\footurl{https://github.com/note286/xduts/issues/} +% 参与讨论或提问。另外,不接受任何Pull Requests。 +% \par +% 请在最新版\LaTeX{}环境中使用最新版\xduts{}, +% 《一份(不太)简短的\LaTeXe{}介绍》\footctan{info/lshort/chinese/lshort-zh-cn.pdf} +% 中提及的内容本文档将不再提及。 +% \section{贡献者} +% \xduts{}的开发过程中,维护者为 +% \href{https://github.com/note286/}{\ttfamily @note286}。 +% 同时,也要感谢所有在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}。 +% \StopEventually{} +% \section{使用说明} +% \subsection{基本用法} +% \changes{v0.5.1.2}{2022/04/07}{增加编译说明} +% \LaTeX{}本身是命令行程序,通过不同的命令调用所需的编译引擎,编辑器提供的快捷按钮实际只是做了包装。\xduts{}仅支持\XeLaTeX{},参考文献默认使用\biber{},也可以切换为\bibtex{},如何编译\LaTeX{}请学习《一份(不太)简短的\LaTeXe{}介绍》中相关内容。 +% \subsubsection{xduugthesis} +% \paragraph{标准结构} +% 典型的\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} +% \paragraph{命令与环境} +% \subparagraph{附录环境} +% 附录位于参考文献后,即在\tnx{backmatter}后。 +% \begin{latexexample}[emph={[1]appendixes}] +% \begin{appendixes} +% \chapter{这是一个附录} +% \chapter{这是另一个附录} +% \end{appendixes} +% \end{latexexample} +% \subsection{参数设置} +% \begin{function}[added=2022-03-07]{\xdusetup} +% \begin{syntax} +% \tnx{xdusetup}=\argx{键值列表} +% \end{syntax} +% 本模板提供了一系列选项,可自行配置。载入文档类之后,以下所有选项均可通过统一的命令\tnx{xdusetup}来设置。下文中尖括号内列出了若干个允许的选项,其中加粗的为默认选项。 +% \changes{v0.5.1.1}{2022/04/06}{增加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} +% \subsubsection{通用} +% \paragraph{字体配置} +% 设置字体配置后或不手动配置而使用默认值,请确保相应字体文件已安装。 +% \begin{function}[added=2022-03-06]{style/cjk-font} +% \begin{syntax} +% \optx{style/cjk-font}=\metax{adobe|fandol|founder|sinotype|(win)|none} +% \end{syntax} +% 设置中文字体,具体配置见\tableref{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]{style/latin-font} +% \begin{syntax} +% \optx{style/latin-font}=\metax{(tacn)|thcs|none} +% \end{syntax} +% 设置英文字体,具体配置见\tableref{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 +% |tacn|\tnote{1} & Times New Roman & Arial & Courier New \\ +% |thcs|\tnote{2} & Times New Roman & Helvetica & Courier Std \\ +% \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{cour.ttf}、\filex{courbd.ttf}、\filex{couri.ttf}和\filex{courbi.ttf}。 +% \item [2] \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} +% 设置数学字体,具体配置见\tableref{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} +% \begin{function}[added=2022-04-01]{style/en-cjk-font} +% \begin{syntax} +% \optx{style/en-cjk-font}=\metax{true|(false)} +% \end{syntax} +% 切换字体族时,英文是否使用中文字体。主要作用于封面、章节标题、页眉页脚等。 +% \end{function} +% \begin{optdesc} +% \item[true] 英文使用相对应字体族的中文字体。 +% \item[false] 英文使用相对应字体族的英文字体。 +% \end{optdesc} +% \paragraph{语言配置} +% \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} +% \paragraph{参考文献配置} +% \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} +% \paragraph{图片配置} +% \begin{function}[added=2022-04-03]{style/fig-label-sep} +% \begin{syntax} +% \optx{style/fig-label-sep}=\argx{间距} +% \end{syntax} +% 设置图片标签与后面标题之间的间距,默认值为\valuex{0.75em}。 +% \end{function} +% \paragraph{章节配置} +% \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} +% \subsubsection{xduugthesis} +% \paragraph{信息配置} +% \begin{function}[added=2022-04-01]{info/title} +% \begin{syntax} +% \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]{info/major} +% \begin{syntax} +% \optx{info/major}=\argx{专业名称} +% \end{syntax} +% 设置专业名称。 +% \end{function} +% \begin{function}[added=2022-04-01]{info/author} +% \begin{syntax} +% \optx{info/author}=\argx{作者姓名} +% \end{syntax} +% 设置作者姓名。 +% \end{function} +% \begin{function}[added=2022-04-01]{info/supervisor} +% \begin{syntax} +% \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]{info/supervisor-enterprise} +% \begin{syntax} +% \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-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-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} +% \paragraph{输入示范} +% 可以参考如下范例输入个人信息。注意不能有空行。 +% \begin{latexexample}[moretexcs={\xdusetup},emph={[2]info}] +% \xdusetup { +% info = { +% title = {第一行标题\\第二行标题}, +% department = {电子工程学院}, +% major = {电子信息工程}, +% author = {张三}, +% supervisor = {李四}, +% supervisor-department = {王五}, +% 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} +% \clearpage +% \section{代码实现} +% \changes{v0.1.0.0}{2022/04/03}{基本完成本科毕业设计论文模板} +% \setlength\parindent{0pt} +% \subsection{通用} +% \begin{macrocode} +%<@@=xdu> +% \end{macrocode} +% \begin{macrocode} +%<*class> +% \end{macrocode} +% \begin{macrocode} +\RequirePackage { xparse, l3keys2e } +% \end{macrocode} +% \subsubsection{键值选项定义} +% \begin{variable} +% { +% \l_@@_cjk_font_tl, +% \l_@@_fake_bold_str, +% \l_@@_fake_slant_str, +% \l_@@_latin_font_tl, +% \l_@@_math_font_tl, +% \l_@@_unicode_math_tl, +% \l_@@_font_type_tl, +% \l_@@_font_path_tl, +% \l_@@_en_cjk_font_bool, +% \l_@@_lang_tl, +% \l_@@_bib_tool_tl, +% \l_@@_bib_file_clist, +% \l_@@_fig_label_sep_tl, +% \l_@@_before_skip_clist, +% \l_@@_after_skip_clist +% } +% 中文字体配置名称。 +% \begin{macrocode} +\tl_new:N \l_@@_cjk_font_tl +% \end{macrocode} +% 中文字体伪粗体粗细程度。 +% \begin{macrocode} +\str_new:N \l_@@_fake_bold_str +% \end{macrocode} +% 中文字体伪斜体倾斜程度。 +% \begin{macrocode} +\str_new:N \l_@@_fake_slant_str +% \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} +% 英文是否使用中文字体。 +% \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} +% 图片标签与后面标题之间的间距。 +% \begin{macrocode} +\tl_new:N \l_@@_fig_label_sep_tl +% \end{macrocode} +% 设置章节标题前后的垂直间距。 +% \begin{macrocode} +\clist_new:N \l_@@_before_skip_clist +\clist_new:N \l_@@_after_skip_clist +% \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 .str_set:N = \l_@@_fake_bold_str, +% \end{macrocode} +% 中文字体伪斜体倾斜程度。 +% \begin{macrocode} + cjk-fake-slant .str_set:N = \l_@@_fake_slant_str, +% \end{macrocode} +% 英文字体配置。 +% \begin{macrocode} + latin-font .choices:nn = { tacn, thcs, 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} +% 英文是否使用中文字体。 +% \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} +% 图片标签与后面标题之间的间距。 +% \begin{macrocode} + fig-label-sep .tl_set:N = \l_@@_fig_label_sep_tl, +% \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} +% \end{macro} +% \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_dept_str, +% \l_@@_supv_ent_str, +% \l_@@_supv_sch_str, +% \l_@@_class_id_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_dept_str +% \end{macrocode} +% 校外导师姓名。 +% \begin{macrocode} +\str_new:N \l_@@_supv_ent_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} +% 作者学号。 +% \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-department .tl_set:N = \l_@@_supv_dept_str, +% \end{macrocode} +% 校外导师姓名。 +% \begin{macrocode} + supervisor-enterprise .tl_set:N = \l_@@_supv_ent_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} +% 作者学号。 +% \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_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}{\keys_set:nn} +% 初始设置。 +% \begin{macrocode} +\keys_set:nn { xdu } + { + style / cjk-font = win, + style / cjk-fake-bold = 3, + style / cjk-fake-slant = 0.2, + style / latin-font = tacn, + style / math-font = cm, + style / unicode-math = { }, + style / font-type = font, + style / font-path = fonts, + style / en-cjk-font = false, + style / language = zh, + style / bib-backend = biblatex, + style / bib-resource = { }, + style / fig-label-sep = { 0.75em }, + style / before-skip = { 24pt, 18pt, 12pt, 12pt, 12pt, 12pt }, + style / after-skip = { 18pt, 12pt, 6pt, 6pt, 6pt, 6pt }, + info / title = { }, + info / department = { }, + info / major = { }, + info / author = { }, + info / supervisor = { }, + info / supervisor-department = { }, + info / supervisor-enterprise = { }, + info / supervisor-school = { }, + info / class-id = { }, + info / student-id = { }, + info / abstract = { }, + info / abstract* = { }, + info / keywords = { }, + info / keywords* = { }, + info / acknowledgements = { } + } +% \end{macrocode} +% \end{macro} +% \begin{macro}{\xdusetup} +% 用户设置接口。 +% \begin{macrocode} +\NewDocumentCommand \xdusetup { m } + { \keys_set:nn { xdu } { #1 } } +% \end{macrocode} +% \end{macro} +% \begin{macro}{\ProcessKeysOptions} +% 处理选项。 +% \begin{macrocode} +\ProcessKeysOptions { xdu } +% \end{macrocode} +% \end{macro} +% \subsubsection{配置字体} +% 忽略字体警告。 +% \begin{macrocode} +\str_if_eq:NNTF { \l_@@_cjk_font_tl } { fandol } + { \PassOptionsToPackage { quiet } { fontspec } } + { } +\PassOptionsToPackage { quiet } { xeCJK } +% \end{macrocode} +% \begin{macro}{\PassOptionsToClass,\LoadClass} +% 加载\clsx{ctexbook}文档类。 +% \changes{v0.3.2.0}{2022/04/04}{修正行间距为1.5倍} +% \begin{macrocode} +\PassOptionsToClass + { + zihao=-4, + sub4section, +%<xduugthesis> linespread = 1.5, + fontset = none + } + { ctexbook } +\LoadClass { ctexbook } +% \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} +% \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 + { \ctex_if_platform_macos:TF { #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}{\@@_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} +% \paragraph{中文字体} +% \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_str } + } +% \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_str } + } +% \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_str, + FakeSlant = \l_@@_fake_slant_str + } + } +% \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_str } + } +% \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_str } + } +% \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_str } + } +% \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_str, + FakeSlant = \l_@@_fake_slant_str + } + } +% \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}{\@@_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}{\@@_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} +% \paragraph{英文字体} +% \begin{macro}{\@@_set_latin_font:nnn} +% 配置英文字体。 +% \begin{macrocode} +\cs_new:Npn \@@_set_latin_font:nnn #1#2#3 + { + \@@_font_path: + BoldFont = { #1 }, + SlantedFont = { #2 }, + BoldSlantedFont = { #3 }, + ItalicFont = { #2 }, + BoldItalicFont = { #3 } + } +% \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 } [ \@@_set_latin_font:nnn { #3 } { #4 } { #5 } ] } + } +% \end{macrocode} +% \end{macro} +% \begin{macro}{\@@_set_latin_sans_font:nnnnn} +% 配置英文无衬线族字体,参数分别为字体名称、字体文件名称(常规、粗体、意大利体、粗意大利体)。 +% \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 } } + { \setsansfont { #2 } [ \@@_set_latin_font:nnn { #3 } { #4 } { #5 } ] } + } +% \end{macrocode} +% \end{macro} +% \begin{macro}{\@@_set_latin_mono_font:nnnnn} +% 配置英文等宽族字体,参数分别为字体名称、字体文件名称(常规、粗体、意大利体、粗意大利体)。 +% \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 } } + { \setmonofont{ #2 } [ \@@_set_latin_font:nnn { #3 } { #4 } { #5 } ] } + } +% \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_none:} +% 英文字体配置\valuex{none}。 +% \begin{macrocode} +\cs_new:Npn \@@_load_latin_font_none: { } +% \end{macrocode} +% \end{macro} +% \paragraph{数学字体} +% \begin{macro}{\@@_load_unicode_math_pkg:} +% 加载\pkgx{unicode-math}宏包。 +% \begin{macrocode} +\cs_new:Npn \@@_load_unicode_math_pkg: + { + \RequirePackage + [ \l_@@_unicode_math_tl ] + { 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} +% \paragraph{加载字体} +% \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} +% \subsubsection{内部函数} +% \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}{\@@_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{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}{\@@_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:nn} +% 新建无编号章节并添加页眉和书签并单独设置标题样式。 +% \begin{macrocode} +\cs_new:Npn \@@_n_chapter_head:nn #1#2 + { + { + \ctexset { chapter / format = { #2 } } + \@@_n_chapter_head:n { #1 } + } + } +% \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} +% \subsubsection{目录} +% \begin{variable} +% { +% \cftchapleader, +% \cftbeforechapskip, +% \cftbeforesecskip, +% \cftbeforesubsecskip, +% \cftbeforesubsubsecskip, +% \cftbeforeparaskip, +% \cftbeforesubparaskip, +% \cftchapfont, +% \cftchappagefont, +% \cftsecfont, +% \cftsubsecfont, +% \cftsubsubsecfont, +% \cftparafont, +% \cftsubparafont, +% \cftsecpagefont, +% \cftsubsecpagefont, +% \cftsubsubsecpagefont, +% \cftparapagefont, +% \cftsubparapagefont +% } +% 设置目录样式。 +% \changes{v0.4.1.0}{2022/04/05}{设置目录样式} +% \begin{macrocode} +\RequirePackage [ titles ] { tocloft } +\renewcommand { \cftchapleader } { \bfseries \cftdotfill { \cftdotsep } } +\clist_map_inline:nn + { + \cftbeforechapskip, + \cftbeforesecskip, + \cftbeforesubsecskip, + \cftbeforesubsubsecskip, + \cftbeforeparaskip, + \cftbeforesubparaskip + } + { \dim_set:Nn { #1 } { 5pt } } + \clist_map_inline:nn + { + \cftchapfont, + \cftchappagefont + } + { \renewcommand { #1 } { \@@_rm_family: \zihao { -4 } \bfseries } } +\clist_map_inline:nn + { + \cftsecfont, + \cftsubsecfont, + \cftsubsubsecfont, + \cftparafont, + \cftsubparafont, + \cftsecpagefont, + \cftsubsecpagefont, + \cftsubsubsecpagefont, + \cftparapagefont, + \cftsubparapagefont + } + { \renewcommand { #1 } { \@@_rm_family: \zihao { -4 } } } +% \end{macrocode} +% \end{variable} +% \subsubsection{图片} +% \begin{macro}{\DeclareCaptionLabelSeparator,\DeclareCaptionFont,\captionsetup} +% \changes{v0.1.2.0}{2022/04/03}{设置图片标签与后面标题之间的间距} +% \changes{v0.1.3.0}{2022/04/03}{设置图片标签与标题字体字号} +% 设置图片标签与后面标题之间的间距。 +% \begin{macrocode} +\RequirePackage { caption } +\DeclareCaptionLabelSeparator { customskip } { \hskip \l_@@_fig_label_sep_tl } +\DeclareCaptionFont { customfont } { \@@_rm_family: \zihao { 5 } } +\captionsetup + { + labelsep = customskip, + font = customfont + } +% \end{macrocode} +% \end{macro} +% \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} +% \subsubsection{超链接和PDF元数据} +% \begin{macro}{\hyperref} +% 配置超链接和PDF元数据。 +% \changes{v0.5.0.0}{2022/04/05}{添加PDF主题元数据} +% \begin{macrocode} +\RequirePackage{hyperref} +\hypersetup + { + bookmarksnumbered, + hidelinks + } +\ctex_at_end_preamble:n + { + \hypersetup + { + pdftitle = \l_@@_pure_title_str, +%<xduugthesis> pdfsubject = {西安电子科技大学本科毕业设计论文}, + pdfauthor = \l_@@_author_str + } + } +% \end{macrocode} +% \end{macro} +% \subsubsection{参考文献} +% \begin{macro}{\addbibresource} +% 参考文献。 +% \begin{macrocode} +\@@_begin_document:n + { + \tl_if_eq:NnTF \l_@@_bib_tool_tl { bibtex } + { + \RequirePackage [ sort&compress,square,super,comma,numbers ] { natbib } + \RequirePackage { gbt7714 } + \bibliographystyle { gbt7714-numerical } + } + { + \RequirePackage [ style = gb7714-2015 ] { biblatex } + \clist_map_inline:Nn \l_@@_bib_file_clist { \addbibresource { #1 } } + } + } +% \end{macrocode} +% \end{macro} +% \subsubsection{附录} +% \begin{macro}{appendixes} +% 附录环境。 +% \changes{v0.3.0.0}{2022/04/04}{新增附录环境} +% \changes{v0.3.1.0}{2022/04/04}{修正附录中图表编号样式} +% \begin{macrocode} +\RequirePackage { environ } +\NewEnviron { appendixes } + { + \appendix + \renewcommand { \thefigure } { \thechapter \arabic { figure } } + \renewcommand { \thetable } { \thechapter \arabic { table } } + \BODY + } +% \end{macrocode} +% \end{macro} +% \subsubsection{通用宏包} +% 设置纸张尺寸为A4。 +% \begin{macrocode} +\RequirePackage { geometry } +\geometry { paper = a4paper } +% \end{macrocode} +% \begin{macrocode} +\RequirePackage { fancyhdr } +\RequirePackage { xeCJKfntef } +\RequirePackage { graphicx } +% \end{macrocode} +% \begin{macrocode} +%</class> +% \end{macrocode} +% \subsection{xduugthesis.cls} +% \begin{macrocode} +%<*xduugthesis> +% \end{macrocode} +% \subsubsection{内部函数} +% \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} +% \subsubsection{页面设置} +% \paragraph{页面尺寸} +% \begin{macro}{\geometry,\newgeometry,\savegeometry} +% 正文页面:上3厘米、下2厘米、内侧3厘米、外侧2厘米;装订线1厘米;页眉2厘米;页脚1厘米。 +% \begin{macrocode} +\newgeometry + { + top = 3cm, + bottom = 2cm, + inner = 3cm, + outer = 2cm, + bindingoffset = 1cm, + head = 2cm, + foot = 1cm + } +\savegeometry { main } +% \end{macrocode} +% 封面页面:上2.5厘米、下2.5厘米、内侧3厘米、外侧2厘米。 +% \begin{macrocode} +\newgeometry + { + top = 2.5cm, + bottom = 2.5cm, + inner = 3cm, + outer = 2cm + } +\savegeometry { cover } +% \end{macrocode} +% \end{macro} +% \paragraph{页眉页脚} +% \begin{macro}{\chaptermark} +% 设置奇数页页眉为章标题。 +% \begin{macrocode} +\renewcommand { \chaptermark } [ 1 ] + { + \markboth + { + \@@_lang_switch:nn + { \CTEXthechapter } + { \chaptername\space\Roman { chapter } } + \quad #1 + } + { } + } +% \end{macrocode} +% \end{macro} +% \begin{macro}{\fancypagestyle} +% 设置正文页眉页脚。页眉:宋体五号,居中排列。左面页眉为论文题目,右面页眉为章次和章标题。页眉底划线的宽度为 0.75 磅。页码:宋体小五号,排在页眉行的最外侧,不加任何修饰。 +% \changes{v0.1.1.0}{2022/04/03}{修正页眉字号} +% \begin{macrocode} +\fancypagestyle { plain } + { + \pagestyle { fancy } + \fancyhf { } + \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 } + } +% \end{macrocode} +% \end{macro} +% \subsubsection{标题设置} +% 中文章标题黑体,三号,居中排列。节标题宋体,四号,居中排列。英文一级标题字体为Times New Roman,四号,正体,左对齐,以大写罗马数字(I、II 等)标出序号。其余各级标题的字体均为Times New Roman,小四号,正体。二级及以下级别的标题依次缩进4个英文字符,以1.1,1.2,1.1.1,1.1.2形式标出序号。 +% \paragraph{章节层次} +% \begin{macro}{\ctexset} +% 设置章节层次为subparagraph。 +% \begin{macrocode} +\ctexset { secnumdepth=5 } +% \end{macrocode} +% \end{macro} +% \paragraph{章节名字} +% \begin{macro}{\ctexset} +% 设置章节的名字。 +% \begin{macrocode} +\ctexset + { + chapter / name = + { + \@@_lang_switch:nn { 第 } { \chaptername\space }, + \@@_lang_switch:nn { 章 } { } + }, + section / name = { }, + subsection / name = { }, + subsubsection / name = { }, + paragraph / name = { }, + subparagraph / name = { } + } +% \end{macrocode} +% \end{macro} +% \paragraph{章节编号} +% \begin{macro}{\ctexset} +% 设置章节编号的数字输出格式。 +% \begin{macrocode} +\ctexset + { + chapter / number = + { + \@@_lang_switch:nn + { \chinese { chapter } } + { \Roman { chapter } } + }, + section / number = { \thesection }, + subsection / number = { \thesubsection }, + subsubsection / number = { \thesubsubsection }, + paragraph / number = { \theparagraph }, + subparagraph / number = { \thesubparagraph } + } +% \end{macrocode} +% \end{macro} +% \paragraph{章节和标题} +% \begin{macro}{\@@_zh_title:nnn} +% 设置中文章节名字和随后的标题内容格式。 +% \begin{arguments} +% \item 字体族。 +% \item 字号。 +% \item 位置。 +% \end{arguments} +% \begin{macrocode} +\cs_new:Npn \@@_zh_title:nnn #1#2#3 + { + \use:c { @@_ #1 _family : } + \zihao { #2 } + \str_if_eq:ccTF { #3 } { c } + { \centering } + { \raggedright } + } +% \end{macrocode} +% \end{macro} +% 设置英文章节名字和随后的标题内容格式。 +% \begin{macro}{\@@_en_title:nn} +% \begin{arguments} +% \item 字号。 +% \item 偏移量。 +% \end{arguments} +% \begin{macrocode} +\cs_new:Npn \@@_en_title:nn #1#2 + { \zihao { #1 } \raggedright \skip_horizontal:n { #2 ex } } +% \end{macrocode} +% \end{macro} +% \begin{macro}{\ctexset} +% 设置章节名字和随后的标题内容格式。 +% \begin{macrocode} +\ctex_at_end_preamble:n + { + \@@_lang_switch:nn + { + \ctexset + { + chapter / format = { \@@_zh_title:nnn { sf } { 3 } { c } }, + section / format = { \@@_zh_title:nnn { rm } { 4 } { c } }, + subsection / format = { \@@_zh_title:nnn { rm } { 4 } { l } }, + subsubsection / format = { \@@_zh_title:nnn { rm } { 4 } { l } }, + paragraph / format = { \@@_zh_title:nnn { rm } { 4 } { l } }, + subparagraph / format = { \@@_zh_title:nnn { rm } { 4 } { l } } + } + } + { + \ctexset + { + chapter / format = { \@@_en_title:nn { 4 } { 0 } }, + section / format = { \@@_en_title:nn { -4 } { 4 } }, + subsection / format = { \@@_en_title:nn { -4 } { 8 } }, + subsubsection / format = { \@@_en_title:nn { -4 } { 12 } }, + paragraph / format = { \@@_en_title:nn { -4 } { 16 } }, + subparagraph / format = { \@@_en_title:nn { -4 } { 20 } } + } + } + } +% \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} +% \paragraph{封面} +% \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} +% 绘制西电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 + \includegraphics [ height = #2, keepaspectratio ] { #3 } + \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 {40pt} + { + \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{macro}{\@@_cover_iii:nnnn} +% \changes{v0.1.4.0}{2022/04/03}{自动调整论文信息标签宽度} +% 绘制论文信息并自动调整论文信息标签宽度。 +% \begin{arguments} +% \item 标签名称。 +% \item 字体族。 +% \item 字号。 +% \item 论文信息。 +% \end{arguments} +% \begin{macrocode} +\ctex_at_end_preamble:n + { + \cs_new:Npn \@@_cover_iii:nnnn #1#2#3#4 + { + \tl_if_blank:VTF \l_@@_supv_dept_str + { \@@_cover_iii:nnnnn { 4em } { #1 } { #2 } { #3 } { #4 } } + { \@@_cover_iii:nnnnn { 6em } { #1 } { #2 } { #3 } { #4 } } + } + } +% \end{macrocode} +% \end{macro} +% \begin{macro}{\frontmatter} +% 排版正文前部分。 +% \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 } { xidian-text } +% \end{macrocode} +% 排版封面标题。 +% \begin{macrocode} + \vbox_to_ht:nn { 75pt } + { \@@_sf_family: \zihao { 0 } \centering { 本科毕业设计论文 } } +% \end{macrocode} +% 排版西电logo。 +% \begin{macrocode} + \@@_cover_ii:nnn { 130pt } { 120pt } { xidian-logo } +% \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} +% 校外毕设,排版校外导师姓名、校内导师姓名。 +% \begin{macrocode} + \tl_if_blank:VTF \l_@@_supv_str + { + \@@_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} +% 更换页面尺寸、页面样式和页码样式。 +% \begin{macrocode} + \loadgeometry { main } + \pagestyle { plain } + \pagenumbering { Roman } +% \end{macrocode} +% 中文摘要,宋体小四号。 +% \begin{macrocode} + \@@_n_chapter_head:n { 摘要 } + { + \dim_set:Nn \parindent { 2\ccwd } + \rmfamily \zihao { -4 } + \file_if_exist_input:n { \l_@@_abstract_zh_tl } + } +% \end{macrocode} +% 中文关键词,黑体小四号。 +% \begin{macrocode} + { + \sffamily \zihao { -4 } \par + \@@_typeout_keywords:nNn { 关键词: } { \l_@@_keywords_zh_clist } { \qquad } + } + \cleardoublepage +% \end{macrocode} +% 英文摘要,Times New Roman字体,小四号。 +% \changes{v0.4.3.0}{2022/04/05}{修正英文摘要标题字体} +% \begin{macrocode} + \@@_n_chapter_head: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 } { \qquad } + } + \cleardoublepage +% \end{macrocode} +% 目录。 +% \begin{macrocode} + \setcounter { tocdepth } { 5 } + \tl_set:Nn \contentsname { \@@_lang_switch:nn { 目录 } { Contents } } + \@@_add_bookmark:n { \contentsname } + \tableofcontents + \cleardoublepage + } +% \end{macrocode} +% \end{macro} +% \begin{macro}{\mainmatter} +% \paragraph{正文} +% \begin{macro}{\theequation} +% 重定义公式编号样式。 +% \begin{macrocode} +\renewcommand { \theequation } { \thechapter - \arabic { equation } } +% \end{macrocode} +% \end{macro} +% 排版正文部分。 +% \begin{macrocode} +\renewcommand{\mainmatter} + { + \loadgeometry { main } + \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} +% 致谢。 +% \begin{macrocode} + \@@_n_chapter_head_toc:n { \@@_lang_switch:nn { 致谢 } { 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}{修正参考文献列表字体字号} +% \begin{macrocode} + \@@_add_toc:n { \@@_lang_switch:nn { 参考文献 } { Bibliography } } + { + \tl_if_eq:NnTF \l_@@_bib_tool_tl { bibtex } + { + \@@_rm_family: \zihao { 5 } + \bibliography { \l_@@_bib_file_clist } + } + { + \renewcommand { \bibfont } { \@@_rm_family: \zihao { 5 } } + \printbibliography + } + } + } +% \end{macrocode} +% \end{macro} +% \begin{macrocode} +%</xduugthesis> +% \end{macrocode} +% \begin{macrocode} +%<@@=> +% \end{macrocode} +% \Finale +\endinput diff --git a/Master/texmf-dist/source/xelatex/xduts/xduts.ins b/Master/texmf-dist/source/xelatex/xduts/xduts.ins new file mode 100644 index 00000000000..f47fc5e39ca --- /dev/null +++ b/Master/texmf-dist/source/xelatex/xduts/xduts.ins @@ -0,0 +1,29 @@ +\input ctxdocstrip +\askforoverwritefalse +\preamble + + Copyright (C) 2022--\the\year by @note286 in GitHub +--------------------------------------------------------------------- + + This work may be distributed and/or modified under the + conditions of the LaTeX Project Public License, either + version 1.3c of this license or (at your option) any later + version. This version of this license is in + http://www.latex-project.org/lppl/lppl-1-3c.txt + and the latest version of this license is in + http://www.latex-project.org/lppl.txt + and version 1.3 or later is part of all distributions of + LaTeX version 2005/12/01 or later. + + This work has the LPPL maintenance status "maintained". + +--------------------------------------------------------------------- + +\endpreamble +\postamble +\endpostamble +\keepsilent +\generate{\file{xduugthesis.cls}{\from{\jobname.dtx}{class,xduugthesis}}} +\nopreamble +\nopostamble +\endbatchfile diff --git a/Master/texmf-dist/tex/xelatex/xduts/xduugthesis.cls b/Master/texmf-dist/tex/xelatex/xduts/xduugthesis.cls new file mode 100644 index 00000000000..6e5b896a0fa --- /dev/null +++ b/Master/texmf-dist/tex/xelatex/xduts/xduugthesis.cls @@ -0,0 +1,914 @@ +%% +%% This is file `xduugthesis.cls', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% xduts.dtx (with options: `class,xduugthesis') +%% +%% Copyright (C) 2022--2022 by @note286 in GitHub +%% --------------------------------------------------------------------- +%% +%% This work may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either +%% version 1.3c of this license or (at your option) any later +%% version. This version of this license is in +%% http://www.latex-project.org/lppl/lppl-1-3c.txt +%% and the latest version of this license is in +%% http://www.latex-project.org/lppl.txt +%% and version 1.3 or later is part of all distributions of +%% LaTeX version 2005/12/01 or later. +%% +%% This work has the LPPL maintenance status "maintained". +%% +%% --------------------------------------------------------------------- +%% +\NeedsTeXFormat{LaTeX2e} +\RequirePackage{expl3} +\ProvidesExplClass{xduugthesis} + {2022/04/09}{0.5.2.1}{Xidian University Undergraduate Thesis class} +\RequirePackage { xparse, l3keys2e } +\tl_new:N \l__xdu_cjk_font_tl +\str_new:N \l__xdu_fake_bold_str +\str_new:N \l__xdu_fake_slant_str +\tl_new:N \l__xdu_latin_font_tl +\tl_new:N \l__xdu_math_font_tl +\tl_new:N \l__xdu_unicode_math_tl +\tl_new:N \l__xdu_font_type_tl +\tl_new:N \l__xdu_font_path_tl +\bool_new:N \l__xdu_en_cjk_font_bool +\tl_new:N \l__xdu_lang_tl +\tl_new:N \l__xdu_bib_tool_tl +\clist_new:N \l__xdu_bib_file_clist +\tl_new:N \l__xdu_fig_label_sep_tl +\clist_new:N \l__xdu_before_skip_clist +\clist_new:N \l__xdu_after_skip_clist +\keys_define:nn { xdu / style } + { + cjk-font .choices:nn = + { win, adobe, founder, sinotype, fandol, none } + { \tl_set_eq:NN \l__xdu_cjk_font_tl \l_keys_choice_tl }, + cjk-fake-bold .str_set:N = \l__xdu_fake_bold_str, + cjk-fake-slant .str_set:N = \l__xdu_fake_slant_str, + latin-font .choices:nn = { tacn, thcs, none } + { \tl_set_eq:NN \l__xdu_latin_font_tl \l_keys_choice_tl }, + math-font .choices:nn = + { + asana, cambria, cm, fira, garamond, lm, libertinus, stix, + bonum, dejavu, pagella, schola, termes, xits, none + } + { \tl_set_eq:NN \l__xdu_math_font_tl \l_keys_choice_tl }, + unicode-math .tl_set:N = \l__xdu_unicode_math_tl, + font-type .choices:nn = { font, file } + { \tl_set_eq:NN \l__xdu_font_type_tl \l_keys_choice_tl }, + font-path .tl_set:N = \l__xdu_font_path_tl, + en-cjk-font .bool_set:N = \l__xdu_en_cjk_font_bool, + language .choices:nn = { zh, en } + { \tl_set_eq:NN \l__xdu_lang_tl \l_keys_choice_tl }, + bib-backend .choices:nn = { bibtex, biblatex } + { \tl_set_eq:NN \l__xdu_bib_tool_tl \l_keys_choice_tl }, + bib-resource .clist_set:N = \l__xdu_bib_file_clist, + fig-label-sep .tl_set:N = \l__xdu_fig_label_sep_tl, + before-skip .clist_set:N = \l__xdu_before_skip_clist, + after-skip .clist_set:N = \l__xdu_after_skip_clist + } +\str_new:N \l__xdu_title_str +\str_new:N \l__xdu_title_i_str +\str_new:N \l__xdu_title_ii_str +\str_new:N \l__xdu_dept_str +\str_new:N \l__xdu_major_str +\str_new:N \l__xdu_author_str +\str_new:N \l__xdu_supv_str +\str_new:N \l__xdu_supv_dept_str +\str_new:N \l__xdu_supv_ent_str +\str_new:N \l__xdu_supv_sch_str +\str_new:N \l__xdu_class_id_str +\str_new:N \l__xdu_student_id_str +\tl_new:N \l__xdu_abstract_zh_tl +\tl_new:N \l__xdu_abstract_en_tl +\clist_new:N \l__xdu_keywords_zh_clist +\clist_new:N \l__xdu_keywords_en_clist +\tl_new:N \l__xdu_ack_tl +\keys_define:nn { xdu / info } + { + title .tl_set:N = \l__xdu_title_str, + department .tl_set:N = \l__xdu_dept_str, + major .tl_set:N = \l__xdu_major_str, + author .tl_set:N = \l__xdu_author_str, + supervisor .tl_set:N = \l__xdu_supv_str, + supervisor-department .tl_set:N = \l__xdu_supv_dept_str, + supervisor-enterprise .tl_set:N = \l__xdu_supv_ent_str, + supervisor-school .tl_set:N = \l__xdu_supv_sch_str, + class-id .tl_set:N = \l__xdu_class_id_str, + student-id .tl_set:N = \l__xdu_student_id_str, + abstract .tl_set:N = \l__xdu_abstract_zh_tl, + abstract* .tl_set:N = \l__xdu_abstract_en_tl, + keywords .clist_set:N = \l__xdu_keywords_zh_clist, + keywords* .clist_set:N = \l__xdu_keywords_en_clist, + acknowledgements .tl_set:N = \l__xdu_ack_tl + } +\keys_define:nn { xdu } + { + style .meta:nn = { xdu / style } { #1 }, + info .meta:nn = { xdu / info } { #1 } + } +\keys_set:nn { xdu } + { + style / cjk-font = win, + style / cjk-fake-bold = 3, + style / cjk-fake-slant = 0.2, + style / latin-font = tacn, + style / math-font = cm, + style / unicode-math = { }, + style / font-type = font, + style / font-path = fonts, + style / en-cjk-font = false, + style / language = zh, + style / bib-backend = biblatex, + style / bib-resource = { }, + style / fig-label-sep = { 0.75em }, + style / before-skip = { 24pt, 18pt, 12pt, 12pt, 12pt, 12pt }, + style / after-skip = { 18pt, 12pt, 6pt, 6pt, 6pt, 6pt }, + info / title = { }, + info / department = { }, + info / major = { }, + info / author = { }, + info / supervisor = { }, + info / supervisor-department = { }, + info / supervisor-enterprise = { }, + info / supervisor-school = { }, + info / class-id = { }, + info / student-id = { }, + info / abstract = { }, + info / abstract* = { }, + info / keywords = { }, + info / keywords* = { }, + info / acknowledgements = { } + } +\NewDocumentCommand \xdusetup { m } + { \keys_set:nn { xdu } { #1 } } +\ProcessKeysOptions { xdu } +\str_if_eq:NNTF { \l__xdu_cjk_font_tl } { fandol } + { \PassOptionsToPackage { quiet } { fontspec } } + { } +\PassOptionsToPackage { quiet } { xeCJK } +\PassOptionsToClass + { + zihao=-4, + sub4section, + linespread = 1.5, + fontset = none + } + { ctexbook } +\LoadClass { ctexbook } +\cs_new:Npn \__xdu_font_path: + { + \str_if_eq:NNTF { \l__xdu_font_type_tl } { font } + { } + { Path = \l__xdu_font_path_tl / , } + } +\cs_new:Npn \__xdu_if_platform_macos:FT #1#2 + { \ctex_if_platform_macos:TF { #2 } { #1 } } +\cs_new:Npn \__xdu_texmf_font:nn #1#2 + { \__xdu_if_platform_macos:FT { #1 } { #2 } } +\cs_new:Npn \__xdu_rm_family: + { \bool_if:NTF \l__xdu_en_cjk_font_bool { \CJKfamily+ { rm } } { \rmfamily } } +\cs_new:Npn \__xdu_sf_family: + { \bool_if:NTF \l__xdu_en_cjk_font_bool { \CJKfamily+ { sf } } { \sffamily } } +\cs_new:Npn \__xdu_tt_family: + { \bool_if:NTF \l__xdu_en_cjk_font_bool { \CJKfamily+ { tt } } { \ttfamily } } +\cs_new:Npn \__xdu_cfg_cjk_font_sub_b:n #1 + { + BoldFont = { #1 } + } +\cs_new:Npn \__xdu_cfg_cjk_font_sub_fb:n #1 + { + BoldFont = { #1 }, + BoldFeatures = { FakeBold = \l__xdu_fake_bold_str } + } +\cs_new:Npn \__xdu_cfg_cjk_font_sub_fs:n #1 + { + SlantedFont = { #1 }, + SlantedFeatures = { FakeSlant = \l__xdu_fake_slant_str } + } +\cs_new:Npn \__xdu_cfg_cjk_font_sub_fbfs:n #1 + { + BoldSlantedFont = { #1 }, + BoldSlantedFeatures = + { + FakeBold = \l__xdu_fake_bold_str, + FakeSlant = \l__xdu_fake_slant_str + } + } +\cs_new:Npn \__xdu_cfg_cjk_font_sub_bfs:n #1 + { + BoldSlantedFont = { #1 }, + BoldSlantedFeatures = { FakeSlant = \l__xdu_fake_slant_str } + } +\cs_new:Npn \__xdu_cfg_cjk_font_sub_i:n #1 + { + ItalicFont = { #1 } + } +\cs_new:Npn \__xdu_cfg_cjk_font_sub_fi:n #1 + { + ItalicFont = { #1 }, + ItalicFeatures = { FakeSlant = \l__xdu_fake_slant_str } + } +\cs_new:Npn \__xdu_cfg_cjk_font_sub_ifb:n #1 + { + BoldItalicFont = { #1 }, + BoldItalicFeatures = { FakeBold = \l__xdu_fake_bold_str } + } +\cs_new:Npn \__xdu_cfg_cjk_font_sub_fifb:n #1 + { + BoldItalicFont = { #1 }, + BoldItalicFeatures = + { + FakeBold = \l__xdu_fake_bold_str, + FakeSlant = \l__xdu_fake_slant_str + } + } +\cs_new:Npn \__xdu_cfg_cjk_font_r:n #1 + { + \__xdu_cfg_cjk_font_sub_fb:n { #1 }, + \__xdu_cfg_cjk_font_sub_fs:n { #1 }, + \__xdu_cfg_cjk_font_sub_fbfs:n { #1 }, + \__xdu_cfg_cjk_font_sub_fi:n { #1 }, + \__xdu_cfg_cjk_font_sub_fifb:n { #1 } + } +\cs_new:Npn \__xdu_cfg_cjk_font_rb:nn #1#2 + { + \__xdu_cfg_cjk_font_sub_b:n { #2 }, + \__xdu_cfg_cjk_font_sub_fs:n { #1 }, + \__xdu_cfg_cjk_font_sub_bfs:n { #2 }, + \__xdu_cfg_cjk_font_sub_fi:n { #1 }, + \__xdu_cfg_cjk_font_sub_fifb:n { #1 } + } +\cs_new:Npn \__xdu_cfg_cjk_font_ri:nn #1#2 + { + \__xdu_cfg_cjk_font_sub_fb:n { #1 }, + \__xdu_cfg_cjk_font_sub_fs:n { #1 }, + \__xdu_cfg_cjk_font_sub_fbfs:n { #1 }, + \__xdu_cfg_cjk_font_sub_i:n { #2 }, + \__xdu_cfg_cjk_font_sub_ifb:n { #2 } + } +\cs_new:Npn \__xdu_cfg_cjk_font_rbi:nnn #1#2#3 + { + \__xdu_cfg_cjk_font_sub_b:n { #2 }, + \__xdu_cfg_cjk_font_sub_fs:n { #1 }, + \__xdu_cfg_cjk_font_sub_bfs:n { #2 }, + \__xdu_cfg_cjk_font_sub_i:n { #3 }, + \__xdu_cfg_cjk_font_sub_ifb:n { #3 } + } +\cs_new:Npn \__xdu_select_font:nn #1#2 + { + \str_if_eq:NNTF { \l__xdu_font_type_tl } { font } + { #1 } + { #2 } + } +\cs_new:Npn \__xdu_set_cjk_main_font:nn #1#2 + { + \setCJKmainfont { #1 } + [ \__xdu_font_path: \__xdu_cfg_cjk_font_ri:nn { #1 } { #2 } ] + } +\cs_new:Npn \__xdu_set_cjk_main_font:nnn #1#2#3 + { + \setCJKmainfont { #1 } + [ \__xdu_font_path: \__xdu_cfg_cjk_font_rbi:nnn { #1 } { #2 } { #3 } ] + } +\cs_new:Npn \__xdu_set_cjk_sans_font:n #1 + { + \setCJKsansfont { #1 } + [ \__xdu_font_path: \__xdu_cfg_cjk_font_r:n { #1 } ] + } +\cs_new:Npn \__xdu_set_cjk_sans_font:nn #1#2 + { + \setCJKsansfont { #1 } + [ \__xdu_font_path: \__xdu_cfg_cjk_font_rb:nn { #1 } { #2 } ] + } +\cs_new:Npn \__xdu_set_cjk_mono_font:n #1 + { + \setCJKmonofont { #1 } + [ \__xdu_font_path: \__xdu_cfg_cjk_font_r:n { #1 } ] + } +\cs_new:Npn \__xdu_load_cjk_font_win: + { + \__xdu_set_cjk_main_font:nn + { \__xdu_select_font:nn { SimSun } { simsun.ttc } } + { \__xdu_select_font:nn { KaiTi } { simkai.ttf } } + \__xdu_set_cjk_sans_font:n + { \__xdu_select_font:nn { SimHei } { simhei.ttf } } + \__xdu_set_cjk_mono_font:n + { \__xdu_select_font:nn { FangSong } { simfang.ttf } } + } +\cs_new:Npn \__xdu_load_cjk_font_adobe: + { + \__xdu_set_cjk_main_font:nn + { \__xdu_select_font:nn { Adobe~Song~Std } { adobesongstd-light.otf } } + { \__xdu_select_font:nn { Adobe~Kaiti~Std } { adobekaitistd-regular.otf } } + \__xdu_set_cjk_sans_font:n + { \__xdu_select_font:nn { Adobe~Heiti~Std } { adobeheitistd-regular.otf } } + \__xdu_set_cjk_mono_font:n + { \__xdu_select_font:nn { Adobe~Fangsong~Std } { Adobe-Fangsong-Std-R-Font.otf } } + } +\cs_new:Npn \__xdu_load_cjk_font_founder: + { + \__xdu_set_cjk_main_font:nn + { \__xdu_select_font:nn { FZShuSong-Z01 } { FZShuSong-Z01.ttf } } + { \__xdu_select_font:nn { FZKai-Z03 } { FZKai-Z03.ttf } } + \__xdu_set_cjk_sans_font:n + { \__xdu_select_font:nn { FZHei-B01 } { FZHei-B01.ttf } } + \__xdu_set_cjk_mono_font:n + { \__xdu_select_font:nn { FZFangSong-Z02 } { FZFSK.TTF } } + } +\cs_new:Npn \__xdu_load_cjk_font_sinotype: + { + \__xdu_set_cjk_main_font:nn + { \__xdu_select_font:nn { STSong } { STSONG.TTF } } + { \__xdu_select_font:nn { STKaiti } { STKAITI.TTF } } + \__xdu_set_cjk_sans_font:nn + { \__xdu_select_font:nn { STXihei } { STXIHEI.TTF } } + { \__xdu_select_font:nn { STHeiti } { STHeiti.ttf } } + \__xdu_set_cjk_mono_font:n + { \__xdu_select_font:nn { STFangsong } { STFANGSO.TTF } } + } +\cs_new:Npn \__xdu_load_cjk_font_fandol: + { + \__xdu_set_cjk_main_font:nnn + { FandolSong-Regular.otf } + { FandolSong-Bold.otf } + { FandolKai-Regular.otf } + \__xdu_set_cjk_sans_font:nn + { FandolHei-Regular.otf } + { FandolHei-Bold.otf } + \__xdu_set_cjk_mono_font:n + { FandolFang-Regular.otf } + } +\cs_new:Npn \__xdu_load_cjk_font_none: { } +\cs_new:Npn \__xdu_set_latin_font:nnn #1#2#3 + { + \__xdu_font_path: + BoldFont = { #1 }, + SlantedFont = { #2 }, + BoldSlantedFont = { #3 }, + ItalicFont = { #2 }, + BoldItalicFont = { #3 } + } +\cs_new:Npn \__xdu_set_latin_main_font:nnnnn #1#2#3#4#5 + { + \str_if_eq:NNTF { \l__xdu_font_type_tl } { font } + { \setmainfont { #1 } } + { \setmainfont { #2 } [ \__xdu_set_latin_font:nnn { #3 } { #4 } { #5 } ] } + } +\cs_new:Npn \__xdu_set_latin_sans_font:nnnnn #1#2#3#4#5 + { + \str_if_eq:NNTF { \l__xdu_font_type_tl } { font } + { \setsansfont { #1 } } + { \setsansfont { #2 } [ \__xdu_set_latin_font:nnn { #3 } { #4 } { #5 } ] } + } +\cs_new:Npn \__xdu_set_latin_mono_font:nnnnn #1#2#3#4#5 + { + \str_if_eq:NNTF { \l__xdu_font_type_tl } { font } + { \setmonofont{ #1 } } + { \setmonofont{ #2 } [ \__xdu_set_latin_font:nnn { #3 } { #4 } { #5 } ] } + } +\cs_new:Npn \__xdu_load_latin_font_tacn: + { + \__xdu_set_latin_main_font:nnnnn + { Times~New~Roman } { times.ttf } { timesbd.ttf } { timesi.ttf } { timesbi.ttf } + \__xdu_set_latin_sans_font:nnnnn + { Arial } { arial.ttf } { arialbd.ttf } { ariali.ttf } { arialbi.ttf } + \__xdu_set_latin_mono_font:nnnnn + { Courier~New } { cour.ttf } { courbd.ttf } { couri.ttf } { courbi.ttf } + } +\cs_new:Npn \__xdu_load_latin_font_thcs: + { + \__xdu_set_latin_main_font:nnnnn + { Times~New~Roman } + { times.ttf } + { timesbd.ttf } + { timesi.ttf } + { timesbi.ttf } + \__xdu_set_latin_sans_font:nnnnn + { Helvetica } + { Helvetica.ttf } + { Helvetica~Bold.ttf } + { Helvetica~Oblique.ttf } + { Helvetica~Bold~Oblique.ttf } + \__xdu_set_latin_mono_font:nnnnn + { Courier~Std } + { CourierStd.otf } + { CourierStd-Bold.otf } + { CourierStd-Oblique.otf } + { CourierStd-BoldOblique.otf } + } +\cs_new:Npn \__xdu_load_latin_font_none: { } +\cs_new:Npn \__xdu_load_unicode_math_pkg: + { + \RequirePackage + [ \l__xdu_unicode_math_tl ] + { unicode-math } + } +\cs_new:Npn \__xdu_load_math_font_cambria: + { + \__xdu_load_unicode_math_pkg: + \str_if_eq:NNTF { \l__xdu_font_type_tl} { font} + { \setmathfont { Cambria~Math} } + { \setmathfont { cambria.ttc} [ Path = \l__xdu_font_path_tl/, FontIndex = 1 ] } + } +\cs_new:Npn \__xdu_define_math_font:nn #1#2 + { + \cs_new:cpn { __xdu_load_math_font_ #1 : } + { + \__xdu_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 } + } + { \__xdu_define_math_font:nn #1 } +\cs_new:Npn \__xdu_load_math_font_xits: + { + \__xdu_load_unicode_math_pkg: + \__xdu_if_platform_macos:FT + { + \setmathfont { XITS~Math } + } + { + \__xdu_load_unicode_math_pkg: + \setmathfont { XITSMath-Regular.otf } + \setmathfont { XITSMath-Bold.otf } + [range= { bfup -> up, bfit -> it } ] + } + } +\cs_new:Npn \__xdu_load_math_font_cm: { } +\cs_new:Npn \__xdu_load_math_font_none: { } +\cs_new:Npn \__xdu_load_font: + { + \use:c { __xdu_load_cjk_font_ \l__xdu_cjk_font_tl : } + \use:c { __xdu_load_latin_font_ \l__xdu_latin_font_tl : } + \use:c { __xdu_load_math_font_ \l__xdu_math_font_tl : } + } +\ctex_at_end_preamble:n { \__xdu_load_font: } +\cs_new_protected:Npn \__xdu_begin_document:n #1 + { \ctex_gadd_ltxhook:nn { env/document/begin } { #1 } } +\cs_new:Npn \__xdu_lang_switch:nn #1#2 + { + \str_if_eq:NNTF { \l__xdu_lang_tl } { zh } + { #1 } + { #2 } + } +\ctex_at_end_preamble:n + { + \str_new:N \l__xdu_pure_title_str + \str_set_eq:NN \l__xdu_pure_title_str \l__xdu_title_str + \str_remove_all:Nn \l__xdu_pure_title_str { \\ } + } +\cs_new:Npn \__xdu_uline:n #1 + { \CJKunderline [ thickness = 0.5pt ] { #1 } } +\cs_new:Npn \__xdu_get_text_width:Nn #1#2 + { + \box_clear_new:N \l__xdu_tmp_box + \hbox_set:Nn \l__xdu_tmp_box { #2 } + \dim_set:Nn #1 { \box_wd:N \l__xdu_tmp_box } + } +\cs_generate_variant:Nn \__xdu_get_text_width:Nn { NV } +\cs_new:Npn \__xdu_add_bookmark:n #1 + { \currentpdfbookmark { #1 } { #1 } } +\cs_new:Npn \__xdu_add_toc:n #1 + { + \cleardoublepage + \phantomsection + \addcontentsline { toc } { chapter } { #1 } + } +\cs_new:Npn \__xdu_n_chapter_head:n #1 + { + \__xdu_add_bookmark:n { #1 } + \chapter* { #1 } + \markboth { #1 } { } + } +\cs_new:Npn \__xdu_n_chapter_head:nn #1#2 + { + { + \ctexset { chapter / format = { #2 } } + \__xdu_n_chapter_head:n { #1 } + } + } +\cs_new:Npn \__xdu_n_chapter_head_toc:n #1 + { + \__xdu_add_toc:n { #1 } + \chapter* { #1 } + \markboth { #1 } { } + } +\RequirePackage [ titles ] { tocloft } +\renewcommand { \cftchapleader } { \bfseries \cftdotfill { \cftdotsep } } +\clist_map_inline:nn + { + \cftbeforechapskip, + \cftbeforesecskip, + \cftbeforesubsecskip, + \cftbeforesubsubsecskip, + \cftbeforeparaskip, + \cftbeforesubparaskip + } + { \dim_set:Nn { #1 } { 5pt } } + \clist_map_inline:nn + { + \cftchapfont, + \cftchappagefont + } + { \renewcommand { #1 } { \__xdu_rm_family: \zihao { -4 } \bfseries } } +\clist_map_inline:nn + { + \cftsecfont, + \cftsubsecfont, + \cftsubsubsecfont, + \cftparafont, + \cftsubparafont, + \cftsecpagefont, + \cftsubsecpagefont, + \cftsubsubsecpagefont, + \cftparapagefont, + \cftsubparapagefont + } + { \renewcommand { #1 } { \__xdu_rm_family: \zihao { -4 } } } +\RequirePackage { caption } +\DeclareCaptionLabelSeparator { customskip } { \hskip \l__xdu_fig_label_sep_tl } +\DeclareCaptionFont { customfont } { \__xdu_rm_family: \zihao { 5 } } +\captionsetup + { + labelsep = customskip, + font = customfont + } +\PassOptionsToPackage { font = small } { subfig } +\captionsetup [ sub ] { font = customfont } +\RequirePackage{hyperref} +\hypersetup + { + bookmarksnumbered, + hidelinks + } +\ctex_at_end_preamble:n + { + \hypersetup + { + pdftitle = \l__xdu_pure_title_str, + pdfsubject = {西安电子科技大学本科毕业设计论文}, + pdfauthor = \l__xdu_author_str + } + } +\__xdu_begin_document:n + { + \tl_if_eq:NnTF \l__xdu_bib_tool_tl { bibtex } + { + \RequirePackage [ sort&compress,square,super,comma,numbers ] { natbib } + \RequirePackage { gbt7714 } + \bibliographystyle { gbt7714-numerical } + } + { + \RequirePackage [ style = gb7714-2015 ] { biblatex } + \clist_map_inline:Nn \l__xdu_bib_file_clist { \addbibresource { #1 } } + } + } +\RequirePackage { environ } +\NewEnviron { appendixes } + { + \appendix + \renewcommand { \thefigure } { \thechapter \arabic { figure } } + \renewcommand { \thetable } { \thechapter \arabic { table } } + \BODY + } +\RequirePackage { geometry } +\geometry { paper = a4paper } +\RequirePackage { fancyhdr } +\RequirePackage { xeCJKfntef } +\RequirePackage { graphicx } +\cs_new:Npn \__xdu_typeout_keywords:nNn #1#2#3 + { + \str_clear_new:N \l__xdu_keywords_label_str + \str_set:Nn \l__xdu_keywords_label_str { #1 } + \dim_zero_new:N \l__xdu_keywords_label_dim + \__xdu_get_text_width:NV \l__xdu_keywords_label_dim \l__xdu_keywords_label_str + \begin { list } { \l__xdu_keywords_label_str } + { + \labelwidth \l__xdu_keywords_label_dim + \labelsep \c_zero_dim + \rightmargin \c_zero_dim + \leftmargin \l__xdu_keywords_label_dim + } + \item \clist_use:Nnnn #2 { #3 } { #3 } { #3 } + \end { list } + } +\newgeometry + { + top = 3cm, + bottom = 2cm, + inner = 3cm, + outer = 2cm, + bindingoffset = 1cm, + head = 2cm, + foot = 1cm + } +\savegeometry { main } +\newgeometry + { + top = 2.5cm, + bottom = 2.5cm, + inner = 3cm, + outer = 2cm + } +\savegeometry { cover } +\renewcommand { \chaptermark } [ 1 ] + { + \markboth + { + \__xdu_lang_switch:nn + { \CTEXthechapter } + { \chaptername\space\Roman { chapter } } + \quad #1 + } + { } + } +\fancypagestyle { plain } + { + \pagestyle { fancy } + \fancyhf { } + \fancyhead [ CE ] { \__xdu_rm_family: \zihao { 5 } \l__xdu_pure_title_str } + \fancyhead [ CO ] { \__xdu_rm_family: \zihao { 5 } \leftmark } + \fancyhead [ LE ] { \__xdu_rm_family: \zihao { -5 } \thepage } + \fancyhead [ RO ] { \__xdu_rm_family: \zihao { -5 } \thepage } + \renewcommand { \headrulewidth } { 0.75pt } + } +\ctexset { secnumdepth=5 } +\ctexset + { + chapter / name = + { + \__xdu_lang_switch:nn { 第 } { \chaptername\space }, + \__xdu_lang_switch:nn { 章 } { } + }, + section / name = { }, + subsection / name = { }, + subsubsection / name = { }, + paragraph / name = { }, + subparagraph / name = { } + } +\ctexset + { + chapter / number = + { + \__xdu_lang_switch:nn + { \chinese { chapter } } + { \Roman { chapter } } + }, + section / number = { \thesection }, + subsection / number = { \thesubsection }, + subsubsection / number = { \thesubsubsection }, + paragraph / number = { \theparagraph }, + subparagraph / number = { \thesubparagraph } + } +\cs_new:Npn \__xdu_zh_title:nnn #1#2#3 + { + \use:c { __xdu_ #1 _family : } + \zihao { #2 } + \str_if_eq:ccTF { #3 } { c } + { \centering } + { \raggedright } + } +\cs_new:Npn \__xdu_en_title:nn #1#2 + { \zihao { #1 } \raggedright \skip_horizontal:n { #2 ex } } +\ctex_at_end_preamble:n + { + \__xdu_lang_switch:nn + { + \ctexset + { + chapter / format = { \__xdu_zh_title:nnn { sf } { 3 } { c } }, + section / format = { \__xdu_zh_title:nnn { rm } { 4 } { c } }, + subsection / format = { \__xdu_zh_title:nnn { rm } { 4 } { l } }, + subsubsection / format = { \__xdu_zh_title:nnn { rm } { 4 } { l } }, + paragraph / format = { \__xdu_zh_title:nnn { rm } { 4 } { l } }, + subparagraph / format = { \__xdu_zh_title:nnn { rm } { 4 } { l } } + } + } + { + \ctexset + { + chapter / format = { \__xdu_en_title:nn { 4 } { 0 } }, + section / format = { \__xdu_en_title:nn { -4 } { 4 } }, + subsection / format = { \__xdu_en_title:nn { -4 } { 8 } }, + subsubsection / format = { \__xdu_en_title:nn { -4 } { 12 } }, + paragraph / format = { \__xdu_en_title:nn { -4 } { 16 } }, + subparagraph / format = { \__xdu_en_title:nn { -4 } { 20 } } + } + } + } +\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__xdu_before_skip_clist { 1 } }, + section / beforeskip = { \clist_item:Nn \l__xdu_before_skip_clist { 2 } }, + subsection / beforeskip = { \clist_item:Nn \l__xdu_before_skip_clist { 3 } }, + subsubsection / beforeskip = { \clist_item:Nn \l__xdu_before_skip_clist { 4 } }, + paragraph / beforeskip = { \clist_item:Nn \l__xdu_before_skip_clist { 5 } }, + subparagraph / beforeskip = { \clist_item:Nn \l__xdu_before_skip_clist { 6 } }, + chapter / afterskip = { \clist_item:Nn \l__xdu_after_skip_clist { 1 } }, + section / afterskip = { \clist_item:Nn \l__xdu_after_skip_clist { 2 } }, + subsection / afterskip = { \clist_item:Nn \l__xdu_after_skip_clist { 3 } }, + subsubsection / afterskip = { \clist_item:Nn \l__xdu_after_skip_clist { 4 } }, + paragraph / afterskip = { \clist_item:Nn \l__xdu_after_skip_clist { 5 } }, + subparagraph / afterskip = { \clist_item:Nn \l__xdu_after_skip_clist { 6 } } + } +\cs_new:Npn \__xdu_cover_i:nn #1#2 + { + \vbox_to_ht:nn {12pt} + { + \mode_leave_vertical: + \hfill + \hbox:n + { + \__xdu_rm_family: \zihao { -4 } \bfseries + \hbox_to_wd:nn { 3em } { #1 } + \skip_horizontal:n { 1em } + \__xdu_uline:n { \hbox_to_wd:nn { 15ex } { \hfil #2 \hfil } } + \skip_horizontal:n { 1.5cm } + } + } + } +\cs_new:Npn \__xdu_cover_ii:nnn #1#2#3 + { + \vbox_to_ht:nn {#1} + { + \mode_leave_vertical: + \hfil + \includegraphics [ height = #2, keepaspectratio ] { #3 } + \hfil + } + } +\cs_new:Npn \__xdu_cover_iii:nnnnn #1#2#3#4#5 + { + \vbox_to_ht:nn {40pt} + { + \vfill + \mode_leave_vertical: + \hfil + \hbox:n + { + \__xdu_rm_family: + \zihao { 3 } + \hbox_to_wd:nn { #1 } { \bfseries #2 } + \skip_horizontal:n { 1em } + \zihao { -3 } + \__xdu_uline:n + { + \hbox_to_wd:nn { 16em } + { \hfil \use:c { __xdu_ #3 _family : } \zihao { #4 } #5 \hfil } + } + } + \hfil + } + } +\cs_new_protected:Npn \__xdu_split_title:Nn #1#2 + { + \seq_new:N \l__xdu_title_seq + \tl_if_in:nnTF { #2 } { \\ } + { + \seq_set_split:Nnn \l__xdu_title_seq { \\ } { #2 } + \clist_set_from_seq:NN #1 \l__xdu_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 \__xdu_split_title:Nn { NV } +\ctex_at_end_preamble:n + { + \cs_new:Npn \__xdu_cover_iii:nnnn #1#2#3#4 + { + \tl_if_blank:VTF \l__xdu_supv_dept_str + { \__xdu_cover_iii:nnnnn { 4em } { #1 } { #2 } { #3 } { #4 } } + { \__xdu_cover_iii:nnnnn { 6em } { #1 } { #2 } { #3 } { #4 } } + } + } +\renewcommand{\frontmatter} + { + \loadgeometry { cover } + \pagestyle { empty } + \dim_set:Nn \parindent { 0pt } + \__xdu_add_bookmark:n { \__xdu_lang_switch:nn { 封面 } { Cover } } + \__xdu_cover_i:nn { 班级 } { \l__xdu_class_id_str } + \__xdu_cover_i:nn { 学号 } { \l__xdu_student_id_str } + \skip_vertical:n { 30pt } + \__xdu_cover_ii:nnn { 65pt } { 35pt } { xidian-text } + \vbox_to_ht:nn { 75pt } + { \__xdu_sf_family: \zihao { 0 } \centering { 本科毕业设计论文 } } + \__xdu_cover_ii:nnn { 130pt } { 120pt } { xidian-logo } + \clist_new:N \l__xdu_title_clist + \__xdu_split_title:NV \l__xdu_title_clist \l__xdu_title_str + \str_set:Nx \l__xdu_title_i_str { \clist_item:Nn \l__xdu_title_clist { 1 } } + \str_set:Nx \l__xdu_title_ii_str { \clist_item:Nn \l__xdu_title_clist { 2 } } + \__xdu_cover_iii:nnnn { 题目 } { sf } { 3 } { \l__xdu_title_i_str } + \tl_if_blank:VF \l__xdu_title_ii_str + { \__xdu_cover_iii:nnnn { } { sf } { 3 } { \l__xdu_title_ii_str } } + \__xdu_cover_iii:nnnn { 学院 } { rm } { -3 } { \l__xdu_dept_str } + \__xdu_cover_iii:nnnn { 专业 } { rm } { -3 } { \l__xdu_major_str } + \__xdu_cover_iii:nnnn { 学生姓名 } { rm } { -3 } { \l__xdu_author_str } + \tl_if_blank:VTF \l__xdu_supv_str + { + \__xdu_cover_iii:nnnn { 校外导师姓名 } { rm } { -3 } { \l__xdu_supv_ent_str } + \__xdu_cover_iii:nnnn { 校内导师姓名 } { rm } { -3 } { \l__xdu_supv_sch_str } + } + { + \__xdu_cover_iii:nnnn { 导师姓名 } { rm } { -3 } { \l__xdu_supv_str } + \tl_if_blank:VF \l__xdu_supv_dept_str + { + \__xdu_cover_iii:nnnn + { 院内导师姓名 } + { rm } + { -3 } + { \l__xdu_supv_dept_str } + } + } + \cleardoublepage + \loadgeometry { main } + \pagestyle { plain } + \pagenumbering { Roman } + \__xdu_n_chapter_head:n { 摘要 } + { + \dim_set:Nn \parindent { 2\ccwd } + \rmfamily \zihao { -4 } + \file_if_exist_input:n { \l__xdu_abstract_zh_tl } + } + { + \sffamily \zihao { -4 } \par + \__xdu_typeout_keywords:nNn { 关键词: } { \l__xdu_keywords_zh_clist } { \qquad } + } + \cleardoublepage + \__xdu_n_chapter_head:nn {ABSTRACT} { \rmfamily \zihao{3} \bfseries \centering } + { + \dim_set:Nn \parindent { 2\ccwd } + \rmfamily \zihao { -4 } + \file_if_exist_input:n { \l__xdu_abstract_en_tl } + } + { + \rmfamily \zihao { -4 } \bfseries \par + \__xdu_typeout_keywords:nNn { Keywords: } { \l__xdu_keywords_en_clist } { \qquad } + } + \cleardoublepage + \setcounter { tocdepth } { 5 } + \tl_set:Nn \contentsname { \__xdu_lang_switch:nn { 目录 } { Contents } } + \__xdu_add_bookmark:n { \contentsname } + \tableofcontents + \cleardoublepage + } +\renewcommand { \theequation } { \thechapter - \arabic { equation } } +\renewcommand{\mainmatter} + { + \loadgeometry { main } + \pagestyle { plain } + \pagenumbering { arabic } + \dim_set:Nn \parindent { 2\ccwd } + \rmfamily \zihao { -4 } + } +\renewcommand{\backmatter} + { + \__xdu_n_chapter_head_toc:n { \__xdu_lang_switch:nn { 致谢 } { Acknowledgements } } + { + \dim_set:Nn \parindent { 2\ccwd } + \rmfamily \zihao { -4 } + \file_if_exist_input:n { \l__xdu_ack_tl } + } + \__xdu_add_toc:n { \__xdu_lang_switch:nn { 参考文献 } { Bibliography } } + { + \tl_if_eq:NnTF \l__xdu_bib_tool_tl { bibtex } + { + \__xdu_rm_family: \zihao { 5 } + \bibliography { \l__xdu_bib_file_clist } + } + { + \renewcommand { \bibfont } { \__xdu_rm_family: \zihao { 5 } } + \printbibliography + } + } + } +%% +%% +%% End of file `xduugthesis.cls'. |