diff options
author | Karl Berry <karl@freefriends.org> | 2020-06-06 21:12:36 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2020-06-06 21:12:36 +0000 |
commit | 37f53e8a8423b2fc2d4d553ceeae604c7ce66b27 (patch) | |
tree | 9c180f6707e2378a784fe113be7ee73b1d7a49ae /Master/texmf-dist/source/latex | |
parent | 064deb07bb23380362fff63e0d3f1162d2ea2765 (diff) |
ctex (6jun20)
git-svn-id: svn://tug.org/texlive/trunk@55440 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/source/latex')
-rw-r--r-- | Master/texmf-dist/source/latex/ctex/ctex.dtx | 242 |
1 files changed, 161 insertions, 81 deletions
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}} |