texlive[71062] Master/texmf-dist: easybook (24apr24)

commits+karl at tug.org commits+karl at tug.org
Wed Apr 24 22:19:11 CEST 2024


Revision: 71062
          https://tug.org/svn/texlive?view=revision&revision=71062
Author:   karl
Date:     2024-04-24 22:19:11 +0200 (Wed, 24 Apr 2024)
Log Message:
-----------
easybook (24apr24)

Modified Paths:
--------------
    trunk/Master/texmf-dist/doc/latex/easybook/easybook.pdf
    trunk/Master/texmf-dist/doc/latex/easybook/easybook.tex
    trunk/Master/texmf-dist/source/latex/easybook/easybook.dtx
    trunk/Master/texmf-dist/tex/latex/easybook/easybase.sty
    trunk/Master/texmf-dist/tex/latex/easybook/easybook.cls
    trunk/Master/texmf-dist/tex/latex/easybook/eb-tcolorbox.cfg

Modified: trunk/Master/texmf-dist/doc/latex/easybook/easybook.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/easybook/easybook.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/easybook/easybook.tex	2024-04-24 20:18:23 UTC (rev 71061)
+++ trunk/Master/texmf-dist/doc/latex/easybook/easybook.tex	2024-04-24 20:19:11 UTC (rev 71062)
@@ -23,8 +23,8 @@
     name            = easybook,
     color-scheme    = blue,
     title           = EASYBOOK使用手册,
-    version         = v2024aw,
-    date            = 2024/04/22,
+    version         = v2024az,
+    date            = 2024/04/24,
     authors         = 瞿毅,
     info            = 简便地排版中文学位论文或书籍,
     email           = toquyi at 163.com,
@@ -53,9 +53,12 @@
 \setlist[1]{labelindent = \parindent}
 \setlist[itemize,1]{label = smallbullet,leftmargin = *}
 \setcounter{tocdepth}{2}
-\SetTblrInner[talltblr]{hline{1,Z} = {0.8pt,DarkBlue}}
-\SetTblrTemplate{caption}{empty}
+\SetTblrInner[longtblr]{hline{1,Z} = {1pt,DarkBlue}}
+\SetTblrOuter[longtblr]{presep = \bigskipamount,postsep = \bigskipamount}
+\DefTblrTemplate{caption-tag}{default}{表\thetable}
+\DefTblrTemplate{caption-sep}{default}{\quad}
 \DefTblrTemplate{remark-sep}{default}{\space}
+\SetTblrStyle{caption-tag}{font = \bfseries}
 \SetTblrStyle{remark}{font = \small\normalfont}
 
 \ExplSyntaxOn\makeatletter
