texlive[59434] Master/texmf-dist: easybook (2jun21)
commits+karl at tug.org
commits+karl at tug.org
Wed Jun 2 22:58:14 CEST 2021
Revision: 59434
http://tug.org/svn/texlive?view=revision&revision=59434
Author: karl
Date: 2021-06-02 22:58:14 +0200 (Wed, 02 Jun 2021)
Log Message:
-----------
easybook (2jun21)
Modified Paths:
--------------
trunk/Master/texmf-dist/doc/latex/easybook/easybook.pdf
trunk/Master/texmf-dist/source/latex/easybook/easybook.dtx
trunk/Master/texmf-dist/source/latex/easybook/easybook.ins
trunk/Master/texmf-dist/tex/latex/easybook/easybook.cls
Added Paths:
-----------
trunk/Master/texmf-dist/tex/latex/easybook/easybase.sty
Modified: trunk/Master/texmf-dist/doc/latex/easybook/easybook.pdf
===================================================================
(Binary files differ)
Modified: trunk/Master/texmf-dist/source/latex/easybook/easybook.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/easybook/easybook.dtx 2021-06-02 20:58:00 UTC (rev 59433)
+++ trunk/Master/texmf-dist/source/latex/easybook/easybook.dtx 2021-06-02 20:58:14 UTC (rev 59434)
@@ -23,11 +23,12 @@
%
% \changes{v1.20}{2021/01/09}{修改和完善用户文档。}
% \changes{v1.20}{2021/01/09}{模板更改为使用 CC-BY 许可协议。}
-% \changes{v1.25p}{2021/05/03}{取消附带的示例文件,可查看历史版本及其它来源的使用样例。}
+% \changes{v1.25q}{2021/05/03}{取消附带的示例文件,可查看历史版本及其它来源的使用样例。}
+% \changes{v1.25q}{2021/06/02}{将模块的代码独立出来为 \pkg{easybase} 宏包,适用于 \CTeX 文档类。}
%
% \title{\sffamily easybook 文档类手册}
% \author{瞿毅}
-% \date{2021/05/31\hskip\ccwd\relax v1.25p\thanks{\url{https://gitee.com/texl3/easybook}}}
+% \date{2021/06/02\hskip\ccwd\relax v1.25q\thanks{\url{https://gitee.com/texl3/easybook}}}
%
% \maketitle
% \begin{abstract}
@@ -57,6 +58,22 @@
% \end{document}
% \end{frameverb}
%
+% 或者直接使用 \pkg{easybase} 宏包,它的宏包选项有 \opt{class} 和 \opt{draft},包含了节 \ref{sec:interface options} 所示各个模块接口命令的功能,目前只适用于 \cls{ctexbook} 和 \cls{ctexart} 文档类。
+% \begin{frameverb}
+% \documentclass{ctexbook}
+%
+% \usepackage{easybase}
+% \ctexset{键值列表}
+%
+% \usepackage{宏包列表}
+%
+% \begin{document}
+% \chapter{欢迎}
+% \section{Welcome to easybook}
+% Hello, \LaTeX
+% \end{document}
+% \end{frameverb}
+%
% \subsection{编译方式}
% 假设您的 \TeX 源文件名为 \opt{easybook.tex},需要使用参考文献和索引功能,并使用 \hologo{XeLaTeX} 和 \hologo{BibTeX} 引擎编译文档,那么需要在命令行中执行
% \begin{frameverb}
@@ -117,7 +134,7 @@
% \end{syntax}
% 传递给 \cls{ctexbook} 设置字体,最好不要使用原有的 \opt{fontset} 选项,默认情况下使用自定义字体而不开启这个选项,可根据安装的字体及电脑系统选取。\opt{noto} 与 \opt{none} 选项的相关描述见小节 \ref{subsec:font settings},\opt{overleaf} 是一个各系统通用选项,会检测系统环境选取对应字体。
% \changes{v1.21}{2021/01/12}{默认字体与 \CTeX 一致,不再是自定义字体。}
-% \changes{v1.25p}{2021/05/04}{修复使用 \pkg{xeCJK} 与 \pkg{fontspec} 宏包的字体设置命令在 \hologo{LuaLaTeX} 下失效的问题。}
+% \changes{v1.25q}{2021/05/04}{修复使用 \pkg{xeCJK} 与 \pkg{fontspec} 宏包的字体设置命令在 \hologo{LuaLaTeX} 下失效的问题。}
% \end{function}
%
% \begin{function}[rEXP,added = 2021-01-05,updated = 2021-01-13]{paper}
@@ -140,11 +157,10 @@
% \begin{syntax}
% class = <(book)|article>
% \end{syntax}
-% 设置文类风格,默认为 \opt{book} 文档类。选用 \opt{article} 会变为 \opt{oneside} 单面排版,同时使文档编号、结构等与标准 \cls{article} 文档类的特性相似,可用于短篇幅的文章,不需要再使用 \tn{chapter} 命令,此时设置双栏目录的 \opt{style/multoc} 选项、小节 \ref{subsec:document command} 中打印目录命令的 \opt{multoc} 及 \opt{book} 选项均会失效,会以 \opt{section} 标题级别输出目录。
+% 设置文类风格,默认为 \opt{book} 文档类。选用 \opt{article} 会变为 \opt{oneside} 单面排版,同时使文档编号、结构等与标准 \cls{article} 文档类的特性相似,可用于短篇幅的文章,不需要再使用 \tn{chapter} 命令,此时设置双栏目录的 \opt{style/multoc} 选项、小节 \ref{subsec:document command} 中打印目录命令的 \opt{multoc} 及 \opt{book} 选项均会失效,会以 \opt{section} 标题级别输出目录。如果使用 \cls{ctexart} 配合 \pkg{easybase} 宏包,则 \opt{book} 宏包选项会失效。
% \changes{v1.23}{2021/03/16}{增加 article 文章模式,可用于短篇幅的文章。}
% \end{function}
%
-% \clearpage
% \subsection{文档命令}
% \label{subsec:document command}
% \subsubsection{文区命令}
@@ -160,7 +176,7 @@
% \end{function}
%
% \subsubsection{目录命令}
-% \begin{function}[added = 2021-02-20,updated = 2021-05-05]{\tableofcontents,\listoffigures,\listoftables,\listoflistings}
+% \begin{function}[added = 2021-02-20,updated = 2021-06-02]{\tableofcontents,\listoffigures,\listoftables,\listoflistings}
% \begin{syntax}
% \tn{tableofcontents+}\oarg{键值列表}\parg{附加代码}
% \tn{listoffigures*+}\oarg{键值列表}
@@ -168,22 +184,24 @@
% \tn{listoflistings*+}\oarg{键值列表}
% \end{syntax}
% \tn{listoffigures} 命令输出图片目录,\tn{listoftables} 输出表格目录,\tn{listoflistings} 输出代码目录。带有星号的目录命令不将标题添加进主文档目录,带有+号的目录命令可以使当前标题编号。\tn{tableofcontents+} 与其它命令不同是用于输出双语目录,需要与双语目录标题命令 \tn{bichapter} 等或设置图片、表格和代码等英文目录的标题配合使用,附加代码是中文与英文目录之间的代码,可以插入文本和换页命令等。目录的键值列表选项如下
-% \changes{v1.25p}{2021/05/05}{命令 \tn{tableofcontents} 可以输出双语目录。}
+% \changes{v1.25q}{2021/05/05}{命令 \tn{tableofcontents} 可以输出双语目录。}
% \end{function}
%
-% \begin{function}{multoc,title,format,aftertitle,pagestyle,book,article}
+% \begin{function}{multoc,columns,title,format,aftertitle,pagestyle,book,article}
% \begin{syntax}
% multoc = <true|(false)>
+% columns = <目录栏数|(2)>
% title = \{<中文目录标题>,<英文目录标题>\}
% format = <目录标题格式>
% aftertitle = <目录标题后的代码>
% pagestyle = <标题页的页面格式>
% \end{syntax}
-% \opt{multoc} 与 \opt{style/multoc} 选项具有相同的效果,但是具有优先性且可单独设置不同目录是否双栏排版。\opt{title} 选项用于更改目录的标题,标题之间用一个半角逗号分开,也可以只有一部分,表示中文目录的标题。当设置了英文目录标题时,英文目录标题将会自动加入主文档目录,与 \tn{tableofcontents+} 配合输出。
+% \opt{multoc} 与 \opt{style/multoc} 选项具有相同的效果,但是具有优先性且可单独设置不同目录是否多栏排版,默认为双栏,可使用 \opt{columns} 更改。\opt{title} 选项用于更改目录的标题,标题之间用一个半角逗号分开,也可以只有一部分,表示中文目录的标题。当设置了英文目录标题时,英文目录标题将会自动加入主文档目录,与 \tn{tableofcontents+} 配合输出。
%
% 在书籍模式且 \opt{book} 选项开启或者文章模式的情况下,\opt{format} 用于设置目录标题的格式,\opt{aftertitle} 选项的代码将被插入到目录标题内容之后,\opt{pagestyle} 是目录标题所在页的页面格式,除此之外还支持 \opt{ctexset/chapter} 或 \opt{ctexset/section} 所有的章节标题样式选项。\opt{book} 选项使目录标题按照 chapter 级别输出,\opt{article} 选项使目录标题按照 section 级别输出,默认为 chapter 级别。
% \changes{v1.23}{2021/03/15}{为几个目录增加键值列表的选项,可设置标题输出级别以及是否加入主目录。}
% \changes{v1.24}{2021/04/04}{目录命令的可选参数增加标题键值。}
+% \changes{v1.25q}{2021/06/02}{目录可设置多栏,并在 article 模式仍然生效。}
% \end{function}
%
% \subsubsection{标题命令}
@@ -199,7 +217,7 @@
% 双语目录的标题命令目前设置了常用的三个级别,它们将中文标题正常输出,并使中英文标题加入双语目录,这个功能是为国内一些大学的学位论文模板的要求设计,在一般情况和英文模式下不需要使用。
%
% 它们的星号变体命令使文中标题不编号,但是仍然加入双语目录,若英文标题参数空置那么仅加入中文目录而不加入英文目录,这一特点与 \tn{chapter*} 等命令的行为不太一样,在一些情况下会用到。可选参数是目录中的中文标题,默认与中文标题一致,正文标题过长时可用它设置在目录中显示的标题。双语目录的格式是一致的,共享使用 \tn{tocset} 的设置,英文目录的章级别标题名及编号的修改方式如下
-% \changes{v1.25p}{2021/05/05}{增加与双语目录配合的标题命令。}
+% \changes{v1.25q}{2021/05/05}{增加与双语目录配合的标题命令。}
% \end{function}
%
% \begin{function}{biname,binmuber}
@@ -272,7 +290,7 @@
% \changes{v1.10}{2021/01/08}{可以自定义主题颜色。}
% \end{function}
% \item[color-all] 统一设置主题的各部分颜色,参数是6个十六进制数字组成的 HTML 颜色代码,任意颜色的代码可以在常见的图片处理工具拾色器中查看。
-% \item[multoc] 开启双栏目录,可与 \opt{onecolumn} 和 \opt{twocolumn} 选项配合出单栏正文、单栏目录,双栏正文、单栏目录,单栏正文、双栏目录和双栏正文、双栏目录四种方式。
+% \item[multoc] 开启多栏目录,与小节 \ref{subsec:document command} 中目录命令的同名选项有相同效果。
% \item[withpart] 使章跟随每一部分编号,默认不跟随。
% \item[footwith] 使脚注跟随编号的计数器,默认跟随章,当开启新的一章时脚注编号从1开始。
% \item[rulewidth] 调整页眉、定理盒子以及代码框线条的粗细。
@@ -299,7 +317,7 @@
% \changes{v1.10}{2021/01/08}{修复了 \opt{linktopage} 选项关闭时目录中标题编号无超链接的问题。}
% \changes{v1.23}{2021/03/19}{修复在 \pkg{ctex} v2.5.6 更新后 \cls{easybook} 与 \pkg{hyperref} 冲突问题。}
% \changes{v1.24}{2021/04/05}{增加 \pkg{hyperref} 超链接选项完整的支持。}
-% \changes{v1.25p}{2021/05/06}{模块名 \opt{link} 改为 \opt{refset},\opt{link} 作为兼容性保留。}
+% \changes{v1.25q}{2021/05/06}{模块名 \opt{link} 改为 \opt{refset},\opt{link} 作为兼容性保留。}
% \end{function}
%
% \begin{optdesc}
@@ -356,7 +374,7 @@
% \ding{229} 以上选项路径为 \opt{subfont/...}
% \changes{v1.10}{2021/01/08}{加入自定义非正文字体选项。}
% \changes{v1.23}{2021/02/08}{修复使用 \tn{zihao} 命令设置字体失效的问题。}
-% \changes{v1.25p}{2021/05/31}{其它字体模块名由 \opt{elsefont} 改为 \opt{subfont},并增加数学字体的选项 \opt{subfont/math}。}
+% \changes{v1.25q}{2021/05/31}{其它字体模块名由 \opt{elsefont} 改为 \opt{subfont},并增加数学字体的选项 \opt{subfont/math}。}
% \end{function}
%
% \begin{optdesc}
@@ -381,7 +399,7 @@
% \changes{v1.21}{2021/01/11}{增加 \opt{bibset} 选项,可以使用 \hologo{BibTeX} 或 \hologo{biber} 编译参考文献。}
% \changes{v1.23}{2021/02/23}{使用 \opt{bibset} 选项时可设置标注风格。}
% \changes{v1.24}{2021/04/09}{可以不载入参考文献包手动配置参考文献格式。}
-% \changes{v1.25p}{2021/05/12}{取消 \opt{bib-loadpkg} 选项,由是否设置参考文献数据库来决定载入宏包。}
+% \changes{v1.25q}{2021/05/12}{取消 \opt{bib-loadpkg} 选项,由是否设置参考文献数据库来决定载入宏包。}
% \end{function}
%
% \begin{optdesc}
@@ -490,8 +508,10 @@
%
% \subsection{页面尺寸}
% \label{subsec:page margins}
-% \begin{function}[EXP,added = 2021-01-13,updated = 2021-05-11]{left,top,hmargin,textwidth,includehead}
+% \begin{function}[EXP,added = 2021-01-13,updated = 2021-06-02]{headruleskip,footruleskip,left,top,hmargin,textwidth,includehead}
% \begin{syntax}
+% headruleskip = <页眉线间距>
+% footruleskip = <页脚线间距>
% left = <页面左边距>
% top = <页面上边距>
% hmargin = \marg{左边距,右边距}
@@ -499,7 +519,7 @@
% includehead = <true|(false)>
% \end{syntax}
% \ding{229} 以上选项路径为 \opt{geoset/...} \\
-% 预置的页面尺寸与 \cls{Word} 的默认值接近,\opt{geoset} 会将选项交给 \pkg{geometry} 宏包接口命令 \tn{geometry} 处理,并且选项的键值列表与之相同,上面的选项仅是一小部分,支持的参数可查阅宏包帮助文档。当在此设置页面大小时,会覆盖 \opt{paper} 选项的设置。
+% 预置的页面尺寸与 \cls{Word} 的默认值接近,\opt{geoset} 会将前两个之外的选项交给 \pkg{geometry} 宏包接口命令 \tn{geometry} 处理,并且选项的键值列表与之相同,上面的选项仅是一小部分,支持的参数可查阅宏包帮助文档。当在此设置页面大小时,会覆盖 \opt{paper} 选项的设置。
% \changes{v1.21}{2021/01/13}{增加配置页面尺寸的选项。}
% \end{function}
%
@@ -506,10 +526,11 @@
% \begin{ctexexam}
% \geoset
% {
-% top = 2.5cm,
-% bottom = 2.5cm,
-% left = 3.2cm,
-% right = 3.2cm,
+% headruleskip = 3pt,
+% top = 2.5cm,
+% bottom = 2.5cm,
+% left = 3.2cm,
+% right = 3.2cm,
% ignoreall
% }
% \end{ctexexam}
@@ -584,7 +605,7 @@
% 上面几个选项用于设置脚注格式,\opt{fnparskip} 和 \opt{fnparindent} 选项仅在 \opt{fnhang = true} 时有效。\opt{fnhang} 用于将脚注设置为悬挂缩进的格式,\opt{fnmark-pos} 选项设置脚注编号的位置,正常文本或是上标形式。\opt{fnmark-num} 选项设置脚注编号的格式,默认为原生样式 \opt{plain},还可以改为 \opt{pifont} 的各个版本,从左往右依次为普通版、阴文衬线版、阳文无衬线版和阴文无衬线版,缺点是它们的编号仅包括1-10。
%
% \opt{fnmark-form} 是脚注标记的格式,在此设置字体命令会覆盖 \opt{subfont/footnote} 的设置,最后一个格式命令可以带有一个参数,这个参数接受脚注编号,一般配合 \opt{fnmark-num = plain} 使用。\opt{afterfnmark} 是脚注标记后的代码,一般用于设置标记与文本间的距离。
-% \changes{v1.25p}{2021/05/12}{增加脚注样式设置选项。}
+% \changes{v1.25q}{2021/05/12}{增加脚注样式设置选项。}
% \end{function}
%
% \subsection{目录样式}
@@ -603,7 +624,7 @@
% \opt{format} 是目录中标题的格式,可以设置字体和加入垂直间距等,垂直间距最好使用无间距重合的 \tn{addvspace} 命令,带有加号的 \opt{format+} 选项用于在已有的格式命令后附加内容。\opt{indent} 是目录中标题在页面左侧的缩进距离,应该有长度单位。\opt{rule} 选项中一般应当使用 \tn{tocrule} 命令,将会在接下来介绍。\opt{numsep} 是有编号的标题在目录中编号与标题的间距。
% \changes{v1.21}{2021/01/13}{增加配置目录样式的选项。}
% \changes{v1.24}{2021/04/20}{增加目录中编号与标题的间距选项 \opt{numsep}。}
-% \changes{v1.25p}{2021/05/14}{可以分别设置图片、表格和代码目录的格式。}
+% \changes{v1.25q}{2021/05/14}{可以分别设置图片、表格和代码目录的格式。}
% \end{function}
%
% \begin{function}[added = 2021-01-13,updated = 2021-04-20]{\tocrule,\EbNumberLine}
@@ -688,7 +709,7 @@
% \tn{end}\marg{环境名}
% \end{syntax}
% \pkg{tabularray} 是一个较新的宏包,不仅提供了 \pkg{tabularx}、\pkg{multirow}、和 \pkg{booktabs} 宏包的功能,并且不依赖其它宏包与它们同时使用不会产生冲突,还实现了用简便的键值列表方式设置表格样式。目前除了表头斜线以及跨页功能存在不足,其它方面已满足对表格绝大多数格式的需求,具体用法可见宏包的说明文档。
-% \changes{v1.25p}{2021/05/17}{使用功能更便捷齐全的 \pkg{tabularray} 宏包设置表格样式。}
+% \changes{v1.25q}{2021/05/17}{使用功能更便捷齐全的 \pkg{tabularray} 宏包设置表格样式。}
% \end{function}
%
% \subsection{列表}
@@ -852,7 +873,7 @@
% \tn{qtyrange}\oarg{键值列表}\marg{数字1}\marg{数字2}\marg{单位}
% \end{syntax}
% \pkg{siunitx} 宏包的 \tn{num} 命令可以输出以科学计数法表示的数值,单位格式化命令 \tn{unit} 包含文字项目(例如字母或数字)时,使用 . 和 \~{} 放置在单元乘积中间,并使用 \_ 和 \^{} 正确放置指定的下标和上标。格式化方法可在数学和文本模式下使用。而 \tn{qty} 命令可用来输出带有单位的量,\tn{qtyrange} 可以输出带有范围和单位的量。
-% \changes{v1.25p}{2021/05/18}{\pkg{siunitx} 宏包 v3.0.0 更新后用法改变,修改相关配置选项。}
+% \changes{v1.25q}{2021/05/18}{\pkg{siunitx} 宏包 v3.0.0 更新后用法改变,修改相关配置选项。}
% \end{function}
%
% \begin{ctexexam}
@@ -969,6 +990,7 @@
% \item[ulem] 提供可断行多样式的下划线命令。
% \item[geometry] 灵活完整的页面尺寸设置。
% \item[pdfpages] 在 \LaTeX 中插入 pdf 文档。
+% \item[multicol] 混合单栏和多栏排版。
% \item[graphicx] 增强了对图形插入的支持。
% \item[fancyhdr] 广泛控制页面的页眉和页脚。
% \item[titletoc] 设置目录中的标题格式。
@@ -988,43 +1010,9 @@
% \StopEventually{}
%<*class>
\NeedsTeXFormat{LaTeX2e}[2020/10/01]
-\RequirePackage{l3keys2e,etoolbox}
-\ProvidesExplClass{easybook}{2021/05/31}{1.25p}{beta}
+\RequirePackage{l3keys2e}
+\ProvidesExplClass{easybook}{2021/06/02}{1.25q}{beta}
-\cs_generate_variant:Nn \eb_ctex_define:nn { nx }
-\cs_generate_variant:Nn \int_to_arabic:n { v }
-\cs_generate_variant:Nn \dim_add:Nn { NV }
-\cs_generate_variant:Nn \eb_put_hyperref:n { x }
-\cs_generate_variant:Nn \seq_set_from_clist:Nn { No }
-\cs_new_protected:Npn \eb_ctex_define:nn #1
- { \keys_define:nn { ctex/#1 } }
-\cs_new_protected:Npn \eb_put_ctexbook:n #1
- { \PassOptionsToClass{#1}{ctexbook} }
-\cs_new_protected:Npn \eb_patch_cmd:Nnn #1#2#3
- {
- \ctex_patch_cmd_once:NnnnTF #1 { } {#2} {#3}
- { } { \ctex_patch_failure:N #1 }
- }
-\cs_new_protected:Npn \eb_preto_cmd:Nn #1#2
- {
- \ctex_preto_cmd:NnnTF #1 { } {#2}
- { } { \ctex_patch_failure:N #1 }
- }
-\cs_new_protected:Npn \eb_appto_cmd:Nn #1#2
- {
- \ctex_appto_cmd:NnnTF #1 { } {#2}
- { } { \ctex_patch_failure:N #1 }
- }
-\cs_new_protected:Npn \eb_at_begin_environment:nn #1#2
- {
- \seq_set_from_clist:No \l__eb_env_hook_name_seq {#1}
- \seq_map_inline:Nn \l__eb_env_hook_name_seq
- { \AtBeginEnvironment{##1}{#2} }
- }
-\cs_new_protected:Npn \eb_at_end_preamble:n
- { \ctex_gadd_ltxhook:nn { env/document/before } }
-\cs_gset_eq:NN \PackageWarning \use_none:nn
-
\bool_set_false:N \l__eb_compile_draft_bool
\bool_set_false:N \l__eb_title_newline_bool
\bool_set_false:N \l__eb_font_noto_bool
@@ -1032,6 +1020,8 @@
\bool_set_true:N \l__eb_class_book_bool
\tl_new:N \g__eb_config_tl
\clist_new:N \g__eb_options_clist
+\cs_new_protected:Npn \eb_put_ctexbook:n #1
+ { \PassOptionsToClass{#1}{ctexbook} }
\keys_define:nn { easybook }
{
@@ -1087,7 +1077,250 @@
}
\ProcessKeysOptions{easybook}
+\eb_put_ctexbook:n { \g__eb_options_clist }
+\LoadClass[UTF8]{ctexbook}
+\RequirePackage{easybase}
+\ctex_at_end:n
+ {
+ \tl_if_empty:NF \g__eb_config_tl
+ { \file_input:n { \g__eb_config_tl } }
+ }
+
+\sys_if_engine_xetex:TF
+ {
+ \cs_new_eq:NN \eb_set_family:nnn \xeCJK_set_family:nnn
+ \cs_new_eq:NN \eb_switch_family:n \xeCJK_switch_family:n
+ }
+ {
+ \cs_new_eq:NN \eb_set_family:nnn \ctex_ltj_set_family:nnn
+ \cs_new_eq:NN \eb_switch_family:n \ctex_ltj_switch_family:n
+ }
+\cs_new_protected:Npn \eb_font_double_engine_set:n #1
+ {
+ \exp_args:Nc \RenewDocumentCommand {set#1font}{O{}mO{}}
+ {\use:c { eb_set#1font:nn } {##2} {##1,##3}}
+ }
+\seq_const_from_clist:Nn \c__eb_font_reset_family_seq
+ { main,sans,mono,CJKmain,CJKsans,CJKmono }
+\seq_map_inline:Nn \c__eb_font_reset_family_seq
+ { \eb_font_double_engine_set:n {#1} }
+
+\cs_new_protected:Npn \eb_setmainfont:nn #1#2
+ { \__fontspec_main_setmainfont:nn {#2} {#1} }
+\cs_new_protected:Npn \eb_setsansfont:nn #1#2
+ { \__fontspec_main_setsansfont:nn {#2} {#1} }
+\cs_new_protected:Npn \eb_setmonofont:nn #1#2
+ { \__fontspec_main_setmonofont:nn {#2} {#1} }
+\cs_new_protected:Npn \eb_setCJKmainfont:nn #1#2
+ { \eb_set_family:nnn { \CJKrmdefault } {#2} {#1} }
+\cs_new_protected:Npn \eb_setCJKsansfont:nn #1#2
+ { \eb_set_family:nnn { \CJKsfdefault } {#2} {#1} }
+\cs_new_protected:Npn \eb_setCJKmonofont:nn #1#2
+ { \eb_set_family:nnn { \CJKttdefault } {#2} {#1} }
+\cs_new_protected:Npn \eb_set_zhfont_songti:nn #1#2
+ { \eb_set_family:nnn { songti } {#2} {#1} }
+\cs_new_protected:Npn \eb_set_zhfont_heiti:nn #1#2
+ { \eb_set_family:nnn { heiti } {#2} {#1} }
+\cs_new_protected:Npn \eb_set_zhfont_kaishu:nn #1#2
+ { \eb_set_family:nnn { kaishu } {#2} {#1} }
+\cs_new_protected:Npn \eb_set_zhfont_fangsong:nn #1#2
+ { \eb_set_family:nnn { fangsong } {#2} {#1} }
+
+\tl_const:Nn \eb_option_zhfont_tl
+ { UprightFont = *,AutoFakeBold = 1.5,ItalicFont = * }
+\cs_new_protected:Npx \eb_setCJKmainfont:n #1
+ { \eb_setCJKmainfont:nn {#1} { \eb_option_zhfont_tl } }
+\cs_new_protected:Npx \eb_setCJKsansfont:n #1
+ { \eb_setCJKsansfont:nn {#1} { \eb_option_zhfont_tl } }
+\cs_new_protected:Npx \eb_setCJKmonofont:n #1
+ { \eb_setCJKmonofont:nn {#1} { \eb_option_zhfont_tl } }
+\cs_new_protected:Npx \eb_set_zhfont_songti:n #1
+ { \eb_set_zhfont_songti:nn {#1} { \eb_option_zhfont_tl } }
+\cs_new_protected:Npx \eb_set_zhfont_heiti:n #1
+ { \eb_set_zhfont_heiti:nn {#1} { \eb_option_zhfont_tl } }
+\cs_new_protected:Npx \eb_set_zhfont_kaishu:n #1
+ { \eb_set_zhfont_kaishu:nn {#1} { \eb_option_zhfont_tl } }
+\cs_new_protected:Npx \eb_set_zhfont_fangsong:n #1
+ { \eb_set_zhfont_fangsong:nn {#1} { \eb_option_zhfont_tl } }
+
+\bool_if:NT \l__eb_font_noto_bool
+ {
+ \eb_setmainfont:nn { NotoSerif }
+ {
+ Extension = .ttf,
+ UprightFont = *-Regular,
+ BoldFont = *-Bold,
+ ItalicFont = *-Italic
+ }
+ \eb_setsansfont:nn { NotoSans }
+ {
+ Extension = .ttf,
+ UprightFont = *-Regular,
+ BoldFont = *-Bold,
+ ItalicFont = *-Italic
+ }
+ \eb_setmonofont:nn { NotoSansMono }
+ {
+ Extension = .ttf,
+ UprightFont = *-Regular,
+ BoldFont = *-Bold
+ }
+ \eb_setCJKmainfont:nn { FZShuSong-Z01S }
+ {
+ UprightFont = *,
+ BoldFont = FZHei-B01S,
+ ItalicFont = FZKai-Z03S
+ }
+ \eb_setCJKsansfont:n { FZHei-B01S }
+ \eb_setCJKmonofont:n { FZFangSong-Z02S }
+ \eb_set_zhfont_songti:n { FZShuSong-Z01S }
+ \eb_set_zhfont_heiti:n { FZHei-B01S }
+ \eb_set_zhfont_kaishu:n { FZKai-Z03S }
+ \eb_set_zhfont_fangsong:n { FZFangSong-Z02S }
+ \cs_new_protected:Npn \songti { \eb_switch_family:n { songti } }
+ \cs_new_protected:Npn \heiti { \eb_switch_family:n { heiti } }
+ \cs_new_protected:Npn \kaishu { \eb_switch_family:n { kaishu } }
+ \cs_new_protected:Npn \fangsong { \eb_switch_family:n { fangsong } }
+ }
+
+\ctex_set:n
+ {
+ secnumdepth = 3,
+ tocdepth = \bool_if:NTF \l__eb_class_book_bool { 1 } { 2 },
+ part =
+ {
+ pagestyle = empty,
+ tocline = \EbNumberLine{#1}#2,
+ format = \color{ctex at frame}\sffamily\Huge,
+ aftername =
+ {
+ \bool_if:NTF \l__eb_title_newline_bool
+ { \par\nobreak } { \hspace{\ccwd} }
+ }
+ },
+ chapter =
+ {
+ % pagestyle = fancy,
+ format =
+ {
+ \color{ctex at frame}\sffamily\LARGE
+ \bool_if:NF \l__eb_title_newline_bool { \centering }
+ },
+ aftername =
+ {
+ \bool_if:NTF \l__eb_title_newline_bool
+ { \par\nobreak\vskip 1.5pc } { \hspace{\ccwd} }
+ },
+ beforeskip = -1.5ex,
+ afterskip = 3ex,
+ lotskip = 0.8pc,
+ lofskip = 0.8pc
+ },
+ section =
+ {
+ hang = true,
+ format = \color{ctex at frame}\sffamily\Large,
+ aftername = \hspace{0.5\ccwd},
+ beforeskip = 1.5ex plus .2ex minus .1ex,
+ afterskip = 1.5ex plus .2ex minus .1ex
+ },
+ subsection =
+ {
+ hang = true,
+ format = \color{ctex at frame}\sffamily\large,
+ aftername = \hspace{0.5\ccwd},
+ beforeskip = 1.3ex plus .2ex minus .1ex,
+ afterskip = 1.3ex plus .2ex minus .1ex
+ },
+ subsubsection =
+ {
+ hang = true,
+ format = \color{ctex at frame}\sffamily,
+ aftername = \hspace{0.5\ccwd},
+ beforeskip = \parskip,
+ afterskip = \parskip
+ }
+ }
+
+\bool_if:NF \l__eb_title_newline_bool
+ {
+ \ctex_set:n
+ {
+ part/hang = true,
+ chapter/hang = true
+ }
+ }
+%</class>
+%<*package>
+\NeedsTeXFormat{LaTeX2e}[2020/10/01]
+\RequirePackage{etoolbox}
+\ProvidesExplPackage{easybase}{2021/06/02}{1.25q}{beta}
+
+\cs_generate_variant:Nn \eb_ctex_define:nn { nx }
+\cs_generate_variant:Nn \int_to_arabic:n { v }
+\cs_generate_variant:Nn \dim_add:Nn { NV }
+\cs_generate_variant:Nn \eb_put_hyperref:n { x }
+\cs_generate_variant:Nn \seq_set_from_clist:Nn { No }
+\cs_generate_variant:Nn \int_compare:nNnT { oNnT }
+\cs_new_protected:Npn \eb_ctex_define:nn #1
+ { \keys_define:nn { ctex/#1 } }
+\cs_new_protected:Npn \eb_patch_cmd:Nnn #1#2#3
+ {
+ \ctex_patch_cmd_once:NnnnTF #1 { } {#2} {#3}
+ { } { \ctex_patch_failure:N #1 }
+ }
+\cs_new_protected:Npn \eb_preto_cmd:Nn #1#2
+ {
+ \ctex_preto_cmd:NnnTF #1 { } {#2}
+ { } { \ctex_patch_failure:N #1 }
+ }
+\cs_new_protected:Npn \eb_appto_cmd:Nn #1#2
+ {
+ \ctex_appto_cmd:NnnTF #1 { } {#2}
+ { } { \ctex_patch_failure:N #1 }
+ }
+\cs_new_protected:Npn \eb_at_begin_environment:nn #1#2
+ {
+ \seq_set_from_clist:No \l__eb_env_hook_name_seq {#1}
+ \seq_map_inline:Nn \l__eb_env_hook_name_seq
+ { \AtBeginEnvironment{##1}{#2} }
+ }
+\NewDocumentCommand{\eb at package@load}{O{}m}
+ {
+ \seq_set_from_clist:No \l__eb_package_name_seq {#2}
+ \int_compare:oNnT
+ { \seq_count:N \l__eb_package_name_seq } = { 1 }
+ { \PassOptionsToPackage{#1}{#2} }
+ \seq_map_inline:Nn \l__eb_package_name_seq
+ { \@ifpackageloaded{##1}{}{\RequirePackage{##1}} }
+ }
+\cs_new_protected:Npn \eb_at_end_preamble:n
+ { \ctex_gadd_ltxhook:nn { env/document/before } }
+\cs_gset_eq:NN \PackageWarning \use_none:nn
+
+\bool_if_exist:NF \l__eb_class_book_bool
+ { \bool_set_true:N \l__eb_class_book_bool }
+\bool_if_exist:NF \l__eb_page_twoside_bool
+ { \bool_set_true:N \l__eb_page_twoside_bool }
+\bool_if_exist:NF \l__eb_compile_draft_bool
+ { \bool_set_false:N \l__eb_compile_draft_bool }
+
+\keys_define:nn { easybase }
+ {
+ draft .code:n =
+ { \bool_set_true:N \l__eb_compile_draft_bool },
+
+ class .choice:,
+ class .value_required:n = true,
+ class/book .code:n = { },
+ class/article .code:n =
+ {
+ \bool_set_false:N \l__eb_class_book_bool
+ \bool_set_false:N \l__eb_page_twoside_bool
+ }
+ }
+
\clist_map_inline:nn
{
{ svgnames } { xcolor },
@@ -1098,13 +1331,12 @@
{ shortlabels,inline } { enumitem },
{ many } { tcolorbox },
{ xindy } { imakeidx },
- { CJKmath = true } { xeCJK },
+ { CJKmath } { xeCJK },
{ no-math } { fontspec },
{ upint } { newtxmath }
}
{ \PassOptionsToPackage #1 }
-\eb_put_ctexbook:n { \g__eb_options_clist }
-\LoadClass[UTF8]{ctexbook}
+\ProcessKeysOptions{easybase}
\bool_new:N \l__eb_multoc_bool
\bool_new:N \l__eb_uppercase_bool
@@ -1137,7 +1369,7 @@
withpart .bool_set:N = \l__eb_chap_withpart_bool,
withpart .default:n = true,
withpart .initial:n = false,
- rulewidth .dim_set:N = \l__eb_rule_width_dim,
+ rulewidth .dim_set:N = \eb at rule@width at dim,
rulewidth .initial:n = 0.75pt,
uppercase .bool_set:N = \l__eb_uppercase_bool,
uppercase .default:n = true,
@@ -1167,7 +1399,7 @@
number-sep .initial:n = { . }
}
-\RequirePackage
+\eb at package@load
{
xcolor,
footmisc,setspace,
@@ -1174,24 +1406,18 @@
amsmath,amsthm,thmtools,
chemformula,siunitx,ulem,pifont,
geometry,marginnote,nccfoots,
- pdfpages,graphicx,
+ pdfpages,graphicx,multicol,
fancyhdr,titletoc,caption,
tabularray,
enumitem,
listings
}
-\ctex_at_end:n
- {
- \tl_if_empty:NF \g__eb_config_tl
- { \file_input:n { \g__eb_config_tl } }
- }
-
\cs_new_protected:Npn \eb_package_later_bool:nn #1#2
{
\@ifpackagelater{#1}{#2}
- {}{\msg_warning:nnn { easybook } { package-old } {#1}}
+ {}{\msg_warning:nnn { easybase } { package-old } {#1}}
}
-\msg_new:nnn { easybook } { package-old }
+\msg_new:nnn { easybase } { package-old }
{
Package~#1~has~been~out~of~date. \\
Some~problems~or~errors~may~occur \\
@@ -1210,109 +1436,12 @@
}
{ \eb_package_later_bool:nn #1 }
-\sys_if_engine_xetex:TF
- {
- \cs_new_eq:NN \eb_set_family:nnn \xeCJK_set_family:nnn
- \cs_new_eq:NN \eb_switch_family:n \xeCJK_switch_family:n
- }
- {
- \cs_new_eq:NN \eb_set_family:nnn \ctex_ltj_set_family:nnn
- \cs_new_eq:NN \eb_switch_family:n \ctex_ltj_switch_family:n
- }
-\cs_new_protected:Npn \eb_font_double_engine_set:n #1
- {
- \exp_args:Nc \RenewDocumentCommand {set#1font}{O{}mO{}}
- {\use:c { eb_set#1font:nn } {##2} {##1,##3}}
- }
-\seq_const_from_clist:Nn \c__eb_font_reset_family_seq
- { main,sans,mono,CJKmain,CJKsans,CJKmono }
-\seq_map_inline:Nn \c__eb_font_reset_family_seq
- { \eb_font_double_engine_set:n {#1} }
-
-\cs_new_protected:Npn \eb_setmainfont:nn #1#2
- { \__fontspec_main_setmainfont:nn {#2} {#1} }
-\cs_new_protected:Npn \eb_setsansfont:nn #1#2
- { \__fontspec_main_setsansfont:nn {#2} {#1} }
-\cs_new_protected:Npn \eb_setmonofont:nn #1#2
- { \__fontspec_main_setmonofont:nn {#2} {#1} }
-\cs_new_protected:Npn \eb_setCJKmainfont:nn #1#2
- { \eb_set_family:nnn { \CJKrmdefault } {#2} {#1} }
-\cs_new_protected:Npn \eb_setCJKsansfont:nn #1#2
- { \eb_set_family:nnn { \CJKsfdefault } {#2} {#1} }
-\cs_new_protected:Npn \eb_setCJKmonofont:nn #1#2
- { \eb_set_family:nnn { \CJKttdefault } {#2} {#1} }
-\cs_new_protected:Npn \eb_set_zhfont_songti:nn #1#2
- { \eb_set_family:nnn { songti } {#2} {#1} }
-\cs_new_protected:Npn \eb_set_zhfont_heiti:nn #1#2
- { \eb_set_family:nnn { heiti } {#2} {#1} }
-\cs_new_protected:Npn \eb_set_zhfont_kaishu:nn #1#2
- { \eb_set_family:nnn { kaishu } {#2} {#1} }
-\cs_new_protected:Npn \eb_set_zhfont_fangsong:nn #1#2
- { \eb_set_family:nnn { fangsong } {#2} {#1} }
-
-\tl_const:Nn \eb_option_zhfont_tl
- { UprightFont = *,AutoFakeBold = 1.5,ItalicFont = * }
-\cs_new_protected:Npx \eb_setCJKmainfont:n #1
- { \eb_setCJKmainfont:nn {#1} { \eb_option_zhfont_tl } }
-\cs_new_protected:Npx \eb_setCJKsansfont:n #1
- { \eb_setCJKsansfont:nn {#1} { \eb_option_zhfont_tl } }
-\cs_new_protected:Npx \eb_setCJKmonofont:n #1
- { \eb_setCJKmonofont:nn {#1} { \eb_option_zhfont_tl } }
-\cs_new_protected:Npx \eb_set_zhfont_songti:n #1
- { \eb_set_zhfont_songti:nn {#1} { \eb_option_zhfont_tl } }
-\cs_new_protected:Npx \eb_set_zhfont_heiti:n #1
- { \eb_set_zhfont_heiti:nn {#1} { \eb_option_zhfont_tl } }
-\cs_new_protected:Npx \eb_set_zhfont_kaishu:n #1
- { \eb_set_zhfont_kaishu:nn {#1} { \eb_option_zhfont_tl } }
-\cs_new_protected:Npx \eb_set_zhfont_fangsong:n #1
- { \eb_set_zhfont_fangsong:nn {#1} { \eb_option_zhfont_tl } }
-
-\bool_if:NT \l__eb_font_noto_bool
- {
- \eb_setmainfont:nn { NotoSerif }
- {
- Extension = .ttf,
- UprightFont = *-Regular,
- BoldFont = *-Bold,
- ItalicFont = *-Italic
- }
- \eb_setsansfont:nn { NotoSans }
- {
- Extension = .ttf,
- UprightFont = *-Regular,
- BoldFont = *-Bold,
- ItalicFont = *-Italic
- }
- \eb_setmonofont:nn { NotoSansMono }
- {
- Extension = .ttf,
- UprightFont = *-Regular,
- BoldFont = *-Bold
- }
- \eb_setCJKmainfont:nn { FZShuSong-Z01S }
- {
- UprightFont = *,
- BoldFont = FZHei-B01S,
- ItalicFont = FZKai-Z03S
- }
- \eb_setCJKsansfont:n { FZHei-B01S }
- \eb_setCJKmonofont:n { FZFangSong-Z02S }
- \eb_set_zhfont_songti:n { FZShuSong-Z01S }
- \eb_set_zhfont_heiti:n { FZHei-B01S }
- \eb_set_zhfont_kaishu:n { FZKai-Z03S }
- \eb_set_zhfont_fangsong:n { FZFangSong-Z02S }
- \cs_new_protected:Npn \songti { \eb_switch_family:n { songti } }
- \cs_new_protected:Npn \heiti { \eb_switch_family:n { heiti } }
- \cs_new_protected:Npn \kaishu { \eb_switch_family:n { kaishu } }
- \cs_new_protected:Npn \fangsong { \eb_switch_family:n { fangsong } }
- }
-
\includepdfset{fitpaper = true}
\geometry
{
vmargin = 2.54cm,
hmargin = 3.17cm,
- columnsep = 2\ccwd,
+ columnsep = \ccwd,
headheight = 2.04cm,
headsep = 0.5cm,
footskip = 0.79cm,
@@ -1323,6 +1452,9 @@
\clist_new:N \g__eb_geometry_clist
\eb_ctex_define:nn { geoset }
{
+ headruleskip .tl_set:N = \headruleskip,
+ headruleskip .initial:n = 1.5pt,
+ footruleskip .tl_set:N = \footruleskip,
unknown .code:n =
{
\clist_gput_right:Nx \g__eb_geometry_clist
@@ -1342,13 +1474,13 @@
{ \hbox:n { }\thispagestyle{#1}\clearpage }
}
}
-\RenewDocumentCommand{\frontmatter}{sO{Roman}}
+\DeclareDocumentCommand{\frontmatter}{sO{Roman}}
{
\IfBooleanTF{#1}{\clearpage}{\cleardoublepage}
\boolfalse{@mainmatter}
\pagenumbering{#2}
}
-\RenewDocumentCommand{\mainmatter}{s}
+\DeclareDocumentCommand{\mainmatter}{s}
{
\IfBooleanTF{#1}{\clearpage}{\cleardoublepage}
\booltrue{@mainmatter}
@@ -1429,8 +1561,8 @@
headrule .initial:n =
{
\group_begin:
- \color{ctex at frame}\vspace*{1.5pt}
- \hrule width \textwidth height \l__eb_rule_width_dim
+ \color{ctex at frame}
+ \hrule\@width\textwidth\@height\eb at rule@width at dim
\group_end:
},
footrule .tl_gset:N = \footrule,
@@ -1440,7 +1572,7 @@
{
\group_begin:
\color{ctex at frame}
- \hrule width 0.35\columnwidth height \l__eb_rule_width_dim
+ \hrule\@width 0.35\columnwidth\@height\eb at rule@width at dim
\vspace*{2.6pt}
\group_end:
},
@@ -1674,7 +1806,7 @@
figure/#1 = ##1,
table/#1 = ##1,
lstlisting/#1 = ##1
- }
+ }
}
}
@@ -1686,6 +1818,12 @@
\hspace{\use:c { eb at toc@#1 at numsep }}
}{}
}
+\cs_if_exist:NF \chapter
+ {
+ \newcounter{chapter}
+ \bool_set_false:N \l__eb_class_book_bool
+ \ctex_define:n { chapter/tocline .code:n = { } }
+ }
\newbool{eb at titletoc@hang at fix}
\eb_ctex_define:nn { tocset }
{
@@ -1863,29 +2001,32 @@
}
}
}
-
-\eb_appto_cmd:Nn \@chapter
+\cs_if_exist:NT \chapter
{
- \skip_if_eq:nnF { \l__eb_toc_lolskip_skip } { \c_zero_skip }
+ \eb_appto_cmd:Nn \@chapter
{
- \addtocontents{lol}
- {\protect\addvspace{\skip_use:N \l__eb_toc_lolskip_skip}}
+ \skip_if_eq:nnF { \l__eb_toc_lolskip_skip } { \c_zero_skip }
+ {
+ \addtocontents{lol}
+ {\protect\addvspace{\skip_use:N \l__eb_toc_lolskip_skip}}
+ }
+ \bool_if:NF \l__eb_class_book_bool
+ { \msg_error:nn { easybase } { no-chapter } }
}
- \bool_if:NF \l__eb_class_book_bool
- { \msg_error:nn { easybook } { no-chapter } }
+ \eb_appto_cmd:Nn \@schapter
+ {
+ \bool_if:NF \l__eb_class_book_bool
+ { \msg_error:nn { easybase } { no-chapter } }
+ }
}
-\eb_appto_cmd:Nn \@schapter
+\msg_new:nnn { easybase } { no-chapter }
{
- \bool_if:NF \l__eb_class_book_bool
- { \msg_error:nn { easybook } { no-chapter } }
- }
-\msg_new:nnn { easybook } { no-chapter }
- {
Your~document~class~is~in~article~mode. \\
The~\string\chapter\space~command~will~not~be~used.
}
-\tl_set:Nn \l__eb_toc_type_tl { book }
+\tl_set:Nx \l__eb_toc_type_tl
+ { \bool_if:NTF \l__eb_class_book_bool { book } { article } }
\tl_new:N \eb at bitoc@title
\keys_define:nn { eb/listoc }
{
@@ -1894,7 +2035,9 @@
multoc .bool_set:N = \l__eb_multoc_bool,
multoc .default:n = true,
multoc .initial:n = false,
- title .code:n = \eb_assign_toc_title:n {#1}
+ title .code:n = \eb_assign_toc_title:n {#1},
+ columns .int_set:N = \l__eb_toc_columns_int,
+ columns .initial:n = 2
}
\bool_if:NTF \l__eb_class_book_bool
{ \keys_define:nn { } { eb/listoc .inherit:n = ctex/chapter } }
@@ -1978,24 +2121,11 @@
}
\cs_new_protected:Npn \eb_multoc_pre_bool:
{
- \bool_if:NTF \l__eb_class_book_bool
- {
- \ifbool{@twocolumn}
- {
- \booltrue{@restonecol}
- \bool_if:NF \l__eb_multoc_bool { \onecolumn }
- }{
- \boolfalse{@restonecol}
- \bool_if:NT \l__eb_multoc_bool { \twocolumn }
- }
- }
- { \tl_set:Nn \l__eb_toc_type_tl { article } }
+ \bool_if:NT \l__eb_multoc_bool
+ { \begin{multicols}{\int_use:N \l__eb_toc_columns_int} }
}
\cs_new_protected:Npn \eb_multoc_post_bool:
- {
- \bool_if:NT \l__eb_class_book_bool
- { \ifbool{@restonecol}{\twocolumn}{\onecolumn} }
- }
+ { \bool_if:NT \l__eb_multoc_bool { \end{multicols} } }
\RenewDocumentCommand{\tableofcontents}{t+oD(){}}
{
\group_begin:
@@ -2002,8 +2132,8 @@
\tl_set_eq:NN \eb at toc@title \contentsname
\tl_set:Nn \eb at bitoc@title { Contents }
\IfValueT{#2}{\keys_set:nn { eb/listoc } {#2}}
+ \eb_title_mark_notoc:n { \eb at toc@title }
\eb_multoc_pre_bool:
- \eb_title_mark_notoc:n { \eb at toc@title }
\vspace*{\dim_use:N \l__eb_toc_offset_dim}
\@starttoc{toc}#3
\IfBooleanT{#1}
@@ -2020,8 +2150,8 @@
\group_begin:
\tl_set_eq:NN \eb at toc@title \listfigurename
\IfValueT{#3}{\keys_set:nn { eb/listoc } {#3}}
+ \eb_title_number_intoc_bool:nn {#2} {#1}
\eb_multoc_pre_bool:
- \eb_title_number_intoc_bool:nn {#2} {#1}
\dim_add:NV \l__eb_toc_offset_dim \l__eb_toc_figure_offset_dim
\vspace*{\dim_use:N \l__eb_toc_offset_dim}
\@starttoc{lof}
@@ -2033,8 +2163,8 @@
\group_begin:
\tl_set_eq:NN \eb at toc@title \listtablename
\IfValueT{#3}{\keys_set:nn { eb/listoc } {#3}}
+ \eb_title_number_intoc_bool:nn {#2} {#1}
\eb_multoc_pre_bool:
- \eb_title_number_intoc_bool:nn {#2} {#1}
\dim_add:NV \l__eb_toc_offset_dim \l__eb_toc_table_offset_dim
\vspace*{\dim_use:N \l__eb_toc_offset_dim}
\@starttoc{lot}
@@ -2046,8 +2176,8 @@
\group_begin:
\tl_set_eq:NN \eb at toc@title \lstlistlistingname
\IfValueT{#3}{\keys_set:nn { eb/listoc } {#3}}
+ \eb_title_number_intoc_bool:nn {#2} {#1}
\eb_multoc_pre_bool:
- \eb_title_number_intoc_bool:nn {#2} {#1}
\dim_add:NV \l__eb_toc_offset_dim \l__eb_toc_lstlisting_offset_dim
\vspace*{\dim_use:N \l__eb_toc_offset_dim}
\@starttoc{lol}
@@ -2189,7 +2319,7 @@
\c__eb_subfont_math_charter_tl
{ \eb_put_newtxmath:n { charter,noOT1 } }
}
- { \RequirePackage{newtxmath,bm} }
+ { \eb at package@load{newtxmath,bm} }
}
\fp_new:N \l__eb_spread_line_fp
@@ -2438,6 +2568,7 @@
label = (\Alph*),
column-sep = \ccwd,
item-indent = 2\ccwd,
+ label-offset = 0.5\ccwd,
label-width = 1.5\ccwd,
after-item-skip = 0ex plus .1ex
}
@@ -2545,7 +2676,7 @@
boxsep = 0pt,
arc = 0pt,
fonttitle = \sffamily,
- boxrule = \l__eb_rule_width_dim
+ boxrule = \eb at rule@width at dim
}
\newtcbox[auto~counter]{\eb at exercise@box}[1]{tc-exercise,#1}
\NewDocumentEnvironment{outline}{O{}D(){\abstractname}o+b}
@@ -2632,7 +2763,7 @@
{
standard~jigsaw,
nobeforeafter,tcbox~raise~base,
- top = 1.25pt,bottom = 1.25pt,left = 1.25pt,right = 1.25pt,
+ top = 1.25qt,bottom = 1.25qt,left = 1.25qt,right = 1.25qt,
boxrule = 0.75pt,arc = 1pt,
colback = #1,opacityback = 0.12,colframe = #1,#3
}{#2}
@@ -2697,9 +2828,11 @@
\group_begin:
\tl_set_eq:NN \eb at toc@title \bibname
\IfValueT{##3}{ \keys_set:nn { eb/listoc } {##3} }
- \eb_multoc_pre_bool:
\tl_set:Nn \bibsection
- { \eb_title_number_intoc_bool:nn {##2} {##1} }
+ {
+ \eb_title_number_intoc_bool:nn {##2} {##1}
+ \eb_multoc_pre_bool:
+ }
\exp_args:NV \bibliography \l__eb_bib_datafile_tl
\eb_multoc_post_bool:
\group_end:
@@ -2735,12 +2868,12 @@
{
\bool_if:NTF \l__eb_backend_bibtex_bool
{
- \RequirePackage[sort&compress]{natbib}
+ \eb at package@load[sort&compress]{natbib}
\EbBibtexSet
}
{
\EbBiblatexPreset
- \RequirePackage{biblatex}
+ \eb at package@load{biblatex}
\EbBiblatexPostset
}
}
@@ -2799,7 +2932,7 @@
aboveskip = 1.5ex plus .2ex minus .1ex,
belowskip = 0.55ex plus .2ex minus .1ex,
keepspaces = true,
- framerule = \l__eb_rule_width_dim,
+ framerule = \eb at rule@width at dim,
columns = flexible,
abovecaptionskip = -1ex,
belowcaptionskip = 1.5ex
@@ -2931,7 +3064,7 @@
}
\ctex_at_end_preamble:n
{
- \RequirePackage{hyperref}
+ \eb at package@load{hyperref}
\urlstyle{same}
\eb_allow_urlbreak:
\ctex_hypersetup:n { pdfstartview = FitH }
@@ -2969,73 +3102,5 @@
\labelformat{section}{Section~#1}
\labelformat{subsection}{Subsection~#1}
}
-
-\ctex_set:n
- {
- secnumdepth = 3,
- tocdepth = \bool_if:NTF \l__eb_class_book_bool { 1 } { 2 },
- part =
- {
- pagestyle = empty,
- tocline = \EbNumberLine{#1}#2,
- format = \color{ctex at frame}\sffamily\Huge,
- aftername =
- {
- \bool_if:NTF \l__eb_title_newline_bool
- { \par\nobreak } { \hspace{\ccwd} }
- }
- },
- chapter =
- {
- % pagestyle = fancy,
- format =
- {
- \color{ctex at frame}\sffamily\LARGE
- \bool_if:NF \l__eb_title_newline_bool { \centering }
- },
- aftername =
- {
- \bool_if:NTF \l__eb_title_newline_bool
- { \par\nobreak\vskip 1.5pc } { \hspace{\ccwd} }
- },
- beforeskip = -1.5ex,
- afterskip = 3ex,
- lotskip = 0.8pc,
- lofskip = 0.8pc
- },
- section =
- {
- hang = true,
- format = \color{ctex at frame}\sffamily\Large,
- aftername = \hspace{0.5\ccwd},
- beforeskip = 1.5ex plus .2ex minus .1ex,
- afterskip = 1.5ex plus .2ex minus .1ex
- },
- subsection =
- {
- hang = true,
- format = \color{ctex at frame}\sffamily\large,
- aftername = \hspace{0.5\ccwd},
- beforeskip = 1.3ex plus .2ex minus .1ex,
- afterskip = 1.3ex plus .2ex minus .1ex
- },
- subsubsection =
- {
- hang = true,
- format = \color{ctex at frame}\sffamily,
- aftername = \hspace{0.5\ccwd},
- beforeskip = \parskip,
- afterskip = \parskip
- }
- }
-
-\bool_if:NF \l__eb_title_newline_bool
- {
- \ctex_set:n
- {
- part/hang = true,
- chapter/hang = true
- }
- }
-%</class>
+%</package>
\endinput
\ No newline at end of file
Modified: trunk/Master/texmf-dist/source/latex/easybook/easybook.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex/easybook/easybook.ins 2021-06-02 20:58:00 UTC (rev 59433)
+++ trunk/Master/texmf-dist/source/latex/easybook/easybook.ins 2021-06-02 20:58:14 UTC (rev 59434)
@@ -20,6 +20,10 @@
https://creativecommons.org/licenses/by/4.0/legalcode
\endpreamble
-\generate{\file{\jobname.cls}{\from{\jobname.dtx}{class}}}
+\generate
+ {
+ \file{easybook.cls}{\from{\jobname.dtx}{class}}
+ \file{easybase.sty}{\from{\jobname.dtx}{package}}
+ }
\endbatchfile
\ No newline at end of file
Added: trunk/Master/texmf-dist/tex/latex/easybook/easybase.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/easybook/easybase.sty (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/easybook/easybase.sty 2021-06-02 20:58:14 UTC (rev 59434)
@@ -0,0 +1,1865 @@
+%%
+%% This is file `easybase.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% easybook.dtx (with options: `package')
+%% Copyright (C) 2021 by Qu Yi <quee123 at foxmail.com>
+%%
+%% 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
+\NeedsTeXFormat{LaTeX2e}[2020/10/01]
+\RequirePackage{etoolbox}
+\ProvidesExplPackage{easybase}{2021/06/02}{1.25q}{beta}
+
+\cs_generate_variant:Nn \eb_ctex_define:nn { nx }
+\cs_generate_variant:Nn \int_to_arabic:n { v }
+\cs_generate_variant:Nn \dim_add:Nn { NV }
+\cs_generate_variant:Nn \eb_put_hyperref:n { x }
+\cs_generate_variant:Nn \seq_set_from_clist:Nn { No }
+\cs_generate_variant:Nn \int_compare:nNnT { oNnT }
+\cs_new_protected:Npn \eb_ctex_define:nn #1
+ { \keys_define:nn { ctex/#1 } }
+\cs_new_protected:Npn \eb_patch_cmd:Nnn #1#2#3
+ {
+ \ctex_patch_cmd_once:NnnnTF #1 { } {#2} {#3}
+ { } { \ctex_patch_failure:N #1 }
+ }
+\cs_new_protected:Npn \eb_preto_cmd:Nn #1#2
+ {
+ \ctex_preto_cmd:NnnTF #1 { } {#2}
+ { } { \ctex_patch_failure:N #1 }
+ }
+\cs_new_protected:Npn \eb_appto_cmd:Nn #1#2
+ {
+ \ctex_appto_cmd:NnnTF #1 { } {#2}
+ { } { \ctex_patch_failure:N #1 }
+ }
+\cs_new_protected:Npn \eb_at_begin_environment:nn #1#2
+ {
+ \seq_set_from_clist:No \l__eb_env_hook_name_seq {#1}
+ \seq_map_inline:Nn \l__eb_env_hook_name_seq
+ { \AtBeginEnvironment{##1}{#2} }
+ }
+\NewDocumentCommand{\eb at package@load}{O{}m}
+ {
+ \seq_set_from_clist:No \l__eb_package_name_seq {#2}
+ \int_compare:oNnT
+ { \seq_count:N \l__eb_package_name_seq } = { 1 }
+ { \PassOptionsToPackage{#1}{#2} }
+ \seq_map_inline:Nn \l__eb_package_name_seq
+ { \@ifpackageloaded{##1}{}{\RequirePackage{##1}} }
+ }
+\cs_new_protected:Npn \eb_at_end_preamble:n
+ { \ctex_gadd_ltxhook:nn { env/document/before } }
+\cs_gset_eq:NN \PackageWarning \use_none:nn
+
+\bool_if_exist:NF \l__eb_class_book_bool
+ { \bool_set_true:N \l__eb_class_book_bool }
+\bool_if_exist:NF \l__eb_page_twoside_bool
+ { \bool_set_true:N \l__eb_page_twoside_bool }
+\bool_if_exist:NF \l__eb_compile_draft_bool
+ { \bool_set_false:N \l__eb_compile_draft_bool }
+
+\keys_define:nn { easybase }
+ {
+ draft .code:n =
+ { \bool_set_true:N \l__eb_compile_draft_bool },
+
+ class .choice:,
+ class .value_required:n = true,
+ class/book .code:n = { },
+ class/article .code:n =
+ {
+ \bool_set_false:N \l__eb_class_book_bool
+ \bool_set_false:N \l__eb_page_twoside_bool
+ }
+ }
+
+\clist_map_inline:nn
+ {
+ { svgnames } { xcolor },
+ { stable } { footmisc },
+ { normalem } { ulem },
+ { protrusion = false } { microtype },
+ { list = off } { bicaption },
+ { shortlabels,inline } { enumitem },
+ { many } { tcolorbox },
+ { xindy } { imakeidx },
+ { CJKmath } { xeCJK },
+ { no-math } { fontspec },
+ { upint } { newtxmath }
+ }
+ { \PassOptionsToPackage #1 }
+\ProcessKeysOptions{easybase}
+
+\bool_new:N \l__eb_multoc_bool
+\bool_new:N \l__eb_uppercase_bool
+\bool_new:N \l__eb_chap_withpart_bool
+\tl_new:N \l__eb_foot_numparent_choice_tl
+
+\seq_const_from_clist:Nn \c__eb_options_path_seq
+ {
+ style,subfont,spread,
+ refset,bibset,thmset,
+ geoset,hdrset,tocset
+ }
+\seq_map_inline:Nn \c__eb_options_path_seq
+ {
+ \ctex_define:n { #1 .meta:nn = { ctex/#1 } {##1} }
+ \cs_new:cpn {#1} ##1 { \keys_set:nn { ctex/#1 } {##1} }
+ }
+\keys_define:nn { } { ctex/link .inherit:n = ctex/refset }
+\cs_set_eq:NN \link \refset
+\ctex_define:n
+ {
+ link .meta:nn = { ctex/link } {#1},
+ lstlistlistingname .tl_set:N = \lstlistlistingname,
+ lstlistingname .tl_set:N = \lstlistingname
+ }
+\eb_ctex_define:nn { style }
+ {
+ multoc .bool_set:N = \l__eb_multoc_bool,
+ multoc .default:n = true,
+ withpart .bool_set:N = \l__eb_chap_withpart_bool,
+ withpart .default:n = true,
+ withpart .initial:n = false,
+ rulewidth .dim_set:N = \eb at rule@width at dim,
+ rulewidth .initial:n = 0.75pt,
+ uppercase .bool_set:N = \l__eb_uppercase_bool,
+ uppercase .default:n = true,
+ uppercase .initial:n = true,
+ figurepath .tl_set:N = \l_eb_graphics_path_tl,
+
+ footwith .choices:nn =
+ { part,page,chapter }
+ {
+ \tl_set_eq:NN
+ \l__eb_foot_numparent_choice_tl \l_keys_choice_tl
+ },
+ footwith .value_required:n = true,
+ footwith .initial:n = chapter,
+
+ figure-sep .tl_set:N = \l__eb_figure_separator_tl,
+ table-sep .tl_set:N = \l__eb_table_separator_tl,
+ listing-sep .tl_set:N = \l__eb_lstlisting_separator_tl,
+ equation-sep .tl_set:N = \l__eb_equation_separator_tl,
+ number-sep .meta:n =
+ {
+ figure-sep = #1,
+ table-sep = #1,
+ listing-sep = #1,
+ equation-sep = #1
+ },
+ number-sep .initial:n = { . }
+ }
+
+\eb at package@load
+ {
+ xcolor,
+ footmisc,setspace,
+ amsmath,amsthm,thmtools,
+ chemformula,siunitx,ulem,pifont,
+ geometry,marginnote,nccfoots,
+ pdfpages,graphicx,multicol,
+ fancyhdr,titletoc,caption,
+ tabularray,
+ enumitem,
+ listings
+ }
+\cs_new_protected:Npn \eb_package_later_bool:nn #1#2
+ {
+ \@ifpackagelater{#1}{#2}
+ {}{\msg_warning:nnn { easybase } { package-old } {#1}}
+ }
+\msg_new:nnn { easybase } { package-old }
+ {
+ Package~#1~has~been~out~of~date. \\
+ Some~problems~or~errors~may~occur \\
+ if~you~continue~compiling. \\\\
+ Please~update~your~macro~package~from~CTAN.
+ }
+\clist_map_inline:nn
+ {
+ { expl3 } { 2020/10/27 },
+ { xparse } { 2020/10/27 },
+ { l3keys2e } { 2020/10/27 },
+ { ctex } { 2021/03/14 },
+ { thmtools } { 2020/08/01 },
+ { caption } { 2020/08/24 },
+ { siunitx } { 2021/05/17 }
+ }
+ { \eb_package_later_bool:nn #1 }
+
+\includepdfset{fitpaper = true}
+\geometry
+ {
+ vmargin = 2.54cm,
+ hmargin = 3.17cm,
+ columnsep = \ccwd,
+ headheight = 2.04cm,
+ headsep = 0.5cm,
+ footskip = 0.79cm,
+ footnotesep = 0.5cm,
+ marginparsep = 8pt,
+ marginparwidth = 2.54cm
+ }
+\clist_new:N \g__eb_geometry_clist
+\eb_ctex_define:nn { geoset }
+ {
+ headruleskip .tl_set:N = \headruleskip,
+ headruleskip .initial:n = 1.5pt,
+ footruleskip .tl_set:N = \footruleskip,
+ unknown .code:n =
+ {
+ \clist_gput_right:Nx \g__eb_geometry_clist
+ {
+ \l_keys_key_str
+ \tl_if_empty:NF \l_keys_value_tl { = {#1} }
+ }
+ }
+ }
+
+\RenewDocumentCommand{\cleardoublepage}{O{empty}}
+ {
+ \clearpage
+ \bool_if:NT \l__eb_page_twoside_bool
+ {
+ \int_if_odd:nF { \c at page }
+ { \hbox:n { }\thispagestyle{#1}\clearpage }
+ }
+ }
+\DeclareDocumentCommand{\frontmatter}{sO{Roman}}
+ {
+ \IfBooleanTF{#1}{\clearpage}{\cleardoublepage}
+ \boolfalse{@mainmatter}
+ \pagenumbering{#2}
+ }
+\DeclareDocumentCommand{\mainmatter}{s}
+ {
+ \IfBooleanTF{#1}{\clearpage}{\cleardoublepage}
+ \booltrue{@mainmatter}
+ \pagenumbering{arabic}
+ }
+\seq_const_from_clist:Nn \c__eb_mark_title_level_seq
+ { chapter,section,subsection }
+\seq_map_inline:Nn \c__eb_mark_title_level_seq
+ {
+ \exp_args:Nc \NewDocumentCommand { eb at mark@#1 at label@layout }
+ {O{\use:c { CTEXthe#1 }}m}
+ {\tl_set:cn { eb at mark@#1 at label } {##1##2}}
+ \cs_new:cpn { eb_mark_#1_number_bool:n } ##1
+ {
+ \tl_if_in:nnTF {##1} { [ }
+ { \use:c { eb at mark@#1 at label@layout } ##1 }
+ { \use:c { eb at mark@#1 at label@layout } {##1} }
+ }
+ }
+
+\cs_gset_eq:NN \easyhead \fancyhead
+\cs_gset_eq:NN \easyfoot \fancyfoot
+\eb_ctex_define:nn { hdrset }
+ {
+ head-foot .tl_set:N = \l__eb_fancyhf_content_tl,
+ head-foot .initial:n =
+ {
+ \bool_if:NTF \l__eb_page_twoside_bool
+ {
+ \easyhead[EC]{\color{ctex at frame}\kaishu\leftmark}
+ \easyhead[OC]{\color{ctex at frame}\kaishu\rightmark}
+ \easyhead[EL,OR]{\color{ctex at frame}\thepage}
+ }
+ {
+ \easyhead[L]{\color{ctex at frame}\kaishu\leftmark}
+ \easyhead[R]{\color{ctex at frame}\thepage}
+ }
+ },
+
+ chap-mark .cs_set:Np = \eb_fancyhf_chapter_mark:n #1,
+ chap-mark .initial:n =
+ {
+ \int_compare:nNnT { \c at secnumdepth } > { -1 }
+ {
+ \ifbool{@mainmatter}
+ {
+ \int_if_odd:nT { \CTEX at chapter@numbering }
+ { \eb at mark@chapter at label }
+ }{}
+ }#1
+ },
+ sec-mark .cs_set:Np = \eb_fancyhf_section_mark:n #1,
+ sec-mark .initial:n =
+ {
+ \int_compare:nNnT { \c at secnumdepth } > { 0 }
+ {
+ \int_if_odd:nT { \CTEX at section@numbering }
+ { \eb at mark@section at label }
+ }#1
+ },
+ subsec-mark .cs_set:Np = \eb_fancyhf_subsection_mark:n #1,
+ subsec-mark .initial:n =
+ {
+ \int_compare:nNnT { \c at secnumdepth } > { 1 }
+ {
+ \int_if_odd:nT { \CTEX at subsection@numbering }
+ { \eb at mark@subsection at label }
+ }#1
+ },
+ chap-label .code:n = \eb_mark_chapter_number_bool:n {#1},
+ chap-label .initial:n = \hspace{\ccwd},
+ sec-label .code:n = \eb_mark_section_number_bool:n {#1},
+ sec-label .initial:n = \hspace{0.5\ccwd},
+ subsec-label .code:n = \eb_mark_subsection_number_bool:n {#1},
+ subsec-label .initial:n = \hspace{0.5\ccwd},
+
+ headrule .tl_gset:N = \headrule,
+ headrule .initial:n =
+ {
+ \group_begin:
+ \color{ctex at frame}
+ \hrule\@width\textwidth\@height\eb at rule@width at dim
+ \group_end:
+ },
+ footrule .tl_gset:N = \footrule,
+ footrule .initial:n = { },
+ footnoterule .tl_gset:N = \footnoterule,
+ footnoterule .initial:n =
+ {
+ \group_begin:
+ \color{ctex at frame}
+ \hrule\@width 0.35\columnwidth\@height\eb at rule@width at dim
+ \vspace*{2.6pt}
+ \group_end:
+ },
+
+ fnmargin .dim_set:N = \footnotemargin,
+ fnmargin .initial:n = 0.75\ccwd,
+ fnparskip .tl_set:N = \hangfootparskip,
+ fnparskip .initial:n = 0ex,
+ fnparindent .tl_set:N = \hangfootparindent,
+ fnparindent .initial:n = 2\ccwd,
+
+ fnhang .bool_set:N = \l__eb_footnote_hang_bool,
+ fnhang .default:n = true,
+ fnhang .initial:n = true,
+ fnmark-pos .tl_set:N = \l__eb_fnmark_position_tl,
+ fnmark-pos .initial:n = super,
+ afterfnmark .tl_set:N = \l__eb_fnmark_after_tl,
+ afterfnmark .initial:n =
+ { \tl_if_eq:NnF \l__eb_fnmark_position_tl { super } { \space } },
+ fnmark-form .tl_set:N = \l__eb_fnmark_format_tl,
+
+ fnmark-num .choices:nn =
+ { plain,pifont,pifont*,pifont-sans,pifont-sans* }
+ {
+ \tl_gset_eq:NN
+ \l__eb_fnmark_number_choice_tl \l_keys_choice_tl
+ },
+ fnmark-num .value_required:n = true
+ }
+
+\cs_new:Npn \eb_upper_number_mark_bool:nn #1#2
+ {
+ \bool_if:NT \l__eb_uppercase_bool
+ { \text_uppercase:n } {\use:c { eb_fancyhf_#1_mark:n } {#2}}
+ }
+\cs_new:Npn \eb at number@markdouble #1#2
+ {
+ \markboth
+ {\eb_upper_number_mark_bool:nn {#1} {#2}}
+ {
+ \bool_if:NT \l__eb_page_twoside_bool
+ { \eb_upper_number_mark_bool:nn {#1} {#2} }
+ }
+ }
+\cs_new:Npn \eb at number@markright #1#2
+ { \markright{\eb_upper_number_mark_bool:nn {#1} {#2}} }
+\ctex_at_end_preamble:n
+ {
+ \exp_args:NV \geometry \g__eb_geometry_clist
+ \fancyhf{}
+ \tl_use:N \l__eb_fancyhf_content_tl
+ \cs_gset_eq:NN \ps at plain \ps at empty
+ \pagestyle{fancy}
+ \bool_if:NTF \l__eb_class_book_bool
+ {
+ \cs_gset:Npn \chaptermark #1
+ { \eb at number@markdouble{chapter}{#1} }
+ \cs_gset:Npn \sectionmark #1
+ { \eb at number@markright{section}{#1} }
+ }
+ {
+ \cs_gset:Npn \sectionmark #1
+ { \eb at number@markdouble{section}{#1} }
+ \cs_gset:Npn \subsectionmark #1
+ { \eb at number@markright{subsection}{#1} }
+ }
+ \bool_if:NT \l__eb_compile_draft_bool
+ {
+ \easyfoot[C]{\color{SlateGray}\sffamily\today}
+ \geometry{showframe}
+ }
+ \tl_if_empty:NF \l_eb_graphics_path_tl
+ { \exp_args:No \graphicspath { \l_eb_graphics_path_tl } }
+ \cs_if_exist:NF \kaishu { \cs_gset_eq:NN \kaishu \itshape }
+ }
+
+\eb_at_end_preamble:n
+ {
+ \group_begin:
+ \footnotesize
+ \exp_args:Nx
+ \linespread{\fp_use:N \l__eb_spread_footnote_fp}\selectfont
+ \exp_args:NNNo \group_end:
+ \dim_set:Nn \footnotesep { \dim_use:N \box_ht:N \strutbox }
+ \bool_if:NT \l__eb_chap_withpart_bool
+ { \counterwithin*{chapter}{part} }
+ \tl_if_eq:NnT \l__eb_foot_numparent_choice_tl { part }
+ {
+ \counterwithout*{footnote}{chapter}
+ \counterwithin*{footnote}{part}
+ }
+ \tl_if_eq:NnT \l__eb_foot_numparent_choice_tl { page }
+ {
+ \counterwithout*{footnote}{chapter}
+ \counterwithin*{footnote}{page}
+ }
+ \bool_if:NTF \l__eb_footnote_hang_bool
+ { \booltrue{FN at hangfoot} } { \boolfalse{FN at hangfoot} }
+ }
+\eb_patch_cmd:Nnn \@footnotetext
+ { \reset at font }
+ {
+ \linespread{\fp_use:N \l__eb_spread_footnote_fp}
+ \selectfont\ignorespaces
+ \l__eb_subfont_footnote_tl
+ }
+\eb_patch_cmd:Nnn \@mpfootnotetext
+ { \reset at font }
+ {
+ \linespread{\fp_use:N \l__eb_spread_footnote_fp}
+ \selectfont\ignorespaces
+ \l__eb_subfont_footnote_tl
+ }
+\ctex_after_end_preamble:n
+ {
+ \ExplSyntaxOn\char_set_catcode_letter:N \@
+ \eb_patch_cmd:Nnn \@footnotemark
+ { \@makefnmark }
+ {
+ \tl_use:N \l__eb_subfont_footnote_tl
+ \tl_use:N \l__eb_fnmark_format_tl
+ {\hbox:n { \textsuperscript{\@thefnmark} }}
+ }
+ \ExplSyntaxOff\char_set_catcode_other:N \@
+ }
+\cs_set:Npn \@makefnmark
+ {
+ \tl_use:N \l__eb_subfont_footnote_tl
+ \tl_use:N \l__eb_fnmark_format_tl
+ {
+ \hbox:n
+ {
+ \tl_if_eq:NnT \l__eb_fnmark_position_tl { super }
+ { \textsuperscript }{\@thefnmark}
+ \tl_use:N \l__eb_fnmark_after_tl
+ }
+ }
+ }
+\cs_set:Npn \thefootnote { \eb_footnote_counter:N \c at footnote }
+\cs_set:Npn \thempfootnote { \int_to_alph:n { \c at mpfootnote } }
+
+\cs_new_protected:Npn \eb_fnmark_number_set:nn #1#2
+ { \tl_const:cn { c__eb_fnmark_number_#1_tl } {#2} }
+\clist_map_inline:nn
+ {
+ { plain } { plain },
+ { pifont } { pifont },
+ { pifont_neg } { pifont* },
+ { pifont_sans } { pifont-sans },
+ { pifont_sans_neg } { pifont-sans* }
+ }
+ { \eb_fnmark_number_set:nn #1 }
+\cs_new:Npn \eb_fnmark_counter_pifont:N #1
+ { \ding{\int_eval:n { 171 + #1 }} }
+\cs_new:Npn \eb_fnmark_counter_pifont_neg:N #1
+ { \ding{\int_eval:n { 181 + #1 }} }
+\cs_new:Npn \eb_fnmark_counter_pifont_sans:N #1
+ { \ding{\int_eval:n { 191 + #1 }} }
+\cs_new:Npn \eb_fnmark_counter_pifont_sans_neg:N #1
+ { \ding{\int_eval:n { 201 + #1 }} }
+\cs_new:Npn \eb_footnote_counter:N #1
+ {
+ \tl_case:NnF \l__eb_fnmark_number_choice_tl
+ {
+ \c__eb_fnmark_number_plain_tl
+ { \int_use:N #1 }
+ \c__eb_fnmark_number_pifont_tl
+ { \eb_fnmark_counter_pifont:N #1 }
+ \c__eb_fnmark_number_pifont_neg_tl
+ { \eb_fnmark_counter_pifont_neg:N #1 }
+ \c__eb_fnmark_number_pifont_sans_tl
+ { \eb_fnmark_counter_pifont_sans:N #1 }
+ \c__eb_fnmark_number_pifont_sans_neg_tl
+ { \eb_fnmark_counter_pifont_sans_neg:N #1 }
+ }
+ { \int_use:N #1 }
+ }
+
+\contentsuse{lstlisting}{lol}
+\seq_const_from_clist:Nn \c__eb_toc_heading_level_seq
+ { part,chapter,section,subsection,figure,table,lstlisting }
+\cs_new_protected:Npn \eb_toc_assign_keys:n #1
+ {
+ \ctex_define:n { tocset/#1 .meta:nn = { ctex/tocset/#1 } {##1} }
+ \eb_ctex_define:nn { tocset }
+ {
+ #1/format .tl_set:c = l__eb_toc_#1_format_tl,
+ #1/format+ .code:n =
+ { \tl_put_right:cn { l__eb_toc_#1_format_tl } {##1} },
+ #1/format~+ .code:n =
+ { \tl_put_right:cn { l__eb_toc_#1_format_tl } {##1} },
+ #1/indent .tl_set:c = l__eb_toc_#1_indent_tl,
+ #1/rule .tl_set:c = l__eb_toc_#1_rule_tl,
+ #1/numsep .tl_set:c = eb at toc@#1 at numsep
+ }
+ \seq_if_in:NnF \c__eb_toc_heading_level_seq { subsection }
+ {
+ \eb_ctex_define:nn { tocset }
+ { #1/belowoffset .dim_set:c = l__eb_toc_#1_offset_dim }
+ }
+ \seq_pop:NN \c__eb_toc_heading_level_seq \l_tmpa_tl
+ \titlecontents{#1}
+ [\use:c { l__eb_toc_#1_indent_tl }]
+ {\use:c { l__eb_toc_#1_format_tl }}
+ {
+ \ifbool{eb at titletoc@hang at fix}
+ {
+ \contentspush
+ {
+ \bool_if:NT \l__eb_toc_number_color_bool
+ { \color{ctex at toc@number} }
+ \thecontentslabel
+ \hspace{\use:c { eb at toc@#1 at numsep }}
+ }
+ }{}
+ }{}
+ {\use:c { l__eb_toc_#1_rule_tl }}
+ }
+\seq_map_function:NN
+\c__eb_toc_heading_level_seq \eb_toc_assign_keys:n
+
+\seq_const_from_clist:Nn \c__eb_toc_list_meta_keys_seq
+ { format,format+,format~+,indent,rule,numsep,belowoffset }
+\ctex_define:n { tocset/list .meta:nn = { ctex/tocset/list } {#1} }
+\seq_map_inline:Nn \c__eb_toc_list_meta_keys_seq
+ {
+ \eb_ctex_define:nn { tocset }
+ {
+ list/#1 .meta:n =
+ {
+ figure/#1 = ##1,
+ table/#1 = ##1,
+ lstlisting/#1 = ##1
+ }
+ }
+ }
+
+\cs_new:Npn \EbNumberLine #1
+ {
+ \CTEXifname
+ {
+ \use:c { CTEXthe#1 }
+ \hspace{\use:c { eb at toc@#1 at numsep }}
+ }{}
+ }
+\cs_if_exist:NF \chapter
+ {
+ \newcounter{chapter}
+ \bool_set_false:N \l__eb_class_book_bool
+ \ctex_define:n { chapter/tocline .code:n = { } }
+ }
+\newbool{eb at titletoc@hang at fix}
+\eb_ctex_define:nn { tocset }
+ {
+ lolskip .skip_set:N = \l__eb_toc_lolskip_skip,
+ lolskip .initial:n = 0.8pc,
+
+ belowoffset .dim_set:N = \l__eb_toc_offset_dim,
+ belowoffset .initial:n =
+ { \bool_if:NTF \l__eb_class_book_bool { -1pc } { -0.35pc } },
+ tocline-fig .cs_set:Np = \eb at labelname@lof #1,
+ tocline-fig .initial:n =
+ {
+ \figurename\space #1
+ \notbool{eb at titletoc@hang at fix}
+ {\hspace{\eb at toc@figure at numsep}}{}
+ },
+ tocline-tab .cs_set:Np = \eb at labelname@lot #1,
+ tocline-tab .initial:n =
+ {
+ \tablename\space #1
+ \notbool{eb at titletoc@hang at fix}
+ {\hspace{\eb at toc@table at numsep}}{}
+ },
+ tocline-lst .tl_set:N = \eb at labelname@lol,
+ tocline-lst .initial:n =
+ {
+ \lstlistingname\space\thelstlisting
+ \notbool{eb at titletoc@hang at fix}
+ {\hspace{\eb at toc@lstlisting at numsep}}{}
+ },
+ line-align .bool_set:N = \l__eb_toc_line_align_bool,
+ line-align .default:n = true,
+ line-align .initial:n = true,
+
+ hang .choice:,
+ hang/true .code:n =
+ {
+ \booltrue{eb at titletoc@hang at fix}
+ \ctex_set:n
+ {
+ chapter/tocline = \CTEXnumberline{##1}##2,
+ section/tocline = \CTEXnumberline{##1}##2,
+ subsection/tocline = \CTEXnumberline{##1}##2
+ }
+ },
+ hang/false .code:n =
+ {
+ \ctex_set:n
+ {
+ chapter/tocline = \EbNumberLine{##1}##2,
+ section/tocline = \EbNumberLine{##1}##2,
+ subsection/tocline = \EbNumberLine{##1}##2
+ }
+ },
+ hang .default:n = true,
+ hang .initial:n = false,
+
+ numsep-all .meta:n =
+ {
+ part/numsep = #1,
+ chapter/numsep = #1,
+ section/numsep = #1,
+ subsection/numsep = #1,
+ list/numsep = #1
+ },
+ numsep-all .initial:n = \ccwd,
+ indent-all .meta:n =
+ {
+ part/indent = #1,
+ chapter/indent = #1,
+ section/indent = #1,
+ subsection/indent = #1,
+ list/indent = #1
+ },
+ rule-all .meta:n =
+ {
+ part/rule = #1,
+ chapter/rule = #1,
+ section/rule = #1,
+ subsection/rule = #1,
+ list/rule = #1
+ }
+ }
+
+\NewDocumentCommand{\tocrule}{sO{0.7pc}D(){1.2}mO{}}
+ {
+ \normalsize\normalfont
+ \titlerule*[#2]{\scalebox{#3}{#4}}#5
+ \IfBooleanTF{#1}
+ {\thecontentspage}
+ {
+ \bool_if:NTF \l__eb_toc_line_align_bool
+ { \contentspage } { \thecontentspage }
+ }
+ }
+\ctex_set:nn { tocset }
+ {
+ part/format = \addvspace{1pc}\sffamily\large,
+ part/indent = 0\ccwd,
+ part/rule = \tocrule{}[\bfseries],
+
+ chapter/format = \addvspace{1pc}\sffamily\large,
+ chapter/indent = 0\ccwd,
+ chapter/rule = \tocrule{$\cdot$}[\bfseries],
+
+ section/format = \addvspace{0.35pc},
+ section/indent =
+ { \bool_if:NTF \l__eb_class_book_bool { 1.5\ccwd } { 0\ccwd } },
+ section/rule = \tocrule{$\cdot$},
+
+ subsection/format = \addvspace{0.35pc},
+ subsection/indent =
+ { \bool_if:NTF \l__eb_class_book_bool { 3.8\ccwd } { 1.4\ccwd } },
+ subsection/rule = \tocrule{$\cdot$},
+
+ list/format = \addvspace{0.2pc},
+ list/indent = 0\ccwd,
+ list/rule = \tocrule{$\cdot$},
+ list/belowoffset =
+ { \bool_if:NTF \l__eb_class_book_bool { 0pc } { 0.15pc } }
+ }
+
+\prop_new:N \l__eb_label_name_prop
+\prop_set_from_keyval:Nn \l__eb_label_name_prop
+ {
+ figure = \eb at labelname@lof,
+ table = \eb at labelname@lot
+ }
+\cs_gset:Npn \caption@@@addcontentsline #1#2#3#4
+ {
+ \addcontentsline{#1}{#2}
+ {
+ \ifbool{eb at titletoc@hang at fix}{\protect\numberline}{}
+ {\prop_item:Nn \l__eb_label_name_prop {#2}{#3}}#4
+ }
+ }
+\ctex_patch_cmd:Nnn \lst at MakeCaption
+ {
+ \addcontentsline{lol}{lstlisting}
+ {\protect\numberline{\thelstlisting}\lst@@caption}
+ }
+ {
+ \addcontentsline{lol}{lstlisting}
+ {
+ \ifbool{eb at titletoc@hang at fix}{\protect\numberline}{}
+ {\eb at labelname@lol}\lst@@caption
+ }
+ }
+
+\contentsuse{}{tec}
+\cs_set_protected:Npn \CTEX at addbitocline #1#2
+ {
+ \group_begin:
+ \def\CTEX at prechapter{\CTEX at prebichapter}
+ \def\CTEX at thechapter{\CTEX at bichapter@number}
+ \def\CTEX at postchapter{\CTEX at postbichapter}
+ \addcontentsline{tec}{#1}
+ {\use:c { CTEX@#1 at tocline }{#1}{#2}}
+ \group_end:
+ }
+\seq_const_from_clist:Nn \c__eb_bitoc_title_level_seq
+ { chapter,section,subsection }
+\seq_map_inline:Nn \c__eb_bitoc_title_level_seq
+ {
+ \exp_args:Nc \NewDocumentCommand {bi#1}{sO{##3}mm}
+ {
+ \IfBooleanTF{##1}
+ {
+ \use:c {#1}*{\phantomsection ##3}
+ \CTEX at addtocline{#1}{##2}
+ \tl_if_empty:oF {##4} { \CTEX at addbitocline{#1}{##4} }
+ }{
+ \use:c {#1}[##2]{##3}
+ \tl_if_empty:oF {##4} { \CTEX at addbitocline{#1}{##4} }
+ }
+ }
+ }
+\cs_if_exist:NT \chapter
+ {
+ \eb_appto_cmd:Nn \@chapter
+ {
+ \skip_if_eq:nnF { \l__eb_toc_lolskip_skip } { \c_zero_skip }
+ {
+ \addtocontents{lol}
+ {\protect\addvspace{\skip_use:N \l__eb_toc_lolskip_skip}}
+ }
+ \bool_if:NF \l__eb_class_book_bool
+ { \msg_error:nn { easybase } { no-chapter } }
+ }
+ \eb_appto_cmd:Nn \@schapter
+ {
+ \bool_if:NF \l__eb_class_book_bool
+ { \msg_error:nn { easybase } { no-chapter } }
+ }
+ }
+\msg_new:nnn { easybase } { no-chapter }
+ {
+ Your~document~class~is~in~article~mode. \\
+ The~\string\chapter\space~command~will~not~be~used.
+ }
+
+\tl_set:Nx \l__eb_toc_type_tl
+ { \bool_if:NTF \l__eb_class_book_bool { book } { article } }
+\tl_new:N \eb at bitoc@title
+\keys_define:nn { eb/listoc }
+ {
+ article .code:n = \tl_set:Nn \l__eb_toc_type_tl { article },
+ book .code:n = { },
+ multoc .bool_set:N = \l__eb_multoc_bool,
+ multoc .default:n = true,
+ multoc .initial:n = false,
+ title .code:n = \eb_assign_toc_title:n {#1},
+ columns .int_set:N = \l__eb_toc_columns_int,
+ columns .initial:n = 2
+ }
+\bool_if:NTF \l__eb_class_book_bool
+ { \keys_define:nn { } { eb/listoc .inherit:n = ctex/chapter } }
+ { \keys_define:nn { } { eb/listoc .inherit:n = ctex/section } }
+\NewDocumentCommand{\eb_assign_toc_title:n}
+ {>{\SplitArgument{1}{,}}m}
+ {\eb_assign_toc_title_judge:nn #1}
+\cs_new_protected:Npn \eb_assign_toc_title_judge:nn #1#2
+ {
+ \tl_set:Nn \eb at toc@title {#1}
+ \tl_if_novalue:nTF {#2}
+ { \tl_clear:N \eb at bitoc@title }
+ { \tl_set:Nn \eb at bitoc@title {#2} }
+ }
+
+\cs_new:Npn \eb_upper_nonumber_mark_bool:n #1
+ {
+ \bool_if:NTF \l__eb_uppercase_bool
+ { \text_uppercase:n {#1} }
+ { \text_titlecase_first:n {#1} }
+ }
+\cs_new:Npn \eb at nonumber@markdouble #1
+ {
+ \markboth
+ {\eb_upper_nonumber_mark_bool:n {#1}}
+ {
+ \bool_if:NT \l__eb_page_twoside_bool
+ { \eb_upper_nonumber_mark_bool:n {#1} }
+ }
+ }
+\cs_new:Npn \eb at nonumber@markright #1
+ { \markright{\eb_upper_nonumber_mark_bool:n {#1}} }
+
+\cs_new_protected:Npn \eb_title_mark_intoc:n #1
+ {
+ \tl_if_eq:NnTF \l__eb_toc_type_tl { book }
+ {
+ \bichapter*{#1}{\eb at bitoc@title}
+ \eb at nonumber@markdouble{#1}
+ }
+ {
+ \bisection*{#1}{\eb at bitoc@title}
+ \bool_if:NTF \l__eb_class_book_bool
+ { \eb at nonumber@markright{#1} }
+ { \eb at nonumber@markdouble{#1} }
+ }
+ }
+\cs_new_protected:Npn \eb_title_mark_notoc:n #1
+ {
+ \tl_if_eq:NnTF \l__eb_toc_type_tl { book }
+ {
+ \chapter*{\phantomsection #1}
+ \eb at nonumber@markdouble{#1}
+ }
+ {
+ \section*{\phantomsection #1}
+ \bool_if:NTF \l__eb_class_book_bool
+ { \eb at nonumber@markright{#1} }
+ { \eb at nonumber@markdouble{#1} }
+ }
+ }
+\cs_new_protected:Npn \eb_title_number_intoc_bool:nn #1#2
+ {
+ \IfBooleanTF{#1}
+ {
+ \tl_if_eq:NnTF \l__eb_toc_type_tl { book }
+ { \bichapter{\eb at toc@title}{\eb at bitoc@title} }
+ { \bisection{\eb at toc@title}{\eb at bitoc@title} }
+ }{
+ \IfBooleanTF{#2}
+ {\eb_title_mark_notoc:n {\eb at toc@title}}
+ {\eb_title_mark_intoc:n {\eb at toc@title}}
+ }
+ }
+\cs_new_protected:Npn \eb_biber_title_level_bool:n #1
+ {
+ \bool_if:NTF \l__eb_class_book_bool
+ { \bichapter*{#1}{\l__eb_bib_bitoc_title} }
+ { \bisection*{#1}{\l__eb_bib_bitoc_title} }
+ \eb at nonumber@markdouble{#1}
+ }
+\cs_new_protected:Npn \eb_multoc_pre_bool:
+ {
+ \bool_if:NT \l__eb_multoc_bool
+ { \begin{multicols}{\int_use:N \l__eb_toc_columns_int} }
+ }
+\cs_new_protected:Npn \eb_multoc_post_bool:
+ { \bool_if:NT \l__eb_multoc_bool { \end{multicols} } }
+\RenewDocumentCommand{\tableofcontents}{t+oD(){}}
+ {
+ \group_begin:
+ \tl_set_eq:NN \eb at toc@title \contentsname
+ \tl_set:Nn \eb at bitoc@title { Contents }
+ \IfValueT{#2}{\keys_set:nn { eb/listoc } {#2}}
+ \eb_title_mark_notoc:n { \eb at toc@title }
+ \eb_multoc_pre_bool:
+ \vspace*{\dim_use:N \l__eb_toc_offset_dim}
+ \@starttoc{toc}#3
+ \IfBooleanT{#1}
+ {
+ \eb_title_mark_notoc:n { \eb at bitoc@title }
+ \vspace*{\dim_use:N \l__eb_toc_offset_dim}
+ \@starttoc{tec}
+ }
+ \eb_multoc_post_bool:
+ \group_end:
+ }
+\RenewDocumentCommand{\listoffigures}{st+o}
+ {
+ \group_begin:
+ \tl_set_eq:NN \eb at toc@title \listfigurename
+ \IfValueT{#3}{\keys_set:nn { eb/listoc } {#3}}
+ \eb_title_number_intoc_bool:nn {#2} {#1}
+ \eb_multoc_pre_bool:
+ \dim_add:NV \l__eb_toc_offset_dim \l__eb_toc_figure_offset_dim
+ \vspace*{\dim_use:N \l__eb_toc_offset_dim}
+ \@starttoc{lof}
+ \eb_multoc_post_bool:
+ \group_end:
+ }
+\RenewDocumentCommand{\listoftables}{st+o}
+ {
+ \group_begin:
+ \tl_set_eq:NN \eb at toc@title \listtablename
+ \IfValueT{#3}{\keys_set:nn { eb/listoc } {#3}}
+ \eb_title_number_intoc_bool:nn {#2} {#1}
+ \eb_multoc_pre_bool:
+ \dim_add:NV \l__eb_toc_offset_dim \l__eb_toc_table_offset_dim
+ \vspace*{\dim_use:N \l__eb_toc_offset_dim}
+ \@starttoc{lot}
+ \eb_multoc_post_bool:
+ \group_end:
+ }
+\NewDocumentCommand{\listoflistings}{st+o}
+ {
+ \group_begin:
+ \tl_set_eq:NN \eb at toc@title \lstlistlistingname
+ \IfValueT{#3}{\keys_set:nn { eb/listoc } {#3}}
+ \eb_title_number_intoc_bool:nn {#2} {#1}
+ \eb_multoc_pre_bool:
+ \dim_add:NV \l__eb_toc_offset_dim \l__eb_toc_lstlisting_offset_dim
+ \vspace*{\dim_use:N \l__eb_toc_offset_dim}
+ \@starttoc{lol}
+ \eb_multoc_post_bool:
+ \group_end:
+ }
+
+\ctex_at_end_package:nn { imakeidx }
+ {
+ \makeindex[
+ options = -M~texindy~-C~utf8,
+ program = truexindy,
+ columns = 2,
+ columnsep = 2\ccwd
+ ]
+ \RenewDocumentCommand{\printindex}{st+D(){\imki at jobname}o}
+ {
+ \group_begin:
+ \tl_set_eq:NN \eb at toc@title \indexname
+ \cs_set_eq:NN \imki at indexlevel \use_none:n
+ \setkeys{imki}{intoc = false}
+ \IfValueT{#4}{\keys_set:nn { eb/listoc } {#4}}
+ \bool_if:NF \l__eb_class_book_bool
+ { \tl_set:Nn \l__eb_toc_type_tl { article } }
+ \tl_set:Nn \imki at indexheaders
+ {
+ \eb_title_number_intoc_bool:nn {#2} {#1}
+ \cs_set_eq:NN \thispagestyle \use_none:n
+ \cs_undefine:N \imki at firstpagestyle
+ }
+ \imki at putindex{#3}
+ \group_end:
+ }
+ }
+
+\eb_ctex_define:nn { chapter }
+ {
+ biname .code:n =
+ { \ctex_assign_heading_name:nn { bichapter } {#1} },
+ biname .initial:n = Chapter\space,
+ binmuber .tl_set:N = \CTEX at bichapter@number,
+ binmuber .initial:n = \arabic{chapter}
+ }
+\RenewDocumentCommand{\appendix}
+ {O{Appendix\space}D(){\Alph{chapter}}}
+ {
+ \ctex_assign_heading_name:nn { biappendix } {#1}
+ \int_compare:nNnTF { \c at chapter } > { 0 }
+ {
+ \ExplSyntaxOn\char_set_catcode_letter:N \@
+ \eb_patch_cmd:Nnn \CTEX at addbitocline
+ {
+ \def\CTEX at prechapter{\CTEX at prebichapter}
+ \def\CTEX at thechapter{\CTEX at bichapter@number}
+ \def\CTEX at postchapter{\CTEX at postbichapter}
+ }
+ {
+ \def\CTEX at prechapter{\CTEX at prebiappendix}
+ \def\CTEX at thechapter{#2}
+ \def\CTEX at postchapter{\CTEX at postbiappendix}
+ }
+ \ExplSyntaxOff\char_set_catcode_other:N \@
+ \setcounter{chapter}{0}
+ \setcounter{section}{0}
+ \gdef\thechapter{\@Alph\c at chapter}
+ \gdef\CTEX at prechapter{\CTEX at preappendix}
+ \gdef\CTEX at thechapter{\CTEX at appendix@number}
+ \gdef\CTEX at postchapter{\CTEX at postappendix}
+ \gdef\CTEX at chapter@numbering{\CTEX at appendix@numbering}
+ }
+ {
+ \setcounter{section}{0}
+ \setcounter{subsection}{0}
+ \gdef\thesection{\@Alph\c at section}
+ \gdef\CTEX at presection{\CTEX at preappendix}
+ \gdef\CTEX at thesection{\CTEX at appendix@number}
+ \gdef\CTEX at postsection{\CTEX at postappendix}
+ \gdef\CTEX at section@numbering{\CTEX at appendix@numbering}
+ \ctex_set:nn { appendix } { number = \@Alph\c at section,name = { } }
+ }
+ }
+
+\tl_new:N \l__eb_subfont_table_tl
+\tl_new:N \l__eb_subfont_figure_tl
+\tl_new:N \l__eb_subfont_listing_tl
+\tl_new:N \l__eb_subfont_footnote_tl
+
+\seq_const_from_clist:Nn \c__eb_subfont_math_choice_seq
+ {
+ noto,notosans,times,scholax,stix,
+ charter,ebgaramond,libertine,none
+ }
+\seq_map_inline:Nn \c__eb_subfont_math_choice_seq
+ { \tl_const:cn { c__eb_subfont_math_#1_tl } {#1} }
+
+\eb_ctex_define:nn { subfont }
+ {
+ table-cap .tl_set:N = \l__eb_subfont_table_tl,
+ table-cap .initial:n = \sffamily\small,
+ figure-cap .tl_set:N = \l__eb_subfont_figure_tl,
+ figure-cap .initial:n = \sffamily\small,
+ listing-cap .tl_set:N = \l__eb_subfont_listing_tl,
+ listing-cap .initial:n = \sffamily\small,
+ footnote .tl_set:N = \l__eb_subfont_footnote_tl,
+ footnote .initial:n = \rmfamily,
+ marginpar .tl_set:N = \marginfont,
+ marginpar .initial:n = \rmfamily\footnotesize,
+
+ math .choices:xn =
+ { \seq_use:Nn \c__eb_subfont_math_choice_seq { , } }
+ {
+ \tl_gset_eq:NN
+ \l__eb_subfont_math_choice_tl \l_keys_choice_tl
+ },
+ math .value_required:n = true,
+ math .initial:n = noto
+ }
+
+\cs_new_protected:Npn \eb_put_newtxmath:n #1
+ { \PassOptionsToPackage{#1}{newtxmath} }
+\eb_at_end_preamble:n
+ {
+ \tl_case:NnT \l__eb_subfont_math_choice_tl
+ {
+ \c__eb_subfont_math_noto_tl
+ { \eb_put_newtxmath:n { noto } }
+ \c__eb_subfont_math_notosans_tl
+ { \eb_put_newtxmath:n { notosans } }
+ \c__eb_subfont_math_ebgaramond_tl
+ { \eb_put_newtxmath:n { ebgaramond } }
+ \c__eb_subfont_math_times_tl
+ { \eb_put_newtxmath:n { noOT1 } }
+ \c__eb_subfont_math_libertine_tl
+ { \eb_put_newtxmath:n { libertine,noOT1 } }
+ \c__eb_subfont_math_stix_tl
+ { \eb_put_newtxmath:n { stix2,noOT1 } }
+ \c__eb_subfont_math_scholax_tl
+ { \eb_put_newtxmath:n { nc,noOT1 } }
+ \c__eb_subfont_math_charter_tl
+ { \eb_put_newtxmath:n { charter,noOT1 } }
+ }
+ { \eb at package@load{newtxmath,bm} }
+ }
+
+\fp_new:N \l__eb_spread_line_fp
+\fp_new:N \l__eb_spread_table_fp
+\fp_new:N \l__eb_spread_math_fp
+\fp_new:N \l__eb_spread_caption_fp
+\fp_new:N \l__eb_spread_footnote_fp
+
+\eb_ctex_define:nn { spread }
+ {
+ line .fp_set:N = \l__eb_spread_line_fp,
+ line .initial:n = 1.3,
+ table .fp_set:N = \l__eb_spread_table_fp,
+ table .initial:n = 1.05,
+ math .fp_set:N = \l__eb_spread_math_fp,
+ math .initial:n = 1.05,
+ caption .fp_set:N = \l__eb_spread_caption_fp,
+ caption .initial:n = 1,
+ footnote .fp_set:N = \l__eb_spread_footnote_fp,
+ footnote .initial:n = 1,
+ spread-all .meta:n =
+ {
+ line = #1,
+ table = #1,
+ math = #1,
+ caption = #1,
+ footnote = #1
+ }
+ }
+
+\DeclareCaptionLabelSeparator{ccwd}{\hspace{\ccwd}}
+\DeclareCaptionLabelFormat{parens}{\bothIfFirst{#1}{~}(#2)}
+\DeclareCaptionFont{eb at table@font}{\l__eb_subfont_table_tl}
+\DeclareCaptionFont{eb at figure@font}{\l__eb_subfont_figure_tl}
+\DeclareCaptionFont{eb at listing@font}{\l__eb_subfont_listing_tl}
+\captionsetup
+ {
+ format = hang,
+ font = {stretch = \fp_use:N \l__eb_spread_caption_fp},
+ labelfont = {color = ctex at frame},
+ labelsep = ccwd,
+ singlelinecheck = true,
+ belowskip = 0pt,
+ aboveskip = 10pt
+ }
+\captionsetup[table]{font += eb at table@font}
+\captionsetup[figure]{font += eb at figure@font}
+\captionsetup[lstlisting]{font += eb at listing@font}
+\captionsetup[subfigure]
+ {
+ labelformat = parens,
+ font+ = eb at figure@font,
+ belowskip = 2pt,
+ aboveskip = 6pt
+ }
+\ctex_at_end_package:nn { bicaption }
+ {
+ \captionsetup[figure][bi-second]{name = Figure}
+ \captionsetup[table][bi-second]{name = Table}
+ }
+\prop_gset_from_keyval:Nn \g__tblr_default_tblr_table_prop
+ { stretch = \fp_use:N \l__eb_spread_table_fp }
+\SetTblrDefault{rows = {abovesep = 4pt,belowsep = 2pt}}
+\eb_at_begin_environment:nn { tabular,tabularx }
+ {
+ \exp_args:Nx \linespread { \fp_use:N \l__eb_spread_table_fp }
+ \selectfont\ignorespaces
+ }
+\ctex_after_end_preamble:n
+ {
+ \exp_args:Nx \linespread { \fp_use:N \l__eb_spread_line_fp }
+ \selectfont\ignorespaces
+ }
+
+\cs_new:Npn \eb_arabic:n #1 { \int_to_arabic:v { c@#1 } }
+\cs_gset:cpn { thesection }
+ {
+ \int_compare:nNnT { \c at chapter } > { 0 } { \thechapter. }
+ \eb_arabic:n { section }
+ }
+\seq_const_from_clist:Nn \c__eb_serial_number_counter_seq
+ { figure,table,lstlisting,equation }
+\seq_map_inline:Nn \c__eb_serial_number_counter_seq
+ {
+ \cs_set:cpn { the#1 }
+ {
+ \int_compare:nNnT { \c at chapter } > { 0 }
+ {
+ \thechapter
+ \use:c { l__eb_#1_separator_tl }
+ }
+ \eb_arabic: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}
+\tl_gset:Nn \textfraction { 0.18 }
+\tl_gset:Nn \topfraction { 0.85 }
+\tl_gset:Nn \bottomfraction { 0.65 }
+\tl_gset:Nn \floatpagefraction { 0.60 }
+\tl_gset:Nn \ULthickness { 0.75pt }
+\allowdisplaybreaks[4]
+\DeclareGraphicsExtensions{.pdf,.png,.jpg,.eps,.tif}
+
+\cs_new_protected:Npn \eb_enumitem_label_set:nn #1#2
+ { \SetEnumitemValue{label}{#1}{\color{ctex at emph}#2} }
+\clist_map_inline:nn
+ {
+ { bullet } { \textbullet },
+ { endash } { \normalfont\bfseries\textendash },
+ { asterisk } { \textasteriskcentered },
+ { arabic } { \arabic*. },
+ { alph } { (\alph*) },
+ { roman } { \roman*. },
+ { outline } { \upshape\ding{111} }
+ }
+ { \eb_enumitem_label_set:nn #1 }
+\SetEnumitemValue{font}{sf}{\color{ctex at emph}\normalfont\sffamily}
+\SetEnumitemValue{ref}{enumii}{\arabic{enumi}.\alph*}
+\SetEnumitemValue{ref}{enumiii}{\arabic{enumi}.\alph{enumii}.\roman*}
+\setlist
+ {
+ labelsep = .75\ccwd,listparindent = 2\ccwd,leftmargin = *,
+ itemsep = .75ex plus .1ex,topsep = .75ex plus .1ex,
+ partopsep = 0ex,parsep = 0ex
+ }
+\newlist{eb at outline@list}{itemize}{1}
+\setlist[eb at outline@list]{label = outline,itemsep = .5ex plus .1ex}
+\setlist[itemize,1]{label = bullet}
+\setlist[itemize,2]{label = endash}
+\setlist[itemize,3]{label = asterisk}
+\setlist[enumerate,1]{label = arabic,ref = \arabic*}
+\setlist[enumerate,2]{label = alph,ref = enumii}
+\setlist[enumerate,3]{label = roman,ref = enumiii,labelwidth = *}
+\setlist[description]{font = sf,labelwidth = *,leftmargin = 2\ccwd}
+
+\cs_new_protected:Npn \eb_thmname_set:nnn #1#2#3
+ {
+ \tl_if_eq:NnTF \l__ctex_scheme_tl { chinese }
+ { \tl_const:cn { c__eb_name_#1_tl } {#3} }
+ { \tl_const:cn { c__eb_name_#1_tl } {#2} }
+ }
+\NewDocumentCommand{\EbNewTheorem}
+ {mO{\text_titlecase_first:n {#1}}mD(){tc-theorem}O{}}
+ {
+ \ctex_at_end_preamble:n
+ {
+ \eb_thmname_set:nnn {#1} {#2} {#3}
+ \exp_args:No \declaretheorem at i
+ {
+ name = \use:c { c__eb_name_#1_tl },
+ style = easy-theorem,#5
+ }{#1}[]
+ \bool_if:NT \l__eb_thmbox_bool
+ {
+ \@ifpackageloaded{tcolorbox}
+ {\tcolorboxenvironment{#1}{#4}}{}
+ }
+ \labelformat{#1}{\use:c { c__eb_name_#1_tl }~##1}
+ }
+ }
+
+\bool_new:N \l__eb_thmbox_bool
+\tl_new:N \l__eb_thm_numberwith_tl
+\tl_new:N \l__eb_thm_headpunct_tl
+\tl_new:N \l__eb_thm_bodyfont_tl
+\tl_new:N \l__eb_thm_notefont_tl
+\tl_new:N \l__eb_thm_headindent_tl
+\tl_new:N \l__eb_thm_spaceabove_tl
+\tl_new:N \l__eb_thm_spacebelow_tl
+
+\RenewDocumentCommand{\newtheorem}{O{}m}
+ {\AfterPreamble{\declaretheorem[#1]{#2}}}
+\eb_ctex_define:nn { thmset }
+ {
+ thmbox .bool_set:N = \l__eb_thmbox_bool,
+ thmbox .default:n = true,
+ thmbox .initial:n = false,
+ within .tl_set:N = \l__eb_thm_numberwith_tl,
+ within .initial:n = \bool_if:NT \l__eb_class_book_bool { chapter },
+ bodyfont .tl_set:N = \l__eb_thm_bodyfont_tl,
+ bodyfont .initial:n = { },
+ notefont .tl_set:N = \l__eb_thm_notefont_tl,
+ notefont .initial:n = { },
+ headfont .tl_set:N = \l__eb_thm_headfont_tl,
+ headfont .initial:n = \color{ctex at emph}\sffamily,
+ headpunct .tl_set:N = \l__eb_thm_headpunct_tl,
+ headpunct .initial:n = { },
+ spacepost .tl_set:N = \l__eb_thm_spacepost_tl,
+ spacepost .initial:n = \ccwd,
+ headindent .tl_set:N = \l__eb_thm_headindent_tl,
+ headindent .initial:n = 0\ccwd,
+ spaceabove .tl_set:N = \l__eb_thm_spaceabove_tl,
+ spaceabove .initial:n = .75ex plus .1ex,
+ spacebelow .tl_set:N = \l__eb_thm_spacebelow_tl,
+ spacebelow .initial:n = .75ex plus .1ex
+ }
+\tl_const:Nn \c__eb_thmtools_keyval_tl
+ {
+ [
+ spaceabove = \l__eb_thm_spaceabove_tl,
+ spacebelow = \l__eb_thm_spacebelow_tl,
+ headindent = \l__eb_thm_headindent_tl,
+ headfont = \l__eb_thm_headfont_tl,
+ notefont = \l__eb_thm_notefont_tl,
+ notebraces = { }{ },
+ bodyfont = \l__eb_thm_bodyfont_tl,
+ headpunct = \l__eb_thm_headpunct_tl,
+ postheadspace = \l__eb_thm_spacepost_tl,
+ within = \l__eb_thm_numberwith_tl,
+ headformat = \NAME\space\NUMBER\NOTE
+ ]
+ }
+\eb_at_end_preamble:n
+ {
+ \exp_last_unbraced:No
+ \declaretheoremstyle{\c__eb_thmtools_keyval_tl}{easy-theorem}
+ \eb_thmname_set:nnn { exercise } { Exercise } { 练习 }
+ \cs_undefine:N \proof
+ \clist_map_inline:nn
+ {
+ { lemma } { 引理 },
+ { example } { 例 },
+ { theorem } { 定理 },
+ { corollary } { 推论 },
+ { definition } { 定义 },
+ { proposition } { 性质 },
+ { remark } { 注 } [ numbered = no ],
+ { { proof } { 证明 } [ numbered = no,qed = \qedsymbol ] }
+ }
+ { \EbNewTheorem #1 }
+ }
+
+\ctex_at_end_package:nn { tasks }
+ {
+ \settasks
+ {
+ label = (\Alph*),
+ column-sep = \ccwd,
+ item-indent = 2\ccwd,
+ label-offset = 0.5\ccwd,
+ label-width = 1.5\ccwd,
+ after-item-skip = 0ex plus .1ex
+ }
+ }
+\setchemformula
+ {
+ math-scripts = false,
+ charge-hshift = 0.25\ccwd,
+ subscript-vshift = -0.2ex
+ }
+\sisetup
+ {
+ mode = match,
+ table-parse-only,
+ propagate-math-font,
+ text-family-to-math,
+ text-series-to-math,
+ reset-text-family = false,
+ reset-text-series = false,
+ reset-text-shape = false,
+ reset-math-version = false,
+ range-phrase = \ensuremath{\sim},
+ range-units = single,
+ group-digits = none
+ }
+\eb_at_begin_environment: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
+ }
+ {
+ \linespread{\fp_use:N \l__eb_spread_math_fp}
+ \selectfont\ignorespaces
+ }
+\eb_patch_cmd:Nnn \start at gather
+ { \collect at body }
+ {
+ \linespread{\fp_use:N \l__eb_spread_math_fp}
+ \selectfont\collect at body
+ }
+\eb_patch_cmd:Nnn \start at align
+ { \collect at body }
+ {
+ \linespread{\fp_use:N \l__eb_spread_math_fp}
+ \selectfont\collect at body
+ }
+\eb_patch_cmd:Nnn \start at multline
+ { \collect at body }
+ {
+ \linespread{\fp_use:N \l__eb_spread_math_fp}
+ \selectfont\collect at body
+ }
+\eb_patch_cmd:Nnn \gather at split
+ { \spread at equation }
+ {
+ \linespread{\fp_use:N \l__eb_spread_math_fp}
+ \selectfont\spread at 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 at emph}(\ignorespaces #1\unskip\@@italiccorr)} }
+\ctex_at_end_package:nn { unicode-math }
+ { \msg_redirect_module:nnn { unicode-math } { warning } { none } }
+
+\ctex_at_end_package:nn { tcolorbox }
+ {
+ \eb_package_later_bool:nn { tcolorbox } { 2020/10/09 }
+ \tcbset
+ {
+ tc-theorem/.style =
+ {
+ enhanced~jigsaw,pad~at~break* = 3pt,
+ opacityback = 0,
+ colframe = ctex at emph,
+ left = 6pt,right = 6pt,top = 8pt,bottom = 8pt,middle= 8pt
+ },
+ tc-outline/.style =
+ {
+ enhanced,nofloat,
+ tikznode~boxed~title,
+ interior~style = white,colframe = ctex at emph,
+ colbacktitle = white,coltitle = ctex at 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,boxsep = 5pt,
+ after~skip = 3ex,
+ left = 1.5pc,right = 1.5pc,top = 1pc,bottom = 0.5pc
+ },
+ tc-exercise/.style =
+ {
+ blank,on~line,center,
+ fontupper = \Large\sffamily,
+ before~skip = 3.75ex,after~skip = 2.5ex
+ },
+ breakable,
+ boxsep = 0pt,
+ arc = 0pt,
+ fonttitle = \sffamily,
+ boxrule = \eb at rule@width at dim
+ }
+ \newtcbox[auto~counter]{\eb at exercise@box}[1]{tc-exercise,#1}
+ \NewDocumentEnvironment{outline}{O{}D(){\abstractname}o+b}
+ {
+ \begin{tcolorbox}[tc-outline,title = #2,IfValueT = {#3}{#3}]
+ \begin{eb at outline@list}[#1]
+ #4
+ \end{eb at outline@list}
+ \end{tcolorbox}
+ }{}
+ \NewDocumentEnvironment{exercise}
+ {st+O{LightSkyBlue}O{1.}D(){\c__eb_name_exercise_tl}o+O{}+b}
+ {
+ \IfBooleanTF{#2}
+ {
+ \eb at exercise@box
+ {
+ fuzzy~halo = 5pt~with~#3,
+ IfValueT = {#6}{#6},
+ phantom =
+ \IfBooleanF{#1}
+ {
+ \markright{\thetcbcounter\hspace{0.5\ccwd}#5}
+ \addcontentsline{toc}{section}
+ {\thetcbcounter\hspace{\eb at toc@section at numsep}#5}
+ }
+ }
+ {\IfBooleanF{#1}{\thetcbcounter\hspace{0.5\ccwd}}#5}
+ }{
+ \group_begin:
+ \ctex_set:nn { section } { format += \centering }
+ \IfValueT{#6}{\ctex_set:nn { section } {#6}}
+ \IfBooleanTF{#1}{\section*{#5}}{\section{#5}}
+ \group_end:
+ }#7
+ \begin{enumerate}[#4,labelsep = 0.5\ccwd]
+ #8
+ \end{enumerate}
+ }{}
+ \DeclareTColorBox{easybox}{sO{DarkCyan}d()O{}}
+ {
+ enhanced~jigsaw,pad~at~break* = 3pt,
+ IfBooleanTF = {#1}
+ {toptitle = 8pt,top = 8pt}
+ {frame~hidden,boxrule = 0pt,toptitle = 8pt,top = 0pt},
+ IfValueT = {#3}{title = #3},
+ colback = #2,colbacktitle = #2,
+ opacityback = 0.12,opacitybacktitle = 0.12,
+ coltitle = black,colframe = black,
+ left = 6pt,right = 6pt,bottom = 8pt,middle= 8pt,
+ bottomtitle = 8pt,
+ beforeafter~skip = 2ex,
+ halign~upper = left,halign~lower = left,
+ center~title,#4
+ }
+ \DeclareTColorBox{ebparbox}{sO{Purple}d()O{}}
+ {
+ frame~hidden,
+ enhanced~jigsaw,pad~at~break* = 3pt,
+ boxrule = 0pt,
+ borderline~west = {3pt}{0pt}{#2},
+ IfBooleanTF = {#1}
+ {
+ colback = white,
+ IfValueT = {#3}{title = #3},
+ top = 0pt,bottom = 0pt,toptitle = 0pt
+ }{
+ colback = #2,colbacktitle = #2,
+ opacityback = 0.12,opacitybacktitle = 0.12,
+ IfValueTF = {#3}{title = #3,top = 0pt}{top = 8pt},
+ bottom = 8pt,toptitle = 8pt
+ },
+ left = 8pt,right = 8pt,middle= 8pt,
+ bottomtitle = 8pt,
+ beforeafter~skip = 1.5ex,
+ colframe = #2,coltitle = #2,#4
+ }
+ \DeclareTotalTCBox{\ebemph}{O{DarkSeaGreen}vO{}}
+ {
+ nobeforeafter,tcbox~raise~base,
+ blank,fuzzy~halo = 2pt~with~#1,#3
+ }{#2}
+ \DeclareTotalTCBox{\eblink}{O{Aqua}vO{}}
+ {
+ standard~jigsaw,
+ nobeforeafter,tcbox~raise~base,
+ top = 1.25qt,bottom = 1.25qt,left = 1.25qt,right = 1.25qt,
+ boxrule = 0.75pt,arc = 1pt,
+ colback = #1,opacityback = 0.12,colframe = #1,#3
+ }{#2}
+ }
+
+\bool_set_true:N \l__eb_backend_bibtex_bool
+\tl_new:N \l__eb_bib_style_tl
+\tl_new:N \l__eb_bib_otherstyle_tl
+\tl_new:N \l__eb_bib_citestyle_tl
+\tl_new:N \l__eb_bib_datafile_tl
+
+\eb_ctex_define:nn { bibset }
+ {
+ backend .choice:,
+ backend/bibtex .code:n = { },
+ backend/biblatex .code:n =
+ { \bool_set_false:N \l__eb_backend_bibtex_bool },
+
+ bib-style .choice:,
+ bib-style .value_required:n = true,
+ bib-style/numerical .code:n =
+ {
+ \tl_set:Nn \l__eb_bib_style_tl {#1}
+ \tl_clear:N \l__eb_bib_otherstyle_tl
+ },
+ bib-style/authoryear .code:n =
+ {
+ \tl_set:Nn \l__eb_bib_style_tl {#1}
+ \tl_clear:N \l__eb_bib_otherstyle_tl
+ },
+ bib-style/unknown .code:n =
+ { \tl_set_eq:NN \l__eb_bib_otherstyle_tl \l_keys_value_tl },
+ bib-style .initial:n = numerical,
+
+ cite-style .code:n =
+ { \tl_set:Nn \l__eb_bib_citestyle_tl {#1} },
+ datafile .tl_set:N = \l__eb_bib_datafile_tl,
+
+ bitoc-title .tl_set:N = \l__eb_bib_bitoc_title,
+ bitoc-title .initial:n = Reference
+ }
+
+\cs_new_protected:Npn \EbBibtexSet
+ {
+ \tl_if_empty:NTF \l__eb_bib_otherstyle_tl
+ {
+ \tl_if_eq:NnT \l__eb_bib_style_tl { numerical }
+ {
+ \bibliographystyle{gbt7714-numerical}
+ \setcitestyle{comma,square,super}
+ }
+ \tl_if_eq:NnT \l__eb_bib_style_tl { authoryear }
+ { \bibliographystyle{gbt7714-author-year} }
+ \cs_set_eq:NN \cite \citep
+ }
+ { \exp_args:NV \bibliographystyle \l__eb_bib_otherstyle_tl }
+ \tl_if_empty:NF \l__eb_bib_citestyle_tl
+ { \exp_args:NV \setcitestyle \l__eb_bib_citestyle_tl }
+ \skip_zero:N \bibsep
+ \NewDocumentCommand{\printbibliography}{st+o}
+ {
+ \group_begin:
+ \tl_set_eq:NN \eb at toc@title \bibname
+ \IfValueT{##3}{ \keys_set:nn { eb/listoc } {##3} }
+ \tl_set:Nn \bibsection
+ {
+ \eb_title_number_intoc_bool:nn {##2} {##1}
+ \eb_multoc_pre_bool:
+ }
+ \exp_args:NV \bibliography \l__eb_bib_datafile_tl
+ \eb_multoc_post_bool:
+ \group_end:
+ }
+ }
+\cs_new_protected:Npn \eb_put_biblatex:n #1
+ { \PassOptionsToPackage{#1}{biblatex} }
+\cs_new_protected:Npn \EbBiblatexPreset
+ {
+ \tl_if_empty:NTF \l__eb_bib_otherstyle_tl
+ {
+ \tl_if_eq:NnT \l__eb_bib_style_tl { numerical }
+ { \eb_put_biblatex:n { style = gb7714-2015 } }
+ \tl_if_eq:NnT \l__eb_bib_style_tl { authoryear }
+ { \eb_put_biblatex:n { style = gb7714-2015ay } }
+ }
+ { \eb_put_biblatex:n { style = \l__eb_bib_otherstyle_tl } }
+ \tl_if_empty:NF \l__eb_bib_citestyle_tl
+ { \eb_put_biblatex:n { citestyle = \l__eb_bib_citestyle_tl } }
+ \eb_put_biblatex:n { backend = biber }
+ }
+\cs_new_protected:Npn \EbBiblatexPostset
+ {
+ \exp_args:NV \addbibresource \l__eb_bib_datafile_tl
+ \tl_gset:Nn \blx at default@theheading { bibintoc }
+ \defbibheading{bibintoc}[\bibname]
+ {\eb_biber_title_level_bool:n {##1}}
+ \skip_zero:N \bibitemsep
+ }
+\eb_at_end_preamble:n
+ {
+ \tl_if_empty:NF \l__eb_bib_datafile_tl
+ {
+ \bool_if:NTF \l__eb_backend_bibtex_bool
+ {
+ \eb at package@load[sort&compress]{natbib}
+ \EbBibtexSet
+ }
+ {
+ \EbBiblatexPreset
+ \eb at package@load{biblatex}
+ \EbBiblatexPostset
+ }
+ }
+ }
+
+\lstdefinestyle{easy-listings}
+ {
+ language = [LaTeX]TeX,
+ texcsstyle =
+ {
+ *\lst at ifdisplaystyle
+ \bfseries\color{ctex at verb}
+ \else
+ \color{ctex at verb}
+ \fi
+ },
+ basicstyle =
+ {
+ \ttfamily\lst at ifdisplaystyle
+ \small
+ \else
+ \color{ctex at verb}
+ \fi
+ },
+ keywordstyle =
+ {
+ \lst at ifdisplaystyle
+ \bfseries\color{ctex at verb}
+ \else
+ \color{ctex at verb}
+ \fi
+ },
+ framexleftmargin = 0pt,
+ framexrightmargin = 0pt,
+ xleftmargin = 3pt,
+ xrightmargin = 3pt,
+ numbersep = 10pt,
+ framesep = 3pt,
+ frame = single,
+ rulecolor = \color{ctex at frame},
+ commentstyle = \color{SlateGray},
+ emphstyle = \color{ctex at emph},
+ % emph = {},
+ morekeywords =
+ {
+ includegraphics,setmainfont,setsansfont,setmonofont,setCJKmainfont,setCJKsansfont,setCJKmonofont,setCJKfamilyfont,RequirePackage
+ }
+ }
+\lstset
+ {
+ style = easy-listings,
+ breaklines = true,
+ resetmargins = true,
+ % numbers = left,
+ numberstyle = \footnotesize,
+ aboveskip = 1.5ex plus .2ex minus .1ex,
+ belowskip = 0.55ex plus .2ex minus .1ex,
+ keepspaces = true,
+ framerule = \eb at rule@width at dim,
+ columns = flexible,
+ abovecaptionskip = -1ex,
+ belowcaptionskip = 1.5ex
+ }
+\lstloadlanguages{C,C++,Java,Python,Matlab}
+
+\clist_new:N \l__eb_hyperref_clist
+\cs_new_protected:Npn \eb_put_hyperref:n #1
+ { \clist_put_right:Nn \l__eb_hyperref_clist {#1} }
+\cs_new_protected:Npn \eb_define_linkcolor:nnn #1#2#3
+ { \definecolorset{HTML}{ctex@}{}{link,#1;url,#2;cite,#3} }
+\cs_new_protected:Npn \eb_define_themecolor:nnn #1#2#3
+ { \definecolorset{HTML}{ctex@}{}{frame,#1;emph,#2;verb,#3} }
+\cs_new_protected:Npn \eb_define_linkcolor:n #1
+ { \definecolorset{HTML}{ctex@}{}{link,#1;url,#1;cite,#1} }
+\cs_new_protected:Npn \eb_define_themecolor:n #1
+ { \definecolorset{HTML}{ctex@}{}{frame,#1;emph,#1;verb,#1} }
+\cs_new:Npn \eb_linkcolor_set:n #1
+ {
+ linkcolor/\clist_item:nn {#1} {1} .code:n =
+ {
+ \eb_define_linkcolor:nnn
+ { \clist_item:nn {#1} {2} }
+ { \clist_item:nn {#1} {3} }
+ { \clist_item:nn {#1} {4} }
+ \eb_put_hyperref:n
+ {
+ linkcolor = ctex at link,linkbordercolor = ctex at link,
+ urlcolor = ctex at url,urlbordercolor = ctex at url,
+ citecolor = ctex at cite,citebordercolor = ctex at cite
+ }
+ },
+ }
+\cs_new:Npn \eb_themecolor_set:n #1
+ {
+ color/\clist_item:nn {#1} {1} .code:n =
+ {
+ \eb_define_themecolor:nnn
+ { \clist_item:nn {#1} {2} }
+ { \clist_item:nn {#1} {3} }
+ { \clist_item:nn {#1} {4} }
+ },
+ }
+
+\bool_set_false:N \l__eb_toc_number_color_bool
+\eb_ctex_define:nn { refset }
+ {
+ linktype .choice:,
+ linktype/edge .code:n = { },
+ linktype/none .code:n = \eb_put_hyperref:n { hidelinks },
+ linktype/various .code:n =
+ {
+ \bool_set_true:N \l__eb_toc_number_color_bool
+ \eb_put_hyperref:n { colorlinks }
+ },
+ linktype .value_required:n = true,
+ linktype .initial:n = edge,
+
+ linktoc .choice:,
+ linktoc/unknown .code:n =
+ {
+ \eb_put_hyperref:n { linktoc = #1 }
+ \clist_map_inline:nn { page,none }
+ {
+ \tl_if_eq:NnT \l_keys_value_tl {##1}
+ {
+ \clist_map_break:n
+ { \colorlet{ctex at toc@number}{black} }
+ }
+ }
+ },
+ linktoc .default:n = all,
+ linktoc .initial:n = all,
+ unknown .code:n =
+ {
+ \eb_put_hyperref:x
+ {
+ \l_keys_key_str
+ \tl_if_empty:NF \l_keys_value_tl { = {#1} }
+ }
+ }
+ }
+\eb_ctex_define:nx { refset }
+ {
+ linkcolor .choice:,
+ \clist_map_function:nN
+ {
+ { fresh, 62d71f,0000B2,005752 },
+ { cutepink, ff69b4,9d5196,57b5e5 },
+ { navyblue, 000080,004986,eb6877 },
+ { crimson, dc143c,00c1c9,afcd20 }
+ }
+ \eb_linkcolor_set:n
+ linkcolor .default:n = navyblue,
+ linkcolor .initial:n = navyblue,
+ linkcol-all .code:n =
+ { \eb_define_linkcolor:n { \exp_not:n {#1} } }
+ }
+\colorlet{ctex at toc@number}{ctex at link}
+\eb_ctex_define:nx { style }
+ {
+ color .choice:,
+ color .value_required:n = true,
+ \clist_map_function:nN
+ {
+ { none, 000000,000000,000000 },
+ { seaside, 4169e1,708090,9932cc },
+ { energy, f39800,00a0e9,893895 },
+ { cyberpunk, 601986,eb6877,a4005b }
+ }
+ \eb_themecolor_set:n
+ color .initial:n = none,
+ color-all .code:n =
+ { \eb_define_themecolor:n { \exp_not:n {#1} } }
+ }
+
+\cs_new:Npn \eb_allow_urlbreak:
+ {
+ \cs_new:Npn \eb_add_urlbreak_points:
+ { \tl_map_function:NN \c__eb_urlbreak_points_tl \do }
+ \eb_appto_cmd:Nn \UrlBreaks
+ { \UrlOrds\eb_add_urlbreak_points: }
+ }
+\tl_const:Nn \c__eb_urlbreak_points_tl
+ {
+ ABCDEFGHIJKLMNOPQRSTUVWXYZ
+ abcdefghijklmnopqrstuvwxyz
+ 0123456789
+ }
+\ctex_at_end_preamble:n
+ {
+ \eb at package@load{hyperref}
+ \urlstyle{same}
+ \eb_allow_urlbreak:
+ \ctex_hypersetup:n { pdfstartview = FitH }
+ \exp_args:NV \hypersetup \l__eb_hyperref_clist
+ }
+
+\labelformat{part}{\CTEXthepart}
+\labelformat{chapter}{\CTEXthechapter}
+\labelformat{figure}{\figurename~#1}
+\labelformat{table}{\tablename~#1}
+\tl_if_eq:NnTF \l__ctex_scheme_tl { chinese }
+ {
+ \keys_set_known:nn { ctex }
+ {
+ contentsname = 目\hspace{\ccwd}录,
+ indexname = 索\hspace{\ccwd}引,
+ listfigurename = 图片索引,
+ listtablename = 表格索引,
+ abstractname = 摘\hspace{\ccwd}要,
+ lstlistlistingname = 代码索引,
+ lstlistingname = 代码
+ }
+ \labelformat{equation}{式(#1)}
+ \labelformat{section}{节 #1}
+ \labelformat{subsection}{小节 #1}
+ }
+ {
+ \keys_set_known:nn { ctex }
+ {
+ abstractname = Abstract,
+ lstlistlistingname = List~of~Codes,
+ lstlistingname = Code
+ }
+ \labelformat{equation}{Equation~(#1)}
+ \labelformat{section}{Section~#1}
+ \labelformat{subsection}{Subsection~#1}
+ }
+\endinput
+%%
+%% End of file `easybase.sty'.
Property changes on: trunk/Master/texmf-dist/tex/latex/easybook/easybase.sty
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/texmf-dist/tex/latex/easybook/easybook.cls
===================================================================
--- trunk/Master/texmf-dist/tex/latex/easybook/easybook.cls 2021-06-02 20:58:00 UTC (rev 59433)
+++ trunk/Master/texmf-dist/tex/latex/easybook/easybook.cls 2021-06-02 20:58:14 UTC (rev 59434)
@@ -12,43 +12,9 @@
%% The latest version of this license is in
%% https://creativecommons.org/licenses/by/4.0/legalcode
\NeedsTeXFormat{LaTeX2e}[2020/10/01]
-\RequirePackage{l3keys2e,etoolbox}
-\ProvidesExplClass{easybook}{2021/05/31}{1.25p}{beta}
+\RequirePackage{l3keys2e}
+\ProvidesExplClass{easybook}{2021/06/02}{1.25q}{beta}
-\cs_generate_variant:Nn \eb_ctex_define:nn { nx }
-\cs_generate_variant:Nn \int_to_arabic:n { v }
-\cs_generate_variant:Nn \dim_add:Nn { NV }
-\cs_generate_variant:Nn \eb_put_hyperref:n { x }
-\cs_generate_variant:Nn \seq_set_from_clist:Nn { No }
-\cs_new_protected:Npn \eb_ctex_define:nn #1
- { \keys_define:nn { ctex/#1 } }
-\cs_new_protected:Npn \eb_put_ctexbook:n #1
- { \PassOptionsToClass{#1}{ctexbook} }
-\cs_new_protected:Npn \eb_patch_cmd:Nnn #1#2#3
- {
- \ctex_patch_cmd_once:NnnnTF #1 { } {#2} {#3}
- { } { \ctex_patch_failure:N #1 }
- }
-\cs_new_protected:Npn \eb_preto_cmd:Nn #1#2
- {
- \ctex_preto_cmd:NnnTF #1 { } {#2}
- { } { \ctex_patch_failure:N #1 }
- }
-\cs_new_protected:Npn \eb_appto_cmd:Nn #1#2
- {
- \ctex_appto_cmd:NnnTF #1 { } {#2}
- { } { \ctex_patch_failure:N #1 }
- }
-\cs_new_protected:Npn \eb_at_begin_environment:nn #1#2
- {
- \seq_set_from_clist:No \l__eb_env_hook_name_seq {#1}
- \seq_map_inline:Nn \l__eb_env_hook_name_seq
- { \AtBeginEnvironment{##1}{#2} }
- }
-\cs_new_protected:Npn \eb_at_end_preamble:n
- { \ctex_gadd_ltxhook:nn { env/document/before } }
-\cs_gset_eq:NN \PackageWarning \use_none:nn
-
\bool_set_false:N \l__eb_compile_draft_bool
\bool_set_false:N \l__eb_title_newline_bool
\bool_set_false:N \l__eb_font_noto_bool
@@ -56,6 +22,8 @@
\bool_set_true:N \l__eb_class_book_bool
\tl_new:N \g__eb_config_tl
\clist_new:N \g__eb_options_clist
+\cs_new_protected:Npn \eb_put_ctexbook:n #1
+ { \PassOptionsToClass{#1}{ctexbook} }
\keys_define:nn { easybook }
{
@@ -111,99 +79,10 @@
}
\ProcessKeysOptions{easybook}
-
-\clist_map_inline:nn
- {
- { svgnames } { xcolor },
- { stable } { footmisc },
- { normalem } { ulem },
- { protrusion = false } { microtype },
- { list = off } { bicaption },
- { shortlabels,inline } { enumitem },
- { many } { tcolorbox },
- { xindy } { imakeidx },
- { CJKmath = true } { xeCJK },
- { no-math } { fontspec },
- { upint } { newtxmath }
- }
- { \PassOptionsToPackage #1 }
\eb_put_ctexbook:n { \g__eb_options_clist }
\LoadClass[UTF8]{ctexbook}
-\bool_new:N \l__eb_multoc_bool
-\bool_new:N \l__eb_uppercase_bool
-\bool_new:N \l__eb_chap_withpart_bool
-\tl_new:N \l__eb_foot_numparent_choice_tl
-
-\seq_const_from_clist:Nn \c__eb_options_path_seq
- {
- style,subfont,spread,
- refset,bibset,thmset,
- geoset,hdrset,tocset
- }
-\seq_map_inline:Nn \c__eb_options_path_seq
- {
- \ctex_define:n { #1 .meta:nn = { ctex/#1 } {##1} }
- \cs_new:cpn {#1} ##1 { \keys_set:nn { ctex/#1 } {##1} }
- }
-\keys_define:nn { } { ctex/link .inherit:n = ctex/refset }
-\cs_set_eq:NN \link \refset
-\ctex_define:n
- {
- link .meta:nn = { ctex/link } {#1},
- lstlistlistingname .tl_set:N = \lstlistlistingname,
- lstlistingname .tl_set:N = \lstlistingname
- }
-\eb_ctex_define:nn { style }
- {
- multoc .bool_set:N = \l__eb_multoc_bool,
- multoc .default:n = true,
- withpart .bool_set:N = \l__eb_chap_withpart_bool,
- withpart .default:n = true,
- withpart .initial:n = false,
- rulewidth .dim_set:N = \l__eb_rule_width_dim,
- rulewidth .initial:n = 0.75pt,
- uppercase .bool_set:N = \l__eb_uppercase_bool,
- uppercase .default:n = true,
- uppercase .initial:n = true,
- figurepath .tl_set:N = \l_eb_graphics_path_tl,
-
- footwith .choices:nn =
- { part,page,chapter }
- {
- \tl_set_eq:NN
- \l__eb_foot_numparent_choice_tl \l_keys_choice_tl
- },
- footwith .value_required:n = true,
- footwith .initial:n = chapter,
-
- figure-sep .tl_set:N = \l__eb_figure_separator_tl,
- table-sep .tl_set:N = \l__eb_table_separator_tl,
- listing-sep .tl_set:N = \l__eb_lstlisting_separator_tl,
- equation-sep .tl_set:N = \l__eb_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,
- footmisc,setspace,
- amsmath,amsthm,thmtools,
- chemformula,siunitx,ulem,pifont,
- geometry,marginnote,nccfoots,
- pdfpages,graphicx,
- fancyhdr,titletoc,caption,
- tabularray,
- enumitem,
- listings
- }
+\RequirePackage{easybase}
\ctex_at_end:n
{
\tl_if_empty:NF \g__eb_config_tl
@@ -210,30 +89,6 @@
{ \file_input:n { \g__eb_config_tl } }
}
-\cs_new_protected:Npn \eb_package_later_bool:nn #1#2
- {
- \@ifpackagelater{#1}{#2}
- {}{\msg_warning:nnn { easybook } { package-old } {#1}}
- }
-\msg_new:nnn { easybook } { package-old }
- {
- Package~#1~has~been~out~of~date. \\
- Some~problems~or~errors~may~occur \\
- if~you~continue~compiling. \\\\
- Please~update~your~macro~package~from~CTAN.
- }
-\clist_map_inline:nn
- {
- { expl3 } { 2020/10/27 },
- { xparse } { 2020/10/27 },
- { l3keys2e } { 2020/10/27 },
- { ctex } { 2021/03/14 },
- { thmtools } { 2020/08/01 },
- { caption } { 2020/08/24 },
- { siunitx } { 2021/05/17 }
- }
- { \eb_package_later_bool:nn #1 }
-
\sys_if_engine_xetex:TF
{
\cs_new_eq:NN \eb_set_family:nnn \xeCJK_set_family:nnn
@@ -331,1669 +186,6 @@
\cs_new_protected:Npn \fangsong { \eb_switch_family:n { fangsong } }
}
-\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__eb_geometry_clist
-\eb_ctex_define:nn { geoset }
- {
- unknown .code:n =
- {
- \clist_gput_right:Nx \g__eb_geometry_clist
- {
- \l_keys_key_str
- \tl_if_empty:NF \l_keys_value_tl { = {#1} }
- }
- }
- }
-
-\RenewDocumentCommand{\cleardoublepage}{O{empty}}
- {
- \clearpage
- \bool_if:NT \l__eb_page_twoside_bool
- {
- \int_if_odd:nF { \c at page }
- { \hbox:n { }\thispagestyle{#1}\clearpage }
- }
- }
-\RenewDocumentCommand{\frontmatter}{sO{Roman}}
- {
- \IfBooleanTF{#1}{\clearpage}{\cleardoublepage}
- \boolfalse{@mainmatter}
- \pagenumbering{#2}
- }
-\RenewDocumentCommand{\mainmatter}{s}
- {
- \IfBooleanTF{#1}{\clearpage}{\cleardoublepage}
- \booltrue{@mainmatter}
- \pagenumbering{arabic}
- }
-\seq_const_from_clist:Nn \c__eb_mark_title_level_seq
- { chapter,section,subsection }
-\seq_map_inline:Nn \c__eb_mark_title_level_seq
- {
- \exp_args:Nc \NewDocumentCommand { eb at mark@#1 at label@layout }
- {O{\use:c { CTEXthe#1 }}m}
- {\tl_set:cn { eb at mark@#1 at label } {##1##2}}
- \cs_new:cpn { eb_mark_#1_number_bool:n } ##1
- {
- \tl_if_in:nnTF {##1} { [ }
- { \use:c { eb at mark@#1 at label@layout } ##1 }
- { \use:c { eb at mark@#1 at label@layout } {##1} }
- }
- }
-
-\cs_gset_eq:NN \easyhead \fancyhead
-\cs_gset_eq:NN \easyfoot \fancyfoot
-\eb_ctex_define:nn { hdrset }
- {
- head-foot .tl_set:N = \l__eb_fancyhf_content_tl,
- head-foot .initial:n =
- {
- \bool_if:NTF \l__eb_page_twoside_bool
- {
- \easyhead[EC]{\color{ctex at frame}\kaishu\leftmark}
- \easyhead[OC]{\color{ctex at frame}\kaishu\rightmark}
- \easyhead[EL,OR]{\color{ctex at frame}\thepage}
- }
- {
- \easyhead[L]{\color{ctex at frame}\kaishu\leftmark}
- \easyhead[R]{\color{ctex at frame}\thepage}
- }
- },
-
- chap-mark .cs_set:Np = \eb_fancyhf_chapter_mark:n #1,
- chap-mark .initial:n =
- {
- \int_compare:nNnT { \c at secnumdepth } > { -1 }
- {
- \ifbool{@mainmatter}
- {
- \int_if_odd:nT { \CTEX at chapter@numbering }
- { \eb at mark@chapter at label }
- }{}
- }#1
- },
- sec-mark .cs_set:Np = \eb_fancyhf_section_mark:n #1,
- sec-mark .initial:n =
- {
- \int_compare:nNnT { \c at secnumdepth } > { 0 }
- {
- \int_if_odd:nT { \CTEX at section@numbering }
- { \eb at mark@section at label }
- }#1
- },
- subsec-mark .cs_set:Np = \eb_fancyhf_subsection_mark:n #1,
- subsec-mark .initial:n =
- {
- \int_compare:nNnT { \c at secnumdepth } > { 1 }
- {
- \int_if_odd:nT { \CTEX at subsection@numbering }
- { \eb at mark@subsection at label }
- }#1
- },
- chap-label .code:n = \eb_mark_chapter_number_bool:n {#1},
- chap-label .initial:n = \hspace{\ccwd},
- sec-label .code:n = \eb_mark_section_number_bool:n {#1},
- sec-label .initial:n = \hspace{0.5\ccwd},
- subsec-label .code:n = \eb_mark_subsection_number_bool:n {#1},
- subsec-label .initial:n = \hspace{0.5\ccwd},
-
- headrule .tl_gset:N = \headrule,
- headrule .initial:n =
- {
- \group_begin:
- \color{ctex at frame}\vspace*{1.5pt}
- \hrule width \textwidth height \l__eb_rule_width_dim
- \group_end:
- },
- footrule .tl_gset:N = \footrule,
- footrule .initial:n = { },
- footnoterule .tl_gset:N = \footnoterule,
- footnoterule .initial:n =
- {
- \group_begin:
- \color{ctex at frame}
- \hrule width 0.35\columnwidth height \l__eb_rule_width_dim
- \vspace*{2.6pt}
- \group_end:
- },
-
- fnmargin .dim_set:N = \footnotemargin,
- fnmargin .initial:n = 0.75\ccwd,
- fnparskip .tl_set:N = \hangfootparskip,
- fnparskip .initial:n = 0ex,
- fnparindent .tl_set:N = \hangfootparindent,
- fnparindent .initial:n = 2\ccwd,
-
- fnhang .bool_set:N = \l__eb_footnote_hang_bool,
- fnhang .default:n = true,
- fnhang .initial:n = true,
- fnmark-pos .tl_set:N = \l__eb_fnmark_position_tl,
- fnmark-pos .initial:n = super,
- afterfnmark .tl_set:N = \l__eb_fnmark_after_tl,
- afterfnmark .initial:n =
- { \tl_if_eq:NnF \l__eb_fnmark_position_tl { super } { \space } },
- fnmark-form .tl_set:N = \l__eb_fnmark_format_tl,
-
- fnmark-num .choices:nn =
- { plain,pifont,pifont*,pifont-sans,pifont-sans* }
- {
- \tl_gset_eq:NN
- \l__eb_fnmark_number_choice_tl \l_keys_choice_tl
- },
- fnmark-num .value_required:n = true
- }
-
-\cs_new:Npn \eb_upper_number_mark_bool:nn #1#2
- {
- \bool_if:NT \l__eb_uppercase_bool
- { \text_uppercase:n } {\use:c { eb_fancyhf_#1_mark:n } {#2}}
- }
-\cs_new:Npn \eb at number@markdouble #1#2
- {
- \markboth
- {\eb_upper_number_mark_bool:nn {#1} {#2}}
- {
- \bool_if:NT \l__eb_page_twoside_bool
- { \eb_upper_number_mark_bool:nn {#1} {#2} }
- }
- }
-\cs_new:Npn \eb at number@markright #1#2
- { \markright{\eb_upper_number_mark_bool:nn {#1} {#2}} }
-\ctex_at_end_preamble:n
- {
- \exp_args:NV \geometry \g__eb_geometry_clist
- \fancyhf{}
- \tl_use:N \l__eb_fancyhf_content_tl
- \cs_gset_eq:NN \ps at plain \ps at empty
- \pagestyle{fancy}
- \bool_if:NTF \l__eb_class_book_bool
- {
- \cs_gset:Npn \chaptermark #1
- { \eb at number@markdouble{chapter}{#1} }
- \cs_gset:Npn \sectionmark #1
- { \eb at number@markright{section}{#1} }
- }
- {
- \cs_gset:Npn \sectionmark #1
- { \eb at number@markdouble{section}{#1} }
- \cs_gset:Npn \subsectionmark #1
- { \eb at number@markright{subsection}{#1} }
- }
- \bool_if:NT \l__eb_compile_draft_bool
- {
- \easyfoot[C]{\color{SlateGray}\sffamily\today}
- \geometry{showframe}
- }
- \tl_if_empty:NF \l_eb_graphics_path_tl
- { \exp_args:No \graphicspath { \l_eb_graphics_path_tl } }
- \cs_if_exist:NF \kaishu { \cs_gset_eq:NN \kaishu \itshape }
- }
-
-\eb_at_end_preamble:n
- {
- \group_begin:
- \footnotesize
- \exp_args:Nx
- \linespread{\fp_use:N \l__eb_spread_footnote_fp}\selectfont
- \exp_args:NNNo \group_end:
- \dim_set:Nn \footnotesep { \dim_use:N \box_ht:N \strutbox }
- \bool_if:NT \l__eb_chap_withpart_bool
- { \counterwithin*{chapter}{part} }
- \tl_if_eq:NnT \l__eb_foot_numparent_choice_tl { part }
- {
- \counterwithout*{footnote}{chapter}
- \counterwithin*{footnote}{part}
- }
- \tl_if_eq:NnT \l__eb_foot_numparent_choice_tl { page }
- {
- \counterwithout*{footnote}{chapter}
- \counterwithin*{footnote}{page}
- }
- \bool_if:NTF \l__eb_footnote_hang_bool
- { \booltrue{FN at hangfoot} } { \boolfalse{FN at hangfoot} }
- }
-\eb_patch_cmd:Nnn \@footnotetext
- { \reset at font }
- {
- \linespread{\fp_use:N \l__eb_spread_footnote_fp}
- \selectfont\ignorespaces
- \l__eb_subfont_footnote_tl
- }
-\eb_patch_cmd:Nnn \@mpfootnotetext
- { \reset at font }
- {
- \linespread{\fp_use:N \l__eb_spread_footnote_fp}
- \selectfont\ignorespaces
- \l__eb_subfont_footnote_tl
- }
-\ctex_after_end_preamble:n
- {
- \ExplSyntaxOn\char_set_catcode_letter:N \@
- \eb_patch_cmd:Nnn \@footnotemark
- { \@makefnmark }
- {
- \tl_use:N \l__eb_subfont_footnote_tl
- \tl_use:N \l__eb_fnmark_format_tl
- {\hbox:n { \textsuperscript{\@thefnmark} }}
- }
- \ExplSyntaxOff\char_set_catcode_other:N \@
- }
-\cs_set:Npn \@makefnmark
- {
- \tl_use:N \l__eb_subfont_footnote_tl
- \tl_use:N \l__eb_fnmark_format_tl
- {
- \hbox:n
- {
- \tl_if_eq:NnT \l__eb_fnmark_position_tl { super }
- { \textsuperscript }{\@thefnmark}
- \tl_use:N \l__eb_fnmark_after_tl
- }
- }
- }
-\cs_set:Npn \thefootnote { \eb_footnote_counter:N \c at footnote }
-\cs_set:Npn \thempfootnote { \int_to_alph:n { \c at mpfootnote } }
-
-\cs_new_protected:Npn \eb_fnmark_number_set:nn #1#2
- { \tl_const:cn { c__eb_fnmark_number_#1_tl } {#2} }
-\clist_map_inline:nn
- {
- { plain } { plain },
- { pifont } { pifont },
- { pifont_neg } { pifont* },
- { pifont_sans } { pifont-sans },
- { pifont_sans_neg } { pifont-sans* }
- }
- { \eb_fnmark_number_set:nn #1 }
-\cs_new:Npn \eb_fnmark_counter_pifont:N #1
- { \ding{\int_eval:n { 171 + #1 }} }
-\cs_new:Npn \eb_fnmark_counter_pifont_neg:N #1
- { \ding{\int_eval:n { 181 + #1 }} }
-\cs_new:Npn \eb_fnmark_counter_pifont_sans:N #1
- { \ding{\int_eval:n { 191 + #1 }} }
-\cs_new:Npn \eb_fnmark_counter_pifont_sans_neg:N #1
- { \ding{\int_eval:n { 201 + #1 }} }
-\cs_new:Npn \eb_footnote_counter:N #1
- {
- \tl_case:NnF \l__eb_fnmark_number_choice_tl
- {
- \c__eb_fnmark_number_plain_tl
- { \int_use:N #1 }
- \c__eb_fnmark_number_pifont_tl
- { \eb_fnmark_counter_pifont:N #1 }
- \c__eb_fnmark_number_pifont_neg_tl
- { \eb_fnmark_counter_pifont_neg:N #1 }
- \c__eb_fnmark_number_pifont_sans_tl
- { \eb_fnmark_counter_pifont_sans:N #1 }
- \c__eb_fnmark_number_pifont_sans_neg_tl
- { \eb_fnmark_counter_pifont_sans_neg:N #1 }
- }
- { \int_use:N #1 }
- }
-
-\contentsuse{lstlisting}{lol}
-\seq_const_from_clist:Nn \c__eb_toc_heading_level_seq
- { part,chapter,section,subsection,figure,table,lstlisting }
-\cs_new_protected:Npn \eb_toc_assign_keys:n #1
- {
- \ctex_define:n { tocset/#1 .meta:nn = { ctex/tocset/#1 } {##1} }
- \eb_ctex_define:nn { tocset }
- {
- #1/format .tl_set:c = l__eb_toc_#1_format_tl,
- #1/format+ .code:n =
- { \tl_put_right:cn { l__eb_toc_#1_format_tl } {##1} },
- #1/format~+ .code:n =
- { \tl_put_right:cn { l__eb_toc_#1_format_tl } {##1} },
- #1/indent .tl_set:c = l__eb_toc_#1_indent_tl,
- #1/rule .tl_set:c = l__eb_toc_#1_rule_tl,
- #1/numsep .tl_set:c = eb at toc@#1 at numsep
- }
- \seq_if_in:NnF \c__eb_toc_heading_level_seq { subsection }
- {
- \eb_ctex_define:nn { tocset }
- { #1/belowoffset .dim_set:c = l__eb_toc_#1_offset_dim }
- }
- \seq_pop:NN \c__eb_toc_heading_level_seq \l_tmpa_tl
- \titlecontents{#1}
- [\use:c { l__eb_toc_#1_indent_tl }]
- {\use:c { l__eb_toc_#1_format_tl }}
- {
- \ifbool{eb at titletoc@hang at fix}
- {
- \contentspush
- {
- \bool_if:NT \l__eb_toc_number_color_bool
- { \color{ctex at toc@number} }
- \thecontentslabel
- \hspace{\use:c { eb at toc@#1 at numsep }}
- }
- }{}
- }{}
- {\use:c { l__eb_toc_#1_rule_tl }}
- }
-\seq_map_function:NN
-\c__eb_toc_heading_level_seq \eb_toc_assign_keys:n
-
-\seq_const_from_clist:Nn \c__eb_toc_list_meta_keys_seq
- { format,format+,format~+,indent,rule,numsep,belowoffset }
-\ctex_define:n { tocset/list .meta:nn = { ctex/tocset/list } {#1} }
-\seq_map_inline:Nn \c__eb_toc_list_meta_keys_seq
- {
- \eb_ctex_define:nn { tocset }
- {
- list/#1 .meta:n =
- {
- figure/#1 = ##1,
- table/#1 = ##1,
- lstlisting/#1 = ##1
- }
- }
- }
-
-\cs_new:Npn \EbNumberLine #1
- {
- \CTEXifname
- {
- \use:c { CTEXthe#1 }
- \hspace{\use:c { eb at toc@#1 at numsep }}
- }{}
- }
-\newbool{eb at titletoc@hang at fix}
-\eb_ctex_define:nn { tocset }
- {
- lolskip .skip_set:N = \l__eb_toc_lolskip_skip,
- lolskip .initial:n = 0.8pc,
-
- belowoffset .dim_set:N = \l__eb_toc_offset_dim,
- belowoffset .initial:n =
- { \bool_if:NTF \l__eb_class_book_bool { -1pc } { -0.35pc } },
- tocline-fig .cs_set:Np = \eb at labelname@lof #1,
- tocline-fig .initial:n =
- {
- \figurename\space #1
- \notbool{eb at titletoc@hang at fix}
- {\hspace{\eb at toc@figure at numsep}}{}
- },
- tocline-tab .cs_set:Np = \eb at labelname@lot #1,
- tocline-tab .initial:n =
- {
- \tablename\space #1
- \notbool{eb at titletoc@hang at fix}
- {\hspace{\eb at toc@table at numsep}}{}
- },
- tocline-lst .tl_set:N = \eb at labelname@lol,
- tocline-lst .initial:n =
- {
- \lstlistingname\space\thelstlisting
- \notbool{eb at titletoc@hang at fix}
- {\hspace{\eb at toc@lstlisting at numsep}}{}
- },
- line-align .bool_set:N = \l__eb_toc_line_align_bool,
- line-align .default:n = true,
- line-align .initial:n = true,
-
- hang .choice:,
- hang/true .code:n =
- {
- \booltrue{eb at titletoc@hang at fix}
- \ctex_set:n
- {
- chapter/tocline = \CTEXnumberline{##1}##2,
- section/tocline = \CTEXnumberline{##1}##2,
- subsection/tocline = \CTEXnumberline{##1}##2
- }
- },
- hang/false .code:n =
- {
- \ctex_set:n
- {
- chapter/tocline = \EbNumberLine{##1}##2,
- section/tocline = \EbNumberLine{##1}##2,
- subsection/tocline = \EbNumberLine{##1}##2
- }
- },
- hang .default:n = true,
- hang .initial:n = false,
-
- numsep-all .meta:n =
- {
- part/numsep = #1,
- chapter/numsep = #1,
- section/numsep = #1,
- subsection/numsep = #1,
- list/numsep = #1
- },
- numsep-all .initial:n = \ccwd,
- indent-all .meta:n =
- {
- part/indent = #1,
- chapter/indent = #1,
- section/indent = #1,
- subsection/indent = #1,
- list/indent = #1
- },
- rule-all .meta:n =
- {
- part/rule = #1,
- chapter/rule = #1,
- section/rule = #1,
- subsection/rule = #1,
- list/rule = #1
- }
- }
-
-\NewDocumentCommand{\tocrule}{sO{0.7pc}D(){1.2}mO{}}
- {
- \normalsize\normalfont
- \titlerule*[#2]{\scalebox{#3}{#4}}#5
- \IfBooleanTF{#1}
- {\thecontentspage}
- {
- \bool_if:NTF \l__eb_toc_line_align_bool
- { \contentspage } { \thecontentspage }
- }
- }
-\ctex_set:nn { tocset }
- {
- part/format = \addvspace{1pc}\sffamily\large,
- part/indent = 0\ccwd,
- part/rule = \tocrule{}[\bfseries],
-
- chapter/format = \addvspace{1pc}\sffamily\large,
- chapter/indent = 0\ccwd,
- chapter/rule = \tocrule{$\cdot$}[\bfseries],
-
- section/format = \addvspace{0.35pc},
- section/indent =
- { \bool_if:NTF \l__eb_class_book_bool { 1.5\ccwd } { 0\ccwd } },
- section/rule = \tocrule{$\cdot$},
-
- subsection/format = \addvspace{0.35pc},
- subsection/indent =
- { \bool_if:NTF \l__eb_class_book_bool { 3.8\ccwd } { 1.4\ccwd } },
- subsection/rule = \tocrule{$\cdot$},
-
- list/format = \addvspace{0.2pc},
- list/indent = 0\ccwd,
- list/rule = \tocrule{$\cdot$},
- list/belowoffset =
- { \bool_if:NTF \l__eb_class_book_bool { 0pc } { 0.15pc } }
- }
-
-\prop_new:N \l__eb_label_name_prop
-\prop_set_from_keyval:Nn \l__eb_label_name_prop
- {
- figure = \eb at labelname@lof,
- table = \eb at labelname@lot
- }
-\cs_gset:Npn \caption@@@addcontentsline #1#2#3#4
- {
- \addcontentsline{#1}{#2}
- {
- \ifbool{eb at titletoc@hang at fix}{\protect\numberline}{}
- {\prop_item:Nn \l__eb_label_name_prop {#2}{#3}}#4
- }
- }
-\ctex_patch_cmd:Nnn \lst at MakeCaption
- {
- \addcontentsline{lol}{lstlisting}
- {\protect\numberline{\thelstlisting}\lst@@caption}
- }
- {
- \addcontentsline{lol}{lstlisting}
- {
- \ifbool{eb at titletoc@hang at fix}{\protect\numberline}{}
- {\eb at labelname@lol}\lst@@caption
- }
- }
-
-\contentsuse{}{tec}
-\cs_set_protected:Npn \CTEX at addbitocline #1#2
- {
- \group_begin:
- \def\CTEX at prechapter{\CTEX at prebichapter}
- \def\CTEX at thechapter{\CTEX at bichapter@number}
- \def\CTEX at postchapter{\CTEX at postbichapter}
- \addcontentsline{tec}{#1}
- {\use:c { CTEX@#1 at tocline }{#1}{#2}}
- \group_end:
- }
-\seq_const_from_clist:Nn \c__eb_bitoc_title_level_seq
- { chapter,section,subsection }
-\seq_map_inline:Nn \c__eb_bitoc_title_level_seq
- {
- \exp_args:Nc \NewDocumentCommand {bi#1}{sO{##3}mm}
- {
- \IfBooleanTF{##1}
- {
- \use:c {#1}*{\phantomsection ##3}
- \CTEX at addtocline{#1}{##2}
- \tl_if_empty:oF {##4} { \CTEX at addbitocline{#1}{##4} }
- }{
- \use:c {#1}[##2]{##3}
- \tl_if_empty:oF {##4} { \CTEX at addbitocline{#1}{##4} }
- }
- }
- }
-
-\eb_appto_cmd:Nn \@chapter
- {
- \skip_if_eq:nnF { \l__eb_toc_lolskip_skip } { \c_zero_skip }
- {
- \addtocontents{lol}
- {\protect\addvspace{\skip_use:N \l__eb_toc_lolskip_skip}}
- }
- \bool_if:NF \l__eb_class_book_bool
- { \msg_error:nn { easybook } { no-chapter } }
- }
-\eb_appto_cmd:Nn \@schapter
- {
- \bool_if:NF \l__eb_class_book_bool
- { \msg_error:nn { easybook } { no-chapter } }
- }
-\msg_new:nnn { easybook } { no-chapter }
- {
- Your~document~class~is~in~article~mode. \\
- The~\string\chapter\space~command~will~not~be~used.
- }
-
-\tl_set:Nn \l__eb_toc_type_tl { book }
-\tl_new:N \eb at bitoc@title
-\keys_define:nn { eb/listoc }
- {
- article .code:n = \tl_set:Nn \l__eb_toc_type_tl { article },
- book .code:n = { },
- multoc .bool_set:N = \l__eb_multoc_bool,
- multoc .default:n = true,
- multoc .initial:n = false,
- title .code:n = \eb_assign_toc_title:n {#1}
- }
-\bool_if:NTF \l__eb_class_book_bool
- { \keys_define:nn { } { eb/listoc .inherit:n = ctex/chapter } }
- { \keys_define:nn { } { eb/listoc .inherit:n = ctex/section } }
-\NewDocumentCommand{\eb_assign_toc_title:n}
- {>{\SplitArgument{1}{,}}m}
- {\eb_assign_toc_title_judge:nn #1}
-\cs_new_protected:Npn \eb_assign_toc_title_judge:nn #1#2
- {
- \tl_set:Nn \eb at toc@title {#1}
- \tl_if_novalue:nTF {#2}
- { \tl_clear:N \eb at bitoc@title }
- { \tl_set:Nn \eb at bitoc@title {#2} }
- }
-
-\cs_new:Npn \eb_upper_nonumber_mark_bool:n #1
- {
- \bool_if:NTF \l__eb_uppercase_bool
- { \text_uppercase:n {#1} }
- { \text_titlecase_first:n {#1} }
- }
-\cs_new:Npn \eb at nonumber@markdouble #1
- {
- \markboth
- {\eb_upper_nonumber_mark_bool:n {#1}}
- {
- \bool_if:NT \l__eb_page_twoside_bool
- { \eb_upper_nonumber_mark_bool:n {#1} }
- }
- }
-\cs_new:Npn \eb at nonumber@markright #1
- { \markright{\eb_upper_nonumber_mark_bool:n {#1}} }
-
-\cs_new_protected:Npn \eb_title_mark_intoc:n #1
- {
- \tl_if_eq:NnTF \l__eb_toc_type_tl { book }
- {
- \bichapter*{#1}{\eb at bitoc@title}
- \eb at nonumber@markdouble{#1}
- }
- {
- \bisection*{#1}{\eb at bitoc@title}
- \bool_if:NTF \l__eb_class_book_bool
- { \eb at nonumber@markright{#1} }
- { \eb at nonumber@markdouble{#1} }
- }
- }
-\cs_new_protected:Npn \eb_title_mark_notoc:n #1
- {
- \tl_if_eq:NnTF \l__eb_toc_type_tl { book }
- {
- \chapter*{\phantomsection #1}
- \eb at nonumber@markdouble{#1}
- }
- {
- \section*{\phantomsection #1}
- \bool_if:NTF \l__eb_class_book_bool
- { \eb at nonumber@markright{#1} }
- { \eb at nonumber@markdouble{#1} }
- }
- }
-\cs_new_protected:Npn \eb_title_number_intoc_bool:nn #1#2
- {
- \IfBooleanTF{#1}
- {
- \tl_if_eq:NnTF \l__eb_toc_type_tl { book }
- { \bichapter{\eb at toc@title}{\eb at bitoc@title} }
- { \bisection{\eb at toc@title}{\eb at bitoc@title} }
- }{
- \IfBooleanTF{#2}
- {\eb_title_mark_notoc:n {\eb at toc@title}}
- {\eb_title_mark_intoc:n {\eb at toc@title}}
- }
- }
-\cs_new_protected:Npn \eb_biber_title_level_bool:n #1
- {
- \bool_if:NTF \l__eb_class_book_bool
- { \bichapter*{#1}{\l__eb_bib_bitoc_title} }
- { \bisection*{#1}{\l__eb_bib_bitoc_title} }
- \eb at nonumber@markdouble{#1}
- }
-\cs_new_protected:Npn \eb_multoc_pre_bool:
- {
- \bool_if:NTF \l__eb_class_book_bool
- {
- \ifbool{@twocolumn}
- {
- \booltrue{@restonecol}
- \bool_if:NF \l__eb_multoc_bool { \onecolumn }
- }{
- \boolfalse{@restonecol}
- \bool_if:NT \l__eb_multoc_bool { \twocolumn }
- }
- }
- { \tl_set:Nn \l__eb_toc_type_tl { article } }
- }
-\cs_new_protected:Npn \eb_multoc_post_bool:
- {
- \bool_if:NT \l__eb_class_book_bool
- { \ifbool{@restonecol}{\twocolumn}{\onecolumn} }
- }
-\RenewDocumentCommand{\tableofcontents}{t+oD(){}}
- {
- \group_begin:
- \tl_set_eq:NN \eb at toc@title \contentsname
- \tl_set:Nn \eb at bitoc@title { Contents }
- \IfValueT{#2}{\keys_set:nn { eb/listoc } {#2}}
- \eb_multoc_pre_bool:
- \eb_title_mark_notoc:n { \eb at toc@title }
- \vspace*{\dim_use:N \l__eb_toc_offset_dim}
- \@starttoc{toc}#3
- \IfBooleanT{#1}
- {
- \eb_title_mark_notoc:n { \eb at bitoc@title }
- \vspace*{\dim_use:N \l__eb_toc_offset_dim}
- \@starttoc{tec}
- }
- \eb_multoc_post_bool:
- \group_end:
- }
-\RenewDocumentCommand{\listoffigures}{st+o}
- {
- \group_begin:
- \tl_set_eq:NN \eb at toc@title \listfigurename
- \IfValueT{#3}{\keys_set:nn { eb/listoc } {#3}}
- \eb_multoc_pre_bool:
- \eb_title_number_intoc_bool:nn {#2} {#1}
- \dim_add:NV \l__eb_toc_offset_dim \l__eb_toc_figure_offset_dim
- \vspace*{\dim_use:N \l__eb_toc_offset_dim}
- \@starttoc{lof}
- \eb_multoc_post_bool:
- \group_end:
- }
-\RenewDocumentCommand{\listoftables}{st+o}
- {
- \group_begin:
- \tl_set_eq:NN \eb at toc@title \listtablename
- \IfValueT{#3}{\keys_set:nn { eb/listoc } {#3}}
- \eb_multoc_pre_bool:
- \eb_title_number_intoc_bool:nn {#2} {#1}
- \dim_add:NV \l__eb_toc_offset_dim \l__eb_toc_table_offset_dim
- \vspace*{\dim_use:N \l__eb_toc_offset_dim}
- \@starttoc{lot}
- \eb_multoc_post_bool:
- \group_end:
- }
-\NewDocumentCommand{\listoflistings}{st+o}
- {
- \group_begin:
- \tl_set_eq:NN \eb at toc@title \lstlistlistingname
- \IfValueT{#3}{\keys_set:nn { eb/listoc } {#3}}
- \eb_multoc_pre_bool:
- \eb_title_number_intoc_bool:nn {#2} {#1}
- \dim_add:NV \l__eb_toc_offset_dim \l__eb_toc_lstlisting_offset_dim
- \vspace*{\dim_use:N \l__eb_toc_offset_dim}
- \@starttoc{lol}
- \eb_multoc_post_bool:
- \group_end:
- }
-
-\ctex_at_end_package:nn { imakeidx }
- {
- \makeindex[
- options = -M~texindy~-C~utf8,
- program = truexindy,
- columns = 2,
- columnsep = 2\ccwd
- ]
- \RenewDocumentCommand{\printindex}{st+D(){\imki at jobname}o}
- {
- \group_begin:
- \tl_set_eq:NN \eb at toc@title \indexname
- \cs_set_eq:NN \imki at indexlevel \use_none:n
- \setkeys{imki}{intoc = false}
- \IfValueT{#4}{\keys_set:nn { eb/listoc } {#4}}
- \bool_if:NF \l__eb_class_book_bool
- { \tl_set:Nn \l__eb_toc_type_tl { article } }
- \tl_set:Nn \imki at indexheaders
- {
- \eb_title_number_intoc_bool:nn {#2} {#1}
- \cs_set_eq:NN \thispagestyle \use_none:n
- \cs_undefine:N \imki at firstpagestyle
- }
- \imki at putindex{#3}
- \group_end:
- }
- }
-
-\eb_ctex_define:nn { chapter }
- {
- biname .code:n =
- { \ctex_assign_heading_name:nn { bichapter } {#1} },
- biname .initial:n = Chapter\space,
- binmuber .tl_set:N = \CTEX at bichapter@number,
- binmuber .initial:n = \arabic{chapter}
- }
-\RenewDocumentCommand{\appendix}
- {O{Appendix\space}D(){\Alph{chapter}}}
- {
- \ctex_assign_heading_name:nn { biappendix } {#1}
- \int_compare:nNnTF { \c at chapter } > { 0 }
- {
- \ExplSyntaxOn\char_set_catcode_letter:N \@
- \eb_patch_cmd:Nnn \CTEX at addbitocline
- {
- \def\CTEX at prechapter{\CTEX at prebichapter}
- \def\CTEX at thechapter{\CTEX at bichapter@number}
- \def\CTEX at postchapter{\CTEX at postbichapter}
- }
- {
- \def\CTEX at prechapter{\CTEX at prebiappendix}
- \def\CTEX at thechapter{#2}
- \def\CTEX at postchapter{\CTEX at postbiappendix}
- }
- \ExplSyntaxOff\char_set_catcode_other:N \@
- \setcounter{chapter}{0}
- \setcounter{section}{0}
- \gdef\thechapter{\@Alph\c at chapter}
- \gdef\CTEX at prechapter{\CTEX at preappendix}
- \gdef\CTEX at thechapter{\CTEX at appendix@number}
- \gdef\CTEX at postchapter{\CTEX at postappendix}
- \gdef\CTEX at chapter@numbering{\CTEX at appendix@numbering}
- }
- {
- \setcounter{section}{0}
- \setcounter{subsection}{0}
- \gdef\thesection{\@Alph\c at section}
- \gdef\CTEX at presection{\CTEX at preappendix}
- \gdef\CTEX at thesection{\CTEX at appendix@number}
- \gdef\CTEX at postsection{\CTEX at postappendix}
- \gdef\CTEX at section@numbering{\CTEX at appendix@numbering}
- \ctex_set:nn { appendix } { number = \@Alph\c at section,name = { } }
- }
- }
-
-\tl_new:N \l__eb_subfont_table_tl
-\tl_new:N \l__eb_subfont_figure_tl
-\tl_new:N \l__eb_subfont_listing_tl
-\tl_new:N \l__eb_subfont_footnote_tl
-
-\seq_const_from_clist:Nn \c__eb_subfont_math_choice_seq
- {
- noto,notosans,times,scholax,stix,
- charter,ebgaramond,libertine,none
- }
-\seq_map_inline:Nn \c__eb_subfont_math_choice_seq
- { \tl_const:cn { c__eb_subfont_math_#1_tl } {#1} }
-
-\eb_ctex_define:nn { subfont }
- {
- table-cap .tl_set:N = \l__eb_subfont_table_tl,
- table-cap .initial:n = \sffamily\small,
- figure-cap .tl_set:N = \l__eb_subfont_figure_tl,
- figure-cap .initial:n = \sffamily\small,
- listing-cap .tl_set:N = \l__eb_subfont_listing_tl,
- listing-cap .initial:n = \sffamily\small,
- footnote .tl_set:N = \l__eb_subfont_footnote_tl,
- footnote .initial:n = \rmfamily,
- marginpar .tl_set:N = \marginfont,
- marginpar .initial:n = \rmfamily\footnotesize,
-
- math .choices:xn =
- { \seq_use:Nn \c__eb_subfont_math_choice_seq { , } }
- {
- \tl_gset_eq:NN
- \l__eb_subfont_math_choice_tl \l_keys_choice_tl
- },
- math .value_required:n = true,
- math .initial:n = noto
- }
-
-\cs_new_protected:Npn \eb_put_newtxmath:n #1
- { \PassOptionsToPackage{#1}{newtxmath} }
-\eb_at_end_preamble:n
- {
- \tl_case:NnT \l__eb_subfont_math_choice_tl
- {
- \c__eb_subfont_math_noto_tl
- { \eb_put_newtxmath:n { noto } }
- \c__eb_subfont_math_notosans_tl
- { \eb_put_newtxmath:n { notosans } }
- \c__eb_subfont_math_ebgaramond_tl
- { \eb_put_newtxmath:n { ebgaramond } }
- \c__eb_subfont_math_times_tl
- { \eb_put_newtxmath:n { noOT1 } }
- \c__eb_subfont_math_libertine_tl
- { \eb_put_newtxmath:n { libertine,noOT1 } }
- \c__eb_subfont_math_stix_tl
- { \eb_put_newtxmath:n { stix2,noOT1 } }
- \c__eb_subfont_math_scholax_tl
- { \eb_put_newtxmath:n { nc,noOT1 } }
- \c__eb_subfont_math_charter_tl
- { \eb_put_newtxmath:n { charter,noOT1 } }
- }
- { \RequirePackage{newtxmath,bm} }
- }
-
-\fp_new:N \l__eb_spread_line_fp
-\fp_new:N \l__eb_spread_table_fp
-\fp_new:N \l__eb_spread_math_fp
-\fp_new:N \l__eb_spread_caption_fp
-\fp_new:N \l__eb_spread_footnote_fp
-
-\eb_ctex_define:nn { spread }
- {
- line .fp_set:N = \l__eb_spread_line_fp,
- line .initial:n = 1.3,
- table .fp_set:N = \l__eb_spread_table_fp,
- table .initial:n = 1.05,
- math .fp_set:N = \l__eb_spread_math_fp,
- math .initial:n = 1.05,
- caption .fp_set:N = \l__eb_spread_caption_fp,
- caption .initial:n = 1,
- footnote .fp_set:N = \l__eb_spread_footnote_fp,
- footnote .initial:n = 1,
- spread-all .meta:n =
- {
- line = #1,
- table = #1,
- math = #1,
- caption = #1,
- footnote = #1
- }
- }
-
-\DeclareCaptionLabelSeparator{ccwd}{\hspace{\ccwd}}
-\DeclareCaptionLabelFormat{parens}{\bothIfFirst{#1}{~}(#2)}
-\DeclareCaptionFont{eb at table@font}{\l__eb_subfont_table_tl}
-\DeclareCaptionFont{eb at figure@font}{\l__eb_subfont_figure_tl}
-\DeclareCaptionFont{eb at listing@font}{\l__eb_subfont_listing_tl}
-\captionsetup
- {
- format = hang,
- font = {stretch = \fp_use:N \l__eb_spread_caption_fp},
- labelfont = {color = ctex at frame},
- labelsep = ccwd,
- singlelinecheck = true,
- belowskip = 0pt,
- aboveskip = 10pt
- }
-\captionsetup[table]{font += eb at table@font}
-\captionsetup[figure]{font += eb at figure@font}
-\captionsetup[lstlisting]{font += eb at listing@font}
-\captionsetup[subfigure]
- {
- labelformat = parens,
- font+ = eb at figure@font,
- belowskip = 2pt,
- aboveskip = 6pt
- }
-\ctex_at_end_package:nn { bicaption }
- {
- \captionsetup[figure][bi-second]{name = Figure}
- \captionsetup[table][bi-second]{name = Table}
- }
-\prop_gset_from_keyval:Nn \g__tblr_default_tblr_table_prop
- { stretch = \fp_use:N \l__eb_spread_table_fp }
-\SetTblrDefault{rows = {abovesep = 4pt,belowsep = 2pt}}
-\eb_at_begin_environment:nn { tabular,tabularx }
- {
- \exp_args:Nx \linespread { \fp_use:N \l__eb_spread_table_fp }
- \selectfont\ignorespaces
- }
-\ctex_after_end_preamble:n
- {
- \exp_args:Nx \linespread { \fp_use:N \l__eb_spread_line_fp }
- \selectfont\ignorespaces
- }
-
-\cs_new:Npn \eb_arabic:n #1 { \int_to_arabic:v { c@#1 } }
-\cs_gset:cpn { thesection }
- {
- \int_compare:nNnT { \c at chapter } > { 0 } { \thechapter. }
- \eb_arabic:n { section }
- }
-\seq_const_from_clist:Nn \c__eb_serial_number_counter_seq
- { figure,table,lstlisting,equation }
-\seq_map_inline:Nn \c__eb_serial_number_counter_seq
- {
- \cs_set:cpn { the#1 }
- {
- \int_compare:nNnT { \c at chapter } > { 0 }
- {
- \thechapter
- \use:c { l__eb_#1_separator_tl }
- }
- \eb_arabic: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}
-\tl_gset:Nn \textfraction { 0.18 }
-\tl_gset:Nn \topfraction { 0.85 }
-\tl_gset:Nn \bottomfraction { 0.65 }
-\tl_gset:Nn \floatpagefraction { 0.60 }
-\tl_gset:Nn \ULthickness { 0.75pt }
-\allowdisplaybreaks[4]
-\DeclareGraphicsExtensions{.pdf,.png,.jpg,.eps,.tif}
-
-\cs_new_protected:Npn \eb_enumitem_label_set:nn #1#2
- { \SetEnumitemValue{label}{#1}{\color{ctex at emph}#2} }
-\clist_map_inline:nn
- {
- { bullet } { \textbullet },
- { endash } { \normalfont\bfseries\textendash },
- { asterisk } { \textasteriskcentered },
- { arabic } { \arabic*. },
- { alph } { (\alph*) },
- { roman } { \roman*. },
- { outline } { \upshape\ding{111} }
- }
- { \eb_enumitem_label_set:nn #1 }
-\SetEnumitemValue{font}{sf}{\color{ctex at emph}\normalfont\sffamily}
-\SetEnumitemValue{ref}{enumii}{\arabic{enumi}.\alph*}
-\SetEnumitemValue{ref}{enumiii}{\arabic{enumi}.\alph{enumii}.\roman*}
-\setlist
- {
- labelsep = .75\ccwd,listparindent = 2\ccwd,leftmargin = *,
- itemsep = .75ex plus .1ex,topsep = .75ex plus .1ex,
- partopsep = 0ex,parsep = 0ex
- }
-\newlist{eb at outline@list}{itemize}{1}
-\setlist[eb at outline@list]{label = outline,itemsep = .5ex plus .1ex}
-\setlist[itemize,1]{label = bullet}
-\setlist[itemize,2]{label = endash}
-\setlist[itemize,3]{label = asterisk}
-\setlist[enumerate,1]{label = arabic,ref = \arabic*}
-\setlist[enumerate,2]{label = alph,ref = enumii}
-\setlist[enumerate,3]{label = roman,ref = enumiii,labelwidth = *}
-\setlist[description]{font = sf,labelwidth = *,leftmargin = 2\ccwd}
-
-\cs_new_protected:Npn \eb_thmname_set:nnn #1#2#3
- {
- \tl_if_eq:NnTF \l__ctex_scheme_tl { chinese }
- { \tl_const:cn { c__eb_name_#1_tl } {#3} }
- { \tl_const:cn { c__eb_name_#1_tl } {#2} }
- }
-\NewDocumentCommand{\EbNewTheorem}
- {mO{\text_titlecase_first:n {#1}}mD(){tc-theorem}O{}}
- {
- \ctex_at_end_preamble:n
- {
- \eb_thmname_set:nnn {#1} {#2} {#3}
- \exp_args:No \declaretheorem at i
- {
- name = \use:c { c__eb_name_#1_tl },
- style = easy-theorem,#5
- }{#1}[]
- \bool_if:NT \l__eb_thmbox_bool
- {
- \@ifpackageloaded{tcolorbox}
- {\tcolorboxenvironment{#1}{#4}}{}
- }
- \labelformat{#1}{\use:c { c__eb_name_#1_tl }~##1}
- }
- }
-
-\bool_new:N \l__eb_thmbox_bool
-\tl_new:N \l__eb_thm_numberwith_tl
-\tl_new:N \l__eb_thm_headpunct_tl
-\tl_new:N \l__eb_thm_bodyfont_tl
-\tl_new:N \l__eb_thm_notefont_tl
-\tl_new:N \l__eb_thm_headindent_tl
-\tl_new:N \l__eb_thm_spaceabove_tl
-\tl_new:N \l__eb_thm_spacebelow_tl
-
-\RenewDocumentCommand{\newtheorem}{O{}m}
- {\AfterPreamble{\declaretheorem[#1]{#2}}}
-\eb_ctex_define:nn { thmset }
- {
- thmbox .bool_set:N = \l__eb_thmbox_bool,
- thmbox .default:n = true,
- thmbox .initial:n = false,
- within .tl_set:N = \l__eb_thm_numberwith_tl,
- within .initial:n = \bool_if:NT \l__eb_class_book_bool { chapter },
- bodyfont .tl_set:N = \l__eb_thm_bodyfont_tl,
- bodyfont .initial:n = { },
- notefont .tl_set:N = \l__eb_thm_notefont_tl,
- notefont .initial:n = { },
- headfont .tl_set:N = \l__eb_thm_headfont_tl,
- headfont .initial:n = \color{ctex at emph}\sffamily,
- headpunct .tl_set:N = \l__eb_thm_headpunct_tl,
- headpunct .initial:n = { },
- spacepost .tl_set:N = \l__eb_thm_spacepost_tl,
- spacepost .initial:n = \ccwd,
- headindent .tl_set:N = \l__eb_thm_headindent_tl,
- headindent .initial:n = 0\ccwd,
- spaceabove .tl_set:N = \l__eb_thm_spaceabove_tl,
- spaceabove .initial:n = .75ex plus .1ex,
- spacebelow .tl_set:N = \l__eb_thm_spacebelow_tl,
- spacebelow .initial:n = .75ex plus .1ex
- }
-\tl_const:Nn \c__eb_thmtools_keyval_tl
- {
- [
- spaceabove = \l__eb_thm_spaceabove_tl,
- spacebelow = \l__eb_thm_spacebelow_tl,
- headindent = \l__eb_thm_headindent_tl,
- headfont = \l__eb_thm_headfont_tl,
- notefont = \l__eb_thm_notefont_tl,
- notebraces = { }{ },
- bodyfont = \l__eb_thm_bodyfont_tl,
- headpunct = \l__eb_thm_headpunct_tl,
- postheadspace = \l__eb_thm_spacepost_tl,
- within = \l__eb_thm_numberwith_tl,
- headformat = \NAME\space\NUMBER\NOTE
- ]
- }
-\eb_at_end_preamble:n
- {
- \exp_last_unbraced:No
- \declaretheoremstyle{\c__eb_thmtools_keyval_tl}{easy-theorem}
- \eb_thmname_set:nnn { exercise } { Exercise } { 练习 }
- \cs_undefine:N \proof
- \clist_map_inline:nn
- {
- { lemma } { 引理 },
- { example } { 例 },
- { theorem } { 定理 },
- { corollary } { 推论 },
- { definition } { 定义 },
- { proposition } { 性质 },
- { remark } { 注 } [ numbered = no ],
- { { proof } { 证明 } [ numbered = no,qed = \qedsymbol ] }
- }
- { \EbNewTheorem #1 }
- }
-
-\ctex_at_end_package:nn { tasks }
- {
- \settasks
- {
- label = (\Alph*),
- column-sep = \ccwd,
- item-indent = 2\ccwd,
- label-width = 1.5\ccwd,
- after-item-skip = 0ex plus .1ex
- }
- }
-\setchemformula
- {
- math-scripts = false,
- charge-hshift = 0.25\ccwd,
- subscript-vshift = -0.2ex
- }
-\sisetup
- {
- mode = match,
- table-parse-only,
- propagate-math-font,
- text-family-to-math,
- text-series-to-math,
- reset-text-family = false,
- reset-text-series = false,
- reset-text-shape = false,
- reset-math-version = false,
- range-phrase = \ensuremath{\sim},
- range-units = single,
- group-digits = none
- }
-\eb_at_begin_environment: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
- }
- {
- \linespread{\fp_use:N \l__eb_spread_math_fp}
- \selectfont\ignorespaces
- }
-\eb_patch_cmd:Nnn \start at gather
- { \collect at body }
- {
- \linespread{\fp_use:N \l__eb_spread_math_fp}
- \selectfont\collect at body
- }
-\eb_patch_cmd:Nnn \start at align
- { \collect at body }
- {
- \linespread{\fp_use:N \l__eb_spread_math_fp}
- \selectfont\collect at body
- }
-\eb_patch_cmd:Nnn \start at multline
- { \collect at body }
- {
- \linespread{\fp_use:N \l__eb_spread_math_fp}
- \selectfont\collect at body
- }
-\eb_patch_cmd:Nnn \gather at split
- { \spread at equation }
- {
- \linespread{\fp_use:N \l__eb_spread_math_fp}
- \selectfont\spread at 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 at emph}(\ignorespaces #1\unskip\@@italiccorr)} }
-\ctex_at_end_package:nn { unicode-math }
- { \msg_redirect_module:nnn { unicode-math } { warning } { none } }
-
-\ctex_at_end_package:nn { tcolorbox }
- {
- \eb_package_later_bool:nn { tcolorbox } { 2020/10/09 }
- \tcbset
- {
- tc-theorem/.style =
- {
- enhanced~jigsaw,pad~at~break* = 3pt,
- opacityback = 0,
- colframe = ctex at emph,
- left = 6pt,right = 6pt,top = 8pt,bottom = 8pt,middle= 8pt
- },
- tc-outline/.style =
- {
- enhanced,nofloat,
- tikznode~boxed~title,
- interior~style = white,colframe = ctex at emph,
- colbacktitle = white,coltitle = ctex at 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,boxsep = 5pt,
- after~skip = 3ex,
- left = 1.5pc,right = 1.5pc,top = 1pc,bottom = 0.5pc
- },
- tc-exercise/.style =
- {
- blank,on~line,center,
- fontupper = \Large\sffamily,
- before~skip = 3.75ex,after~skip = 2.5ex
- },
- breakable,
- boxsep = 0pt,
- arc = 0pt,
- fonttitle = \sffamily,
- boxrule = \l__eb_rule_width_dim
- }
- \newtcbox[auto~counter]{\eb at exercise@box}[1]{tc-exercise,#1}
- \NewDocumentEnvironment{outline}{O{}D(){\abstractname}o+b}
- {
- \begin{tcolorbox}[tc-outline,title = #2,IfValueT = {#3}{#3}]
- \begin{eb at outline@list}[#1]
- #4
- \end{eb at outline@list}
- \end{tcolorbox}
- }{}
- \NewDocumentEnvironment{exercise}
- {st+O{LightSkyBlue}O{1.}D(){\c__eb_name_exercise_tl}o+O{}+b}
- {
- \IfBooleanTF{#2}
- {
- \eb at exercise@box
- {
- fuzzy~halo = 5pt~with~#3,
- IfValueT = {#6}{#6},
- phantom =
- \IfBooleanF{#1}
- {
- \markright{\thetcbcounter\hspace{0.5\ccwd}#5}
- \addcontentsline{toc}{section}
- {\thetcbcounter\hspace{\eb at toc@section at numsep}#5}
- }
- }
- {\IfBooleanF{#1}{\thetcbcounter\hspace{0.5\ccwd}}#5}
- }{
- \group_begin:
- \ctex_set:nn { section } { format += \centering }
- \IfValueT{#6}{\ctex_set:nn { section } {#6}}
- \IfBooleanTF{#1}{\section*{#5}}{\section{#5}}
- \group_end:
- }#7
- \begin{enumerate}[#4,labelsep = 0.5\ccwd]
- #8
- \end{enumerate}
- }{}
- \DeclareTColorBox{easybox}{sO{DarkCyan}d()O{}}
- {
- enhanced~jigsaw,pad~at~break* = 3pt,
- IfBooleanTF = {#1}
- {toptitle = 8pt,top = 8pt}
- {frame~hidden,boxrule = 0pt,toptitle = 8pt,top = 0pt},
- IfValueT = {#3}{title = #3},
- colback = #2,colbacktitle = #2,
- opacityback = 0.12,opacitybacktitle = 0.12,
- coltitle = black,colframe = black,
- left = 6pt,right = 6pt,bottom = 8pt,middle= 8pt,
- bottomtitle = 8pt,
- beforeafter~skip = 2ex,
- halign~upper = left,halign~lower = left,
- center~title,#4
- }
- \DeclareTColorBox{ebparbox}{sO{Purple}d()O{}}
- {
- frame~hidden,
- enhanced~jigsaw,pad~at~break* = 3pt,
- boxrule = 0pt,
- borderline~west = {3pt}{0pt}{#2},
- IfBooleanTF = {#1}
- {
- colback = white,
- IfValueT = {#3}{title = #3},
- top = 0pt,bottom = 0pt,toptitle = 0pt
- }{
- colback = #2,colbacktitle = #2,
- opacityback = 0.12,opacitybacktitle = 0.12,
- IfValueTF = {#3}{title = #3,top = 0pt}{top = 8pt},
- bottom = 8pt,toptitle = 8pt
- },
- left = 8pt,right = 8pt,middle= 8pt,
- bottomtitle = 8pt,
- beforeafter~skip = 1.5ex,
- colframe = #2,coltitle = #2,#4
- }
- \DeclareTotalTCBox{\ebemph}{O{DarkSeaGreen}vO{}}
- {
- nobeforeafter,tcbox~raise~base,
- blank,fuzzy~halo = 2pt~with~#1,#3
- }{#2}
- \DeclareTotalTCBox{\eblink}{O{Aqua}vO{}}
- {
- standard~jigsaw,
- nobeforeafter,tcbox~raise~base,
- top = 1.25pt,bottom = 1.25pt,left = 1.25pt,right = 1.25pt,
- boxrule = 0.75pt,arc = 1pt,
- colback = #1,opacityback = 0.12,colframe = #1,#3
- }{#2}
- }
-
-\bool_set_true:N \l__eb_backend_bibtex_bool
-\tl_new:N \l__eb_bib_style_tl
-\tl_new:N \l__eb_bib_otherstyle_tl
-\tl_new:N \l__eb_bib_citestyle_tl
-\tl_new:N \l__eb_bib_datafile_tl
-
-\eb_ctex_define:nn { bibset }
- {
- backend .choice:,
- backend/bibtex .code:n = { },
- backend/biblatex .code:n =
- { \bool_set_false:N \l__eb_backend_bibtex_bool },
-
- bib-style .choice:,
- bib-style .value_required:n = true,
- bib-style/numerical .code:n =
- {
- \tl_set:Nn \l__eb_bib_style_tl {#1}
- \tl_clear:N \l__eb_bib_otherstyle_tl
- },
- bib-style/authoryear .code:n =
- {
- \tl_set:Nn \l__eb_bib_style_tl {#1}
- \tl_clear:N \l__eb_bib_otherstyle_tl
- },
- bib-style/unknown .code:n =
- { \tl_set_eq:NN \l__eb_bib_otherstyle_tl \l_keys_value_tl },
- bib-style .initial:n = numerical,
-
- cite-style .code:n =
- { \tl_set:Nn \l__eb_bib_citestyle_tl {#1} },
- datafile .tl_set:N = \l__eb_bib_datafile_tl,
-
- bitoc-title .tl_set:N = \l__eb_bib_bitoc_title,
- bitoc-title .initial:n = Reference
- }
-
-\cs_new_protected:Npn \EbBibtexSet
- {
- \tl_if_empty:NTF \l__eb_bib_otherstyle_tl
- {
- \tl_if_eq:NnT \l__eb_bib_style_tl { numerical }
- {
- \bibliographystyle{gbt7714-numerical}
- \setcitestyle{comma,square,super}
- }
- \tl_if_eq:NnT \l__eb_bib_style_tl { authoryear }
- { \bibliographystyle{gbt7714-author-year} }
- \cs_set_eq:NN \cite \citep
- }
- { \exp_args:NV \bibliographystyle \l__eb_bib_otherstyle_tl }
- \tl_if_empty:NF \l__eb_bib_citestyle_tl
- { \exp_args:NV \setcitestyle \l__eb_bib_citestyle_tl }
- \skip_zero:N \bibsep
- \NewDocumentCommand{\printbibliography}{st+o}
- {
- \group_begin:
- \tl_set_eq:NN \eb at toc@title \bibname
- \IfValueT{##3}{ \keys_set:nn { eb/listoc } {##3} }
- \eb_multoc_pre_bool:
- \tl_set:Nn \bibsection
- { \eb_title_number_intoc_bool:nn {##2} {##1} }
- \exp_args:NV \bibliography \l__eb_bib_datafile_tl
- \eb_multoc_post_bool:
- \group_end:
- }
- }
-\cs_new_protected:Npn \eb_put_biblatex:n #1
- { \PassOptionsToPackage{#1}{biblatex} }
-\cs_new_protected:Npn \EbBiblatexPreset
- {
- \tl_if_empty:NTF \l__eb_bib_otherstyle_tl
- {
- \tl_if_eq:NnT \l__eb_bib_style_tl { numerical }
- { \eb_put_biblatex:n { style = gb7714-2015 } }
- \tl_if_eq:NnT \l__eb_bib_style_tl { authoryear }
- { \eb_put_biblatex:n { style = gb7714-2015ay } }
- }
- { \eb_put_biblatex:n { style = \l__eb_bib_otherstyle_tl } }
- \tl_if_empty:NF \l__eb_bib_citestyle_tl
- { \eb_put_biblatex:n { citestyle = \l__eb_bib_citestyle_tl } }
- \eb_put_biblatex:n { backend = biber }
- }
-\cs_new_protected:Npn \EbBiblatexPostset
- {
- \exp_args:NV \addbibresource \l__eb_bib_datafile_tl
- \tl_gset:Nn \blx at default@theheading { bibintoc }
- \defbibheading{bibintoc}[\bibname]
- {\eb_biber_title_level_bool:n {##1}}
- \skip_zero:N \bibitemsep
- }
-\eb_at_end_preamble:n
- {
- \tl_if_empty:NF \l__eb_bib_datafile_tl
- {
- \bool_if:NTF \l__eb_backend_bibtex_bool
- {
- \RequirePackage[sort&compress]{natbib}
- \EbBibtexSet
- }
- {
- \EbBiblatexPreset
- \RequirePackage{biblatex}
- \EbBiblatexPostset
- }
- }
- }
-
-\lstdefinestyle{easy-listings}
- {
- language = [LaTeX]TeX,
- texcsstyle =
- {
- *\lst at ifdisplaystyle
- \bfseries\color{ctex at verb}
- \else
- \color{ctex at verb}
- \fi
- },
- basicstyle =
- {
- \ttfamily\lst at ifdisplaystyle
- \small
- \else
- \color{ctex at verb}
- \fi
- },
- keywordstyle =
- {
- \lst at ifdisplaystyle
- \bfseries\color{ctex at verb}
- \else
- \color{ctex at verb}
- \fi
- },
- framexleftmargin = 0pt,
- framexrightmargin = 0pt,
- xleftmargin = 3pt,
- xrightmargin = 3pt,
- numbersep = 10pt,
- framesep = 3pt,
- frame = single,
- rulecolor = \color{ctex at frame},
- commentstyle = \color{SlateGray},
- emphstyle = \color{ctex at emph},
- % emph = {},
- morekeywords =
- {
- includegraphics,setmainfont,setsansfont,setmonofont,setCJKmainfont,setCJKsansfont,setCJKmonofont,setCJKfamilyfont,RequirePackage
- }
- }
-\lstset
- {
- style = easy-listings,
- breaklines = true,
- resetmargins = true,
- % numbers = left,
- numberstyle = \footnotesize,
- aboveskip = 1.5ex plus .2ex minus .1ex,
- belowskip = 0.55ex plus .2ex minus .1ex,
- keepspaces = true,
- framerule = \l__eb_rule_width_dim,
- columns = flexible,
- abovecaptionskip = -1ex,
- belowcaptionskip = 1.5ex
- }
-\lstloadlanguages{C,C++,Java,Python,Matlab}
-
-\clist_new:N \l__eb_hyperref_clist
-\cs_new_protected:Npn \eb_put_hyperref:n #1
- { \clist_put_right:Nn \l__eb_hyperref_clist {#1} }
-\cs_new_protected:Npn \eb_define_linkcolor:nnn #1#2#3
- { \definecolorset{HTML}{ctex@}{}{link,#1;url,#2;cite,#3} }
-\cs_new_protected:Npn \eb_define_themecolor:nnn #1#2#3
- { \definecolorset{HTML}{ctex@}{}{frame,#1;emph,#2;verb,#3} }
-\cs_new_protected:Npn \eb_define_linkcolor:n #1
- { \definecolorset{HTML}{ctex@}{}{link,#1;url,#1;cite,#1} }
-\cs_new_protected:Npn \eb_define_themecolor:n #1
- { \definecolorset{HTML}{ctex@}{}{frame,#1;emph,#1;verb,#1} }
-\cs_new:Npn \eb_linkcolor_set:n #1
- {
- linkcolor/\clist_item:nn {#1} {1} .code:n =
- {
- \eb_define_linkcolor:nnn
- { \clist_item:nn {#1} {2} }
- { \clist_item:nn {#1} {3} }
- { \clist_item:nn {#1} {4} }
- \eb_put_hyperref:n
- {
- linkcolor = ctex at link,linkbordercolor = ctex at link,
- urlcolor = ctex at url,urlbordercolor = ctex at url,
- citecolor = ctex at cite,citebordercolor = ctex at cite
- }
- },
- }
-\cs_new:Npn \eb_themecolor_set:n #1
- {
- color/\clist_item:nn {#1} {1} .code:n =
- {
- \eb_define_themecolor:nnn
- { \clist_item:nn {#1} {2} }
- { \clist_item:nn {#1} {3} }
- { \clist_item:nn {#1} {4} }
- },
- }
-
-\bool_set_false:N \l__eb_toc_number_color_bool
-\eb_ctex_define:nn { refset }
- {
- linktype .choice:,
- linktype/edge .code:n = { },
- linktype/none .code:n = \eb_put_hyperref:n { hidelinks },
- linktype/various .code:n =
- {
- \bool_set_true:N \l__eb_toc_number_color_bool
- \eb_put_hyperref:n { colorlinks }
- },
- linktype .value_required:n = true,
- linktype .initial:n = edge,
-
- linktoc .choice:,
- linktoc/unknown .code:n =
- {
- \eb_put_hyperref:n { linktoc = #1 }
- \clist_map_inline:nn { page,none }
- {
- \tl_if_eq:NnT \l_keys_value_tl {##1}
- {
- \clist_map_break:n
- { \colorlet{ctex at toc@number}{black} }
- }
- }
- },
- linktoc .default:n = all,
- linktoc .initial:n = all,
- unknown .code:n =
- {
- \eb_put_hyperref:x
- {
- \l_keys_key_str
- \tl_if_empty:NF \l_keys_value_tl { = {#1} }
- }
- }
- }
-\eb_ctex_define:nx { refset }
- {
- linkcolor .choice:,
- \clist_map_function:nN
- {
- { fresh, 62d71f,0000B2,005752 },
- { cutepink, ff69b4,9d5196,57b5e5 },
- { navyblue, 000080,004986,eb6877 },
- { crimson, dc143c,00c1c9,afcd20 }
- }
- \eb_linkcolor_set:n
- linkcolor .default:n = navyblue,
- linkcolor .initial:n = navyblue,
- linkcol-all .code:n =
- { \eb_define_linkcolor:n { \exp_not:n {#1} } }
- }
-\colorlet{ctex at toc@number}{ctex at link}
-\eb_ctex_define:nx { style }
- {
- color .choice:,
- color .value_required:n = true,
- \clist_map_function:nN
- {
- { none, 000000,000000,000000 },
- { seaside, 4169e1,708090,9932cc },
- { energy, f39800,00a0e9,893895 },
- { cyberpunk, 601986,eb6877,a4005b }
- }
- \eb_themecolor_set:n
- color .initial:n = none,
- color-all .code:n =
- { \eb_define_themecolor:n { \exp_not:n {#1} } }
- }
-
-\cs_new:Npn \eb_allow_urlbreak:
- {
- \cs_new:Npn \eb_add_urlbreak_points:
- { \tl_map_function:NN \c__eb_urlbreak_points_tl \do }
- \eb_appto_cmd:Nn \UrlBreaks
- { \UrlOrds\eb_add_urlbreak_points: }
- }
-\tl_const:Nn \c__eb_urlbreak_points_tl
- {
- ABCDEFGHIJKLMNOPQRSTUVWXYZ
- abcdefghijklmnopqrstuvwxyz
- 0123456789
- }
-\ctex_at_end_preamble:n
- {
- \RequirePackage{hyperref}
- \urlstyle{same}
- \eb_allow_urlbreak:
- \ctex_hypersetup:n { pdfstartview = FitH }
- \exp_args:NV \hypersetup \l__eb_hyperref_clist
- }
-
-\labelformat{part}{\CTEXthepart}
-\labelformat{chapter}{\CTEXthechapter}
-\labelformat{figure}{\figurename~#1}
-\labelformat{table}{\tablename~#1}
-\tl_if_eq:NnTF \l__ctex_scheme_tl { chinese }
- {
- \keys_set_known:nn { ctex }
- {
- contentsname = 目\hspace{\ccwd}录,
- indexname = 索\hspace{\ccwd}引,
- listfigurename = 图片索引,
- listtablename = 表格索引,
- abstractname = 摘\hspace{\ccwd}要,
- lstlistlistingname = 代码索引,
- lstlistingname = 代码
- }
- \labelformat{equation}{式(#1)}
- \labelformat{section}{节 #1}
- \labelformat{subsection}{小节 #1}
- }
- {
- \keys_set_known:nn { ctex }
- {
- abstractname = Abstract,
- lstlistlistingname = List~of~Codes,
- lstlistingname = Code
- }
- \labelformat{equation}{Equation~(#1)}
- \labelformat{section}{Section~#1}
- \labelformat{subsection}{Subsection~#1}
- }
-
\ctex_set:n
{
secnumdepth = 3,
More information about the tex-live-commits
mailing list.