From 21813d5f1f8535663b9f8c75dd5c013a41982552 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Fri, 14 May 2021 20:14:04 +0000 Subject: easybook (14may21) git-svn-id: svn://tug.org/texlive/trunk@59197 c570f23f-e606-0410-a88d-b1316a301751 --- .../texmf-dist/source/latex/easybook/easybook.dtx | 191 +++++++++++---------- 1 file changed, 101 insertions(+), 90 deletions(-) (limited to 'Master/texmf-dist/source') diff --git a/Master/texmf-dist/source/latex/easybook/easybook.dtx b/Master/texmf-dist/source/latex/easybook/easybook.dtx index b25fb33c37a..cf817627042 100644 --- a/Master/texmf-dist/source/latex/easybook/easybook.dtx +++ b/Master/texmf-dist/source/latex/easybook/easybook.dtx @@ -24,11 +24,11 @@ % \changes{v1.20}{2021/01/09}{修改和完善用户文档。} % \changes{v1.20}{2021/01/09}{模板更改为使用 CC-BY 许可协议。} % \changes{v1.23}{2021/03/19}{修复在 \pkg{ctex} v2.5.6 更新后 \cls{easybook} 与 \pkg{hyperref} 冲突问题。} -% \changes{v1.25h}{2021/05/03}{取消附带的示例文件,可查看历史版本及其它来源的使用样例。} +% \changes{v1.25i}{2021/05/03}{取消附带的示例文件,可查看历史版本及其它来源的使用样例。} % % \title{\sffamily easybook 文档类手册} % \author{瞿毅} -% \date{2021/05/12\hskip\ccwd\relax v1.25h\thanks{\url{https://gitee.com/texl3/easybook}}} +% \date{2021/05/14\hskip\ccwd\relax v1.25i\thanks{\url{https://gitee.com/texl3/easybook}}} % % \maketitle % \begin{abstract} @@ -118,7 +118,7 @@ % \end{syntax} % 传递给 \cls{ctexbook} 设置字体,最好不要使用原有的 \opt{fontset} 选项,默认情况下使用自定义字体而不开启这个选项,可根据安装的字体及电脑系统选取。\opt{noto} 与 \opt{none} 选项的相关描述见小节 \ref{subsec:font settings},\opt{overleaf} 是一个各系统通用选项,会检测系统环境选取对应字体。 % \changes{v1.21}{2021/01/12}{默认字体与 \CTeX 一致,不再是自定义字体。} -% \changes{v1.25h}{2021/05/04}{修复使用 \pkg{xeCJK} 与 \pkg{fontspec} 宏包的字体设置命令在 \hologo{LuaLaTeX} 下失效的问题。} +% \changes{v1.25i}{2021/05/04}{修复使用 \pkg{xeCJK} 与 \pkg{fontspec} 宏包的字体设置命令在 \hologo{LuaLaTeX} 下失效的问题。} % \end{function} % % \begin{function}[rEXP,added = 2021-01-05,updated = 2021-01-13]{paper} @@ -169,7 +169,7 @@ % \tn{listoflistings*+}\oarg{键值列表} % \end{syntax} % \tn{listoffigures} 命令输出图片目录,\tn{listoftables} 输出表格目录,\tn{listoflistings} 输出代码目录。带有星号的目录命令不将标题添加进主文档目录,带有+号的目录命令可以使当前标题编号。\tn{tableofcontents+} 与其它命令不同是用于输出双语目录,需要与双语目录标题命令 \tn{bichapter} 等或设置图片、表格和代码等英文目录的标题配合使用,附加代码是中文与英文目录之间的代码,可以插入文本和换页命令等。目录的键值列表选项如下 -% \changes{v1.25h}{2021/05/05}{命令 \tn{tableofcontents} 可以输出双语目录。} +% \changes{v1.25i}{2021/05/05}{命令 \tn{tableofcontents} 可以输出双语目录。} % \end{function} % % \begin{function}{multoc,title,format,aftertitle,pagestyle,book,article} @@ -200,7 +200,7 @@ % 双语目录的标题命令目前设置了常用的三个级别,它们将中文标题正常输出,并使中英文标题加入双语目录,这个功能是为国内一些大学的学位论文模板的要求设计,在一般情况和英文模式下不需要使用。 % % 它们的星号变体命令使文中标题不编号,但是仍然加入双语目录,若英文标题参数空置那么仅加入中文目录而不加入英文目录,这一特点与 \tn{chapter*} 等命令的行为不太一样,在一些情况下会用到。可选参数是目录中的中文标题,默认与中文标题一致,正文标题过长时可用它设置在目录中显示的标题。双语目录的格式是一致的,共享使用 \tn{tocset} 的设置,英文目录的章级别标题名及编号的修改方式如下 -% \changes{v1.25h}{2021/05/05}{增加与双语目录配合的标题命令。} +% \changes{v1.25i}{2021/05/05}{增加与双语目录配合的标题命令。} % \end{function} % % \begin{function}{biname,binmuber} @@ -288,9 +288,9 @@ % % \subsection{超链接} % \label{subsec:hyperlinks} -% \begin{function}[EXP,added = 2021-01-05,updated = 2021-05-06]{hyperlink,linkcolor,linkcol-all,linktoc} +% \begin{function}[EXP,added = 2021-01-05,updated = 2021-05-06]{linktype,linkcolor,linkcol-all,linktoc} % \begin{syntax} -% hyperlink = <(edge)|various|none> +% linktype = <(edge)|various|none> % linkcolor = % linkcol-all = % linktoc = @@ -299,11 +299,11 @@ % \opt{refset} 将超链接选项(包括以上选项)交给 \pkg{hyperref} 处理,除了一些关于 pdf 书签的选项可能会失效,其它由键值选项命令 \tn{hypersetup} 支持的多数选项可用。 % \changes{v1.10}{2021/01/08}{修复了 \opt{linktopage} 选项关闭时目录中标题编号无超链接的问题。} % \changes{v1.24}{2021/04/05}{增加 \pkg{hyperref} 超链接选项完整的支持。} -% \changes{v1.25h}{2021/05/06}{模块名 \opt{link} 改为 \opt{refset},\opt{link} 作为兼容性保留。} +% \changes{v1.25i}{2021/05/06}{模块名 \opt{link} 改为 \opt{refset},\opt{link} 作为兼容性保留。} % \end{function} % % \begin{optdesc} -% \item[hyperlink] \opt{edge} 使超链接为边框形式,\opt{various} 使超链接为彩色字体,有四种颜色风格。\opt{none} 关闭超链接边框与颜色,此时 \opt{linkcolor} 选项无效。 +% \item[linktype] \opt{edge} 使超链接为边框形式,\opt{various} 使超链接为彩色字体,有四种颜色风格。\opt{none} 关闭超链接边框与颜色,此时 \opt{linkcolor} 选项无效。 % \item[linkcolor] 超链接颜色样式。 % \begin{function}{ctex@link,ctex@url,ctex@cite} % \begin{syntax} @@ -378,7 +378,7 @@ % \changes{v1.21}{2021/01/11}{增加 \opt{bibset} 选项,可以使用 \hologo{BibTeX} 或 \hologo{biber} 编译参考文献。} % \changes{v1.23}{2021/02/23}{使用 \opt{bibset} 选项时可设置标注风格。} % \changes{v1.24}{2021/04/09}{可以不载入参考文献包手动配置参考文献格式。} -% \changes{v1.25h}{2021/05/12}{取消 \opt{bib-loadpkg} 选项,由是否设置参考文献数据库来决定载入宏包。} +% \changes{v1.25i}{2021/05/12}{取消 \opt{bib-loadpkg} 选项,由是否设置参考文献数据库来决定载入宏包。} % \end{function} % % \begin{optdesc} @@ -572,12 +572,12 @@ % 上面几个选项用于设置脚注格式,\opt{fnparskip} 和 \opt{fnparindent} 选项仅在 \opt{fnhang = true} 时有效。\opt{fnhang} 用于将脚注设置为悬挂缩进的格式,\opt{fnmark-pos} 选项设置脚注编号的位置,正常文本或是上标形式。\opt{fnmark-num} 选项设置脚注编号的格式,默认为原生样式 \opt{plain},还可以改为 \opt{pifont} 的各个版本,从左往右依次为普通版、阴文衬线版、阳文无衬线版和阴文无衬线版,缺点是它们的编号仅包括1-10。 % % \opt{fnmark-form} 是脚注标记的格式,默认为空,在此设置字体命令会覆盖 \opt{elsefont/footnote} 的设置,最后一个格式命令可以带有一个参数,这个参数接受脚注编号,一般配合 \opt{fnmark-num = plain} 使用。\opt{afterfnmark} 是脚注标记后的代码,一般用于设置标记与文本间的距离。 -% \changes{v1.25h}{2021/05/12}{增加脚注样式设置选项。} +% \changes{v1.25i}{2021/05/12}{增加脚注样式设置选项。} % \end{function} % % \subsection{目录样式} % \label{subsec:catalog style} -% \begin{function}[EXP,added = 2021-01-13,updated = 2021-05-01]{format,format+,indent,rule,numsep} +% \begin{function}[EXP,added = 2021-01-13,updated = 2021-05-14]{format,format+,indent,rule,numsep} % \begin{syntax} % format = <目录标题格式> % format += <目录标题格式> @@ -586,11 +586,12 @@ % numsep = <编号后间距|(\tn{ccwd})> % \end{syntax} % \ding{229} 以上选项路径为 \opt{tocset/(level)/...} \\ -% \opt{tocset} 将目录样式交给 \pkg{titletoc} 处理,\opt{level} 代表 \opt{part}、\opt{chapter}、\opt{section}、\opt{subsection} 和 \opt{list} 五种级别的目录样式设置,其中 \opt{list} 为图片、表格和代码目录样式的级别。 +% \opt{tocset} 将目录样式交给 \pkg{titletoc} 处理,\opt{level} 代表 part、chapter、section、subsection、figure、table 和 lstlisting 级别的目录,而使用 \opt{list} 级别可以统一设置图片、表格和代码目录的样式。 % % \opt{format} 是目录中标题的格式,可以设置字体和加入垂直间距等,垂直间距最好使用无间距重合的 \tn{addvspace} 命令,带有加号的 \opt{format+} 选项用于在已有的格式命令后附加内容。\opt{indent} 是目录中标题在页面左侧的缩进距离,应该有长度单位。\opt{rule} 选项中一般应当使用 \tn{tocrule} 命令,将会在接下来介绍。\opt{numsep} 是有编号的标题在目录中编号与标题的间距。 % \changes{v1.21}{2021/01/13}{增加配置目录样式的选项。} % \changes{v1.24}{2021/04/20}{增加目录中编号与标题的间距选项 \opt{numsep}。} +% \changes{v1.25i}{2021/05/14}{可以分别设置图片、表格和代码目录的格式。} % \end{function} % % \begin{function}[added = 2021-01-13,updated = 2021-04-20]{\tocrule,\EbNumberline} @@ -615,10 +616,10 @@ % } % \end{ctexexam} % -% \begin{function}[EXP,added = 2021-01-13,updated = 2021-05-01]{list/lolskip,list/belowoffset,tocset/tocline-fig,tocset/tocline-tab,tocset/tocline-lst,tocset/belowoffset,tocset/line-align,tocset/hang,tocset/numsep-all,tocset/indent-all,tocset/rule-all} +% \begin{function}[EXP,added = 2021-01-13,updated = 2021-05-14]{level/belowoffset,lolskip,tocline-fig,tocline-tab,tocline-lst,belowoffset,line-align,hang,numsep-all,indent-all,rule-all} % \begin{syntax} -% lolskip = <(0.8pc)> % belowoffset = <(0pc)> +% lolskip = <(0.8pc)> % tocline-fig = <图片目录标签> % tocline-tab = <表格目录标签> % tocline-lst = <代码目录标签> @@ -629,7 +630,7 @@ % indent-all = <目录标题左边缩进> % rule-all = <目录引导线样式> % \end{syntax} -% \ding{229} 以上选项路径为 \opt{tocset/list/...} 或 \opt{tocset/...} +% \ding{229} 以上选项路径为 \opt{tocset/level/...} 或 \opt{tocset/...} % \changes{v1.24}{2021/04/05}{可以设置图、表和代码目录的标签。} % \changes{v1.24}{2021/04/06}{增加目录引导线右边对齐方式。} % \changes{v1.24}{2021/04/19}{给目录增加 \opt{hang} 样式选项。} @@ -638,7 +639,7 @@ % % \begin{optdesc} % \item[lolskip] \opt{lolskip} 是代码目录中章之间的代码标题的距离,与 \CTeX 的表格目录和图片目录中章之间的标题距离选项 \opt{lotskip} 和 \opt{lofskip} 类似,它们的值均默认0.8 pc,在 \opt{article} 模式中此选项失效。 -% \item[belowoffset] \opt{belowoffset} 选项为主目录标题 \tn{contentsname} 后的间距补偿,一般为负值,用于抵消 \opt{format} 中设置的垂直间距。\opt{list} 中的 \opt{belowoffset} 与之意义类似,但是一般为正值,可以在 \opt{article} 模式中使用。建议 \opt{list/lolskip(0.8pc) + list/format/addvspace(0.2pc) + list/belowoffset(0pc) = belowoffset(-1pc)}。 +% \item[belowoffset] \opt{belowoffset} 选项为主目录标题 \tn{contentsname} 后的间距补偿,一般为负值,用于抵消 \opt{format} 中设置的垂直间距。\opt{level} 中的 \opt{belowoffset} 与之意义类似,代表 figure、table 和 lstlisting 三个级别,也可以使用 \opt{list} 统一设置,一般为正值。建议 \opt{lolskip(0.8pc) + list/format/addvspace(0.2pc) + list/belowoffset(0pc) = belowoffset(-1pc)}。 % \item[tocline] 目录标签整体使用 \opt{tocline} 设置,在图表标签的参数中\#1代表编号,代码标签中则是 \tn{thelstlisting} 代表编号,标签中还可包含标签名称,默认标签名称与图、表和代码环境的标题名称一致。下面举个设置标签的例子 % \begin{ctexexam} % \tocset @@ -966,7 +967,7 @@ %<*class> \NeedsTeXFormat{LaTeX2e}[2020/10/01] \RequirePackage{l3keys2e,etoolbox} -\ProvidesExplClass{easybook}{2021/05/12}{1.25h}{beta} +\ProvidesExplClass{easybook}{2021/05/14}{1.25i}{beta} \cs_generate_variant:Nn \eb_ctex_define:nn { nx } \cs_generate_variant:Nn \int_to_arabic:n { v } @@ -1091,9 +1092,10 @@ \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} } + \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}, @@ -1425,7 +1427,7 @@ \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} } + { \text_uppercase:n } {\use:c { eb_fancyhf_#1_mark:n } {#2}} } \cs_new:Npn \eb@number@markdouble #1#2 { @@ -1521,7 +1523,7 @@ { \hbox:n { - \tl_if_eq:NnT \l__eb_fnmark_position_tl {super} + \tl_if_eq:NnT \l__eb_fnmark_position_tl { super } { \textsuperscript }{\@thefnmark} \tl_use:N \l__eb_fnmark_after_tl } @@ -1567,9 +1569,10 @@ { \int_use:N #1 } } -\seq_const_from_clist:Nn \c__eb_toc_headings_level_seq - { part,chapter,section,subsection,list } -\seq_map_inline:Nn \c__eb_toc_headings_level_seq +\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 } @@ -1583,6 +1586,46 @@ #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 @@ -1596,11 +1639,8 @@ \newbool{eb@titletoc@hang@fix} \eb_ctex_define:nn { tocset } { - list/lolskip .skip_set:N = \l__eb_toc_lolskip_skip, - list/lolskip .initial:n = 0.8pc, - list/belowoffset .dim_set:N = \l__eb_toc_listoffset_dim, - list/belowoffset .initial:n = - { \bool_if:NTF \l__eb_class_book_bool { 0pc } { 0.15pc } }, + 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 = @@ -1610,21 +1650,21 @@ { \figurename\space #1 \notbool{eb@titletoc@hang@fix} - {\hspace{\eb@toc@list@numsep}}{} + {\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@list@numsep}}{} + {\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@list@numsep}}{} + {\hspace{\eb@toc@lstlisting@numsep}}{} }, line-align .bool_set:N = \l__eb_toc_line_align_bool, line-align .default:n = true, @@ -1679,6 +1719,18 @@ 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, @@ -1699,53 +1751,12 @@ { \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$} - } - -\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 } - } - } -\cs_new_protected:Npn \eb_titlecontents_set:nn #1#2 - { - \titlecontents{#1} - [\use:c { l__eb_toc_#2_indent_tl }] - {\use:c { l__eb_toc_#2_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@#2@numsep }} - } - }{} - }{} - {\use:c { l__eb_toc_#2_rule_tl }} - } -\contentsuse{lstlisting}{lol} -\clist_map_inline:nn - { - { part } { part }, - { chapter } { chapter }, - { section } { section }, - { subsection } { subsection }, - { figure } { list }, - { table } { list }, - { lstlisting } { list } + 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 } } } - { \eb_titlecontents_set:nn #1 } \prop_new:N \l__eb_label_name_prop \prop_set_from_keyval:Nn \l__eb_label_name_prop @@ -1962,7 +1973,7 @@ \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_listoffset_dim + \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: @@ -1975,7 +1986,7 @@ \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_listoffset_dim + \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: @@ -1988,7 +1999,7 @@ \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_listoffset_dim + \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: @@ -2754,16 +2765,16 @@ \bool_set_false:N \l__eb_toc_number_color_bool \eb_ctex_define:nn { refset } { - hyperlink .choice:, - hyperlink/edge .code:n = { }, - hyperlink/none .code:n = \eb_put_hyperref:n { hidelinks }, - hyperlink/various .code:n = + 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 } }, - hyperlink .default:n = edge, - hyperlink .initial:n = edge, + linktype .value_required:n = true, + linktype .initial:n = edge, linktoc .choice:, linktoc/unknown .code:n = @@ -2778,9 +2789,9 @@ } } }, - linktoc .default:n = all, - linktoc .initial:n = all, - unknown .code:n = + linktoc .default:n = all, + linktoc .initial:n = all, + unknown .code:n = { \eb_put_hyperref:x { -- cgit v1.2.3