diff options
Diffstat (limited to 'macros/latex/contrib/easybook/easybook.dtx')
-rw-r--r-- | macros/latex/contrib/easybook/easybook.dtx | 546 |
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 |