diff options
Diffstat (limited to 'Master/texmf-dist')
-rw-r--r-- | Master/texmf-dist/doc/latex/easybook/easybook.pdf | bin | 324104 -> 328635 bytes | |||
-rw-r--r-- | Master/texmf-dist/source/latex/easybook/easybook.dtx | 378 | ||||
-rw-r--r-- | Master/texmf-dist/tex/latex/easybook/easybase.sty | 284 | ||||
-rw-r--r-- | Master/texmf-dist/tex/latex/easybook/easybook.cls | 2 |
4 files changed, 305 insertions, 359 deletions
diff --git a/Master/texmf-dist/doc/latex/easybook/easybook.pdf b/Master/texmf-dist/doc/latex/easybook/easybook.pdf Binary files differindex 6f9f8b5a902..bfa06382e0d 100644 --- a/Master/texmf-dist/doc/latex/easybook/easybook.pdf +++ b/Master/texmf-dist/doc/latex/easybook/easybook.pdf diff --git a/Master/texmf-dist/source/latex/easybook/easybook.dtx b/Master/texmf-dist/source/latex/easybook/easybook.dtx index 244a0d49ac6..c07e0d03c37 100644 --- a/Master/texmf-dist/source/latex/easybook/easybook.dtx +++ b/Master/texmf-dist/source/latex/easybook/easybook.dtx @@ -28,7 +28,7 @@ % % \title{\sffamily easybook 文档类手册} % \author{瞿毅} -% \date{2021/06/11\hskip\ccwd\relax v1.26\thanks{\url{https://gitee.com/texl3/easybook}}} +% \date{2021/06/14\hskip\ccwd\relax v1.26b\thanks{\url{https://gitee.com/texl3/easybook}}} % % \maketitle % \begin{abstract} @@ -84,13 +84,13 @@ % xelatex -shell-escape easybook % \end{frameverb} % 当然也可以使用 \opt{latexmk} 及一些软件自带的编译工具,这里就不做介绍。 \\ -% \ding{72} 需要注意正确\textbf{编译索引}要增加 \opt{-shell-escape} 命令行选项。 +% \ding{72} 需要注意正确 \textbf{编译索引} 要增加 \opt{-shell-escape} 命令行选项。 % % \subsection{字体设置} % \label{subsec:font settings} % 默认使用 \CTeX 预置中文字库,当开启 \opt{font = noto} 选项时需要安装开源字体,中文使用方正系列的{\songti 方正书宋}、{\heiti 方正黑体}、{\kaishu 方正楷体}和{\fangsong 方正仿宋},英文使用思源系列的{\rmfamily Noto Serif}、{\sffamily Noto Sans}和{\ttfamily Noto Sans Mono},数学字体默认使用 \pkg{notomath}。相关选项可以见节 \ref{sec:document class options} 中的 \opt{font} 选项,字体点击此处下载\href{https://wwe.lanzoui.com/b01ns361i}{下载地址}。 % -% 如果您不想使用 \CTeX 默认字体和方正、思源字体,\textbf{自定义字体}需启用选项 \opt{font = none},并可在导言区设置中文字体,粗体与斜体不设置会产生警告。 +% 如果您不想使用 \CTeX 默认字体和方正、思源字体,\textbf{自定义字体} 需启用选项 \opt{font = none},并可在导言区设置中文字体,粗体与斜体不设置会产生警告。 % \begin{ctexexam} % \setCJKmainfont{SimSun}[BoldFont = SimHei,ItalicFont = KaiTi] % \setCJKsansfont{SimHei} @@ -121,7 +121,7 @@ % \begin{syntax} % scheme = <(chinese)|plain> % \end{syntax} -% \opt{scheme} 代表文档的主题,扩展了此选项在 \CTeX 文档类中原有的作用范围,\opt{plain} 选项可使各类标题变为英文形式。包括章节标题、图表标题和定理标题等。如\textbf{第一章}变为\textbf{Chapter 1},\textbf{图1.1} 变为 \textbf{Table 1.1}。 +% \opt{scheme} 代表文档的主题,扩展了此选项在 \CTeX 文档类中原有的作用范围,\opt{plain} 选项可使各类标题变为英文形式。包括章节标题、图表标题和定理标题等。如 \textbf{第一章} 变为 \textbf{Chapter 1},\textbf{图1.1} 变为 \textbf{Table 1.1}。 % \end{function} % % \begin{function}[rEXP,added = 2021-01-05,updated = 2021-04-29]{enmode} @@ -196,27 +196,27 @@ % aftertitle = <目录标题后的代码> % pagestyle = <标题页的页面格式> % \end{syntax} -% \opt{multoc} 与 \opt{style/multoc} 选项具有相同的效果,但是具有优先性且可单独设置不同目录是否多栏排版,默认为双栏,可使用 \opt{columns} 更改。\opt{title} 选项用于更改目录的标题,标题之间用一个半角逗号分开,也可以只有一部分,表示中文目录的标题。当设置了英文目录标题时,英文目录标题将会自动加入主文档目录,与 \tn{tableofcontents+} 配合输出。 -% -% 在书籍模式且 \opt{chapter} 选项开启或者文章模式的情况下,\opt{format} 用于设置目录标题的格式,\opt{aftertitle} 选项的代码将被插入到目录标题内容之后,\opt{pagestyle} 是目录标题所在页的页面格式,除此之外还支持 \opt{ctexset/chapter} 或 \opt{ctexset/section} 所有的章节标题样式选项。\opt{chapter} 选项使目录标题按照 chapter 级别输出,\opt{section} 选项使目录标题按照 section 级别输出,默认为 chapter 级别。 +% \opt{multoc} 与 \opt{style/multoc} 选项具有相同的效果,但是具有优先性且可单独设置不同目录是否多栏排版,默认为双栏,可使用 \opt{columns} 更改。\opt{title} 选项用于更改目录的标题,标题之间用一个英文逗号分开,也可以只有一部分,表示中文目录的标题。当设置了英文目录标题时,英文目录标题将会自动加入主文档目录,与 \tn{tableofcontents+} 配合输出。 % \changes{v1.23}{2021/03/15}{为几个目录增加键值列表的选项,可设置标题输出级别以及是否加入主目录。} % \changes{v1.24}{2021/04/04}{目录命令的可选参数增加标题键值。} % \changes{v1.25}{2021/06/02}{目录可设置多栏,并在 article 模式仍然生效。} % \end{function} % +% 在书籍模式且 \opt{chapter} 选项开启或者文章模式的情况下,\opt{format} 用于设置目录标题的格式,\opt{aftertitle} 选项的代码将被插入到目录标题内容之后,\opt{pagestyle} 是目录标题所在页的页面格式,除此之外还支持 \opt{ctexset/chapter} 或 \opt{ctexset/section} 所有的章节标题样式选项。\opt{chapter} 选项使目录标题按照 chapter 级别输出,\opt{section} 选项使目录标题按照 section 级别输出,默认为 chapter 级别。 +% % \subsubsection{标题命令} -% \begin{function}[added = 2021-05-05]{\bichapter,\bisection,\bisubsection} +% \begin{function}[added = 2021-05-05,updated = 2021-06-13]{\bichapter,\bisection,\bisubsection} % \begin{syntax} % \tn{bichapter*}\oarg{目录中文标题}\marg{中文标题}\marg{目录英文标题} % \tn{bisection*}\oarg{目录中文标题}\marg{中文标题}\marg{目录英文标题} % \tn{bisubsection*}\oarg{目录中文标题}\marg{中文标题}\marg{目录英文标题} % \end{syntax} -% 双语目录的标题命令目前设置了常用的三个级别,它们将中文标题正常输出,并使中英文标题加入双语目录,这个功能是为国内一些大学的学位论文模板的要求设计,在一般情况和英文模式下不需要使用。 -% -% 它们的星号变体命令使文中标题不编号,但是仍然加入双语目录,若英文标题参数空置那么仅加入中文目录而不加入英文目录,这一特点与 \tn{chapter*} 等命令的行为不太一样,在一些情况下会用到。可选参数是目录中的中文标题,默认与中文标题一致,正文标题过长时可用它设置在目录中显示的标题。双语目录的格式是一致的,共享使用 \tn{tocset} 的设置,英文目录的章级别标题名及编号的修改方式如下 +% 双语目录的标题命令目前设置了常用的三个级别,它们将中文标题正常输出,并使中英文标题加入双语目录。类似于标准文档类,这三个标题命令分别具有 bichapter、bisection 和 bisubsection 三个计数器,并对应 \tn{the}\meta{计数器} 的值,可以用于 \opt{binumber} 选项更改英文目录中的编号。这个功能是为国内一些高校的学位论文模板的要求设计,在一般情况和英文模式下 \textbf{不需要使用}。 % \changes{v1.25}{2021/05/05}{增加与双语目录配合的标题命令。} % \end{function} % +% 它们的星号变体命令使文中标题不编号,但是仍然加入双语目录,若英文标题参数空置那么仅加入中文目录而不加入英文目录,这一特点与 \tn{chapter*} 等命令的行为不太一样,在一些情况下会用到。可选参数是目录中的中文标题,默认与中文标题一致,正文标题过长时可用它设置在目录中显示的标题。双语目录的格式默认是一致的,共享使用 \tn{tocset} 的设置,英文目录的章级别标题名及编号的修改方式如下 +% % \begin{function}{chapter/biname,chapter/binmuber} % \begin{syntax} % biname = \{<英文目录前名字|(Chapter\tn{space})>,<英文目录后名字>\} @@ -225,13 +225,16 @@ % 类似 \CTeX 的 \opt{name} 和 \opt{nmuber} 选项,它们用于设置主文区 \tn{bichapter} 等标题命令在英文目录中的前后名字与编号,目前只支持通常改变名字与编号的 chapter 级别。 % \end{function} % -% \begin{function}[added = 2021-05-05]{\appendix} +% \begin{function}[added = 2021-05-05,updated = 2021-06-13]{\appendix,\EBeforeAddBitoc} % \begin{syntax} % \tn{appendix}[<英文附录目录前名字>,<英文附录目录后名字>]\parg{英文附录目录数字输出命令} +% \tn{EBeforeAddBitoc*}\marg{加入目录英文标题前的代码} % \end{syntax} % \tn{appendix} 命令后的章节标题变为附录形式。英文目录中附录标题的格式用可选参数修改,英文附录目录前名字默认为 Appendix\tn{space},后名字默认为空,名字之间用一个半角逗号分开,也可以只有一部分,表示英文附录目录前名字。英文附录目录数字输出命令默认为 \tn{Alph}\{chapter\}。 % \end{function} % +% \tn{EBeforeAddBitoc} 是一个作用于局部范围的英文目录钩子,可以插入标题或目录设置的命令改变英文目录中标题的显示格式,也可以覆盖上述的目录前后名字和编号等设置,带有星号的命令会重置之前的代码,放置在导言区或 \tn{bichapter} 等命令前生效。 +% % \section{接口选项} % \label{sec:interface options} % \begin{function}[added = 2021-01-05]{\ctexset} @@ -261,14 +264,14 @@ % multoc = <true|(false)> % withpart = <true|(false)> % footwith = <part|(chapter)|page> -% rulewidth = <(0.75pt)> +% rulewidth = <线宽|(0.75pt)> % uppercase = <(true)|false> -% figure-sep = <(.)> -% table-sep = <(.)> -% listing-sep = <(.)> -% equation-sep = <(.)> -% number-sep = <(.)> -% figurepath = \{\{路径名1\}\{路径名2\}\} +% figure-sep = <符号|(.)> +% table-sep = <符号|(.)> +% listing-sep = <符号|(.)> +% equation-sep = <符号|(.)> +% number-sep = <符号|(.)> +% figurepath = \{\{<路径名1>\}\{<路径名2>\}\} % \end{syntax} % \ding{229} 以上选项路径为 \opt{style/...} % \changes{v1.10}{2021/01/08}{更改颜色实现方式与选项名。} @@ -385,7 +388,7 @@ % % \subsection{参考文献} % \label{subsec:reference} -% \begin{function}[EXP,added = 2021-01-11,updated = 2021-05-11]{backend,bib-style,cite-style,datafile} +% \begin{function}[EXP,added = 2021-01-11,updated = 2021-06-13]{backend,bib-style,cite-style,datafile} % \begin{syntax} % backend = <(bibtex)|biblatex> % bib-style = <(numerical)|authoryear|其它格式> @@ -403,7 +406,7 @@ % \item[backend] 参考文献处理后端,默认用传统的 \hologo{BibTeX} 处理参考文献。 % \item[bib-style] 参考文献格式为中国的参考文献推荐标准GB/T 7714-2015,有顺序编码制和著者-出版年制两种风格,理工科类一般使用顺序编码制,文科类一般使用著者-出版年制。若使用其它格式,使用 \hologo{BibTeX} 处理时需确保正确的 \opt{bst} 文件,使用 \hologo{biber} 处理可使用 \pkg{biblatex} 宏包支持的参考文献风格名称。 % \item[cite-style] 标注参考文献的风格,\opt{backend = bibtex} 选项下可使用 \opt{super}(数字上标标注,默认)或 \opt{numbers}(数字标注)等 \pkg{natbib} 宏包带有的标注风格,\opt{backend = biblatex} 选项下可使用 \pkg{biblatex} 宏包支持的标注风格名称。 -% \item[datafile] 参考文献数据库的文件名,使用 \hologo{biber} 处理时要带有 \opt{bib} 后缀,若不在当前文件夹名称需要包含路径。只有设置数据库的文件名才会载入 \pkg{natbib} 或 \pkg{biblatex} 宏包,之后才可使用相关配置命令,否则需要自行配置参考文献。 +% \item[datafile] 参考文献数据库的文件名,可以是单个文件也可以是以括号包裹并以英文逗号分隔的文件列表,使用 \hologo{biber} 处理时要带有 \opt{bib} 后缀,若不在当前文件夹名称需要包含路径。只有设置数据库的文件名才会载入 \pkg{natbib} 或 \pkg{biblatex} 宏包,之后才可使用相关配置命令,否则需要自行配置参考文献。 % \end{optdesc} % % \begin{function}[added = 2021-01-11,updated = 2021-04-09]{\printbibliography,\EBibtexSet,\EBiblatexPreset,\EBiblatexPostset} @@ -414,7 +417,7 @@ % \end{function} % % \begin{optdesc} -% \item[\tn{printbibliography}] 两种方式\textbf{均使用}此命令打印参考文献,不同处理后端此命令的键值列表不同。使用 \hologo{BibTeX} 处理时选项与小节 \ref{subsec:document command} 目录的选项相同,使用 \hologo{biber} 处理时常用的选项如下 +% \item[\tn{printbibliography}] 两种方式 \textbf{均使用} 此命令打印参考文献,不同处理后端此命令的键值列表不同。使用 \hologo{BibTeX} 处理时选项与小节 \ref{subsec:document command} 目录的选项相同,使用 \hologo{biber} 处理时常用的选项如下 % \begin{function}{heading,title} % \begin{syntax} % heading = <bibliography|subbibliography|(bibintoc)|subbibintoc> @@ -511,7 +514,7 @@ % footruleskip = <页脚线间距> % left = <页面左边距> % top = <页面上边距> -% hmargin = \marg{左边距,右边距} +% hmargin = \{<左边距>,<右边距>\} % textwidth = <页面文本区宽度> % includehead = <true|(false)> % \end{syntax} @@ -534,7 +537,7 @@ % % \subsection{页眉页脚} % \label{subsec:header and footer} -% \begin{function}[EXP,added = 2021-01-13,updated = 2021-05-31]{head-foot,chap-mark,sec-mark,subsec-mark,chap-label,sec-label,subsec-label,headrule,footrule,footnoterule} +% \begin{function}[EXP,added = 2021-01-13,updated = 2021-06-14]{head-foot,chap-mark,sec-mark,subsec-mark,chap-label,sec-label,subsec-label,headrule,footrule,footnoterule} % \begin{syntax} % head-foot = <页眉页脚中的内容> % chap-mark = <\tn{chaptermark} 标志命令的内容> @@ -549,14 +552,6 @@ % \end{syntax} % \ding{229} 以上选项路径为 \opt{hdrset/...} \\ % \opt{hdrset} 设置的命令由 \pkg{fancyhdr} 宏包提供支持。设置章节标志选项 \opt{chap-mark}、\opt{sec-mark} 和 \opt{subsec-mark} 时已做了情形考虑,不需要使用 \tn{markboth} 或 \tn{markright} 命令,其中参数 \#1 代表当前章、节或小节的标题。\opt{chap-mark} 和 \opt{sec-mark} 选项在 book 模式时有意义,\opt{sec-mark} 和 \opt{subsec-mark} 选项在 article 模式时有意义,这与标准文档类的行为一致。也可以直接重新定义这些标志命令,但此时 \opt{style/uppercase} 选项失效,这时可以用例如 \tn{MakeUppercase} 命令来设置标志内容的大小写。 -% -% 标签选项 \opt{chap-label}、\opt{sec-label} 和 \opt{subsec-label} 用于设置标志命令中的标签,包括标题编号和与标题内容之间的距离,它们比标志命令内容的选项更常用,可选参数是编号,必选参数是距离命令 -% -% \begin{ctexexam} -% \hdrset{chap-label = [\thechapter]{\hspace{\ccwd}}} -% \end{ctexexam} -% -% \opt{headrule}、\opt{footrule} 和 \opt{footnoterule} 三个横线选项一般可以使用 \tn{hrule} width \meta{长度} height \meta{高度} 命令来绘制,脚注横线默认为空。当然,手动绘制横线时线条粗细选项 \opt{style/rulewidth} 会失效。 % \changes{v1.21}{2021/01/11}{修复单面文档时页眉横线消失的问题。} % \changes{v1.21}{2021/01/13}{增加配置页眉页脚的选项。} % \changes{v1.23}{2021/03/08}{优化页眉页脚设置,增加 \opt{chap-mark} 和 \opt{sec-mark} 标志选项。} @@ -564,14 +559,26 @@ % \changes{v1.24}{2021/04/09}{增加 \opt{subsec-mark} 标志选项,仅在 article 模式生效。} % \end{function} % -% \begin{function}[added = 2021-01-13,updated = 2021-03-14]{\easyhead,\easyfoot} +% 标签选项 \opt{chap-label}、\opt{sec-label} 和 \opt{subsec-label} 用于设置标志命令中的标签,包括标题编号和与标题内容之间的距离,它们比标志命令内容的选项更常用,可选参数是编号,必选参数是距离命令 +% \begin{ctexexam} +% \hdrset +% { +% chap-label = [\thechapter]{\hspace{\ccwd}}, +% sec-mark = \CTEXifname{\CTEXthesection——}{}#1 +% } +% \end{ctexexam} +% \opt{headrule}、\opt{footrule} 和 \opt{footnoterule} 三个选项可以使用 \tn{hrule} width \meta{长度} height \meta{高度} 或下述 \tn{markrule} 命令来绘制横线,脚注线默认为空。当然,手动绘制横线时线条粗细选项 \opt{style/rulewidth} 会失效。 +% +% \begin{function}[added = 2021-01-13,updated = 2021-06-14]{\easyhead,\easyfoot,\markrule} % \begin{syntax} % \tn{easyhead}\oarg{位置}\marg{内容} % \tn{easyfoot}\oarg{位置}\marg{内容} +% \tn{markrule}\oarg{长度|(\tn{textwidth})}\parg{颜色名}\marg{线宽|(0.75pt)}[<上间距>+<下间距>] % \end{syntax} -% 命令 \tn{easyhead} 和 \tn{easyfoot} 的使用方法与 \tn{fancyhead} 和 \tn{fancyfoot} 完全相同,它们需要在 \opt{head-foot} 选项中使用,设置的是一个名为 \opt{fancy} 的页面风格。\pkg{fancyhdr} 将页眉页脚分成了左中右和奇数页(odd)、偶数页(even)共12个部分,可选参数中E、O代表偶数、奇数,L、C、R代表左、中、右部分。单面打印时,含有偶数的选项无效。下面举一个设置页眉的例子 +% 命令 \tn{easyhead} 和 \tn{easyfoot} 的使用方法与 \tn{fancyhead} 和 \tn{fancyfoot} 完全相同,它们需要在 \opt{head-foot} 选项中使用,设置的是一个名为 \opt{fancy} 的页面风格。\pkg{fancyhdr} 将页眉页脚分成了左中右和奇数页(odd)、偶数页(even)共12个部分,可选参数中E、O代表偶数、奇数,L、C、R代表左、中、右部分。单面打印时,含有偶数的选项无效。 % \end{function} % +% 命令 \tn{markrule} 用于绘制页眉页脚横线,长度默认为页面文本区的宽度,上下间距为横线与上下方部件的间距,带有长度单位,间距长度之间用+号分开,若只有一部分则表示上间距,这个命令也可以在正文中绘制横线。下面举一个设置页眉内容的例子 % \begin{ctexexam} % \hdrset % { @@ -581,8 +588,7 @@ % \easyhead[OL]{\rightmark} % \easyhead[EL,OR]{\textbf{\thepage}} % }, -% sec-mark = \CTEXthesection\hspace{0.5\ccwd}#1, -% headrule = \hrule width \textwidth height 1pt +% headrule = \markrule(DarkViolet){0.5pt}[2pt+2pt] % } % \end{ctexexam} % @@ -600,11 +606,11 @@ % \end{syntax} % \ding{229} 以上选项路径为 \opt{hdrset/...} \\ % 上面几个选项用于设置脚注格式,\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.25}{2021/05/12}{增加脚注样式设置选项。} % \end{function} % +% \opt{fnmark-form} 是脚注标记的格式,在此设置字体命令会覆盖 \opt{subfont/footnote} 的设置,最后一个格式命令可以带有一个参数,这个参数接受脚注编号,一般配合 \opt{fnmark-num = plain} 使用。\opt{afterfnmark} 是脚注标记后的代码,一般用于设置标记与文本间的距离。 +% % \subsection{目录样式} % \label{subsec:catalog style} % \begin{function}[EXP,added = 2021-01-13,updated = 2021-05-14]{format,format+,indent,rule,numsep} @@ -617,22 +623,22 @@ % \end{syntax} % \ding{229} 以上选项路径为 \opt{tocset/(level)/...} \\ % \opt{tocset} 将目录样式交给 \pkg{titletoc} 处理,\opt{(level)} 代表 part、chapter、section、subsection、figure、table 和 lstlisting 级别的目录,而使用 \opt{list} 级别可以统一设置图片、表格和代码目录的样式。 -% -% \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.25}{2021/05/14}{可以分别设置图片、表格和代码目录的格式。} % \end{function} % +% \opt{format} 是目录中标题的格式,可以设置字体和加入垂直间距等,垂直间距最好使用无间距重合的 \tn{addvspace} 命令,带有加号的 \opt{format+} 选项用于在已有的格式命令后附加内容。\opt{indent} 是目录中标题在页面左侧的缩进距离,应该有长度单位。\opt{rule} 选项中一般应当使用 \tn{tocrule} 命令,将会在接下来介绍。\opt{numsep} 是有编号的标题在目录中编号与标题的间距。 +% % \begin{function}[added = 2021-01-13,updated = 2021-06-11]{\tocrule,\EBNumberLine} % \begin{syntax} % \tn{tocrule}*\oarg{引导点间距|(0.7pc)}\parg{引导点大小|(1.2)}\marg{引导点}\oarg{页码格式} % \tn{EBNumberLine}\marg{编号类型} % \end{syntax} % \tn{tocrule} 命令生成目录引导线,需要在 \opt{rule} 选项中使用。带有星号的命令会使当前级别的目录引导线右边与页码连接而不是对齐。引导点间距需带有长度单位,引导点大小不带单位,为引导点符号正常大小的倍数,引导点一般为英文句号或 \tn{cdot} 中心点符号。页码格式的内容位于页码前面,可以设置页码字体和距离等,最后一个格式命令可以带有一个参数,这个参数接受页码编号。 +% \end{function} % % \tn{EBNumberLine} 命令类似 \CTeX 的 \tn{CTEXnumberline} 命令,用于 \opt{tocline} 选项中设置目录标签的编号。区别是它需要在 \opt{tocset/hang = false} 时使用,否则目录中无法显示标题编号,使用它的时候 \opt{numsep} 选项仍然有效。\meta{编号类型} 为 \opt{chapter} 和 \opt{section} 等,也可用参数 \#1 代替当前级别类型,标题名用参数 \#2 代替一般不变。 -% \end{function} % % \begin{ctexexam} % \tocset @@ -728,7 +734,7 @@ % % \subsubsection{排序列表} % \label{subsec:sort list} -% 使用 \opt{enumerate} 环境可创建排序列表,使用 \env{enumerate*} 环境产生行内部列表,可以使用\textbf{A、a、I、i和1}作为可选项为 \env{enumerate} 与 \env{enumerate*} 格式化标签。若生成\textbf{Item I、Item II、Item III}格式可以这样 +% 使用 \opt{enumerate} 环境可创建排序列表,使用 \env{enumerate*} 环境产生行内部列表,可以使用 \textbf{A、a、I、i和1} 作为可选项为 \env{enumerate} 与 \env{enumerate*} 格式化标签。若生成 \textbf{Item I、Item II、Item III} 格式可以这样 % \begin{ctexexam} % \begin{enumerate*}[(a)] % \begin{enumerate}[\bfseries{Item} I] @@ -801,7 +807,7 @@ % % \subsection{盒子} % \label{subsec:box} -% 使用盒子以及小节 \ref{subsec:exercise} 中的 \env{exercise} 环境需要在导言区\textbf{手动载入} \pkg{tcolorbox} 宏包,它们的配置键值列表选项同样由 \pkg{tcolorbox} 提供支持,具体选项可见宏包文档的 Option Keys 一节,可以进行边距、字体及背景颜色等各种个性化设置,一些配置会覆盖之前预置的设置。 +% 使用盒子以及小节 \ref{subsec:exercise} 中的 \env{exercise} 环境需要在导言区 \textbf{手动载入} \pkg{tcolorbox} 宏包,它们的配置键值列表选项同样由 \pkg{tcolorbox} 提供支持,具体选项可见宏包文档的 Option Keys 一节,可以进行边距、字体及背景颜色等各种个性化设置,一些配置会覆盖之前预置的设置。 % % \subsubsection{摘要盒子} % \begin{function}[added = 2021-01-05,updated = 2021-05-02]{outline} @@ -1062,7 +1068,7 @@ %<*class> \NeedsTeXFormat{LaTeX2e}[2020/10/01] \RequirePackage{l3keys2e} -\ProvidesExplClass{easybook}{2021/06/11}{1.26}{beta} +\ProvidesExplClass{easybook}{2021/06/14}{1.26b}{beta} \bool_set_false:N \l__eb_compile_draft_bool \bool_set_false:N \l__eb_title_newline_bool @@ -1306,7 +1312,7 @@ %<*package> \NeedsTeXFormat{LaTeX2e}[2020/10/01] \RequirePackage{etoolbox} -\ProvidesExplPackage{easybase}{2021/06/11}{1.26}{beta} +\ProvidesExplPackage{easybase}{2021/06/14}{1.26b}{beta} \cs_generate_variant:Nn \eb_ctex_define:nn { nx } \cs_generate_variant:Nn \int_to_arabic:n { v } @@ -1364,7 +1370,7 @@ } } \cs_new_protected:Npn \eb_at_end_preamble:n - { \ctex_gadd_ltxhook:nn { env/document/before } } + { \BeforeBeginEnvironment { document } } \cs_gset_eq:NN \PackageWarning \use_none:nn \bool_if_exist:NF \l__eb_class_book_bool @@ -1403,9 +1409,9 @@ \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 +\bool_new:N \l__eb_mark_uppercase_bool +\bool_new:N \l__eb_chap_counter_withpart_bool +\tl_new:N \l__eb_foot_counter_parent_choice_tl \seq_const_from_clist:Nn \c__eb_options_path_seq { @@ -1430,12 +1436,12 @@ { multoc .bool_set:N = \l__eb_multoc_bool, multoc .default:n = true, - withpart .bool_set:N = \l__eb_chap_withpart_bool, + withpart .bool_set:N = \l__eb_chap_counter_withpart_bool, withpart .default:n = true, withpart .initial:n = false, rulewidth .dim_set:N = \eb@rule@width@dim, rulewidth .initial:n = 0.75pt, - uppercase .bool_set:N = \l__eb_uppercase_bool, + uppercase .bool_set:N = \l__eb_mark_uppercase_bool, uppercase .default:n = true, uppercase .initial:n = true, figurepath .tl_set:N = \l_eb_graphics_path_tl, @@ -1444,7 +1450,7 @@ { part,page,chapter } { \tl_set_eq:NN - \l__eb_foot_numparent_choice_tl \l_keys_choice_tl + \l__eb_foot_counter_parent_choice_tl \l_keys_choice_tl }, footwith .value_required:n = true, footwith .initial:n = chapter, @@ -1569,6 +1575,17 @@ \cs_gset_eq:NN \easyhead \fancyhead \cs_gset_eq:NN \easyfoot \fancyfoot +\NewDocumentCommand{\markrule} + {O{\textwidth}D(){ctex@frame}m>{\SplitArgument{1}{+}}O{}} + {\eb_draw_markrule:nnnnn {#1} {#2} {#3} #4} +\cs_new_protected:Npn \eb_draw_markrule:nnnnn #1#2#3#4#5 + { + \group_begin: + \tl_if_empty:nF {#4} { \vspace*{#4} } + \color{#2}\hrule\@width #1\@height #3 + \tl_if_novalue:nF {#5} { \vspace*{#5} } + \group_end: + } \eb_ctex_define:nn { hdrset } { head-foot .tl_set:N = \l__eb_fancyhf_content_tl, @@ -1586,36 +1603,15 @@ } }, - chap-mark .cs_set:Np = \eb_fancyhf_chapter_mark:n #1, - chap-mark .initial:n = - { - \int_compare:nNnT { \c@secnumdepth } > { -1 } - { - \ifbool{@mainmatter} - { - \int_if_odd:nT { \CTEX@chapter@numbering } - { \eb@mark@chapter@label } - }{} - }#1 - }, - sec-mark .cs_set:Np = \eb_fancyhf_section_mark:n #1, - sec-mark .initial:n = - { - \int_compare:nNnT { \c@secnumdepth } > { 0 } - { - \int_if_odd:nT { \CTEX@section@numbering } - { \eb@mark@section@label } - }#1 - }, + chap-mark .cs_set:Np = \eb_fancyhf_chapter_mark:n #1, + chap-mark .initial:n = + { \CTEXifname{\eb@mark@chapter@label}{}#1 }, + sec-mark .cs_set:Np = \eb_fancyhf_section_mark:n #1, + sec-mark .initial:n = + { \CTEXifname{\eb@mark@section@label}{}#1 }, subsec-mark .cs_set:Np = \eb_fancyhf_subsection_mark:n #1, subsec-mark .initial:n = - { - \int_compare:nNnT { \c@secnumdepth } > { 1 } - { - \int_if_odd:nT { \CTEX@subsection@numbering } - { \eb@mark@subsection@label } - }#1 - }, + { \CTEXifname{\eb@mark@subsection@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}, @@ -1623,25 +1619,13 @@ 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@frame} - \hrule\@width\textwidth\@height\eb@rule@width@dim - \group_end: - }, - footrule .tl_gset:N = \footrule, - footrule .initial:n = { }, + headrule .tl_gset:N = \headrule, + headrule .initial:n = \markrule{\eb@rule@width@dim}, + footrule .tl_gset:N = \footrule, + footrule .initial:n = { }, footnoterule .tl_gset:N = \footnoterule, footnoterule .initial:n = - { - \group_begin: - \color{ctex@frame} - \hrule\@width 0.35\columnwidth\@height\eb@rule@width@dim - \vspace*{2.6pt} - \group_end: - }, + { \markrule[0.35\textwidth]{\eb@rule@width@dim}[+2.6pt] }, fnmargin .dim_set:N = \footnotemargin, fnmargin .initial:n = 0.75\ccwd, @@ -1669,32 +1653,34 @@ fnmark-num .value_required:n = true } -\cs_new:Npn \eb_upper_number_mark_bool:nn #1#2 +\cs_new:Npn \eb_mark_uppercase_bool:nn #1#2 { - \bool_if:NT \l__eb_uppercase_bool - { \text_uppercase:n } {\use:c { eb_fancyhf_#1_mark:n } {#2}} + \bool_if:NTF \l__eb_mark_uppercase_bool + { \text_uppercase:n } + { \text_titlecase_first:n } + { \use:c { eb_fancyhf_#1_mark:n } {#2} } } -\cs_new:Npn \eb@number@markdouble #1#2 +\cs_new:Npn \eb@level@markdouble #1#2 { \markboth - {\eb_upper_number_mark_bool:nn {#1} {#2}} + {\eb_mark_uppercase_bool:nn {#1} {#2}} { \bool_if:NT \l__eb_page_twoside_bool - { \eb_upper_number_mark_bool:nn {#1} {#2} } + { \eb_mark_uppercase_bool:nn {#1} {#2} } } } -\cs_new:Npn \eb@number@markright #1#2 - { \markright{\eb_upper_number_mark_bool:nn {#1} {#2}} } -\cs_new:Npn \eb@number@section@mark #1 +\cs_new:Npn \eb@level@markright #1#2 + { \markright{\eb_mark_uppercase_bool:nn {#1} {#2}} } +\cs_new:Npn \eb@level@section@mark #1 { \bool_if:NTF \l__eb_class_book_bool - { \eb@number@markright{section}{#1} } - { \eb@number@markdouble{section}{#1} } + { \eb@level@markright{section}{#1} } + { \eb@level@markdouble{section}{#1} } } -\cs_new:Npn \eb@number@subsection@mark #1 +\cs_new:Npn \eb@level@subsection@mark #1 { \bool_if:NF \l__eb_class_book_bool - { \eb@number@markright{subsection}{#1} } + { \eb@level@markright{subsection}{#1} } } \ctex_at_end_preamble:n { @@ -1703,9 +1689,9 @@ \tl_use:N \l__eb_fancyhf_content_tl \cs_gset_eq:NN \ps@plain \ps@empty \pagestyle{fancy} - \cs_gset:Npn \chaptermark #1 { \eb@number@markdouble{chapter}{#1} } - \cs_gset_eq:NN \sectionmark \eb@number@section@mark - \cs_gset_eq:NN \subsectionmark \eb@number@subsection@mark + \cs_gset:Npn \chaptermark #1 { \eb@level@markdouble{chapter}{#1} } + \cs_gset_eq:NN \sectionmark \eb@level@section@mark + \cs_gset_eq:NN \subsectionmark \eb@level@subsection@mark \bool_if:NT \l__eb_compile_draft_bool { \easyfoot[C]{\color{SlateGray}\sffamily\today} @@ -1724,14 +1710,14 @@ \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 + \bool_if:NT \l__eb_chap_counter_withpart_bool { \counterwithin*{chapter}{part} } - \tl_if_eq:NnT \l__eb_foot_numparent_choice_tl { part } + \tl_if_eq:NnT \l__eb_foot_counter_parent_choice_tl { part } { \counterwithout*{footnote}{chapter} \counterwithin*{footnote}{part} } - \tl_if_eq:NnT \l__eb_foot_numparent_choice_tl { page } + \tl_if_eq:NnT \l__eb_foot_counter_parent_choice_tl { page } { \counterwithout*{footnote}{chapter} \counterwithin*{footnote}{page} @@ -2038,13 +2024,48 @@ } } +\newcounter{bichapter} +\newcounter{bisection}[bichapter] +\newcounter{bisubsection}[bisection] +\cs_new:Npn \eb_arabic:n #1 { \int_to_arabic:v { c@#1 } } +\cs_new:Npn \eb_section_counter_prefix:n #1 + { + \int_compare:nNnT { \c@chapter } > { 0 } { \use:c { the#1chapter }. } + \eb_arabic:n { #1section } + } +\cs_set:Npn \thebichapter { \eb_arabic:n { bichapter } } +\cs_set:Npn \thebisection { \eb_section_counter_prefix:n { bi } } +\cs_set:Npn \thebisubsection { \thebisection.\eb_arabic:n { bisubsection } } +\cs_set:Npn \thesection { \eb_section_counter_prefix:n { } } +\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@chapter } > { 0 } + { + \thechapter + \tl_use:c { l__eb_#1_separator_tl } + } + \eb_arabic:n {#1} + } + } \contentsuse{}{tec} +\tl_new:N \eb@before@addbitoc@hook +\NewDocumentCommand{\EBeforeAddBitoc}{sm} + { + \IfBooleanTF{#1} + {\tl_gset:Nn \eb@before@addbitoc@hook {#2}} + {\tl_gput_right:Nn \eb@before@addbitoc@hook {#2}} + } \cs_set_protected:Npn \CTEX@addbitocline #1#2 { \group_begin: \def\CTEX@prechapter{\CTEX@prebichapter} \def\CTEX@thechapter{\CTEX@bichapter@number} \def\CTEX@postchapter{\CTEX@postbichapter} + \eb@before@addbitoc@hook \addcontentsline{tec}{#1} {\use:c { CTEX@#1@tocline }{#1}{#2}} \group_end: @@ -2065,13 +2086,14 @@ \tl_case:Nn \l__eb__bitoc_mark_title_level_tl { \c__eb_bitoc_mark_title_chapter_tl - { \eb@nonumber@markdouble{##2} } + { \eb@level@markdouble{chapter}{##2} } \c__eb_bitoc_mark_title_section_tl - { \eb@nonumber@section@mark{##2} } + { \eb@level@section@mark{##2} } \c__eb_bitoc_mark_title_subsection_tl - { \eb@nonumber@subsection@mark{##2} } + { \eb@level@subsection@mark{##2} } } }{ + \stepcounter{bi#1} \use:c {#1}[##2]{##3} \tl_if_empty:oF {##4} { \CTEX@addbitocline{#1}{##4} } } @@ -2131,45 +2153,16 @@ { \tl_set:Nn \eb@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@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@nonumber@markright #1 - { \markright{\eb_upper_nonumber_mark_bool:n {#1}} } -\cs_new:Npn \eb@nonumber@section@mark #1 - { - \bool_if:NTF \l__eb_class_book_bool - { \eb@nonumber@markright{#1} } - { \eb@nonumber@markdouble{#1} } - } -\cs_new:Npn \eb@nonumber@subsection@mark #1 - { - \bool_if:NF \l__eb_class_book_bool - { \eb@nonumber@markright{#1} } - } - \cs_new_protected:Npn \eb_title_mark_intoc:n #1 { \tl_if_eq:NnTF \l__eb_toc_type_tl { chapter } { \bichapter*{#1}{\eb@bitoc@title} - \eb@nonumber@markdouble{#1} + \eb@level@markdouble{chapter}{#1} } { \bisection*{#1}{\eb@bitoc@title} - \eb@nonumber@section@mark{#1} + \eb@level@section@mark{#1} } } \cs_new_protected:Npn \eb_title_mark_notoc:n #1 @@ -2177,11 +2170,11 @@ \tl_if_eq:NnTF \l__eb_toc_type_tl { chapter } { \chapter*{\phantomsection #1} - \eb@nonumber@markdouble{#1} + \eb@level@markdouble{chapter}{#1} } { \section*{\phantomsection #1} - \eb@nonumber@section@mark{#1} + \eb@level@section@mark{#1} } } \cs_new_protected:Npn \eb_title_number_intoc_bool:nn #1#2 @@ -2202,7 +2195,7 @@ \bool_if:NTF \l__eb_class_book_bool { \bichapter*{#1}{\l__eb_bib_bitoc_title} } { \bisection*{#1}{\l__eb_bib_bitoc_title} } - \eb@nonumber@section@mark{#1} + \eb@level@section@mark{#1} } \cs_new_protected:Npn \eb_toc_start_multicol_bool:n #1 { @@ -2274,7 +2267,7 @@ \group_begin: \tl_set_eq:NN \eb@toc@title \indexname \cs_set_eq:NN \imki@indexlevel \use_none:n - \setkeys{imki}{intoc = false} + \setkeys{imkiindex}{noclearpage} \IfValueT{#4}{\keys_set:nn { eb/listoc } {#4}} \tl_set:Nn \imki@indexheaders { @@ -2295,6 +2288,12 @@ binmuber .tl_set:N = \CTEX@bichapter@number, binmuber .initial:n = \arabic{chapter} } +\cs_new_protected:Npn \eb_counter_set:nn #1#2 + { + \seq_set_from_clist:No \l__eb_counter_name_seq {#2} + \seq_map_inline:Nn \l__eb_counter_name_seq + { \setcounter{##1}{#1} } + } \RenewDocumentCommand{\appendix} {O{Appendix\space}D(){\Alph{chapter}}} { @@ -2314,23 +2313,23 @@ \def\CTEX@postchapter{\CTEX@postbiappendix} } \ExplSyntaxOff\char_set_catcode_other:N \@ - \setcounter{chapter}{0} - \setcounter{section}{0} \gdef\thechapter{\@Alph\c@chapter} + \gdef\thebichapter{\@Alph\c@bichapter} \gdef\CTEX@prechapter{\CTEX@preappendix} \gdef\CTEX@thechapter{\CTEX@appendix@number} \gdef\CTEX@postchapter{\CTEX@postappendix} \gdef\CTEX@chapter@numbering{\CTEX@appendix@numbering} + \eb_counter_set:nn { 0 } { chapter,section,bichapter,bisection } } { - \setcounter{section}{0} - \setcounter{subsection}{0} \gdef\thesection{\@Alph\c@section} + \gdef\thebisection{\@Alph\c@bisection} \gdef\CTEX@presection{\CTEX@preappendix} \gdef\CTEX@thesection{\CTEX@appendix@number} \gdef\CTEX@postsection{\CTEX@postappendix} \gdef\CTEX@section@numbering{\CTEX@appendix@numbering} \ctex_set:nn { appendix } { number = \@Alph\c@section,name = { } } + \eb_counter_set:nn { 0 } { section,subsection,bisection,bisubsection } } } @@ -2473,27 +2472,6 @@ \selectfont\ignorespaces } -\cs_new:Npn \eb_arabic:n #1 { \int_to_arabic:v { c@#1 } } -\cs_gset:Npn \thesection - { - \int_compare:nNnT { \c@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@chapter } > { 0 } - { - \thechapter - \tl_use:c { l__eb_#1_separator_tl } - } - \eb_arabic:n {#1} - } - } - \skip_set:Nn \parskip { 0pt plus 2pt minus 1pt } \skip_set:Nn \intextsep { 14pt plus 2pt minus 2pt } \skip_set:Nn \textfloatsep { 16pt plus 2pt minus 4pt } @@ -2606,24 +2584,22 @@ } \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 - ] + 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:NV - \declaretheoremstyle \c__eb_thmtools_keyval_tl{easy-theorem} + \exp_last_unbraced:NNV + \declaretheoremstyle[\c__eb_thmtools_keyval_tl]{easy-theorem} \eb_thmname_set:nnn { exercise } { Exercise } { 练习 } \cs_undefine:N \proof \clist_map_inline:nn @@ -2744,7 +2720,7 @@ } \newtcbox[auto~counter]{\eb@tc@exercise@box}[1]{tc-exercise,#1} \tl_new:N \eb@tc@list@prologue - \cs_new:Npn \exerprologue #1 { \tl_set:Nn \eb@tc@list@prologue {#1} } + \cs_new:Npn \exerprologue #1 { \tl_gset:Nn \eb@tc@list@prologue {#1} } \NewDocumentEnvironment{outline}{O{}D(){\abstractname}o+b} { \begin{tcolorbox}[tc-outline,title = #2,IfValueT = {#3}{#3}] @@ -2854,7 +2830,7 @@ \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 +\clist_new:N \l__eb_bib_datafile_clist \eb_ctex_define:nn { bibset } { @@ -2879,9 +2855,9 @@ { \tl_set_eq:NN \l__eb_bib_otherstyle_tl \l_keys_value_tl }, bib-style .initial:n = numerical, - cite-style .code:n = + cite-style .code:n = { \tl_set:Nn \l__eb_bib_citestyle_tl {#1} }, - datafile .tl_set:N = \l__eb_bib_datafile_tl, + datafile .clist_set:N = \l__eb_bib_datafile_clist, bitoc-title .tl_set:N = \l__eb_bib_bitoc_title, bitoc-title .initial:n = Reference @@ -2917,7 +2893,7 @@ \bool_if:NT \l__eb_multoc_bool { \begin{multicols}{\int_use:N \l__eb_toc_columns_int} } } - \exp_args:NV \bibliography \l__eb_bib_datafile_tl + \exp_args:NV \bibliography \l__eb_bib_datafile_clist \group_end: } } @@ -2939,7 +2915,7 @@ } \cs_new_protected:Npn \EBiblatexPostset { - \exp_args:NV \addbibresource \l__eb_bib_datafile_tl + \clist_map_function:NN \l__eb_bib_datafile_clist \addbibresource \tl_gset:Nn \blx@default@theheading { bibintoc } \defbibheading{bibintoc}[\bibname] {\eb_biber_title_level_bool:n {##1}} @@ -2947,7 +2923,7 @@ } \eb_at_end_preamble:n { - \tl_if_empty:NF \l__eb_bib_datafile_tl + \clist_if_empty:NF \l__eb_bib_datafile_clist { \bool_if:NTF \l__eb_backend_bibtex_bool { diff --git a/Master/texmf-dist/tex/latex/easybook/easybase.sty b/Master/texmf-dist/tex/latex/easybook/easybase.sty index b3de2700eb8..6eed832fb2e 100644 --- a/Master/texmf-dist/tex/latex/easybook/easybase.sty +++ b/Master/texmf-dist/tex/latex/easybook/easybase.sty @@ -13,7 +13,7 @@ %% https://creativecommons.org/licenses/by/4.0/legalcode \NeedsTeXFormat{LaTeX2e}[2020/10/01] \RequirePackage{etoolbox} -\ProvidesExplPackage{easybase}{2021/06/11}{1.26}{beta} +\ProvidesExplPackage{easybase}{2021/06/14}{1.26b}{beta} \cs_generate_variant:Nn \eb_ctex_define:nn { nx } \cs_generate_variant:Nn \int_to_arabic:n { v } @@ -71,7 +71,7 @@ } } \cs_new_protected:Npn \eb_at_end_preamble:n - { \ctex_gadd_ltxhook:nn { env/document/before } } + { \BeforeBeginEnvironment { document } } \cs_gset_eq:NN \PackageWarning \use_none:nn \bool_if_exist:NF \l__eb_class_book_bool @@ -110,9 +110,9 @@ \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 +\bool_new:N \l__eb_mark_uppercase_bool +\bool_new:N \l__eb_chap_counter_withpart_bool +\tl_new:N \l__eb_foot_counter_parent_choice_tl \seq_const_from_clist:Nn \c__eb_options_path_seq { @@ -137,12 +137,12 @@ { multoc .bool_set:N = \l__eb_multoc_bool, multoc .default:n = true, - withpart .bool_set:N = \l__eb_chap_withpart_bool, + withpart .bool_set:N = \l__eb_chap_counter_withpart_bool, withpart .default:n = true, withpart .initial:n = false, rulewidth .dim_set:N = \eb@rule@width@dim, rulewidth .initial:n = 0.75pt, - uppercase .bool_set:N = \l__eb_uppercase_bool, + uppercase .bool_set:N = \l__eb_mark_uppercase_bool, uppercase .default:n = true, uppercase .initial:n = true, figurepath .tl_set:N = \l_eb_graphics_path_tl, @@ -151,7 +151,7 @@ { part,page,chapter } { \tl_set_eq:NN - \l__eb_foot_numparent_choice_tl \l_keys_choice_tl + \l__eb_foot_counter_parent_choice_tl \l_keys_choice_tl }, footwith .value_required:n = true, footwith .initial:n = chapter, @@ -276,6 +276,17 @@ \cs_gset_eq:NN \easyhead \fancyhead \cs_gset_eq:NN \easyfoot \fancyfoot +\NewDocumentCommand{\markrule} + {O{\textwidth}D(){ctex@frame}m>{\SplitArgument{1}{+}}O{}} + {\eb_draw_markrule:nnnnn {#1} {#2} {#3} #4} +\cs_new_protected:Npn \eb_draw_markrule:nnnnn #1#2#3#4#5 + { + \group_begin: + \tl_if_empty:nF {#4} { \vspace*{#4} } + \color{#2}\hrule\@width #1\@height #3 + \tl_if_novalue:nF {#5} { \vspace*{#5} } + \group_end: + } \eb_ctex_define:nn { hdrset } { head-foot .tl_set:N = \l__eb_fancyhf_content_tl, @@ -293,36 +304,15 @@ } }, - chap-mark .cs_set:Np = \eb_fancyhf_chapter_mark:n #1, - chap-mark .initial:n = - { - \int_compare:nNnT { \c@secnumdepth } > { -1 } - { - \ifbool{@mainmatter} - { - \int_if_odd:nT { \CTEX@chapter@numbering } - { \eb@mark@chapter@label } - }{} - }#1 - }, - sec-mark .cs_set:Np = \eb_fancyhf_section_mark:n #1, - sec-mark .initial:n = - { - \int_compare:nNnT { \c@secnumdepth } > { 0 } - { - \int_if_odd:nT { \CTEX@section@numbering } - { \eb@mark@section@label } - }#1 - }, + chap-mark .cs_set:Np = \eb_fancyhf_chapter_mark:n #1, + chap-mark .initial:n = + { \CTEXifname{\eb@mark@chapter@label}{}#1 }, + sec-mark .cs_set:Np = \eb_fancyhf_section_mark:n #1, + sec-mark .initial:n = + { \CTEXifname{\eb@mark@section@label}{}#1 }, subsec-mark .cs_set:Np = \eb_fancyhf_subsection_mark:n #1, subsec-mark .initial:n = - { - \int_compare:nNnT { \c@secnumdepth } > { 1 } - { - \int_if_odd:nT { \CTEX@subsection@numbering } - { \eb@mark@subsection@label } - }#1 - }, + { \CTEXifname{\eb@mark@subsection@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}, @@ -330,25 +320,13 @@ 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@frame} - \hrule\@width\textwidth\@height\eb@rule@width@dim - \group_end: - }, - footrule .tl_gset:N = \footrule, - footrule .initial:n = { }, + headrule .tl_gset:N = \headrule, + headrule .initial:n = \markrule{\eb@rule@width@dim}, + footrule .tl_gset:N = \footrule, + footrule .initial:n = { }, footnoterule .tl_gset:N = \footnoterule, footnoterule .initial:n = - { - \group_begin: - \color{ctex@frame} - \hrule\@width 0.35\columnwidth\@height\eb@rule@width@dim - \vspace*{2.6pt} - \group_end: - }, + { \markrule[0.35\textwidth]{\eb@rule@width@dim}[+2.6pt] }, fnmargin .dim_set:N = \footnotemargin, fnmargin .initial:n = 0.75\ccwd, @@ -376,32 +354,34 @@ fnmark-num .value_required:n = true } -\cs_new:Npn \eb_upper_number_mark_bool:nn #1#2 +\cs_new:Npn \eb_mark_uppercase_bool:nn #1#2 { - \bool_if:NT \l__eb_uppercase_bool - { \text_uppercase:n } {\use:c { eb_fancyhf_#1_mark:n } {#2}} + \bool_if:NTF \l__eb_mark_uppercase_bool + { \text_uppercase:n } + { \text_titlecase_first:n } + { \use:c { eb_fancyhf_#1_mark:n } {#2} } } -\cs_new:Npn \eb@number@markdouble #1#2 +\cs_new:Npn \eb@level@markdouble #1#2 { \markboth - {\eb_upper_number_mark_bool:nn {#1} {#2}} + {\eb_mark_uppercase_bool:nn {#1} {#2}} { \bool_if:NT \l__eb_page_twoside_bool - { \eb_upper_number_mark_bool:nn {#1} {#2} } + { \eb_mark_uppercase_bool:nn {#1} {#2} } } } -\cs_new:Npn \eb@number@markright #1#2 - { \markright{\eb_upper_number_mark_bool:nn {#1} {#2}} } -\cs_new:Npn \eb@number@section@mark #1 +\cs_new:Npn \eb@level@markright #1#2 + { \markright{\eb_mark_uppercase_bool:nn {#1} {#2}} } +\cs_new:Npn \eb@level@section@mark #1 { \bool_if:NTF \l__eb_class_book_bool - { \eb@number@markright{section}{#1} } - { \eb@number@markdouble{section}{#1} } + { \eb@level@markright{section}{#1} } + { \eb@level@markdouble{section}{#1} } } -\cs_new:Npn \eb@number@subsection@mark #1 +\cs_new:Npn \eb@level@subsection@mark #1 { \bool_if:NF \l__eb_class_book_bool - { \eb@number@markright{subsection}{#1} } + { \eb@level@markright{subsection}{#1} } } \ctex_at_end_preamble:n { @@ -410,9 +390,9 @@ \tl_use:N \l__eb_fancyhf_content_tl \cs_gset_eq:NN \ps@plain \ps@empty \pagestyle{fancy} - \cs_gset:Npn \chaptermark #1 { \eb@number@markdouble{chapter}{#1} } - \cs_gset_eq:NN \sectionmark \eb@number@section@mark - \cs_gset_eq:NN \subsectionmark \eb@number@subsection@mark + \cs_gset:Npn \chaptermark #1 { \eb@level@markdouble{chapter}{#1} } + \cs_gset_eq:NN \sectionmark \eb@level@section@mark + \cs_gset_eq:NN \subsectionmark \eb@level@subsection@mark \bool_if:NT \l__eb_compile_draft_bool { \easyfoot[C]{\color{SlateGray}\sffamily\today} @@ -431,14 +411,14 @@ \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 + \bool_if:NT \l__eb_chap_counter_withpart_bool { \counterwithin*{chapter}{part} } - \tl_if_eq:NnT \l__eb_foot_numparent_choice_tl { part } + \tl_if_eq:NnT \l__eb_foot_counter_parent_choice_tl { part } { \counterwithout*{footnote}{chapter} \counterwithin*{footnote}{part} } - \tl_if_eq:NnT \l__eb_foot_numparent_choice_tl { page } + \tl_if_eq:NnT \l__eb_foot_counter_parent_choice_tl { page } { \counterwithout*{footnote}{chapter} \counterwithin*{footnote}{page} @@ -745,13 +725,48 @@ } } +\newcounter{bichapter} +\newcounter{bisection}[bichapter] +\newcounter{bisubsection}[bisection] +\cs_new:Npn \eb_arabic:n #1 { \int_to_arabic:v { c@#1 } } +\cs_new:Npn \eb_section_counter_prefix:n #1 + { + \int_compare:nNnT { \c@chapter } > { 0 } { \use:c { the#1chapter }. } + \eb_arabic:n { #1section } + } +\cs_set:Npn \thebichapter { \eb_arabic:n { bichapter } } +\cs_set:Npn \thebisection { \eb_section_counter_prefix:n { bi } } +\cs_set:Npn \thebisubsection { \thebisection.\eb_arabic:n { bisubsection } } +\cs_set:Npn \thesection { \eb_section_counter_prefix:n { } } +\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@chapter } > { 0 } + { + \thechapter + \tl_use:c { l__eb_#1_separator_tl } + } + \eb_arabic:n {#1} + } + } \contentsuse{}{tec} +\tl_new:N \eb@before@addbitoc@hook +\NewDocumentCommand{\EBeforeAddBitoc}{sm} + { + \IfBooleanTF{#1} + {\tl_gset:Nn \eb@before@addbitoc@hook {#2}} + {\tl_gput_right:Nn \eb@before@addbitoc@hook {#2}} + } \cs_set_protected:Npn \CTEX@addbitocline #1#2 { \group_begin: \def\CTEX@prechapter{\CTEX@prebichapter} \def\CTEX@thechapter{\CTEX@bichapter@number} \def\CTEX@postchapter{\CTEX@postbichapter} + \eb@before@addbitoc@hook \addcontentsline{tec}{#1} {\use:c { CTEX@#1@tocline }{#1}{#2}} \group_end: @@ -772,13 +787,14 @@ \tl_case:Nn \l__eb__bitoc_mark_title_level_tl { \c__eb_bitoc_mark_title_chapter_tl - { \eb@nonumber@markdouble{##2} } + { \eb@level@markdouble{chapter}{##2} } \c__eb_bitoc_mark_title_section_tl - { \eb@nonumber@section@mark{##2} } + { \eb@level@section@mark{##2} } \c__eb_bitoc_mark_title_subsection_tl - { \eb@nonumber@subsection@mark{##2} } + { \eb@level@subsection@mark{##2} } } }{ + \stepcounter{bi#1} \use:c {#1}[##2]{##3} \tl_if_empty:oF {##4} { \CTEX@addbitocline{#1}{##4} } } @@ -838,45 +854,16 @@ { \tl_set:Nn \eb@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@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@nonumber@markright #1 - { \markright{\eb_upper_nonumber_mark_bool:n {#1}} } -\cs_new:Npn \eb@nonumber@section@mark #1 - { - \bool_if:NTF \l__eb_class_book_bool - { \eb@nonumber@markright{#1} } - { \eb@nonumber@markdouble{#1} } - } -\cs_new:Npn \eb@nonumber@subsection@mark #1 - { - \bool_if:NF \l__eb_class_book_bool - { \eb@nonumber@markright{#1} } - } - \cs_new_protected:Npn \eb_title_mark_intoc:n #1 { \tl_if_eq:NnTF \l__eb_toc_type_tl { chapter } { \bichapter*{#1}{\eb@bitoc@title} - \eb@nonumber@markdouble{#1} + \eb@level@markdouble{chapter}{#1} } { \bisection*{#1}{\eb@bitoc@title} - \eb@nonumber@section@mark{#1} + \eb@level@section@mark{#1} } } \cs_new_protected:Npn \eb_title_mark_notoc:n #1 @@ -884,11 +871,11 @@ \tl_if_eq:NnTF \l__eb_toc_type_tl { chapter } { \chapter*{\phantomsection #1} - \eb@nonumber@markdouble{#1} + \eb@level@markdouble{chapter}{#1} } { \section*{\phantomsection #1} - \eb@nonumber@section@mark{#1} + \eb@level@section@mark{#1} } } \cs_new_protected:Npn \eb_title_number_intoc_bool:nn #1#2 @@ -909,7 +896,7 @@ \bool_if:NTF \l__eb_class_book_bool { \bichapter*{#1}{\l__eb_bib_bitoc_title} } { \bisection*{#1}{\l__eb_bib_bitoc_title} } - \eb@nonumber@section@mark{#1} + \eb@level@section@mark{#1} } \cs_new_protected:Npn \eb_toc_start_multicol_bool:n #1 { @@ -981,7 +968,7 @@ \group_begin: \tl_set_eq:NN \eb@toc@title \indexname \cs_set_eq:NN \imki@indexlevel \use_none:n - \setkeys{imki}{intoc = false} + \setkeys{imkiindex}{noclearpage} \IfValueT{#4}{\keys_set:nn { eb/listoc } {#4}} \tl_set:Nn \imki@indexheaders { @@ -1002,6 +989,12 @@ binmuber .tl_set:N = \CTEX@bichapter@number, binmuber .initial:n = \arabic{chapter} } +\cs_new_protected:Npn \eb_counter_set:nn #1#2 + { + \seq_set_from_clist:No \l__eb_counter_name_seq {#2} + \seq_map_inline:Nn \l__eb_counter_name_seq + { \setcounter{##1}{#1} } + } \RenewDocumentCommand{\appendix} {O{Appendix\space}D(){\Alph{chapter}}} { @@ -1021,23 +1014,23 @@ \def\CTEX@postchapter{\CTEX@postbiappendix} } \ExplSyntaxOff\char_set_catcode_other:N \@ - \setcounter{chapter}{0} - \setcounter{section}{0} \gdef\thechapter{\@Alph\c@chapter} + \gdef\thebichapter{\@Alph\c@bichapter} \gdef\CTEX@prechapter{\CTEX@preappendix} \gdef\CTEX@thechapter{\CTEX@appendix@number} \gdef\CTEX@postchapter{\CTEX@postappendix} \gdef\CTEX@chapter@numbering{\CTEX@appendix@numbering} + \eb_counter_set:nn { 0 } { chapter,section,bichapter,bisection } } { - \setcounter{section}{0} - \setcounter{subsection}{0} \gdef\thesection{\@Alph\c@section} + \gdef\thebisection{\@Alph\c@bisection} \gdef\CTEX@presection{\CTEX@preappendix} \gdef\CTEX@thesection{\CTEX@appendix@number} \gdef\CTEX@postsection{\CTEX@postappendix} \gdef\CTEX@section@numbering{\CTEX@appendix@numbering} \ctex_set:nn { appendix } { number = \@Alph\c@section,name = { } } + \eb_counter_set:nn { 0 } { section,subsection,bisection,bisubsection } } } @@ -1180,27 +1173,6 @@ \selectfont\ignorespaces } -\cs_new:Npn \eb_arabic:n #1 { \int_to_arabic:v { c@#1 } } -\cs_gset:Npn \thesection - { - \int_compare:nNnT { \c@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@chapter } > { 0 } - { - \thechapter - \tl_use:c { l__eb_#1_separator_tl } - } - \eb_arabic:n {#1} - } - } - \skip_set:Nn \parskip { 0pt plus 2pt minus 1pt } \skip_set:Nn \intextsep { 14pt plus 2pt minus 2pt } \skip_set:Nn \textfloatsep { 16pt plus 2pt minus 4pt } @@ -1313,24 +1285,22 @@ } \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 - ] + 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:NV - \declaretheoremstyle \c__eb_thmtools_keyval_tl{easy-theorem} + \exp_last_unbraced:NNV + \declaretheoremstyle[\c__eb_thmtools_keyval_tl]{easy-theorem} \eb_thmname_set:nnn { exercise } { Exercise } { 练习 } \cs_undefine:N \proof \clist_map_inline:nn @@ -1451,7 +1421,7 @@ } \newtcbox[auto~counter]{\eb@tc@exercise@box}[1]{tc-exercise,#1} \tl_new:N \eb@tc@list@prologue - \cs_new:Npn \exerprologue #1 { \tl_set:Nn \eb@tc@list@prologue {#1} } + \cs_new:Npn \exerprologue #1 { \tl_gset:Nn \eb@tc@list@prologue {#1} } \NewDocumentEnvironment{outline}{O{}D(){\abstractname}o+b} { \begin{tcolorbox}[tc-outline,title = #2,IfValueT = {#3}{#3}] @@ -1561,7 +1531,7 @@ \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 +\clist_new:N \l__eb_bib_datafile_clist \eb_ctex_define:nn { bibset } { @@ -1586,9 +1556,9 @@ { \tl_set_eq:NN \l__eb_bib_otherstyle_tl \l_keys_value_tl }, bib-style .initial:n = numerical, - cite-style .code:n = + cite-style .code:n = { \tl_set:Nn \l__eb_bib_citestyle_tl {#1} }, - datafile .tl_set:N = \l__eb_bib_datafile_tl, + datafile .clist_set:N = \l__eb_bib_datafile_clist, bitoc-title .tl_set:N = \l__eb_bib_bitoc_title, bitoc-title .initial:n = Reference @@ -1624,7 +1594,7 @@ \bool_if:NT \l__eb_multoc_bool { \begin{multicols}{\int_use:N \l__eb_toc_columns_int} } } - \exp_args:NV \bibliography \l__eb_bib_datafile_tl + \exp_args:NV \bibliography \l__eb_bib_datafile_clist \group_end: } } @@ -1646,7 +1616,7 @@ } \cs_new_protected:Npn \EBiblatexPostset { - \exp_args:NV \addbibresource \l__eb_bib_datafile_tl + \clist_map_function:NN \l__eb_bib_datafile_clist \addbibresource \tl_gset:Nn \blx@default@theheading { bibintoc } \defbibheading{bibintoc}[\bibname] {\eb_biber_title_level_bool:n {##1}} @@ -1654,7 +1624,7 @@ } \eb_at_end_preamble:n { - \tl_if_empty:NF \l__eb_bib_datafile_tl + \clist_if_empty:NF \l__eb_bib_datafile_clist { \bool_if:NTF \l__eb_backend_bibtex_bool { diff --git a/Master/texmf-dist/tex/latex/easybook/easybook.cls b/Master/texmf-dist/tex/latex/easybook/easybook.cls index 0c6b3ddd2fa..a0f73b2f5ca 100644 --- a/Master/texmf-dist/tex/latex/easybook/easybook.cls +++ b/Master/texmf-dist/tex/latex/easybook/easybook.cls @@ -13,7 +13,7 @@ %% https://creativecommons.org/licenses/by/4.0/legalcode \NeedsTeXFormat{LaTeX2e}[2020/10/01] \RequirePackage{l3keys2e} -\ProvidesExplClass{easybook}{2021/06/11}{1.26}{beta} +\ProvidesExplClass{easybook}{2021/06/14}{1.26b}{beta} \bool_set_false:N \l__eb_compile_draft_bool \bool_set_false:N \l__eb_title_newline_bool |