@@ -124,14 +127,6 @@
 % Use a separate module margin marker to prevent overlap
 \newcommand{\smodule}[1]{\cnltx at module@text*{\normalsize #1}}
 \newcommand{\noitemsep}{\setlength{\itemsep}{0ex}}
-\newcommand{\insertalltblr}[3][]
-  {
-    \begin{center}
-    \begin{talltblr}[#1]{#2}
-      #3
-    \end{talltblr}
-    \end{center}
-  }
 \renewcommand{\cnltx at package@abstract at width}{0.85\linewidth}
 \renewcommand{\cnltx at write@lastname}{}
 \renewcommand{\cmltx at list@setup}
@@ -158,13 +153,13 @@
     rulecolor       = \color{DarkBlue},
     framerule       = 0.5pt,
     frame           = single,
-    framesep        = 6pt
+    framesep        = 8pt
   }
 \DefineVerbatimEnvironment{frameverb}{Verbatim}
   {
     listparameters =
       {
-        \setlength{\topsep}{\bigskipamount}
+        \setlength{\topsep}{1.2\bigskipamount}
         \appto\FV at EndList{\nointerlineskip}
       }
   }
@@ -173,24 +168,11 @@
     label = \rule{0pt}{12pt}\textnormal{\bfseries 例~\arabic{ctexexam}},
     listparameters =
       {
-        \setlength{\topsep}{\bigskipamount}
+        \setlength{\topsep}{1.2\bigskipamount}
         \appto\FV at EndList{\nointerlineskip}
         \refstepcounter{ctexexam}\ctexexamlabelref
       }
   }
-\newcommand{\cancelitem}
-  {
-    \renewcommand*{\@cnltx at option@one}[2]
-      {
-        ##1{##2}
-        \cnltx at checkdefault{\hfill\newline}
-      }
-    \renewcommand*{\@cnltx at option@two}[3]
-      {
-        ##1{##2}{##3}
-        \cnltx at checkdefault{\hfill\newline}
-      }
-  }
 \newcommand{\optpath}[1]{\item\code{\textcolor{SlateGray}{#1}}}
 \makeatother\ExplSyntaxOff
 \labelformat{section}{节#1}
@@ -197,16 +179,20 @@
 \labelformat{subsection}{小节#1}
 \labelformat{subsubsection}{小节#1}
 \labelformat{ctexexam}{例#1}
+\labelformat{table}{表#1}
 
 \begin{document}
 \section{准备开始}
 您在使用 \easybook{} 文档类编写文档前可能需要具备以下的条件:
 \begin{itemize}
-  \item 使用 \hologo{XeLaTeX}(推荐)或 \hologo{LuaLaTeX} 两种编译方式。
+  \item 使用 \hologo{XeLaTeX}(推荐)或 \hologo{LuaLaTeX} 两种编译方式之一。
   \item 由于文档类用到了一些 \LaTeX 和依赖宏包较新的功能,需要版本至少在\textbf{2021/11/15}以后的 \LaTeX 内核支持。建议您安装最新的 \TeX 发行版。
-  \item 虽然手册对基本用法做了介绍,但这并不是入门教程,所涉及到宏包的用法与命令也需要有了解。您应当具有一定的 \LaTeX 使用基础,可以在 \TeX 综合网站 \href{https://www.ctan.org/}{CTAN} 查看相关资源。
+  \item 虽然手册对基本用法做了介绍,但这并不是入门教程,所涉及到宏包的用法与命令并未进行详细介绍,需要对它们有所了解。您应当具有一定的 \LaTeX 使用基础,可以在 \TeX 综合网站 \href{https://www.ctan.org/}{CTAN} 查看相关资源。
 \end{itemize}
 
+\subsection{前言}
+对于排版外文文档已有诸如 \cls*{KOMA-Script} 和 \cls*{memoir} 等应用广泛的文档类,但这些文档类并不是为中文用户设计的,难免有些水土不符,且用户手册繁杂,对于普通用户来说学习成本高,难以快速上手。中文文档的解决方案 \pkg*{ctex} 宏集解决了中文输出和章节标题格式的设置问题,但在编写文档过程中往往需要更多基本的定制功能,例如目录、图表标题、页眉页脚、脚注和页面边距等,这往往需要额外加载不同功能的宏包。\easybook{} 文档类在 \cls*{ctexbook} 基础上载入了一些使用频率较高且基本稳定的宏包,对它们的功能进行整合并优化联动使用,模块化的改装提供统一的接口兼容 \pkg*{ctex} 文档类,可以满足学术类文档例如中国学位论文模板的基本需求。\easybook{} 提供了与 \CTeX 相同现代化风格的键值设置,支持不同类型的选项与层次化的选项设置。
+
 \subsection{基本用法}
 \label{subsec:basic usage}
 以下一份简单的 \TeX 文档演示了 \easybook{} 的最基本用法,在导言区进行宏包载入与文档设置,一些详细的使用样例会不定期上传在 \href{https://www.latexstudio.net/}{\LaTeX 工作室} 的网站。
@@ -252,24 +238,25 @@
 \ding{72} 需要注意正确\textbf{编译索引}要增加 \code{-shell-escape} 命令行选项。
 
 \subsection{依赖宏包}
-以下为 \pkg*{easybase} 直接调用的关键宏包清单,通常情况下它们是常用且稳定的。\colorbox{PaleTurquoise}{蓝色}背景的宏包表示修改了或依赖它们的内部命令。\colorbox{GreenYellow}{绿色}背景的宏包表示并未调用它们,但做了一些预配置,可在导言区手动载入以实现相关的功能。
-\insertalltblr
+\ref{table:package list} 为 \pkg*{easybase} 直接调用的关键宏包清单,通常情况下它们是常用且稳定的。\colorbox{PaleTurquoise}{蓝色}背景的宏包表示修改了或依赖它们的内部命令。\colorbox{GreenYellow}{绿色}背景的宏包表示并未调用它们,但做了一些预配置,可在导言区手动载入以实现相关的功能。
+\begin{longtblr}
+  [caption = 依赖的宏包清单,label = table:package list]
   {
-    colspec       = *{5}{c},
-    cells = {cmd  = \pkg*},
-    cell{1}{3,4}  = PaleTurquoise,
-    cell{2}{5}    = PaleTurquoise,
-    cell{3}{2,4}  = PaleTurquoise,
-    cell{5}{1}    = GreenYellow,
-    cell{1}{2}    = GreenYellow,
-    cell{3}{1,4}  = GreenYellow
-  }{
-    amsthm & bicaption & ctex & caption & chemformula \\
-    enumitem & etoolbox & fancyhdr & geometry & hyperref \\
-    imakeidx & listings & marginnote & mathtools & multicol \\
-    pifont & pdfpages & siunitx & spbmark & thmtools \\
-    tcolorbox & titletoc & tabularray & ulem &
+  colspec       = *{5}{c},
+  cells = {cmd  = \pkg*},
+  cell{1}{3,4}  = PaleTurquoise,
+  cell{2}{5}    = PaleTurquoise,
+  cell{3}{2,4}  = PaleTurquoise,
+  cell{5}{1}    = GreenYellow,
+  cell{1}{2}    = GreenYellow,
+  cell{3}{1,4}  = GreenYellow
   }
+  amsthm & bicaption & ctex & caption & chemformula \\
+  enumitem & etoolbox & fancyhdr & geometry & hyperref \\
+  imakeidx & listings & marginnote & mathtools & multicol \\
+  pifont & pdfpages & siunitx & spbmark & thmtools \\
+  tcolorbox & titletoc & tabularray & ulem &
+\end{longtblr}
 
 \section{文档类选项}
 \label{sec:document class options}
@@ -292,7 +279,7 @@
   \keychoice{floatpage}{true,\fbox{false}}
   开启这个选项后浮动环境 \env{table} 和 \env{figure} 的比例参数会使用默认值。关闭它则尽可能避免出现浮动页,使图表环境与正文段落更加紧凑,减少多余的空白版面。
   \keychoice{theorem}{\fbox{true},false}
-  是否提供定理功能支持。选项开启时定理样式模块生效,此时会载入 \pkg*{amsthm} 和 \pkg*{thmtools} 宏包。
+  是否提供定理功能支持。选项开启时定理模块生效,此时会载入 \pkg*{amsthm} 和 \pkg*{thmtools} 宏包。
 \end{options}
 
 \subsection{配置字体}
@@ -311,23 +298,26 @@
 
 \begin{options}
   \keychoice{font}{noto,times,times*,ebgaramond,libertine,palatino,\fbox{auto}}\dtag
-  预置的英文字体相关配置方案如下表所示。这些字体已经包含在了 \hologo{TeXLive} 发行版中,所以通常不需要再专门安装。如果您想使用其它英文字体,可以使用 \pkg*{fontspec} 宏包的相关命令进行设置。
-  \insertalltblr[
-      remark{\ding{72}} = \code{times*} 方案为 \textsf{windows} 系统的预置字体。
-    ]{
-      colspec   = @{}*{4}{c}@{},
-      hline{2}  = {0.5pt,DarkBlue},
-      row{1}    = {font = \sffamily},
-      column{1} = {cmd = \code}
-    }{
-    & 正文字体 & 无衬线字体 & 等宽字体 \\
-    noto & Noto Serif & Noto Sans & Noto Sans Mono \\
-    times & XITS & TG Heros & TG Cursor \\
-    times* & Times New Roman & Arial & Courier New \\
-    ebgaramond & EB Garamond & Libertinus Sans & LM Mono \\
-    palatino & TG Pagella & Libertinus Sans & LM Mono \\
-    libertine & Libertinus Serif & Libertinus Sans & LM Mono
-    }
+  预置的英文字体相关配置方案如\ref{table:english font} 所示。这些字体已经包含在了 \hologo{TeXLive} 发行版中,所以通常不需要再专门安装。如果您想使用其它英文字体,可以使用 \pkg*{fontspec} 宏包的相关命令进行设置。
+  \begin{longtblr}
+  [
+  caption = 英文字体预设方案,
+  label = table:english font,
+  remark{\ding{72}} = \code{times*} 方案为 \textsf{windows} 系统的预置字体。
+  ]{
+  colspec   = @{}*{4}{c}@{},
+  hline{2}  = {0.5pt,DarkBlue},
+  row{1}    = {font = \sffamily},
+  column{1} = {cmd = \code}
+  }
+  & 正文字体 & 无衬线字体 & 等宽字体 \\
+  noto & Noto Serif & Noto Sans & Noto Sans Mono \\
+  times & XITS & TG Heros & TG Cursor \\
+  times* & Times New Roman & Arial & Courier New \\
+  ebgaramond & EB Garamond & Libertinus Sans & LM Mono \\
+  palatino & TG Pagella & Libertinus Sans & LM Mono \\
+  libertine & Libertinus Serif & Libertinus Sans & LM Mono
+  \end{longtblr}
 \end{options}
 
 \begin{options}
@@ -349,49 +339,51 @@
 \section{接口选项}
 \label{sec:interface options}
 \begin{commands}
-  \command*{ctexset}[\marg{键值列表}]
-  \easybook{} 扩展了 \CTeX 宏集 \hologo{LaTeX3} 风格键值的通用控制命令 \cs*{ctexset},接口选项同样可用它设置,原有的 \meta{键值列表} 仍然可用。本文档类目前有9个模块用于实现常规的排版功能,如下表所示。模块名也是统一接口 \cs*{ctexset} 的路径,不同模块单独接口的命令名\textbf{加上前缀} \code{eb}:
-  \insertalltblr
+  \command*{ctexset}[\oarg{模块名}\marg{键值列表}]
+  \easybook{} 扩展了 \CTeX 宏集 \hologo{LaTeX3} 风格键值的通用控制命令 \cs*{ctexset},接口选项同样可用它设置,原有的 \meta{键值列表} 仍然可用。本文档类目前有9个模块用于实现常规的排版功能,如\ref{table:module List} 所示。
+  \begin{longtblr}
+  [caption = 模块功能和名称清单,label = table:module List]
   {
-    colspec   = @{}*{5}{c}@{},
-    hline{3}  = {0.5pt,DarkBlue},
-    row{1,3}  = {font = \sffamily,belowsep = 0pt},
-    row{2,4}  = {cmd = \module*}
-  }{
-  \hyperref[subsec:style]{风格} & \hyperref[subsec:other font]{其它字体} & \hyperref[subsec:spacing]{行距} & \hyperref[subsec:hyperlinks]{超链接} & \hyperref[subsec:reference]{参考文献} \\
-  style & subfont & spread & refset & bibset \\
-  \hyperref[subsec:theorem of style]{定理样式} & \hyperref[subsec:page margins]{页面尺寸} & \hyperref[subsec:header and footer]{页眉页脚} & \hyperref[subsec:catalog style]{目录样式} & \\
-  thmset & geoset & hdrset & tocset &
+  colspec   = @{}*{5}{c}@{},
+  hline{3}  = {0.5pt,DarkBlue},
+  row{1,3}  = {font = \sffamily,belowsep = 0pt},
+  row{2,4}  = {cmd = \module*}
   }
+  \hyperref[subsec:tools]{工具} & \hyperref[subsec:font]{字体} & \hyperref[subsec:spread]{行距} & \hyperref[subsec:hyperlinks]{超链接} & \hyperref[subsec:reference]{参考文献} \\
+  tools & font & spread & ref & bib \\
+  \hyperref[subsec:theorem]{定理} & \hyperref[subsec:page margins]{页面尺寸} & \hyperref[subsec:header and footer]{页眉页脚} & \hyperref[subsec:catalog]{目录} & \\
+  thmt & geo & hdr & toc &
+  \end{longtblr}
 
-  例如使用下面\ref{subsec:style} 介绍的风格 \module*{style} 模块,路径名与所属下级选项之间可以 \code{/} 或 \code{=} 号分开,斜线 \code{/} 后不能有空格或者换行:
-  \begin{ctexexam}
+  \ref{exam:kv setting} 使用\ref{subsec:tools} 介绍的工具模块 \module*{tools} 举例三种键值列表设置方式:1. 各 \meta{模块名} 是统一接口 \cs*{ctexset} 的键路径。2. 不同模块还具有单独的接口命令 \cs*{eb}\meta{模块名}\code{\textcolor{cs}{set}}。3. \meta{模块名} 也可以使用  \cs*{ctexset} 命令的可选参数设置。路径名与所属下级选项之间可以 \code{/} 或 \code{=} 号分开,斜线 \code{/} 后不能有空格或者换行。
+  \begin{ctexexam}[labelref = exam:kv setting]
   \ctexset
     {
-      style/color     = seaside,
-      style           =
+      tools/color     = seaside,
+      tools           =
         {
           fntnumwith  = page,
           uppercase   = first
         }
     }
-  \ebstyle{hyphen-figure = {-}}
+  \ctexset[tools]{spcmd = \color{red}}
+  \ebtoolsset{hyphen-figure = {-}}
   \end{ctexexam}
 
-  文档类有三种选项:布尔型 \choicekey*{key}{true,false},选项的值为真 \code{true} 或假 \code{false},如果不指定默认为真。键值型 \key*{key}{value} 需要为选项指定值,后面 \code{=} 号不能省略。选择型 \choicekey*{key}{one,\fbox{two},three} 根据提供的可选值进行设定。
+  \easybook{} 文档类有三种选项:布尔型 \choicekey*{key}{true,false},选项的值为真 \code{true} 或假 \code{false},如果不指定默认为真。键值型 \key*{key}{value} 需要为选项指定值,后面 \code{=} 号不能省略。选择型 \choicekey*{key}{one,\fbox{two},three} 根据提供的可选值进行设定。
 \end{commands}
 
-\subsection[风格]{风格\smodule{style}}
-\label{subsec:style}
+\subsection[工具]{工具\smodule{tools}}
+\label{subsec:tools}
 \begin{options}
   \keychoice{color}{\fbox{none},seaside,energy,cyberpunk}
-  预置了四种颜色主题,默认主题 \code{none} 为黑白页面,颜色主题不包括超链接。
+  \easybook{} 预置了四种颜色主题,默认主题 \code{none} 为黑白页面,颜色主题不包括超链接。
   \begin{commands}
   \command{DeclareThemeColor}[\splitmarg{风格名称,颜色1,颜色2,颜色3}]
   声明新的颜色主题命令。它的参数以英文逗号分隔,第一部分为颜色风格名称,后面三部分为 \code{HTML} 颜色代码,构成主题颜色列表。其中 \meta{颜色1} 为标题标签,\meta{颜色2} 为列表编号、定理标签和公式编号括号,\meta{颜色3} 为代码抄录。类似地更改超链接颜色见\ref{subsec:hyperlinks}。
   \begin{ctexexam}
   \DeclareThemeColor{fancy,2acb25,60aacc,ebc01c}
-  \ctexset{style/color = fancy}
+  \ctexset{tools/color = fancy}
   \end{ctexexam}
   \end{commands}
   \keyval{color-every}{HTML颜色代码}
@@ -408,7 +400,7 @@
   设置行间公式标签的括号及格式,以英文逗号分隔,分别代表左右括号。\meta{左括号} 的末尾可以是带有一个参数的命令,用于接受公式编号。将标签括号设置为方括号,并给编号使用无衬线字体:
   \begin{ctexexam}
   \newcommand{\bracketsf}[1]{[\textsf{#1}}
-  \ebstyle{tagform = {\bracketsf,]}}
+  \ebtoolsset{tagform = {\bracketsf,]}}
   \end{ctexexam}
   \kvsplit-{figurepath}{\marg{路径名1}\marg{路径名2}$\cdots$\marg{路径名n}}
   设置插入图片的文件夹路径名。可以有多个路径名,每个路径包含在花括号内分隔,只有一个路径时需要包含在两层括号内。
@@ -457,9 +449,9 @@
   上下标命令 \cs{supersub} 对应的上下标水平对齐方式,有左 \code{l}、居中 \code{c} 和右 \code{r} 三种对齐方式。
 \end{options}
 
-\subsection[超链接]{超链接\smodule{refset}}
+\subsection[超链接]{超链接\smodule{ref}}
 \label{subsec:hyperlinks}
-模块 \module*{refset} 将超链接选项交给 \pkg*{hyperref} 宏包处理。除了一些超链接颜色的选项失效,其它由宏包全局和接口命令 \cs*{hypersetup} 支持的多数选项可用。
+模块 \module*{ref} 将超链接选项交给 \pkg*{hyperref} 宏包处理。除了一些超链接颜色的选项失效,其它由宏包全局和接口命令 \cs*{hypersetup} 支持的多数选项可用。
 \begin{options}
   \keychoice{linktype}{\fbox{edge},colors,none}
   超链接类型。\code{edge} 使超链接形式为边框,\code{colors} 使超链接字体为彩色,\code{none} 关闭超链接边框与颜色,此时 \option{linkcolor} 选项无效。
@@ -476,7 +468,7 @@
 \end{options}
 
 \subsection[行距]{行距\smodule{spread}}
-\label{subsec:spacing}
+\label{subsec:spread}
 行距因子用于设置各种行距倍数,\meta{数值} 是不带有长度单位的浮点数。各类行距既可以在导言区全局设置,也可以在正文中设置对后面生效。
 \begin{options}
   \keyval{line}{数值}
@@ -494,9 +486,9 @@
   \keyval{caption-every}{数值}\Default{1.2}
   同时设置图片、表格和代码题注的行距因子。
   \keyval{footnote}{数值}\Default{1.2}
-  脚注内容整体的行距因子。可以使用 \module*{hdrset} 模块 \option{fnpara-format} 选项的代码单独覆盖每个脚注的行距,从而使脚注间和内容文本自身的行距不同。
+  脚注内容整体的行距因子。可以使用 \module*{hdr} 模块 \option{fnpara-format} 选项的代码单独覆盖每个脚注的行距,从而使脚注间和内容文本自身的行距不同。
   \begin{ctexexam}
-  \ebspread{footnote = 1.3}
+  \ebspreadset{footnote = 1.3}
   \ebhdrset{fnpara-format = \linespread{1.2}\selectfont}
   \end{ctexexam}
   \keyval{every}{数值}
@@ -507,8 +499,8 @@
   行间公式与下面正文间的额外距离。
 \end{options}
 
-\subsection[其它字体]{其它字体\smodule{subfont}}
-\label{subsec:other font}
+\subsection[其它字体]{其它字体\smodule{font}}
+\label{subsec:font}
 \begin{options}
   \keyval{caption-table}{字体命令}\Default{\cs*{sffamily}\cs*{small}}
   设置表格题注的字体,包括字体族、字体系列、字体尺寸和字体形状命令。
@@ -525,15 +517,15 @@
 \end{options}
 
 \begin{commands}
-  \command{addtosubfont}[\marg{字体类型}\marg{字体命令}]
+  \command{ebaddtofont}[\marg{字体类型}\marg{字体命令}]
   用于在上述各种字体原有的格式上附加代码。其中 \meta{字体命令} 也可以包括行距命令且相对于 \module*{spread} 模块具有优先性,不同题注的 \meta{字体类型} 则为相应选项的后缀名。
   \begin{ctexexam}
-  \addtosubfont{every}{\linespread{1.5}\selectfont}
-  \addtosubfont{footnote}{\sffamily}
+  \ebaddtofont{every}{\linespread{1.5}\selectfont}
+  \ebaddtofont{footnote}{\sffamily}
   \end{ctexexam}
 \end{commands}
 
-\subsection[参考文献]{参考文献\smodule{bibset}}
+\subsection[参考文献]{参考文献\smodule{bib}}
 \label{subsec:reference}
 \begin{options}
   \keychoice{backend}{\fbox{bibtex},biblatex}
@@ -543,7 +535,7 @@
   \keyval{citestyle}{标注风格}
   标注参考文献的风格。后端为 \hologo{BibTeX} 时可使用 \option{super}(数字上标标注,默认)或 \option{numbers}(数字标注)等 \pkg*{natbib} 宏包带有的标注风格,后端为 \hologo{biber} 时可使用 \pkg*{biblatex} 宏包支持的标注风格。
   \keyval{datafile}{数据库列表}
-  参考文献数据库的文件名列表,文件列表以花括号包裹并以英文逗号分隔。使用 \hologo{biber} 处理时文件名要带 \code{bib} 扩展名,若参考文献文件不在当前文件夹则文件名需要包含路径,即 \code{path/file.bib}。不设置参考文献数据库名时 \module*{bibset} 模块中的选项会失效,即不自动载入 \pkg*{natbib} 或 \pkg*{biblatex} 宏包,此时需要手动载入相关宏包配置参考文献。
+  参考文献数据库的文件名列表,文件列表以花括号包裹并以英文逗号分隔。使用 \hologo{biber} 处理时文件名要带 \code{bib} 扩展名,若参考文献文件不在当前文件夹则文件名需要包含路径,即 \code{path/file.bib}。不设置参考文献数据库名时 \module*{bib} 模块中的选项会失效,即不自动载入 \pkg*{natbib} 或 \pkg*{biblatex} 宏包,此时需要手动载入相关宏包配置参考文献。
 \end{options}
 
 \begin{commands}
@@ -576,9 +568,9 @@
   \end{ctexexam}
 \end{options}
 
-\subsection[定理样式]{定理样式\smodule{thmset}}
-\label{subsec:theorem of style}
-模块 \module*{thmset} 由 \pkg*{thmtools} 宏包提供支持,主要提供了定理环境和样式声明两个命令。定理环境声明命令 \cs{declaretheorem} 使用的定理样式由样式声明命令 \cs{declaretheoremstyle} 提供,文档类预置了一个定理样式 \code{default},但未定义任何定理环境。
+\subsection[定理]{定理\smodule{thmt}}
+\label{subsec:theorem}
+定理模块 \module*{thmt} 由 \pkg*{thmtools} 宏包提供支持,主要提供了定理环境和样式声明两个命令。定理环境声明命令 \cs{declaretheorem} 使用的定理样式由样式声明命令 \cs{declaretheoremstyle} 提供,文档类预置了一个定理样式 \code{default},但未定义任何定理环境。
 \begin{commands}
   \command{declaretheorem}[\oarg{键值列表1}\marg{环境名}\oarg{键值列表2}]
   定理环境声明命令。可选参数的 \meta{键值列表1} 与 \meta{键值列表2} 等效,其中常用的选项如下:
@@ -644,9 +636,35 @@
   \end{ctexexam}
 \end{commands}
 
-\subsection[页面尺寸]{页面尺寸\smodule{geoset}}
+\begin{commands}\noitemsep
+  \command{listoftheorems}[\sarg\oarg{键值列表}]\default{}
+  \item\key{listoftheorems}{定理目录标题名}
+  \command{settheoremtocline}[\sarg\marg{环境名}\marg{标题定义}]\newtagv{2024az}%
+  对 \pkg*{thmtools} 宏包的定理环境目录命令 \cs{listoftheorems} 进行了兼容调整,\ref{subsec:directory command} 和\ref{subsec:catalog} 中的选项机制均可用,但标题定义选项 \option{tocline} 较为特殊,需用 \cs{settheoremtocline} 命令单独设置。在 \meta{标题定义} 中有三个命令 \cs{thmtname}、\cs{thmtenvname} 和 \cs{thmtnote} 分别代表定理名、定理环境名和题注用于排版目录条目。
+\end{commands}
+
+\begin{commands}
+  \optpath{thmt/}\key{loeskip}{弹性长度}\Default{10pt}
+  定理目录中每章第一个条目上方增加的垂直距离。与 \CTeX 的表格和图片目录中每章间的条目距离选项 \option*{lotskip} 和 \option*{lofskip} 类似,在 \cls*{article} 模式中此选项失效。
+  \command{thmtifnote}[\marg{存在题注代码}\marg{不存在题注代码}]
+  如果标题没题注即定理环境不用可选参数,则标题不加入定理目录,这是默认且合理的行为。若需要将无题注的标题加入目录可将 \meta{环境名} 加入目录风格的 \option{show} 选项或使用 \cs*{settheoremtocline}\code{*} 命令。是否存在题注需要在 \meta{标题定义} 中使用 \cs{thmtifnote} 命令判定,从而输出不同的内容。
+  \command{thmtifname}[\marg{存在编号代码}\marg{不存在编号代码}]
+  在 \meta{标题定义} 中测试当前定理是否有编号从而输出不同的内容,定理风格选项 \keyis{numbered}{no} 设置当前定理环境没有编号。
+  \begin{ctexexam}
+  \contentsuse{caixiang}{loe}
+  \RegisterTocName{caixiang}
+  \setlisttheoremstyle{ignoreall,show = caixiang}
+  \settheoremtocline{caixiang}
+    {%
+      \listnumberline{caixiang}
+      \thmtname\thmtifnote{[\thmtnote]}{}
+    }
+  \end{ctexexam}
+\end{commands}
+
+\subsection[页面尺寸]{页面尺寸\smodule{geo}}
 \label{subsec:page margins}
-模块 \module*{geoset} 会将选项(除了前两个为附加)交给页面尺寸宏包 \pkg*{geometry} 处理,并且支持它的键值列表,预置的页面尺寸与 \textsf{Word} 的默认值接近。下面列举几种代表性选项,其它选项可查阅宏包帮助文档。当在此设置纸张规格时,会覆盖文类选项 \option{paper} 的设置。
+模块 \module*{geo} 会将选项(除了前两个为附加)交给页面尺寸宏包 \pkg*{geometry} 处理,并且支持它的键值列表,预置的页面尺寸与 \textsf{Word} 的默认值接近。下面列举几种代表性选项,其它选项可查阅宏包帮助文档。当在此设置纸张规格时,会覆盖文类选项 \option{paper} 的设置。
 \begin{options}\noitemsep
   \keyval{headruleskip}{页眉线间距}\Default*{0pt}
   \keyval{footruleskip}{页脚线间距}\Default*{3.5pt}
@@ -665,9 +683,9 @@
   \end{ctexexam}
 \end{options}
 
-\subsection[页眉页脚]{页眉页脚\smodule{hdrset}}
+\subsection[页眉页脚]{页眉页脚\smodule{hdr}}
 \label{subsec:header and footer}
-模块 \module*{hdrset} 设置的命令由 \pkg*{fancyhdr} 宏包提供支持。标题标记由标签和标题组成,选项中参数 \code{\#1} 代表当前章、节或小节的标题。在 \cls*{book} 模式时使用标题标记选项 \option{chap-mark} 和 \option{sec-mark},在 \cls*{article} 模式时使用 \option{sec-mark} 和 \option{subsec-mark} 选项,这与标准文档类的行为一致。重新设置标题标记选项时标记大小写选项 \option{uppercase} 会失效。
+模块 \module*{hdr} 设置的命令由 \pkg*{fancyhdr} 宏包提供支持。标题标记由标签和标题组成,选项中参数 \code{\#1} 代表当前章、节或小节的标题。在 \cls*{book} 模式时使用标题标记选项 \option{chap-mark} 和 \option{sec-mark},在 \cls*{article} 模式时使用 \option{sec-mark} 和 \option{subsec-mark} 选项,这与标准文档类的行为一致。重新设置标题标记选项时标记大小写选项 \option{uppercase} 会失效。
 \begin{options}
   \keyval{chap-mark}{标题标记}
   \code{chapter} 级别标题标记的内容,包含了标签选项 \option{chap-label} 和章标题 \code{\#1}。
@@ -701,6 +719,16 @@
 \end{options}
 
 \begin{commands}\noitemsep
+  \command{fancyhead}[\marg{风格名}\oarg{基础风格}\marg{风格定义}]
+  定义名为 \meta{风格名} 的页面风格。\meta{风格定义} 中可包含设置页眉页脚不同位置格式的命令,如果为空则等于 \code{fancy} 风格。如果存在 \meta{基础风格},则在它的基础上进行定义。
+  \begin{ctexexam}
+  \fancypagestyle{plain}
+    {
+      \fancyhf{}
+      \fancyfoot[C]{\textbf{--~\thepage~--}}
+      \ebhdrset{headrule = {}}
+    }
+  \end{ctexexam}
   \command{fancyhead}[\oarg{位置}\marg{内容}]\default{}
   \command{fancyfoot}[\oarg{位置}\marg{内容}]
   为了确保页面显示正确,使用 \cs{fancyhead} 和 \cs{fancyfoot} 等命令设置页眉页脚时需要在页边距的命令之后。默认设置的是一个名为 \code{fancy} 的页面风格。\pkg*{fancyhdr} 将页眉页脚分成了左中右和奇数页(odd)、偶数页(even)共12个部分,可选参数中 \code{E} 和 \code{O} 代表偶数和奇数,\code{L}、\code{C} 和 \code{R} 代表左、中和右部分。单面打印时,含有偶数位置的命令无效。
@@ -724,8 +752,8 @@
   \end{ctexexam}
 \end{commands}
 
-\subsection[脚注格式]{脚注格式\smodule{hdrset}}
-模块 \module*{hdrset} 还可以灵活调整脚注编号和内容的格式。格式主要包括脚注标记的编号类型、字体、附加符号和对齐方式等,以及脚注内容的首行缩进、行距和字体等。基本思想是提供常规和自定义标记(\code{fncustom})两种脚注,常规脚注的标记分为正文(\code{fnmark})和内容(\code{fntext})标记两种,且两者编号类型分离,自定义脚注的标记与其共享格式。目前脚注模块基本兼容 \pkg*{footmisc} 宏包。
+\subsection[脚注]{脚注\smodule{hdr}}
+模块 \module*{hdr} 还可以灵活调整脚注编号和内容的格式。格式主要包括脚注标记的编号类型、字体、附加符号和对齐方式等,以及脚注内容的首行缩进、行距和字体等。基本思想是提供常规和自定义标记(\code{fncustom})两种脚注,常规脚注的标记分为正文(\code{fnmark})和内容(\code{fntext})标记两种,且两者编号类型分离,自定义脚注的标记与其共享格式。目前脚注模块基本兼容 \pkg*{footmisc} 宏包。
 \begin{options}
   \keychoice{footnotetype}{plain,\fbox{hang},flush,bottom}
   脚注的类型。悬挂缩进 \code{hang} 是默认值,\code{plain} 是原始的类型,\code{flush} 使脚注内容标记位于脚注首行边缘外侧并右对齐。当存在浮动环境排版时,脚注可能位于页面中间,\code{bottom} 使脚注始终位于页面底端。其中 \code{bottom} 是复合选项,可以与前三种类型重复或复合使用:
@@ -817,9 +845,9 @@
   \end{ctexexam}
   \end{commands}
   \keychoice{fnboth-format}{\textcolor{SlateGray}{format code},match}
-  同时设定默认脚注标记 \option{fnmarktext-format} 和自定义脚注标记 \option{fncustom-format} 的格式。两种脚注标记匹配上标格式 \option{spcmd} 的值是独立的,使用 \code{match} 则可以同时匹配。会覆盖 \module*{subfont} 模块脚注字体选项 \option{footnote} 相同类型的命令,最后一个格式命令可以带有一个参数接受脚注标记。
+  同时设定默认脚注标记 \option{fnmarktext-format} 和自定义脚注标记 \option{fncustom-format} 的格式。两种脚注标记匹配上标格式 \option{spcmd} 的值是独立的,使用 \code{match} 则可以同时匹配。会覆盖 \module*{font} 模块脚注字体选项 \option{footnote} 相同类型的命令,最后一个格式命令可以带有一个参数接受脚注标记。
   \keyval{fnpara-format}{格式代码}
-  脚注内容文本的格式。会覆盖 \module*{subfont} 模块脚注字体选项 \option{footnote} 相同类型的命令,最后一个格式命令可以带有一个参数接受脚注内容文本。
+  脚注内容文本的格式。会覆盖 \module*{font} 模块脚注字体选项 \option{footnote} 相同类型的命令,最后一个格式命令可以带有一个参数接受脚注内容文本。
   \kvsplit{fntext-code}{前代码,后代码}
   可以用 \meta{前代码} 与 \meta{后代码} 额外增加脚注内容标记前后的代码。也可以只有前部分,\meta{前代码} 中最后一个格式命令可以带有一个参数接受脚注内容标记。由于脚注标记处于水平模式,可以配合盒子命令设置脚注内容标记的对齐方式,或在标记与脚注首行间插入一点距离。
   \begin{ctexexam}
@@ -831,14 +859,16 @@
   \end{ctexexam}
 \end{options}
 
-\subsection[目录样式]{目录样式\smodule{tocset}}
-\label{subsec:catalog style}
-模块 \module*{tocset} 将使用 \pkg*{titletoc} 宏包处理目录样式。默认包括 \module*{part}、\module*{chapter}、\module*{section}、\module*{subsection}、\module*{figure}、\module*{table} 和 \module*{lstlisting} 条目名的键路径,而使用 \module*{float} 路径可以统一设置图片、表格和代码目录的样式。选项前带有 \ding{73} 符号表示支持所有相应\textbf{条目名}的路径,其它选项则处于 \module*{tocset} 键路径下。目前支持多数学术论文目录样式,更复杂的样式可以查看 \pkg*{titletoc} 的相关用法。
+\subsection[目录]{目录\smodule{toc}}
+\label{subsec:catalog}
+模块 \module*{toc} 将使用 \pkg*{titletoc} 宏包处理目录样式。默认包括 \module*{part}、\module*{chapter}、\module*{section}、\module*{subsection}、\module*{figure}、\module*{table} 和 \module*{lstlisting} 条目名的键路径,而使用 \module*{float} 路径可以统一设置图片、表格和代码目录的样式。选项前带有 \ding{73} 符号表示支持所有相应\textbf{条目名}的路径,其它选项则处于 \module*{toc} 键路径下。目前支持多数学术论文目录样式,更复杂的样式可以查看 \pkg*{titletoc} 的相关用法。
 \begin{options}
   \keyval{tocformat}{条目格式}\dtag
   目录中各类型条目的格式。可以设置条目字体和加入垂直间距等,垂直间距最好使用防止垂直间距重合的 \cs*{addvspace} 命令。如果是段落型目录,格式代码仅在段落中当前级别条目前执行一次。
   \keyval{tocformat+}{条目格式}\dtag
   与选项 \option{tocformat} 用法一样,只是在已有的格式命令后附加代码。
+  \keyval{tocformat*}{条目格式}\dtag
+  没有编号/名字标题的附加格式代码。目录中判断标题是否有编号/名字的依据为:如果在 \option{tocline} 选项中使用了 \cs{numberline} 命令输出标签,则判定为有编号/名字。格式最后的命令可带有一个参数,用于接受标题内容。
   \keyval{tocindent}{刚性长度}\dtag
   目录条目左边的缩进距离,通常标题级别越低缩进越大。如果是段落型目录,仅在当前条目级别为段落中最高时有效。
   \keyval{tocrule}{引导线命令}\dtag
@@ -907,7 +937,7 @@
   \newcommand{\listoffiguretables}{\listoffigures} % 同时输出图表目录的命令
   \end{ctexexam}
   \command{SetTocStyle}[\marg{条目名}\marg{风格名}\marg{键值列表}]
-  定义条目类型名称为 \meta{风格名} 的目录风格。使用 \cs*{ctexset} 命令设置目录样式时,除了条目标题定义选项 \option{tocline},其它选项只有在目录输出命令前设置才有效,定义完目录风格后用 \cs{UseTocStyle} 命令可以在正文中任意位置生效。如果是没有 \ding{73} 符号的选项,\meta{条目名} 设置为 \module*{tocset}。
+  定义条目类型名称为 \meta{风格名} 的目录风格。使用 \cs*{ctexset} 命令设置目录样式时,除了条目标题定义选项 \option{tocline},其它选项只有在目录输出命令前设置才有效,定义完目录风格后用 \cs{UseTocStyle} 命令可以在正文中任意位置生效。如果是没有 \ding{73} 符号的选项,\meta{条目名} 设置为 \module*{toc}。
   \command{UseTocStyle}[\marg{条目名}\marg{风格名}\marg{扩展名}]
   使用对应条目类型名称为 \meta{风格名} 的目录风格,随后标题在目录中的格式会改变。本命令导言区和正文区均可使用,第三个必选参数还需要指定条目标题加入目录文件的 \meta{扩展名}。
   \begin{ctexexam}
@@ -933,7 +963,7 @@
   \keyval{lolskip}{弹性长度}\Default{10pt}
   代码目录中每章第一个条目上方增加的垂直距离。与 \CTeX 的表格和图片目录中每章间的条目距离选项 \option*{lotskip} 和 \option*{lofskip} 类似,在 \cls*{article} 模式中此选项失效。
   \keyval{between}{代码钩子}\dtag[\textcolor{red}{\ding{73}}]
-  目录标题与条目内容间的钩子(作用于标题下方间距之后),如果是 \cls*{book} 模式则默认插入 \code{-10pt} 垂直距离抵消首行目录的额外垂直间距,这是由于图表和 由 \pkg*{newfloat} 宏包所创建环境的目录默认每使用一次章标题在题注目录中插入 \code{10pt} 距离。除了条目名的键路径外,此选项也可用于 \module*{tocset} 路径中,表示章节标题目录标题代码钩子,如果是 \cls*{book} 模式则默认插入 \code{-1pc} 垂直距离。
+  目录标题与条目内容间的钩子(作用于标题下方间距之后),如果是 \cls*{book} 模式则默认插入 \code{-10pt} 垂直距离抵消首行目录的额外垂直间距,这是由于图表和 由 \pkg*{newfloat} 宏包所创建环境的目录默认每使用一次章标题在题注目录中插入 \code{10pt} 距离。除了条目名的键路径外,此选项也可用于 \module*{toc} 路径中,表示章节标题目录标题代码钩子,如果是 \cls*{book} 模式则默认插入 \code{-1pc} 垂直距离。
   \keyval{bibetween}{代码钩子}
   与选项 \option{between} 类似,是英文章节标题目录(如果启用)标题代码钩子。
   \keychoice{dotalign}{\fbox{true},false}
@@ -1032,7 +1062,7 @@
   \end{options}
 \end{commands}
 
-\subsection{双语章节标题与新建标题}
+\subsection{双语章节标题和新建标题}
 双语目录标题命令目前设置了常用的三个级别,它们将中文标题正常输出,并使中英文标题加入双语目录。类似于标准文档类,这三个标题命令分别具有独立的计数器\footnote{默认情况下与普通标题命令共享使用计数器。},并对应 \cs*{the}\meta{计数器} 的值,可以用于 \option{number} 选项更改英文目录中标题的编号格式。这个功能是为国内一些高校的学位论文模板的要求设计,在一般情况和英文模式下\textbf{不需要使用}。
 \begin{commands}
   \command{bichapter}[\sarg\oarg{目录中文标题}\marg{中文标题}\marg{目录英文标题}]
@@ -1042,16 +1072,16 @@
   \command{bisubsection}[\sarg\oarg{目录中文标题}\marg{中文标题}\marg{目录英文标题}]
   \code{subsection} 小节级别的双语目录标题命令,具有独立的 \code{bisubsection} 计数器。
 
-  它们的星号变体命令使文中标题不编号,但是仍然加入双语目录,若英文标题参数空置那么仅加入中文目录而不加入英文目录,这一特点与 \cs*{chapter}\sarg{} 等命令的行为不太一样,在一些情况下会用到。可选参数是目录中的中文条目,默认与中文标题一致,正文标题过长时可用它设置在目录中显示的标题。默认情况下双语目录条目的格式是一致的,共享使用 \module*{tocset} 模块的设置。提供了两个选项 \option{biname} 和 \option{binumber} 修改英文目录章标题条目的名字及编号:
-  \begin{options}\cancelitem
+  它们的星号变体命令使文中标题不编号,但是仍然加入双语目录,若英文标题参数空置那么仅加入中文目录而不加入英文目录,这一特点与 \cs*{chapter}\sarg{} 等命令的行为不太一样,在一些情况下会用到。可选参数是目录中的中文条目,默认与中文标题一致,正文标题过长时可用它设置在目录中显示的标题。默认情况下双语目录条目的格式是一致的,共享使用 \module*{toc} 模块的设置。提供了两个选项 \option{biname} 和 \option{binumber} 修改英文目录章标题条目的名字及编号:
+  \begin{options}
   \optpath{chapter/}\kvsplit+{biname}{英文目录前名字,英文目录后名字}\Default{Chapter\cs*{space}}
   更改英文目录 \code{chapter} 级别的标题条目编号前后名字,类似于 \CTeX 的 \option*{name} 选项。
-  \optpath{chapter/}\keyval{binumber}{英文目录编号输出命令}\Default{\cs*{arabic}\Marg{chapter}}
+  \optpath{chapter/}\key{binumber}{英文目录编号输出命令}\Default{\cs*{arabic}\Marg{chapter}}
   更改英文目录 \code{chapter} 级别的标题条目编号输出格式,类似于 \CTeX 的 \option*{number} 选项。下面两种设置英文目录中章标题编号的方式等效:
   \end{options}
   \begin{ctexexam}
   \ctexset{chapter/binumber = \arabic{chapter}}
-  \BeforeAddBitoc{\ctexset{chapter/nmuber = \arabic{chapter}}}
+  \BeforeAddtoBitoc{\ctexset{chapter/nmuber = \arabic{chapter}}}
   \end{ctexexam}
 \end{commands}
 
@@ -1058,10 +1088,10 @@
 \begin{commands}
   \command{appendix}[\splitoarg{前名字,后名字}\darg{编号输出命令}]
   附录起始命令,其后的章节标题变为附录形式。\meta{前名字} 为英文目录中附录标题的前名字,同理 \meta{后名字} 为英文目录中附录标题的后名字。前后名字之间用一个半角逗号分开,也可以只有一部分,表示英文目录中附录标题前名字。\meta{编号输出命令} 为附录标题计数器在英文目录中的编号命令。注意这两个参数仅对 \code{bichapter} 级别的标题生效。
-  \command{BeforeAddBitoc}[\sarg\marg{英文标题加入目录前的代码}]
+  \command{BeforeAddtoBitoc}[\sarg\marg{英文标题加入目录前的代码}]
   作用于局部范围的英文目录标题条目钩子,代码在标题加入目录前执行,可以插入条目标题定义命令临时改变英文目录中条目的格式,带有星号参数的命令会重置之前的代码。这个命令设置英文目录条目的标题格式具有最高优先级,放置在导言区或 \cs{bichapter} 等双语标题命令前生效。举一个在英文目录节标题条目编号前添加 \code{Section} 字符串的例子:
   \begin{ctexexam}
-  \BeforeAddBitoc{\ctexset{section/name = Section\space}}
+  \BeforeAddtoBitoc{\ctexset{section/name = Section\space}}
   \bisection{中文标题}{English title}
   \end{ctexexam}
 \end{commands}
@@ -1082,7 +1112,7 @@
   \end{ctexexam}
 \end{commands}
 
-\subsection[上标和下标]{上标和下标\smodule{style}}
+\subsection[上标和下标]{上标和下标\smodule{tools}}
 上标和下标的功能来自 \pkg*{spbmark} 宏包,下面有三个命令可以用于输出上标和下标。可以使用键值列表的形式对上下标格式进行局部或全局设置,下面命令中两个可选参数的键值列表是等效的。全局设置的详情见\ref{subsubsec:super-sub-script},更多命令和详细用法见 \pkg*{spbmark} 宏包说明文档。
 \begin{commands}
   \command{super}[\sarg\oarg{键值列表1}\marg{内容}\oarg{键值列表2}]
@@ -1274,9 +1304,10 @@
 \section{扩展功能}
 
 \subsection{物理量}
+使用 \pkg*{siunitx} 宏包提供国际单位制的物理量支持。\pkg*{siunitx} 宏包旨在为 \LaTeX 用户提供一种统一的方法,以便正确、轻松地排版数字和单位。\pkg*{siunitx} 的设计理念是默认遵循约定的规则,但允许通过选项设置进行更改。
 \begin{commands}
   \command{num}[\oarg{键值列表}\marg{数字}]
-  \pkg*{siunitx} 宏包的 \cs{num} 命令可以输出以科学计数法表示的数值。
+  \cs{num} 命令可以输出以科学计数法表示的数值。
   \command{unit}[\oarg{键值列表}\marg{单位}]
   单位格式化命令 \cs{unit} 包含文字元素(例如字母或数字)时,使用 \Marg{.} 和 \code{\~{}} 放置在单元乘积中间,并使用 \code{\_{}} 和 \code{\^{}} 正确放置指定的下标和上标。格式化方法可在数学和文本模式下使用。
   \command{qty}[\oarg{键值列表}\marg{数字}\oarg{前缀}\marg{单位}]
@@ -1292,9 +1323,10 @@
 \end{commands}
 
 \subsection{化学式}
+除了以普通公式的方式,化学式的输出还可用 \pkg*{chemformula} 宏包实现。\pkg*{chemformula} 的工作原理与 \pkg*{mhchem} 非常相似,但对化合物、化学计量数和箭头的输入方式更为严格。同时 \pkg*{chemformula} 提供了多种自定义输出的可能性。
 \begin{commands}
   \command{ch}[\oarg{键值列表}\marg{化学式}]
-  除了以普通公式的方式,化学式还可用 \pkg*{chemformula} 实现。无机化学式使用 \cs{ch} 命令书写。化合物表达式中的原子数不需要加下标符号,化学计量数与表达式间隔一个空格。
+  无机化学式使用 \cs{ch} 命令书写。化合物表达式中的原子数不需要加下标符号,化学计量数与表达式间隔一个空格。
   \begin{ctexexam}
   \ch{[Cu(NH3)4]^2+}
   \ch{Cu2S + 2 O2 - 2 e^- == 2 Cu^2+ + SO4^2-}
@@ -1331,6 +1363,7 @@
 \end{commands}
 
 \subsection{图表题注}
+\pkg*{caption} 宏包提供了多种方法来定制浮动环境(例如 \env{figure} 和 \env{table})中的标题,并可与许多其它宏包配合使用。功能包括旋转题注、侧向题注和连续题注等。
 \begin{commands}
   \command{captionsetup}[\oarg{条目名}\marg{键值列表}]
   这是 \pkg*{caption} 宏包的接口命令,\meta{键值列表} 提供多个选项更改图表题注的格式。题注主要由三部分组成:标题标签即图表名与题注编号的组合,标题文本本身通常是内容的简短描述,以及将文本与标签分开的题注分隔符。可以在导言区设置整体格式,也可以在正文使用局部更改格式。
@@ -1346,7 +1379,7 @@
 \subsection{索引}
 \begin{commands}
   \command{indexsetup}[\marg{键值列表}]
-  \pkg*{imakeidx} 宏包增强了索引的功能。这是它的的接口命令,用于设置索引表的整体格式。
+  \pkg*{imakeidx} 宏包增强了索引的功能,可使用户在制作和排版文档的同时制作一个或多个索引。这是 \pkg*{imakeidx} 宏包的接口命令,用于设置索引表的整体格式。
   \command{index}[\oarg{索引名}\marg{标签}]
   索引标签命令的可选参数可以用不同的 \meta{索引名} 给多个索引表设置标签。
   \command{makeindex}[\oarg{键值列表}]
@@ -1476,6 +1509,7 @@
   \item 新增段落型目录条目附加代码的选项 \option{tocbegin}、\option{tocsep} 和 \option{tocend}。
   \end{version}
   \shortversion{v = 2024aw,date = 2022/04/22,changes = 新增新建章节标题命令 \cs{NewTitleCommand} 和 \cs{NewTitleEntryCommand}。}
+  \shortversion{v = 2024az,date = 2022/04/24,changes = 增加对 \pkg*{thmtools} 宏包定理环境目录 \cs{listoftheorems} 的支持。}
 \end{changelog}
 \nocite{*}
 

Modified: trunk/Master/texmf-dist/source/latex/easybook/easybook.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/easybook/easybook.dtx	2024-04-24 20:18:23 UTC (rev 71061)
+++ trunk/Master/texmf-dist/source/latex/easybook/easybook.dtx	2024-04-24 20:19:11 UTC (rev 71062)
@@ -15,7 +15,7 @@
 %<*class>
 \NeedsTeXFormat{LaTeX2e}[2021/11/15]
 \RequirePackage{l3keys2e}
-\ProvidesExplClass{easybook}{2024/04/22}{2024aw}
+\ProvidesExplClass{easybook}{2024/04/24}{2024az}
   {Easily typesetting Chinese theses or books}
 
 \bool_new:N \l__eb_compile_draft_bool
@@ -297,7 +297,7 @@
 %<*package>
 \NeedsTeXFormat{LaTeX2e}[2021/11/15]
 \RequirePackage{l3keys2e,etoolbox}
-\ProvidesExplPackage{easybase}{2024/04/22}{2024aw}
+\ProvidesExplPackage{easybase}{2024/04/24}{2024az}
   {Easily typesetting Chinese theses or books}
 
 \cs_generate_variant:Nn \dim_set:Nn { NV }
@@ -310,6 +310,7 @@
 \cs_generate_variant:Nn \ctex_define:nn { nx }
 \cs_generate_variant:Nn \eb_set_hyperref:n { x }
 \cs_generate_variant:Nn \eb_at_begin_environment:nn { on }
+\cs_generate_variant:Nn \tl_if_novalue:nF { V }
 
 \cs_set_protected:Npn \ctex_define:nn #1
   { \keys_define:nn { ctex/#1 } }
@@ -373,7 +374,7 @@
       {\IfFileExists{#2.sty}{\RequirePackage{#2}[#3]}{}}
       {\IfFileExists{#2.sty}{\RequirePackage[#1]{#2}[#3]}{}}
   }
-\cs_new_protected:Npn \LoadPackage #1
+\cs_new_protected:Npn \ebloadpackage #1
   {
     \int_compare:nTF { \clist_count:n {#1} <= 1 }
       { \RequirePackage }
@@ -433,15 +434,21 @@
 
 \seq_set_from_clist:Nn \l__eb_module_paths_seq
   {
-    style,subfont,spread,
-    bibset,thmset,tocset,
-    hdrset,refset,geoset,float
+    tools,font,spread,
+    bib,thmt,toc,
+    hdr,ref,geo,float
   }
 \seq_map_inline:Nn \l__eb_module_paths_seq
   {
     \ctex_define:n { #1 .meta:nn = { ctex/#1 } {##1} }
-    \cs_new_protected:cpn { eb#1 } ##1 { \ctex_set:nn {#1} {##1} }
+    \cs_new_protected:cpn { eb#1set } ##1 { \ctex_set:nn {#1} {##1} }
   }
+\RenewDocumentCommand{\ctexset}{om}
+  {
+    \IfValueTF{#1}
+      {\ctex_set:nn {#1} {#2}}
+      {\ctex_set:n {#2}}
+  }
 \bool_until_do:nn
   { \int_compare_p:nNn { \seq_count:N \l__eb_module_paths_seq } < { 8 } }
   { \seq_pop_right:NN \l__eb_module_paths_seq \l_tmpa_tl }
@@ -481,7 +488,7 @@
     The~'\string\chapter'\ command~will~not~be~used.
   }
 
-\LoadPackage
+\ebloadpackage
   {
     [text]{spbmark},
     [normalem]{ulem},
@@ -525,7 +532,7 @@
         \eb at tag@brackets at right
       }
   }
-\ctex_define:nn { style }
+\ctex_define:nn { tools }
   {
     multoc .int_set:N     = \l__eb_toc_columns_int,
     multoc .default:n     = 2,
@@ -554,20 +561,20 @@
     marginparsep    = 8pt,
     marginparwidth  = 2.54cm
   }
-\ctex_define:nn { geoset }
+\cs_new:Npn \eb_unknown_kv_handle:
   {
+    \str_use:N \l_keys_key_str
+    \tl_if_novalue:VF \l_keys_value_tl
+      { = {\exp_not:V \l_keys_value_tl} }
+  }
+\ctex_define:nn { geo }
+  {
     headruleskip .tl_set:N  = \headruleskip,
     headruleskip .initial:n = 0pt,
     footruleskip .tl_set:N  = \footruleskip,
     footruleskip .initial:n = 3.5pt,
-    unknown .code:n         =
-      {
-        \exp_args:Nx \geometry
-          {
-            \str_use:N \l_keys_key_str
-            \tl_if_empty:NF \l_keys_value_tl { = \exp_not:n { {#1} } }
-          }
-      }
+    unknown .code:n = \exp_args:Nx \geometry { \eb_unknown_kv_handle: },
+    unknown .default:V      = \c_novalue_tl
   }
 
 \cs_new_protected:Npn \blankpagestyle #1
@@ -628,7 +635,7 @@
         { none* } { \text_lowercase:n }
       }
   }
-\ctex_define:nn { hdrset }
+\ctex_define:nn { hdr }
   {
     chap-mark .cs_set:Np      = \eb at mark@chapter at whole #1,
     chap-mark .initial:n      =
@@ -710,7 +717,7 @@
     \providecommand{\kaishu}{\itshape}
   }
 
-\ctex_define:nn { style }
+\ctex_define:nn { tools }
   {
     fntnumwith .choices:nn        =
       { part,page,chapter }
@@ -866,7 +873,7 @@
 \tl_new:N \l__eb_fnmarktext_format_tl
 \tl_new:N \l__eb_fncustom_format_tl
 \clist_new:N \l__eb_footnote_value_clist
-\ctex_define:nn { hdrset }
+\ctex_define:nn { hdr }
   {
     fnfirstindent .tl_set:N         = \fnfirstindent,
     fnfirstindent .initial:n        = 1em,
@@ -907,7 +914,7 @@
     fntext-num/unknown .code:n = \eb_fnmarktext_short_label_set:Nn \thefootnote {#1},
     fnmarktext-num .meta:n = { fntext-num = #1,fnmark-num = #1 },
     fnmarktext-num .initial:n       = plain,
-    unknown .code:n                 = \eb_msg_deprecated_option:n { hdrset }
+    unknown .code:n                 = \eb_msg_deprecated_option:n { hdr }
   }
 
 \eb_at_end_preamble:n
@@ -1033,7 +1040,7 @@
       { \reset at font }
       {
         \setspread{\eb at spread@footnote}
-        \eb at subfont@footnote
+        \eb at font@footnote
       }
   }
 \cs_set_eq:NN \eb@@makefntext \@makefntext
@@ -1150,7 +1157,7 @@
           { \tl_clear:N \l__eb_fnmarktext_format_tl }
       }
     \bool_if:NF \l__eb_fnmarktext_format_match_bool { \spbset{spcmd = { }} }
-    \eb at subfont@footnote
+    \eb at font@footnote
   }
 \cs_new_protected:Npn \defupfntmark #1
   { \cs_set:Npn \@makefnmark { \hbox:n {#1} } }
@@ -1241,7 +1248,7 @@
         \@addtoreset{#3}{#5}
         \IfBooleanF{#1}
           {
-            \exp_args:Nc \cs_gset:Npn { the#3 }
+            \cs_gset:cpn { the#3 }
               { \use:c { the#5 }#4#2{#3} }
           }
       }
@@ -1255,13 +1262,14 @@
 \cs_set:Npn \thebisection { \eb_section_counter_prefix:n { bi } }
 \cs_set:Npn \thebisubsection { \thebisection.\@arabic\c at bisubsection }
 \cs_set:Npn \thesection { \eb_section_counter_prefix:n { } }
-\tl_new:N \eb at before@addbitoc at hook
-\NewDocumentCommand{\BeforeAddBitoc}{sm}
+\tl_new:N \eb at before@bitocline at hook
+\NewDocumentCommand{\BeforeAddtoBitoc}{sm}
   {
     \IfBooleanTF{#1}
-      {\tl_gset:Nn \eb at before@addbitoc at hook {#2}}
-      {\tl_gput_right:Nn \eb at before@addbitoc at hook {#2}}
+      {\tl_gset:Nn \eb at before@bitocline at hook {#2}}
+      {\tl_gput_right:Nn \eb at before@bitocline at hook {#2}}
   }
+\cs_set_eq:NN \BeforeAddBitoc \BeforeAddtoBitoc
 \cs_new_protected:Npn \CTEX at addbitocline #1#2
   {
     \group_begin:
@@ -1268,7 +1276,7 @@
     \def\CTEX at prechapter{\CTEX at prebichapter}
     \def\CTEX at thechapter{\CTEX at bichapter@number}
     \def\CTEX at postchapter{\CTEX at postbichapter}
-    \eb at before@addbitoc at hook
+    \eb at before@bitocline at hook
     \tl_if_eq:NnTF \g__eb_bilist_permute_value_tl { mix }
       { \addcontentsline{toc}{#1} }
       { \addcontentsline{tec}{#1} }
@@ -1332,7 +1340,7 @@
       }
   }
 
-\ctex_define:nn { style }
+\ctex_define:nn { tools }
   {
     hyphen-figure .tl_set:N   = \l__eb_hyphen_figure_tl,
     hyphen-table .tl_set:N    = \l__eb_hyphen_table_tl,
@@ -1344,7 +1352,7 @@
         hyphen-listing = #1,hyphen-equation = #1
       },
     hyphen-every .initial:n   = .,
-    unknown .code:n           = \eb_msg_deprecated_option:n { style }
+    unknown .code:n           = \eb_msg_deprecated_option:n { tools }
   }
 \eb_seq_map_inline:nn
   { figure,table,lstlisting,equation }
@@ -1559,6 +1567,7 @@
         #1/tocformat .tl_set:c  = l__eb_toc_#1_format_tl,
         #1/tocformat+ .code:n   = \tl_put_right:cn { l__eb_toc_#1_format_tl } {##1},
         #1/tocformat~+ .code:n  = \tl_put_right:cn { l__eb_toc_#1_format_tl } {##1},
+        #1/tocformat* .tl_set:c = l__eb_toc_#1_entry_nolabel_tl,
         #1/tocindent .tl_set:c  = l__eb_toc_#1_indent_tl,
         #1/toclabel .cs_set:cp  = { eb_toc_entry_#1:nnn } ##1##2##3,
         #1/tocrule .tl_set:c    = l__eb_toc_#1_rule_tl,
@@ -1584,7 +1593,8 @@
             {#2}
             [\tl_use:c { l__eb_toc_#2_indent_tl }]
             {\tl_use:c { l__eb_toc_#2_format_tl }}
-            {\use:c { eb_toc_entry_#2:nnn } { \thecontentslabel } {#2} {#1}}{}
+            {\use:c { eb_toc_entry_#2:nnn } { \thecontentslabel } {#2} {#1}}
+            {\tl_use:c { l__eb_toc_#2_entry_nolabel_tl }}
             {\tl_use:c { l__eb_toc_#2_rule_tl }}
             [\tl_use:c { l__eb_toc_#2_below_tl }]
           }
@@ -1611,7 +1621,7 @@
   {
     \IfBooleanT{#1}
       {
-        \ctex_set:nn { tocset } { between = { },bibetween = { } }
+        \ctex_set:nn { toc } { between = { },bibetween = { } }
         \tl_set:Nn \l__eb_toc_tmpa_tl {*}
         \tl_set:Nn \l__eb_toc_tmpb_tl
           {
@@ -1644,7 +1654,7 @@
 \eb_seq_map_inline:nn
   { tocafter,tocindent,tocrule }
   {
-    \ctex_define:nn { tocset }
+    \ctex_define:nn { toc }
       {
         #1-every .code:n    =
           {
@@ -1657,7 +1667,7 @@
           }
       }
   }
-\ctex_define:nn { tocset }
+\ctex_define:nn { toc }
   {
     lolskip .skip_set:N   = \eb at toc@lol at skip,
     lolskip .initial:n    = 10pt,
@@ -1673,7 +1683,7 @@
     hang .initial:n       = true,
     pagenumwd .code:n     = \contentsmargin{#1},
     pagenumwd .initial:n  = 1.55em,
-    unknown .code:n       = \eb_msg_deprecated_option:n { tocset }
+    unknown .code:n       = \eb_msg_deprecated_option:n { toc }
   }
 \NewDocumentCommand{\tocrule}{st-O{0.7pc}d()mO{}}
   {
@@ -1769,7 +1779,7 @@
     \ctex_assign_heading_name:nn { biappendix } {#1}
     \bool_if:NTF \l__eb_class_mode_book_bool
       {
-        \eb_preto_cmd:nn { eb at before@addbitoc at hook }
+        \eb_preto_cmd:nn { eb at before@bitocline at hook }
           {
             \def\CTEX at prechapter{\CTEX at prebiappendix}
             \def\CTEX at thechapter{#2}
@@ -1795,11 +1805,11 @@
       }
   }
 
-\ctex_define:nn { subfont }
+\ctex_define:nn { font }
   {
-    caption-table .tl_set:N   = \l__eb_subfont_caption_table_tl,
-    caption-figure .tl_set:N  = \l__eb_subfont_caption_figure_tl,
-    caption-listing .tl_set:N = \l__eb_subfont_caption_listing_tl,
+    caption-table .tl_set:N   = \l__eb_font_caption_table_tl,
+    caption-figure .tl_set:N  = \l__eb_font_caption_figure_tl,
+    caption-listing .tl_set:N = \l__eb_font_caption_listing_tl,
     caption-every .meta:n     =
       {
         caption-table   = #1,caption-figure = #1,
@@ -1806,29 +1816,29 @@
         caption-listing = #1
       },
     caption-every .initial:n  = \sffamily\small,
-    footnote .tl_set:N        = \eb at subfont@footnote,
+    footnote .tl_set:N        = \eb at font@footnote,
     marginpar .tl_set:N       = \marginfont,
     marginpar .initial:n      = \footnotesize,
-    unknown .code:n           = \eb_msg_deprecated_option:n { subfont }
+    unknown .code:n           = \eb_msg_deprecated_option:n { font }
   }
-\cs_new_protected:Npn \addtosubfont #1#2
+\cs_new_protected:Npn \ebaddtofont #1#2
   {
     \str_case:nnF {#1}
       {
         { table }
-        { \tl_put_right:Nn \l__eb_subfont_caption_table_tl {#2} }
+        { \tl_put_right:Nn \l__eb_font_caption_table_tl {#2} }
         { figure }
-        { \tl_put_right:Nn \l__eb_subfont_caption_figure_tl {#2} }
+        { \tl_put_right:Nn \l__eb_font_caption_figure_tl {#2} }
         { listing }
-        { \tl_put_right:Nn \l__eb_subfont_caption_listing_tl {#2} }
+        { \tl_put_right:Nn \l__eb_font_caption_listing_tl {#2} }
         { every }
         {
-          \tl_put_right:Nn \l__eb_subfont_caption_table_tl {#2}
-          \tl_put_right:Nn \l__eb_subfont_caption_figure_tl {#2}
-          \tl_put_right:Nn \l__eb_subfont_caption_listing_tl {#2}
+          \tl_put_right:Nn \l__eb_font_caption_table_tl {#2}
+          \tl_put_right:Nn \l__eb_font_caption_figure_tl {#2}
+          \tl_put_right:Nn \l__eb_font_caption_listing_tl {#2}
         }
       }
-      { \tl_put_right:cn { l__eb_subfont_#1_tl } {#2} }
+      { \tl_put_right:cn { l__eb_font_#1_tl } {#2} }
   }
 \ctex_define:nn { spread }
   {
@@ -1890,7 +1900,7 @@
     \DeclareCaptionFont{eb@#1 at font}
       {
         \setspread{\fp_use:c { l__eb_spread_caption_#1_fp }}
-        \tl_use:c { l__eb_subfont_caption_#1_tl }
+        \tl_use:c { l__eb_font_caption_#1_tl }
       }
   }
 \captionsetup
@@ -1973,7 +1983,7 @@
 \SetEnumitemValue{ref}{enumii}{\arabic{enumi}.\alph*}
 \SetEnumitemValue{ref}{enumiii}{\arabic{enumi}.\alph{enumii}.\roman*}
 \setlist{nosep,labelsep = 0.5em,listparindent = \parindent}
-\setlist[1]{leftmargin = *,align = left,mode = unboxed}
+\setlist[1]{leftmargin = *,align = left}
 \setlist[itemize,1]{label = bullet}
 \setlist[itemize,2]{label = endash}
 \setlist[itemize,3]{label = asterisk}
@@ -2068,8 +2078,12 @@
     \cs_set_eq:NN \eb at declaretheoremsyle@save \declaretheoremstyle
     \RenewDocumentCommand{\declaretheoremstyle}{O{}mO{}}
       {\eb at declaretheoremsyle@save[#1,#3]{#2}}
-    \ctex_define:nn { thmset }
-      { unknown .code:n = \eb_msg_deprecated_option:n { thmset } }
+    \ctex_define:nn { thmt }
+      {
+        loeskip .skip_set:N = \eb at thmt@loe at skip,
+        loeskip .initial:n  = 10pt,
+        unknown .code:n     = \eb_msg_deprecated_option:n { thmt }
+      }
     \declaretheoremstyle{default}[
       spaceabove    = 0ex plus .1ex,
       spacebelow    = 0ex plus .1ex,
@@ -2082,6 +2096,35 @@
       ]
     \theoremstyle{default}
     \cs_undefine:N \proof
+    \DeclareFloatList{theorem}{loe}
+    \eb_preto_cmd:nn { listoftheorems }
+      {
+        \group_begin:
+        \def\contentsline #1 {\use:c { thmt at contentsline@#1 }{#1}}
+      }
+    \eb_appto_cmd:nn { listoftheorems } { \group_end: }
+    \eb_preto_cmd:nn { @chapter }
+      {
+        \skip_if_eq:nnF { \eb at thmt@loe at skip } { \c_zero_skip }
+          { \addtocontents{loe}{\protect\addvspace{\skip_use:N \eb at thmt@loe at skip}} }
+      }
+    \def\thmtlo at chaptervspacehack{}
+    \def\thmtname{\thmt at thmname}
+    \def\thmtenvname{\thmt at envname}
+    \def\thmtnote{\thmt at shortoptarg}
+    \def\thmtformatoptarg #1 {#1}
+    \def\thmtifname #1#2 {\ifbool{thmt at isstarred}{#2}{#1}}
+    \def\thmtifnote #1#2
+      {
+        \tl_if_empty:NTF \thmt at shortoptarg
+          {#2}
+          { \protect\thmtformatoptarg{#1} }
+      }
+    \NewDocumentCommand{\settheoremtocline}{smm}
+      {
+        \IfBooleanT{#1}{\def\thmt at contentslineIgnore{\thmt at contentsline}}
+        \cs_set:cpn { ll@#2 } {#3}
+      }
   }
 
 \setchemformula
@@ -2132,7 +2175,7 @@
   { \file_if_exist_input:n { eb-tcolorbox.cfg } }
 
 \bool_set_true:N \l__eb_backend_bibtex_bool
-\ctex_define:nn { bibset }
+\ctex_define:nn { bib }
   {
     backend .choice:,
     backend .value_required:n = true,
@@ -2144,7 +2187,7 @@
     datafile .clist_set:N     = \l__eb_bib_datafile_clist,
     bititle .tl_set:N         = \eb at bib@bitoc at title,
     bititle .initial:n        = Bibliography,
-    unknown .code:n           = \eb_msg_deprecated_option:n { bibset }
+    unknown .code:n           = \eb_msg_deprecated_option:n { bib }
   }
 
 \cs_new_protected:Npn \eb_bibtex_natbib_set:
@@ -2273,9 +2316,9 @@
 \cs_new_protected:Npn \eb_define_theme_color:n #1
   { \definecolorset{HTML}{ctex@}{}{frame,#1;emph,#1;verb,#1} }
 \cs_new_protected:Npn \DeclareLinkColor #1
-  { \ctex_define:nx { refset } { \eb_link_color_set:n {#1} } }
+  { \ctex_define:nx { ref } { \eb_link_color_set:n {#1} } }
 \cs_new_protected:Npn \DeclareThemeColor #1
-  { \ctex_define:nx { style } { \eb_theme_color_set:n {#1} } }
+  { \ctex_define:nx { tools } { \eb_theme_color_set:n {#1} } }
 \cs_new_protected:Npn \eb_color_assign_cmd_set:nn #1#2
   {
     \cs_new:cpn { eb_#2_color_set:n } ##1
@@ -2295,7 +2338,7 @@
     { color } { theme }
   }
   { \eb_color_assign_cmd_set:nn #1 }
-\ctex_define:nx { refset }
+\ctex_define:nx { ref }
   {
     linkcolor .choice:,
     linkcolor .value_required:n = true,
@@ -2310,7 +2353,7 @@
     linkcolor .initial:n    = navyblue,
     linkcolor-every .code:n = \eb_define_link_color:n { \exp_not:n {#1} }
   }
-\ctex_define:nx { style }
+\ctex_define:nx { tools }
   {
     color .choice:,
     color .value_required:n = true,
@@ -2340,7 +2383,7 @@
   { \eb_set_hyperref:n { colorlinks } }
 \cs_new_protected:Npn \eb_link_toc_put:n #1
   { \eb_set_hyperref:n { linktoc = #1 } }
-\ctex_define:nn { refset }
+\ctex_define:nn { ref }
   {
     linktype .choice:,
     linktype .value_required:n  = true,
@@ -2353,14 +2396,8 @@
     linktoc .value_required:n   = true,
     linktoc/unknown .code:n     = \eb_link_toc_put:n {#1},
     linktoc .initial:n          = all,
-    unknown .code:n             =
-      {
-        \eb_set_hyperref:x
-          {
-            \str_use:N \l_keys_key_str
-            \tl_if_empty:NF \l_keys_value_tl { = \exp_not:n { {#1} } }
-          }
-      }
+    unknown .code:n = \eb_set_hyperref:x { \eb_unknown_kv_handle: },
+    unknown .default:V          = \c_novalue_tl
   }
 
 \cs_new_protected:Npn \eb_allow_url_break:
@@ -2418,7 +2455,8 @@
 \ctex_define:n
   {
     lstlistlistingname .tl_set:N  = \listlstlistingname,
-    lstlistingname .tl_set:N      = \lstlistingname
+    lstlistingname .tl_set:N      = \lstlistingname,
+    listtheoremname .tl_set:N     = \listtheoremname
   }
 \tl_if_eq:NnTF \l__ctex_scheme_tl { chinese }
   {
@@ -2428,7 +2466,8 @@
         listfigurename      = 插图清单,
         listtablename       = 附表清单,
         lstlistlistingname  = 代码清单,
-        lstlistingname      = 代码
+        lstlistingname      = 代码,
+        listtheoremname     = 定理清单
       }
   }
   {
@@ -2440,7 +2479,7 @@
   }
 %</package>
 %<*tcolorbox>
-\ProvidesExplFile{eb-tcolorbox.cfg}{2024/04/22}{2024aw}
+\ProvidesExplFile{eb-tcolorbox.cfg}{2024/04/24}{2024az}
   {Customization of tcolorbox for easybook}
 
 \cs_set_protected:Npn \addtotcbstyle #1#2

Modified: trunk/Master/texmf-dist/tex/latex/easybook/easybase.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/easybook/easybase.sty	2024-04-24 20:18:23 UTC (rev 71061)
+++ trunk/Master/texmf-dist/tex/latex/easybook/easybase.sty	2024-04-24 20:19:11 UTC (rev 71062)
@@ -20,7 +20,7 @@
 %% This work has the LPPL maintenance status `maintained'.
 \NeedsTeXFormat{LaTeX2e}[2021/11/15]
 \RequirePackage{l3keys2e,etoolbox}
-\ProvidesExplPackage{easybase}{2024/04/22}{2024aw}
+\ProvidesExplPackage{easybase}{2024/04/24}{2024az}
   {Easily typesetting Chinese theses or books}
 
 \cs_generate_variant:Nn \dim_set:Nn { NV }
@@ -33,6 +33,7 @@
 \cs_generate_variant:Nn \ctex_define:nn { nx }
 \cs_generate_variant:Nn \eb_set_hyperref:n { x }
 \cs_generate_variant:Nn \eb_at_begin_environment:nn { on }
+\cs_generate_variant:Nn \tl_if_novalue:nF { V }
 
 \cs_set_protected:Npn \ctex_define:nn #1
   { \keys_define:nn { ctex/#1 } }
@@ -96,7 +97,7 @@
       {\IfFileExists{#2.sty}{\RequirePackage{#2}[#3]}{}}
       {\IfFileExists{#2.sty}{\RequirePackage[#1]{#2}[#3]}{}}
   }
-\cs_new_protected:Npn \LoadPackage #1
+\cs_new_protected:Npn \ebloadpackage #1
   {
     \int_compare:nTF { \clist_count:n {#1} <= 1 }
       { \RequirePackage }
@@ -156,15 +157,21 @@
 
 \seq_set_from_clist:Nn \l__eb_module_paths_seq
   {
-    style,subfont,spread,
-    bibset,thmset,tocset,
-    hdrset,refset,geoset,float
+    tools,font,spread,
+    bib,thmt,toc,
+    hdr,ref,geo,float
   }
 \seq_map_inline:Nn \l__eb_module_paths_seq
   {
     \ctex_define:n { #1 .meta:nn = { ctex/#1 } {##1} }
-    \cs_new_protected:cpn { eb#1 } ##1 { \ctex_set:nn {#1} {##1} }
+    \cs_new_protected:cpn { eb#1set } ##1 { \ctex_set:nn {#1} {##1} }
   }
+\RenewDocumentCommand{\ctexset}{om}
+  {
+    \IfValueTF{#1}
+      {\ctex_set:nn {#1} {#2}}
+      {\ctex_set:n {#2}}
+  }
 \bool_until_do:nn
   { \int_compare_p:nNn { \seq_count:N \l__eb_module_paths_seq } < { 8 } }
   { \seq_pop_right:NN \l__eb_module_paths_seq \l_tmpa_tl }
@@ -204,7 +211,7 @@
     The~'\string\chapter'\ command~will~not~be~used.
   }
 
-\LoadPackage
+\ebloadpackage
   {
     [text]{spbmark},
     [normalem]{ulem},
@@ -248,7 +255,7 @@
         \eb at tag@brackets at right
       }
   }
-\ctex_define:nn { style }
+\ctex_define:nn { tools }
   {
     multoc .int_set:N     = \l__eb_toc_columns_int,
     multoc .default:n     = 2,
@@ -277,20 +284,20 @@
     marginparsep    = 8pt,
     marginparwidth  = 2.54cm
   }
-\ctex_define:nn { geoset }
+\cs_new:Npn \eb_unknown_kv_handle:
   {
+    \str_use:N \l_keys_key_str
+    \tl_if_novalue:VF \l_keys_value_tl
+      { = {\exp_not:V \l_keys_value_tl} }
+  }
+\ctex_define:nn { geo }
+  {
     headruleskip .tl_set:N  = \headruleskip,
     headruleskip .initial:n = 0pt,
     footruleskip .tl_set:N  = \footruleskip,
     footruleskip .initial:n = 3.5pt,
-    unknown .code:n         =
-      {
-        \exp_args:Nx \geometry
-          {
-            \str_use:N \l_keys_key_str
-            \tl_if_empty:NF \l_keys_value_tl { = \exp_not:n { {#1} } }
-          }
-      }
+    unknown .code:n = \exp_args:Nx \geometry { \eb_unknown_kv_handle: },
+    unknown .default:V      = \c_novalue_tl
   }
 
 \cs_new_protected:Npn \blankpagestyle #1
@@ -351,7 +358,7 @@
         { none* } { \text_lowercase:n }
       }
   }
-\ctex_define:nn { hdrset }
+\ctex_define:nn { hdr }
   {
     chap-mark .cs_set:Np      = \eb at mark@chapter at whole #1,
     chap-mark .initial:n      =
@@ -433,7 +440,7 @@
     \providecommand{\kaishu}{\itshape}
   }
 
-\ctex_define:nn { style }
+\ctex_define:nn { tools }
   {
     fntnumwith .choices:nn        =
       { part,page,chapter }
@@ -589,7 +596,7 @@
 \tl_new:N \l__eb_fnmarktext_format_tl
 \tl_new:N \l__eb_fncustom_format_tl
 \clist_new:N \l__eb_footnote_value_clist
-\ctex_define:nn { hdrset }
+\ctex_define:nn { hdr }
   {
     fnfirstindent .tl_set:N         = \fnfirstindent,
     fnfirstindent .initial:n        = 1em,
@@ -630,7 +637,7 @@
     fntext-num/unknown .code:n = \eb_fnmarktext_short_label_set:Nn \thefootnote {#1},
     fnmarktext-num .meta:n = { fntext-num = #1,fnmark-num = #1 },
     fnmarktext-num .initial:n       = plain,
-    unknown .code:n                 = \eb_msg_deprecated_option:n { hdrset }
+    unknown .code:n                 = \eb_msg_deprecated_option:n { hdr }
   }
 
 \eb_at_end_preamble:n
@@ -756,7 +763,7 @@
       { \reset at font }
       {
         \setspread{\eb at spread@footnote}
-        \eb at subfont@footnote
+        \eb at font@footnote
       }
   }
 \cs_set_eq:NN \eb@@makefntext \@makefntext
@@ -873,7 +880,7 @@
           { \tl_clear:N \l__eb_fnmarktext_format_tl }
       }
     \bool_if:NF \l__eb_fnmarktext_format_match_bool { \spbset{spcmd = { }} }
-    \eb at subfont@footnote
+    \eb at font@footnote
   }
 \cs_new_protected:Npn \defupfntmark #1
   { \cs_set:Npn \@makefnmark { \hbox:n {#1} } }
@@ -964,7 +971,7 @@
         \@addtoreset{#3}{#5}
         \IfBooleanF{#1}
           {
-            \exp_args:Nc \cs_gset:Npn { the#3 }
+            \cs_gset:cpn { the#3 }
               { \use:c { the#5 }#4#2{#3} }
           }
       }
@@ -978,13 +985,14 @@
 \cs_set:Npn \thebisection { \eb_section_counter_prefix:n { bi } }
 \cs_set:Npn \thebisubsection { \thebisection.\@arabic\c at bisubsection }
 \cs_set:Npn \thesection { \eb_section_counter_prefix:n { } }
-\tl_new:N \eb at before@addbitoc at hook
-\NewDocumentCommand{\BeforeAddBitoc}{sm}
+\tl_new:N \eb at before@bitocline at hook
+\NewDocumentCommand{\BeforeAddtoBitoc}{sm}
   {
     \IfBooleanTF{#1}
-      {\tl_gset:Nn \eb at before@addbitoc at hook {#2}}
-      {\tl_gput_right:Nn \eb at before@addbitoc at hook {#2}}
+      {\tl_gset:Nn \eb at before@bitocline at hook {#2}}
+      {\tl_gput_right:Nn \eb at before@bitocline at hook {#2}}
   }
+\cs_set_eq:NN \BeforeAddBitoc \BeforeAddtoBitoc
 \cs_new_protected:Npn \CTEX at addbitocline #1#2
   {
     \group_begin:
@@ -991,7 +999,7 @@
     \def\CTEX at prechapter{\CTEX at prebichapter}
     \def\CTEX at thechapter{\CTEX at bichapter@number}
     \def\CTEX at postchapter{\CTEX at postbichapter}
-    \eb at before@addbitoc at hook
+    \eb at before@bitocline at hook
     \tl_if_eq:NnTF \g__eb_bilist_permute_value_tl { mix }
       { \addcontentsline{toc}{#1} }
       { \addcontentsline{tec}{#1} }
@@ -1055,7 +1063,7 @@
       }
   }
 
-\ctex_define:nn { style }
+\ctex_define:nn { tools }
   {
     hyphen-figure .tl_set:N   = \l__eb_hyphen_figure_tl,
     hyphen-table .tl_set:N    = \l__eb_hyphen_table_tl,
@@ -1067,7 +1075,7 @@
         hyphen-listing = #1,hyphen-equation = #1
       },
     hyphen-every .initial:n   = .,
-    unknown .code:n           = \eb_msg_deprecated_option:n { style }
+    unknown .code:n           = \eb_msg_deprecated_option:n { tools }
   }
 \eb_seq_map_inline:nn
   { figure,table,lstlisting,equation }
@@ -1282,6 +1290,7 @@
         #1/tocformat .tl_set:c  = l__eb_toc_#1_format_tl,
         #1/tocformat+ .code:n   = \tl_put_right:cn { l__eb_toc_#1_format_tl } {##1},
         #1/tocformat~+ .code:n  = \tl_put_right:cn { l__eb_toc_#1_format_tl } {##1},
+        #1/tocformat* .tl_set:c = l__eb_toc_#1_entry_nolabel_tl,
         #1/tocindent .tl_set:c  = l__eb_toc_#1_indent_tl,
         #1/toclabel .cs_set:cp  = { eb_toc_entry_#1:nnn } ##1##2##3,
         #1/tocrule .tl_set:c    = l__eb_toc_#1_rule_tl,
@@ -1307,7 +1316,8 @@
             {#2}
             [\tl_use:c { l__eb_toc_#2_indent_tl }]
             {\tl_use:c { l__eb_toc_#2_format_tl }}
-            {\use:c { eb_toc_entry_#2:nnn } { \thecontentslabel } {#2} {#1}}{}
+            {\use:c { eb_toc_entry_#2:nnn } { \thecontentslabel } {#2} {#1}}
+            {\tl_use:c { l__eb_toc_#2_entry_nolabel_tl }}
             {\tl_use:c { l__eb_toc_#2_rule_tl }}
             [\tl_use:c { l__eb_toc_#2_below_tl }]
           }
@@ -1334,7 +1344,7 @@
   {
     \IfBooleanT{#1}
       {
-        \ctex_set:nn { tocset } { between = { },bibetween = { } }
+        \ctex_set:nn { toc } { between = { },bibetween = { } }
         \tl_set:Nn \l__eb_toc_tmpa_tl {*}
         \tl_set:Nn \l__eb_toc_tmpb_tl
           {
@@ -1367,7 +1377,7 @@
 \eb_seq_map_inline:nn
   { tocafter,tocindent,tocrule }
   {
-    \ctex_define:nn { tocset }
+    \ctex_define:nn { toc }
       {
         #1-every .code:n    =
           {
@@ -1380,7 +1390,7 @@
           }
       }
   }
-\ctex_define:nn { tocset }
+\ctex_define:nn { toc }
   {
     lolskip .skip_set:N   = \eb at toc@lol at skip,
     lolskip .initial:n    = 10pt,
@@ -1396,7 +1406,7 @@
     hang .initial:n       = true,
     pagenumwd .code:n     = \contentsmargin{#1},
     pagenumwd .initial:n  = 1.55em,
-    unknown .code:n       = \eb_msg_deprecated_option:n { tocset }
+    unknown .code:n       = \eb_msg_deprecated_option:n { toc }
   }
 \NewDocumentCommand{\tocrule}{st-O{0.7pc}d()mO{}}
   {
@@ -1492,7 +1502,7 @@
     \ctex_assign_heading_name:nn { biappendix } {#1}
     \bool_if:NTF \l__eb_class_mode_book_bool
       {
-        \eb_preto_cmd:nn { eb at before@addbitoc at hook }
+        \eb_preto_cmd:nn { eb at before@bitocline at hook }
           {
             \def\CTEX at prechapter{\CTEX at prebiappendix}
             \def\CTEX at thechapter{#2}
@@ -1518,11 +1528,11 @@
       }
   }
 
-\ctex_define:nn { subfont }
+\ctex_define:nn { font }
   {
-    caption-table .tl_set:N   = \l__eb_subfont_caption_table_tl,
-    caption-figure .tl_set:N  = \l__eb_subfont_caption_figure_tl,
-    caption-listing .tl_set:N = \l__eb_subfont_caption_listing_tl,
+    caption-table .tl_set:N   = \l__eb_font_caption_table_tl,
+    caption-figure .tl_set:N  = \l__eb_font_caption_figure_tl,
+    caption-listing .tl_set:N = \l__eb_font_caption_listing_tl,
     caption-every .meta:n     =
       {
         caption-table   = #1,caption-figure = #1,
@@ -1529,29 +1539,29 @@
         caption-listing = #1
       },
     caption-every .initial:n  = \sffamily\small,
-    footnote .tl_set:N        = \eb at subfont@footnote,
+    footnote .tl_set:N        = \eb at font@footnote,
     marginpar .tl_set:N       = \marginfont,
     marginpar .initial:n      = \footnotesize,
-    unknown .code:n           = \eb_msg_deprecated_option:n { subfont }
+    unknown .code:n           = \eb_msg_deprecated_option:n { font }
   }
-\cs_new_protected:Npn \addtosubfont #1#2
+\cs_new_protected:Npn \ebaddtofont #1#2
   {
     \str_case:nnF {#1}
       {
         { table }
-        { \tl_put_right:Nn \l__eb_subfont_caption_table_tl {#2} }
+        { \tl_put_right:Nn \l__eb_font_caption_table_tl {#2} }
         { figure }
-        { \tl_put_right:Nn \l__eb_subfont_caption_figure_tl {#2} }
+        { \tl_put_right:Nn \l__eb_font_caption_figure_tl {#2} }
         { listing }
-        { \tl_put_right:Nn \l__eb_subfont_caption_listing_tl {#2} }
+        { \tl_put_right:Nn \l__eb_font_caption_listing_tl {#2} }
         { every }
         {
-          \tl_put_right:Nn \l__eb_subfont_caption_table_tl {#2}
-          \tl_put_right:Nn \l__eb_subfont_caption_figure_tl {#2}
-          \tl_put_right:Nn \l__eb_subfont_caption_listing_tl {#2}
+          \tl_put_right:Nn \l__eb_font_caption_table_tl {#2}
+          \tl_put_right:Nn \l__eb_font_caption_figure_tl {#2}
+          \tl_put_right:Nn \l__eb_font_caption_listing_tl {#2}
         }
       }
-      { \tl_put_right:cn { l__eb_subfont_#1_tl } {#2} }
+      { \tl_put_right:cn { l__eb_font_#1_tl } {#2} }
   }
 \ctex_define:nn { spread }
   {
@@ -1613,7 +1623,7 @@
     \DeclareCaptionFont{eb@#1 at font}
       {
         \setspread{\fp_use:c { l__eb_spread_caption_#1_fp }}
-        \tl_use:c { l__eb_subfont_caption_#1_tl }
+        \tl_use:c { l__eb_font_caption_#1_tl }
       }
   }
 \captionsetup
@@ -1696,7 +1706,7 @@
 \SetEnumitemValue{ref}{enumii}{\arabic{enumi}.\alph*}
 \SetEnumitemValue{ref}{enumiii}{\arabic{enumi}.\alph{enumii}.\roman*}
 \setlist{nosep,labelsep = 0.5em,listparindent = \parindent}
-\setlist[1]{leftmargin = *,align = left,mode = unboxed}
+\setlist[1]{leftmargin = *,align = left}
 \setlist[itemize,1]{label = bullet}
 \setlist[itemize,2]{label = endash}
 \setlist[itemize,3]{label = asterisk}
@@ -1791,8 +1801,12 @@
     \cs_set_eq:NN \eb at declaretheoremsyle@save \declaretheoremstyle
     \RenewDocumentCommand{\declaretheoremstyle}{O{}mO{}}
       {\eb at declaretheoremsyle@save[#1,#3]{#2}}
-    \ctex_define:nn { thmset }
-      { unknown .code:n = \eb_msg_deprecated_option:n { thmset } }
+    \ctex_define:nn { thmt }
+      {
+        loeskip .skip_set:N = \eb at thmt@loe at skip,
+        loeskip .initial:n  = 10pt,
+        unknown .code:n     = \eb_msg_deprecated_option:n { thmt }
+      }
     \declaretheoremstyle{default}[
       spaceabove    = 0ex plus .1ex,
       spacebelow    = 0ex plus .1ex,
@@ -1805,6 +1819,35 @@
       ]
     \theoremstyle{default}
     \cs_undefine:N \proof
+    \DeclareFloatList{theorem}{loe}
+    \eb_preto_cmd:nn { listoftheorems }
+      {
+        \group_begin:
+        \def\contentsline #1 {\use:c { thmt at contentsline@#1 }{#1}}
+      }
+    \eb_appto_cmd:nn { listoftheorems } { \group_end: }
+    \eb_preto_cmd:nn { @chapter }
+      {
+        \skip_if_eq:nnF { \eb at thmt@loe at skip } { \c_zero_skip }
+          { \addtocontents{loe}{\protect\addvspace{\skip_use:N \eb at thmt@loe at skip}} }
+      }
+    \def\thmtlo at chaptervspacehack{}
+    \def\thmtname{\thmt at thmname}
+    \def\thmtenvname{\thmt at envname}
+    \def\thmtnote{\thmt at shortoptarg}
+    \def\thmtformatoptarg #1 {#1}
+    \def\thmtifname #1#2 {\ifbool{thmt at isstarred}{#2}{#1}}
+    \def\thmtifnote #1#2
+      {
+        \tl_if_empty:NTF \thmt at shortoptarg
+          {#2}
+          { \protect\thmtformatoptarg{#1} }
+      }
+    \NewDocumentCommand{\settheoremtocline}{smm}
+      {
+        \IfBooleanT{#1}{\def\thmt at contentslineIgnore{\thmt at contentsline}}
+        \cs_set:cpn { ll@#2 } {#3}
+      }
   }
 
 \setchemformula
@@ -1855,7 +1898,7 @@
   { \file_if_exist_input:n { eb-tcolorbox.cfg } }
 
 \bool_set_true:N \l__eb_backend_bibtex_bool
-\ctex_define:nn { bibset }
+\ctex_define:nn { bib }
   {
     backend .choice:,
     backend .value_required:n = true,
@@ -1867,7 +1910,7 @@
     datafile .clist_set:N     = \l__eb_bib_datafile_clist,
     bititle .tl_set:N         = \eb at bib@bitoc at title,
     bititle .initial:n        = Bibliography,
-    unknown .code:n           = \eb_msg_deprecated_option:n { bibset }
+    unknown .code:n           = \eb_msg_deprecated_option:n { bib }
   }
 
 \cs_new_protected:Npn \eb_bibtex_natbib_set:
@@ -1996,9 +2039,9 @@
 \cs_new_protected:Npn \eb_define_theme_color:n #1
   { \definecolorset{HTML}{ctex@}{}{frame,#1;emph,#1;verb,#1} }
 \cs_new_protected:Npn \DeclareLinkColor #1
-  { \ctex_define:nx { refset } { \eb_link_color_set:n {#1} } }
+  { \ctex_define:nx { ref } { \eb_link_color_set:n {#1} } }
 \cs_new_protected:Npn \DeclareThemeColor #1
-  { \ctex_define:nx { style } { \eb_theme_color_set:n {#1} } }
+  { \ctex_define:nx { tools } { \eb_theme_color_set:n {#1} } }
 \cs_new_protected:Npn \eb_color_assign_cmd_set:nn #1#2
   {
     \cs_new:cpn { eb_#2_color_set:n } ##1
@@ -2018,7 +2061,7 @@
     { color } { theme }
   }
   { \eb_color_assign_cmd_set:nn #1 }
-\ctex_define:nx { refset }
+\ctex_define:nx { ref }
   {
     linkcolor .choice:,
     linkcolor .value_required:n = true,
@@ -2033,7 +2076,7 @@
     linkcolor .initial:n    = navyblue,
     linkcolor-every .code:n = \eb_define_link_color:n { \exp_not:n {#1} }
   }
-\ctex_define:nx { style }
+\ctex_define:nx { tools }
   {
     color .choice:,
     color .value_required:n = true,
@@ -2063,7 +2106,7 @@
   { \eb_set_hyperref:n { colorlinks } }
 \cs_new_protected:Npn \eb_link_toc_put:n #1
   { \eb_set_hyperref:n { linktoc = #1 } }
-\ctex_define:nn { refset }
+\ctex_define:nn { ref }
   {
     linktype .choice:,
     linktype .value_required:n  = true,
@@ -2076,14 +2119,8 @@
     linktoc .value_required:n   = true,
     linktoc/unknown .code:n     = \eb_link_toc_put:n {#1},
     linktoc .initial:n          = all,
-    unknown .code:n             =
-      {
-        \eb_set_hyperref:x
-          {
-            \str_use:N \l_keys_key_str
-            \tl_if_empty:NF \l_keys_value_tl { = \exp_not:n { {#1} } }
-          }
-      }
+    unknown .code:n = \eb_set_hyperref:x { \eb_unknown_kv_handle: },
+    unknown .default:V          = \c_novalue_tl
   }
 
 \cs_new_protected:Npn \eb_allow_url_break:
@@ -2141,7 +2178,8 @@
 \ctex_define:n
   {
     lstlistlistingname .tl_set:N  = \listlstlistingname,
-    lstlistingname .tl_set:N      = \lstlistingname
+    lstlistingname .tl_set:N      = \lstlistingname,
+    listtheoremname .tl_set:N     = \listtheoremname
   }
 \tl_if_eq:NnTF \l__ctex_scheme_tl { chinese }
   {
@@ -2151,7 +2189,8 @@
         listfigurename      = 插图清单,
         listtablename       = 附表清单,
         lstlistlistingname  = 代码清单,
-        lstlistingname      = 代码
+        lstlistingname      = 代码,
+        listtheoremname     = 定理清单
       }
   }
   {

Modified: trunk/Master/texmf-dist/tex/latex/easybook/easybook.cls
===================================================================
--- trunk/Master/texmf-dist/tex/latex/easybook/easybook.cls	2024-04-24 20:18:23 UTC (rev 71061)
+++ trunk/Master/texmf-dist/tex/latex/easybook/easybook.cls	2024-04-24 20:19:11 UTC (rev 71062)
@@ -20,7 +20,7 @@
 %% This work has the LPPL maintenance status `maintained'.
 \NeedsTeXFormat{LaTeX2e}[2021/11/15]
 \RequirePackage{l3keys2e}
-\ProvidesExplClass{easybook}{2024/04/22}{2024aw}
+\ProvidesExplClass{easybook}{2024/04/24}{2024az}
   {Easily typesetting Chinese theses or books}
 
 \bool_new:N \l__eb_compile_draft_bool

Modified: trunk/Master/texmf-dist/tex/latex/easybook/eb-tcolorbox.cfg
===================================================================
--- trunk/Master/texmf-dist/tex/latex/easybook/eb-tcolorbox.cfg	2024-04-24 20:18:23 UTC (rev 71061)
+++ trunk/Master/texmf-dist/tex/latex/easybook/eb-tcolorbox.cfg	2024-04-24 20:19:11 UTC (rev 71062)
@@ -18,7 +18,7 @@
 %% LaTeX version 2005/12/01 or later.
 %% 
 %% This work has the LPPL maintenance status `maintained'.
-\ProvidesExplFile{eb-tcolorbox.cfg}{2024/04/22}{2024aw}
+\ProvidesExplFile{eb-tcolorbox.cfg}{2024/04/24}{2024az}
   {Customization of tcolorbox for easybook}
 
 \cs_set_protected:Npn \addtotcbstyle #1#2



More information about the tex-live-commits mailing list.