diff options
Diffstat (limited to 'Master/texmf-dist/tex/latex/easybook/easybook.cls')
-rw-r--r-- | Master/texmf-dist/tex/latex/easybook/easybook.cls | 1818 |
1 files changed, 5 insertions, 1813 deletions
diff --git a/Master/texmf-dist/tex/latex/easybook/easybook.cls b/Master/texmf-dist/tex/latex/easybook/easybook.cls index 43e8a2d0679..1be9f3f00e8 100644 --- a/Master/texmf-dist/tex/latex/easybook/easybook.cls +++ b/Master/texmf-dist/tex/latex/easybook/easybook.cls @@ -12,42 +12,8 @@ %% The latest version of this license is in %% https://creativecommons.org/licenses/by/4.0/legalcode \NeedsTeXFormat{LaTeX2e}[2020/10/01] -\RequirePackage{l3keys2e,etoolbox} -\ProvidesExplClass{easybook}{2021/05/31}{1.25p}{beta} - -\cs_generate_variant:Nn \eb_ctex_define:nn { nx } -\cs_generate_variant:Nn \int_to_arabic:n { v } -\cs_generate_variant:Nn \dim_add:Nn { NV } -\cs_generate_variant:Nn \eb_put_hyperref:n { x } -\cs_generate_variant:Nn \seq_set_from_clist:Nn { No } -\cs_new_protected:Npn \eb_ctex_define:nn #1 - { \keys_define:nn { ctex/#1 } } -\cs_new_protected:Npn \eb_put_ctexbook:n #1 - { \PassOptionsToClass{#1}{ctexbook} } -\cs_new_protected:Npn \eb_patch_cmd:Nnn #1#2#3 - { - \ctex_patch_cmd_once:NnnnTF #1 { } {#2} {#3} - { } { \ctex_patch_failure:N #1 } - } -\cs_new_protected:Npn \eb_preto_cmd:Nn #1#2 - { - \ctex_preto_cmd:NnnTF #1 { } {#2} - { } { \ctex_patch_failure:N #1 } - } -\cs_new_protected:Npn \eb_appto_cmd:Nn #1#2 - { - \ctex_appto_cmd:NnnTF #1 { } {#2} - { } { \ctex_patch_failure:N #1 } - } -\cs_new_protected:Npn \eb_at_begin_environment:nn #1#2 - { - \seq_set_from_clist:No \l__eb_env_hook_name_seq {#1} - \seq_map_inline:Nn \l__eb_env_hook_name_seq - { \AtBeginEnvironment{##1}{#2} } - } -\cs_new_protected:Npn \eb_at_end_preamble:n - { \ctex_gadd_ltxhook:nn { env/document/before } } -\cs_gset_eq:NN \PackageWarning \use_none:nn +\RequirePackage{l3keys2e} +\ProvidesExplClass{easybook}{2021/06/02}{1.25q}{beta} \bool_set_false:N \l__eb_compile_draft_bool \bool_set_false:N \l__eb_title_newline_bool @@ -56,6 +22,8 @@ \bool_set_true:N \l__eb_class_book_bool \tl_new:N \g__eb_config_tl \clist_new:N \g__eb_options_clist +\cs_new_protected:Npn \eb_put_ctexbook:n #1 + { \PassOptionsToClass{#1}{ctexbook} } \keys_define:nn { easybook } { @@ -111,129 +79,16 @@ } \ProcessKeysOptions{easybook} - -\clist_map_inline:nn - { - { svgnames } { xcolor }, - { stable } { footmisc }, - { normalem } { ulem }, - { protrusion = false } { microtype }, - { list = off } { bicaption }, - { shortlabels,inline } { enumitem }, - { many } { tcolorbox }, - { xindy } { imakeidx }, - { CJKmath = true } { xeCJK }, - { no-math } { fontspec }, - { upint } { newtxmath } - } - { \PassOptionsToPackage #1 } \eb_put_ctexbook:n { \g__eb_options_clist } \LoadClass[UTF8]{ctexbook} -\bool_new:N \l__eb_multoc_bool -\bool_new:N \l__eb_uppercase_bool -\bool_new:N \l__eb_chap_withpart_bool -\tl_new:N \l__eb_foot_numparent_choice_tl - -\seq_const_from_clist:Nn \c__eb_options_path_seq - { - style,subfont,spread, - refset,bibset,thmset, - geoset,hdrset,tocset - } -\seq_map_inline:Nn \c__eb_options_path_seq - { - \ctex_define:n { #1 .meta:nn = { ctex/#1 } {##1} } - \cs_new:cpn {#1} ##1 { \keys_set:nn { ctex/#1 } {##1} } - } -\keys_define:nn { } { ctex/link .inherit:n = ctex/refset } -\cs_set_eq:NN \link \refset -\ctex_define:n - { - link .meta:nn = { ctex/link } {#1}, - lstlistlistingname .tl_set:N = \lstlistlistingname, - lstlistingname .tl_set:N = \lstlistingname - } -\eb_ctex_define:nn { style } - { - multoc .bool_set:N = \l__eb_multoc_bool, - multoc .default:n = true, - withpart .bool_set:N = \l__eb_chap_withpart_bool, - withpart .default:n = true, - withpart .initial:n = false, - rulewidth .dim_set:N = \l__eb_rule_width_dim, - rulewidth .initial:n = 0.75pt, - uppercase .bool_set:N = \l__eb_uppercase_bool, - uppercase .default:n = true, - uppercase .initial:n = true, - figurepath .tl_set:N = \l_eb_graphics_path_tl, - - footwith .choices:nn = - { part,page,chapter } - { - \tl_set_eq:NN - \l__eb_foot_numparent_choice_tl \l_keys_choice_tl - }, - footwith .value_required:n = true, - footwith .initial:n = chapter, - - figure-sep .tl_set:N = \l__eb_figure_separator_tl, - table-sep .tl_set:N = \l__eb_table_separator_tl, - listing-sep .tl_set:N = \l__eb_lstlisting_separator_tl, - equation-sep .tl_set:N = \l__eb_equation_separator_tl, - number-sep .meta:n = - { - figure-sep = #1, - table-sep = #1, - listing-sep = #1, - equation-sep = #1 - }, - number-sep .initial:n = { . } - } - -\RequirePackage - { - xcolor, - footmisc,setspace, - amsmath,amsthm,thmtools, - chemformula,siunitx,ulem,pifont, - geometry,marginnote,nccfoots, - pdfpages,graphicx, - fancyhdr,titletoc,caption, - tabularray, - enumitem, - listings - } +\RequirePackage{easybase} \ctex_at_end:n { \tl_if_empty:NF \g__eb_config_tl { \file_input:n { \g__eb_config_tl } } } -\cs_new_protected:Npn \eb_package_later_bool:nn #1#2 - { - \@ifpackagelater{#1}{#2} - {}{\msg_warning:nnn { easybook } { package-old } {#1}} - } -\msg_new:nnn { easybook } { package-old } - { - Package~#1~has~been~out~of~date. \\ - Some~problems~or~errors~may~occur \\ - if~you~continue~compiling. \\\\ - Please~update~your~macro~package~from~CTAN. - } -\clist_map_inline:nn - { - { expl3 } { 2020/10/27 }, - { xparse } { 2020/10/27 }, - { l3keys2e } { 2020/10/27 }, - { ctex } { 2021/03/14 }, - { thmtools } { 2020/08/01 }, - { caption } { 2020/08/24 }, - { siunitx } { 2021/05/17 } - } - { \eb_package_later_bool:nn #1 } - \sys_if_engine_xetex:TF { \cs_new_eq:NN \eb_set_family:nnn \xeCJK_set_family:nnn @@ -331,1669 +186,6 @@ \cs_new_protected:Npn \fangsong { \eb_switch_family:n { fangsong } } } -\includepdfset{fitpaper = true} -\geometry - { - vmargin = 2.54cm, - hmargin = 3.17cm, - columnsep = 2\ccwd, - headheight = 2.04cm, - headsep = 0.5cm, - footskip = 0.79cm, - footnotesep = 0.5cm, - marginparsep = 8pt, - marginparwidth = 2.54cm - } -\clist_new:N \g__eb_geometry_clist -\eb_ctex_define:nn { geoset } - { - unknown .code:n = - { - \clist_gput_right:Nx \g__eb_geometry_clist - { - \l_keys_key_str - \tl_if_empty:NF \l_keys_value_tl { = {#1} } - } - } - } - -\RenewDocumentCommand{\cleardoublepage}{O{empty}} - { - \clearpage - \bool_if:NT \l__eb_page_twoside_bool - { - \int_if_odd:nF { \c@page } - { \hbox:n { }\thispagestyle{#1}\clearpage } - } - } -\RenewDocumentCommand{\frontmatter}{sO{Roman}} - { - \IfBooleanTF{#1}{\clearpage}{\cleardoublepage} - \boolfalse{@mainmatter} - \pagenumbering{#2} - } -\RenewDocumentCommand{\mainmatter}{s} - { - \IfBooleanTF{#1}{\clearpage}{\cleardoublepage} - \booltrue{@mainmatter} - \pagenumbering{arabic} - } -\seq_const_from_clist:Nn \c__eb_mark_title_level_seq - { chapter,section,subsection } -\seq_map_inline:Nn \c__eb_mark_title_level_seq - { - \exp_args:Nc \NewDocumentCommand { eb@mark@#1@label@layout } - {O{\use:c { CTEXthe#1 }}m} - {\tl_set:cn { eb@mark@#1@label } {##1##2}} - \cs_new:cpn { eb_mark_#1_number_bool:n } ##1 - { - \tl_if_in:nnTF {##1} { [ } - { \use:c { eb@mark@#1@label@layout } ##1 } - { \use:c { eb@mark@#1@label@layout } {##1} } - } - } - -\cs_gset_eq:NN \easyhead \fancyhead -\cs_gset_eq:NN \easyfoot \fancyfoot -\eb_ctex_define:nn { hdrset } - { - head-foot .tl_set:N = \l__eb_fancyhf_content_tl, - head-foot .initial:n = - { - \bool_if:NTF \l__eb_page_twoside_bool - { - \easyhead[EC]{\color{ctex@frame}\kaishu\leftmark} - \easyhead[OC]{\color{ctex@frame}\kaishu\rightmark} - \easyhead[EL,OR]{\color{ctex@frame}\thepage} - } - { - \easyhead[L]{\color{ctex@frame}\kaishu\leftmark} - \easyhead[R]{\color{ctex@frame}\thepage} - } - }, - - chap-mark .cs_set:Np = \eb_fancyhf_chapter_mark:n #1, - chap-mark .initial:n = - { - \int_compare:nNnT { \c@secnumdepth } > { -1 } - { - \ifbool{@mainmatter} - { - \int_if_odd:nT { \CTEX@chapter@numbering } - { \eb@mark@chapter@label } - }{} - }#1 - }, - sec-mark .cs_set:Np = \eb_fancyhf_section_mark:n #1, - sec-mark .initial:n = - { - \int_compare:nNnT { \c@secnumdepth } > { 0 } - { - \int_if_odd:nT { \CTEX@section@numbering } - { \eb@mark@section@label } - }#1 - }, - subsec-mark .cs_set:Np = \eb_fancyhf_subsection_mark:n #1, - subsec-mark .initial:n = - { - \int_compare:nNnT { \c@secnumdepth } > { 1 } - { - \int_if_odd:nT { \CTEX@subsection@numbering } - { \eb@mark@subsection@label } - }#1 - }, - chap-label .code:n = \eb_mark_chapter_number_bool:n {#1}, - chap-label .initial:n = \hspace{\ccwd}, - sec-label .code:n = \eb_mark_section_number_bool:n {#1}, - sec-label .initial:n = \hspace{0.5\ccwd}, - subsec-label .code:n = \eb_mark_subsection_number_bool:n {#1}, - subsec-label .initial:n = \hspace{0.5\ccwd}, - - headrule .tl_gset:N = \headrule, - headrule .initial:n = - { - \group_begin: - \color{ctex@frame}\vspace*{1.5pt} - \hrule width \textwidth height \l__eb_rule_width_dim - \group_end: - }, - footrule .tl_gset:N = \footrule, - footrule .initial:n = { }, - footnoterule .tl_gset:N = \footnoterule, - footnoterule .initial:n = - { - \group_begin: - \color{ctex@frame} - \hrule width 0.35\columnwidth height \l__eb_rule_width_dim - \vspace*{2.6pt} - \group_end: - }, - - fnmargin .dim_set:N = \footnotemargin, - fnmargin .initial:n = 0.75\ccwd, - fnparskip .tl_set:N = \hangfootparskip, - fnparskip .initial:n = 0ex, - fnparindent .tl_set:N = \hangfootparindent, - fnparindent .initial:n = 2\ccwd, - - fnhang .bool_set:N = \l__eb_footnote_hang_bool, - fnhang .default:n = true, - fnhang .initial:n = true, - fnmark-pos .tl_set:N = \l__eb_fnmark_position_tl, - fnmark-pos .initial:n = super, - afterfnmark .tl_set:N = \l__eb_fnmark_after_tl, - afterfnmark .initial:n = - { \tl_if_eq:NnF \l__eb_fnmark_position_tl { super } { \space } }, - fnmark-form .tl_set:N = \l__eb_fnmark_format_tl, - - fnmark-num .choices:nn = - { plain,pifont,pifont*,pifont-sans,pifont-sans* } - { - \tl_gset_eq:NN - \l__eb_fnmark_number_choice_tl \l_keys_choice_tl - }, - fnmark-num .value_required:n = true - } - -\cs_new:Npn \eb_upper_number_mark_bool:nn #1#2 - { - \bool_if:NT \l__eb_uppercase_bool - { \text_uppercase:n } {\use:c { eb_fancyhf_#1_mark:n } {#2}} - } -\cs_new:Npn \eb@number@markdouble #1#2 - { - \markboth - {\eb_upper_number_mark_bool:nn {#1} {#2}} - { - \bool_if:NT \l__eb_page_twoside_bool - { \eb_upper_number_mark_bool:nn {#1} {#2} } - } - } -\cs_new:Npn \eb@number@markright #1#2 - { \markright{\eb_upper_number_mark_bool:nn {#1} {#2}} } -\ctex_at_end_preamble:n - { - \exp_args:NV \geometry \g__eb_geometry_clist - \fancyhf{} - \tl_use:N \l__eb_fancyhf_content_tl - \cs_gset_eq:NN \ps@plain \ps@empty - \pagestyle{fancy} - \bool_if:NTF \l__eb_class_book_bool - { - \cs_gset:Npn \chaptermark #1 - { \eb@number@markdouble{chapter}{#1} } - \cs_gset:Npn \sectionmark #1 - { \eb@number@markright{section}{#1} } - } - { - \cs_gset:Npn \sectionmark #1 - { \eb@number@markdouble{section}{#1} } - \cs_gset:Npn \subsectionmark #1 - { \eb@number@markright{subsection}{#1} } - } - \bool_if:NT \l__eb_compile_draft_bool - { - \easyfoot[C]{\color{SlateGray}\sffamily\today} - \geometry{showframe} - } - \tl_if_empty:NF \l_eb_graphics_path_tl - { \exp_args:No \graphicspath { \l_eb_graphics_path_tl } } - \cs_if_exist:NF \kaishu { \cs_gset_eq:NN \kaishu \itshape } - } - -\eb_at_end_preamble:n - { - \group_begin: - \footnotesize - \exp_args:Nx - \linespread{\fp_use:N \l__eb_spread_footnote_fp}\selectfont - \exp_args:NNNo \group_end: - \dim_set:Nn \footnotesep { \dim_use:N \box_ht:N \strutbox } - \bool_if:NT \l__eb_chap_withpart_bool - { \counterwithin*{chapter}{part} } - \tl_if_eq:NnT \l__eb_foot_numparent_choice_tl { part } - { - \counterwithout*{footnote}{chapter} - \counterwithin*{footnote}{part} - } - \tl_if_eq:NnT \l__eb_foot_numparent_choice_tl { page } - { - \counterwithout*{footnote}{chapter} - \counterwithin*{footnote}{page} - } - \bool_if:NTF \l__eb_footnote_hang_bool - { \booltrue{FN@hangfoot} } { \boolfalse{FN@hangfoot} } - } -\eb_patch_cmd:Nnn \@footnotetext - { \reset@font } - { - \linespread{\fp_use:N \l__eb_spread_footnote_fp} - \selectfont\ignorespaces - \l__eb_subfont_footnote_tl - } -\eb_patch_cmd:Nnn \@mpfootnotetext - { \reset@font } - { - \linespread{\fp_use:N \l__eb_spread_footnote_fp} - \selectfont\ignorespaces - \l__eb_subfont_footnote_tl - } -\ctex_after_end_preamble:n - { - \ExplSyntaxOn\char_set_catcode_letter:N \@ - \eb_patch_cmd:Nnn \@footnotemark - { \@makefnmark } - { - \tl_use:N \l__eb_subfont_footnote_tl - \tl_use:N \l__eb_fnmark_format_tl - {\hbox:n { \textsuperscript{\@thefnmark} }} - } - \ExplSyntaxOff\char_set_catcode_other:N \@ - } -\cs_set:Npn \@makefnmark - { - \tl_use:N \l__eb_subfont_footnote_tl - \tl_use:N \l__eb_fnmark_format_tl - { - \hbox:n - { - \tl_if_eq:NnT \l__eb_fnmark_position_tl { super } - { \textsuperscript }{\@thefnmark} - \tl_use:N \l__eb_fnmark_after_tl - } - } - } -\cs_set:Npn \thefootnote { \eb_footnote_counter:N \c@footnote } -\cs_set:Npn \thempfootnote { \int_to_alph:n { \c@mpfootnote } } - -\cs_new_protected:Npn \eb_fnmark_number_set:nn #1#2 - { \tl_const:cn { c__eb_fnmark_number_#1_tl } {#2} } -\clist_map_inline:nn - { - { plain } { plain }, - { pifont } { pifont }, - { pifont_neg } { pifont* }, - { pifont_sans } { pifont-sans }, - { pifont_sans_neg } { pifont-sans* } - } - { \eb_fnmark_number_set:nn #1 } -\cs_new:Npn \eb_fnmark_counter_pifont:N #1 - { \ding{\int_eval:n { 171 + #1 }} } -\cs_new:Npn \eb_fnmark_counter_pifont_neg:N #1 - { \ding{\int_eval:n { 181 + #1 }} } -\cs_new:Npn \eb_fnmark_counter_pifont_sans:N #1 - { \ding{\int_eval:n { 191 + #1 }} } -\cs_new:Npn \eb_fnmark_counter_pifont_sans_neg:N #1 - { \ding{\int_eval:n { 201 + #1 }} } -\cs_new:Npn \eb_footnote_counter:N #1 - { - \tl_case:NnF \l__eb_fnmark_number_choice_tl - { - \c__eb_fnmark_number_plain_tl - { \int_use:N #1 } - \c__eb_fnmark_number_pifont_tl - { \eb_fnmark_counter_pifont:N #1 } - \c__eb_fnmark_number_pifont_neg_tl - { \eb_fnmark_counter_pifont_neg:N #1 } - \c__eb_fnmark_number_pifont_sans_tl - { \eb_fnmark_counter_pifont_sans:N #1 } - \c__eb_fnmark_number_pifont_sans_neg_tl - { \eb_fnmark_counter_pifont_sans_neg:N #1 } - } - { \int_use:N #1 } - } - -\contentsuse{lstlisting}{lol} -\seq_const_from_clist:Nn \c__eb_toc_heading_level_seq - { part,chapter,section,subsection,figure,table,lstlisting } -\cs_new_protected:Npn \eb_toc_assign_keys:n #1 - { - \ctex_define:n { tocset/#1 .meta:nn = { ctex/tocset/#1 } {##1} } - \eb_ctex_define:nn { tocset } - { - #1/format .tl_set:c = l__eb_toc_#1_format_tl, - #1/format+ .code:n = - { \tl_put_right:cn { l__eb_toc_#1_format_tl } {##1} }, - #1/format~+ .code:n = - { \tl_put_right:cn { l__eb_toc_#1_format_tl } {##1} }, - #1/indent .tl_set:c = l__eb_toc_#1_indent_tl, - #1/rule .tl_set:c = l__eb_toc_#1_rule_tl, - #1/numsep .tl_set:c = eb@toc@#1@numsep - } - \seq_if_in:NnF \c__eb_toc_heading_level_seq { subsection } - { - \eb_ctex_define:nn { tocset } - { #1/belowoffset .dim_set:c = l__eb_toc_#1_offset_dim } - } - \seq_pop:NN \c__eb_toc_heading_level_seq \l_tmpa_tl - \titlecontents{#1} - [\use:c { l__eb_toc_#1_indent_tl }] - {\use:c { l__eb_toc_#1_format_tl }} - { - \ifbool{eb@titletoc@hang@fix} - { - \contentspush - { - \bool_if:NT \l__eb_toc_number_color_bool - { \color{ctex@toc@number} } - \thecontentslabel - \hspace{\use:c { eb@toc@#1@numsep }} - } - }{} - }{} - {\use:c { l__eb_toc_#1_rule_tl }} - } -\seq_map_function:NN -\c__eb_toc_heading_level_seq \eb_toc_assign_keys:n - -\seq_const_from_clist:Nn \c__eb_toc_list_meta_keys_seq - { format,format+,format~+,indent,rule,numsep,belowoffset } -\ctex_define:n { tocset/list .meta:nn = { ctex/tocset/list } {#1} } -\seq_map_inline:Nn \c__eb_toc_list_meta_keys_seq - { - \eb_ctex_define:nn { tocset } - { - list/#1 .meta:n = - { - figure/#1 = ##1, - table/#1 = ##1, - lstlisting/#1 = ##1 - } - } - } - -\cs_new:Npn \EbNumberLine #1 - { - \CTEXifname - { - \use:c { CTEXthe#1 } - \hspace{\use:c { eb@toc@#1@numsep }} - }{} - } -\newbool{eb@titletoc@hang@fix} -\eb_ctex_define:nn { tocset } - { - lolskip .skip_set:N = \l__eb_toc_lolskip_skip, - lolskip .initial:n = 0.8pc, - - belowoffset .dim_set:N = \l__eb_toc_offset_dim, - belowoffset .initial:n = - { \bool_if:NTF \l__eb_class_book_bool { -1pc } { -0.35pc } }, - tocline-fig .cs_set:Np = \eb@labelname@lof #1, - tocline-fig .initial:n = - { - \figurename\space #1 - \notbool{eb@titletoc@hang@fix} - {\hspace{\eb@toc@figure@numsep}}{} - }, - tocline-tab .cs_set:Np = \eb@labelname@lot #1, - tocline-tab .initial:n = - { - \tablename\space #1 - \notbool{eb@titletoc@hang@fix} - {\hspace{\eb@toc@table@numsep}}{} - }, - tocline-lst .tl_set:N = \eb@labelname@lol, - tocline-lst .initial:n = - { - \lstlistingname\space\thelstlisting - \notbool{eb@titletoc@hang@fix} - {\hspace{\eb@toc@lstlisting@numsep}}{} - }, - line-align .bool_set:N = \l__eb_toc_line_align_bool, - line-align .default:n = true, - line-align .initial:n = true, - - hang .choice:, - hang/true .code:n = - { - \booltrue{eb@titletoc@hang@fix} - \ctex_set:n - { - chapter/tocline = \CTEXnumberline{##1}##2, - section/tocline = \CTEXnumberline{##1}##2, - subsection/tocline = \CTEXnumberline{##1}##2 - } - }, - hang/false .code:n = - { - \ctex_set:n - { - chapter/tocline = \EbNumberLine{##1}##2, - section/tocline = \EbNumberLine{##1}##2, - subsection/tocline = \EbNumberLine{##1}##2 - } - }, - hang .default:n = true, - hang .initial:n = false, - - numsep-all .meta:n = - { - part/numsep = #1, - chapter/numsep = #1, - section/numsep = #1, - subsection/numsep = #1, - list/numsep = #1 - }, - numsep-all .initial:n = \ccwd, - indent-all .meta:n = - { - part/indent = #1, - chapter/indent = #1, - section/indent = #1, - subsection/indent = #1, - list/indent = #1 - }, - rule-all .meta:n = - { - part/rule = #1, - chapter/rule = #1, - section/rule = #1, - subsection/rule = #1, - list/rule = #1 - } - } - -\NewDocumentCommand{\tocrule}{sO{0.7pc}D(){1.2}mO{}} - { - \normalsize\normalfont - \titlerule*[#2]{\scalebox{#3}{#4}}#5 - \IfBooleanTF{#1} - {\thecontentspage} - { - \bool_if:NTF \l__eb_toc_line_align_bool - { \contentspage } { \thecontentspage } - } - } -\ctex_set:nn { tocset } - { - part/format = \addvspace{1pc}\sffamily\large, - part/indent = 0\ccwd, - part/rule = \tocrule{}[\bfseries], - - chapter/format = \addvspace{1pc}\sffamily\large, - chapter/indent = 0\ccwd, - chapter/rule = \tocrule{$\cdot$}[\bfseries], - - section/format = \addvspace{0.35pc}, - section/indent = - { \bool_if:NTF \l__eb_class_book_bool { 1.5\ccwd } { 0\ccwd } }, - section/rule = \tocrule{$\cdot$}, - - subsection/format = \addvspace{0.35pc}, - subsection/indent = - { \bool_if:NTF \l__eb_class_book_bool { 3.8\ccwd } { 1.4\ccwd } }, - subsection/rule = \tocrule{$\cdot$}, - - list/format = \addvspace{0.2pc}, - list/indent = 0\ccwd, - list/rule = \tocrule{$\cdot$}, - list/belowoffset = - { \bool_if:NTF \l__eb_class_book_bool { 0pc } { 0.15pc } } - } - -\prop_new:N \l__eb_label_name_prop -\prop_set_from_keyval:Nn \l__eb_label_name_prop - { - figure = \eb@labelname@lof, - table = \eb@labelname@lot - } -\cs_gset:Npn \caption@@@addcontentsline #1#2#3#4 - { - \addcontentsline{#1}{#2} - { - \ifbool{eb@titletoc@hang@fix}{\protect\numberline}{} - {\prop_item:Nn \l__eb_label_name_prop {#2}{#3}}#4 - } - } -\ctex_patch_cmd:Nnn \lst@MakeCaption - { - \addcontentsline{lol}{lstlisting} - {\protect\numberline{\thelstlisting}\lst@@caption} - } - { - \addcontentsline{lol}{lstlisting} - { - \ifbool{eb@titletoc@hang@fix}{\protect\numberline}{} - {\eb@labelname@lol}\lst@@caption - } - } - -\contentsuse{}{tec} -\cs_set_protected:Npn \CTEX@addbitocline #1#2 - { - \group_begin: - \def\CTEX@prechapter{\CTEX@prebichapter} - \def\CTEX@thechapter{\CTEX@bichapter@number} - \def\CTEX@postchapter{\CTEX@postbichapter} - \addcontentsline{tec}{#1} - {\use:c { CTEX@#1@tocline }{#1}{#2}} - \group_end: - } -\seq_const_from_clist:Nn \c__eb_bitoc_title_level_seq - { chapter,section,subsection } -\seq_map_inline:Nn \c__eb_bitoc_title_level_seq - { - \exp_args:Nc \NewDocumentCommand {bi#1}{sO{##3}mm} - { - \IfBooleanTF{##1} - { - \use:c {#1}*{\phantomsection ##3} - \CTEX@addtocline{#1}{##2} - \tl_if_empty:oF {##4} { \CTEX@addbitocline{#1}{##4} } - }{ - \use:c {#1}[##2]{##3} - \tl_if_empty:oF {##4} { \CTEX@addbitocline{#1}{##4} } - } - } - } - -\eb_appto_cmd:Nn \@chapter - { - \skip_if_eq:nnF { \l__eb_toc_lolskip_skip } { \c_zero_skip } - { - \addtocontents{lol} - {\protect\addvspace{\skip_use:N \l__eb_toc_lolskip_skip}} - } - \bool_if:NF \l__eb_class_book_bool - { \msg_error:nn { easybook } { no-chapter } } - } -\eb_appto_cmd:Nn \@schapter - { - \bool_if:NF \l__eb_class_book_bool - { \msg_error:nn { easybook } { no-chapter } } - } -\msg_new:nnn { easybook } { no-chapter } - { - Your~document~class~is~in~article~mode. \\ - The~\string\chapter\space~command~will~not~be~used. - } - -\tl_set:Nn \l__eb_toc_type_tl { book } -\tl_new:N \eb@bitoc@title -\keys_define:nn { eb/listoc } - { - article .code:n = \tl_set:Nn \l__eb_toc_type_tl { article }, - book .code:n = { }, - multoc .bool_set:N = \l__eb_multoc_bool, - multoc .default:n = true, - multoc .initial:n = false, - title .code:n = \eb_assign_toc_title:n {#1} - } -\bool_if:NTF \l__eb_class_book_bool - { \keys_define:nn { } { eb/listoc .inherit:n = ctex/chapter } } - { \keys_define:nn { } { eb/listoc .inherit:n = ctex/section } } -\NewDocumentCommand{\eb_assign_toc_title:n} - {>{\SplitArgument{1}{,}}m} - {\eb_assign_toc_title_judge:nn #1} -\cs_new_protected:Npn \eb_assign_toc_title_judge:nn #1#2 - { - \tl_set:Nn \eb@toc@title {#1} - \tl_if_novalue:nTF {#2} - { \tl_clear:N \eb@bitoc@title } - { \tl_set:Nn \eb@bitoc@title {#2} } - } - -\cs_new:Npn \eb_upper_nonumber_mark_bool:n #1 - { - \bool_if:NTF \l__eb_uppercase_bool - { \text_uppercase:n {#1} } - { \text_titlecase_first:n {#1} } - } -\cs_new:Npn \eb@nonumber@markdouble #1 - { - \markboth - {\eb_upper_nonumber_mark_bool:n {#1}} - { - \bool_if:NT \l__eb_page_twoside_bool - { \eb_upper_nonumber_mark_bool:n {#1} } - } - } -\cs_new:Npn \eb@nonumber@markright #1 - { \markright{\eb_upper_nonumber_mark_bool:n {#1}} } - -\cs_new_protected:Npn \eb_title_mark_intoc:n #1 - { - \tl_if_eq:NnTF \l__eb_toc_type_tl { book } - { - \bichapter*{#1}{\eb@bitoc@title} - \eb@nonumber@markdouble{#1} - } - { - \bisection*{#1}{\eb@bitoc@title} - \bool_if:NTF \l__eb_class_book_bool - { \eb@nonumber@markright{#1} } - { \eb@nonumber@markdouble{#1} } - } - } -\cs_new_protected:Npn \eb_title_mark_notoc:n #1 - { - \tl_if_eq:NnTF \l__eb_toc_type_tl { book } - { - \chapter*{\phantomsection #1} - \eb@nonumber@markdouble{#1} - } - { - \section*{\phantomsection #1} - \bool_if:NTF \l__eb_class_book_bool - { \eb@nonumber@markright{#1} } - { \eb@nonumber@markdouble{#1} } - } - } -\cs_new_protected:Npn \eb_title_number_intoc_bool:nn #1#2 - { - \IfBooleanTF{#1} - { - \tl_if_eq:NnTF \l__eb_toc_type_tl { book } - { \bichapter{\eb@toc@title}{\eb@bitoc@title} } - { \bisection{\eb@toc@title}{\eb@bitoc@title} } - }{ - \IfBooleanTF{#2} - {\eb_title_mark_notoc:n {\eb@toc@title}} - {\eb_title_mark_intoc:n {\eb@toc@title}} - } - } -\cs_new_protected:Npn \eb_biber_title_level_bool:n #1 - { - \bool_if:NTF \l__eb_class_book_bool - { \bichapter*{#1}{\l__eb_bib_bitoc_title} } - { \bisection*{#1}{\l__eb_bib_bitoc_title} } - \eb@nonumber@markdouble{#1} - } -\cs_new_protected:Npn \eb_multoc_pre_bool: - { - \bool_if:NTF \l__eb_class_book_bool - { - \ifbool{@twocolumn} - { - \booltrue{@restonecol} - \bool_if:NF \l__eb_multoc_bool { \onecolumn } - }{ - \boolfalse{@restonecol} - \bool_if:NT \l__eb_multoc_bool { \twocolumn } - } - } - { \tl_set:Nn \l__eb_toc_type_tl { article } } - } -\cs_new_protected:Npn \eb_multoc_post_bool: - { - \bool_if:NT \l__eb_class_book_bool - { \ifbool{@restonecol}{\twocolumn}{\onecolumn} } - } -\RenewDocumentCommand{\tableofcontents}{t+oD(){}} - { - \group_begin: - \tl_set_eq:NN \eb@toc@title \contentsname - \tl_set:Nn \eb@bitoc@title { Contents } - \IfValueT{#2}{\keys_set:nn { eb/listoc } {#2}} - \eb_multoc_pre_bool: - \eb_title_mark_notoc:n { \eb@toc@title } - \vspace*{\dim_use:N \l__eb_toc_offset_dim} - \@starttoc{toc}#3 - \IfBooleanT{#1} - { - \eb_title_mark_notoc:n { \eb@bitoc@title } - \vspace*{\dim_use:N \l__eb_toc_offset_dim} - \@starttoc{tec} - } - \eb_multoc_post_bool: - \group_end: - } -\RenewDocumentCommand{\listoffigures}{st+o} - { - \group_begin: - \tl_set_eq:NN \eb@toc@title \listfigurename - \IfValueT{#3}{\keys_set:nn { eb/listoc } {#3}} - \eb_multoc_pre_bool: - \eb_title_number_intoc_bool:nn {#2} {#1} - \dim_add:NV \l__eb_toc_offset_dim \l__eb_toc_figure_offset_dim - \vspace*{\dim_use:N \l__eb_toc_offset_dim} - \@starttoc{lof} - \eb_multoc_post_bool: - \group_end: - } -\RenewDocumentCommand{\listoftables}{st+o} - { - \group_begin: - \tl_set_eq:NN \eb@toc@title \listtablename - \IfValueT{#3}{\keys_set:nn { eb/listoc } {#3}} - \eb_multoc_pre_bool: - \eb_title_number_intoc_bool:nn {#2} {#1} - \dim_add:NV \l__eb_toc_offset_dim \l__eb_toc_table_offset_dim - \vspace*{\dim_use:N \l__eb_toc_offset_dim} - \@starttoc{lot} - \eb_multoc_post_bool: - \group_end: - } -\NewDocumentCommand{\listoflistings}{st+o} - { - \group_begin: - \tl_set_eq:NN \eb@toc@title \lstlistlistingname - \IfValueT{#3}{\keys_set:nn { eb/listoc } {#3}} - \eb_multoc_pre_bool: - \eb_title_number_intoc_bool:nn {#2} {#1} - \dim_add:NV \l__eb_toc_offset_dim \l__eb_toc_lstlisting_offset_dim - \vspace*{\dim_use:N \l__eb_toc_offset_dim} - \@starttoc{lol} - \eb_multoc_post_bool: - \group_end: - } - -\ctex_at_end_package:nn { imakeidx } - { - \makeindex[ - options = -M~texindy~-C~utf8, - program = truexindy, - columns = 2, - columnsep = 2\ccwd - ] - \RenewDocumentCommand{\printindex}{st+D(){\imki@jobname}o} - { - \group_begin: - \tl_set_eq:NN \eb@toc@title \indexname - \cs_set_eq:NN \imki@indexlevel \use_none:n - \setkeys{imki}{intoc = false} - \IfValueT{#4}{\keys_set:nn { eb/listoc } {#4}} - \bool_if:NF \l__eb_class_book_bool - { \tl_set:Nn \l__eb_toc_type_tl { article } } - \tl_set:Nn \imki@indexheaders - { - \eb_title_number_intoc_bool:nn {#2} {#1} - \cs_set_eq:NN \thispagestyle \use_none:n - \cs_undefine:N \imki@firstpagestyle - } - \imki@putindex{#3} - \group_end: - } - } - -\eb_ctex_define:nn { chapter } - { - biname .code:n = - { \ctex_assign_heading_name:nn { bichapter } {#1} }, - biname .initial:n = Chapter\space, - binmuber .tl_set:N = \CTEX@bichapter@number, - binmuber .initial:n = \arabic{chapter} - } -\RenewDocumentCommand{\appendix} - {O{Appendix\space}D(){\Alph{chapter}}} - { - \ctex_assign_heading_name:nn { biappendix } {#1} - \int_compare:nNnTF { \c@chapter } > { 0 } - { - \ExplSyntaxOn\char_set_catcode_letter:N \@ - \eb_patch_cmd:Nnn \CTEX@addbitocline - { - \def\CTEX@prechapter{\CTEX@prebichapter} - \def\CTEX@thechapter{\CTEX@bichapter@number} - \def\CTEX@postchapter{\CTEX@postbichapter} - } - { - \def\CTEX@prechapter{\CTEX@prebiappendix} - \def\CTEX@thechapter{#2} - \def\CTEX@postchapter{\CTEX@postbiappendix} - } - \ExplSyntaxOff\char_set_catcode_other:N \@ - \setcounter{chapter}{0} - \setcounter{section}{0} - \gdef\thechapter{\@Alph\c@chapter} - \gdef\CTEX@prechapter{\CTEX@preappendix} - \gdef\CTEX@thechapter{\CTEX@appendix@number} - \gdef\CTEX@postchapter{\CTEX@postappendix} - \gdef\CTEX@chapter@numbering{\CTEX@appendix@numbering} - } - { - \setcounter{section}{0} - \setcounter{subsection}{0} - \gdef\thesection{\@Alph\c@section} - \gdef\CTEX@presection{\CTEX@preappendix} - \gdef\CTEX@thesection{\CTEX@appendix@number} - \gdef\CTEX@postsection{\CTEX@postappendix} - \gdef\CTEX@section@numbering{\CTEX@appendix@numbering} - \ctex_set:nn { appendix } { number = \@Alph\c@section,name = { } } - } - } - -\tl_new:N \l__eb_subfont_table_tl -\tl_new:N \l__eb_subfont_figure_tl -\tl_new:N \l__eb_subfont_listing_tl -\tl_new:N \l__eb_subfont_footnote_tl - -\seq_const_from_clist:Nn \c__eb_subfont_math_choice_seq - { - noto,notosans,times,scholax,stix, - charter,ebgaramond,libertine,none - } -\seq_map_inline:Nn \c__eb_subfont_math_choice_seq - { \tl_const:cn { c__eb_subfont_math_#1_tl } {#1} } - -\eb_ctex_define:nn { subfont } - { - table-cap .tl_set:N = \l__eb_subfont_table_tl, - table-cap .initial:n = \sffamily\small, - figure-cap .tl_set:N = \l__eb_subfont_figure_tl, - figure-cap .initial:n = \sffamily\small, - listing-cap .tl_set:N = \l__eb_subfont_listing_tl, - listing-cap .initial:n = \sffamily\small, - footnote .tl_set:N = \l__eb_subfont_footnote_tl, - footnote .initial:n = \rmfamily, - marginpar .tl_set:N = \marginfont, - marginpar .initial:n = \rmfamily\footnotesize, - - math .choices:xn = - { \seq_use:Nn \c__eb_subfont_math_choice_seq { , } } - { - \tl_gset_eq:NN - \l__eb_subfont_math_choice_tl \l_keys_choice_tl - }, - math .value_required:n = true, - math .initial:n = noto - } - -\cs_new_protected:Npn \eb_put_newtxmath:n #1 - { \PassOptionsToPackage{#1}{newtxmath} } -\eb_at_end_preamble:n - { - \tl_case:NnT \l__eb_subfont_math_choice_tl - { - \c__eb_subfont_math_noto_tl - { \eb_put_newtxmath:n { noto } } - \c__eb_subfont_math_notosans_tl - { \eb_put_newtxmath:n { notosans } } - \c__eb_subfont_math_ebgaramond_tl - { \eb_put_newtxmath:n { ebgaramond } } - \c__eb_subfont_math_times_tl - { \eb_put_newtxmath:n { noOT1 } } - \c__eb_subfont_math_libertine_tl - { \eb_put_newtxmath:n { libertine,noOT1 } } - \c__eb_subfont_math_stix_tl - { \eb_put_newtxmath:n { stix2,noOT1 } } - \c__eb_subfont_math_scholax_tl - { \eb_put_newtxmath:n { nc,noOT1 } } - \c__eb_subfont_math_charter_tl - { \eb_put_newtxmath:n { charter,noOT1 } } - } - { \RequirePackage{newtxmath,bm} } - } - -\fp_new:N \l__eb_spread_line_fp -\fp_new:N \l__eb_spread_table_fp -\fp_new:N \l__eb_spread_math_fp -\fp_new:N \l__eb_spread_caption_fp -\fp_new:N \l__eb_spread_footnote_fp - -\eb_ctex_define:nn { spread } - { - line .fp_set:N = \l__eb_spread_line_fp, - line .initial:n = 1.3, - table .fp_set:N = \l__eb_spread_table_fp, - table .initial:n = 1.05, - math .fp_set:N = \l__eb_spread_math_fp, - math .initial:n = 1.05, - caption .fp_set:N = \l__eb_spread_caption_fp, - caption .initial:n = 1, - footnote .fp_set:N = \l__eb_spread_footnote_fp, - footnote .initial:n = 1, - spread-all .meta:n = - { - line = #1, - table = #1, - math = #1, - caption = #1, - footnote = #1 - } - } - -\DeclareCaptionLabelSeparator{ccwd}{\hspace{\ccwd}} -\DeclareCaptionLabelFormat{parens}{\bothIfFirst{#1}{~}(#2)} -\DeclareCaptionFont{eb@table@font}{\l__eb_subfont_table_tl} -\DeclareCaptionFont{eb@figure@font}{\l__eb_subfont_figure_tl} -\DeclareCaptionFont{eb@listing@font}{\l__eb_subfont_listing_tl} -\captionsetup - { - format = hang, - font = {stretch = \fp_use:N \l__eb_spread_caption_fp}, - labelfont = {color = ctex@frame}, - labelsep = ccwd, - singlelinecheck = true, - belowskip = 0pt, - aboveskip = 10pt - } -\captionsetup[table]{font += eb@table@font} -\captionsetup[figure]{font += eb@figure@font} -\captionsetup[lstlisting]{font += eb@listing@font} -\captionsetup[subfigure] - { - labelformat = parens, - font+ = eb@figure@font, - belowskip = 2pt, - aboveskip = 6pt - } -\ctex_at_end_package:nn { bicaption } - { - \captionsetup[figure][bi-second]{name = Figure} - \captionsetup[table][bi-second]{name = Table} - } -\prop_gset_from_keyval:Nn \g__tblr_default_tblr_table_prop - { stretch = \fp_use:N \l__eb_spread_table_fp } -\SetTblrDefault{rows = {abovesep = 4pt,belowsep = 2pt}} -\eb_at_begin_environment:nn { tabular,tabularx } - { - \exp_args:Nx \linespread { \fp_use:N \l__eb_spread_table_fp } - \selectfont\ignorespaces - } -\ctex_after_end_preamble:n - { - \exp_args:Nx \linespread { \fp_use:N \l__eb_spread_line_fp } - \selectfont\ignorespaces - } - -\cs_new:Npn \eb_arabic:n #1 { \int_to_arabic:v { c@#1 } } -\cs_gset:cpn { thesection } - { - \int_compare:nNnT { \c@chapter } > { 0 } { \thechapter. } - \eb_arabic:n { section } - } -\seq_const_from_clist:Nn \c__eb_serial_number_counter_seq - { figure,table,lstlisting,equation } -\seq_map_inline:Nn \c__eb_serial_number_counter_seq - { - \cs_set:cpn { the#1 } - { - \int_compare:nNnT { \c@chapter } > { 0 } - { - \thechapter - \use:c { l__eb_#1_separator_tl } - } - \eb_arabic:n {#1} - } - } - -\skip_set:Nn \parskip { 0pt plus 2pt minus 1pt } -\skip_set:Nn \floatsep { 12pt plus 2pt minus 2pt } -\skip_set:Nn \intextsep { 14pt plus 2pt minus 2pt } -\skip_set:Nn \textfloatsep { 16pt plus 2pt minus 4pt } -\skip_set:Nn \dbltextfloatsep { 16pt plus 2pt minus 4pt } -\skip_set:Nn \@fpsep { 8pt plus 2.0fil } -\setcounter{topnumber}{4} -\setcounter{bottomnumber}{4} -\setcounter{totalnumber}{8} -\tl_gset:Nn \textfraction { 0.18 } -\tl_gset:Nn \topfraction { 0.85 } -\tl_gset:Nn \bottomfraction { 0.65 } -\tl_gset:Nn \floatpagefraction { 0.60 } -\tl_gset:Nn \ULthickness { 0.75pt } -\allowdisplaybreaks[4] -\DeclareGraphicsExtensions{.pdf,.png,.jpg,.eps,.tif} - -\cs_new_protected:Npn \eb_enumitem_label_set:nn #1#2 - { \SetEnumitemValue{label}{#1}{\color{ctex@emph}#2} } -\clist_map_inline:nn - { - { bullet } { \textbullet }, - { endash } { \normalfont\bfseries\textendash }, - { asterisk } { \textasteriskcentered }, - { arabic } { \arabic*. }, - { alph } { (\alph*) }, - { roman } { \roman*. }, - { outline } { \upshape\ding{111} } - } - { \eb_enumitem_label_set:nn #1 } -\SetEnumitemValue{font}{sf}{\color{ctex@emph}\normalfont\sffamily} -\SetEnumitemValue{ref}{enumii}{\arabic{enumi}.\alph*} -\SetEnumitemValue{ref}{enumiii}{\arabic{enumi}.\alph{enumii}.\roman*} -\setlist - { - labelsep = .75\ccwd,listparindent = 2\ccwd,leftmargin = *, - itemsep = .75ex plus .1ex,topsep = .75ex plus .1ex, - partopsep = 0ex,parsep = 0ex - } -\newlist{eb@outline@list}{itemize}{1} -\setlist[eb@outline@list]{label = outline,itemsep = .5ex plus .1ex} -\setlist[itemize,1]{label = bullet} -\setlist[itemize,2]{label = endash} -\setlist[itemize,3]{label = asterisk} -\setlist[enumerate,1]{label = arabic,ref = \arabic*} -\setlist[enumerate,2]{label = alph,ref = enumii} -\setlist[enumerate,3]{label = roman,ref = enumiii,labelwidth = *} -\setlist[description]{font = sf,labelwidth = *,leftmargin = 2\ccwd} - -\cs_new_protected:Npn \eb_thmname_set:nnn #1#2#3 - { - \tl_if_eq:NnTF \l__ctex_scheme_tl { chinese } - { \tl_const:cn { c__eb_name_#1_tl } {#3} } - { \tl_const:cn { c__eb_name_#1_tl } {#2} } - } -\NewDocumentCommand{\EbNewTheorem} - {mO{\text_titlecase_first:n {#1}}mD(){tc-theorem}O{}} - { - \ctex_at_end_preamble:n - { - \eb_thmname_set:nnn {#1} {#2} {#3} - \exp_args:No \declaretheorem@i - { - name = \use:c { c__eb_name_#1_tl }, - style = easy-theorem,#5 - }{#1}[] - \bool_if:NT \l__eb_thmbox_bool - { - \@ifpackageloaded{tcolorbox} - {\tcolorboxenvironment{#1}{#4}}{} - } - \labelformat{#1}{\use:c { c__eb_name_#1_tl }~##1} - } - } - -\bool_new:N \l__eb_thmbox_bool -\tl_new:N \l__eb_thm_numberwith_tl -\tl_new:N \l__eb_thm_headpunct_tl -\tl_new:N \l__eb_thm_bodyfont_tl -\tl_new:N \l__eb_thm_notefont_tl -\tl_new:N \l__eb_thm_headindent_tl -\tl_new:N \l__eb_thm_spaceabove_tl -\tl_new:N \l__eb_thm_spacebelow_tl - -\RenewDocumentCommand{\newtheorem}{O{}m} - {\AfterPreamble{\declaretheorem[#1]{#2}}} -\eb_ctex_define:nn { thmset } - { - thmbox .bool_set:N = \l__eb_thmbox_bool, - thmbox .default:n = true, - thmbox .initial:n = false, - within .tl_set:N = \l__eb_thm_numberwith_tl, - within .initial:n = \bool_if:NT \l__eb_class_book_bool { chapter }, - bodyfont .tl_set:N = \l__eb_thm_bodyfont_tl, - bodyfont .initial:n = { }, - notefont .tl_set:N = \l__eb_thm_notefont_tl, - notefont .initial:n = { }, - headfont .tl_set:N = \l__eb_thm_headfont_tl, - headfont .initial:n = \color{ctex@emph}\sffamily, - headpunct .tl_set:N = \l__eb_thm_headpunct_tl, - headpunct .initial:n = { }, - spacepost .tl_set:N = \l__eb_thm_spacepost_tl, - spacepost .initial:n = \ccwd, - headindent .tl_set:N = \l__eb_thm_headindent_tl, - headindent .initial:n = 0\ccwd, - spaceabove .tl_set:N = \l__eb_thm_spaceabove_tl, - spaceabove .initial:n = .75ex plus .1ex, - spacebelow .tl_set:N = \l__eb_thm_spacebelow_tl, - spacebelow .initial:n = .75ex plus .1ex - } -\tl_const:Nn \c__eb_thmtools_keyval_tl - { - [ - spaceabove = \l__eb_thm_spaceabove_tl, - spacebelow = \l__eb_thm_spacebelow_tl, - headindent = \l__eb_thm_headindent_tl, - headfont = \l__eb_thm_headfont_tl, - notefont = \l__eb_thm_notefont_tl, - notebraces = { }{ }, - bodyfont = \l__eb_thm_bodyfont_tl, - headpunct = \l__eb_thm_headpunct_tl, - postheadspace = \l__eb_thm_spacepost_tl, - within = \l__eb_thm_numberwith_tl, - headformat = \NAME\space\NUMBER\NOTE - ] - } -\eb_at_end_preamble:n - { - \exp_last_unbraced:No - \declaretheoremstyle{\c__eb_thmtools_keyval_tl}{easy-theorem} - \eb_thmname_set:nnn { exercise } { Exercise } { 练习 } - \cs_undefine:N \proof - \clist_map_inline:nn - { - { lemma } { 引理 }, - { example } { 例 }, - { theorem } { 定理 }, - { corollary } { 推论 }, - { definition } { 定义 }, - { proposition } { 性质 }, - { remark } { 注 } [ numbered = no ], - { { proof } { 证明 } [ numbered = no,qed = \qedsymbol ] } - } - { \EbNewTheorem #1 } - } - -\ctex_at_end_package:nn { tasks } - { - \settasks - { - label = (\Alph*), - column-sep = \ccwd, - item-indent = 2\ccwd, - label-width = 1.5\ccwd, - after-item-skip = 0ex plus .1ex - } - } -\setchemformula - { - math-scripts = false, - charge-hshift = 0.25\ccwd, - subscript-vshift = -0.2ex - } -\sisetup - { - mode = match, - table-parse-only, - propagate-math-font, - text-family-to-math, - text-series-to-math, - reset-text-family = false, - reset-text-series = false, - reset-text-shape = false, - reset-math-version = false, - range-phrase = \ensuremath{\sim}, - range-units = single, - group-digits = none - } -\eb_at_begin_environment:nn - { - array,matrix,pmatrix,bmatrix,Bmatrix,vmatrix,Vmatrix, - matrix*,pmatrix*,bmatrix*,Bmatrix*,vmatrix*,Vmatrix*, - cases,cases*,dcases,dcases*,rcases,rcases*,drcases,drcases*, - aligned,alignedat,gathered,multlined,lgathered,rgathered - } - { - \linespread{\fp_use:N \l__eb_spread_math_fp} - \selectfont\ignorespaces - } -\eb_patch_cmd:Nnn \start@gather - { \collect@body } - { - \linespread{\fp_use:N \l__eb_spread_math_fp} - \selectfont\collect@body - } -\eb_patch_cmd:Nnn \start@align - { \collect@body } - { - \linespread{\fp_use:N \l__eb_spread_math_fp} - \selectfont\collect@body - } -\eb_patch_cmd:Nnn \start@multline - { \collect@body } - { - \linespread{\fp_use:N \l__eb_spread_math_fp} - \selectfont\collect@body - } -\eb_patch_cmd:Nnn \gather@split - { \spread@equation } - { - \linespread{\fp_use:N \l__eb_spread_math_fp} - \selectfont\spread@equation - } -\ctex_after_end_preamble:n - { - \skip_set:Nn \abovedisplayskip { 5pt plus 1pt minus 1pt } - \skip_set:Nn \belowdisplayskip { 5pt plus 1pt minus 1pt } - \skip_set:Nn \abovedisplayshortskip { 0pt } - \skip_set:Nn \belowdisplayshortskip { 5pt plus 1pt minus 1pt } - } -\cs_gset:Npn \tagform@ #1 - { \maketag@@@{\color{ctex@emph}(\ignorespaces #1\unskip\@@italiccorr)} } -\ctex_at_end_package:nn { unicode-math } - { \msg_redirect_module:nnn { unicode-math } { warning } { none } } - -\ctex_at_end_package:nn { tcolorbox } - { - \eb_package_later_bool:nn { tcolorbox } { 2020/10/09 } - \tcbset - { - tc-theorem/.style = - { - enhanced~jigsaw,pad~at~break* = 3pt, - opacityback = 0, - colframe = ctex@emph, - left = 6pt,right = 6pt,top = 8pt,bottom = 8pt,middle= 8pt - }, - tc-outline/.style = - { - enhanced,nofloat, - tikznode~boxed~title, - interior~style = white,colframe = ctex@emph, - colbacktitle = white,coltitle = ctex@emph, - fonttitle = \large\sffamily,fontupper = \itshape, - boxed~title~style = {size = normal,opacityframe = 0,boxrule = 0pt}, - attach~boxed~title~to~top~center = {yshift = -\tcboxedtitleheight/2}, - arc = 3pt,boxsep = 5pt, - after~skip = 3ex, - left = 1.5pc,right = 1.5pc,top = 1pc,bottom = 0.5pc - }, - tc-exercise/.style = - { - blank,on~line,center, - fontupper = \Large\sffamily, - before~skip = 3.75ex,after~skip = 2.5ex - }, - breakable, - boxsep = 0pt, - arc = 0pt, - fonttitle = \sffamily, - boxrule = \l__eb_rule_width_dim - } - \newtcbox[auto~counter]{\eb@exercise@box}[1]{tc-exercise,#1} - \NewDocumentEnvironment{outline}{O{}D(){\abstractname}o+b} - { - \begin{tcolorbox}[tc-outline,title = #2,IfValueT = {#3}{#3}] - \begin{eb@outline@list}[#1] - #4 - \end{eb@outline@list} - \end{tcolorbox} - }{} - \NewDocumentEnvironment{exercise} - {st+O{LightSkyBlue}O{1.}D(){\c__eb_name_exercise_tl}o+O{}+b} - { - \IfBooleanTF{#2} - { - \eb@exercise@box - { - fuzzy~halo = 5pt~with~#3, - IfValueT = {#6}{#6}, - phantom = - \IfBooleanF{#1} - { - \markright{\thetcbcounter\hspace{0.5\ccwd}#5} - \addcontentsline{toc}{section} - {\thetcbcounter\hspace{\eb@toc@section@numsep}#5} - } - } - {\IfBooleanF{#1}{\thetcbcounter\hspace{0.5\ccwd}}#5} - }{ - \group_begin: - \ctex_set:nn { section } { format += \centering } - \IfValueT{#6}{\ctex_set:nn { section } {#6}} - \IfBooleanTF{#1}{\section*{#5}}{\section{#5}} - \group_end: - }#7 - \begin{enumerate}[#4,labelsep = 0.5\ccwd] - #8 - \end{enumerate} - }{} - \DeclareTColorBox{easybox}{sO{DarkCyan}d()O{}} - { - enhanced~jigsaw,pad~at~break* = 3pt, - IfBooleanTF = {#1} - {toptitle = 8pt,top = 8pt} - {frame~hidden,boxrule = 0pt,toptitle = 8pt,top = 0pt}, - IfValueT = {#3}{title = #3}, - colback = #2,colbacktitle = #2, - opacityback = 0.12,opacitybacktitle = 0.12, - coltitle = black,colframe = black, - left = 6pt,right = 6pt,bottom = 8pt,middle= 8pt, - bottomtitle = 8pt, - beforeafter~skip = 2ex, - halign~upper = left,halign~lower = left, - center~title,#4 - } - \DeclareTColorBox{ebparbox}{sO{Purple}d()O{}} - { - frame~hidden, - enhanced~jigsaw,pad~at~break* = 3pt, - boxrule = 0pt, - borderline~west = {3pt}{0pt}{#2}, - IfBooleanTF = {#1} - { - colback = white, - IfValueT = {#3}{title = #3}, - top = 0pt,bottom = 0pt,toptitle = 0pt - }{ - colback = #2,colbacktitle = #2, - opacityback = 0.12,opacitybacktitle = 0.12, - IfValueTF = {#3}{title = #3,top = 0pt}{top = 8pt}, - bottom = 8pt,toptitle = 8pt - }, - left = 8pt,right = 8pt,middle= 8pt, - bottomtitle = 8pt, - beforeafter~skip = 1.5ex, - colframe = #2,coltitle = #2,#4 - } - \DeclareTotalTCBox{\ebemph}{O{DarkSeaGreen}vO{}} - { - nobeforeafter,tcbox~raise~base, - blank,fuzzy~halo = 2pt~with~#1,#3 - }{#2} - \DeclareTotalTCBox{\eblink}{O{Aqua}vO{}} - { - standard~jigsaw, - nobeforeafter,tcbox~raise~base, - top = 1.25pt,bottom = 1.25pt,left = 1.25pt,right = 1.25pt, - boxrule = 0.75pt,arc = 1pt, - colback = #1,opacityback = 0.12,colframe = #1,#3 - }{#2} - } - -\bool_set_true:N \l__eb_backend_bibtex_bool -\tl_new:N \l__eb_bib_style_tl -\tl_new:N \l__eb_bib_otherstyle_tl -\tl_new:N \l__eb_bib_citestyle_tl -\tl_new:N \l__eb_bib_datafile_tl - -\eb_ctex_define:nn { bibset } - { - backend .choice:, - backend/bibtex .code:n = { }, - backend/biblatex .code:n = - { \bool_set_false:N \l__eb_backend_bibtex_bool }, - - bib-style .choice:, - bib-style .value_required:n = true, - bib-style/numerical .code:n = - { - \tl_set:Nn \l__eb_bib_style_tl {#1} - \tl_clear:N \l__eb_bib_otherstyle_tl - }, - bib-style/authoryear .code:n = - { - \tl_set:Nn \l__eb_bib_style_tl {#1} - \tl_clear:N \l__eb_bib_otherstyle_tl - }, - bib-style/unknown .code:n = - { \tl_set_eq:NN \l__eb_bib_otherstyle_tl \l_keys_value_tl }, - bib-style .initial:n = numerical, - - cite-style .code:n = - { \tl_set:Nn \l__eb_bib_citestyle_tl {#1} }, - datafile .tl_set:N = \l__eb_bib_datafile_tl, - - bitoc-title .tl_set:N = \l__eb_bib_bitoc_title, - bitoc-title .initial:n = Reference - } - -\cs_new_protected:Npn \EbBibtexSet - { - \tl_if_empty:NTF \l__eb_bib_otherstyle_tl - { - \tl_if_eq:NnT \l__eb_bib_style_tl { numerical } - { - \bibliographystyle{gbt7714-numerical} - \setcitestyle{comma,square,super} - } - \tl_if_eq:NnT \l__eb_bib_style_tl { authoryear } - { \bibliographystyle{gbt7714-author-year} } - \cs_set_eq:NN \cite \citep - } - { \exp_args:NV \bibliographystyle \l__eb_bib_otherstyle_tl } - \tl_if_empty:NF \l__eb_bib_citestyle_tl - { \exp_args:NV \setcitestyle \l__eb_bib_citestyle_tl } - \skip_zero:N \bibsep - \NewDocumentCommand{\printbibliography}{st+o} - { - \group_begin: - \tl_set_eq:NN \eb@toc@title \bibname - \IfValueT{##3}{ \keys_set:nn { eb/listoc } {##3} } - \eb_multoc_pre_bool: - \tl_set:Nn \bibsection - { \eb_title_number_intoc_bool:nn {##2} {##1} } - \exp_args:NV \bibliography \l__eb_bib_datafile_tl - \eb_multoc_post_bool: - \group_end: - } - } -\cs_new_protected:Npn \eb_put_biblatex:n #1 - { \PassOptionsToPackage{#1}{biblatex} } -\cs_new_protected:Npn \EbBiblatexPreset - { - \tl_if_empty:NTF \l__eb_bib_otherstyle_tl - { - \tl_if_eq:NnT \l__eb_bib_style_tl { numerical } - { \eb_put_biblatex:n { style = gb7714-2015 } } - \tl_if_eq:NnT \l__eb_bib_style_tl { authoryear } - { \eb_put_biblatex:n { style = gb7714-2015ay } } - } - { \eb_put_biblatex:n { style = \l__eb_bib_otherstyle_tl } } - \tl_if_empty:NF \l__eb_bib_citestyle_tl - { \eb_put_biblatex:n { citestyle = \l__eb_bib_citestyle_tl } } - \eb_put_biblatex:n { backend = biber } - } -\cs_new_protected:Npn \EbBiblatexPostset - { - \exp_args:NV \addbibresource \l__eb_bib_datafile_tl - \tl_gset:Nn \blx@default@theheading { bibintoc } - \defbibheading{bibintoc}[\bibname] - {\eb_biber_title_level_bool:n {##1}} - \skip_zero:N \bibitemsep - } -\eb_at_end_preamble:n - { - \tl_if_empty:NF \l__eb_bib_datafile_tl - { - \bool_if:NTF \l__eb_backend_bibtex_bool - { - \RequirePackage[sort&compress]{natbib} - \EbBibtexSet - } - { - \EbBiblatexPreset - \RequirePackage{biblatex} - \EbBiblatexPostset - } - } - } - -\lstdefinestyle{easy-listings} - { - language = [LaTeX]TeX, - texcsstyle = - { - *\lst@ifdisplaystyle - \bfseries\color{ctex@verb} - \else - \color{ctex@verb} - \fi - }, - basicstyle = - { - \ttfamily\lst@ifdisplaystyle - \small - \else - \color{ctex@verb} - \fi - }, - keywordstyle = - { - \lst@ifdisplaystyle - \bfseries\color{ctex@verb} - \else - \color{ctex@verb} - \fi - }, - framexleftmargin = 0pt, - framexrightmargin = 0pt, - xleftmargin = 3pt, - xrightmargin = 3pt, - numbersep = 10pt, - framesep = 3pt, - frame = single, - rulecolor = \color{ctex@frame}, - commentstyle = \color{SlateGray}, - emphstyle = \color{ctex@emph}, - % emph = {}, - morekeywords = - { - includegraphics,setmainfont,setsansfont,setmonofont,setCJKmainfont,setCJKsansfont,setCJKmonofont,setCJKfamilyfont,RequirePackage - } - } -\lstset - { - style = easy-listings, - breaklines = true, - resetmargins = true, - % numbers = left, - numberstyle = \footnotesize, - aboveskip = 1.5ex plus .2ex minus .1ex, - belowskip = 0.55ex plus .2ex minus .1ex, - keepspaces = true, - framerule = \l__eb_rule_width_dim, - columns = flexible, - abovecaptionskip = -1ex, - belowcaptionskip = 1.5ex - } -\lstloadlanguages{C,C++,Java,Python,Matlab} - -\clist_new:N \l__eb_hyperref_clist -\cs_new_protected:Npn \eb_put_hyperref:n #1 - { \clist_put_right:Nn \l__eb_hyperref_clist {#1} } -\cs_new_protected:Npn \eb_define_linkcolor:nnn #1#2#3 - { \definecolorset{HTML}{ctex@}{}{link,#1;url,#2;cite,#3} } -\cs_new_protected:Npn \eb_define_themecolor:nnn #1#2#3 - { \definecolorset{HTML}{ctex@}{}{frame,#1;emph,#2;verb,#3} } -\cs_new_protected:Npn \eb_define_linkcolor:n #1 - { \definecolorset{HTML}{ctex@}{}{link,#1;url,#1;cite,#1} } -\cs_new_protected:Npn \eb_define_themecolor:n #1 - { \definecolorset{HTML}{ctex@}{}{frame,#1;emph,#1;verb,#1} } -\cs_new:Npn \eb_linkcolor_set:n #1 - { - linkcolor/\clist_item:nn {#1} {1} .code:n = - { - \eb_define_linkcolor:nnn - { \clist_item:nn {#1} {2} } - { \clist_item:nn {#1} {3} } - { \clist_item:nn {#1} {4} } - \eb_put_hyperref:n - { - linkcolor = ctex@link,linkbordercolor = ctex@link, - urlcolor = ctex@url,urlbordercolor = ctex@url, - citecolor = ctex@cite,citebordercolor = ctex@cite - } - }, - } -\cs_new:Npn \eb_themecolor_set:n #1 - { - color/\clist_item:nn {#1} {1} .code:n = - { - \eb_define_themecolor:nnn - { \clist_item:nn {#1} {2} } - { \clist_item:nn {#1} {3} } - { \clist_item:nn {#1} {4} } - }, - } - -\bool_set_false:N \l__eb_toc_number_color_bool -\eb_ctex_define:nn { refset } - { - linktype .choice:, - linktype/edge .code:n = { }, - linktype/none .code:n = \eb_put_hyperref:n { hidelinks }, - linktype/various .code:n = - { - \bool_set_true:N \l__eb_toc_number_color_bool - \eb_put_hyperref:n { colorlinks } - }, - linktype .value_required:n = true, - linktype .initial:n = edge, - - linktoc .choice:, - linktoc/unknown .code:n = - { - \eb_put_hyperref:n { linktoc = #1 } - \clist_map_inline:nn { page,none } - { - \tl_if_eq:NnT \l_keys_value_tl {##1} - { - \clist_map_break:n - { \colorlet{ctex@toc@number}{black} } - } - } - }, - 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} } - } - } - } -\eb_ctex_define:nx { refset } - { - linkcolor .choice:, - \clist_map_function:nN - { - { fresh, 62d71f,0000B2,005752 }, - { cutepink, ff69b4,9d5196,57b5e5 }, - { navyblue, 000080,004986,eb6877 }, - { crimson, dc143c,00c1c9,afcd20 } - } - \eb_linkcolor_set:n - linkcolor .default:n = navyblue, - linkcolor .initial:n = navyblue, - linkcol-all .code:n = - { \eb_define_linkcolor:n { \exp_not:n {#1} } } - } -\colorlet{ctex@toc@number}{ctex@link} -\eb_ctex_define:nx { style } - { - color .choice:, - color .value_required:n = true, - \clist_map_function:nN - { - { none, 000000,000000,000000 }, - { seaside, 4169e1,708090,9932cc }, - { energy, f39800,00a0e9,893895 }, - { cyberpunk, 601986,eb6877,a4005b } - } - \eb_themecolor_set:n - color .initial:n = none, - color-all .code:n = - { \eb_define_themecolor:n { \exp_not:n {#1} } } - } - -\cs_new:Npn \eb_allow_urlbreak: - { - \cs_new:Npn \eb_add_urlbreak_points: - { \tl_map_function:NN \c__eb_urlbreak_points_tl \do } - \eb_appto_cmd:Nn \UrlBreaks - { \UrlOrds\eb_add_urlbreak_points: } - } -\tl_const:Nn \c__eb_urlbreak_points_tl - { - ABCDEFGHIJKLMNOPQRSTUVWXYZ - abcdefghijklmnopqrstuvwxyz - 0123456789 - } -\ctex_at_end_preamble:n - { - \RequirePackage{hyperref} - \urlstyle{same} - \eb_allow_urlbreak: - \ctex_hypersetup:n { pdfstartview = FitH } - \exp_args:NV \hypersetup \l__eb_hyperref_clist - } - -\labelformat{part}{\CTEXthepart} -\labelformat{chapter}{\CTEXthechapter} -\labelformat{figure}{\figurename~#1} -\labelformat{table}{\tablename~#1} -\tl_if_eq:NnTF \l__ctex_scheme_tl { chinese } - { - \keys_set_known:nn { ctex } - { - contentsname = 目\hspace{\ccwd}录, - indexname = 索\hspace{\ccwd}引, - listfigurename = 图片索引, - listtablename = 表格索引, - abstractname = 摘\hspace{\ccwd}要, - lstlistlistingname = 代码索引, - lstlistingname = 代码 - } - \labelformat{equation}{式(#1)} - \labelformat{section}{节 #1} - \labelformat{subsection}{小节 #1} - } - { - \keys_set_known:nn { ctex } - { - abstractname = Abstract, - lstlistlistingname = List~of~Codes, - lstlistingname = Code - } - \labelformat{equation}{Equation~(#1)} - \labelformat{section}{Section~#1} - \labelformat{subsection}{Subsection~#1} - } - \ctex_set:n { secnumdepth = 3, |