From 25f20b6d8ccd4edcdfec23c1a3c908516076ee06 Mon Sep 17 00:00:00 2001
From: Norbert Preining <norbert@preining.info>
Date: Thu, 6 May 2021 03:00:58 +0000
Subject: CTAN sync 202105060300

---
 macros/latex/contrib/easybook/easybook.dtx | 217 +++++++++++++++++------------
 1 file changed, 128 insertions(+), 89 deletions(-)

(limited to 'macros/latex/contrib/easybook/easybook.dtx')

diff --git a/macros/latex/contrib/easybook/easybook.dtx b/macros/latex/contrib/easybook/easybook.dtx
index 71eec1dedc..2247ca0125 100644
--- a/macros/latex/contrib/easybook/easybook.dtx
+++ b/macros/latex/contrib/easybook/easybook.dtx
@@ -24,11 +24,11 @@
 % \changes{v1.20}{2021/01/09}{修改和完善用户文档。}
 % \changes{v1.20}{2021/01/09}{模板更改为使用 CC-BY 许可协议。}
 % \changes{v1.23}{2021/03/19}{修复在 \pkg{ctex} v2.5.6 更新后 \cls{easybook} 与 \pkg{hyperref} 冲突问题。}
-% \changes{v1.25a}{2021/05/03}{取消附带的示例文件，可查看历史版本及其它来源的使用样例。}
+% \changes{v1.25b}{2021/05/03}{取消附带的示例文件，可查看历史版本及其它来源的使用样例。}
 %
 % \title{\sffamily easybook 文档类手册}
 % \author{瞿毅}
