diff options
Diffstat (limited to 'Master/texmf-dist/source')
-rw-r--r-- | Master/texmf-dist/source/latex/ctex/ctex.dtx | 294 |
1 files changed, 149 insertions, 145 deletions
diff --git a/Master/texmf-dist/source/latex/ctex/ctex.dtx b/Master/texmf-dist/source/latex/ctex/ctex.dtx index c0a472bab2b..8937946de81 100644 --- a/Master/texmf-dist/source/latex/ctex/ctex.dtx +++ b/Master/texmf-dist/source/latex/ctex/ctex.dtx @@ -443,7 +443,7 @@ Copyright and Licence %<class|style|ctexcap|ctexhook|ctexpatch>\NeedsTeXFormat{LaTeX2e} %<class>\input{ctexbackend.cfg} %<class|style|ctexcap|ctexhook|ctexpatch>\RequirePackage{expl3} -%<+!driver>\GetIdInfo$Id: ctex.dtx 76d4e94 2020-06-06 23:22:18 +0800 Qing Lee <sobenlee@gmail.com> $ +%<+!driver>\GetIdInfo$Id: ctex.dtx e805781 2020-08-23 21:30:35 +0800 Qing Lee <sobenlee@gmail.com> $ %<ctex> {Chinese adapter in LaTeX (CTEX)} %<ctex>\ProvidesExplPackage{\ExplFileName} %<ctexsize> {Chinese font size definition (CTEX)} @@ -530,7 +530,7 @@ Copyright and Licence %<founder>\ProvidesExplFile{ctex-fontset-founder.def} %<ubuntu> {Ubuntu fonts definition (CTEX)} %<ubuntu>\ProvidesExplFile{ctex-fontset-ubuntu.def} -%<!driver> {\ExplFileDate}{2.5.3}{\ExplFileDescription} +%<!driver> {\ExplFileDate}{2.5.4}{\ExplFileDescription} %</!(fd|ctexspa|dict|backend)> %<c19&rm>\ProvidesFile{c19rm.fd}% %<c19&sf>\ProvidesFile{c19sf.fd}% @@ -548,10 +548,10 @@ Copyright and Licence %<backend>\ProvidesFile{ctexbackend.cfg}% %<dict&theorem&GBK>\ProvidesDictionary{translator-theorem-dictionary}{ChineseGBK}% %<dict&theorem&UTF8>\ProvidesDictionary{translator-theorem-dictionary}{ChineseUTF8}% -%<fd> [2020/06/06 v2.5.3 Chinese font definition (CTEX)] -%<ctexspa> [2020/06/06 v2.5.3 Space info for CJKpunct (CTEX)] -%<backend> [2020/06/06 v2.5.3 Backend configuration file (CTEX)] -%<dict&theorem> [2020/06/06 v2.5.3 Chinese translation for theorem name (CTEX)] +%<fd> [2020/08/23 v2.5.4 Chinese font definition (CTEX)] +%<ctexspa> [2020/08/23 v2.5.4 Space info for CJKpunct (CTEX)] +%<backend> [2020/08/23 v2.5.4 Backend configuration file (CTEX)] +%<dict&theorem> [2020/08/23 v2.5.4 Chinese translation for theorem name (CTEX)] %</!(driver|readme|install|zhmap|spa|docstrip)> %<*driver> \documentclass{ctxdoc} @@ -575,7 +575,7 @@ Copyright and Licence % \changes{v2.4.15}{2019/03/23}{同步 \LaTeXiii{} 2019/03/05。} % \changes{v2.5.1}{2020/05/02}{\pkg{zhconv} 更名为 \pkg{ctex-zhconv}。} % -% \CheckSum{6222} +% \CheckSum{6228} % % \CharacterTable % {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z @@ -1171,9 +1171,9 @@ Copyright and Licence % 的格式。启用 \opt{sub4section} 会将 \tn{paragraph} 和 \tn{subparagraph} 的格式 % 都修改为类似 \tn{section} 的格式。 % -% 启用该选项通常还需要将计数器 |secnumdepth| 的值为设置为 4 或 5。 +% 启用该选项通常还需要将计数器 |secnumdepth| 的值为设置为 |4| 或 |5|。 % -% 具体格式可参考 \ref{sec:secstyle}~节中的 \opt{runin} 和 \opt{afterskip} 选项。 +% 具体格式可参考 \ref{subsec:sec-spacing}~小节中的 \opt{runin} 和 \opt{afterskip} 选项。 % % 注意,上述两个选项只有在非 \cls{beamer} 文档类下 \opt{heading} 选项启用的时候 % 才有意义。亦即,只有在使用除了 \cls{ctexbeamer} 的三个 \CTeX{} 文档类或启用了 @@ -1492,7 +1492,7 @@ Copyright and Licence % 的包提供了以下宏供使用: % \begin{itemize} % \item \tn{CTEXthechapter}、\tn{CTEXthesection} 等章节编号(见 -% \ref{sec:secstyle} 节)。它们用来代替英文文档类中的 +% \ref{subsec:sec-commands}~小节)。它们用来代替英文文档类中的 % \tn{thechapter}、\tn{thesection} 等宏。 % % \item \tn{leftmark}、\tn{rightmark},它们是在使用章节标题命令后,自动设置的 @@ -2538,10 +2538,10 @@ Copyright and Licence % \end{tabular} % \end{table} % -% \subsection{有关命令} +% \subsection{辅助命令} % \label{subsec:sec-commands} % -% \CTeX{} 宏集还提供了一些命令(宏),用于存储章节标题格式,或进行一些条件判断。 +% \CTeX{} 宏集还提供了一些辅助命令(宏),用于存储章节标题格式,或进行一些条件判断。 % % \begin{function}{\CTEXthepart, \CTEXthechapter, \CTEXthesection, % \CTEXthesubsection, \CTEXthesubsubsection, \CTEXtheparagraph, @@ -3346,7 +3346,7 @@ Copyright and Licence `l3kernel'~and~`l3packages'\\\\ using~your~TeX~package~manager~or~from~CTAN. } -\@ifpackagelater { expl3 } { 2020/04/06 } { } +\@ifpackagelater { expl3 } { 2020/07/17 } { } { \msg_error:nnn { ctex } { l3-too-old } { expl3 } } %<*class> \@ifpackagelater { l3keys2e } { 2015/12/20 } { } @@ -3417,68 +3417,44 @@ Copyright and Licence { \keys_set:nn { ctex } } \cs_new_protected:Npn \ctex_set:nn #1 { \keys_set:nn { ctex / #1 } } +%</!ctexsize> % \end{macrocode} % \end{macro} % % \changes{v2.5.3}{2020/06/06}{正确关闭和恢复 \LaTeXiii 语法环境。} +% \changes{v2.5.4}{2020/08/02}{应用 \pkg{l3cctab}。} % -% \begin{macro}[int]{\ctex_file_wrapper:nnn} -% 设置文件操作的 \tn{catcode} 环境,参数 |#1| 是设置,|#2| 是文件操作,|#3| 是恢复。 -% 默认关闭 \LaTeXiii{} 语法环境,并设置 |@| 的 \tn{catcode} 为 $11$。 -% 这里最自然的使用 \pkg{l3cctab} 来实现,但目前 \pkg{l3cctab} 还属于 -% \pkg{l3experimental},我们暂时不依赖它。 +% \begin{macro}[int]{\ctex_file_input:n} +% 输入文件,关闭 \LaTeXiii 语法环境,并设置 |@| 为字母类。 % \begin{macrocode} -%</!ctexsize> -\cs_new_protected:Npn \ctex_file_wrapper:nnn +\cs_new_protected:Npn \ctex_file_input:n #1 { - \exp_args:NNx \ExplSyntaxOff - \@@_file_wrapper_aux:nnnn - { - \bool_if:NTF \l__kernel_expl_bool - { \ExplSyntaxOn } - { \ExplSyntaxOff } - } + \cctab_begin:N \c_@@_package_cctab + \file_input:n {#1} + \cctab_end: } -\cs_new_protected:Npn \@@_file_wrapper_aux:nnnn #1#2#3#4 +\cctab_const:Nn \c_@@_package_cctab { - \use:x - { - \char_set_catcode_letter:n { 64 } - #2 - \exp_not:n {#3} - \char_set_catcode:nn { 64 } { \char_value_catcode:n { 64 } } - #4 - } - #1 + \cctab_select:N \c_document_cctab + \char_set_catcode_letter:n { 64 } } % \end{macrocode} % \end{macro} % -% \begin{macro}[int]{\ctex_file_input:n} -% 输入文件。 -% \begin{macrocode} -\cs_new_protected:Npn \ctex_file_input:n #1 - { \ctex_file_wrapper:nnn { } { \file_input:n {#1} } { } } -%<*!ctexsize> -% \end{macrocode} -% \end{macro} -% % \begin{macro}[int]{\ctex_scheme_input:n} % 输入 \opt{scheme} 文件。先查找当前文档类下的 \meta{scheme},找不到再查找一般的文件。 % \begin{macrocode} +%<*!ctexsize> \cs_new_protected:Npn \ctex_scheme_input:n #1 { - \ctex_file_wrapper:nnn - { } - { - \tl_if_exist:NTF \c_@@_class_tl - { - \file_if_exist_input:nF { ctex-scheme- #1 - \c_@@_class_tl .def } - { \file_input:n { ctex-scheme- #1 .def } } - } - { \file_input:n { ctex-scheme- #1 .def } } - } - { } + \cctab_begin:N \c_@@_package_cctab + \tl_if_exist:NTF \c_@@_class_tl + { + \file_if_exist_input:nF { ctex-scheme- #1 - \c_@@_class_tl .def } + { \file_input:n { ctex-scheme- #1 .def } } + } + { \file_input:n { ctex-scheme- #1 .def } } + \cctab_end: } \cs_generate_variant:Nn \ctex_scheme_input:n { o } % \end{macrocode} @@ -4241,6 +4217,8 @@ Copyright and Licence \RequirePackage { CJKpunct , CJKspace } % \end{macrocode} % +% \changes{v2.4.4}{2016/09/09}{解决 \opt{zhmap} 文件的 \tn{catcode} 问题。} +% % \begin{macro}[int]{\ctex_load_zhmap:nnnn} % 载入 \pkg{zhmetrics} 的字体映射文件,同时设置 \tn{CJKrmdefault} 等。 % \begin{macrocode} @@ -4249,32 +4227,12 @@ Copyright and Licence \tl_set:Nn \CJKrmdefault {#1} \tl_set:Nn \CJKsfdefault {#2} \tl_set:Nn \CJKttdefault {#3} - \ctex_set_zhmap:n { \ctex_zhmap_input:n { ctex-zhmap- #4 .tex } } + \ctex_set_zhmap:n { \ctex_file_input:n { ctex-zhmap- #4 .tex } } } \@onlypreamble \ctex_load_zhmap:nnnn % \end{macrocode} % \end{macro} % -% \changes{v2.4.4}{2016/09/09}{解决 \opt{zhmap} 文件的 \tn{catcode} 问题。} -% \begin{macro}[int]{\ctex_zhmap_input:n} -% 载入字体映射文件时,确认 |%| 和 |\| 的 \tn{catcode}。 -% \begin{macrocode} - \cs_new_protected:Npn \ctex_zhmap_input:n #1 - { - \ctex_file_wrapper:nnn - { - \char_set_catcode_comment:n { 37 } % % - \char_set_catcode_escape:n { 92 } % \ - } - { \file_input:n {#1} } - { - \char_set_catcode:nn { 37 } { \char_value_catcode:n { 37 } } - \char_set_catcode:nn { 92 } { \char_value_catcode:n { 92 } } - } - } -% \end{macrocode} -% \end{macro} -% % \pkg{zhmCJK} 判断结束。 % \begin{macrocode} \fi: @@ -4284,22 +4242,18 @@ Copyright and Licence % \pkg{breqn} 包可能会在正文中将 |^| 的 \tn{catcode} 改为 $12$ 或 $13$,这将 % 破坏 \pkg{CJK} 对汉字的首字节的定义(\tn{CJK@loadBinding} 和 % \tn{CJK@loadEncoding})。因此需要确保载入 \file{.enc} 和 \file{.bdg} 文件时, -% |^| 的 \tn{catcode} 为 $7$。 +% |^| 的 \tn{catcode} 为 $7$。同时要设置 \tn{endlinechar} 为 $-1$。 % \begin{macrocode} \cs_new_protected:Npn \ctex_CJK_input:n #1 { - \ctex_file_wrapper:nnn - { - \char_set_catcode_other:n { 60 } % < - \char_set_catcode_math_superscript:n { 94 } % ^ - \int_set:Nn \tex_endlinechar:D { -1 } - } - { \file_input:n {#1} } - { - \char_set_catcode:nn { 60 } { \char_value_catcode:n { 60 } } - \char_set_catcode:nn { 94 } { \char_value_catcode:n { 94 } } - \int_set:Nn \tex_endlinechar:D { \int_use:N \tex_endlinechar:D } - } + \cctab_begin:N \c_@@_CJK_cctab + \file_input:n {#1} + \cctab_end: + } +\cctab_const:Nn \c_@@_CJK_cctab + { + \cctab_select:N \c_@@_package_cctab + \int_set:Nn \tex_endlinechar:D { -1 } } \cs_set_eq:NN \CJK@input \ctex_CJK_input:n % \end{macrocode} @@ -4567,6 +4521,7 @@ Copyright and Licence % \changes{v2.0}{2014/03/08}{通过 \pkg{LuaTeX-ja} 宏包支持 \LuaLaTeX。} % \changes{v2.3}{2015/09/25}{更新 \pkg{LuaTeX-ja} 支持(20150922.0)。} % \changes{v2.5}{2020/04/18}{更新 \pkg{LuaTeX-ja} 支持(20200412.0)。} +% \changes{v2.5.4}{2020/08/16}{更新 \pkg{LuaTeX-ja} 支持(20200808.0)。} % % \pkg{LuaTeX-ja} 为了兼容 p\LaTeX 的使用习惯,对 \LaTeXe 的 \pkg{NFSS} 作了不少 % 修改和扩充,这对于简体中文用户来说不是必要的。我们在这里禁用它。 @@ -4593,6 +4548,13 @@ Copyright and Licence { \msg_error:nnn { ctex } { package-too-old } { fontspec } } % \end{macrocode} % +% 引擎文件是通过 \cs{ctex_file_input:n} 载入的,其中的 \tn{catcodetable} 机制会完整恢复 +% 文件载入之前的 \tn{catcode} 状态,在引擎文件中的 \tn{catcode} 设置都无效。 +% 因此,对 \tn{ltjlineendcomment} 的设置要放到文件之外进行。 +% \begin{macrocode} +\ctex_at_end:n { \char_set_catcode_comment:n { \ltjlineendcomment } } +% \end{macrocode} +% % \paragraph{\pkg{LuaTeX-ja} 的默认设置} % % \begin{macrocode} @@ -4636,18 +4598,23 @@ Copyright and Licence \directlua{for x=128,255 do luatexja.math.is_math_letters[x] = true end} % \end{macrocode} % -% 以下设置抄录自 \file{ltj-latex.sty}。 +% 以下设置抄录自 2020/08/08 之前的 \file{ltj-latex.sty}。 +% 自 2020/08/08 开始,\pkg{LuaTeX-ja} 引入新的缓存机制,此段设置被整合进 \file{luatexja.lua}。 % \begin{macrocode} -\directlua{ - local s = kpse.find_file('ltj-kinsoku.lua', 'tex') - luatexja.stack.charprop_stack_table[0] = s and dofile(s) or {} -} -\ltjsetparameter{kanjiskip=\z@ plus .4pt minus .5pt, - xkanjiskip=.25\zw plus 1pt minus 1pt, - autospacing, autoxspacing, jacharrange={-1}, - yalbaselineshift=\z@, yjabaselineshift=\z@, - jcharwidowpenalty=500, differentjfm=paverage -} +\@ifpackagelater{luatexja}{2020/08/08} + { \ltjsetparameter { autospacing, autoxspacing, differentjfm = paverage } } + { + \directlua{ + local s = kpse.find_file('ltj-kinsoku.lua', 'tex') + luatexja.stack.charprop_stack_table[0] = s and dofile(s) or {} + } + \ltjsetparameter{kanjiskip=\z@ plus .4pt minus .5pt, + xkanjiskip=.25\zw plus 1pt minus 1pt, + autospacing, autoxspacing, jacharrange={-1}, + yalbaselineshift=\z@, yjabaselineshift=\z@, + jcharwidowpenalty=500, differentjfm=paverage + } + } % \end{macrocode} % % \begin{macrocode} @@ -6411,6 +6378,7 @@ Copyright and Licence % \subsubsection{修改主要字体命令} % % \changes{v2.5.2}{2020/05/06}{兼容 \LaTeX\ 2020-02-02 之前的版本。} +% \changes{v2.5.4}{2020/06/07}{修正主要字体命令补丁。} % % 修改 \tn{rmfamily} 等主要字体命令,使得中文字体能随西文主要字体更新。 % \LaTeX\ 2020-02-02 以后的版本可以直接使用 \tn{@rmfamilyhook} 等钩子。 @@ -6435,7 +6403,12 @@ Copyright and Licence \tl_new:N #1 \cs_if_exist:NTF #3 { \tl_gput_right:Nn #3 {#1} } - { \ctex_patch_cmd:Nnn #2 {#4} { #1#4 } } +% \end{macrocode} +% 注意此处不能用 \cs{ctex_patch_cmd:Nnn} 来打补丁,因其会关闭 \LaTeXiii 语法, +% 但 \pkg{fontspec} 会在 \tn{rmfamily} 的命令中相应加入 +% \cs{l__fontspec_rmfamily_encoding_tl} 等,导致补丁失败。 +% \begin{macrocode} + { \ctex_parse_name:NN \tl_replace_once:Nnn #2 {#4} { #1#4 } } } \ctex_provide_font_hook:NNN \rmfamily \@rmfamilyhook \selectfont \ctex_provide_font_hook:NNN \sffamily \@sffamilyhook \selectfont @@ -9025,17 +8998,31 @@ Copyright and Licence % \end{macro} % % \changes{v2.5.3}{2020/06/04}{兼容 \pkg{cleveref}。} -% \begin{macro}{\ctex_cleveref_hook:} +% \changes{v2.5.4}{2020/06/17}{同时兼容 \pkg{cleveref} 和 \pkg{hyperref}。} +% \begin{macro}{\ctex_cleveref_hook:,\@@_cleveref_hook_aux:N} % 需要将\pkg{cleveref} 包对应命令中 |\p@|\meta{counter} 的参数及时展开,以兼容 \tn{labelformat}。 % \begin{macrocode} \cs_new_protected:Npn \ctex_cleveref_hook: { - \ctex_patch_cmd:Nnn \refstepcounter@noarg - { \endcsname \csname the } - { \expandafter \endcsname \csname the } - \ctex_patch_cmd:Nnn \refstepcounter@optarg + \@ifpackageloaded { hyperref } + { \@@_cleveref_hook_aux:N \H@refstepcounter } + { + \@@_cleveref_hook_aux:N \refstepcounter@noarg + \@@_cleveref_hook_aux:N \refstepcounter@optarg + } + \@@_cleveref_hook_aux:N \appendix + } +\cs_new_protected:Npn \@@_cleveref_hook_aux:N #1 + { + \ctex_patch_cmd_all:NnnnTF #1 + { + \ExplSyntaxOff + \char_set_catcode_letter:n { 64 } + } { \endcsname \csname the } { \expandafter \endcsname \csname the } + { } + { \ctex_patch_failure:N #1 } } % \end{macrocode} % \end{macro} @@ -10766,9 +10753,10 @@ Copyright and Licence % \begin{macrocode} %<*zhmap> \begingroup\catcode61\catcode48\catcode32=10\relax% - \catcode 35=6 % # - \catcode123=1 % { - \catcode125=2 % } + \catcode 35=6 % # + \catcode 45=12 % - + \catcode123=1 % { + \catcode125=2 % } \toks0{\endlinechar=\the\endlinechar\relax}% \toks2{\endlinechar=-1 }% \def\x#1 #2 {% @@ -10830,17 +10818,17 @@ Copyright and Licence % 文件标识信息。 % \begin{macrocode} %<adobe>\ProvidesFile{ctex-zhmap-adobe.tex}% -%<adobe> [2020/06/06 v2.5.3 Adobe font map loader for DVIPDFMx (CTEX)] +%<adobe> [2020/08/23 v2.5.4 Adobe font map loader for DVIPDFMx (CTEX)] %<fandol>\ProvidesFile{ctex-zhmap-fandol.tex}% -%<fandol> [2020/06/06 v2.5.3 Fandol font map loader for DVIPDFMx (CTEX)] +%<fandol> [2020/08/23 v2.5.4 Fandol font map loader for DVIPDFMx (CTEX)] %<founder>\ProvidesFile{ctex-zhmap-founder.tex}% -%<founder> [2020/06/06 v2.5.3 Founder font map loader for pdfTeX and DVIPDFMx (CTEX)] +%<founder> [2020/08/23 v2.5.4 Founder font map loader for pdfTeX and DVIPDFMx (CTEX)] %<mac>\ProvidesFile{ctex-zhmap-mac.tex}% -%<mac> [2020/06/06 v2.5.3 Mac font map loader for DVIPDFMx (CTEX)] +%<mac> [2020/08/23 v2.5.4 Mac font map loader for DVIPDFMx (CTEX)] %<ubuntu>\ProvidesFile{ctex-zhmap-ubuntu.tex}% -%<ubuntu> [2020/06/06 v2.5.3 Ubuntu font map loader for DVIPDFMx (CTEX)] +%<ubuntu> [2020/08/23 v2.5.4 Ubuntu font map loader for DVIPDFMx (CTEX)] %<windows>\ProvidesFile{ctex-zhmap-windows.tex}% -%<windows> [2020/06/06 v2.5.3 Windows font map loader for pdfTeX and DVIPDFMx (CTEX)] +%<windows> [2020/08/23 v2.5.4 Windows font map loader for pdfTeX and DVIPDFMx (CTEX)] % \end{macrocode} % % \paragraph{\pkg{ctex-zhmap-adobe.tex}} @@ -11396,42 +11384,20 @@ Copyright and Licence % % \changes{v2.2}{2015/06/26}{将文档开头和宏包末尾钩子提取到 \pkg{ctexhook} 宏包中。} % \changes{v2.5}{2020/04/21}{增加宏包开头钩子。} +% \changes{v2.5.4}{2020/08/02}{兼容 \LaTeX \ 2020/10/01 的钩子机制。} % % \begin{macrocode} %<*ctexhook> % \end{macrocode} % -% \begin{macro}[int]{\ctex_at_end_preamble:n,\ctex_after_end_preamble:n} -% 实现 \pkg{etoolbox} 宏包的 \tn{AtEndPreamble} 和 \tn{AfterEndPreamble}。 -% \begin{macrocode} -\cs_new_protected:Npn \ctex_at_end_preamble:n - { \tl_gput_right:Nn \g_@@_end_preamble_hook_tl } -\cs_new_protected:Npn \ctex_after_end_preamble:n - { \tl_gput_right:Nn \g_@@_after_end_preamble_hook_tl } -\cs_new_protected:Npn \CTEX@document@left@hook - { \group_end: \g_@@_end_preamble_hook_tl \group_begin: } -\cs_new_protected:Npn \CTEX@document@right@hook - { \scan_stop: \g_@@_after_end_preamble_hook_tl \tex_ignorespaces:D } -\cs_set_nopar:Npx \document - { - \CTEX@document@left@hook - \exp_not:o { \document } - \CTEX@document@right@hook - } -\tl_new:N \g_@@_end_preamble_hook_tl -\tl_new:N \g_@@_after_end_preamble_hook_tl -% \end{macrocode} -% \end{macro} -% % \begin{macro}[int]{\ctex_at_begin_package:nn} % 如果宏包已经被载入,则钩子无效,给出警告。 -% 在 \pkg{filehook} 的钩子\emph{之前}起作用。 % \begin{macrocode} \cs_new_protected:Npn \ctex_at_begin_package:nn #1 { \@ifpackageloaded {#1} { \@@_package_loaded_warning:nn {#1} } - { \ctex_gadd_package_hook:nnn { begin } {#1} } + { \ctex_gadd_package_hook:nnn { before } {#1} } } \cs_new_protected:Npn \@@_package_loaded_warning:nn #1#2 { \msg_warning:nnx { ctex } { invalid-hook } {#1} } @@ -11446,17 +11412,55 @@ Copyright and Licence % \begin{macro}[int]{\ctex_at_end_package:nn} % 与 \pkg{filehook} 的 \tn{AtEndOfPackageFile*} 类似,如果原来没有在载入宏包则 % 在宏包末尾执行语句,否则立即执行。 -% 在 \pkg{filehook} 的钩子\emph{之后}起作用。 % \begin{macrocode} \cs_new_protected:Npn \ctex_at_end_package:nn #1 { \@ifpackageloaded {#1} { \use:n } - { \ctex_gadd_package_hook:nnn { end } {#1} } + { \ctex_gadd_package_hook:nnn { after } {#1} } } % \end{macrocode} % \end{macro} % +% \LaTeX \ 2020/10/01 开始提供常用钩子管理机制。在新机制下,我们只需要做简单的包装。 +% \begin{macrocode} +\@ifl@t@r \fmtversion { 2020/10/01 } + { + \cs_new_protected:Npx \ctex_at_end_preamble:n + { \hook_gput_code:nnn { env/document/before } { \c_novalue_tl } } + \cs_new_protected:Npx \ctex_after_end_preamble:n + { \hook_gput_code:nnn { begindocument/end } { \c_novalue_tl } } + \cs_new_protected:Npx \ctex_gadd_package_hook:nnn #1#2 + { \hook_gput_code:nnn { package/#1/#2 } { \c_novalue_tl } } + \file_input_stop: + } + { } +% \end{macrocode} +% +% 对于 \LaTeX \ 2020/10/01 之前的版本,需要自行补丁。 +% +% \begin{macro}[int]{\ctex_at_end_preamble:n,\ctex_after_end_preamble:n} +% 实现 \pkg{etoolbox} 宏包的 \tn{AtEndPreamble} 和 \tn{AfterEndPreamble}。 +% \begin{macrocode} +\cs_new_protected:Npn \ctex_at_end_preamble:n + { \tl_gput_right:Nn \g_@@_end_preamble_hook_tl } +\cs_new_protected:Npn \ctex_after_end_preamble:n + { \tl_gput_right:Nn \g_@@_after_end_preamble_hook_tl } +\cs_new_protected:Npn \CTEX@document@left@hook + { \group_end: \g_@@_end_preamble_hook_tl \group_begin: } +\cs_new_protected:Npn \CTEX@document@right@hook + { \scan_stop: \g_@@_after_end_preamble_hook_tl \tex_ignorespaces:D } +\cs_set_nopar:Npx \document + { + \CTEX@document@left@hook + \exp_not:o { \document } + \CTEX@document@right@hook + } +\tl_new:N \g_@@_end_preamble_hook_tl +\tl_new:N \g_@@_after_end_preamble_hook_tl +% \end{macrocode} +% \end{macro} +% % \begin{macro}[int]{\ctex_gadd_package_hook:nnn, % \ctex_gadd_hook:Nn, \ctex_gadd_hook:cn} % 给钩子附加内容。 @@ -11494,7 +11498,7 @@ Copyright and Licence \cs_new_protected:Npn \CTEX@reset@ptions@hook { \cs_if_eq:NNT \@currext \@pkgextension - { \ctex_use_package_hook:nn { begin } { \@currname } } + { \ctex_use_package_hook:nn { before } { \@currname } } } % \end{macrocode} % \end{macro} @@ -11506,7 +11510,7 @@ Copyright and Licence \cs_new_protected:Npn \CTEX@popfilename@hook { \cs_if_eq:NNT \@currext \@pkgextension - { \ctex_use_package_hook:nn { end } { \@currname } } + { \ctex_use_package_hook:nn { after } { \@currname } } } % \end{macrocode} % \end{macro} |