From 66b9b693db7f4cf04485426bc74dd2e4ae31a1d9 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Sun, 12 Dec 2021 22:29:51 +0000 Subject: ctex (12dec21) git-svn-id: svn://tug.org/texlive/trunk@61285 c570f23f-e606-0410-a88d-b1316a301751 --- Master/texmf-dist/source/latex/ctex/ctex.dtx | 175 ++++++++++++++------------- 1 file changed, 91 insertions(+), 84 deletions(-) (limited to 'Master/texmf-dist/source/latex/ctex/ctex.dtx') diff --git a/Master/texmf-dist/source/latex/ctex/ctex.dtx b/Master/texmf-dist/source/latex/ctex/ctex.dtx index 81488b12ef2..adc4440bc7f 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 %\NeedsTeXFormat{LaTeX2e} %\input{ctexbackend.cfg} %\RequirePackage{expl3} -%<+!driver>\GetIdInfo$Id: ctex.dtx 6604451 2021-06-20 17:08:49 +0800 Qing Lee $ +%<+!driver>\GetIdInfo$Id: ctex.dtx fcbe2c0 2021-12-12 18:20:54 +0800 Qing Lee $ % {Chinese adapter in LaTeX (CTEX)} %\ProvidesExplPackage{\ExplFileName} % {Chinese font size definition (CTEX)} @@ -530,7 +530,7 @@ Copyright and Licence %\ProvidesExplFile{ctex-fontset-founder.def} % {Ubuntu fonts definition (CTEX)} %\ProvidesExplFile{ctex-fontset-ubuntu.def} -% {\ExplFileDate}{2.5.7}{\ExplFileDescription} +% {\ExplFileDate}{2.5.8}{\ExplFileDescription} % %\ProvidesFile{c19rm.fd}% %\ProvidesFile{c19sf.fd}% @@ -548,10 +548,10 @@ Copyright and Licence %\ProvidesFile{ctexbackend.cfg}% %\ProvidesDictionary{translator-theorem-dictionary}{ChineseGBK}% %\ProvidesDictionary{translator-theorem-dictionary}{ChineseUTF8}% -% [2021/06/20 v2.5.7 Chinese font definition (CTEX)] -% [2021/06/20 v2.5.7 Space info for CJKpunct (CTEX)] -% [2021/06/20 v2.5.7 Backend configuration file (CTEX)] -% [2021/06/20 v2.5.7 Chinese translation for theorem name (CTEX)] +% [2021/12/12 v2.5.8 Chinese font definition (CTEX)] +% [2021/12/12 v2.5.8 Space info for CJKpunct (CTEX)] +% [2021/12/12 v2.5.8 Backend configuration file (CTEX)] +% [2021/12/12 v2.5.8 Chinese translation for theorem name (CTEX)] % %<*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{6400} +% \CheckSum{6420} % % \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 @@ -4782,33 +4782,53 @@ Copyright and Licence % % \paragraph{\pkg{Lua} 函数} % +% \changes{v2.5.8}{2021/11/29}{简化部分 \pkg{Lua} 函数。} +% % 直接用 |token.set_lua| 定义,不是传统意义上的 \TeX \ 宏。 % \begin{macrocode} \group_begin: \char_set_catcode_space:n { 32 } \lua_now:e { - local func = lua.get_functions_table() +% \end{macrocode} +% \begin{macro}{ctex.newluacmd} +% 定义新的 \pkg{Lua} 函数。 +% \begin{macrocode} + ctex = ctex or { } + local ctex = ctex + local functions = lua.get_functions_table() + local new_luafunction = luatexbase.new_luafunction + local create, set_lua = token.create, token.set_lua + local lua_cmds = { + lua_call = true , + lua_expandable_call = true , + } + local newluacmd = function (name, func, ...) + local tok = create(name) + local id = lua_cmds[tok.cmdname] and tok.index + local id = id or new_luafunction(name) + set_lua(name, id, ...) + functions[id] = func + end + ctex.newluacmd = newluacmd +% \end{macrocode} +% \end{macro} +% \begin{macrocode} local ltjfont = luatexja.jfont local getattribute = tex.getattribute - local set_lua = token.set_lua + local tex_set, sprint = tex.set, tex.sprint local scan_int, scan_arg = token.scan_int, token.scan_argument - local new_luafunction = luatexbase.new_luafunction % \end{macrocode} % \begin{macro}{\ctex_ltj_add_kyenc:n} % 保存 jfont 的编码,用于判断。 % \begin{macrocode} - local id = new_luafunction("ctex") - func[id] = ltjfont.add_kyenc_list - set_lua("ctex_ltj_add_kyenc:n", id, "global", "protected") + newluacmd("ctex_ltj_add_kyenc:n", ltjfont.add_kyenc_list, "global", "protected") % \end{macrocode} % \end{macro} % \begin{macro}{\ctex_ltj_is_kenc:n} % 判断编码是否属于 jfont。 % \begin{macrocode} - local id = new_luafunction("ctex") - func[id] = ltjfont.is_kenc - set_lua("ctex_ltj_is_kenc:n", id, "global") + newluacmd("ctex_ltj_is_kenc:n", ltjfont.is_kenc, "global") % \end{macrocode} % \end{macro} % \begin{macro}{\ctex_ltj_patch_external_font:n} @@ -4823,8 +4843,7 @@ Copyright and Licence % 主要目的是,如果当前字形有替代字体,则往字形的定义中加入一些标志,确保 % \texttt{font.id} 唯一。 % \begin{macrocode} - local id = new_luafunction("ctex") - func[id] = function () + newluacmd("ctex_ltj_patch_external_font:n", function () local s = scan_arg() local is_braced, is_quoted if s:sub(1,1) == '{' and s:sub(-1)=='}' then @@ -4837,108 +4856,75 @@ Copyright and Licence if is_braced then s = '{'..s..'}' elseif is_quoted then s = '"'..s..'"' end - tex.sprint(-2, s) - end - set_lua("ctex_ltj_patch_external_font:n", id, "global") + sprint(-2, s) + end, "global") % \end{macrocode} % \end{macro} % \begin{macro}{\ctex_ltj_use_jfont:} % 使用 jfont,确保当前的 \tn{font} 是 jfont。 % \begin{macrocode} - local id = new_luafunction("ctex") - func[id] = function () + newluacmd("ctex_ltj_use_jfont:", function () font.current(getattribute("ltj@curjfnt")) - end - set_lua("ctex_ltj_use_jfont:", id, "global", "protected") + end, "global", "protected") % \end{macrocode} % \end{macro} % \begin{macro}{\ctex_ltj_set_alt_font:nnnn} % |#1| 和 |#2| 分别是字符区间的首末,|#3| 是基础字体,|#4| 是替代字体。 % \begin{macrocode} - local id = new_luafunction("ctex") - func[id] = function () + newluacmd("ctex_ltj_set_alt_font:nnnn", function () local b = tonumber(scan_arg()) local e = tonumber(scan_arg()) local alt = scan_arg() local base = scan_arg() ltjfont.set_alt_font_latex(b, e, alt, base) - end - set_lua("ctex_ltj_set_alt_font:nnnn", id, "global", "protected") + end, "global", "protected") % \end{macrocode} % \end{macro} % \begin{macro}{\ctex_ltj_clear_alt_font:n} % 清除 |#1| 的替代字体。 % \begin{macrocode} - local id = new_luafunction("ctex") - func[id] = function () + newluacmd("ctex_ltj_clear_alt_font:n", function () local base = scan_arg() ltjfont.clear_alt_font_latex(base) - end - set_lua("ctex_ltj_clear_alt_font:n", id, "global", "protected") + end, "global", "protected") % \end{macrocode} % \end{macro} % \begin{macro}{\ctex_ltj_pickup_alt_font:nn} % 定义 |#1| 的替代字体,|#2| 是字体大小。\\ % 会在内部执行 \tn{ltj@pickup@altfont@auxy} 和 \tn{ltj@pickup@altfont@copy}。 % \begin{macrocode} - local id = new_luafunction("ctex") - func[id] = function () + newluacmd("ctex_ltj_pickup_alt_font:nn", function () local base = scan_arg() local size = scan_arg() ltjfont.output_alt_font_cmd("y", base) ltjfont.pickup_alt_font_a(size) - end - set_lua("ctex_ltj_pickup_alt_font:nn", id, "global", "protected") + end, "global", "protected") % \end{macrocode} % \end{macro} % \begin{macro}{\@@_pickup_alt_font:Nn} % |#1| 是 \texttt{font.id},|#2| 是字体名称。 % 在 \tn{ltj@pickup@altfont@copy} 之中使用。 % \begin{macrocode} - local id = new_luafunction("ctex") - func[id] = function () + newluacmd("@@_pickup_alt_font:Nn", function () local num = scan_int() local base = scan_arg() ltjfont.pickup_alt_font_b(num, base) - end - set_lua("@@_pickup_alt_font:Nn", id, "global", "protected") + end, "global", "protected") % \end{macrocode} % \end{macro} % \begin{macro}{\@@_if_alt_set:nT} % 判断是否存在替代字体。会设置变量 |aftl_base| 和返回 \tn{@firstofone} 或 \tn{@gobble}。 -% \begin{verbatim} -% function luatexja.jfont.does_alt_set(bbase) -% aftl_base = alt_font_table_latex[bbase] -% tex.sprint(cat_lp, aftl_base and '\\@firstofone' or '\\@gobble') -% end -% \end{verbatim} -% \pkg{luatexja} 20200412.0 以后的定义为: -% \begin{verbatim} -% function luatexja.jfont.does_alt_set() -% aftl_base = alt_font_table_latex[scan_arg()] -% tex.sprint(cat_lp, aftl_base and '\\@firstofone' or '\\@gobble') -% end -% \end{verbatim} % \begin{macrocode} - local id = new_luafunction("ctex") - func[id] = \LuaTeXjaversion > 20200412.0 - and ltjfont.does_alt_set - or function () - local base = scan_arg() - ltjfont.does_alt_set(base) - end - set_lua("@@_if_alt_set:nT", id, "global") + newluacmd("@@_if_alt_set:nT", ltjfont.does_alt_set, "global") % \end{macrocode} % \end{macro} % \begin{macro}{\ctex_ltj_zero_globaldefs:} % 设置 \tn{globaldefs} 为 $0$,避免全局设置,应当在分组中使用。 % 这里通过 Lua 设置,可以不受外部 \TeX\ 环境中的 \tn{globaldefs} 的影响。 % \begin{macrocode} - local id = new_luafunction("ctex") - func[id] = function () - tex.set("globaldefs", 0) - end - set_lua("ctex_ltj_zero_globaldefs:", id, "global", "protected") + newluacmd("ctex_ltj_zero_globaldefs:", function () + tex_set("globaldefs", 0) + end, "global", "protected") } \group_end: % \end{macrocode} @@ -4962,6 +4948,8 @@ Copyright and Licence % \end{macrocode} % \end{macro} % +% \changes{v2.5.8}{2021/11/18}{兼容 \pkg{microtype}。} +% % \begin{macro}{\@@_select_font_aux:} % 使用 \tn{pickup@font} 取得字体名称前,总需要先设置 \tn{font@name}。在这里将 % \tn{f@family} 换成 CJK 字体族,并确保编码正确。 @@ -4971,7 +4959,8 @@ Copyright and Licence \group_begin: \tl_set_eq:NN \f@encoding \CJK@encoding \tl_set_eq:NN \f@family \CJK@family - \@@_push_fontname:n { \use:c { \curr@fontshape / \f@size } } + \cs_set_eq:NN \pickup@font \ctex_ltj_pickup_font: + \@@_push_fontname:n { \curr@fontshape / \f@size } \ctex_ltj_pickup_font: \group_end: \font@name @@ -4988,12 +4977,12 @@ Copyright and Licence \cs_new_protected:Npn \@@_push_fontname:n #1 { \seq_gpush:No \g_@@_fontname_seq { \font@name } - \cs_gset_nopar:Npx \font@name {#1} + \tl_gset:Nx \font@name { \exp_not:c {#1} } } \cs_new_protected:Npn \@@_pop_fontname: { \seq_gpop:NNT \g_@@_fontname_seq \l_@@_tmp_tl - { \cs_gset_eq:NN \font@name \l_@@_tmp_tl } + { \tl_gset_eq:NN \font@name \l_@@_tmp_tl } } \seq_new:N \g_@@_fontname_seq % \end{macrocode} @@ -5152,7 +5141,7 @@ Copyright and Licence { \group_begin: \use:e { \exp_not:N \split@name #1 / \f@size } \@nil - \@@_push_fontname:n { \use:c { \curr@fontshape / \f@size } } + \@@_push_fontname:n { \curr@fontshape / \f@size } \ctex_ltj_pickup_font: \group_end: \@@_pop_fontname: @@ -6922,17 +6911,14 @@ Copyright and Licence local fmt = luatexja.jfont.font_metric_table local getattribute = tex.getattribute local setdimen = tex.setdimen - local func = lua.get_functions_table() - local id = luatexbase.new_luafunction("ctex") - func[id] = function () + ctex.newluacmd("ctex_update_kanjisize:", function () local ft = fmt[getattribute("ltj@curjfnt")] or nulltable local ft = ft and ft.char_type or nulltable local fk = ft and ft[0] or nulltable setdimen("cht", fk.height or 0) setdimen("cdp", fk.depth or 0) setdimen("cwd", fk.width or ft.zw or 0) - end - token.set_lua("ctex_update_kanjisize:", id, "global", "protected") + end, "global", "protected") } \group_end: \ctex_add_to_selectfont:n { \ctex_update_kanjisize: } @@ -8635,6 +8621,22 @@ Copyright and Licence } % \end{macrocode} % +% \changes{v2.5.8}{2021/12/04}{兼容 \pkg{titlesec} 包和 \tn{CTEXifname}。} +% 在 \pkg{titlesec} 包定义的标题中更新 \tn{CTEXifname}。 +% \begin{macrocode} +\ctex_at_end_package:nn { titlesec } + { + \ctex_patch_cmd:Nnn \ttl@labelling + { \let \ifttl@toclabel \ifttl@label } + { + \let \ifttl@toclabel \ifttl@label + \CTEX@updatettlifname + } + \cs_new_protected:Npn \CTEX@updatettlifname + { \ifttl@label \CTEX@ifnametrue \else: \CTEX@ifnamefalse \fi: } + } +% \end{macrocode} +% % \paragraph{兼容 \pkg{titleps} 宏包} % % \changes{v2.3}{2015/12/25}{兼容 \pkg{titleps} 宏包。} @@ -10918,17 +10920,17 @@ Copyright and Licence % 文件标识信息。 % \begin{macrocode} %\ProvidesFile{ctex-zhmap-adobe.tex}% -% [2021/06/20 v2.5.7 Adobe font map loader for DVIPDFMx (CTEX)] +% [2021/12/12 v2.5.8 Adobe font map loader for DVIPDFMx (CTEX)] %\ProvidesFile{ctex-zhmap-fandol.tex}% -% [2021/06/20 v2.5.7 Fandol font map loader for DVIPDFMx (CTEX)] +% [2021/12/12 v2.5.8 Fandol font map loader for DVIPDFMx (CTEX)] %\ProvidesFile{ctex-zhmap-founder.tex}% -% [2021/06/20 v2.5.7 Founder font map loader for pdfTeX and DVIPDFMx (CTEX)] +% [2021/12/12 v2.5.8 Founder font map loader for pdfTeX and DVIPDFMx (CTEX)] %\ProvidesFile{ctex-zhmap-mac.tex}% -% [2021/06/20 v2.5.7 Mac font map loader for DVIPDFMx (CTEX)] +% [2021/12/12 v2.5.8 Mac font map loader for DVIPDFMx (CTEX)] %\ProvidesFile{ctex-zhmap-ubuntu.tex}% -% [2021/06/20 v2.5.7 Ubuntu font map loader for DVIPDFMx (CTEX)] +% [2021/12/12 v2.5.8 Ubuntu font map loader for DVIPDFMx (CTEX)] %\ProvidesFile{ctex-zhmap-windows.tex}% -% [2021/06/20 v2.5.7 Windows font map loader for pdfTeX and DVIPDFMx (CTEX)] +% [2021/12/12 v2.5.8 Windows font map loader for pdfTeX and DVIPDFMx (CTEX)] % \end{macrocode} % % \paragraph{\pkg{ctex-zhmap-adobe.tex}} @@ -11630,6 +11632,7 @@ Copyright and Licence % \end{macro} % % \changes{v2.5.6}{2021/02/16}{使用正确的导言区末尾钩子。} +% \changes{v2.5.8}{2021/11/18}{兼容 \LaTeX \ 2021/11/15。} % % \LaTeX \ 2020/10/01 开始提供常用钩子管理机制。在新机制下,我们只需要做简单的包装。 % \begin{macrocode} @@ -11641,8 +11644,12 @@ Copyright and Licence { \ctex_gadd_ltxhook:nn { begindocument/before } } \cs_new_protected:Npn \ctex_after_end_preamble:n { \ctex_gadd_ltxhook:nn { begindocument/end } } - \cs_new_protected:Npn \ctex_gadd_package_hook:nnn #1#2 - { \ctex_gadd_ltxhook:nn { package/#1/#2 } } + \cs_new_protected:Npx \ctex_gadd_package_hook:nnn #1#2 + { + \ctex_if_format_at_least:nTF { 2021/11/15 } + { \ctex_gadd_ltxhook:nn { package/#2/#1 } } + { \ctex_gadd_ltxhook:nn { package/#1/#2 } } + } \file_input_stop: } { } -- cgit v1.2.3