summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/easybook/easybook.dtx
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/easybook/easybook.dtx')
-rw-r--r--macros/latex/contrib/easybook/easybook.dtx546
1 files changed, 345 insertions, 201 deletions
diff --git a/macros/latex/contrib/easybook/easybook.dtx b/macros/latex/contrib/easybook/easybook.dtx
index 2ce884d5f3..7beb93bdb9 100644
--- a/macros/latex/contrib/easybook/easybook.dtx
+++ b/macros/latex/contrib/easybook/easybook.dtx
@@ -14,8 +14,7 @@
% This work has the LPPL maintenance status `maintained'.
%<*class>
\NeedsTeXFormat{LaTeX2e}[2021/11/15]
-\RequirePackage{l3keys2e}
-\ProvidesExplClass{easybook}{2024/03/15}{2024ap}
+\ProvidesExplClass{easybook}{2024/05/10}{2024bn}
{Easily typesetting Chinese theses or books}
\bool_new:N \l__eb_compile_draft_bool
@@ -29,7 +28,7 @@
\keys_define:nn { easybook }
{
newline .code:n = \bool_set_true:N \l__eb_title_newline_bool,
- scheme .code:n = \eb_put_ctexbook:n { scheme = #1 },
+ scheme .code:n = \eb_put_ctexbook:n { scheme = {#1} },
enmode .meta:n = { newline,scheme = plain },
font .choices:nn =
{ noto,times,times*,ebgaramond,libertine,palatino,auto }
@@ -47,7 +46,12 @@
unknown .code:n = \clist_gput_right:NV \g__eb_doc_options_clist \CurrentOption
}
-\ProcessKeysOptions{easybook}
+\cs_if_exist:NTF \ProcessKeyOptions
+ { \ProcessKeyOptions[easybook] }
+ {
+ \RequirePackage{l3keys2e}
+ \ProcessKeysOptions{easybook}
+ }
\PassOptionsToPackage{no-math,quiet,CJKmath}{xeCJK}
\eb_put_ctexbook:V \g__eb_doc_options_clist
\LoadClass[UTF8]{ctexbook}
@@ -296,8 +300,8 @@
%</class>
%<*package>
\NeedsTeXFormat{LaTeX2e}[2021/11/15]
-\RequirePackage{l3keys2e,etoolbox}
-\ProvidesExplPackage{easybase}{2024/03/15}{2024ap}
+\RequirePackage{etoolbox}
+\ProvidesExplPackage{easybase}{2024/05/10}{2024bn}
{Easily typesetting Chinese theses or books}
\cs_generate_variant:Nn \dim_set:Nn { NV }
@@ -308,8 +312,9 @@
\cs_generate_variant:Nn \skip_set:Nn { NV }
\cs_generate_variant:Nn \seq_set_from_clist:Nn { No }
\cs_generate_variant:Nn \ctex_define:nn { nx }
-\cs_generate_variant:Nn \eb_put_hyperref:n { x }
+\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 +378,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 }
@@ -420,7 +425,12 @@
\PassOptionsToPackage{list = off}{bicaption}
\PassOptionsToPackage{svgnames}{xcolor}
\PassOptionsToPackage{many}{tcolorbox}
-\ProcessKeysOptions{easybase}
+\cs_if_exist:NTF \ProcessKeyOptions
+ { \ProcessKeyOptions[easybase] }
+ {
+ \RequirePackage{l3keys2e}
+ \ProcessKeysOptions{easybase}
+ }
\PassOptionsToPackage{\g__eb_ctex_options_clist}{ctex}
\IfClassLoadedTF{ctexbook}{}
{
@@ -433,17 +443,23 @@
\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,float,ref,geo
}
\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 } }
+ { \int_compare_p:nNn { \seq_count:N \l__eb_module_paths_seq } < { 9 } }
{ \seq_pop_right:NN \l__eb_module_paths_seq \l_tmpa_tl }
\seq_map_inline:Nn \l__eb_module_paths_seq
{
@@ -481,7 +497,7 @@
The~'\string\chapter'\ command~will~not~be~used.
}
-\LoadPackage
+\ebloadpackage
{
[text]{spbmark},
[normalem]{ulem},
@@ -525,7 +541,7 @@
\eb@tag@brackets@right
}
}
-\ctex_define:nn { style }
+\ctex_define:nn { tools }
{
multoc .int_set:N = \l__eb_toc_columns_int,
multoc .default:n = 2,
@@ -554,20 +570,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
- {
- \l_keys_key_str
- \tl_if_empty:NF \l_keys_value_tl { = {#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 +644,7 @@
{ none* } { \text_lowercase:n }
}
}
-\ctex_define:nn { hdrset }
+\ctex_define:nn { hdr }
{
chap-mark .cs_set:Np = \eb@mark@chapter@whole #1,
chap-mark .initial:n =
@@ -710,7 +726,7 @@
\providecommand{\kaishu}{\itshape}
}
-\ctex_define:nn { style }
+\ctex_define:nn { tools }
{
fntnumwith .choices:nn =
{ part,page,chapter }
@@ -866,7 +882,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,
@@ -882,7 +898,7 @@
fntext-code .initial:n = { ,\tl_if_eq:NnF \l__eb_fntext_position_tl { super } { ~ } },
fnmarktext-format .code:n = \eb_fnboth_format_set:nn {#1} { marktext },
fncustom-format .code:n = \eb_fnboth_format_set:nn {#1} { custom },
- fnboth-format .meta:n = { fnmarktext-format = #1,fncustom-format = #1 },
+ fnboth-format .meta:n = { fnmarktext-format = {#1},fncustom-format = {#1} },
footnotetype .multichoices:nn =
{ plain,hang,bottom,para,flush }
{ \eb_footnote_value_handle:n {#1} },
@@ -905,9 +921,9 @@
{ \eb_fnmarktext_normal_label_set:Nn \thefootnote {#1} },
fntext-num .value_required:n = true,
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 .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 +1049,7 @@
{ \reset@font }
{
\setspread{\eb@spread@footnote}
- \eb@subfont@footnote
+ \eb@font@footnote
}
}
\cs_set_eq:NN \eb@@makefntext \@makefntext
@@ -1138,19 +1154,18 @@
\bool_set_true:N \l__eb_normal_footnote_bool
\bool_new:N \l__eb_fnmarktext_format_match_bool
\bool_new:N \l__eb_fncustom_format_match_bool
+\cs_new:Npn \eb_fnmarktext_format_clear:n #1
+ {
+ \bool_if:cTF { l__eb_fn#1_format_match_bool }
+ { \tl_clear:N \l__eb_fnmarktext_format_tl }
+ { \spbset{spcmd = { }} }
+ }
\cs_new_protected:Npn \eb_fnmarktext_format_initial:
{
\bool_if:NTF \l__eb_normal_footnote_bool
- {
- \bool_if:NT \l__eb_fnmarktext_format_match_bool
- { \tl_clear:N \l__eb_fnmarktext_format_tl }
- }
- {
- \bool_if:NT \l__eb_fncustom_format_match_bool
- { \tl_clear:N \l__eb_fnmarktext_format_tl }
- }
- \bool_if:NF \l__eb_fnmarktext_format_match_bool { \spbset{spcmd = { }} }
- \eb@subfont@footnote
+ { \eb_fnmarktext_format_clear:n { marktext } }
+ { \eb_fnmarktext_format_clear:n { custom } }
+ \eb@font@footnote
}
\cs_new_protected:Npn \defupfntmark #1
{ \cs_set:Npn \@makefnmark { \hbox:n {#1} } }
@@ -1176,7 +1191,7 @@
\tl_use:N \l__eb_fntext_after_tl
}
-\tl_clear:N \@thefnmark
+\tl_clear_new:N \@thefnmark
\tl_new:N \@the@up@fnmark
\cs_new:Npn \eb@@makefnmark #1#2
{
@@ -1197,7 +1212,7 @@
\l__eb_fnmarktext_format_tl \l__eb_fncustom_format_tl
}
}
-\NewDocumentCommand{\Footnote}{O{#2}mm}
+\NewDocumentCommand{\Footnote}{O{#2}m+m}
{
\group_begin:
\eb_fncustom_format_initial:
@@ -1241,7 +1256,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,28 +1270,28 @@
\cs_set:Npn \thebisection { \eb_section_counter_prefix:n { bi } }
\cs_set:Npn \thebisubsection { \thebisection.\@arabic\c@bisubsection }
\cs_set:Npn \thesection { \eb_section_counter_prefix:n { } }
-\tl_new:N \eb@before@addbitoc@hook
-\NewDocumentCommand{\BeforeAddBitoc}{sm}
+\tl_new:N \eb@before@bitocline@hook
+\NewDocumentCommand{\BeforeAddtoBitoc}{sm}
{
\IfBooleanTF{#1}
- {\tl_gset:Nn \eb@before@addbitoc@hook {#2}}
- {\tl_gput_right:Nn \eb@before@addbitoc@hook {#2}}
+ {\tl_gset:Nn \eb@before@bitocline@hook {#2}}
+ {\tl_gput_right:Nn \eb@before@bitocline@hook {#2}}
}
+\cs_set_eq:NN \BeforeAddBitoc \BeforeAddtoBitoc
\cs_new_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
+ \eb@before@bitocline@hook
\tl_if_eq:NnTF \g__eb_bilist_permute_value_tl { mix }
{ \addcontentsline{toc}{#1} }
{ \addcontentsline{tec}{#1} }
{ \use:c { CTEX@#1@tocline }{#1}{#2} }
\group_end:
}
-\eb_seq_map_inline:nn
- { chapter,section,subsection }
+\cs_new_protected:Npn \RegisterBititle #1
{
\exp_args:Nc \NewDocumentCommand { bi#1 }{sO{##3}mm}
{
@@ -1285,7 +1300,6 @@
\use:c {#1}*{\phantomsection ##3}
\CTEX@addtocline{#1}{##2}
\tl_if_empty:oF {##4} { \CTEX@addbitocline{#1}{##4} }
- \tl_set:Nn \l__eb__bitoc_mark_title_level_tl {#1}
\use:c { #1mark }{##2}
}{
\stepcounter{bi#1}
@@ -1294,28 +1308,79 @@
}
}
}
+\clist_map_function:nN
+ { chapter,section,subsection }
+ \RegisterBititle
\eb_preto_cmd:nn { @chapter }
{
\skip_if_eq:nnF { \eb@toc@lol@skip } { \c_zero_skip }
{ \addtocontents{lol}{\protect\addvspace{\skip_use:N \eb@toc@lol@skip}} }
}
+\cs_new_protected:Npn \eb_title_base_set_eq:nn #1#2
+ {
+ \tl_set_eq:cc { CTEX@#2@beforeskip } { CTEX@#1@beforeskip }
+ \tl_set_eq:cc { CTEX@#2@afterskip } { CTEX@#1@afterskip }
+ \bool_set_eq:cc { CTEX@#2@numbering } { CTEX@#1@numbering }
+ \bool_set_eq:cc { CTEX@#2@fixskip } { CTEX@#1@fixskip }
+ \bool_set_eq:cc { CTEX@#2@hang } { CTEX@#1@hang }
+ \bool_set_eq:cc { CTEX@#2@runin } { CTEX@#1@runin }
+ \cs_set_eq:cc { CTEX@#2@tocline } { CTEX@#1@tocline }
+ \tl_set_eq:cc { CTEX@#2@break } { CTEX@#1@break }
+ \tl_set_eq:cc { CTEX@#2@format } { CTEX@#1@format }
+ \tl_set_eq:cc { CTEX@#2@nameformat } { CTEX@#1@nameformat }
+ \tl_set_eq:cc { CTEX@#2@numberformat } { CTEX@#1@numberformat }
+ \tl_set_eq:cc { CTEX@#2@titleformat } { CTEX@#1@titleformat }
+ \tl_set_eq:cc { CTEX@#2@aftername } { CTEX@#1@aftername }
+ \tl_set_eq:cc { CTEX@#2@aftertitle } { CTEX@#1@aftertitle }
+ }
+\NewDocumentCommand{\NewTitleCommand}{omm}
+ {
+ \newcounter{#2}
+ \cs_set_eq:cN { #2mark } \use_none:n
+ \tl_clear:N \l__ctex_tmp_tl
+ \__ctex_initial_heading:n {#2}
+ \__ctex_def_heading_keys:n {#2}
+ \exp_args:No \ctex_define:n { \l__ctex_tmp_tl }
+ \cs_gset_protected:cpx {#2}
+ {
+ \exp_not:N \@startsection{#2}{#3}
+ {\exp_not:c { CTEX@#2@indent }}
+ {\exp_not:c { CTEX@#2@beforeskip }}
+ {\exp_not:c { CTEX@#2@afterskip }}
+ {\exp_not:N \normalfont\exp_not:c { CTEX@#2@format }}
+ }
+ \cs_new:cpn { CTEX@#2@tocline } ##1##2
+ { \CTEXnumberline{##1}##2 }
+ \exp_args:Nc \providecommand { toclevel@#2 }{#3}
+ \IfValueT{#1}{\eb_title_base_set_eq:nn {#1} {#2}}
+ }
+\NewDocumentCommand{\NewTitleEntryCommand}{O{toc}m}
+ {
+ \cs_new_protected:cpn { #2entry } ##1
+ {
+ \bool_if:cTF { CTEX@#2@numbering }
+ { \CTEX@ifnametrue }
+ { \CTEX@ifnamefalse }
+ \addcontentsline{#1}{#2}{\use:c { CTEX@#2@tocline }{#2}{##1}}
+ }
+ }
-\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,
- hyphen-listing .tl_set:N = \l__eb_hyphen_lstlisting_tl,
+ hyphen-listing .tl_set:N = \l__eb_hyphen_listing_tl,
hyphen-equation .tl_set:N = \l__eb_hyphen_equation_tl,
hyphen-every .meta:n =
{
- hyphen-figure = #1,hyphen-table = #1,
- hyphen-listing = #1,hyphen-equation = #1
+ hyphen-figure = {#1},hyphen-table = {#1},
+ 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 }
+ { figure,table,listing,equation }
{
\cs_set:cpn { the#1 }
{
@@ -1372,21 +1437,21 @@
\bool_set_true:N \l__eb_toc_plan_bi_bool
},
plan .initial:n = cn,
- columns .meta:n = { multoc = #1 },
+ columns .meta:n = { multoc = {#1} },
title .code:n = \eb_assign_toc_title:n {#1},
bilist .code:n =
{
\tl_gset:Nn \g__eb_bilist_permute_value_tl {#1}
\str_if_eq:nnTF {#1} { mix }
{
- \eb_preto_cmd:nn { CTEX@addtocline }
- { \addtocontents{toc}{\boolfalse{bitoc}} }
- \eb_preto_cmd:nn { CTEX@addbitocline }
- { \addtocontents{toc}{\booltrue{bitoc}} }
+ \AddToHook{cmd/CTEX@addtocline/before}[bitoc]
+ {\addtocontents{toc}{\boolfalse{bitoc}}}
+ \AddToHook{cmd/CTEX@addbitocline/before}[bitoc]
+ {\addtocontents{toc}{\booltrue{bitoc}}}
}
{
- \RemoveFromHook{cmd/CTEX@addtocline/before}
- \RemoveFromHook{cmd/CTEX@addbitocline/before}
+ \RemoveFromHook{cmd/CTEX@addtocline/before}[bitoc]
+ \RemoveFromHook{cmd/CTEX@addbitocline/before}[bitoc]
}
},
name .tl_set:N = \l__eb_print_index_name_tl,
@@ -1430,7 +1495,7 @@
{ \par }
}
}
-\cs_new_protected:Npn \eb_toc_float_list_parse:nnnnn #1#2#3#4#5
+\cs_new_protected:Npn \eb_toc_list_struct_parse:nnnnn #1#2#3#4#5
{
\group_begin:
\tl_set_eq:Nc \eb@toc@title { list#4name }
@@ -1451,7 +1516,7 @@
\cs_new_protected:Npn \DeclareFloatList #1#2
{
\exp_args:Nc \DeclareDocumentCommand { listof#1s }{st+o}
- {\eb_toc_float_list_parse:nnnnn {##1} {##2} {##3} {#1} {#2}}
+ {\eb_toc_list_struct_parse:nnnnn {##1} {##2} {##3} {#1} {#2}}
\ctex_define:n
{
#1 .meta:nn = { ctex/#1 } {##1},
@@ -1498,7 +1563,7 @@
\bool_if:NT \l__eb_toc_plan_cn_bool
{
\IfBooleanF{#1}{\eb@toc@title@level{\eb@toc@title}{}}
- \eb_toc_if_title_between_hook:nn {#1} { main }
+ \eb_toc_if_title_between_hook:nn {#1} { title }
\eb_toc_start_multi_column_ext:n { toc }#4
}
\bool_if:NT \l__eb_toc_plan_bi_bool
@@ -1506,7 +1571,7 @@
\tl_if_eq:NnF \g__eb_bilist_permute_value_tl { mix }
{
\IfBooleanF{#1}{\eb@toc@title@level{\eb@bitoc@title}{}}
- \eb_toc_if_title_between_hook:nn {#1} { bimain }
+ \eb_toc_if_title_between_hook:nn {#1} { bititle }
\eb_toc_start_multi_column_ext:n { tec }
}
}
@@ -1519,19 +1584,6 @@
\seq_put_right:Nn \c__ctex_headings_seq { figure }
\seq_put_right:Nn \c__ctex_headings_seq { lstlisting }
\seq_remove_duplicates:N \c__ctex_headings_seq
-\cs_new_protected:Npn \eb_toc_entry_if_hang:n #1
- {
- \bool_if:NTF \l__eb_toc_entry_hang_bool
- { \contentspush }
- { \use:n }
- {
- \bool_if:NTF \l__eb_toc_number_color_bool
- { \textcolor{ctex@toc@number} }
- { \use:n }
- { \thecontentslabel }
- \tl_use:c { l__eb_toc_#1_after_tl }
- }
- }
\cs_new_protected:Npn \eb_toc_format_define:n #1
{
\ctex_define:n
@@ -1540,72 +1592,120 @@
#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/tocindent .dim_set:c = l__eb_toc_#1_indent_dim,
+ #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,
#1/tocafter .tl_set:c = l__eb_toc_#1_after_tl,
- #1/tocbelow .tl_set:c = l__eb_toc_#1_below_tl
+ #1/tocbelow .tl_set:c = l__eb_toc_#1_below_tl,
+ #1/tocbegin .meta:n = { #1/tocbelow = {##1} },
+ #1/tocsep .tl_set:c = l__eb_toc_#1_sep_tl,
+ #1/tocend .tl_set:c = l__eb_toc_#1_end_tl
}
}
-\cs_new_protected:Npn \eb_toc_format_initial:n #1
+\tl_new:N \l__eb_toc_tmpa_tl
+\tl_new:N \l__eb_toc_tmpb_tl
+\cs_new_protected:Npn \eb_toc_format_initial:nn #1#2
{
- \titlecontents{#1}
- [\dim_use:c { l__eb_toc_#1_indent_dim }]
- {\tl_use:c { l__eb_toc_#1_format_tl }}
- {\eb_toc_entry_if_hang:n {#1}}{}
- {\tl_use:c { l__eb_toc_#1_rule_tl }}
- [\tl_use:c { l__eb_toc_#1_below_tl }]
- \ctex_set:nn {#1}
+ \exp_last_unbraced:Nx \titlecontents
{
+ \tl_use:N \l__eb_toc_tmpa_tl
+ \exp_not:n
+ {
+ {#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}}
+ {\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 }]
+ }
+ \exp_not:o { \l__eb_toc_tmpb_tl }
+ }
+ \ctex_set:nn {#2}
+ {
+ tocformat = \IfBooleanT{#1}{\contentsmargin{0pt}},
tocindent = 0em,
- tocrule = \tocrule{$\cdot$},
- tocafter = \hspace{1em}
+ tocrule = \IfBooleanTF{#1}{,~\thecontentspage}{\tocrule{$\cdot$}},
+ toclabel =
+ {
+ \bool_if:NTF \l__eb_toc_entry_hang_bool
+ { \IfBooleanTF{##3}{\use:n}{\contentspush} }
+ { \use:n }
+ { ##1\tl_use:c { l__eb_toc_##2_after_tl } }
+ },
+ tocafter = \hspace{1em},
+ tocsep = .—,
+ tocend = .
}
}
-\cs_new_protected:Npn \RegisterTocName #1
+\seq_new:N \l__eb_toc_every_include_name_seq
+\cs_new_protected:Npn \ExcludeEveryTocName #1
+ { \seq_remove_all:Nn \l__eb_toc_every_include_name_seq {#1} }
+\cs_new_protected:Npn \IncludeEveryTocName #1
{
- \eb_toc_format_define:n {#1}
- \eb_toc_format_initial:n {#1}
+ \seq_put_right:Nn \l__eb_toc_every_include_name_seq {#1}
+ \seq_remove_duplicates:N \l__eb_toc_every_include_name_seq
}
-\seq_map_function:NN
-\c__ctex_headings_seq \RegisterTocName
-\eb_seq_map_inline:nn
+\NewDocumentCommand{\RegisterTocName}{sm}
{
- tocformat,tocformat+,tocformat~+,
- tocindent,tocrule,tocline,tocafter,between
+ \IfBooleanT{#1}
+ {
+ \ctex_set:nn { toc } { between = { },bibetween = { } }
+ \tl_set:Nn \l__eb_toc_tmpa_tl {*}
+ \tl_set:Nn \l__eb_toc_tmpb_tl
+ {
+ [\tl_use:c { l__eb_toc_#2_sep_tl }]
+ [\tl_use:c { l__eb_toc_#2_end_tl }]
+ }
+ }
+ \IncludeEveryTocName{#2}
+ \eb_toc_format_define:n {#2}
+ \eb_toc_format_initial:nn {#1} {#2}
+ \tl_clear:N \l__eb_toc_tmpa_tl
+ \tl_clear:N \l__eb_toc_tmpb_tl
}
+\seq_map_function:NN
+\c__ctex_headings_seq \RegisterTocName
+\ctex_define:n { float/unknown .code:n = \eb_msg_deprecated_option:n { float } }
+\cs_new_protected:Npn \RegisterEveryTocOption #1
{
- \ctex_define:n
+ \ctex_define:nn { toc }
{
- float/#1 .meta:n =
+ #1-every .code:n =
{
- figure/#1 = ##1,table/#1 = ##1,
- lstlisting/#1 = ##1
+ \seq_map_inline:Nn \l__eb_toc_every_include_name_seq
+ { \ctex_set:n { ####1/#1 = {##1} } }
}
}
}
-\eb_seq_map_inline:nn
+\clist_map_function:nN
{ tocafter,tocindent,tocrule }
+ \RegisterEveryTocOption
+\NewDocumentCommand{\tocrule}{st-O{0.7pc}d()mO{}}
{
- \ctex_define:nn { tocset }
+ \normalsize\normalfont
+ \ttl@row@i[#3]{\IfValueTF{#4}{\scalebox{#4}{#5}}{#5}}#6
{
- #1-every .code:n =
+ \IfBooleanF{#2}
{
- \ctex_set:n
+ \IfBooleanTF{#1}
+ {\thecontentspage}
{
- part/#1 = ##1,chapter/#1 = ##1,
- section/#1 = ##1,subsection/#1 = ##1,
- float/#1 = ##1
+ \bool_if:NTF \l__eb_toc_dot_align_bool
+ { \contentspage }
+ { \thecontentspage }
}
}
}
}
-\ctex_define:nn { tocset }
+\ctex_define:nn { toc }
{
lolskip .skip_set:N = \eb@toc@lol@skip,
lolskip .initial:n = 10pt,
- between .tl_set:N = \l__eb_toc_main_between_hook_tl,
+ between .tl_set:N = \l__eb_toc_title_between_hook_tl,
between .initial:n = \bool_if:NT \l__eb_class_mode_book_bool { \vspace*{-1pc} },
- bibetween .tl_set:N = \l__eb_toc_bimain_between_hook_tl,
+ bibetween .tl_set:N = \l__eb_toc_bititle_between_hook_tl,
bibetween .initial:n = \bool_if:NT \l__eb_class_mode_book_bool { \vspace*{-1pc} },
dotalign .bool_set:N = \l__eb_toc_dot_align_bool,
dotalign .default:n = true,
@@ -1615,25 +1715,41 @@
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{}}
+
+\NewHookWithArguments{starttoc/after}{1}
+\AddToHookWithArguments{starttoc/after}[aux]
{
- \normalsize\normalfont
- \titlerule*[#3]{\IfValueTF{#4}{\scalebox{#4}{#5}}{#5}}#6
+ \ifbool{@filesw}
{
- \IfBooleanF{#2}
- {
- \IfBooleanTF{#1}
- {\thecontentspage}
- {
- \bool_if:NTF \l__eb_toc_dot_align_bool
- { \contentspage }
- { \thecontentspage }
- }
- }
+ \tl_if_exist:cF { tf@#1 }
+ { \iow_new:c { tf@#1 }\iow_open:cn { tf@#1 } { \jobname.#1 } }
}
+ {}
+ }
+\cs_set:Npn \@starttoc #1
+ {
+ \group_begin:
+ \makeatletter
+ \file_if_exist_input:n { \jobname.#1 }
+ \UseHookWithArguments{starttoc/after}{1}{#1}
+ \boolfalse{@nobreak}
+ \group_end:
+ }
+\AddToHook{enddocument/afterlastpage}
+ {
+ \IfHookEmptyTF{starttoc/after}{}
+ {\iow_now:Nn \@mainaux { \RemoveFromHook{starttoc/after}[aux] }}
}
+\cs_set_protected:Npn \AllotPartialExt #1#2
+ {
+ \tl_set:cn { ttl@partial#1 } {#2}
+ \AddToHookWithArguments{cmd/ttl@writepartial/before}
+ {\ttl@topartial{#1}{##1}{##2}}
+ }
+\AllotPartialExt{lol}{pll}
+
\cs_set_eq:NN \eb@ctexsetii \ctex_set:nn
\cs_new_protected:Npn \SetTocStyle #1#2#3
{
@@ -1648,6 +1764,7 @@
}
\msg_new:nnn { easybase } { undefined-toc-style }
{ The~contents~style~'#1'~of~'#2'~is~not~defined. }
+
\ctex_set:n
{
part =
@@ -1711,7 +1828,7 @@
\ctex_assign_heading_name:nn { biappendix } {#1}
\bool_if:NTF \l__eb_class_mode_book_bool
{
- \eb_preto_cmd:nn { eb@before@addbitoc@hook }
+ \eb_preto_cmd:nn { eb@before@bitocline@hook }
{
\def\CTEX@prechapter{\CTEX@prebiappendix}
\def\CTEX@thechapter{#2}
@@ -1737,41 +1854,45 @@
}
}
-\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,
- caption-listing = #1
+ caption-table = {#1},caption-figure = {#1},
+ caption-listing = {#1}
},
caption-every .initial:n = \sffamily\small,
- footnote .tl_set:N = \eb@subfont@footnote,
+ footnote .tl_set:N = \eb@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}
+ \str_case:nn {#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}
}
+ { footnote }
+ { \tl_put_right:Nn \eb@font@footnote {#2} }
+ { marginpar }
+ { \tl_put_right:Nn \marginfont {#2} }
}
- { \tl_put_right:cn { l__eb_subfont_#1_tl } {#2} }
}
+\cs_set_eq:NN \addtosubfont \ebaddtofont
\ctex_define:nn { spread }
{
line .code:n = \setspread{#1},
@@ -1800,17 +1921,17 @@
caption-listing .fp_set:N = \l__eb_spread_caption_listing_fp,
caption-every .meta:n =
{
- caption-table = #1,caption-figure = #1,
- caption-listing = #1
+ caption-table = {#1},caption-figure = {#1},
+ caption-listing = {#1}
},
caption-every .initial:n = 1.2,
every .meta:n =
{
- line = #1,table = #1,math = #1,
- caption-every = #1,footnote = #1
+ line = {#1},table = {#1},math = {#1},
+ caption-every = {#1},footnote = {#1}
},
abovedisplayskip .code:n =
- {\AfterPreamble{\skip_set:Nn \abovedisplayskip {#1}}},
+ { \AfterPreamble{\skip_set:Nn \abovedisplayskip {#1}} },
abovedisplayskip .initial:n = 0.5ex plus .1ex minus .1ex,
belowdisplayskip .code:n =
{
@@ -1832,7 +1953,7 @@
\DeclareCaptionFont{eb@#1@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
@@ -1915,7 +2036,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}
@@ -2007,11 +2128,18 @@
\bool_if:NT \l__eb_theorem_support_bool
{
\RequirePackage{amsthm,thmtools}
- \cs_set_eq:NN \eb@declaretheoremsyle@save \declaretheoremstyle
+ \cs_set_eq:NN \eb@declaretheoremstyle@save \declaretheoremstyle
+ \cs_set_eq:NN \eb@declaretheorem@save \declaretheorem
\RenewDocumentCommand{\declaretheoremstyle}{O{}mO{}}
- {\eb@declaretheoremsyle@save[#1,#3]{#2}}
- \ctex_define:nn { thmset }
- { unknown .code:n = \eb_msg_deprecated_option:n { thmset } }
+ {\eb@declaretheoremstyle@save[#1,#3]{#2}}
+ \RenewDocumentCommand{\declaretheorem}{O{}mO{}}
+ {\eb@declaretheorem@save[style = default,#1,#3]{#2}}
+ \ctex_define:nn { thmt }
+ {
+ loeskip .skip_set:N = \eb@thmt@loe@skip,
+ loeskip .initial:n = 10pt,
+ unknown .code:n = \eb_msg_deprecated_option:n { thmt }
+ }
\declaretheoremstyle{default}[
spaceabove = 0ex plus .1ex,
spacebelow = 0ex plus .1ex,
@@ -2024,6 +2152,36 @@
]
\theoremstyle{default}
\cs_undefine:N \proof
+ \DeclareFloatList{theorem}{loe}
+ \AllotPartialExt{loe}{ple}
+ \eb_preto_cmd:nn { listoftheorems }
+ {
+ \group_begin:
+ \def\contentsline #1 {\use:c { thmt@contentsline@#1 }{#1}}
+ }
+ \eb_appto_cmd:nn { listoftheorems } { \group_end: }
+ \eb_preto_cmd:nn { @chapter }
+ {
+ \skip_if_eq:nnF { \eb@thmt@loe@skip } { \c_zero_skip }
+ { \addtocontents{loe}{\protect\addvspace{\skip_use:N \eb@thmt@loe@skip}} }
+ }
+ \def\thmtlo@chaptervspacehack{}
+ \def\thmtname{\thmt@thmname}
+ \def\thmtenvname{\thmt@envname}
+ \def\thmtnote{\thmt@shortoptarg}
+ \def\thmtformatoptarg #1 {#1}
+ \def\thmtifname #1#2 {\ifbool{thmt@isstarred}{#2}{#1}}
+ \def\thmtifnote #1#2
+ {
+ \tl_if_empty:NTF \thmt@shortoptarg
+ {#2}
+ { \protect\thmtformatoptarg{#1} }
+ }
+ \NewDocumentCommand{\settheoremtocline}{smm}
+ {
+ \IfBooleanT{#1}{\def\thmt@contentslineIgnore{\thmt@contentsline}}
+ \cs_set:cpn { ll@#2 } {#3}
+ }
}
\setchemformula
@@ -2074,7 +2232,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,
@@ -2084,9 +2242,9 @@
bibstyle .initial:n = numerical,
citestyle .tl_set:N = \l__eb_bib_cite_style_tl,
datafile .clist_set:N = \l__eb_bib_datafile_clist,
- bititle .tl_set:N = \eb@bib@bitoc@title,
+ bititle .tl_set:N = \bibibname,
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:
@@ -2129,8 +2287,8 @@
\cs_new_protected:Npn \eb_biber_toc_title:n #1
{
\bool_if:NTF \l__eb_class_mode_book_bool
- { \bichapter*{#1}{\eb@bib@bitoc@title} }
- { \bisection*{#1}{\eb@bib@bitoc@title} }
+ { \bichapter*{#1}{\bibibname} }
+ { \bisection*{#1}{\bibibname} }
}
\cs_new_protected:Npn \eb_biber_biblatex_set:
{
@@ -2198,6 +2356,12 @@
\lstloadlanguages{C,C++,Java,Python,Matlab}
\clist_new:N \l__eb_hyperref_clist
+\cs_new_protected:Npn \eb_set_hyperref:n #1
+ {
+ \IfPackageLoadedTF{hyperref}
+ {\hypersetup}
+ {\eb_put_hyperref:n}{#1}
+ }
\cs_new_protected:Npn \eb_put_hyperref:n #1
{ \clist_put_right:Nn \l__eb_hyperref_clist {#1} }
\cs_new_protected:Npn \eb_define_link_color:nnn #1#2#3
@@ -2209,9 +2373,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
@@ -2231,7 +2395,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,
@@ -2246,7 +2410,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,
@@ -2262,37 +2426,21 @@
color-every .code:n = \eb_define_theme_color:n { \exp_not:n {#1} }
}
-\bool_new:N \l__eb_toc_number_color_bool
\cs_new_protected:Npn \eb_link_border_set:n #1
{
- \bool_set_false:N \l__eb_toc_number_color_bool
\ctex_at_end_package:nn { hyperref }
{
\def\@pdfborder{#1}
\def\Hy@colorlink ##1 {\begingroup}
\def\Hy@endcolorlink{\endgroup}
}
- \eb_put_hyperref:n { colorlinks = false }
+ \eb_set_hyperref:n { colorlinks = false }
}
\cs_new_protected:Npn \eb_link_colors_set:
- {
- \bool_set_true:N \l__eb_toc_number_color_bool
- \colorlet{ctex@toc@number}{ctex@link}
- \eb_put_hyperref:n { colorlinks }
- }
+ { \eb_set_hyperref:n { colorlinks } }
\cs_new_protected:Npn \eb_link_toc_put:n #1
- {
- \eb_put_hyperref:n { linktoc = #1 }
- \eb_seq_map_inline:nn { page,none }
- {
- \tl_if_eq:NnT \l_keys_value_tl {##1}
- {
- \colorlet{ctex@toc@number}{black}
- \seq_map_break:
- }
- }
- }
-\ctex_define:nn { refset }
+ { \eb_set_hyperref:n { linktoc = #1 } }
+\ctex_define:nn { ref }
{
linktype .choice:,
linktype .value_required:n = true,
@@ -2302,17 +2450,11 @@
linktype/various .meta:n = linktype/colors,
linktype .initial:n = edge,
linktoc .choice:,
+ linktoc .value_required:n = true,
linktoc/unknown .code:n = \eb_link_toc_put:n {#1},
- linktoc .default:n = all,
linktoc .initial:n = all,
- unknown .code:n =
- {
- \eb_put_hyperref:x
- {
- \l_keys_key_str
- \tl_if_empty:NF \l_keys_value_tl { = {#1} }
- }
- }
+ 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:
@@ -2370,7 +2512,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 }
{
@@ -2380,7 +2523,8 @@
listfigurename = 插图清单,
listtablename = 附表清单,
lstlistlistingname = 代码清单,
- lstlistingname = 代码
+ lstlistingname = 代码,
+ listtheoremname = 定理清单
}
}
{
@@ -2392,7 +2536,7 @@
}
%</package>
%<*tcolorbox>
-\ProvidesExplFile{eb-tcolorbox.cfg}{2024/03/15}{2024ap}
+\ProvidesExplFile{eb-tcolorbox.cfg}{2024/05/10}{2024bn}
{Customization of tcolorbox for easybook}
\cs_set_protected:Npn \addtotcbstyle #1#2