From da7eca05783b516162ded12b53f47f1a01b663de Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Wed, 17 Mar 2021 21:42:35 +0000 Subject: easybook (17mar21) git-svn-id: svn://tug.org/texlive/trunk@58473 c570f23f-e606-0410-a88d-b1316a301751 --- .../texmf-dist/source/latex/easybook/easybook.dtx | 2268 ++++++++++++++++++++ 1 file changed, 2268 insertions(+) create mode 100644 Master/texmf-dist/source/latex/easybook/easybook.dtx (limited to 'Master/texmf-dist/source') diff --git a/Master/texmf-dist/source/latex/easybook/easybook.dtx b/Master/texmf-dist/source/latex/easybook/easybook.dtx new file mode 100644 index 00000000000..d11b30abfce --- /dev/null +++ b/Master/texmf-dist/source/latex/easybook/easybook.dtx @@ -0,0 +1,2268 @@ +%\iffalse meta-comment +% +%Copyright (C) 2021 by Qu Yi +% +%This work may be distributed and/or modified under the +%conditions of the CC-BY 4.0 License. +%The latest version of this license is in +% https://creativecommons.org/licenses/by/4.0/legalcode +%<*driver> +\def\nameofplainTeX{plain} +\ifx\fmtname\nameofplainTeX\else + \expandafter\begingroup +\fi +%<*install> +\input ctxdocstrip +\keepsilent +\askforoverwritefalse +% +\preamble +Copyright (C) 2021 by Qu Yi + +This work may be distributed and/or modified under the +conditions of the CC-BY 4.0 License. +The latest version of this license is in + https://creativecommons.org/licenses/by/4.0/legalcode +\endpreamble +% +\generate + { + \usedir{tex/latex/\jobname} + \file{\jobname.cls}{\from{\jobname.dtx}{class}} + } +% +\ifx\fmtname\nameofplainTeX + \expandafter\endbatchfile +\else + \expandafter\endgroup +\fi +% +\NeedsTeXFormat{LaTeX2e}[2020/10/01] +%<*driver> +\documentclass{ctxdoc} +\OnlyDescription +\begin{document} + \DocInput{\jobname.dtx} + \IndexLayout + \PrintChanges + \PrintIndex +\end{document} +% +%\fi +% +%\changes{v1.20}{2021/01/09}{修改和完善用户文档。} +%\changes{v1.20}{2021/01/09}{模板更改为使用CC-BY许可协议。} +% +%\CheckSum{0} +% +%\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 \~} +% +%\title{\sffamily easybook书籍文档类} +%\author{瞿毅} +%\date{2021/03/17\hskip\ccwd\relax v1.23t\thanks{\url{https://gitee.com/texl3/easybook}}} +%\maketitle +%\begin{abstract} +% \cls{easybook} 是基于 \cls{ctexbook} 书籍文档类创建以极简为风格的模板,可以看作对 \cls{ctexbook} 的进一步包装。虽然\CTeX 文档类提供了较好的中文支持,但想实现个性化功能一般需要在其基础上载入更多宏包来定制。\cls{easybook} 考虑了一些细节并载入一些常用宏包实现一般的排版需求,它适用于排版中英文书籍或笔记,甚至可稍加调整成为学位论文模板。 +%\end{abstract} +%\tableofcontents +% +%\begin{documentation} +%\section{编译方式} +%模板含有一个使用示例文件 \opt{easybook-demo.tex},编译前建议满足以下的条件 +%\begin{itemize} +% \item 使用 \hologo{XeLaTeX}(推荐)或 \hologo{LuaLaTeX} 两种编译方式。 +% \item 参考文献支持用 \hologo{BibTeX}(默认)或 \hologo{biber} 后端处理。 +% \item 由于用到了一些较新的宏包,建议安装最新的\TeX 发行版并将宏包升级为最新。 +%\end{itemize} +% +%\subsection{编译步骤} +%\begin{frameverb} +% xelatex -shell-escape easybook-demo +% bibtex easybook-demo +% makeindex easybook-demo +% xelatex -shell-escape easybook-demo +% xelatex -shell-escape easybook-demo +%\end{frameverb} +% +%需注意,正确\textbf{编译索引}需要增加 \opt{-shell-escape} 命令行选项。若不需要索引和参考文献,可以在正文中注释掉命令。若出现以下警告,再编译一次即可。 +%\begin{frameverb} +% LaTeX Warning: Label(s) may have changed. Rerun to get cross-references right. +%\end{frameverb} +% +%\subsection{字体设置} +%\label{subsec:font settings} +%默认使用\CTeX 预置中文字库,当开启 \opt{font = noto} 选项时需要安装开源字体,中文使用方正系列的{\songti 方正书宋}、{\heiti 方正黑体}、{\kaishu 方正楷体}和{\fangsong 方正仿宋},英文使用思源系列的{\rmfamily Noto Serif}、{\sffamily Noto Sans}和{\ttfamily Noto Sans Mono},数学字体使用 \pkg{notomath}。相关选项可以见节 \ref{sec:document class options} 中的 \opt{font} 选项,字体点击此处下载\href{https://wws.lanzous.com/b01ns361i}{下载地址}。 +% +%如果您不想使用\CTeX 默认字体和方正、思源字体,\textbf{自定义字体}需启用选项 \opt{font = none},并可在导言区设置中文字体,粗体与斜体不设置会产生警告。 +%\begin{ctexexam} +% \setCJKmainfont{SimSun}[BoldFont = SimHei,ItalicFont = KaiTi] +% \setCJKsansfont{SimHei} +% \setCJKmonofont{FangSong} +%\end{ctexexam} +% +%\section{文档类选项} +%\label{sec:document class options} +%标准 \cls{book} 文类与 \cls{ctexbook} 文类的选项同样适用于本文档。除此之外选项分为两类 +%\begin{itemize} +% \item 带有 \rexptarget\rexpstar{} 号的选项,需要在引入文档类的时候设定。 +% \item 带有 \exptarget\expstar{} 号的选项,需要通过\CTeX 宏集提供的用户接口命令 \tn{ctexset} 设定。 +%\end{itemize} +% +%\begin{function}[rEXP,added = 2021-01-05]{draft} +%开启草稿模式会加快编译速度,表现有显示页面边框、行溢出的地方显示黑色方块、图片变成占位方框、显示当前日期和关闭超链接渲染。 +%\end{function} +% +%\begin{function}[rEXP,added = 2021-01-05]{newline} +%章标题风格为另起一行,英文模式使用较为常见。类似下面的效果 +%\begin{flushleft}\sffamily\LARGE +% Chapter 1\vskip 1.3pc +% This is a title +%\end{flushleft} +%\end{function} +% +%\begin{function}[rEXP,added = 2021-01-05]{entitle} +%部分标题编号由中文数字变为大写罗马数字,章标题编号由中文数字变为阿拉伯数字。比如\textbf{第一部分}变为\textbf{第I部分},\textbf{第一章}变为\textbf{第1章}。 +%\end{function} +%\begin{function}[rEXP,added = 2021-01-05]{english} +%使各类标题变为英文形式。包括章节标题、图表标题和定理标题等。如\textbf{第一章}变为\textbf{Chapter 1},\textbf{图1.1} 变为 \textbf{Table 1.1}。 +%\end{function} +%\begin{function}[rEXP,added = 2021-01-05]{enstyle} +%同时开启 \opt{newline}、\opt{entitle} 和 \opt{english} 三个选项以符合英文原生风格。 +%\end{function} +% +%\begin{function}[rEXP,added = 2021-01-05,updated = 2021-02-02]{font} +%\begin{syntax} +% font = +%\end{syntax} +%传递给 \cls{ctexbook} 设置字体,最好不要使用原有的 \opt{fontset} 选项,默认情况下使用自定义字体而不开启这个选项,可根据安装的字体及电脑系统选取。\opt{noto} 与 \opt{none} 选项的相关描述见小节 \ref{subsec:font settings},\opt{overleaf} 是一个各系统通用选项,会检测系统环境选取对应字体。 +%\changes{v1.21}{2021/01/12}{默认字体与\CTeX 一致,不再是自定义字体。} +%\end{function} +% +%\begin{function}[rEXP,added = 2021-01-05,updated = 2021-01-13]{paper} +%\begin{syntax} +% paper = <(a4paper)|b5paper|letterpaper|...> +%\end{syntax} +%设置页面大小,交给 \pkg{geometry} 宏包处理,可使用它支持的所有规格。建议选项 \opt{b5paper} 和 \opt{zihao = 5},选项 \opt{a4paper} 和 \opt{zihao = -4} 配合。 +%\end{function} +% +%\subsection{article 风格} +%\begin{function}[rEXP,added = 2021-03-16]{class} +%\begin{syntax} +% class = <(book)|article> +%\end{syntax} +%设置文类风格,默认为 \opt{book} 文档类。选用 \opt{article} 使文档编号、结构等与 \cls{article} 文档类的特性相似,可用于短篇幅的文章,不要再使用 \tn{chapter} 命令,此时设置双栏目录的 \opt{style/multoc} 选项、小节 \ref{subsec:document command} 中打印目录命令的 \opt{multoc} 及 \opt{book} 选项均会失效,会以 \opt{section} 标题级别输出目录。 +%\changes{v1.23t}{2021/03/16}{增加 article 文章风格,可用于短篇幅的文章。} +%\end{function} +% +%\subsection{文档命令} +%\label{subsec:document command} +%\begin{function}[added = 2021-02-20,updated = 2021-03-15]{\frontmatter,\mainmatter,\backmatter,\tableofcontents,\listoffigures,\listoftables,\listoflistings} +%\begin{syntax} +% \tn{frontmatter*}\oarg{编号格式|(Roman)} +% \tn{mainmatter*} +% \tn{backmatter} +% \tn{tableofcontents}\oarg{键值列表} +% \tn{listoffigures*}\oarg{键值列表} +% \tn{listoftables*}\oarg{键值列表} +% \tn{listoflistings*}\oarg{键值列表} +%\end{syntax} +%\tn{frontmatter} 为前言区命令,章标题不编号,页码可设置为例如 \opt{roman}、\opt{Alph} 等格式,带有星号的命令 \tn{frontmatter*} 不使用 \tn{cleardoublepage}。\tn{mainmatter} 为主文区命令,章标题正常编号且页码为从1开始计数的阿拉伯数字,\tn{mainmatter*} 命令不使用 \tn{cleardoublepage}。\tn{backmatter} 为后记区命令,页码格式与编号保持不变,章标题不编号。\tn{listoffigures} 命令输出图片目录,\tn{listoftables} 命令输出表格目录,\tn{listoflistings} 命令输出代码目录。带有星号的目录命令不会添加进主文档目录中,目录的键值列表选项如下 +%\changes{v1.23t}{2021/02/20}{重新定义文档结构划分命令。} +%\end{function} +% +%\begin{function}{multoc,book,article} +%\begin{syntax} +% multoc = +%\end{syntax} +%\opt{multoc} 与 \opt{style/multoc} 选项具有相同的效果,但是具有优先性且可单独设置不同目录是否双栏排版。\opt{book} 选项使目录标题按照 \opt{chapter} 级别输出,\opt{article} 选项使目录标题按照 \opt{article} 级别输出,默认为 \opt{chapter} 级别。 +%\changes{v1.23t}{2021/03/15}{为几个目录增加键值列表的选项,可设置标题输出级别以及是否加入主目录。} +%\end{function} +% +%\section{接口选项} +%\begin{function}[added = 2021-01-05]{\ctexset} +%\begin{syntax} +% \tn{ctexset}\marg{键值列表} +%\end{syntax} +%\cls{easybook} 扩展了\CTeX 宏集\LaTeX 3风格键值的通用控制命令 \tn{ctexset},接口选项同样用它设置, 原有的键值列表仍然可用。 +%\end{function} +% +%\begin{function}[EXP,added = 2021-01-08]{config} +%\begin{syntax} +% config = <配置文件名> +%\end{syntax} +%\opt{config}为载入用户配置选项,配置文件名不需加括号但需带有后缀名如 \opt{tex}、\opt{def} 和 \opt{cfg}。 +%\changes{v1.10}{2021/01/08}{加入载入用户配置选项。} +%\end{function} +% +%\subsection{风格} +%\begin{function}[EXP,added = 2021-01-05,updated = 2021-03-15]{style/...,color,multoc,withpart,perpart,perpage,notomath,rulewidth,uppercase,figure-sep,table-sep,listing-sep,equation-sep,number-sep} +%\begin{syntax} +% 以下选项路径为 \tn{ctexset}\marg{style/...} +% color = <(none)|seaside|energy|cyberpunk> +% multoc = +% withpart = +% perpart = +% perpage = +% notomath = <(true)|false> +% rulewidth = <(0.75pt)> +% uppercase = <(true)|false> +% figure-sep = <(.)> +% table-sep = <(.)> +% listing-sep = <(.)> +% equation-sep = <(.)> +% number-sep = <(.)> +%\end{syntax} +%\changes{v1.10}{2021/01/08}{更改颜色实现方式与选项名。} +%\changes{v1.23t}{2021/02/02}{noto风格的数学字体独立出来,可自定义设置。} +%\changes{v1.23t}{2021/02/09}{增加控制页面横线粗细的选项。} +%\changes{v1.23t}{2021/03/15}{增加控制编号连接符的选项。} +%\end{function} +% +%\begin{optdesc} +% \item[color] 主题颜色,包括标题、页眉颜色等,选项 \opt{none} 为黑白页面,但不包括超链接。 +% \begin{function}{ctex@frame,ctex@emph,ctex@verb} +% \begin{syntax} +% \tn{definecolor}\oarg{类型}\marg{名称}\marg{模式列表}\marg{参数列表} +% \end{syntax} +% 主题颜色用到这三个颜色,可以使用 \tn{definecolor} 命令进行更改,类似地更改超链接颜色见小节 \ref{subsec:hyperlinks}。 +% \changes{v1.10}{2021/01/08}{可以自定义主题颜色。} +% \end{function} +% \item[multoc] 开启双栏目录,可与 \opt{onecolumn} 和 \opt{twocolumn} 选项配合出单栏正文、单栏目录,双栏正文、单栏目录,单栏正文、双栏目录和双栏正文、双栏目录四种方式 。 +% \item[withpart] 使章跟随每一部分编号,默认不跟随。 +% \item[perpart] 使脚注跟随每一部分编号,默认不跟随。 +% \item[perpage] 使脚注跟随每一页编号,默认不跟随。 +% \item[notomath] 使用 \opt{noto} 风格的数学字体,将会加载 \pkg{newtxmath} 宏包。 +% \item[rulewidth] 调整页眉、定理盒子以及代码框线条的粗细。 +% \item[uppercase] 使用 \tn{rightmark} 及 \tn{leftmark} 获取标题内容设置页眉页脚时英文是否大小写。 +% \item[figure-sep] 图片标题编号的连接符。 +% \item[table-sep] 表格标题编号的连接符。 +% \item[listing-sep] 代码标题编号的连接符。 +% \item[equation-sep] 公式编号的连接符。 +% \item[number-sep] 统一设置所有编号的连接符。 +%\end{optdesc} +% +%\subsection{超链接} +%\label{subsec:hyperlinks} +%\begin{function}[EXP,added = 2021-01-05,updated = 2021-01-08]{link/...,hyperlink,linkcolor,linktopage} +%\begin{syntax} +% 以下选项路径为 \tn{ctexset}\marg{link/...} +% hyperlink = <(edge)|various|none> +% linkcolor = <(fresh)|cutepink|skyblue|crimson> +% linktopage = +%\end{syntax} +%\changes{v1.10}{2021/01/08}{修复了 \opt{linktopage} 选项关闭时目录中标题编号无超链接的问题。} +%\end{function} +% +%\begin{optdesc} +% \item[hyperlink] \opt{edge} 使超链接为边框形式,\opt{various} 使超链接为彩色字体,有四种颜色风格。\opt{none} 关闭超链接边框与颜色,此时 \opt{linkcolor} 选项无效。 +% \item[linkcolor] 超链接颜色样式。 +% \begin{function}{ctex@link,ctex@url,ctex@cite} +% \begin{syntax} +% \tn{definecolor}\oarg{类型}\marg{名称}\marg{模式列表}\marg{参数列表} +% \end{syntax} +% 超链接颜色用到这三个颜色,可以使用 \tn{definecolor} 命令进行更改。 +% \changes{v1.10}{2021/01/08}{可以自定义超链接颜色。} +% \end{function} +% \item[linktopage] 将目录中的超链接置于页码上,默认是置于标题上。 +%\end{optdesc} +% +%\subsection{行距} +%\begin{function}[EXP,added = 2021-01-05,updated = 2021-02-13]{spread/...,line,table,math,caption,footnote} +%\begin{syntax} +% 以下选项路径为 \tn{ctexset}\marg{link/...} +% line = <(1.3)> +% table = <(1.05)> +% math = <(1.05)> +% caption = <(1)> +% footnote = <(1)> +%\end{syntax} +%行距因子用于设置各种行距倍数,只能是浮点数,不能带有长度单位。\tn{ctexset} 原有的行距选项 \opt{linespread} 失效。各行距既可在导言区全局设置也可正文中设置对后面生效,行距的意义为 +%\changes{v1.21}{2021/01/12}{增加脚注线间的距离选项。} +%\changes{v1.23t}{2021/02/09}{取消使用 \pkg{zhlineskip} 宏包设置数学间距。} +%\end{function} +% +%\begin{optdesc} +% \item[line] 正文行距。 +% \item[table] 表格行距。 +% \item[math] 数学环境行距,包括 \pkg{amsmath} 和 \pkg{mathtools} 宏包附带的环境,但并未加载 \pkg{mathtools} 宏包。 +% \item[caption] 图表代码标题行距。 +% \item[footnote] 脚注行距。 +%\end{optdesc} +% +%\subsection{其它字体} +%\begin{function}[EXP,added = 2021-01-08,updated = 2021-02-13]{elsefont/...,table-cap,figure-cap,listing-cap,footnote,marginpart} +%\begin{syntax} +% 以下选项路径为 \tn{ctexset}\marg{elsefont/...} +% table-cap = <\tn{sffamily}\tn{small}> +% figure-cap = <\tn{sffamily}\tn{small}> +% listing-cap = <\tn{sffamily}\tn{small}> +% footnote = <\tn{rmfamily}> +% marginpart = <\tn{rmfamily}\tn{footnotesize}> +%\end{syntax} +%\changes{v1.10}{2021/01/08}{加入自定义非正文字体选项。} +%\changes{v1.23t}{2021/02/08}{修复使用 \tn{zihao} 命令设置字体失效的问题。} +%\end{function} +% +%\begin{optdesc} +% \item[table-cap] 表格标题的字体设置。 +% \item[figure-cap] 图片标题的字体设置。 +% \item[listing-cap] 代码标题的字体设置。 +% \item[footnote] 脚注的字体设置,请不要使用字号命令。 +% \item[marginpar] 边注的字体设置。 +%\end{optdesc} +% +%\subsection{参考文献} +%\begin{function}[EXP,added = 2021-01-11,updated = 2021-03-15]{bibset/...,backend,bib-style,cite-style,bibfile} +%\begin{syntax} +% 以下选项路径为 \tn{ctexset}\marg{bibset/...} +% backend = <(bibtex)|biblatex> +% bib-style = <(numerical)|authoryear|其它格式> +% cite-style = <标注风格> +% bibfile = +%\end{syntax} +%\changes{v1.21}{2021/01/11}{增加 \opt{bibset} 选项,可以使用 \hologo{BibTeX} 或 \hologo{biber} 编译参考文献。} +%\changes{v1.23t}{2021/02/23}{使用 \opt{bibset} 选项时可设置标注风格。} +%\end{function} +% +%\begin{optdesc} +% \item[backend] 参考文献处理后端,默认用传统的 \hologo{BibTeX} 处理参考文献。 +% \item[bib-style] 参考文献格式为中国的参考文献推荐标准GB/T 7714-2015,有顺序编码制和著者-出版年制两种风格,理工科类一般使用顺序编码制,文科类一般使用著者-出版年制。若使用其它格式,使用 \hologo{BibTeX} 处理时需确保正确的 \opt{bst} 文件,使用 \hologo{biber} 处理可使用 \pkg{biblatex} 宏包支持的参考文献风格名称。 +% \item[cite-style] 标注参考文献的风格,\opt{backend = bibtex} 选项下可使用 \opt{super}(数字上标标注,默认)或 \opt{numbers}(数字标注)等 \pkg{natbib} 宏包带有的标注风格,\opt{backend = biblatex} 选项下可使用 \pkg{biblatex} 宏包支持的标注风格名称。 +% \item[bibfile] 参考文献的数据文件,使用 \hologo{biber} 处理时要带有 \opt{bib} 后缀,默认为一个以 \opt{refs.bib} 命名的文件。 +%\end{optdesc} +% +%\begin{function}[added = 2021-01-11,updated = 2021-03-15]{\printbibliography} +%\begin{syntax} +% \tn{printbibliography}\oarg{键值列表} +%\end{syntax} +%两种方式\textbf{均使用}此命令打印参考文献,不同处理后端此命令的键值列表不同。使用 \hologo{BibTeX} 处理时选项与小节 \ref{subsec:document command} 目录的选项相同,使用 \hologo{biber} 处理时常用的选项如下 +%\end{function} +% +%\begin{function}{heading,title} +%\begin{syntax} +% heading = +% title = <参考文献标题名> +%\end{syntax} +%\opt{heading} 为参考文献标题的处理方式,\opt{bibliography} 选项以 \opt{chapter} 级别输出参考文献,不加进目录,\opt{subbibliography} 选项以 \opt{section} 级别输出参考文献,不加进目录,\opt{bibintoc} 选项以 \opt{chapter} 级别输出参考文献,加进目录,\opt{subbibintoc} 选项以 \opt{section} 级别输出参考文献,加进目录。\opt{title} 选项覆盖由 \opt{heading} 选项提供的缺省标题名。除此之外其他支持选项可见 \pkg{biblatex} 宏包说明文档。 +%\end{function} +% +%\subsection{定理样式} +%\begin{function}[EXP,added = 2021-01-12,updated = 2021-03-13]{thmset/...,thmbox,numberwith,headpunct,bodyfont,notefont,headfont,headindent,spaceabove,spacebelow,spacepost} +%\begin{syntax} +% 以下选项路径为 \tn{ctexset}\marg{thmset/...} +% thmbox = +% numberwith = <(chapter)|section|其它环境|空置> +% headpunct = <(未设置)> +% bodyfont = <(未设置)> +% notefont = <(未设置)> +% headfont = <(\tn{color}\marg{ctex@emph}\tn{sffamily})> +% headindent = <(0\tn{ccwd})> +% spaceabove = <(0.75ex plus .1ex)> +% spacebelow = <(0.75ex plus .1ex)> +% spacepost = <(\tn{ccwd})> +%\end{syntax} +%\changes{v1.21}{2021/01/12}{增加配置定理环境样式的选项。} +%\end{function} +% +%\begin{optdesc} +% \item[thmbox] 开启定理及习题环境的盒子边框。 +% \item[numberwith] 定理编号跟随的计数器,默认跟随章的编号,也可以跟随其它定理环境的编号,当计数器增加时定理编号会从零开始,空置时不跟随其它计数器。 +% \item[headpunct] 定理标题后的标记。 +% \item[bodyfont] 定理内容部分的字体。 +% \item[notefont] 定理标题内容的字体。 +% \item[headfont] 定理类型标题名的字体。 +% \item[headindent] 定理标题的缩进,默认无缩进,可用 \tn{parindent} 命令设置为段落缩进。 +% \item[spaceabove] 定理环境前的间距。 +% \item[spacebelow] 定理环境后的间距。 +% \item[spacepost] 定理标题后与内容的间距。 +%\end{optdesc} +% +%\begin{function}[added = 2021-01-12,updated = 2021-03-13]{\newtheorem, \declaretheoremstyle} +%\begin{syntax} +% \tn{newtheorem}\oarg{键值列表}\marg{定理环境名} +% \tn{declaretheoremstyle}\oarg{键值列表}\marg{定理样式名} +%\end{syntax} +%\changes{v1.23t}{2021/03/12}{重新定义了新定理环境命令 \tn{newtheorem}。} +%\end{function} +% +%\begin{optdesc} +% \item[\tn{newtheorem}] 定义新的定理类环境,可选参数与 \pkg{thmtools} 宏包定理命令 \tn{declaretheorem} 的参数一致。常用的选项如下 +% \begin{description} +% \item[name] 定理的标题。默认值是环境的名称,并且首字母大写(英文标题)。 +% \item[numbered] 值为 \opt{no}、\opt{yes} 或 \opt{unless unique}。定理将被编号,而不是编号,或者只有在文档中多次出现时才被编号。 +% \item[numberlike] 定理将使用此计数器进行编号,通常这是另一个定理环境的名称。 +% \item[style] 用 \tn{declaretheoremstyle} 定义的定理样式的名称,定理将使用这种样式的设置。 +% \end{description} +% \item[\tn{declaretheoremstyle}] 定义新的定理样式,可选参数中除了包括上述定理样式选项,还包括 \tn{newtheorem} 的选项。 +%\end{optdesc} +% +%\subsubsection{新的定理样式} +%定理由 \pkg{thmtools} 设置,预置定理的样式为 \opt{mythm},上述定理样式选项将对这个定理样式生效。如果使用这个样式而只是增加新的定理名称,可以这样 +%\begin{ctexexam} +% \newtheorem[style = mythm,name = 定理名]{定理环境名} +%\end{ctexexam} +%若要给定理环境增加边框,可以如下进行设置 +%\begin{ctexexam} +% \tcolorboxenvironment{定理环境名}{thmsty} +%\end{ctexexam} +%定义一个新的定理样式可用于 \tn{newtheorem} 的 \opt{style} 选项。 +%\begin{ctexexam} +% \declaretheoremstyle[bodyfont = \rmfamily,spacepost = 0.5\ccwd]{定理样式名} +%\end{ctexexam} +% +%\subsection{页面边距} +%\begin{function}[EXP,added = 2021-01-13]{geoset/...,left,top,hmargin,textwidth,includehead,...} +%\begin{syntax} +% 以下选项路径为 \tn{ctexset}\marg{geoset/...} +% left = <长度> +% top = <长度> +% hmargin = \marg{左边距,右边距} +% textwidth = <长度> +% includehead = +%\end{syntax} +%\opt{geoset} 将选项交给 \pkg{geometry} 宏包接口命令 \tn{geometry} 处理,并且选项的键值列表与之相同,支持的参数可查阅宏包帮助文档。当在此设置页面大小时,会覆盖 \opt{paper} 选项的设置。 +%\begin{ctexexam} +% \ctexset +% { +% geoset = +% { +% top = 2.5cm, +% bottom = 2.5cm, +% left = 3.2cm, +% right = 3.2cm +% } +% } +%\end{ctexexam} +%\changes{v1.21}{2021/01/13}{增加配置页面边距的选项。} +%\end{function} +% +%\subsection{页眉页脚} +%\begin{function}[EXP,added = 2021-01-13,updated = 2021-03-14]{hdrset/...,head-foot,chap-mark,sec-mark,headrule,footrule,footnoterule} +%\begin{syntax} +% 以下选项路径为 \tn{ctexset}\marg{hdrset/...} +% head-foot = <页眉页脚中的内容> +% chap-mark = <\tn{chaptermark} 标志命令 \tn{markboth} 中的内容> +% sec-mark = <\tn{sectionmark} 标志命令 \tn{markright} 中的内容> +% headrule = <页眉横线格式> +% footrule = <页脚横线格式> +% footnoterule = <脚注横线格式> +%\end{syntax} +%\opt{hdrset} 设置的命令由 \pkg{fancyhdr} 宏包提供支持,\opt{headrule}、\opt{footrule} 和 \opt{footnoterule} 三个横线选项一般可以使用 \tn{hrule} width \meta{长度} height \meta{高度} 命令来绘制,脚注横线默认为空。当然,手动绘制横线时线条粗细选项 \opt{style/rulewidth} 会失效。 +%\changes{v1.21}{2021/01/11}{修复单面文档时页眉横线消失的问题。} +%\changes{v1.21}{2021/01/13}{增加配置页眉页脚的选项。} +%\changes{v1.23t}{2021/03/08}{优化页眉页脚设置,增加 \opt{chap-mark} 和 \opt{sec-mark} 选项。} +%\changes{v1.23t}{2021/03/14}{可以手动绘制页眉、页脚和脚注的横线。} +%\end{function} +% +%\begin{function}[added = 2021-01-13,updated = 2021-03-14]{,\easyhead,\easyfoot} +%\begin{syntax} +% \tn{easyhead}\oarg{位置}\marg{内容} +% \tn{easyfoot}\oarg{位置}\marg{内容} +%\end{syntax} +%命令 \tn{easyhead} 和 \tn{easyfoot} 的含义与 \tn{fancyhead} 和 \tn{fancyfoot} 相同,它们用于 \opt{head-foot} 选项中,设置的是一个名为 \opt{fancy} 的页面风格。\pkg{fancyhdr} 将页眉页脚分成了左中右和奇数页(odd)、偶数页(even)共12个部分,可选参数中E、O代表偶数、奇数,L、C、R代表左、中、右部分。单面打印时,含有偶数的选项无效。 +%\begin{ctexexam} +% \ctexset +% { +% hdrset = +% { +% head-foot = +% { +% \easyhead[ER]{\leftmark} +% \easyhead[OL]{\rightmark} +% \easyhead[EL,OR]{\textbf{\thepage}} +% }, +% sec-mark = {\CTEXthesection\hspace{0.5\ccwd}}, +% headrule = {\hrule width \textwidth height 1pt} +% } +% } +%\end{ctexexam} +%\end{function} +% +%\subsection{目录样式} +%\begin{function}[EXP,added = 2021-01-13,updated = 2021-01-15]{tocset/.../format,tocset/.../indent,tocset/.../rule,lists/lolskip,lists/belowoffset,tocset/belowoffset} +%\begin{syntax} +% format = <目录标题格式> +% indent = <目录标题左边缩进> +% rule = <目录引导线样式> +% lolskip = <(0.8pc)> +% lists/belowoffset = <(0pc)> +% belowoffset = <(-1pc)> +%\end{syntax} +%\opt{tocset} 将目录样式交给 \pkg{titletoc} 处理,预置了 \opt{part}、\opt{chapter}、\opt{section}、\opt{subsection} 和 \opt{lists} 五种级别的目录标题,键值列表中的...代表它们。\opt{lists} 为图片、表格和代码目录格式的级别。 +% +%\opt{lolskip} 是代码目录中章之间的代码标题的距离,使用刚性间距,与\CTeX 的 \opt{lotskip} 和 \opt{lofskip} 类似,它们的值均默认0.8pc。\opt{belowoffset} 选项为目录总标题 \tn{contentsname} 后的间距补偿,一般为负值,用于抵消 \opt{format} 中设置的间距。\opt{lists} 中的 \opt{belowoffset} 意义类似,但是一般为正值,在 \opt{lolskip = 0pc} 时使用。建议 \opt{lolskip + lists/format/addvspace = -belowoffset}。 +%\changes{v1.21}{2021/01/13}{增加配置目录样式的选项。} +%\end{function} +% +%\begin{function}[added = 2021-01-13,updated = 2021-01-15]{\tocrule} +%\begin{syntax} +% \tn{tocrule} = \oarg{引导点间距|(0.7pc)}\oarg{引导点大小|(1.2)}\marg{引导点}\oarg{页码格式} +%\end{syntax} +%\tn{tocrule} 命令生成目录引导线,需要在 \opt{rule} 选项中使用,其中引导线间距需带有长度单位,引导点大小不带单位,为引导点符号正常大小的倍数,引导点一般为英文句号或 \tn{cdot} 中心点符号。页码格式的内容位于页码前面,可以设置页码字体、距离。 +%\begin{ctexexam} +% \ctexset +% { +% tocset = +% { +% chapter = +% { +% format = \addvspace{8pt}\large, +% indent = 1.5\ccwd, +% rule = \tocrule[0.6pc][1.1]{.}[\zihao{5}] +% } +% } +% } +%\end{ctexexam} +%\end{function} +% +%\section{常用环境} +% +%\subsection{公式} +%\begin{function}[added = 2021-01-05]{equation,multline,gather,align} +%\begin{syntax} +% \tn{begin}\marg{环境名} +% \tn{item} <行间公式> +% \tn{end}\marg{环境名} +%\end{syntax} +%\opt{amsmath} 宏包提供了一系列数学环境,它们可以排布各种对齐或不对齐的公式组。\opt{multline} 环境用于一行无法放下的长公式,\opt{gather} 环境用于每行居中的公式组,\opt{align} 环境用于多列对齐的公式组。 +%\end{function} +% +%\subsection{列表} +%\begin{function}[added = 2021-01-05]{enumerate,itemize,description} +%\begin{syntax} +% \tn{begin}\marg{环境名}\oarg{键值列表} +% \tn{item} <列表内容> +% \tn{end}\marg{环境名} +%\end{syntax} +%\pkg{enumitem} 宏包为系统预置的列表环境提供了更灵活的标签以及间距的控制,可使用 \tn{setlist} 命令设置原有的三种列表格式。已设置默认格式,若自定义标签可例如 +%\begin{ctexexam} +% \begin{enumerate}[label = \arabic*(a),leftmargin = 1cm,resume] +% \begin{itemize}[label = \textbullet] +% \begin{description}[font = \sffamily\bfseries,style = nextline] +%\end{ctexexam} +%\end{function} +% +%\subsubsection{排序列表} +%\label{subsec:sort list} +%使用 \opt{enumerate} 环境可创建排序列表,使用 \opt{enumerate*} 环境产生行内部列表,可以使用\textbf{A、a、I、i和1}作为可选项为 \opt{enumerate} 与 \opt{enumerate*} 格式化标签。若生成\textbf{Item I、Item II、Item III}格式可以这样 +%\begin{ctexexam} +% \begin{enumerate*}[(a)] +% \begin{enumerate}[\bfseries{Item} I] +%\end{ctexexam} +% +%\subsubsection{常规列表} +%使用 \opt{itemize} 环境可创建不计数列表,列表环境中若换行不缩进,若在列表中分段后则缩进两字符。 \opt{itemize*} 为行内常规列表,也提供一个可选参数。 +% +%用$\star$取代默认的符号 +%\begin{ctexexam} +% \begin{itemize*}[$\star$] +% \begin{itemize}[$\star$] +%\end{ctexexam} +% +%\subsubsection{主题列表} +%使用 \opt{description} 环境可创建带有主题词的列表。 +%\begin{ctexexam} +% \begin{description} +% \item[主题一] 内容一 +% \item[主题二] 内容二 +% \end{description} +%\end{ctexexam} +% +%\subsection{定理} +%\begin{function}[added = 2021-01-05,updated = 2021-01-08]{theorem,definition,lemma,corollary,proposition,example,remark,proof} +%\begin{syntax} +% \tn{begin}\marg{环境名} +% <定理内容> +% \tn{end}\marg{环境名} +%\end{syntax} +%这些是预置的定理环境,定理环境除了注和证明跟随章编号并可带有边框,边框和习题标题盒子可使用 \opt{thmbox = false} 开启,证明末尾会自动添加证明结束符。 +%\end{function} +% +%\subsection{习题} +%\label{subsec:exercise} +%\begin{function}[added = 2021-01-05,updated = 2021-03-13]{exercise} +%\begin{syntax} +% \tn{begin}\marg{exercise}\oarg{颜色名|(LightYellow)}\oarg{编号|(1.)}\oarg{标题|(习题)}\oarg{配置选项} +% \tn{item} <习题内容> +% \tn{end}\marg{exercise} +%\end{syntax} +%习题环境 \opt{exercise} 的标题紧接上一节编号并加入目录与页眉,当使用星号环境时不进行编号。三个可选参数中颜色为自定义或 \pkg{xcolor} 包含的颜色名称,正文编号格式与小节 \ref{subsec:sort list} 排序列表相同,标题名默认为摘要,参数只能\textbf{从右往左}省略。 +%\begin{ctexexam} +% \begin{exercise}[LightYellow][1.][习题] +% \item 习题内容 +% \item 习题内容 +% \end{exercise} +%\end{ctexexam} +%\changes{v1.23t}{2021/02/08}{增加准确的习题盒子标题目录锚点。} +%\end{function} +% +%\subsection{盒子} +%盒子以及小节 \ref{subsec:exercise} 中 \opt{exercise} 环境配置的选项由 \pkg{tcolorbox} 提供支持,具体选项可见宏包文档的 Option Keys 一节,可以进行边距、字体及背景颜色等各种个性化设置,一些配置会覆盖之前预置的设置。 +% +%\subsubsection{摘要盒子} +%\begin{function}[added = 2021-01-05,updated = 2021-03-13]{outline} +%\begin{syntax} +% \tn{begin}\marg{outline}\oarg{标题名称}\oarg{配置选项} +% \tn{item} <摘要内容> +% \tn{end}\marg{outline} +%\end{syntax} +%摘要盒子可用于章前摘要,它的标题是可选参数,默认标题是摘要。 +%\begin{ctexexam} +% \begin{outline}[标题名称] +% \item 摘要内容 +% \item 摘要内容 +% \end{outline} +%\end{ctexexam} +%\end{function} +% +%\subsubsection{段落盒子} +%\begin{function}[added = 2021-01-05,updated = 2021-03-13]{mybox} +%\begin{syntax} +% \tn{begin}\marg{mybox}\oarg{段落标题}\oarg{颜色名|(MintCream)}\oarg{配置选项} +% <盒子内容> +% \tn{end}\marg{mybox} +%\end{syntax} +%环境 \opt{mybox} 创建一个段落盒子,可以添加可选参数的标题,否则无标题框。当使用带有星号的环境时 \oarg{颜色名} 选项生效,可以自定义背景颜色,否则无背景颜色。 +%\begin{ctexexam} +% \begin{mybox}*[段落标题][MintCream] +% 盒子内容 +% \tcblower % 盒子上下部分分界线 +% 盒子内容 +% \end{mybox} +%\end{ctexexam} +%\end{function} +% +%\subsubsection{行内盒子} +%\begin{function}[added = 2021-03-13]{\concise,\fuzzy} +%\begin{syntax} +% \tn{concise}\oarg{颜色名}\marg{内容}\oarg{配置选项} +% \tn{fuzzy}\oarg{颜色名}\marg{内容}\oarg{配置选项} +%\end{syntax} +%设置了两个参数选项相同的行内盒子,盒子 \opt{concise} 为抄录盒子有三个参数,行内盒子内容是必选参数其他可选。盒子 \opt{fuzzy} 也是抄录盒子,具有模糊边缘类似高亮的效果。 +%\end{function} +% +%\section{其它用法} +% +%\subsection{代码} +%\begin{function}[added = 2021-01-05]{\lstinline,lstlisting,\listoflistings} +%\begin{syntax} +% \tn{lstinline}\oarg{键值列表}\marg{行内代码} +% \tn{begin}\marg{lstlisting}\oarg{键值列表} +% <行间代码> +% \tn{end}\marg{lstlisting} +%\end{syntax} +%加载 \pkg{listings} 宏包以对代码格式进行高度定制,代码样式可使用 \tn{lstset} 命令设置,\tn{listoflistings} 命令用于输出代码目录。 +%\end{function} +% +%\subsection{物理量} +%\begin{function}[added = 2021-01-05,updated = 2021-02-23]{\num,\si,\SI,\SIrange} +%\begin{syntax} +% \tn{num}\oarg{选项}\marg{数字} +% \tn{si}\oarg{选项}\marg{单位} +% \tn{SI}\oarg{选项}\marg{数字}\oarg{前缀}\marg{单位} +% \tn{SIrange}\oarg{选项}\marg{数字1}\marg{数字2}\marg{单位} +%\end{syntax} +%\pkg{siunitx} 宏包的 \tn{num} 命令可以输出科学计数法,\tn{si} 命令支持数学模式,可以代替数学行内公式输入,而 \tn{SI} 命令可用来输出带有单位的量,\tn{SIrange} 可以输出带有范围和单位的量。 +%\begin{ctexexam} +% \num{-21x.3e5} +% \si{mL.min^{-1}} +% \SI{5}{\mole} +% \SIrange[unit-color = green]{1.5}{4}{kg} +%\end{ctexexam} +%\end{function} +% +%\subsection{化学式} +%\begin{function}[added = 2021-01-05]{\ch,\chemfig} +%\begin{syntax} +% \tn{ch}\oarg{选项}\marg{输入} +% \tn{chemfig}\oarg{键值列表}\marg{分子代码} +%\end{syntax} +%除了以普通公式的方式,化学式还可用 \pkg{chemformula} 实现,无机化学式使用 \tn{ch} 命令书写。有机化学式推荐使用 \pkg{chemfig}(并未载入)的 \tn{chemfig} 命令完成。 +%\end{function} +% +%\subsection{引用} +%\begin{function}[added = 2021-01-05]{\cref} +% \begin{syntax} +% \tn{cref}\marg{标签} +% \end{syntax} +%使用 \pkg{cleveref} 宏包的 \tn{cref} 命令进行引用,将会自动检测环境并添加相应的前缀。 +%\end{function} +% +%\subsubsection{索引} +%\begin{function}[added = 2021-01-05]{\index,\printindex} +%\begin{syntax} +% \tn{index}\marg{标签} +% \tn{printindex}\oarg{索引名} +%\end{syntax} +%使用 \pkg{imakeidx} 生成索引,\tn{printindex} 命令用于生成索引目录。仅做了简单的设置如将索引设为双栏并加入目录,其他选项可另外配置。 +%\end{function} +% +%\subsubsection{自定义脚注} +%\begin{function}[added = 2021-01-05]{\Footnote,\Footnotetext,\Footnotemark} +%\begin{syntax} +% \tn{Footnote}\marg{标记}\marg{插入文本} +% \tn{Footnotetext}\marg{标记}\marg{插入文本} +% \tn{Footnotemark}\marg{标记} +%\end{syntax} +%自定义标记且不影响正常编号的脚注命令。 +%\begin{ctexexam} +% \Footnote{*}{这是可以自定义标记的脚注。} +%\end{ctexexam} +%\end{function} +% +%\subsubsection{边注} +%\begin{function}[added = 2021-01-05]{\marginnote} +%\begin{syntax} +% \tn{marginnote}\oarg{左文本}\marg{右文本}\oarg{垂直偏移} +%\end{syntax} +%命令 \tn{marginnote} 可以生成简单的边注,如果只给定了 \meta{右文本},那么边注在奇偶数页文字相同。如果同时给定了 \meta{左文本},则偶数页使用 \meta{左文本} 的文字。 +%\end{function} +% +%\subsection{插入文档} +%\begin{function}[added = 2021-03-14]{\includepdf} +%\begin{syntax} +% \tn{includepdf}\oarg{键值列表}\marg{文档名} +%\end{syntax} +%该命令由 \pkg{pdfpages} 提供,将其他 pdf 文档插入当前文档,比如插入封面,可以指定插入页数、逻辑页和横向等,详情查看宏包文档。 +%\end{function} +% +%\subsection{横向页面} +%\begin{function}[added = 2021-03-14]{sidewaysfigure,sidewaystable} +%\begin{syntax} +% \tn{begin}\marg{环境名}\oarg{位置} +% <插入图片或表格> +% \tn{end}\marg{环境名} +%\end{syntax} +%该环境由 \pkg{rotfloat} 提供,用于横向插入宽大的图片或表格,用法与 \opt{figure} 和 \opt{table} 环境类似。 +%\end{function} +% +%\subsection{指定行距的段落} +%\begin{function}[added = 2021-03-14]{spacing} +%\begin{syntax} +% \tn{begin}\marg{spacing}\marg{浮点数} +% <段落内容> +% \tn{end}\marg{spacing} +%\end{syntax} +%该环境由 \pkg{setspace} 提供,可以指定环境内段落的行距,使用浮点数控制行距倍数。 +%\end{function} +%\end{documentation} +% +%\StopEventually{} +%<*class> +\RequirePackage{l3keys2e} +\ProvidesExplClass{easybook}{2021/03/17}{1.23t}{} + +\cs_generate_variant:Nn \keys_define:nn {nx} +\cs_generate_variant:Nn \int_to_arabic:n {v} +\cs_generate_variant:Nn \dim_add:Nn {NV} +\cs_new_protected:Npn \__ctex_define:nn #1 + {\keys_define:nn {ctex/#1}} +\cs_new_protected:Npn \__put_ctexbook:n #1 + {\PassOptionsToClass{#1}{ctexbook}} +\cs_new_protected:Npn \__patch_cmd:Nnn #1#2#3 + {\ctex_patch_cmd_once:NnnnTF #1{}{#2}{#3}{}{\ctex_patch_failure:N #1}} +\cs_new_protected:Npn \__appto_cmd:Nn #1#2 + {\ctex_appto_cmd:NnnTF #1{}{#2}{}{\ctex_patch_failure:N #1}} + +\bool_set_false:N \l__draft_bool +\bool_set_false:N \l__newline_bool +\bool_set_false:N \l__font_noto_bool +\bool_set_true:N \l__zhtitle_bool +\bool_set_true:N \l__lang_chinese_bool +\bool_set_true:N \l__page_twoside_bool +\bool_set_true:N \l__class_book_bool +\clist_new:N \g__options_clist + +\keys_define:nn {easybook} + { + draft .code:n = {\bool_set_true:N \l__draft_bool}, + newline .code:n = {\bool_set_true:N \l__newline_bool}, + entitle .code:n = {\bool_set_false:N \l__zhtitle_bool}, + english .code:n = {\bool_set_false:N \l__lang_chinese_bool}, + enstyle .meta:n = {newline,entitle,english}, + + font .choice:, + font .value_required:n = true, + font/overleaf .code:n = {}, + font/adobe .code:n = {\__put_ctexbook:n {fontset = #1}}, + font/founder .code:n = {\__put_ctexbook:n {fontset = #1}}, + font/mac .code:n = {\__put_ctexbook:n {fontset = #1}}, + font/windows .code:n = {\__put_ctexbook:n {fontset = #1}}, + font/linux .code:n = {\__put_ctexbook:n {fontset = ubuntu}}, + font/none .code:n = {\__put_ctexbook:n {fontset = #1}}, + font/noto .code:n = + { + \bool_set_true:N \l__font_noto_bool + \__put_ctexbook:n {fontset = none} + }, + font .initial:n = overleaf, + + paper .choice:, + paper .value_required:n = true, + paper/unknown .code:n = {\PassOptionsToPackage{#1}{geometry}}, + paper .initial:n = a4paper, + + oneside .value_forbidden:n = true, + twoside .value_forbidden:n = true, + oneside .code:n = + { + \bool_set_false:N \l__page_twoside_bool + \__put_ctexbook:n {oneside} + }, + + class .choice:, + class .value_required:n = true, + class/book .code:n = {}, + class/article .code:n = {\bool_set_false:N \l__class_book_bool}, + class .initial:n = book, + + unknown .code:n = + {\clist_gput_right:No \g__options_clist{\CurrentOption}} + } + +\ProcessKeysOptions{easybook} + +\bool_if:NTF \l__lang_chinese_bool + {\__put_ctexbook:n {scheme = chinese}} + {\__put_ctexbook:n {scheme = plain}} + +\clist_map_inline:nn + { + {svgnames}{xcolor}, + {hang,stable}{footmisc}, + {normalem}{ulem}, + {protrusion = false}{microtype}, + {shortlabels,inline}{enumitem}, + {most}{tcolorbox}, + {xindy}{imakeidx}, + {CJKmath = true}{xeCJK}, + {no-math}{fontspec} + }{\PassOptionsToPackage#1} +\__put_ctexbook:n {\g__options_clist} +\LoadClass[UTF8]{ctexbook} + +\bool_new:N \l__multoc_bool +\bool_new:N \l__chap_withpart_bool +\bool_new:N \l__foot_perpart_bool +\bool_new:N \l__foot_perpage_bool +\bool_new:N \l__notomath_bool +\bool_new:N \l__uppercase_bool +\tl_new:N \g__config_tl + +\ctex_define:n + { + style .meta:nn = {ctex/style}{#1}, + link .meta:nn = {ctex/link}{#1}, + spread .meta:nn = {ctex/spread}{#1}, + elsefont .meta:nn = {ctex/elsefont}{#1}, + bibset .meta:nn = {ctex/bibset}{#1}, + thmset .meta:nn = {ctex/thmset}{#1}, + geoset .meta:nn = {ctex/geoset}{#1}, + hdrset .meta:nn = {ctex/hdrset}{#1}, + tocset .meta:nn = {ctex/tocset}{#1}, + config .tl_set:N = \g__config_tl, + lstlistlistingname .tl_set:N = \lstlistlistingname, + lstlistingname .tl_set:N = \lstlistingname + } +\__ctex_define:nn {style} + { + multoc .bool_set:N = \l__multoc_bool, + multoc .default:n = true, + withpart .bool_set:N = \l__chap_withpart_bool, + withpart .default:n = true, + withpart .initial:n = false, + perpart .bool_set:N = \l__foot_perpart_bool, + perpart .default:n = true, + perpart .initial:n = false, + perpage .bool_set:N = \l__foot_perpage_bool, + perpage .default:n = true, + perpage .initial:n = false, + notomath .bool_set:N = \l__notomath_bool, + notomath .default:n = true, + notomath .initial:n = true, + rulewidth .dim_set:N = \l__rule_width_dim, + rulewidth .initial:n = 0.75pt, + uppercase .bool_set:N = \l__uppercase_bool, + uppercase .default:n = true, + uppercase .initial:n = true, + figure-sep .tl_set:N = \l__figure_separator_tl, + table-sep .tl_set:N = \l__table_separator_tl, + listing-sep .tl_set:N = \l__lstlisting_separator_tl, + equation-sep .tl_set:N = \l__equation_separator_tl, + number-sep .meta:n = + { + figure-sep = {#1},table-sep = {#1}, + listing-sep = {#1},equation-sep = {#1} + }, + number-sep .initial:n = {.} + } + +\RequirePackage + { + xcolor, + pdfpages, + footmisc,setspace, + amsmath,amsthm,thmtools,cases, + chemformula,siunitx,ulem, + geometry,marginnote,nccfoots, + rotfloat,graphicx, + fancyhdr,titletoc, + caption,bicaption,subcaption, + microtype,zhlipsum,pifont, + tabularx,multirow,makecell,booktabs, + paralist,tasks,enumitem, + tcolorbox, + imakeidx + } +\RequirePackage[ + lang = {chinese-utf8}, + type = {CC}, + modifier = {by}, + version = {4.0} + ]{doclicense} +\ctex_at_end_preamble:n + { + \bool_if:NT \l__notomath_bool + { + \RequirePackage[noto,upint]{newtxmath} + \RequirePackage{bm} + } + \tl_if_empty:NF \g__config_tl{\file_input:n {\g__config_tl}} + } + +\sys_if_engine_xetex:TF + { + \cs_new_eq:NN \__set_family:nnn \xeCJK_set_family:nnn + \cs_new_eq:NN \__switch_family:n \xeCJK_switch_family:n + }{ + \cs_new_eq:NN \__set_family:nnn \ctex_ltj_set_family:nnn + \cs_new_eq:NN \__switch_family:n \ctex_ltj_switch_family:n + } + +\cs_new_protected:Npn \__setmainfont:nn #1#2 + {\__fontspec_main_setmainfont:nn {#2}{#1}} +\cs_new_protected:Npn \__setsansfont:nn #1#2 + {\__fontspec_main_setsansfont:nn {#2}{#1}} +\cs_new_protected:Npn \__setmonofont:nn #1#2 + {\__fontspec_main_setmonofont:nn {#2}{#1}} +\cs_new_protected:Npn \__setCJKmainfont:nn #1#2 + {\__set_family:nnn {\CJKrmdefault}{#2}{#1}} +\cs_new_protected:Npn \__setCJKsansfont:nn #1#2 + {\__set_family:nnn {\CJKsfdefault}{#2}{#1}} +\cs_new_protected:Npn \__setCJKmonofont:nn #1#2 + {\__set_family:nnn {\CJKttdefault}{#2}{#1}} +\cs_new_protected:Npn \__set_zhfont_songti:nn #1#2 + {\__set_family:nnn {songti}{#2}{#1}} +\cs_new_protected:Npn \__set_zhfont_heiti:nn #1#2 + {\__set_family:nnn {heiti}{#2}{#1}} +\cs_new_protected:Npn \__set_zhfont_kaishu:nn #1#2 + {\__set_family:nnn {kaishu}{#2}{#1}} +\cs_new_protected:Npn \__set_zhfont_fangsong:nn #1#2 + {\__set_family:nnn {fangsong}{#2}{#1}} + +\tl_const:Nn \__option_zhfont_tl + {UprightFont = *,AutoFakeBold = 1.5,ItalicFont = *} +\cs_new_protected:Npx \__setCJKmainfont:n #1 + {\__setCJKmainfont:nn {#1}{\__option_zhfont_tl}} +\cs_new_protected:Npx \__setCJKsansfont:n #1 + {\__setCJKsansfont:nn {#1}{\__option_zhfont_tl}} +\cs_new_protected:Npx \__setCJKmonofont:n #1 + {\__setCJKmonofont:nn {#1}{\__option_zhfont_tl}} +\cs_new_protected:Npx \__set_zhfont_songti:n #1 + {\__set_zhfont_songti:nn {#1}{\__option_zhfont_tl}} +\cs_new_protected:Npx \__set_zhfont_heiti:n #1 + {\__set_zhfont_heiti:nn {#1}{\__option_zhfont_tl}} +\cs_new_protected:Npx \__set_zhfont_kaishu:n #1 + {\__set_zhfont_kaishu:nn {#1}{\__option_zhfont_tl}} +\cs_new_protected:Npx \__set_zhfont_fangsong:n #1 + {\__set_zhfont_fangsong:nn {#1}{\__option_zhfont_tl}} + +\bool_if:NT \l__font_noto_bool + { + \__setmainfont:nn {NotoSerif} + { + Extension = .ttf, + UprightFont = *-Regular, + BoldFont = *-Bold, + ItalicFont = *-Italic + } + \__setsansfont:nn {NotoSans} + { + Extension = .ttf, + UprightFont = *-Regular, + BoldFont = *-Bold, + ItalicFont = *-Italic + } + \__setmonofont:nn {NotoSansMono} + { + Extension = .ttf, + UprightFont = *-Regular, + BoldFont = *-Bold + } + \__setCJKmainfont:nn {FZShuSong-Z01S} + { + UprightFont = *, + BoldFont = FZHei-B01S, + ItalicFont = FZKai-Z03S + } + \__setCJKsansfont:n {FZHei-B01S} + \__setCJKmonofont:n {FZFangSong-Z02S} + \__set_zhfont_songti:n {FZShuSong-Z01S} + \__set_zhfont_heiti:n {FZHei-B01S} + \__set_zhfont_kaishu:n {FZKai-Z03S} + \__set_zhfont_fangsong:n {FZFangSong-Z02S} + \cs_new_protected:Npn \songti{\__switch_family:n {songti}} + \cs_new_protected:Npn \heiti{\__switch_family:n {heiti}} + \cs_new_protected:Npn \kaishu{\__switch_family:n {kaishu}} + \cs_new_protected:Npn \fangsong{\__switch_family:n {fangsong}} + } +\cs_if_exist:NF \kaishu{\cs_gset_eq:NN \kaishu\normalfont} + +\includepdfset{fitpaper = true} +\geometry + { + vmargin = 2.54cm, + hmargin = 3.17cm, + columnsep = 2\ccwd, + headheight = 2.04cm, + headsep = 0.5cm, + footskip = 0.79cm, + footnotesep = 0.5cm, + marginparsep = 8pt, + marginparwidth = 2.54cm + } +\clist_new:N \g__geometry_clist +\__ctex_define:nn {geoset} + { + unknown .code:n = + { + \clist_gput_right:Nx \g__geometry_clist + { + \l_keys_key_str + \tl_if_empty:NF \l_keys_value_tl{ = {#1}} + } + } + } + +\cs_gset:Npn \cleardoublepage + { + \clearpage + \bool_if:NT \l__page_twoside_bool + { + \int_if_odd:nF \c@page + {\hbox:n {}\thispagestyle{empty}\clearpage} + } + } +\RenewDocumentCommand{\frontmatter}{sO{Roman}} + { + \IfBooleanTF{#1}{\clearpage}{\cleardoublepage} + \@mainmatterfalse + \pagenumbering{#2} + } +\RenewDocumentCommand{\mainmatter}{s} + { + \IfBooleanTF{#1}{\clearpage}{\cleardoublepage} + \@mainmattertrue + \pagenumbering{arabic} + } +\cs_gset_eq:NN \easyhead\fancyhead +\cs_gset_eq:NN \easyfoot\fancyfoot +\cs_gset_eq:NN \easypagestyle\fancypagestyle +\__ctex_define:nn {hdrset} + { + head-foot .tl_set:N = \l__fancyhf_content_tl, + head-foot .initial:n = + { + \easyhead[EC]{\color{ctex@frame}\kaishu\leftmark} + \easyhead[OC]{\color{ctex@frame}\kaishu\rightmark} + \easyhead[EL,OR]{\color{ctex@frame}\thepage} + }, + chap-mark .tl_set:N = \l__fancyhf_chap_mark_tl, + chap-mark .initial:n = + { + \int_compare:nT {\c@secnumdepth > -1} + { + \if@mainmatter + \ifodd\CTEX@chapter@numbering + \CTEXthechapter\hspace{\ccwd} + \fi + \fi + } + }, + sec-mark .tl_set:N = \l__fancyhf_sec_mark_tl, + sec-mark .initial:n = + { + \int_compare:nT {\c@secnumdepth > 0} + { + \ifodd\CTEX@section@numbering + \CTEXthesection\hspace{0.5\ccwd} + \fi + } + }, + headrule .tl_gset:N = \headrule, + headrule .initial:n = + { + \color{ctex@frame}\vspace{1.5pt} + \hrule width \textwidth height \l__rule_width_dim + }, + footrule .tl_gset:N = \footrule, + footrule .initial:n = {}, + footnoterule .tl_gset:N = \footnoterule, + footnoterule .initial:n = + { + \color{ctex@frame} + \hrule width 0.35\columnwidth height \l__rule_width_dim + \vspace*{2.6pt}\color{black} + } + } +\ctex_at_end_preamble:n + { + \exp_args:NV \geometry\g__geometry_clist + \pagestyle{fancy} + \fancyhf{} + \bool_if:NTF \l__page_twoside_bool + { + \cs_gset:Npn \chaptermark#1 + { + \markboth + { + \bool_if:NTF \l__uppercase_bool + {\text_uppercase:n {\l__fancyhf_chap_mark_tl#1}} + {\text_titlecase_first:n {\l__fancyhf_chap_mark_tl#1}} + }{ + \bool_if:NTF \l__uppercase_bool + {\text_uppercase:n {\l__fancyhf_chap_mark_tl#1}} + {\text_titlecase_first:n {\l__fancyhf_chap_mark_tl#1}} + } + } + \l__fancyhf_content_tl + \cs_gset_eq:NN \ps@plain\ps@empty + }{ + \cs_gset:Npn \chaptermark#1 + { + \markboth + { + \bool_if:NTF \l__uppercase_bool + {\text_uppercase:n {\l__fancyhf_chap_mark_tl#1}} + {\text_titlecase_first:n {\l__fancyhf_chap_mark_tl#1}} + }{} + } + \l__fancyhf_content_tl + \cs_gset_eq:NN \ps@plain\ps@empty + } + \cs_gset:Npn \sectionmark#1 + { + \markright + { + \bool_if:NTF \l__uppercase_bool + {\text_uppercase:n {\l__fancyhf_sec_mark_tl#1}} + {\text_titlecase_first:n {\l__fancyhf_sec_mark_tl#1}} + } + } + \bool_if:NT \l__draft_bool + { + \bool_if:NTF \l__page_twoside_bool + {\easyfoot[C]{\color{gray!60}\sffamily\today}} + {\easyhead[L]{\color{gray!60}\sffamily\today}} + \geometry{showframe} + } + } + +\ctex_define:n + { + tocset/part .meta:nn = {ctex/tocset/part}{#1}, + tocset/chapter .meta:nn = {ctex/tocset/chapter}{#1}, + tocset/section .meta:nn = {ctex/tocset/section}{#1}, + tocset/subsection .meta:nn = {ctex/tocset/subsection}{#1}, + tocset/list .meta:nn = {ctex/tocset/list}{#1}, + } +\__ctex_define:nn {tocset} + { + part/format .tl_set:N = \l__toc_part_format_tl, + part/format .initial:n = \addvspace{1pc}\sffamily\large, + part/indent .tl_set:N = \l__toc_part_indent_tl, + part/indent .initial:n = 0\ccwd, + part/rule .tl_set:N = \l__toc_part_rule_tl, + part/rule .initial:n = \tocrule{}[\bfseries], + + chapter/format .tl_set:N = \l__toc_chapter_format_tl, + chapter/format .initial:n = \addvspace{1pc}\sffamily\large, + chapter/indent .tl_set:N = \l__toc_chapter_indent_tl, + chapter/indent .initial:n = 0\ccwd, + chapter/rule .tl_set:N = \l__toc_chapter_rule_tl, + chapter/rule .initial:n = \tocrule{$\cdot$}[\bfseries], + + section/format .tl_set:N = \l__toc_section_format_tl, + section/format .initial:n = \addvspace{0.35pc}, + section/indent .tl_set:N = \l__toc_section_indent_tl, + section/indent .initial:n = 1.5\ccwd, + section/rule .tl_set:N = \l__toc_section_rule_tl, + section/rule .initial:n = \tocrule{$\cdot$}, + + subsection/format .tl_set:N = \l__toc_subsection_format_tl, + subsection/format .initial:n = \addvspace{0.35pc}, + subsection/indent .tl_set:N = \l__toc_subsection_indent_tl, + subsection/indent .initial:n = 3.8\ccwd, + subsection/rule .tl_set:N = \l__toc_subsection_rule_tl, + subsection/rule .initial:n = \tocrule{$\cdot$}, + + lists/format .tl_set:N = \l__toc_lists_format_tl, + lists/format .initial:n = \addvspace{0.2pc}, + lists/indent .tl_set:N = \l__toc_lists_indent_tl, + lists/indent .initial:n = 0\ccwd, + lists/rule .tl_set:N = \l__toc_lists_rule_tl, + lists/rule .initial:n = \tocrule{$\cdot$}, + lists/lolskip .dim_set:N = \l__toc_lolskip_dim, + lists/lolskip .initial:n = 0.8pc, + lists/belowoffset .dim_set:N = \l__toc_listsoffset_dim, + lists/belowoffset .initial:n = 0pc, + + belowoffset .dim_set:N = \l__toc_offset_dim, + belowoffset .initial:n = -1pc + } + +\NewDocumentCommand{\tocrule}{O{0.7pc}O{1.2}mO{}} + { + \normalsize\normalfont + \titlerule*[#1]{\scalebox{#2}{#3}}#4\contentspage + } +\cs_new_protected:Npn \__titlecontents_set:nn #1#2 + { + \titlecontents{#1} + [\use:c {l__toc_#2_indent_tl}] + {\use:c {l__toc_#2_format_tl}}{}{} + {\use:c {l__toc_#2_rule_tl}} + } +\contentsuse{lstlisting}{lol} +\clist_map_inline:nn + { + {part}{part}, + {chapter}{chapter}, + {section}{section}, + {subsection}{subsection}, + {figure}{lists}, + {table}{lists}, + {lstlisting}{lists} + }{\__titlecontents_set:nn #1} +\ctex_patch_cmd:Nnn \caption@@@addcontentsline + {\addcontentsline{#1}{#2}{\protect\numberline{#3}{#4}}} + {\addcontentsline{#1}{#2}{#3\hspace{\ccwd}#4}} +\ctex_patch_cmd:Nnn \lst@MakeCaption + { + \addcontentsline{lol}{lstlisting} + {\protect\numberline{\thelstlisting}\lst@@caption} + }{ + \addcontentsline{lol}{lstlisting} + {\thelstlisting\hspace{\ccwd}\lst@@caption} + } +\__appto_cmd:Nn \@chapter + { + \addtocontents{lol} + {\protect\addvspace{\dim_use:N \l__toc_lolskip_dim}} + } + +\cs_new_protected:Npn \__markboth:n #1 + { + \bool_if:NTF \l__page_twoside_bool + { + \markboth + { + \bool_if:NTF \l__uppercase_bool + {\text_uppercase:n {#1}} + {\text_titlecase_first:n {#1}} + }{ + \bool_if:NTF \l__uppercase_bool + {\text_uppercase:n {#1}} + {\text_titlecase_first:n {#1}} + } + }{ + \markboth + { + \bool_if:NTF \l__uppercase_bool + {\text_uppercase:n {#1}} + {\text_titlecase_first:n {#1}} + }{} + } + } + +\tl_set:Nn \l__toc_type_tl{book} +\keys_define:nn {listoc} + { + article .code:n = \tl_set:Nn \l__toc_type_tl{article}, + book .code:n = {}, + multoc .bool_set:N = \l__multoc_bool, + multoc .default:n = true, + multoc .initial:n = false + } + +\cs_new_protected:Npn \__title_mark_intoc:n #1 + { + \tl_if_eq:NnTF \l__toc_type_tl{book} + { + \chapter*{\phantomsection#1} + \CTEX@addtocline{chapter}{#1} + }{ + \section*{\phantomsection#1} + \CTEX@addtocline{section}{#1} + } + \__markboth:n {#1} + } +\cs_new_protected:Npn \__title_mark:n #1 + { + \tl_if_eq:NnTF \l__toc_type_tl{book} + {\chapter*{\phantomsection#1}} + {\section*{\phantomsection#1}} + \__markboth:n {#1} + } +\cs_new_protected:Npn \__ifmultoc_pre_set: + { + \bool_if:NTF \l__class_book_bool + { + \if@twocolumn + \@restonecoltrue + \onecolumn + \bool_if:NT \l__multoc_bool{\twocolumn} + \else + \@restonecolfalse + \bool_if:NT \l__multoc_bool{\twocolumn} + \fi + }{\tl_set:Nn \l__toc_type_tl{article}} + } +\cs_new_protected:Npn \__ifmultoc_after_set: + { + \bool_if:NTF \l__class_book_bool + { + \if@restonecol + \twocolumn + \else + \onecolumn + \fi + }{\tl_set:Nn \l__toc_type_tl{article}} + } +\RenewDocumentCommand{\tableofcontents}{o} + { + \group_begin: + \IfValueT {#1}{\keys_set:nn {listoc}{#1}} + \__ifmultoc_pre_set: + \__title_mark:n {\contentsname} + \vspace*{\dim_use:N \l__toc_offset_dim} + \@starttoc{toc} + \__ifmultoc_after_set: + \group_end: + } +\RenewDocumentCommand{\listoffigures}{so} + { + \group_begin: + \IfValueT {#2}{\keys_set:nn {listoc}{#2}} + \__ifmultoc_pre_set: + \IfBooleanTF {#1} + {\__title_mark:n {\listfigurename}} + {\__title_mark_intoc:n {\listfigurename}} + \dim_add:NV \l__toc_offset_dim\l__toc_listsoffset_dim + \vspace*{\dim_use:N \l__toc_offset_dim} + \@starttoc{lof} + \__ifmultoc_after_set: + \group_end: + } +\RenewDocumentCommand{\listoftables}{so} + { + \group_begin: + \IfValueT {#2}{\keys_set:nn {listoc}{#2}} + \__ifmultoc_pre_set: + \IfBooleanTF {#1} + {\__title_mark:n {\listtablename}} + {\__title_mark_intoc:n {\listtablename}} + \dim_add:NV \l__toc_offset_dim\l__toc_listsoffset_dim + \vspace*{\dim_use:N \l__toc_offset_dim} + \@starttoc{lot} + \__ifmultoc_after_set: + \group_end: + } +\NewDocumentCommand{\listoflistings}{so} + { + \group_begin: + \IfValueT {#2}{\keys_set:nn {listoc}{#2}} + \__ifmultoc_pre_set: + \IfBooleanTF {#1} + {\__title_mark:n {\lstlistlistingname}} + {\__title_mark_intoc:n {\lstlistlistingname}} + \dim_add:NV \l__toc_offset_dim\l__toc_listsoffset_dim + \vspace*{\dim_use:N \l__toc_offset_dim} + \@starttoc{lol} + \__ifmultoc_after_set: + \group_end: + } + +\makeindex[ + intoc, + options = -M~texindy~-C~utf8, + program = truexindy, + columns = 2, + columnsep = 2\ccwd + ] +\indexsetup + { + level = \bool_if:NTF \l__class_book_bool{\chapter*}{\section*}, + toclevel = \bool_if:NTF \l__class_book_bool{chapter}{section}, + firstpagestyle = \bool_if:NTF \l__class_book_bool{plain}{fancy} + } +\__patch_cmd:Nnn \imki@indexheaders + {\@mkboth{\MakeUppercase\indexname}{\MakeUppercase\indexname}} + {\__markboth:n {\indexname}} + +\tl_new:N \l__font_table_tl +\tl_new:N \l__font_figure_tl +\tl_new:N \l__font_listing_tl +\tl_new:N \l__font_footnote_tl + +\__ctex_define:nn {elsefont} + { + table-cap .tl_set:N = \l__font_table_tl, + table-cap .initial:n = \sffamily\small, + figure-cap .tl_set:N = \l__font_figure_tl, + figure-cap .initial:n = \sffamily\small, + listing-cap .tl_set:N = \l__font_listing_tl, + listing-cap .initial:n = \sffamily\small, + footnote .tl_set:N = \l__font_footnote_tl, + footnote .initial:n = \rmfamily, + marginpar .tl_set:N = \marginfont, + marginpar .initial:n = \rmfamily\footnotesize + } + +\DeclareCaptionLabelSeparator{ccwd}{\hspace{\ccwd}} +\DeclareCaptionLabelFormat{parens}{\bothIfFirst{#1}{~}(#2)} +\DeclareCaptionFont{table@font}{\l__font_table_tl} +\DeclareCaptionFont{figure@font}{\l__font_figure_tl} +\DeclareCaptionFont{listing@font}{\l__font_listing_tl} +\captionsetup + { + format = hang, + % figurewithin = section, + % tablewithin = section, + font = {stretch = {\fp_use:N \l__spread_caption_fp}}, + labelfont = {color = ctex@frame}, + labelsep = ccwd, + singlelinecheck = true, + belowskip = 0pt,aboveskip = 10pt + } +\captionsetup[table]{font += table@font} +\captionsetup[figure]{font += figure@font} +\captionsetup[lstlisting]{font += listing@font} +\captionsetup[subfigure] + { + labelformat = parens, + font += figure@font, + belowskip = 2pt,aboveskip = 6pt + } +\captionsetup[figure][bi-second]{name = Figure} +\captionsetup[table][bi-second]{name = Table} +\cs_new:Npn \__arabic:n #1{\int_to_arabic:v {c@#1}} +\cs_new_protected:Npn \__separator_set:n #1 + { + \cs_set:cpn {the#1} + { + \int_compare:nT {\c@chapter > 0} + { + \thechapter + \use:c {l__#1_separator_tl} + } + \__arabic:n {#1} + } + } +\cs_gset:cpn {thesection} + { + \int_compare:nT {\c@chapter > 0}{\thechapter.} + \__arabic:n {section} + } +\clist_map_inline:nn + {{figure},{table},{lstlisting},{equation}} + {\__separator_set:n {#1}} +\cs_gset_protected:Npn \appendix + { + \int_compare:nNnTF {\c@chapter} > {0} + { + \setcounter{chapter}{0} + \setcounter{section}{0} + \gdef\thechapter{\@Alph\c@chapter} + \gdef\CTEX@prechapter{\CTEX@preappendix} + \gdef\CTEX@thechapter{\CTEX@appendix@number} + \gdef\CTEX@postchapter{\CTEX@postappendix} + \gdef\CTEX@chapter@numbering{\CTEX@appendix@numbering} + }{ + \setcounter{section}{0} + \setcounter{subsection}{0} + \gdef\thesection{\@Alph\c@section} + \gdef\CTEX@presection{\CTEX@preappendix} + \gdef\CTEX@thesection{\CTEX@appendix@number} + \gdef\CTEX@postsection{\CTEX@postappendix} + \gdef\CTEX@section@numbering{\CTEX@appendix@numbering} + \ctex_set:nn {appendix}{number = {\@Alph\c@section},name = {}} + } + } +\AtBeginEnvironment{tabularx} + {\exp_args:Nx \linespread{\fp_use:N \l__spread_table_fp}\selectfont\ignorespaces} +\AtBeginEnvironment{tabular} + {\exp_args:Nx \linespread{\fp_use:N \l__spread_table_fp}\selectfont\ignorespaces} + +\fp_new:N \l__spread_line_fp +\fp_new:N \l__spread_table_fp +\fp_new:N \l__spread_math_fp +\fp_new:N \l__spread_caption_fp +\fp_new:N \l__spread_footnote_fp + +\__ctex_define:nn {spread} + { + line .fp_set:N = \l__spread_line_fp, + line .initial:n = 1.3, + table .fp_set:N = \l__spread_table_fp, + table .initial:n = 1.05, + math .fp_set:N = \l__spread_math_fp, + math .initial:n = 1.05, + caption .fp_set:N = \l__spread_caption_fp, + caption .initial:n = 1, + footnote .fp_set:N = \l__spread_footnote_fp, + footnote .initial:n = 1 + } + +\skip_set:Nn \parskip{0pt plus 2pt minus 1pt} +\skip_set:Nn \floatsep{12pt plus 2pt minus 2pt} +\skip_set:Nn \intextsep{14pt plus 2pt minus 2pt} +\skip_set:Nn \textfloatsep{16pt plus 2pt minus 4pt} +\skip_set:Nn \dbltextfloatsep{16pt plus 2pt minus 4pt} +\skip_set:Nn \@fpsep{8pt plus 2.0fil} +\setcounter{topnumber}{4} +\setcounter{bottomnumber}{4} +\setcounter{totalnumber}{8} +\cs_gset:Npn \textfraction{0.18} +\cs_gset:Npn \topfraction{0.85} +\cs_gset:Npn \bottomfraction{0.65} +\cs_gset:Npn \floatpagefraction{0.60} +\ctex_after_end_preamble:n + {\exp_args:Nx \linespread{\fp_use:N \l__spread_line_fp}\selectfont} + +\newcolumntype{L}{X} +\newcolumntype{C}{>{\centering\arraybackslash}X} +\newcolumntype{R}{>{\raggedleft\arraybackslash}X} +\graphicspath{{figures/}} +\DeclareGraphicsExtensions{.pdf,.png,.jpg,.eps,.tif} + +\setlist + { + labelsep = .75\ccwd,listparindent = 2\ccwd, + itemsep = .75ex plus .1ex,parsep = 0ex,topsep = .75ex plus .1ex,partopsep = 0ex + } +\setlist[itemize,1] + {label = \color{ctex@emph}\ensuremath{\bullet},leftmargin = *} +\setlist[itemize,2] + {label = \color{ctex@emph}\ensuremath{\circ},leftmargin = *} +\setlist[enumerate,1] + {label = \color{ctex@emph}\arabic*.,ref = \arabic*,leftmargin = *} +\setlist[enumerate,2] + {label = \color{ctex@emph}(\alph*),ref = \theenumi(\alph*),leftmargin = *} +\setlist[description] + {font = \color{ctex@emph}\sf,labelwidth = *,leftmargin = 2\ccwd} +\newlist{outlinelist}{itemize}{1} +\setlist[outlinelist] + {label = \color{ctex@emph}\upshape\ding{111},itemsep = .5ex plus .1ex,leftmargin = *} +\skip_set:Nn \pltopsep{.75ex plus .1ex} +\skip_set:Nn \plpartopsep{0ex} +\skip_set:Nn \plitemsep{.75ex plus .1ex} +\skip_set:Nn \plparsep{0ex} + +\cs_new_protected:Npn \__thmname_set:nn #1#2 + {\tl_const:cn {c__name_#1_tl}{#2}} +\bool_if:NTF \l__lang_chinese_bool + { + \clist_map_inline:nn + { + {theorem}{定理}, + {definition}{定义}, + {lemma}{引理}, + {corollary}{推论}, + {proposition}{性质}, + {example}{例}, + {remark}{注}, + {exercise}{练习} + }{\__thmname_set:nn #1} + }{ + \clist_map_inline:nn + { + {theorem}{Theorem}, + {definition}{Definition}, + {lemma}{Lemma}, + {corollary}{Corollary}, + {proposition}{Proposition}, + {example}{Example}, + {remark}{Remark}, + {exercise}{Exercise} + }{\__thmname_set:nn #1} + } + +\bool_new:N \l__thmbox_bool +\tl_new:N \l__thm_numberwith_tl +\tl_new:N \l__thm_headpunct_tl +\tl_new:N \l__thm_bodyfont_tl +\tl_new:N \l__thm_notefont_tl +\tl_new:N \l__thm_headindent_tl +\tl_new:N \l__thm_spaceabove_tl +\tl_new:N \l__thm_spacebelow_tl + +\RenewDocumentCommand{\newtheorem}{O{}m} + {\AfterPreamble{\declaretheorem[#1]{#2}}} +\__ctex_define:nn {thmset} + { + thmbox .bool_set:N = \l__thmbox_bool, + thmbox .default:n = true, + thmbox .initial:n = false, + numberwith .tl_set:N = \l__thm_numberwith_tl, + numberwith .initial:n = {chapter}, + headpunct .tl_set:N = \l__thm_headpunct_tl, + headpunct .initial:n = {}, + bodyfont .tl_set:N = \l__thm_bodyfont_tl, + bodyfont .initial:n = {}, + notefont .tl_set:N = \l__thm_notefont_tl, + notefont .initial:n = {}, + headfont .tl_set:N = \l__thm_headfont_tl, + headfont .initial:n = {\color{ctex@emph}\sffamily}, + headindent .tl_set:N = \l__thm_headindent_tl, + headindent .initial:n = {0\ccwd}, + spaceabove .tl_set:N = \l__thm_spaceabove_tl, + spaceabove .initial:n = {.75ex plus .1ex}, + spacebelow .tl_set:N = \l__thm_spacebelow_tl, + spacebelow .initial:n = {.75ex plus .1ex}, + spacepost .tl_set:N = \l__thm_spacepost_tl, + spacepost .initial:n = {\ccwd} + } +\ctex_at_end_preamble:n + { + \declaretheoremstyle[ + spaceabove = \l__thm_spaceabove_tl, + spacebelow = \l__thm_spacebelow_tl, + headindent = \l__thm_headindent_tl, + headfont = \l__thm_headfont_tl, + notefont = \l__thm_notefont_tl, + notebraces = {}{}, + bodyfont = \l__thm_bodyfont_tl, + headpunct = \l__thm_headpunct_tl, + postheadspace = \l__thm_spacepost_tl, + numberwithin = \l__thm_numberwith_tl, + headformat = \NAME\space\NUMBER\NOTE + ]{mythm} + \declaretheorem[style = mythm,name = \c__name_theorem_tl]{theorem} + \declaretheorem[style = mythm,name = \c__name_definition_tl]{definition} + \declaretheorem[style = mythm,name = \c__name_lemma_tl]{lemma} + \declaretheorem[style = mythm,name = \c__name_corollary_tl]{corollary} + \declaretheorem[style = mythm,name = \c__name_proposition_tl]{proposition} + \declaretheorem[style = mythm,name = \c__name_example_tl]{example} + \cs_gset_eq:NN \proof\relax + \declaretheorem{remark}[ + style = mythm, + name = \c__name_remark_tl, + numbered = no + ] + \declaretheorem{proof}[ + style = mythm, + name = \proofname, + numbered = no, + qed = \qedsymbol + ] + } + +\settasks + { + label = (\Alph*), + after-item-skip = 0ex plus .1ex, + column-sep = .5\ccwd, + item-indent = 2\ccwd, + label-width = 1.5\ccwd + } +\setchemformula + { + math-scripts = false, + charge-hshift = 0.25\ccwd, + subscript-vshift = -0.2ex + } +\sisetup + { + detect-family, + detect-weight, + detect-shape, + detect-inline-family = math, + detect-inline-weight = math, + detect-display-math, + range-phrase = \ensuremath{\sim}, + range-units = single, + table-parse-only, + group-digits = false + } +\allowdisplaybreaks[4] +\cs_gset:Npn \ULthickness{.75pt} +\skip_set:Nn \jot{4pt plus 1pt minus 1pt} +\cs_new_protected:Npn \l__math_restore:n #1 + { + \AtBeginEnvironment{#1} + {\linespread{\fp_use:N \l__spread_math_fp}\selectfont\ignorespaces} + } +\clist_map_inline:nn + { + {array},{matrix},{pmatrix},{bmatrix},{Bmatrix},{vmatrix},{Vmatrix}, + {matrix*},{pmatrix*},{bmatrix*},{Bmatrix*},{vmatrix*},{Vmatrix*}, + {cases},{cases*},{dcases},{dcases*},{rcases},{rcases*},{drcases},{drcases*}, + {aligned},{alignedat},{gathered},{multlined},{lgathered},{rgathered} + }{\l__math_restore:n {#1}} +\__patch_cmd:Nnn \start@gather + {\collect@body} + {\linespread{\fp_use:N \l__spread_math_fp}\selectfont\collect@body} +\__patch_cmd:Nnn \start@align + {\collect@body} + {\linespread{\fp_use:N \l__spread_math_fp}\selectfont\collect@body} +\__patch_cmd:Nnn \start@multline + {\collect@body} + {\linespread{\fp_use:N \l__spread_math_fp}\selectfont\collect@body} +\__patch_cmd:Nnn \gather@split + {\spread@equation} + {\linespread{\fp_use:N \l__spread_math_fp}\selectfont\spread@equation} +\ctex_after_end_preamble:n + { + \skip_set:Nn \abovedisplayskip{5pt plus 1pt minus 1pt} + \skip_set:Nn \belowdisplayskip{5pt plus 1pt minus 1pt} + \skip_set:Nn \abovedisplayshortskip{0pt} + \skip_set:Nn \belowdisplayshortskip{5pt plus 1pt minus 1pt} + } +\cs_gset:Npn \tagform@#1 + {\maketag@@@{\color{ctex@emph}(\ignorespaces#1\unskip\@@italiccorr)}} + +\tcbset + { + thmsty/.style = + { + enhanced~jigsaw,pad~at~break* = 3pt, + opacityback = 0, + colframe = ctex@emph, + left = .2pc,right = .2pc,top = .5pc,bottom = .5pc,middle= .5pc, + arc = 0pt + }, + outlinesty/.style = + { + enhanced,nofloat, + tikznode~boxed~title, + interior~style = white,colframe = ctex@emph, + colbacktitle = white,coltitle = ctex@emph, + fonttitle = \large\sffamily,fontupper = \itshape, + boxed~title~style = {size = normal,opacityframe = 0,boxrule = 0pt}, + attach~boxed~title~to~top~center = {yshift = -\tcboxedtitleheight/2}, + arc = 3pt, + after~skip = 3ex, + left = 1.5pc,right = 1.5pc,top = 1pc,bottom = 0.5pc, + boxsep = 5pt + }, + exersty/.style = + { + enhanced,on~line, + arc = 5pt, + fontupper = \sffamily\Large, + boxrule = 1pt,boxsep = 0pt, + left = 6pt,right = 6pt,top = 3.5pt,bottom = 3.5pt, + before~skip = 4ex,after~skip = 2.25ex + }, + breakable, + boxrule = \l__rule_width_dim + } +\ctex_at_end_preamble:n + { + \bool_if:NT \l__thmbox_bool + { + \tcolorboxenvironment{theorem}{thmsty} + \tcolorboxenvironment{definition}{thmsty} + \tcolorboxenvironment{lemma}{thmsty} + \tcolorboxenvironment{corollary}{thmsty} + \tcolorboxenvironment{proposition}{thmsty} + \tcolorboxenvironment{example}{thmsty} + } + } +\NewDocumentEnvironment{outline}{O{\abstractname}o} + { + \begin{tcolorbox}[outlinesty,title = #1,IfValueT = {#2}{#2}] + \begin{outlinelist} + }{ + \end{outlinelist} + \end{tcolorbox} + } +\NewDocumentEnvironment{exercise}{sO{LightYellow}O{1.}O{\c__name_exercise_tl}o} + { + \begin{center} + \bool_if:NTF \l__thmbox_bool + { + \tcbox[ + exersty, + colback = #2,colframe = black, + drop~fuzzy~shadow = #2, + IfValueT = {#5}{#5}, + phantom = + \IfBooleanF{#1} + { + \CTEX@ifnametrue + \refstepcounter{section} + \markright{\CTEXthesection\hspace{0.5\ccwd}#4} + \CTEX@addtocline{section}{#4} + } + ]{\IfBooleanF{#1}{\CTEXthesection\hspace{0.5\ccwd}}#4} + }{ + \sffamily\Large + \IfBooleanF{#1} + { + \CTEX@ifnametrue + \refstepcounter{section} + \markright{\CTEXthesection\hspace{0.5\ccwd}#4} + \CTEX@addtocline{section}{#4} + \CTEXthesection\hspace{0.5\ccwd} + }#4 + } + \end{center} + \begin{compactenum}[#3] + }{ + \end{compactenum} + } +\DeclareTColorBox{mybox}{soO{MintCream}O{}} + { + enhanced~jigsaw,pad~at~break* = 3pt, + IfBooleanTF = {#1}{colback = #3}{opacityback = 0,colframe = ctex@emph}, + IfValueT = {#2}{title = #2}, + coltitle = black,colbacktitle = white, + fonttitle = \sffamily, + left = .2pc,right = .2pc,top = .5pc,bottom = .5pc,middle= .5pc, + arc = 0pt, + toptitle = 2pt,bottomtitle = 2pt, + beforeafter~skip=2ex, + halign~upper = left,halign~lower = left, + center~title,#4 + } +\DeclareTotalTCBox{\fuzzy}{O{DarkSeaGreen}vO{}} + { + nobeforeafter,tcbox~raise~base, + blank,fuzzy~halo = 2pt~with~#1,#3 + }{#2} +\DeclareTotalTCBox{\concise}{O{Aqua}vO{}} + { + nobeforeafter,tcbox~raise~base, + top = 2pt,bottom = 2.5pt,left = 2pt,right = 2pt, + boxsep = 0pt,boxrule = 0.75pt,arc = 1pt, + colback = #1!15!white,#3 + }{#2} + +\bool_set_true:N \l__backend_bibtex_bool +\tl_new:N \l__bib_style_tl +\tl_new:N \l__bib_otherstyle_tl +\tl_new:N \l__bib_citestyle_tl +\tl_new:N \l__bib_file_tl + +\__ctex_define:nn {bibset} + { + backend .choice:, + backend/bibtex .code:n = {}, + backend/biblatex .code:n = + {\bool_set_false:N \l__backend_bibtex_bool}, + + bib-style .choice:, + bib-style .value_required:n = true, + bib-style/numerical .code:n = + { + \tl_set:Nn \l__bib_style_tl{#1} + \tl_clear:N \l__bib_otherstyle_tl + }, + bib-style/authoryear .code:n = + { + \tl_set:Nn \l__bib_style_tl{#1} + \tl_clear:N \l__bib_otherstyle_tl + }, + bib-style/unknown .code:n = + {\tl_set_eq:NN \l__bib_otherstyle_tl\l_keys_value_tl}, + bib-style .initial:n = numerical, + + cite-style .code:n = + {\tl_set:Nn \l__bib_citestyle_tl{#1}}, + bibfile .tl_set:N = \l__bib_file_tl, + bibfile .initial:n = refs.bib + } + +\cs_new_protected:Npn \__bibtex_set: + { + \tl_if_empty:NTF \l__bib_otherstyle_tl + { + \tl_if_eq:VnT \l__bib_style_tl{numerical} + { + \bibliographystyle{gbt7714-numerical} + \setcitestyle{comma,square,super} + } + \tl_if_eq:VnT \l__bib_style_tl{authoryear} + {\bibliographystyle{gbt7714-author-year}} + \cs_set_eq:NN \cite\citep + }{ + \exp_args:NV \bibliographystyle\l__bib_otherstyle_tl + } + \tl_if_empty:NF \l__bib_citestyle_tl + {\exp_args:NV \setcitestyle\l__bib_citestyle_tl} + \skip_set:Nn \bibsep{0ex} + \NewDocumentCommand{\printbibliography}{so} + { + \group_begin: + \IfValueT {##2}{\keys_set:nn {listoc}{##2}} + \__ifmultoc_pre_set: + \cs_set:Npn \bibsection + { + \IfBooleanTF {##1} + {\__title_mark:n {\bibname}} + {\__title_mark_intoc:n {\bibname}} + } + \exp_args:NV \bibliography\l__bib_file_tl + \__ifmultoc_after_set: + \group_end: + } + } +\cs_new_protected:Npn \__put_biblatex:n #1 + {\PassOptionsToPackage{#1}{biblatex}} +\cs_new_protected:Npn \__biblatex_pre_set: + { + \tl_if_empty:NTF \l__bib_otherstyle_tl + { + \tl_if_eq:VnT \l__bib_style_tl{numerical} + {\__put_biblatex:n {style = gb7714-2015}} + \tl_if_eq:VnT \l__bib_style_tl{authoryear} + {\__put_biblatex:n {style = gb7714-2015ay}} + }{ + \__put_biblatex:n {style = \l__bib_otherstyle_tl} + } + \tl_if_empty:NF \l__bib_citestyle_tl + {\__put_biblatex:n {citestyle = \l__bib_citestyle_tl}} + \__put_biblatex:n {backend = biber} + } +\cs_new_protected:Npn \__biblatex_after_set: + { + \exp_args:NV \addbibresource\l__bib_file_tl + \cs_gset:Npn \blx@default@theheading{bibintoc} + \defbibheading{bibintoc}[\bibname]{\__title_mark_intoc:n {##1}} + \skip_set:Nn \bibitemsep{0ex} + } +\ctex_at_end_preamble:n + { + \bool_if:NTF \l__backend_bibtex_bool + { + \RequirePackage[sort&compress]{natbib} + \__bibtex_set: + }{ + \__biblatex_pre_set: + \RequirePackage{biblatex} + \__biblatex_after_set: + } + } + +\ctex_at_end_preamble:n + { + \skip_set:Nn \footnotemargin{0.5\ccwd} + \group_begin: + \footnotesize + \exp_args:Nx \linespread{\fp_use:N \l__spread_footnote_fp}\selectfont + \skip_gset:Nn \footnotesep{\ht\strutbox} + \group_end: + \cs_gset:Npn \hangfootparskip{0ex} + \bool_if:NT \l__lang_chinese_bool + {\cs_gset:Npn \hangfootparindent{2\ccwd}} + \bool_if:NT \l__chap_withpart_bool + {\counterwithin*{chapter}{part}} + \bool_if:NT \l__foot_perpart_bool + { + \counterwithout*{footnote}{chapter} + \counterwithin*{footnote}{part} + } + \bool_if:NT \l__foot_perpage_bool + { + \counterwithout*{footnote}{chapter} + \counterwithin*{footnote}{page} + } + } +\__patch_cmd:Nnn \@footnotetext + {\reset@font} + {\def\baselinestretch{\fp_use:N \l__spread_footnote_fp}\l__font_footnote_tl} +\__patch_cmd:Nnn \@mpfootnotetext + {\reset@font} + {\def\baselinestretch{\fp_use:N \l__spread_footnote_fp}\l__font_footnote_tl} +\__patch_cmd:Nnn \@makefnmark + {\normalfont}{\l__font_footnote_tl} + +\lstdefinestyle{mystyle} + { + language = [LaTeX]TeX, + texcsstyle = + *\lst@ifdisplaystyle\bfseries\color{ctex@verb}\else\color{ctex@verb}\fi, + basicstyle = + \ttfamily\lst@ifdisplaystyle\small\else\color{ctex@verb}\fi, + framexleftmargin = 0pt, + framexrightmargin = 0pt, + xleftmargin = 3pt, + xrightmargin = 3pt, + numbersep = 10pt, + framesep = 3pt, + frame = single, + rulecolor = \color{ctex@frame}, + commentstyle = \color{gray}, + emphstyle = \color{ctex@emph}, + emph = {caption,makecell,subcaption,tabularx}, + keywordstyle = + \lst@ifdisplaystyle\bfseries\color{ctex@verb}\else\color{ctex@verb}\fi, + morekeywords = + { + includegraphics,setmainfont,setsansfont,setmonofont,setCJKmainfont,setCJKsansfont,setCJKmonofont,setCJKfamilyfont,RequirePackage + } + } +\lstset + { + style = mystyle, + breaklines = true, + resetmargins = true, + % numbers = left, + numberstyle = \footnotesize, + abovecaptionskip = -1ex, + belowcaptionskip = 1.5ex, + aboveskip = 1.5ex plus .2ex minus .1ex, + belowskip = 0.55ex plus .2ex minus .1ex, + keepspaces = true, + framerule = \l__rule_width_dim, + columns = flexible + } +\lstloadlanguages{C,C++,Java,Python,Matlab} +\AtBeginEnvironment{verbatim}{\microtypesetup{activate = false}} + +\clist_new:N \l__hyperref_clist +\cs_new_protected:Npn \__put_hyperref:n #1 + {\clist_put_right:Nn \l__hyperref_clist{#1}} +\cs_new_protected:Npn \__define_linkcolor:nnn #1#2#3 + {\definecolorset{HTML}{ctex@}{}{link,#1;url,#2;cite,#3}} +\cs_new_protected:Npn \__define_themecolor:nnn #1#2#3 + {\definecolorset{HTML}{ctex@}{}{frame,#1;emph,#2;verb,#3}} +\cs_new:Npn \__linkcolor_set:n #1 + { + linkcolor/\clist_item:nn {#1}{1} .code:n = + { + \__define_linkcolor:nnn + {\clist_item:nn {#1}{2}} + {\clist_item:nn {#1}{3}} + {\clist_item:nn {#1}{4}} + \__put_hyperref:n + { + linkcolor = ctex@link,linkbordercolor = ctex@link, + urlcolor = ctex@url,urlbordercolor = ctex@url, + citecolor = ctex@cite,citebordercolor = ctex@cite + } + }, + } +\cs_new:Npn \__themecolor_set:n #1 + { + color/\clist_item:nn {#1}{1} .code:n = + { + \__define_themecolor:nnn + {\clist_item:nn {#1}{2}} + {\clist_item:nn {#1}{3}} + {\clist_item:nn {#1}{4}} + }, + } + +\cs_new:Npn \__allow_urlbreak: + { + \cs_new:Npn \__add_urlbreak_points: + {\tl_map_function:NN \c__urlbreak_points_tl\do} + \__appto_cmd:Nn + \UrlBreaks{\UrlOrds\__add_urlbreak_points:} + } +\tl_const:Nn \c__urlbreak_points_tl + {ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789} + +\keys_define:nx {ctex/link} + { + hyperlink .choice:, + hyperlink/edge .code:n = {}, + hyperlink/various .code:n = {\__put_hyperref:n {colorlinks}}, + hyperlink/none .code:n = {\__put_hyperref:n {hidelinks}}, + hyperlink .default:n = edge, + hyperlink .initial:n = edge, + + linkcolor .choice:, + \clist_map_function:nN + { + {fresh, 62d71f,0000B2,005752}, + {cutepink, ff69b4,9d5196,57b5e5}, + {skyblue, 0000ff,004986,eb6877}, + {crimson, dc143c,00c1c9,afcd20} + } + \__linkcolor_set:n + linkcolor .default:n = fresh, + linkcolor .initial:n = fresh, + + linktopage .choice:, + linktopage/true .code:n = {\__put_hyperref:n {linktocpage}}, + linktopage/false .code:n = {}, + linktopage .default:n = true, + linktopage .initial:n = false + } +\keys_define:nx {ctex/style} + { + color .choice:, + color .value_required:n = true, + \clist_map_function:nN + { + {none, 000000,000000,000000}, + {seaside, 4682B4,004986,a40000}, + {energy, f39800,00a0e9,893895}, + {cyberpunk, 601986,eb6877,a4005b} + } + \__themecolor_set:n + color .initial:n = none + } + +\ctex_at_end_preamble:n + { + \RequirePackage[pdfstartview = FitH,bookmarksnumbered]{hyperref} + \RequirePackage{cleveref} + \urlstyle{same} + \exp_args:NV \hypersetup\l__hyperref_clist + \__allow_urlbreak: + + \bool_if:NTF \l__lang_chinese_bool + { + \keys_set_known:nn {ctex} + { + contentsname = {目\hspace{\ccwd}录}, + indexname = {索\hspace{\ccwd}引}, + listfigurename = {图片索引}, + listtablename = {表格索引}, + abstractname = {摘\hspace{\ccwd}要}, + lstlistlistingname = {代码索引}, + lstlistingname = {代码} + } + \crefformat{equation}{#2式(#1)#3} + \crefformat{align}{#2式(#1)#3} + \crefformat{multline}{#2式(#1)#3} + \crefformat{gather}{#2式(#1)#3} + \crefformat{figure}{#2图#1#3} + \crefformat{table}{#2表#1#3} + \crefformat{chapter}{#2第#1章#3} + \crefformat{section}{#2节#1#3} + \crefformat{subsection}{#2小节#1#3} + \crefformat{theorem}{#2定理#1#3} + \crefformat{definition}{#2定义#1#3} + \crefformat{lemma}{#2引理#1#3} + \crefformat{corollary}{#2推论#1#3} + \crefformat{proposition}{#2性质#1#3} + \crefformat{example}{#2例#1#3} + }{ + \keys_set_known:nn {ctex} + { + abstractname = {Abstract}, + lstlistlistingname = {List~of~Listings}, + lstlistingname = {Code} + } + \crefformat{equation}{#2Equation~(#1)#3} + \crefformat{align}{#2Equation~(#1)#3} + \crefformat{multline}{#2Equation~(#1)#3} + \crefformat{gather}{#2Equation~(#1)#3} + \crefformat{figure}{#2Figure~#1#3} + \crefformat{table}{#2Table~#1#3} + \crefformat{chapter}{#2Chapter~#1#3} + \crefformat{section}{#2Section~#1#3} + \crefformat{subsection}{#2Subsection~#1#3} + \crefformat{theorem}{#2Theorem~#1#3} + \crefformat{definition}{#2Definition~#1#3} + \crefformat{lemma}{#2Lemma~#1#3} + \crefformat{corollary}{#2Corollary~#1#3} + \crefformat{proposition}{#2Proposition~#1#3} + \crefformat{example}{#2Example~#1#3} + } + } + +\ctex_set:n + { + secnumdepth = 3, + tocdepth = 1, + part = + { + pagestyle = empty, + number = + {\bool_if:NTF \l__zhtitle_bool{\chinese{part}}{\thepart}}, + format = {\color{ctex@frame}\sffamily\Huge}, + aftername = + {\bool_if:NTF \l__newline_bool{\par\nobreak}{\hspace{\ccwd}}}, + tocline = {\CTEXifname{\CTEXthepart\hspace{\ccwd}}{}#2} + }, + chapter = + { + % pagestyle = fancy, + number = + {\bool_if:NTF \l__zhtitle_bool{\chinese{chapter}}{\thechapter}}, + format = + { + \color{ctex@frame}\sffamily\LARGE + \bool_if:NF \l__newline_bool{\centering} + }, + aftername = + { + \bool_if:NTF \l__newline_bool + {\par\nobreak\vskip 1.5pc}{\hspace{\ccwd}} + }, + beforeskip = {-1.5ex}, + afterskip = {3ex}, + lotskip = {0.8pc}, + lofskip = {0.8pc}, + tocline = {\CTEXifname{\CTEXthechapter\hspace{\ccwd}}{}#2} + }, + section = + { + hang = true, + format = {\color{ctex@frame}\sffamily\Large}, + aftername = {\hspace{0.5\ccwd}}, + beforeskip = {1.5ex plus .2ex minus .1ex}, + afterskip = {1.5ex plus .2ex minus .1ex}, + tocline = {\CTEXifname{\CTEXthesection\hspace{\ccwd}}{}#2} + }, + subsection = + { + hang = true, + format = {\color{ctex@frame}\sffamily\large}, + aftername = {\hspace{0.5\ccwd}}, + beforeskip = {1.3ex plus .2ex minus .1ex}, + afterskip = {1.3ex plus .2ex minus .1ex}, + tocline = {\CTEXifname{\CTEXthesubsection\hspace{\ccwd}}{}#2} + }, + subsubsection = + { + hang = true, + format = {\color{ctex@frame}\sffamily}, + aftername = {\hspace{0.5\ccwd}}, + beforeskip = {\parskip}, + afterskip = {\parskip} + } + } + +\bool_if:NF \l__newline_bool + { + \ctex_set:n + { + part/hang = true, + chapter/hang = true + } + } +% +%\Finale +\endinput \ No newline at end of file -- cgit v1.2.3