From 37f53e8a8423b2fc2d4d553ceeae604c7ce66b27 Mon Sep 17 00:00:00 2001
From: Karl Berry <karl@freefriends.org>
Date: Sat, 6 Jun 2020 21:12:36 +0000
Subject: ctex (6jun20)

git-svn-id: svn://tug.org/texlive/trunk@55440 c570f23f-e606-0410-a88d-b1316a301751
---
 Master/texmf-dist/source/latex/ctex/ctex.dtx | 242 ++++++++++++++++++---------
 1 file changed, 161 insertions(+), 81 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 bc86f369f79..c0a472bab2b 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 4819efe 2020-05-16 21:20:43 +0800 Qing Lee <sobenlee@gmail.com> $
+%<+!driver>\GetIdInfo$Id: ctex.dtx 76d4e94 2020-06-06 23:22:18 +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.2}{\ExplFileDescription}
+%<!driver>  {\ExplFileDate}{2.5.3}{\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/05/16 v2.5.2 Chinese font definition (CTEX)]
-%<ctexspa>  [2020/05/16 v2.5.2 Space info for CJKpunct (CTEX)]
-%<backend>  [2020/05/16 v2.5.2 Backend configuration file (CTEX)]
-%<dict&theorem>  [2020/05/16 v2.5.2 Chinese translation for theorem name (CTEX)]
+%<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)]
 %</!(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{6116}
+% \CheckSum{6222}
 %
 % \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
@@ -3214,16 +3214,6 @@ Copyright and Licence
 %     \item \pkg{xkeyval} 宏包。
 %   \end{itemize}
 %   \item \pkg{fontspec} 宏包。
-%   \item \pkg{xunicode-addon} 宏包，属于 \pkg{xeCJK} 宏集，它还依赖
-%   \begin{itemize}
-%     \item \pkg{xunicode} 宏包，它还依赖
-%     \begin{itemize}
-%       \item \pkg{graphics} 宏集。
-%       \item \pkg{graphics-cfg} 宏包。
-%       \item \pkg{graphics-def} 宏包。
-%       \item \pkg{tipa} 宏包。
-%     \end{itemize}
-%   \end{itemize}
 %   \item[\ding{229}] 以上是使用 \LuaLaTeX{} 编译时的依赖项。
 %   \item \pkg{pxeverysel} 宏包，属于 \pkg{platex-tools} 宏集。
 %   \item \pkg{zhmetrics-uptex} 宏包。
@@ -3430,25 +3420,36 @@ Copyright and Licence
 %    \end{macrocode}
 % \end{macro}
 %
+% \changes{v2.5.3}{2020/06/06}{正确关闭和恢复 \LaTeXiii 语法环境。}
+%
 % \begin{macro}[int]{\ctex_file_wrapper:nnn}
 % 设置文件操作的 \tn{catcode} 环境，参数 |#1| 是设置，|#2| 是文件操作，|#3| 是恢复。
 % 默认关闭 \LaTeXiii{} 语法环境，并设置 |@| 的 \tn{catcode} 为 $11$。
+% 这里最自然的使用 \pkg{l3cctab} 来实现，但目前 \pkg{l3cctab} 还属于
+% \pkg{l3experimental}，我们暂时不依赖它。
 %    \begin{macrocode}
 %</!ctexsize>
-\cs_new_protected:Npn \ctex_file_wrapper:nnn #1#2#3
+\cs_new_protected:Npn \ctex_file_wrapper:nnn
   {
-    \use:x
+    \exp_args:NNx \ExplSyntaxOff
+    \@@_file_wrapper_aux:nnnn
       {
-        \ExplSyntaxOff
-        \char_set_catcode_letter:n { 64 }
-        #1
-        \exp_not:n {#2}
         \bool_if:NTF \l__kernel_expl_bool
           { \ExplSyntaxOn }
           { \ExplSyntaxOff }
+      }
+  }
+\cs_new_protected:Npn \@@_file_wrapper_aux:nnnn #1#2#3#4
+  {
+    \use:x
+      {
+        \char_set_catcode_letter:n { 64 }
+        #2
+        \exp_not:n {#3}
         \char_set_catcode:nn { 64 } { \char_value_catcode:n { 64 } }
-        #3
+        #4
       }
+    #1
   }
 %    \end{macrocode}
 % \end{macro}
@@ -4623,10 +4624,10 @@ Copyright and Licence
   "A960-"A97F, "AC00-"D7FF}
 \ltjdefcharrange{8}{"A7, "A8, "B0, "B1, "B4, "B6, "D7, "F7}
 %    \end{macrocode}
-% 将引号、破折号等中西文公用的标点符号归入字符范围 9，将他们设置为 JAchar。
+% 将间隔号、引号、破折号等中西文公用的标点符号归入字符范围 9，将他们设置为 JAchar。
 %    \begin{macrocode}
 \ltjdefcharrange{9}{%
-  "2018, "2019, "201C, "201D, "2013, "2014, "2025, "2026, "2027, "2E3A}
+  "00B7, "2018, "2019, "201C, "201D, "2013, "2014, "2025, "2026, "2027, "2E3A}
 %    \end{macrocode}
 % \changes{v2.4.11}{2017/08/17}{不把希腊和西里尔字母设置为 JAchar。}
 % \pkg{LuaTeX-ja} 默认把字符范围 2 和 3 设置为 JAchar，我们这里把它们都改成 ALchar。
@@ -4659,15 +4660,13 @@ Copyright and Licence
 %<@@=ctex_ltj>
 %    \end{macrocode}
 %
-% \changes{v2.3}{2015/09/26}{更新 \pkg{unicode-math} 宏包补丁。}
+% \changes{v2.5.3}{2020/05/31}{不再依赖 \pkg{xunicode}，单独补丁 \file{tuenc.def}。}
 %
-% 在 \LaTeX{} 下，\pkg{LuaTeX-ja} 对 \pkg{fontspec}、\pkg{xunicode}、\pkg{unicode-math}
-% 和 \pkg{listings} 打了补丁。其中前三个是把 \tn{char} 换成 \tn{ltjalchar}，确保
-% 字符是 ALchar 类。我们这里用 \pkg{xunicode-addon} 来处理 \pkg{xunicode}。
+% \begin{macro}{\CTEX@alchar, \CTEX@beginallalchar, \CTEX@endallalchar}
+% 分组中的字符都是 ALchar 类。
 %    \begin{macrocode}
-\RequirePackage { xunicode-addon }
-\AtBeginUTFCommand { \CTEX@beginallalchar }
-\AtEndUTFCommand   { \CTEX@endallalchar }
+\cs_new_protected:Npn \CTEX@alchar #1
+  { \CTEX@beginallalchar #1 \CTEX@endallalchar }
 \cs_new_protected:Npn \CTEX@beginallalchar
   {
     \group_begin:
@@ -4677,6 +4676,110 @@ Copyright and Licence
 \cs_new_protected:Npn \CTEX@endallalchar
   { \group_end: }
 %    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\CTEX@chardef@text@cmd}
+% 补丁 \tn{chardef@text@cmd}，应用于 \tn{DeclareTextSymbol}，使其定义的符号都是 ALchar。
+%    \begin{macrocode}
+\cs_new_protected:Npn \CTEX@chardef@text@cmd #1
+  {
+    \cs_set_eq:NN \@ifdefinable \@@@@ifdefinable
+    \tl_set:Nn \l_@@_cmd_tl {#1}
+    \tex_afterassignment:D \@@_chardef_text_cmd:
+    \tex_chardef:D #1
+  }
+\tl_new:N \l_@@_cmd_tl
+\cs_new_protected:Npn \@@_chardef_text_cmd:
+  { \exp_after:wN \@@_chardef_text_cmd_aux:N \l_@@_cmd_tl }
+\cs_new_protected:Npn \@@_chardef_text_cmd_aux:N #1
+  {
+    \int_compare:nNnF {#1} < { "80 }
+      { \cs_set_protected:Npx #1 { \CTEX@alchar { \tex_Uchar:D #1 } } }
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\CTEX@text@composite@x}
+% \tn{@text@composite@x} 的重定义，应用于 \tn{DeclareUnicodeComposite} 等。
+%    \begin{macrocode}
+\cs_new_protected:Npn \CTEX@text@composite@x #1#2
+  {
+    \CTEX@beginallalchar
+      \cs_if_exist_use:NF #1 {#2}
+    \CTEX@endallalchar
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\CTEX@add@unicode@accent}
+% \tn{add@unicode@accent} 的重定义，应用于 \tn{DeclareUnicodeAccent}。
+%    \begin{macrocode}
+\cs_new_protected:Npx \CTEX@add@unicode@accent #1#2
+  {
+    \CTEX@beginallalchar
+      \exp_not:N \tl_if_blank:nTF {#2} { \tex_Uchar:D "A0 ~ } {#2}
+      \exp_not:N \tex_Uchar:D \tex_numexpr:D #1 \scan_stop:
+    \CTEX@endallalchar
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\CTEX@patch@text@cmd}
+% 单独补丁由 \tn{DeclareTextCommand} 定义的命令。
+%    \begin{macrocode}
+\cs_new_protected:Npn \CTEX@patch@text@cmd #1
+  {
+    \exp_args:NNc \@@_patch_text_cmd:NN #1
+      { \UnicodeEncodingName \token_to_str:N #1 }
+  }
+\cs_new_protected:Npn \@@_patch_text_cmd:NN #1#2
+  {
+    \cs_set_eq:NN \CTEX@textcmd #2
+    \ctex_preto_cmd:NnnTF \CTEX@textcmd
+      { \ExplSyntaxOff \makeatletter }
+      { \CTEX@beginallalchar }
+      {
+        \ctex_appto_cmd:NnnTF \CTEX@textcmd
+          { \ExplSyntaxOff \makeatletter }
+          { \CTEX@endallalchar }
+          { \cs_set_eq:NN #2 \CTEX@textcmd }
+          { \ctex_patch_failure:N #1 }
+      }
+      { \ctex_patch_failure:N #1 }
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\CTEX@patch@tunec}
+% 重新载入 \tn{tunec.def}，使补丁生效。
+%    \begin{macrocode}
+\cs_new_protected:Npn \CTEX@patch@tunec
+  {
+    \cs_set_eq:NN \chardef@text@cmd   \CTEX@chardef@text@cmd
+    \ctex_file_input:n { tuenc.def }
+    \cs_set_eq:NN \@text@composite@x  \CTEX@text@composite@x
+    \cs_set_eq:NN \add@unicode@accent \CTEX@add@unicode@accent
+    \CTEX@patch@text@cmd \textasteriskcentered
+  }
+\@ifpackageloaded { xunicode }
+  { }
+  { \CTEX@patch@tunec }
+%    \end{macrocode}
+% \end{macro}
+%
+% \changes{v2.3}{2015/09/26}{更新 \pkg{unicode-math} 宏包补丁。}
+%
+% 在 \LaTeX{} 下，\pkg{LuaTeX-ja} 对 \pkg{fontspec}、\pkg{xunicode}、\pkg{unicode-math}
+% 和 \pkg{listings} 打了补丁。其中前三个是把 \tn{char} 换成 \tn{ltjalchar}，确保
+% 字符是 ALchar 类。我们这里用 \pkg{xunicode-addon} 来处理 \pkg{xunicode}。
+%    \begin{macrocode}
+\ctex_at_end_package:nn { xunicode }
+  {
+    \RequirePackage { xunicode-addon }
+    \AtBeginUTFCommand { \CTEX@beginallalchar }
+    \AtEndUTFCommand   { \CTEX@endallalchar }
+  }
+%    \end{macrocode}
 %
 % \changes{v2.4.2}{2016/05/15}{恢复 \pkg{luatexja} 对 \tn{emshape} 和
 % \tn{eminnershape} 的重定义。}
@@ -6495,47 +6598,7 @@ Copyright and Licence
   { \ctex_hypersetup:n { pdfencoding = unicode } }
 %</pdftex>
 %    \end{macrocode}
-% 在 \XeTeX{} 下，\pkg{hyperref} 在处理带有非 ASCII 字符和 |\%| 的书签时有问题^^A
-% \footnote{\url{https://github.com/CTeX-org/ctex-kit/issues/39}}。
-% 事实上，\pkg{hyperref} 在驱动文件 \file{hxetex.def} 中设置了
-% \tn{Hy@unicodetrue}，从而书签总是会被 \tn{HyPsd@ConvertToUnicode} 转化成
-% \texttt{UTF-16BE} 编码的形式（抄录自 \tn{pdfstringdef}的定义）：
-% \begin{verbatim}
-%       \ifHy@unicode
-%         \HyPsd@ConvertToUnicode#1%
-%         \ifx\HyPsd@pdfencoding\HyPsd@pdfencoding@auto
-%           \ltx@IfUndefined{StringEncodingConvertTest}{%
-%           }{%
-%             \EdefUnescapeString\HyPsd@temp#1%
-%             \ifxetex
-%               \let\HyPsd@UnescapedString\HyPsd@temp
-%               \StringEncodingConvertTest\HyPsd@temp\HyPsd@temp
-%                                         {utf16be}{ascii-print}{%
-%                 \EdefEscapeString\HyPsd@temp\HyPsd@temp
-%                 \global\let#1\HyPsd@temp
-%                 \HyPsd@EscapeTeX#1%
-%                 \Hy@unicodefalse
-%               }{%
-%                \HyPsd@ToBigChars#1%
-%               }%
-% \end{verbatim}
-% 通过宏包选项 \opt{pdfencoding=unicode} 设置 \tn{HyPsd@pdfencoding} 为
-% \opt{unicode}，可以避免随后再将书签从 \texttt{UTF-16BE} 字节流转化回正常
-% 字符（其中使用的 \tn{HyPsd@ToBigChars} 没有考虑书签中含有 |\%| 的情况）。
-% Heiko Oberdiek 在 \file{README} 中说明了将书签转化回正常字符的意图：避免
-% XDVIPDFMX 的警告^^A
-% \footnote{\url{http://project.ktug.org/dvipdfmx/mailman/dvipdfmx/2009-December/000153.html}}：
-% \begin{verbatim}
-%   ** WARNING ** Failed to convert input string to UTF16...
-% \end{verbatim}
-% \XeTeX{} 的维护者 Khaled Hosny 已经注意到了这个问题^^A
-% \footnote{\url{http://tug.org/pipermail/tex-live/2013-December/034613.html}}。
-% 需要注意的是，\file{hxetex.def} 重载了宏包选项 \opt{unicode}，目的是不能设置
-% 它为 \opt{false}，但也导致它不会改变 \tn{HyPsd@pdfencoding}。如果
-% \pkg{hyperref} 先于 \CTeX{} 被载入，那么 \opt{unicode} 选项是没有意义的。
-% 因此要通过意义相同但在 \XeTeX{} 下更保险的 \opt{pdfencoding} 选项来设置。
-% 为了与 \XeTeX 下的行为一致（使用 \tn{HyPsd@LoadUnicode} 载入 \file{puenc.def}），
-% 在 \LuaTeX{} 下也启用这个选项。
+% \XeTeX 和 \LuaTeX 统一设置 \opt{pdfencoding} 为 \opt{unicode}。
 %    \begin{macrocode}
 %<*xetex|luatex>
 \ctex_hypersetup:n { pdfencoding = unicode }
@@ -8937,11 +9000,12 @@ Copyright and Licence
   {
     \seq_map_inline:Nn \c_@@_headings_seq
       { \ctex_fix_varioref_label:n { ##1 } }
+    \ctex_at_end_package:nn { cleveref } { \ctex_cleveref_hook: }
   }
 %    \end{macrocode}
 % \end{macro}
 %
-% \begin{macro}{\@@_fix_varioref_label:n}
+% \begin{macro}{\ctex_fix_varioref_label:n}
 % \pkg{varioref} 宏包的 \tn{labelformat} 实际上是定义一个以 |\the<#1>| 为参数的宏
 % |\p@<#1>|。\LaTeX{} 在定义计数器 |<#1>| 时，都会将 |\p@<#1>| 初始化为 \tn{@empty}。
 % 如果这个宏非空，说明用户自定义了标签格式，我们就不再修改。这里不能使用
@@ -8960,6 +9024,22 @@ Copyright and Licence
 %    \end{macrocode}
 % \end{macro}
 %
+% \changes{v2.5.3}{2020/06/04}{兼容 \pkg{cleveref}。}
+% \begin{macro}{\ctex_cleveref_hook:}
+% 需要将\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
+      { \endcsname \csname the }
+      { \expandafter \endcsname \csname the }
+  }
+%    \end{macrocode}
+% \end{macro}
+%
 % \changes{v2.5}{2020/04/19}{应用新内核中的 \tn{labelformat}。}
 %
 % 如果 \pkg{varioref} 已经被载入，则使用它来设置。
@@ -10750,17 +10830,17 @@ Copyright and Licence
 % 文件标识信息。
 %    \begin{macrocode}
 %<adobe>\ProvidesFile{ctex-zhmap-adobe.tex}%
-%<adobe>  [2020/05/16 v2.5.2 Adobe font map loader for DVIPDFMx (CTEX)]
+%<adobe>  [2020/06/06 v2.5.3 Adobe font map loader for DVIPDFMx (CTEX)]
 %<fandol>\ProvidesFile{ctex-zhmap-fandol.tex}%
-%<fandol>  [2020/05/16 v2.5.2 Fandol font map loader for DVIPDFMx (CTEX)]
+%<fandol>  [2020/06/06 v2.5.3 Fandol font map loader for DVIPDFMx (CTEX)]
 %<founder>\ProvidesFile{ctex-zhmap-founder.tex}%
-%<founder>  [2020/05/16 v2.5.2 Founder font map loader for pdfTeX and DVIPDFMx (CTEX)]
+%<founder>  [2020/06/06 v2.5.3 Founder font map loader for pdfTeX and DVIPDFMx (CTEX)]
 %<mac>\ProvidesFile{ctex-zhmap-mac.tex}%
-%<mac>  [2020/05/16 v2.5.2 Mac font map loader for DVIPDFMx (CTEX)]
+%<mac>  [2020/06/06 v2.5.3 Mac font map loader for DVIPDFMx (CTEX)]
 %<ubuntu>\ProvidesFile{ctex-zhmap-ubuntu.tex}%
-%<ubuntu>  [2020/05/16 v2.5.2 Ubuntu font map loader for DVIPDFMx (CTEX)]
+%<ubuntu>  [2020/06/06 v2.5.3 Ubuntu font map loader for DVIPDFMx (CTEX)]
 %<windows>\ProvidesFile{ctex-zhmap-windows.tex}%
-%<windows>  [2020/05/16 v2.5.2 Windows font map loader for pdfTeX and DVIPDFMx (CTEX)]
+%<windows>  [2020/06/06 v2.5.3 Windows font map loader for pdfTeX and DVIPDFMx (CTEX)]
 %    \end{macrocode}
 %
 % \paragraph{\pkg{ctex-zhmap-adobe.tex}}
-- 
cgit v1.2.3