-% \date{2021/05/04\hskip\ccwd\relax v1.25a\thanks{\url{https://gitee.com/texl3/easybook}}}
+% \date{2021/05/05\hskip\ccwd\relax v1.25b\thanks{\url{https://gitee.com/texl3/easybook}}}
 %
 % \maketitle
 % \begin{abstract}
@@ -118,7 +118,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.25a}{2021/05/04}{修复使用 \pkg{xeCJK} 与 \pkg{fontspec} 宏包的字体设置命令在 \hologo{LuaLaTeX} 下失效的问题。}
+% \changes{v1.25b}{2021/05/04}{修复使用 \pkg{xeCJK} 与 \pkg{fontspec} 宏包的字体设置命令在 \hologo{LuaLaTeX} 下失效的问题。}
 % \end{function}
 %
 % \begin{function}[rEXP,added = 2021-01-05,updated = 2021-01-13]{paper}
@@ -145,8 +145,10 @@
 % \changes{v1.23}{2021/03/16}{增加 article 文章模式，可用于短篇幅的文章。}
 % \end{function}
 %
+% \clearpage
 % \subsection{文档命令}
 % \label{subsec:document command}
+% \subsubsection{文区命令}
 % \begin{function}[added = 2021-02-20,updated = 2021-04-29]{\frontmatter,\mainmatter,\backmatter,\cleardoublepage}
 % \begin{syntax}
 %   \tn{frontmatter*}\oarg{编号格式|(Roman)}
@@ -158,15 +160,16 @@
 % \changes{v1.23}{2021/02/20}{重新定义文档结构划分命令。}
 % \end{function}
 %
-% \begin{function}[added = 2021-02-20,updated = 2021-05-04]{\tableofcontents,\listoffigures,\listoftables,\listoflistings}
+% \subsubsection{目录命令}
+% \begin{function}[added = 2021-02-20,updated = 2021-05-05]{\tableofcontents,\listoffigures,\listoftables,\listoflistings}
 % \begin{syntax}
-%   \tn{tableofcontents+}\oarg{键值列表}
+%   \tn{tableofcontents+}\oarg{键值列表}\parg{附加代码}
 %   \tn{listoffigures*+}\oarg{键值列表}
 %   \tn{listoftables*+}\oarg{键值列表}
 %   \tn{listoflistings*+}\oarg{键值列表}
 % \end{syntax}
-% \tn{listoffigures} 命令输出图片目录，\tn{listoftables} 输出表格目录，\tn{listoflistings} 输出代码目录。带有星号的目录命令不将标题添加进主文档目录，带有+号的目录命令可以使当前标题编号。\tn{tableofcontents+} 与其它命令不同是用于输出双语目录，需要与双语目录标题命令 \tn{bichapter} 等配合使用。目录的键值列表选项如下
-% \changes{v1.25a}{2021/05/04}{命令 \tn{tableofcontents} 可以输出双语目录。}
+% \tn{listoffigures} 命令输出图片目录，\tn{listoftables} 输出表格目录，\tn{listoflistings} 输出代码目录。带有星号的目录命令不将标题添加进主文档目录，带有+号的目录命令可以使当前标题编号。\tn{tableofcontents+} 与其它命令不同是用于输出双语目录，需要与双语目录标题命令 \tn{bichapter} 等或设置图片、表格和代码等英文目录的标题配合使用，附加代码是中文与英文目录之间的代码，可以插入文本和换页命令等。目录的键值列表选项如下
+% \changes{v1.25b}{2021/05/05}{命令 \tn{tableofcontents} 可以输出双语目录。}
 % \end{function}
 %
 % \begin{function}{multoc,title,book,article}
@@ -174,19 +177,40 @@
 %   multoc = <true|(false)>
 %   title = \{<中文目录标题>,<英文目录标题>\}
 % \end{syntax}
-% \opt{multoc} 与 \opt{style/multoc} 选项具有相同的效果，但是具有优先性且可单独设置不同目录是否双栏排版。\opt{title} 选项用于更改目录的标题，标题之间用一个半角逗号分开，也可以只有一部分，表示中文目录的标题，不过英文目录标题目前仅对 \tn{tableofcontents} 命令有效。\opt{book} 选项使目录标题按照 \opt{chapter} 级别输出，\opt{article} 选项使目录标题按照 \opt{article} 级别输出，默认为 \opt{chapter} 级别。
+% \opt{multoc} 与 \opt{style/multoc} 选项具有相同的效果，但是具有优先性且可单独设置不同目录是否双栏排版。\opt{title} 选项用于更改目录的标题，标题之间用一个半角逗号分开，也可以只有一部分，表示中文目录的标题。当设置了英文目录标题时，英文目录标题将会自动加入主文档目录，与 \tn{tableofcontents+} 配合输出。\opt{book} 选项使目录标题按照 \opt{chapter} 级别输出，\opt{article} 选项使目录标题按照 \opt{article} 级别输出，默认为 \opt{chapter} 级别。
 % \changes{v1.23}{2021/03/15}{为几个目录增加键值列表的选项，可设置标题输出级别以及是否加入主目录。}
 % \changes{v1.24}{2021/04/04}{目录命令的可选参数增加标题键值。}
 % \end{function}
 %
-% \begin{function}[added = 2021-05-04]{\bichapter,\bisection,\bisubsection}
+% \subsubsection{标题命令}
+% \begin{function}[added = 2021-05-05]{\bichapter,\bisection,\bisubsection,\bichapter*,\bisection*,\bisubsection*}
 % \begin{syntax}
-%   \tn{bichapter}\marg{中文标题}\marg{英文标题（在目录中）}
-%   \tn{bichapter}\marg{中文标题}\marg{英文标题（在目录中）}
-%   \tn{bichapter}\marg{中文标题}\marg{英文标题（在目录中）}
+%   \tn{bichapter}\oarg{目录中文标题}\marg{中文标题}\marg{目录英文标题}
+%   \tn{bisection}\oarg{目录中文标题}\marg{中文标题}\marg{目录英文标题}
+%   \tn{bisubsection}\oarg{目录中文标题}\marg{中文标题}\marg{目录英文标题}
+%   \tn{bichapter*}\oarg{目录中文标题}\marg{中文标题}\marg{目录英文标题}
+%   \tn{bisection*}\oarg{目录中文标题}\marg{中文标题}\marg{目录英文标题}
+%   \tn{bisubsection*}\oarg{目录中文标题}\marg{中文标题}\marg{目录英文标题}
 % \end{syntax}
-% 双语目录的标题命令目前设置了三个级别，它们将中文标题正常输出，并将中英文标题加入双语目录，这个功能是为国内一些大学的学位论文模板的要求设计，当然在英文模式下不需要使用。双语目录的格式是一致的，使用 \tn{tocset} 设置，英文目录的章级别标题名为 Chapter 暂不支持修改。
-% \changes{v1.25a}{2021/05/04}{增加与双语目录配合的标题命令。}
+% 双语目录的标题命令目前设置了常用的三个级别，它们将中文标题正常输出，并使中英文标题加入双语目录，这个功能是为国内一些大学的学位论文模板的要求设计，当然在英文模式下不需要使用。
+%
+% 它们的星号变体命令使文中标题不编号，但是仍然加入双语目录，若英文标题参数空置那么仅加入中文目录而不加入英文目录，这一点与 \tn{chapter*} 等命令的行为不太一样。可选参数是目录中的中文标题，默认与中文标题一致，正文标题过长时可用它设置在目录中显示的标题。双语目录的格式是一致的，共享使用 \tn{tocset} 的设置，英文目录的章级别标题名及编号的修改方式如下
+% \changes{v1.25b}{2021/05/05}{增加与双语目录配合的标题命令。}
+% \end{function}
+%
+% \begin{function}{biname,binmuber}
+% \begin{syntax}
+%   chapter/biname = \{<英文目录前名字|(Chapter\tn{space})>,<英文目录后名字>\}
+%   chapter/binmuber = <英文目录数字输出命令|(\tn{arabic\{chapter\}})>
+% \end{syntax}
+% 类似 \CTeX 的 \opt{name} 和 \opt{nmuber} 选项，它们用于设置主文区 \tn{bichapter} 等标题命令在英文目录中的前后名字与编号，目前只支持通常改变名字与编号的 chapter 级别。
+% \end{function}
+%
+% \begin{function}[added = 2021-05-05]{\appendix}
+% \begin{syntax}
+%   \tn{appendix}\oarg{英文附录目录前名字}\parg{英文附录目录数字输出命令}\oarg{英文附录目录后名字}
+% \end{syntax}
+% \tn{appendix} 命令后的章节标题变为附录形式。英文目录中附录标题的格式用可选参数修改，英文附录目录前名字默认为 Appendix\tn{space}，英文附录目录数字输出命令默认为 \tn{Alph}\{chapter\}，英文附录目录后名字默认为空。
 % \end{function}
 %
 % \section{接口选项}
@@ -389,7 +413,7 @@
 %   headpunct = <(empty)>
 %   bodyfont = <(empty)>
 %   notefont = <(empty)>
-%   headfont = <(\tn{color}\marg{ctex@emph}\tn{sffamily})>
+%   headfont = <(\tn{color}\{ctex@emph\}\tn{sffamily})>
 %   headindent = <(0\tn{ccwd})>
 %   spaceabove = <(0.75ex plus .1ex)>
 %   spacebelow = <(0.75ex plus .1ex)>
@@ -692,7 +716,7 @@
 % \end{syntax}
 % 习题环境 \env{exercise} 的标题紧接上一节编号并加入目录与页眉，当使用星号参数时不进行编号，使用+号参数启用 \pkg{tcolorbox} 支持生成标题。\meta{颜色名} 选项在使用+号参数时有效，其中颜色为自定义或 \pkg{xcolor} 包含的颜色名称。题目编号格式与小节 \ref{subsec:sort list} 排序列表相同，标题名默认为习题。
 %
-% 配置选项在是否使用+号参数时用法不同，使用+号参数时为 \pkg{tcolorbox} 的盒子选项，例如 \opt{boxrule} 和 \opt{fontupper}。不使用+号参数时相当于设置 \tn{ctexset}\marg{section = {\#1}} 键值选项列表，例如 \opt{format} 和 \opt{beforeskip}。\meta{序言} 选项用于在习题环境开始前插入一段内容，可以是文本或者代码。注意，环境具有相同定界符的可选参数只能\textbf{从右往左}省略，省略的参数使用默认值。
+% 配置选项在是否使用+号参数时用法不同，使用+号参数时为 \pkg{tcolorbox} 的盒子选项，例如 \opt{boxrule} 和 \opt{fontupper}。不使用+号参数时相当于设置 \tn{ctexset}\{section = {\#1}\} 键值选项列表，例如 \opt{format} 和 \opt{beforeskip}。\meta{序言} 选项用于在习题环境开始前插入一段内容，可以是文本或者代码。注意，环境具有相同定界符的可选参数只能\textbf{从右往左}省略，省略的参数使用默认值。
 % \changes{v1.23}{2021/02/08}{增加准确的习题盒子标题目录锚点。}
 % \end{function}
 %
@@ -921,7 +945,7 @@
 %<*class>
 \NeedsTeXFormat{LaTeX2e}[2020/10/01]
 \RequirePackage{l3keys2e,etoolbox}
-\ProvidesExplClass{easybook}{2021/05/04}{1.25a}{beta}
+\ProvidesExplClass{easybook}{2021/05/05}{1.25b}{beta}
 
 \cs_generate_variant:Nn \eb_ctex_define:nn { nx }
 \cs_generate_variant:Nn \int_to_arabic:n { v }
@@ -1144,10 +1168,7 @@
 \cs_new_protected:Npn \eb_font_double_engine_set:n #1
   {
     \exp_args:Nc \RenewDocumentCommand {set #1 font}{O{}mO{}}
-      {
-        \ctex_at_end_preamble:n
-          { \use:c { eb_set #1 font:nn }{##2}{##1,##3} }
-      }
+      {\use:c { eb_set #1 font:nn }{##2}{##1,##3}}
   }
 \seq_const_from_clist:Nn \c__eb_font_reset_family_seq
   { main,sans,mono,CJKmain,CJKsans,CJKmono }
@@ -1395,9 +1416,7 @@
       }
     \bool_if:NT \l__eb_compile_draft_bool
       {
-        \bool_if:NTF \l__eb_page_twoside_bool
-          { \easyfoot[C]{\color{SlateGray}\sffamily\today} }
-          { \easyhead[C]{\color{SlateGray}\sffamily\today} }
+        \easyfoot[C]{\color{SlateGray}\sffamily\today}
         \geometry{showframe}
       }
   }
@@ -1609,16 +1628,14 @@
       }
   }
 
-\contentsuse{}{bitoc}
+\contentsuse{}{tec}
 \cs_set_protected:Npn \CTEX@addbitocline #1#2
   {
     \group_begin:
-    \ctex_set:n
-      {
-        chapter/name    = Chapter\space,
-        chapter/number  = \arabic{chapter}
-      }
-    \addcontentsline{bitoc}{#1}
+    \def\CTEX@prechapter{\CTEX@prebichapter}
+    \def\CTEX@thechapter{\CTEX@bichapter@number}
+    \def\CTEX@postchapter{\CTEX@postbichapter}
+    \addcontentsline{tec}{#1}
       {\use:c { CTEX@#1@tocline }{#1}{#2}}
     \group_end:
   }
@@ -1626,8 +1643,18 @@
   { chapter,section,subsection }
 \seq_map_inline:Nn \c__eb_bitoc_title_level_seq
   {
-    \cs_new_protected:cpn {bi #1} ##1##2
-      { \use:c {#1}{##1}\CTEX@addbitocline{#1}{##2} }
+    \exp_args:Nc \NewDocumentCommand {bi #1}{sO{##3}mm}
+      {
+        \IfBooleanTF{##1}
+          {
+            \use:c {#1}*{\phantomsection ##3}
+            \CTEX@addtocline{#1}{##2}
+            \tl_if_empty:oF {##4} { \CTEX@addbitocline{#1}{##4} }
+          }{
+            \use:c {#1}[##2]{##3}
+            \tl_if_empty:oF {##4} { \CTEX@addbitocline{#1}{##4} }
+          }
+      }
   }
 
 \eb_appto_cmd:Nn \@chapter
@@ -1652,6 +1679,7 @@
   }
 
 \tl_set:Nn \l__eb_toc_type_tl { book }
+\tl_new:N \eb@bitoc@title
 \keys_define:nn { eb/listoc }
   {
     article .code:n     = \tl_set:Nn \l__eb_toc_type_tl { article },
@@ -1694,13 +1722,11 @@
   {
     \tl_if_eq:NnTF \l__eb_toc_type_tl { book }
       {
-        \chapter*{\phantomsection #1}
-        \CTEX@addtocline{chapter}{#1}
+        \bichapter*{#1}{\eb@bitoc@title}
         \eb@nonumber@markdouble{#1}
       }
       {
-        \section*{\phantomsection #1}
-        \CTEX@addtocline{section}{#1}
+        \bisection*{#1}{\eb@bitoc@title}
         \bool_if:NTF \l__eb_class_book_bool
           { \eb@nonumber@markright{#1} }
           { \eb@nonumber@markdouble{#1} }
@@ -1725,8 +1751,8 @@
     \IfBooleanTF{#1}
       {
         \tl_if_eq:NnTF \l__eb_toc_type_tl { book }
-          { \chapter{\eb@toc@title} }
-          { \section{\eb@toc@title} }
+          { \bichapter{\eb@toc@title}{\eb@bitoc@title} }
+          { \bisection{\eb@toc@title}{\eb@bitoc@title} }
       }
       {
         \IfBooleanTF{#2}
@@ -1734,17 +1760,11 @@
           { \eb_title_mark_intoc:n {\eb@toc@title} }
       }
   }
-\cs_new_protected:Npn \eb_class_title_level_bool:n #1
+\cs_new_protected:Npn \eb_biber_title_level_bool:n #1
   {
     \bool_if:NTF \l__eb_class_book_bool
-      {
-        \chapter*{\phantomsection #1}
-        \CTEX@addtocline{chapter}{#1}
-      }
-      {
-        \section*{\phantomsection #1}
-        \CTEX@addtocline{section}{#1}
-      }
+      { \bichapter*{#1}{\l__eb_bib_bitoc_title} }
+      { \bisection*{#1}{\l__eb_bib_bitoc_title} }
     \eb@nonumber@markdouble{#1}
   }
 \cs_new_protected:Npn \eb_multoc_pre_bool:
@@ -1767,7 +1787,7 @@
     \bool_if:NT \l__eb_class_book_bool
       { \ifbool{@restonecol}{\twocolumn}{\onecolumn} }
   }
-\RenewDocumentCommand{\tableofcontents}{t+o}
+\RenewDocumentCommand{\tableofcontents}{t+oD(){}}
   {
     \group_begin:
     \tl_set_eq:NN \eb@toc@title \contentsname
@@ -1779,9 +1799,9 @@
     \@starttoc{toc}
     \IfBooleanT{#1}
       {
-        \eb_title_mark_notoc:n { \eb@bitoc@title }
+        #3\eb_title_mark_notoc:n { \eb@bitoc@title }
         \vspace*{\dim_use:N \l__eb_toc_offset_dim}
-        \@starttoc{bitoc}
+        \@starttoc{tec}
       }
     \eb_multoc_post_bool:
     \group_end:
@@ -1854,6 +1874,52 @@
       }
   }
 
+\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@bichapter@number,
+    binmuber .initial:n = \arabic{chapter}
+  }
+\RenewDocumentCommand{\appendix}
+  {O{Appendix\space}D(){\Alph{chapter}}O{}}
+  {
+    \int_compare:nNnTF { \c@chapter } > { 0 }
+      {
+        \ExplSyntaxOn\char_set_catcode_letter:N \@
+        \eb_patch_cmd:Nnn \CTEX@addbitocline
+          {
+            \def\CTEX@prechapter{\CTEX@prebichapter}
+            \def\CTEX@thechapter{\CTEX@bichapter@number}
+            \def\CTEX@postchapter{\CTEX@postbichapter}
+          }
+          {
+            \def\CTEX@prechapter{#1}
+            \def\CTEX@thechapter{#2}
+            \def\CTEX@postchapter{#3}
+          }
+        \ExplSyntaxOff\char_set_catcode_other:N \@
+        \setcounter{chapter}{0}
+        \setcounter{section}{0}
+        \gdef\thechapter{\@Alph\c@chapter}
+        \gdef\CTEX@prechapter{\CTEX@preappendix}
+        \gdef\CTEX@thechapter{\CTEX@appendix@number}
+        \gdef\CTEX@postchapter{\CTEX@postappendix}
+        \gdef\CTEX@chapter@numbering{\CTEX@appendix@numbering}
+      }
+      {
+        \setcounter{section}{0}
+        \setcounter{subsection}{0}
+        \gdef\thesection{\@Alph\c@section}
+        \gdef\CTEX@presection{\CTEX@preappendix}
+        \gdef\CTEX@thesection{\CTEX@appendix@number}
+        \gdef\CTEX@postsection{\CTEX@postappendix}
+        \gdef\CTEX@section@numbering{\CTEX@appendix@numbering}
+        \ctex_set:nn { appendix } { number = \@Alph\c@section,name = { } }
+      }
+  }
+
 \tl_new:N \l__eb_font_table_tl
 \tl_new:N \l__eb_font_figure_tl
 \tl_new:N \l__eb_font_listing_tl
@@ -1924,40 +1990,7 @@
         \eb_arabic:n {#1}
       }
   }
-\cs_gset_protected:Npn \appendix
-  {
-    \int_compare:nNnTF { \c@chapter } > { 0 }
-      {
-        \ExplSyntaxOn\char_set_catcode_letter:N \@
-        \eb_patch_cmd:Nnn \CTEX@addbitocline
-          {
-            chapter/name    = Chapter\space,
-            chapter/number  = \arabic{chapter}
-          }
-          {
-            chapter/name    = Appendix\space,
-            chapter/number  = \alph{chapter}
-          }
-        \ExplSyntaxOff\char_set_catcode_other:N \@
-        \setcounter{chapter}{0}
-        \setcounter{section}{0}
-        \gdef\thechapter{\@Alph\c@chapter}
-        \gdef\CTEX@prechapter{\CTEX@preappendix}
-        \gdef\CTEX@thechapter{\CTEX@appendix@number}
-        \gdef\CTEX@postchapter{\CTEX@postappendix}
-        \gdef\CTEX@chapter@numbering{\CTEX@appendix@numbering}
-      }
-      {
-        \setcounter{section}{0}
-        \setcounter{subsection}{0}
-        \gdef\thesection{\@Alph\c@section}
-        \gdef\CTEX@presection{\CTEX@preappendix}
-        \gdef\CTEX@thesection{\CTEX@appendix@number}
-        \gdef\CTEX@postsection{\CTEX@postappendix}
-        \gdef\CTEX@section@numbering{\CTEX@appendix@numbering}
-        \ctex_set:nn { appendix } { number = \@Alph\c@section,name = { } }
-      }
-  }
+
 \AtBeginEnvironment{tabularx}
   {
     \exp_args:Nx \linespread { \fp_use:N \l__eb_spread_table_fp }
@@ -1994,8 +2027,11 @@
     footnote .initial:n = 1,
     spread-all .meta:n  =
       {
-        line = #1,table = #1,math = #1,
-        caption = #1,footnote = #1
+        line      = #1,
+        table     = #1,
+        math      = #1,
+        caption   = #1,
+        footnote  = #1
       }
   }
 
@@ -2395,7 +2431,10 @@
 
     bib-loadpkg .bool_set:N = \l__eb_bib_loadpkg_bool,
     bib-loadpkg .default:n  = true,
-    bib-loadpkg .initial:n  = true
+    bib-loadpkg .initial:n  = true,
+
+    bitoc-title .tl_set:N   = \l__eb_bib_bitoc_title,
+    bitoc-title .initial:n  = Reference
   }
 
 \cs_new_protected:Npn \EbBibtexSet
@@ -2449,7 +2488,7 @@
     \exp_args:NV \addbibresource \l__eb_bib_file_tl
     \tl_gset:Nn \blx@default@theheading { bibintoc }
     \defbibheading{bibintoc}[\bibname]
-      {\eb_class_title_level_bool:n {##1}}
+      {\eb_biber_title_level_bool:n {##1}}
     \skip_zero:N \bibitemsep
   }
 \eb_at_end_preamble:n
-- 
cgit v1.2.3

