summaryrefslogtreecommitdiff
path: root/language/chinese
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2021-06-21 03:01:17 +0000
committerNorbert Preining <norbert@preining.info>2021-06-21 03:01:17 +0000
commite5ca43f7439d850f4193a932455792429cff61eb (patch)
tree35693997358e4b78d3efaeccbf948d9d68cf11ac /language/chinese
parent0b024adf546cd484554e4de5bd1a9919a4fdd03d (diff)
CTAN sync 202106210301
Diffstat (limited to 'language/chinese')
-rw-r--r--language/chinese/ctex/ctex.dtx488
-rw-r--r--language/chinese/ctex/ctex.pdfbin1214489 -> 1149510 bytes
2 files changed, 311 insertions, 177 deletions
diff --git a/language/chinese/ctex/ctex.dtx b/language/chinese/ctex/ctex.dtx
index a1af5c1bf5..81488b12ef 100644
--- a/language/chinese/ctex/ctex.dtx
+++ b/language/chinese/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 07425fe 2021-03-14 16:43:36 +0800 Xiangdong Zeng <xdzeng96@gmail.com> $
+%<+!driver>\GetIdInfo$Id: ctex.dtx 6604451 2021-06-20 17:08:49 +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.6}{\ExplFileDescription}
+%<!driver> {\ExplFileDate}{2.5.7}{\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> [2021/03/14 v2.5.6 Chinese font definition (CTEX)]
-%<ctexspa> [2021/03/14 v2.5.6 Space info for CJKpunct (CTEX)]
-%<backend> [2021/03/14 v2.5.6 Backend configuration file (CTEX)]
-%<dict&theorem> [2021/03/14 v2.5.6 Chinese translation for theorem name (CTEX)]
+%<fd> [2021/06/20 v2.5.7 Chinese font definition (CTEX)]
+%<ctexspa> [2021/06/20 v2.5.7 Space info for CJKpunct (CTEX)]
+%<backend> [2021/06/20 v2.5.7 Backend configuration file (CTEX)]
+%<dict&theorem> [2021/06/20 v2.5.7 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{6335}
+% \CheckSum{6400}
%
% \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
@@ -3177,7 +3177,6 @@ Copyright and Licence
% \item \pkg{expl3}、\pkg{xparse} 和 \pkg{l3keys2e} 宏包。它们属于 \pkg{l3kernel}
% 和 \pkg{l3packages} 宏集。
% \item \pkg{indentfirst} 宏包,属于 \pkg{tools} 宏集。
-% \item \pkg{everysel} 宏包,属于 \pkg{ms} 宏集。
% \item \pkg{zhnumber} 宏包。
% \item[\ding{229}] 以上是各种编译方式都必需的依赖项。
% \item \pkg{CJK} 宏集。
@@ -3215,7 +3214,6 @@ Copyright and Licence
% \end{itemize}
% \item \pkg{fontspec} 宏包。
% \item[\ding{229}] 以上是使用 \LuaLaTeX{} 编译时的依赖项。
-% \item \pkg{pxeverysel} 宏包,属于 \pkg{platex-tools} 宏集。
% \item \pkg{zhmetrics-uptex} 宏包。
% \item[\ding{229}] 以上是使用 \upLaTeX{} 编译时的依赖项。
% \end{itemize}
@@ -3294,34 +3292,6 @@ Copyright and Licence
%<@@=ctex>
% \end{macrocode}
%
-% 宏包载入检查。
-% \begin{macrocode}
-%<*class|ctex>
-\tl_const:Nx \c_@@_version_tl
- { \cs_if_exist_use:cF { ver@ \@currname . \@currext } { 9999/99/99 } }
-%<*class>
-\cs_new_eq:cN { ver@ctex. \@pkgextension } \c_@@_version_tl
-\cs_new_eq:cN { ver@ctexcap. \@pkgextension } \c_@@_version_tl
-\cs_new_eq:cN { ver@ctexsize. \@pkgextension } \c_@@_version_tl
-\cs_new_eq:cN { ver@ctexheading. \@pkgextension } \c_@@_version_tl
-%</class>
-%<*ctex>
-\msg_new:nnnn { ctex } { subpackage-loaded }
- { Package~`#1'~can~not~be~loaded~with~`ctex'. }
- {
- `#1'~is~actually~a~part~of~`ctex'.\\
- It~is~not~necessary~to~load~it~separately.
- }
-\@ifpackageloaded { ctexsize }
- { \msg_error:nnn { ctex } { subpackage-loaded } { ctexsize } }
- { \cs_new_eq:cN { ver@ctexsize. \@pkgextension } \c_@@_version_tl }
-\@ifpackageloaded { ctexheading }
- { \msg_error:nnn { ctex } { subpackage-loaded } { ctexheading } }
- { \cs_new_eq:cN { ver@ctexheading. \@pkgextension } \c_@@_version_tl }
-%</ctex>
-%</class|ctex>
-% \end{macrocode}
-%
% \begin{macrocode}
%<*class|style>
\RequirePackage { xparse , l3keys2e }
@@ -3387,9 +3357,36 @@ Copyright and Licence
% \begin{macrocode}
%<!ctexsize>\RequirePackage { ctexhook , ctexpatch }
%<!ctexheading>\RequirePackage { fix-cm }
+% \end{macrocode}
+%
+% 宏包载入检查。
+% \begin{macrocode}
+%<*class|ctex>
+%<*class>
+\ctex_disable_package:n { ctex }
+\ctex_disable_package:n { ctexcap }
+%</class>
+\ctex_disable_package:n { ctexsize }
+\ctex_disable_package:n { ctexheading }
+%</class|ctex>
+% \end{macrocode}
+%
+% \changes{v2.5.7}{2021/06/04}{兼容 \LaTeX \ 2021/06/01 的字体钩子。}
+%
+% \begin{variable}{\c_@@_everysel_loaded_bool}
+% \LaTeX \ 2021-06-01 以后的版本内建了 \pkg{everysel} 包的功能。
+% \begin{macrocode}
%<*!ctexsize>
-%<!ctexheading>\RequirePackage { everysel }
+%<*!ctexheading>
+\ctex_if_format_at_least:nTF { 2021/06/01 }
+ { \bool_const:Nn \c_@@_everysel_loaded_bool { \c_false_bool } }
+ {
+ \RequirePackage { everysel }
+ \bool_const:Nn \c_@@_everysel_loaded_bool { \c_true_bool }
+ }
+%</!ctexheading>
% \end{macrocode}
+% \end{variable}
%
% \subsection{内部函数与变量}
%
@@ -3417,7 +3414,6 @@ 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}
%
@@ -3425,54 +3421,9 @@ Copyright and Licence
% \changes{v2.5.4}{2020/08/02}{应用 \pkg{l3cctab}。}
% \changes{v2.5.5}{2020/10/17}{放弃应用 \pkg{l3cctab}。}
%
-% \begin{macro}[int]{\ctex_file_input:n}
-% 输入文件,关闭 \LaTeXiii 语法环境,并设置 |@| 为字母类、|^| 为上标和 \tn{endlinechar} 为 $13$。
-% \begin{macrocode}
-\cs_new_protected:Npn \ctex_file_input:n #1
- {
- \ctex_push_file:
- \file_input:n {#1}
- \ctex_pop_file:
- }
-\cs_new_protected:Npn \ctex_push_file:
- {
- \seq_gpush:Nx \g_@@_file_status_seq
- {
- {
- \bool_if:NTF \l__kernel_expl_bool
- { \ExplSyntaxOn }
- { \ExplSyntaxOff }
- }
- { \char_value_catcode:n { 64 } }
- { \char_value_catcode:n { 94 } }
- { \int_use:N \tex_endlinechar:D }
- }
- \ExplSyntaxOff
- \char_set_catcode_letter:n { 64 }
- \char_set_catcode_math_superscript:n { 94 }
- \int_set:Nn \tex_endlinechar:D { 13 }
- }
-\cs_new_protected:Npn \ctex_pop_file:
- {
- \seq_gpop:NN \g_@@_file_status_seq \l_@@_file_status_tl
- \exp_after:wN \@@_pop_file_aux:nnnn \l_@@_file_status_tl
- }
-\cs_new_protected:Npn \@@_pop_file_aux:nnnn #1#2#3#4
- {
- #1
- \char_set_catcode:nn { 64 } {#2}
- \char_set_catcode:nn { 94 } {#3}
- \int_set:Nn \tex_endlinechar:D {#4}
- }
-\tl_new:N \l_@@_file_status_tl
-\seq_new:N \g_@@_file_status_seq
-% \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_push_file:
@@ -4142,14 +4093,20 @@ Copyright and Licence
\cs_new_protected:Npn \ctex_use_zhmap:
{ \tl_use:N \g_@@_zhmap_tl }
\cs_if_exist:NTF \ctex_gadd_ltxhook:nn
- { \ctex_gadd_ltxhook:nn { shipout/firstpage } { \ctex_use_zhmap: } }
+ {
+ \cs_new_protected:Npn \ctex_at_shipout_first:n
+ { \ctex_gadd_ltxhook:nn { shipout/firstpage } }
+ \ctex_at_shipout_first:n { \ctex_use_zhmap: }
+ }
{
\cs_new_protected:Npn \ctex_add_dvi_zhmap:
{ \AtBeginDvi { \ctex_use_zhmap: } }
\ctex_after_end_preamble:n { \ctex_add_dvi_zhmap: }
\ctex_at_end_package:nn { atbegshi }
{
- \AtBeginShipoutFirst { \ctex_use_zhmap: }
+ \cs_new_protected:Npn \ctex_at_shipout_first:n
+ { \AtBeginShipoutFirst }
+ \ctex_at_shipout_first:n { \ctex_use_zhmap: }
\cs_gset_eq:NN \ctex_add_dvi_zhmap: \prg_do_nothing:
}
}
@@ -4189,30 +4146,40 @@ Copyright and Licence
% \end{macrocode}
% \end{macro}
%
+% \changes{v2.5.7}{2021/06/06}{更好地兼容 \pkg{cmap} 包。}
+%
% \begin{macro}[int]{\ctex_add_cmap:n}
+% \changes{v2.5.7}{2021/06/06}{确保 cmap 文件存在。}
% 给 |#1| 编码的 CJK 字体加上 CMap。
% \begin{macrocode}
\cs_new_protected:Npn \ctex_add_cmap:n #1
{
\cs_if_free:NF \CJK@plane
- { \ctex_add_cmap:cn { @@_add_cmap_ #1 \CJK@plane : } {#1} }
+ { \exp_args:Ne \@@_add_cmap_auxi:n { #1 \CJK@plane } }
}
-\cs_new_protected:Npn \ctex_add_cmap:Nn #1#2
+\cs_new_protected:Npn \@@_add_cmap_auxi:n #1
+ { \exp_args:Nc \@@_add_cmap_auxii:Nn { @@_add_cmap_ #1 : } {#1} }
+\cs_new_protected:Npn \@@_add_cmap_auxii:Nn #1#2
{
\cs_if_exist:NF #1 { \@@_save_cmap:Nn #1 {#2} }
#1
}
-\cs_generate_variant:Nn \ctex_add_cmap:Nn { c }
\cs_new_protected:Npn \@@_save_cmap:Nn #1#2
{
- \tl_set:Nx \l_@@_tmp_tl { \str_lowercase:n {#2} \CJK@plane }
- \tex_immediate:D \tex_pdfobj:D stream ~ file { \l_@@_tmp_tl .cmap }
- \cs_new_protected:Npx #1
+ \exp_args:Ne \file_get_full_name:nNTF
+ { \str_lowercase:n {#2} .cmap } \l_@@_cmap_file_tl
{
- \exp_not:N \tex_pdffontattr:D \exp_not:N \tex_font:D
- { /ToUnicode ~ \int_use:N \tex_pdflastobj:D \c_space_tl 0 ~ R }
+ \tex_immediate:D \tex_pdfobj:D stream ~ file { \l_@@_cmap_file_tl }
+ \cs_new_protected:Npx #1
+ {
+ \pdfnobuiltintounicode \tex_font:D
+ \tex_pdffontattr:D \tex_font:D
+ { /ToUnicode ~ \int_value:w \tex_pdflastobj:D \c_space_tl 0 ~ R }
+ }
}
+ { \cs_new_eq:NN #1 \prg_do_nothing: }
}
+\tl_new:N \l_@@_cmap_file_tl
% \end{macrocode}
% \end{macro}
%
@@ -4228,7 +4195,10 @@ Copyright and Licence
{ \CTEX@Family@CMap {#1} {#2} }
{
\ctex_at_end_package:nn { cmap }
- { \cs_gset_eq:NN \CTEX@Family@CMap \use_none:nn }
+ {
+ \cs_gset_eq:NN \ctex_add_cmap:n \use_none:n
+ \cs_gset_eq:NN \CTEX@Family@CMap \use_none:nn
+ }
}
{ \ctex_patch_failure:N \DeclareFontFamily }
}
@@ -4273,10 +4243,7 @@ Copyright and Licence
% \end{macrocode}
%
% \begin{macro}[int]{\ctex_CJK_input:n,\CJK@input}
-% \pkg{breqn} 包可能会在正文中将 |^| 的 \tn{catcode} 改为 $12$ 或 $13$,这将
-% 破坏 \pkg{CJK} 对汉字的首字节的定义(\tn{CJK@loadBinding} 和
-% \tn{CJK@loadEncoding})。因此需要确保载入 \file{.enc} 和 \file{.bdg} 文件时,
-% |^| 的 \tn{catcode} 为 $7$。同时要设置 \tn{endlinechar} 为 $-1$。
+% 载入 \pkg{CJK} 包的 \file{.enc} 和 \file{.bdg} 等文件时,需要设置 \tn{endlinechar} 为 $-1$。
% \begin{macrocode}
\cs_new_protected:Npn \ctex_CJK_input:n #1
{
@@ -4296,27 +4263,43 @@ Copyright and Licence
% \footnote{\url{https://github.com/CTeX-org/ctex-kit/issues/146}}。
% 我们在这里给出 \tn{CJK@surr} 的一个不依赖 \tn{uppercase} 的实现。
% \begin{macrocode}
-\if_cs_exist:N \CJK@surr
- \cs_new_protected:Npn \ctex_plane_to_utfxvibe:Nn #1#2
- {
- \tl_set:Nx \l_@@_tmp_tl {#2}
- \int_set:Nn \l_@@_tmp_int
- { \exp_args:No \int_from_hex:n { \l_@@_tmp_tl } }
- \int_compare:nNnTF \l_@@_tmp_int < { 256 }
- { \tl_gset:Nx #1 { \int_to_Hex:n { \l_@@_tmp_int } } }
- {
- \int_sub:Nn \l_@@_tmp_int { 256 }
- \tl_gset:Nx #1
- {
- \int_to_Hex:n
- { \int_div_truncate:nn { \l_@@_tmp_int } { 4 } + "D800 }
- \int_to_Hex:n
- { \int_mod:nn { \l_@@_tmp_int } { 4 } + "DC }
- }
- }
- }
- \cs_set_eq:NN \CJK@surr \ctex_plane_to_utfxvibe:Nn
-\fi:
+\cs_if_free:NF \CJK@surr
+ {
+ \cs_new_protected:Npn \ctex_plane_to_utfxvibe:Nn #1#2
+ {
+ \int_set:Nn \l_@@_tmp_int
+ { \exp_args:Ne \int_from_hex:n {#2} }
+ \int_compare:nNnTF \l_@@_tmp_int < { 256 }
+ { \tl_gset:Nx #1 { \int_to_Hex:n { \l_@@_tmp_int } } }
+ {
+ \int_sub:Nn \l_@@_tmp_int { 256 }
+ \tl_gset:Nx #1
+ {
+ \int_to_Hex:n
+ { \int_div_truncate:nn { \l_@@_tmp_int } { 4 } + "D800 }
+ \int_to_Hex:n
+ { \int_mod:nn { \l_@@_tmp_int } { 4 } + "DC }
+ }
+ }
+ }
+ \cs_set_eq:NN \CJK@surr \ctex_plane_to_utfxvibe:Nn
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[int]{\CJK@addcmap}
+% \changes{v2.5.7}{2021/06/06}{应用 \tn{pdfnobuiltintounicode}。}
+% \LaTeX \ 2021-06-01 默认载入 \file{glyphtounicode.tex},我们对 CJK 字体禁用这一内建设置。
+% \begin{macrocode}
+\cs_if_free:NF \CJK@addcmap
+ {
+ \ctex_patch_cmd:Nnn \CJK@addcmap
+ { \pdffontattr \font@name }
+ {
+ \pdfnobuiltintounicode \font@name
+ \pdffontattr \font@name
+ }
+ }
% \end{macrocode}
% \end{macro}
%
@@ -4565,7 +4548,13 @@ Copyright and Licence
}
\@ifpackageloaded { luatexja }
{ \msg_critical:nnx { ctex } { luatexja-loaded } { \g_file_curr_name_str } }
- { \tl_const:cn { ver@ltj-latex.\@pkgextension } { 9999/99/99 } }
+ {
+ \ctex_at_begin_package:nn { luatexja }
+ { \msg_redirect_name:nnn { ctex } { disable-package } { info } }
+ \ctex_at_end_package:nn { luatexja }
+ { \msg_redirect_name:nnn { ctex } { disable-package } { } }
+ \ctex_disable_package:n { ltj-latex }
+ }
% \end{macrocode}
%
% \begin{macrocode}
@@ -4580,6 +4569,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}
@@ -6393,7 +6389,8 @@ Copyright and Licence
% \pkg{everysel} 宏包(2011/10/28)未考虑 \upLaTeX{} 对 \tn{selectfont} 的修
% 改,需要引入 \pkg{pxeverysel} 宏包。
% \begin{macrocode}
-\RequirePackage { pxeverysel }
+\bool_if:NT \c_@@_everysel_loaded_bool
+ { \RequirePackage { pxeverysel } }
% \end{macrocode}
%
% \begin{macrocode}
@@ -6580,11 +6577,15 @@ Copyright and Licence
% \end{macrocode}
% \end{macro}
%
+% \changes{v2.5.7}{2021/06/06}{禁用 \dvipdfmx\ 驱动的 \opt{unicode} 书签设置。}
+%
% 在 \pdfTeX{} 下使用 \texttt{GBK} 编码,\dvipdfmx{} 驱动可以直接用它的
% \tn{special} 命令,其他模式用 \pkg{xCJK2uni} 宏包处理。使用 \texttt{UTF-8} 编
% 码时,\pkg{CJKutf8} 已经处理了书签问题,但仍需要设置 \opt{pdfencoding} 为
% \opt{unicode},目的是在书签的开头写入 BOM (|\376\377|),提示这是
% \texttt{UTF-16BE} 字节流。
+% \pkg{hyperref} 2021-02-04 版开始默认设置 \opt{unicode} 为 \opt{true},
+% 对于 \dvipdfmx\ 驱动,我们需要禁用这个设置,为此设置 \opt{pdfencoding} 为 \opt{pdfdoc}。
% \begin{macrocode}
%<*pdftex>
\ctex_hypersetup:n { driverfallback = dvipdfmx }
@@ -6594,11 +6595,12 @@ Copyright and Licence
\sys_if_output_pdf:TF
{ \ctex_at_end_package:nn { hyperref } { \RequirePackage { xCJK2uni } } }
{
+ \ctex_hypersetup:n { pdfencoding = pdfdoc }
\ctex_at_end_package:nn { hyperref }
{
\str_if_eq:onTF { \Hy@driver } { hdvipdfm }
{
- \AtBeginShipoutFirst
+ \ctex_at_shipout_first:n
{ \special { pdf:tounicode~GBK-EUC-UCS2 } }
}
{ \RequirePackage { xCJK2uni } }
@@ -6619,9 +6621,16 @@ Copyright and Licence
% 置。注意 \upTeX{} 需要使用 UTF8-UTF16 的编码转换。
% \begin{macrocode}
%<*uptex|aptex>
-\ctex_hypersetup:n { driverfallback = dvipdfmx }
+\ctex_hypersetup:n
+ {
+ driverfallback = dvipdfmx ,
+ pdfencoding = pdfdoc
+ }
\ctex_at_end_package:nn { hyperref }
- { \AtBeginShipoutFirst { \special { pdf:tounicode~UTF8-UTF16 } } }
+ {
+ \ctex_at_shipout_first:n
+ { \special { pdf:tounicode~UTF8-UTF16 } }
+ }
%</uptex|aptex>
% \end{macrocode}
%
@@ -6759,13 +6768,6 @@ Copyright and Licence
% \begin{macro}[int]{\ctex_add_to_selectfont:n,\CTEX@selectfont@hook}
% \changes{v2.4.13}{2018/03/23}{修正导言区 \tn{selectfont} 钩子位置。}
% \changes{v2.5}{2020/04/19}{兼容 \pkg{KOMA-Script} 的 \tn{selectfont} 补丁。}
-%
-% \tn{EverySelectfont} 直到文档开始时才有效。为了 \tn{ccwd} 和 \pkg{LuaTeX-ja} 的
-% 字体设置在导言区也可用,我们还需要在这里手工修改 \tn{selectfont}。\pkg{everysel}
-% 宏包会用 \tn{CheckCommand} 来检查 \tn{selectfont} 是否为标准定义。我们修改了
-% \tn{selectfont},所以会给出一个警告。为了消除这个警告,在它检查之前,还原本来
-% 定义。\pkg{pxeverysel} 宏包取消了检查,但也需要恢复定义,避免重复使用钩子。
-% \pkg{KOMA-Script} 宏包也会进行检查,我们需要小心处理。
% \begin{macrocode}
\cs_new_protected:Npn \ctex_add_to_selectfont:n #1
{
@@ -6773,49 +6775,68 @@ Copyright and Licence
{ \exp_not:o { \CTEX@selectfont@hook #1 } }
}
\cs_new_eq:NN \CTEX@selectfont@hook \prg_do_nothing:
-\if_cs_exist:N \@EverySelectfont@Init
- \group_begin:
- \cs_set:Npn \@@_tmp:N #1
- {
- \tl_set:Nn \l_@@_tmp_tl {#1}
- \cs_new_eq:NN \CTEX@selectfont@save #1
- \cs_new_protected:Npn \@@_restore_selectfont:
- {
- \cs_if_free:NF \scr@new@selectfont
- {
+% \end{macrocode}
+% 使用 \pkg{everysel} 包的情况。
+% \tn{EverySelectfont} 直到文档开始时才有效。为了 \tn{ccwd} 和 \pkg{LuaTeX-ja} 的
+% 字体设置在导言区也可用,我们还需要在这里手工修改 \tn{selectfont}。\pkg{everysel}
+% 宏包会用 \tn{CheckCommand} 来检查 \tn{selectfont} 是否为标准定义。我们修改了
+% \tn{selectfont},所以会给出一个警告。为了消除这个警告,在它检查之前,还原本来
+% 定义。\pkg{pxeverysel} 宏包取消了检查,但也需要恢复定义,避免重复使用钩子。
+% \pkg{KOMA-Script} 宏包也会进行检查,我们需要小心处理。
+% \begin{macrocode}
+\if_bool:N \c_@@_everysel_loaded_bool
+ \if_cs_exist:N \@EverySelectfont@Init
+ \group_begin:
+ \cs_set:Npn \@@_tmp:N #1
+ {
+ \tl_set:Nn \l_@@_tmp_tl {#1}
+ \cs_new_eq:NN \CTEX@selectfont@save #1
+ \cs_new_protected:Npn \@@_restore_selectfont:
+ {
+ \cs_if_free:NF \scr@new@selectfont
+ {
% \end{macrocode}
% \pkg{CJK} 直接修改 \tn{selectfont} 和 \pkg{pxeverysel} 的补丁,
% 会使 \pkg{KOMA-Script} 的 \tn{par@update} 失效。
% \begin{macrocode}
%<*pdftex|uptex|aptex>
- \cs_if_free:NF \par@update
+ \cs_if_free:NF \par@update
%<*uptex|aptex>
- {
- \tl_put_right:Nn \@EverySelectfont@Init
- { \tl_put_right:Nn #1 { \par@update } }
- }
+ {
+ \tl_put_right:Nn \@EverySelectfont@Init
+ { \tl_put_right:Nn #1 { \par@update } }
+ }
%</uptex|aptex>
%<*pdftex>
- { \tl_put_right:Nn #1 { \par@update } }
- \cs_set_eq:NN \scr@selectfont \CTEX@selectfont@save
+ { \tl_put_right:Nn #1 { \par@update } }
+ \cs_set_eq:NN \scr@selectfont \CTEX@selectfont@save
%</pdftex>
%</pdftex|uptex|aptex>
- \cs_set_eq:NN \scr@new@selectfont #1
-%<!pdftex> \cs_set_eq:NN \CTEX@selectfont@save \scr@selectfont
- }
- \tl_put_left:Nn \@EverySelectfont@Init
- { \cs_set_eq:NN #1 \CTEX@selectfont@save }
- \cs_undefine:N \@@_restore_selectfont:
- }
- }
- \ctex_parse_name:NN \@@_tmp:N \selectfont
- \exp_last_unbraced:NNo \group_end:
- \ctex_patch_cmd_once:NnnnTF { \l_@@_tmp_tl }
- { \ExplSyntaxOff }
- { \size@update }
- { \CTEX@selectfont@hook \size@update }
- { \@@_restore_selectfont: }
- { \ctex_patch_failure:N \selectfont }
+ \cs_set_eq:NN \scr@new@selectfont #1
+%<!pdftex> \cs_set_eq:NN \CTEX@selectfont@save \scr@selectfont
+ }
+ \tl_put_left:Nn \@EverySelectfont@Init
+ { \cs_set_eq:NN #1 \CTEX@selectfont@save }
+ \cs_undefine:N \@@_restore_selectfont:
+ }
+ }
+ \ctex_parse_name:NN \@@_tmp:N \selectfont
+ \exp_last_unbraced:NNo \group_end:
+ \ctex_patch_cmd_once:NnnnTF { \l_@@_tmp_tl }
+ { \ExplSyntaxOff }
+ { \size@update }
+ { \CTEX@selectfont@hook \size@update }
+ { \@@_restore_selectfont: }
+ { \ctex_patch_failure:N \selectfont }
+ \fi:
+ \cs_new_protected:Npn \ctex_gadd_selectfont_hook:n
+ { \EverySelectfont }
+% \end{macrocode}
+% 使用 \LaTeX \ 2021-06-01 的新钩子,不使用 \pkg{everysel} 包的情况。
+% \begin{macrocode}
+\else:
+ \cs_new_protected:Npn \ctex_gadd_selectfont_hook:n
+ { \ctex_gadd_ltxhook:nn { selectfont } }
\fi:
% \end{macrocode}
% \end{macro}
@@ -6823,10 +6844,11 @@ Copyright and Licence
% \tn{CJK@plane} 有定义,说明处于 \pkg{CJK} 宏包的 \tn{CJKsymbol} 之内,不必使用钩子。
% \begin{macrocode}
%<*pdftex>
-\EverySelectfont { \cs_if_exist:NF \CJK@plane { \CTEX@selectfont@hook } }
+\ctex_gadd_selectfont_hook:n
+ { \cs_if_exist:NF \CJK@plane { \CTEX@selectfont@hook } }
%</pdftex>
%<*xetex|luatex|uptex|aptex>
-\EverySelectfont { \CTEX@selectfont@hook }
+\ctex_gadd_selectfont_hook:n { \CTEX@selectfont@hook }
%</xetex|luatex|uptex|aptex>
% \end{macrocode}
%
@@ -9072,13 +9094,18 @@ Copyright and Licence
%
% \changes{v2.5.3}{2020/06/04}{兼容 \pkg{cleveref}。}
% \changes{v2.5.4}{2020/06/17}{同时兼容 \pkg{cleveref} 和 \pkg{hyperref}。}
+% \changes{v2.5.7}{2021/06/04}{同时兼容 \pkg{cleveref} 和 \cls{beamer}。}
% \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:
{
\@ifpackageloaded { hyperref }
- { \@@_cleveref_hook_aux:N \H@refstepcounter }
+ {
+ \@ifpackagewith { hyperref } { implicit = false }
+ { }
+ { \@@_cleveref_hook_aux:N \H@refstepcounter }
+ }
{
\@@_cleveref_hook_aux:N \refstepcounter@noarg
\@@_cleveref_hook_aux:N \refstepcounter@optarg
@@ -9761,8 +9788,8 @@ Copyright and Licence
% \begin{macrocode}
\int_case:nn { \g_@@_font_size_int }
{
- { 0 } { \ctex_file_input:n { ctex-c5size.clo } }
- { 1 } { \ctex_file_input:n { ctex-cs4size.clo } }
+ { 0 } { \file_input:n { ctex-c5size.clo } }
+ { 1 } { \file_input:n { ctex-cs4size.clo } }
}
% \end{macrocode}
%
@@ -10891,17 +10918,17 @@ Copyright and Licence
% 文件标识信息。
% \begin{macrocode}
%<adobe>\ProvidesFile{ctex-zhmap-adobe.tex}%
-%<adobe> [2021/03/14 v2.5.6 Adobe font map loader for DVIPDFMx (CTEX)]
+%<adobe> [2021/06/20 v2.5.7 Adobe font map loader for DVIPDFMx (CTEX)]
%<fandol>\ProvidesFile{ctex-zhmap-fandol.tex}%
-%<fandol> [2021/03/14 v2.5.6 Fandol font map loader for DVIPDFMx (CTEX)]
+%<fandol> [2021/06/20 v2.5.7 Fandol font map loader for DVIPDFMx (CTEX)]
%<founder>\ProvidesFile{ctex-zhmap-founder.tex}%
-%<founder> [2021/03/14 v2.5.6 Founder font map loader for pdfTeX and DVIPDFMx (CTEX)]
+%<founder> [2021/06/20 v2.5.7 Founder font map loader for pdfTeX and DVIPDFMx (CTEX)]
%<mac>\ProvidesFile{ctex-zhmap-mac.tex}%
-%<mac> [2021/03/14 v2.5.6 Mac font map loader for DVIPDFMx (CTEX)]
+%<mac> [2021/06/20 v2.5.7 Mac font map loader for DVIPDFMx (CTEX)]
%<ubuntu>\ProvidesFile{ctex-zhmap-ubuntu.tex}%
-%<ubuntu> [2021/03/14 v2.5.6 Ubuntu font map loader for DVIPDFMx (CTEX)]
+%<ubuntu> [2021/06/20 v2.5.7 Ubuntu font map loader for DVIPDFMx (CTEX)]
%<windows>\ProvidesFile{ctex-zhmap-windows.tex}%
-%<windows> [2021/03/14 v2.5.6 Windows font map loader for pdfTeX and DVIPDFMx (CTEX)]
+%<windows> [2021/06/20 v2.5.7 Windows font map loader for pdfTeX and DVIPDFMx (CTEX)]
% \end{macrocode}
%
% \paragraph{\pkg{ctex-zhmap-adobe.tex}}
@@ -11463,6 +11490,113 @@ Copyright and Licence
%<*ctexhook>
% \end{macrocode}
%
+% \begin{macro}[int]{\ctex_if_format_at_least:nTF}
+% 与 \tn{IfFormatAtLeastTF} 同义。
+% \begin{macrocode}
+\cs_new:Npn \ctex_if_format_at_least:nTF
+ { \@ifl@t@r \fmtversion }
+% \end{macrocode}
+% \end{macro}
+%
+% \changes{v2.5.7}{2021/06/12}{重新应用 \pkg{l3cctab}。}
+%
+% \begin{macro}[int]{\ctex_file_input:n,\ctex_push_file:,\ctex_pop_file:}
+% 输入文件,关闭 \LaTeXiii 语法环境,并设置 |@| 为字母类,利用 \pkg{l3cctab} 实现。
+% 我们使用 \cs{file_input:n} 而不是 \LaTeXe \ 的 \tn{input} 或者 \tn{InputIfFileExists}
+% 载入文件,因此 \LaTeXe \ 的文件钩子都\emph{无效}。
+% \begin{macrocode}
+\cs_new_protected:Npn \ctex_file_input:n #1
+ {
+ \ctex_push_file:
+ \file_input:n {#1}
+ \ctex_pop_file:
+ }
+\bool_if_exist:NTF \l__kernel_expl_bool
+ {
+ \cs_new_protected:Npn \ctex_push_file:
+ {
+ \seq_gpush:Nx \g_@@_expl_status_seq
+ { \bool_if:NTF \l__kernel_expl_bool { 1 } { 0 } }
+ \bool_set_false:N \l__kernel_expl_bool
+ \cctab_begin:N \c_@@_package_cctab
+ }
+ \cs_new_protected:Npn \ctex_pop_file:
+ {
+ \cctab_end:
+ \seq_gpop:NN \g_@@_expl_status_seq \l_@@_expl_status_tl
+ \int_if_odd:nTF { \l_@@_expl_status_tl }
+ { \bool_set_true:N \l__kernel_expl_bool }
+ { \bool_set_false:N \l__kernel_expl_bool }
+ }
+ \tl_new:N \l_@@_expl_status_tl
+ \seq_new:N \g_@@_expl_status_seq
+ }
+ {
+ \cs_new_protected:Npn \ctex_push_file:
+ { \cctab_begin:N \c_@@_package_cctab }
+ \cs_new_protected:Npn \ctex_pop_file:
+ { \cctab_end: }
+ }
+\cctab_const:Nn \c_@@_package_cctab
+ {
+ \cctab_select:N \c_document_cctab
+ \char_set_catcode_letter:n { 64 }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \changes{v2.5.7}{2021/06/09}{使用 \tn{disable@package@load} 禁止宏包载入。}
+%
+% \begin{macro}[int]{\ctex_disable_package:n}
+% 禁止宏包载入。采用 \LaTeX \ 2020-10-01 提供的 \tn{disable@package@load} 实现,
+% 否则采用传统方式:预定义 |\ver@|\meta{package}|.sty| 标识符。
+% \begin{macrocode}
+\cs_new_protected:Npn \ctex_disable_package:n #1
+ {
+ \@ifpackageloaded {#1}
+ { \msg_error:nnxx }
+ { \@@_disable_package_aux:nnnn }
+ { ctex } { disable-package } {#1} { \@currname }
+ }
+\cs_new_protected:Npx \@@_disable_package_aux:nnnn #1#2#3#4
+ {
+ \cs_if_exist:NTF \disable@package@load
+ {
+ \exp_args:Nnx \exp_not:N \disable@package@load {#3}
+ { \msg_warning:nnnn {#1} {#2} {#3} {#4} }
+ }
+ { \tl_const:cn { ver@ #3 . \exp_not:N \@pkgextension } { 9999/99/99 } }
+ }
+\msg_new:nnn { ctex } { disable-package }
+ { Package~`#1'~can~not~be~loaded~with~`#2'. }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[int]{\ctex_replace_package:nn}
+% 替换宏包。采用 \LaTeX \ 2020-10-01 提供的 \tn{declare@file@substitution} 实现,
+% 否则给出无效警告。
+% \begin{macrocode}
+\ctex_if_format_at_least:nTF { 2020/10/01 }
+ {
+ \cs_new_protected:Npn \ctex_replace_package:nn #1#2
+ {
+ \declare@file@substitution
+ { #1 . \@pkgextension }
+ { #2 . \@pkgextension }
+ }
+ }
+ {
+ \cs_new_protected:Npn \ctex_replace_package:nn
+ { \msg_warning:nnnn { ctex } { replace-package-invalid } }
+ \msg_new:nnn { ctex } { replace-package-invalid }
+ {
+ \token_to_str:N \ctex_replace_package:nn \{#1\}\{#2\}~is~invalid~
+ before~LaTeX~2020-10-01.
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
% \begin{macro}[int]{\ctex_at_begin_package:nn}
% 如果宏包已经被载入,则钩子无效,给出警告。
% \begin{macrocode}
@@ -11499,7 +11633,7 @@ Copyright and Licence
%
% \LaTeX \ 2020/10/01 开始提供常用钩子管理机制。在新机制下,我们只需要做简单的包装。
% \begin{macrocode}
-\@ifl@t@r \fmtversion { 2020/10/01 }
+\ctex_if_format_at_least:nTF { 2020/10/01 }
{
\cs_new_protected:Npx \ctex_gadd_ltxhook:nn #1
{ \hook_gput_code:nnn {#1} { \c_novalue_tl } }
diff --git a/language/chinese/ctex/ctex.pdf b/language/chinese/ctex/ctex.pdf
index 76adf7b92c..073c674a84 100644
--- a/language/chinese/ctex/ctex.pdf
+++ b/language/chinese/ctex/ctex.pdf
Binary files differ