summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/ctex/ctexart.cls
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2020-05-02 22:24:14 +0000
committerKarl Berry <karl@freefriends.org>2020-05-02 22:24:14 +0000
commit15f0c94913f0d5cb24dd909c5358b3a997994dd7 (patch)
tree9043df32cd0199835f5b3f9804ad132907857139 /Master/texmf-dist/tex/latex/ctex/ctexart.cls
parent151fbc4b66cb3705f6ce20368a2c6f7c06b8d57d (diff)
ctex (2may20)
git-svn-id: svn://tug.org/texlive/trunk@54976 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/ctex/ctexart.cls')
-rw-r--r--Master/texmf-dist/tex/latex/ctex/ctexart.cls662
1 files changed, 358 insertions, 304 deletions
diff --git a/Master/texmf-dist/tex/latex/ctex/ctexart.cls b/Master/texmf-dist/tex/latex/ctex/ctexart.cls
index 1065d74e814..f0dabcdf0be 100644
--- a/Master/texmf-dist/tex/latex/ctex/ctexart.cls
+++ b/Master/texmf-dist/tex/latex/ctex/ctexart.cls
@@ -6,9 +6,9 @@
%%
%% ctex.dtx (with options: `class,article')
%%
-%% Copyright (C) 2003--2019
+%% Copyright (C) 2003--2020
%% CTEX.ORG and any individual authors listed in the documentation.
-%% ------------------------------------------------------------------------------
+%% ---------------------------------------------------------------------
%%
%% This work may be distributed and/or modified under the
%% conditions of the LaTeX Project Public License, either
@@ -20,18 +20,17 @@
%% and version 1.3 or later is part of all distributions of
%% LaTeX version 2005/12/01 or later.
%%
-%% This work has the LPPL maintenance status `maintained'.
+%% This work has the LPPL maintenance status "maintained".
%%
-%% The Current Maintainers of this work are Leo Liu, Qing Lee and Liam Huang.
-%%
-%% ------------------------------------------------------------------------------
+%% ---------------------------------------------------------------------
%%
\NeedsTeXFormat{LaTeX2e}
+\input{ctexbackend.cfg}
\RequirePackage{expl3}
-\GetIdInfo$Id: ctex.dtx 735dfe2 2019-05-29 21:42:29 +0800 Qing Lee <sobenlee@gmail.com> $
+\GetIdInfo$Id: ctex.dtx 320df30 2020-05-02 06:45:05 +0800 Qing Lee <sobenlee@gmail.com> $
{Chinese adapter for class article (CTEX)}
\ProvidesExplClass{ctexart}
- {\ExplFileDate}{2.4.16}{\ExplFileDescription}
+ {\ExplFileDate}{2.5.1}{\ExplFileDescription}
\tl_const:Nx \c__ctex_version_tl
{ \cs_if_exist_use:cF { ver@ \@currname . \@currext } { 9999/99/99 } }
\cs_new_eq:cN { ver@ctex. \@pkgextension } \c__ctex_version_tl
@@ -42,11 +41,11 @@
\msg_new:nnnn { ctex } { l3-too-old }
{ Support~package~`#1'~too~old. }
{
- Please~update~an~up~to~date~version~of~the~bundles\\\\
+ Please~update~an~up-to-date~version~of~the~bundles\\\\
`l3kernel'~and~`l3packages'\\\\
using~your~TeX~package~manager~or~from~CTAN.
}
-\@ifpackagelater { expl3 } { 2019/03/05 } { }
+\@ifpackagelater { expl3 } { 2020/04/06 } { }
{ \msg_error:nnn { ctex } { l3-too-old } { expl3 } }
\@ifpackagelater { l3keys2e } { 2015/12/20 } { }
{ \msg_error:nnn { ctex } { l3-too-old } { l3keys2e } }
@@ -62,11 +61,20 @@
}
{ \msg_critical:nnx { ctex } { engine-not-supported } { \c__ctex_engine_str } }
\RequirePackage { ctexhook , ctexpatch }
-\RequirePackage { fix-cm , everysel }
+\RequirePackage { fix-cm }
+\RequirePackage { everysel }
\tl_clear_new:N \l__ctex_tmp_tl
\int_new:N \l__ctex_tmp_int
\box_new:N \l__ctex_tmp_box
\dim_new:N \l__ctex_tmp_dim
+\cs_new_protected:Npn \ctex_define_option:n
+ { \keys_define:nn { ctex / option } }
+\cs_new_protected:Npn \ctex_define:n
+ { \keys_define:nn { ctex } }
+\cs_new_protected:Npn \ctex_set:n
+ { \keys_set:nn { ctex } }
+\cs_new_protected:Npn \ctex_set:nn #1
+ { \keys_set:nn { ctex / #1 } }
\cs_new_protected:Npn \ctex_file_wrapper:nnn #1#2#3
{
\use:x
@@ -82,9 +90,9 @@
#3
}
}
-\cs_new_protected_nopar:Npn \ctex_file_input:n #1
+\cs_new_protected:Npn \ctex_file_input:n #1
{ \ctex_file_wrapper:nnn { } { \file_input:n {#1} } { } }
-\cs_new_protected_nopar:Npn \ctex_scheme_input:n #1
+\cs_new_protected:Npn \ctex_scheme_input:n #1
{
\ctex_file_wrapper:nnn
{ }
@@ -104,7 +112,7 @@
\msg_new:nnnn { ctex } { package-too-old }
{ Support~package~`#1'~too~old. }
{
- Please~update~an~up~to~date~version~of~the~package~`#1'\\
+ Please~update~an~up-to-date~version~of~the~package~`#1'\\
using~your~TeX~package~manager~or~from~CTAN.
}
\sys_if_output_pdf:TF
@@ -123,46 +131,44 @@
\exp_last_unbraced:NNNNo
\cs_new:Npn \__ctex_default_ccwd_aux:w #1 { \tl_to_str:n { pt } } #2 \q_stop
{ \tl_if_empty:nT {#2} { \ccwd } }
-\tl_new:N \l__ctex_encoding_tl
-\tl_set:Nx \l__ctex_encoding_tl
- { \sys_if_engine_pdftex:TF { GBK } { UTF8 } }
+\tl_new:N \g__ctex_encoding_tl
\bool_new:N \g__ctex_zhmCJK_bool
\tl_new:N \l__ctex_autoindent_tl
\cs_new_eq:NN \ctex_if_autoindent_touched:F \use:n
\cs_new_eq:NN \ctex_zhmap_case:nnn \use_ii:nnn
-\cs_new_protected_nopar:Npn \ctex_at_end:n { \AtEndOfClass }
+\cs_new_protected:Npn \ctex_at_end:n { \AtEndOfClass }
\clist_new:N \g__ctex_std_options_clist
\msg_new:nnn { ctex } { invalid-option }
{ Option~`\l_keys_key_tl'~is~invalid~in~current~mode. }
\msg_new:nnn { ctex } { invalid-value }
{ Value~`#1'~is~invalid~for~the~key~`\l_keys_key_tl'. }
+\cs_new_protected:Npn \ctex_deprecated_option:n
+ { \msg_warning:nnn { ctex } { deprecated-option } }
+\cs_new_protected:Npn \ctex_set_deprecated_option:n #1
+ {
+ \ctex_deprecated_option:n { Option~`#1'~is~set. }
+ \ctex_set:nn { option } {#1}
+ }
+\cs_new_protected:Npn \ctex_deprecated_command:Nn #1#2
+ {
+ \msg_warning:nnxx { ctex } { deprecated-command }
+ { \token_to_str:N #1 } { \exp_not:n {#2} }
+ }
\msg_new:nnn { ctex } { deprecated-option }
- { Option~ `\l_keys_key_tl'~ is~ deprecated.\\ #1 }
+ { Option~`\l_keys_key_tl'~is~deprecated.\\ #1 }
\msg_new:nnn { ctex } { deprecated-command }
- { Command~ #1 is~ deprecated.\\ #2 }
-\msg_new:nnn { ctex } { deprecated-environment }
- { Environment~ `#1'~ is~ deprecated.\\ #2 }
+ { Command~`#1'~is~deprecated.\\ #2 }
\int_new:N \g__ctex_font_size_int
-\int_set:Nn \g__ctex_font_size_int { -1 }
-\keys_define:nn { ctex / option }
+\int_gset:Nn \g__ctex_font_size_int { -1 }
+\ctex_define_option:n
{
zihao .choice: ,
zihao .value_required:n = true ,
zihao / 5 .code:n = { \int_gset:Nn \g__ctex_font_size_int { 0 } } ,
zihao / -4 .code:n = { \int_gset:Nn \g__ctex_font_size_int { 1 } } ,
zihao / false .code:n = { \int_gset:Nn \g__ctex_font_size_int { 2 } } ,
- c5size .code:n =
- {
- \msg_warning:nnn { ctex } { deprecated-option }
- { Option~ `zihao=5'~ is~ set. }
- \keys_set:nn { ctex / option } { zihao = 5 }
- } ,
- cs4size .code:n =
- {
- \msg_warning:nnn { ctex } { deprecated-option }
- { Option~ `zihao=-4'~ is~ set. }
- \keys_set:nn { ctex / option } { zihao = -4 }
- } ,
+ c5size .code:n = { \ctex_set_deprecated_option:n { zihao = 5 } } ,
+ cs4size .code:n = { \ctex_set_deprecated_option:n { zihao = -4 } } ,
c5size .value_forbidden:n = true ,
cs4size .value_forbidden:n = true ,
linespread .fp_set:N = \l__ctex_line_spread_fp ,
@@ -187,56 +193,38 @@
} ,
indent .code:n =
{
- \msg_warning:nnn { ctex } { deprecated-option }
+ \ctex_deprecated_option:n
{
- The~ functionality~ has~ been~ removed.\\
- It's~ better~ to~ set~ the~ heading~ styles~ via~ `afterindent'~
- options.~
+ The~functionality~has~been~removed.\\
+ It's~better~to~set~the~heading~styles~via~`afterindent'~option.
}
} ,
indent .value_forbidden:n = true ,
noindent .code:n =
{
- \msg_warning:nnn { ctex } { deprecated-option }
+ \ctex_deprecated_option:n
{
- The~ functionality~ has~ been~ removed.\\
- It's~ better~ to~ set~ the~ heading~ styles~ via~ `afterindent'~
- options.
+ The~functionality~has~been~removed.\\
+ It's~better~to~set~the~heading~styles~via~`afterindent'~option.
}
} ,
noindent .value_forbidden:n = true ,
- GBK .code:n = { \tl_set:Nn \l__ctex_encoding_tl { GBK } } ,
- UTF8 .code:n = { \tl_set:Nn \l__ctex_encoding_tl { UTF8 } } ,
- GBK .value_forbidden:n = true ,
- UTF8 .value_forbidden:n = true ,
- fontset .tl_gset:N = \g__ctex_fontset_tl ,
- nofonts .code:n =
+ GBK .code:n =
{
- \msg_warning:nnn { ctex } { deprecated-option }
+ \sys_if_engine_pdftex:TF
+ { \tl_gset:Nn \g__ctex_encoding_tl { GBK } }
{
- Option~ `fontset=none'~ is~ set.~ It~ is~ better~ to~ use~
- fontset~ option.
+ \msg_warning:nn { ctex } { invalid-option }
+ \tl_gset:Nn \g__ctex_encoding_tl { UTF8 }
}
- \keys_set:nn { ctex / option } { fontset = none }
- } ,
- adobefonts .code:n =
- {
- \msg_warning:nnn { ctex } { deprecated-option }
- {
- Option~ `fontset=adobe'~ is~ set.~ It~ is~ better~ to~ use~
- fontset~ option.
- }
- \keys_set:nn { ctex / option } { fontset = adobe }
- } ,
- winfonts .code:n =
- {
- \msg_warning:nnn { ctex } { deprecated-option }
- {
- Option~ `fontset=windows'~ is~ set.~ It~ is~ better~ to~ use~
- fontset~ option.
- }
- \keys_set:nn { ctex / option } { fontset = windows }
} ,
+ UTF8 .code:n = { \tl_gset:Nn \g__ctex_encoding_tl { UTF8 } } ,
+ GBK .value_forbidden:n = true ,
+ UTF8 .value_forbidden:n = true ,
+ fontset .tl_gset:N = \g__ctex_fontset_tl ,
+ nofonts .code:n = { \ctex_set_deprecated_option:n { fontset = none } } ,
+ adobefonts .code:n = { \ctex_set_deprecated_option:n { fontset = adobe } } ,
+ winfonts .code:n = { \ctex_set_deprecated_option:n { fontset = windows } } ,
nofonts .value_forbidden:n = true ,
winfonts .value_forbidden:n = true ,
adobefonts .value_forbidden:n = true ,
@@ -258,35 +246,21 @@
\cs_gset_eq:NN \ctex_zhmap_case:nnn \use_iii:nnn
} ,
nozhmap .code:n =
- {
- \msg_warning:nnn { ctex } { deprecated-option }
- { Option~ `zhmap=false'~ is~ set. }
- \keys_set:nn { ctex / option } { zhmap = false }
- } ,
+ { \ctex_set_deprecated_option:n { zhmap = false } } ,
nozhmap .value_forbidden:n = true ,
punct .tl_set:N = \l__ctex_punct_tl ,
punct .default:n = { quanjiao } ,
punct .initial:n = { quanjiao } ,
- nopunct .code:n =
- {
- \msg_warning:nnn { ctex } { deprecated-option }
- { Option~ `punct=plain'~ is~ set. }
- \keys_set:nn { ctex / option } { punct = plain }
- } ,
+ nopunct .code:n = \ctex_set_deprecated_option:n { punct = plain } ,
nopunct .value_forbidden:n = true ,
space .choices:nn =
{ true , auto , false }
{
\exp_args:Nx \ctex_at_end:n
- { \keys_set:nn { ctex } { space = \l_keys_choice_tl } }
+ { \ctex_set:n { space = \l_keys_choice_tl } }
} ,
space .default:n = { true } ,
- nospace .code:n =
- {
- \msg_warning:nnn { ctex } { deprecated-option }
- { Option~ `space=false'~ is~ set. }
- \keys_set:nn { ctex / option } { space = false }
- } ,
+ nospace .code:n = { \ctex_deprecated_option:nn { space = false } } ,
nospace .value_forbidden:n = true ,
heading .bool_set:N = \l__ctex_heading_bool ,
sub3section .code:n =
@@ -298,35 +272,37 @@
scheme .tl_set:N = \l__ctex_scheme_tl ,
scheme .default:n = { chinese } ,
scheme .initial:n = { chinese } ,
- cap .code:n =
- {
- \msg_warning:nnn { ctex } { deprecated-option }
- { Option~ `scheme = chinese' ~ is~ set. }
- \keys_set:nn { ctex / option } { scheme = chinese }
- } ,
- nocap .code:n =
- {
- \msg_warning:nnn { ctex } { deprecated-option }
- { Option~ `scheme = plain' ~ is~ set. }
- \keys_set:nn { ctex / option } { scheme = plain }
- } ,
+ cap .code:n = { \ctex_set_deprecated_option:n { scheme = chinese } } ,
+ nocap .code:n = { \ctex_set_deprecated_option:n { scheme = plain } } ,
cap .value_forbidden:n = true ,
nocap .value_forbidden:n = true ,
- fntef .code:n =
+ fntef .code:n =
{
- \msg_warning:nnn { ctex } { deprecated-option }
- { `(xe)CJKfntef'~ package~ is~ always~ loaded. }
+ \sys_if_engine_xetex:TF
+ {
+ \ctex_deprecated_option:n { `xeCJKfntef'~package~is~loaded. }
+ \ctex_at_end:n { \RequirePackage { xeCJKfntef } }
+ }
+ {
+ \sys_if_engine_pdftex:TF
+ {
+ \ctex_deprecated_option:n { `CJKfntef'~package~is~loaded. }
+ \ctex_at_end:n { \RequirePackage { CJKfntef } }
+ }
+ {
+ \ctex_deprecated_option:n
+ { Furthermore,~option~`fntef'~is~invalid~in~current~mode. }
+ }
+ }
} ,
fancyhdr .code:n =
{
- \msg_warning:nnn { ctex } { deprecated-option }
- { `fancyhdr'~ package~ is~ loaded. }
- \RequirePackage { fancyhdr }
+ \ctex_deprecated_option:n { `fancyhdr'~package~is~loaded. }
+ \ctex_at_end:n { \RequirePackage { fancyhdr } }
} ,
hyperref .code:n =
{
- \msg_warning:nnn { ctex } { deprecated-option }
- { `hyperref'~ package~ will~ be~ loaded. }
+ \ctex_deprecated_option:n { `hyperref'~package~will~be~loaded. }
\ctex_at_end:n
{
\cs_if_exist:NF \hypersetup
@@ -352,47 +328,63 @@
#1 .value_forbidden:n = true ,
}
}
-\use:x { \keys_define:nn { ctex / option } { \exp_not:o { \l__ctex_tmp_tl } } }
+\exp_args:No \ctex_define_option:n { \l__ctex_tmp_tl }
\tl_clear:N \l__ctex_tmp_tl
-\keys_define:nn { ctex / option }
+\ctex_define_option:n
{
unknown .code:n =
{ \clist_gput_right:No \g__ctex_std_options_clist { \CurrentOption } }
}
\ctex_file_input:n { ctexopts.cfg }
\ProcessKeysOptions { ctex / option }
-\if_case:w \g__ctex_font_size_int
- \clist_gput_right:Nn \g__ctex_std_options_clist { 10pt }
-\or:
- \clist_gput_right:Nn \g__ctex_std_options_clist { 12pt }
-\fi:
+\msg_new:nnn { ctex } { pdftex-utf8 }
+ { UTF8~will~be~used~as~the~default~encoding. }
+\tl_if_empty:NT \g__ctex_encoding_tl
+ {
+ \sys_if_engine_pdftex:T
+ { \msg_warning:nn { ctex } { pdftex-utf8 } }
+ \tl_gset:Nn \g__ctex_encoding_tl { UTF8 }
+ }
+\int_case:nn { \g__ctex_font_size_int }
+ {
+ { 0 } { \clist_gput_right:Nn \g__ctex_std_options_clist { 10pt } }
+ { 1 } { \clist_gput_right:Nn \g__ctex_std_options_clist { 12pt } }
+ }
\tl_const:Nn \c__ctex_class_tl { article }
\PassOptionsToClass { \g__ctex_std_options_clist } { article }
\LoadClass { article }
\@ifpackageloaded { hyperref }
{
- \cs_new_protected_nopar:Npn \ctex_hypersetup:n #1
+ \cs_new_protected:Npn \ctex_hypersetup:n #1
{ \hypersetup {#1} }
}
{
- \cs_new_protected_nopar:Npn \ctex_hypersetup:n #1
+ \cs_new_protected:Npn \ctex_hypersetup:n #1
{ \PassOptionsToPackage {#1} { hyperref } }
}
\ctex_file_input:n { \c__ctex_engine_file_str }
-\NewDocumentCommand \ctexset { } { \keys_set:nn { ctex } }
-\NewDocumentCommand \CTEXsetup { +o > { \TrimSpaces } m }
+\NewDocumentCommand \ctexset { } { \ctex_set:n }
+\NewDocumentCommand \CTEXsetup { +O { } > { \TrimSpaces } m }
{
- \msg_warning:nnnn { ctex } { deprecated-command } { \CTEXsetup }
- { \ctexset~ {~ #2~ =~ {~ #1~ }~ }~ is~ set. }
- \IfNoValueF {#1} { \keys_set:nn { ctex / #2 } {#1} }
+ \tl_if_blank:nTF {#1}
+ { \ctex_deprecated_command:Nn \CTEXsetup { } }
+ {
+ \ctex_deprecated_command:Nn \CTEXsetup
+ { \ctexset {~#2~=~{~#1~}~}~is~set. }
+ \ctex_set:nn {#2} {#1}
+ }
}
-\NewDocumentCommand \CTEXoptions { +o }
+\NewDocumentCommand \CTEXoptions { +O { } }
{
- \msg_warning:nnnn { ctex } { deprecated-command } { \CTEXoptions }
- { \ctexset~ {~ #1~ }~ is~ set. }
- \IfNoValueF {#1} { \keys_set:nn { ctex } {#1} }
+ \tl_if_blank:nTF {#1}
+ { \ctex_deprecated_command:Nn \CTEXoptions { } }
+ {
+ \ctex_deprecated_command:Nn \CTEXoptions
+ { \ctexset {~#1~}~is~set. }
+ \ctex_set:n {#1}
+ }
}
-\keys_define:nn { ctex }
+\ctex_define:n
{
autoindent .choice: ,
autoindent .default:n = { true } ,
@@ -410,9 +402,9 @@
}
}
\NewDocumentCommand \CTEXsetfont { } { \ctex_select_size: }
-\cs_new_protected_nopar:Npn \ctex_select_size:
+\cs_new_protected:Npn \ctex_select_size:
{ \cs_if_free:NTF \size@update { \ctex_update_size: } { \selectfont } }
-\cs_new_protected_nopar:Npn \ctex_update_size:
+\cs_new_protected:Npn \ctex_update_size:
{
\tl_if_eq:NNTF \l__ctex_ziju_tl \c__ctex_zero_tl
{
@@ -426,7 +418,7 @@
\tl_set_eq:NN \l__ctex_ziju_tl \c__ctex_zero_tl
\ctex_add_to_selectfont:n
{ \cs_if_free:NF \size@update { \ctex_update_size: } }
-\keys_define:nn { ctex }
+\ctex_define:n
{
linestretch .code:n =
{
@@ -437,7 +429,7 @@
}
\tl_new:N \l__ctex_line_stretch_tl
\tl_set:Nn \l__ctex_line_stretch_tl { \ccwd }
-\cs_new_protected_nopar:Npn \ctex_update_stretch:
+\cs_new_protected:Npn \ctex_update_stretch:
{
\ctex_update_em_unit:
\dim_set:Nn \l__ctex_tmp_dim { \l__ctex_line_stretch_tl }
@@ -472,7 +464,7 @@
\ctex_update_ccglue:
}
}
-\cs_new_protected_nopar:Npn \ctex_update_parindent:
+\cs_new_protected:Npn \ctex_update_parindent:
{
\tl_if_empty:NF \l__ctex_autoindent_tl
{
@@ -482,12 +474,12 @@
}
\NewDocumentCommand \ziju { m }
{ \exp_args:Nx \ctex_ziju:n {#1} \tex_ignorespaces:D }
-\cs_new_protected_nopar:Npn \ctex_ziju:n #1
+\cs_new_protected:Npn \ctex_ziju:n #1
{
\tl_set:Nx \l__ctex_ziju_tl { \fp_eval:n {#1} }
\ctex_select_size:
}
-\cs_new_protected_nopar:Npn \ctex_update_ziju:
+\cs_new_protected:Npn \ctex_update_ziju:
{
\ctex_update_em_unit:
\dim_set:Nn \l__ctex_ziju_dim { \l__ctex_ziju_tl \ccwd }
@@ -519,19 +511,20 @@
\dim_new:N \l__ctex_ziju_dim
\NewDocumentCommand \CTEXindent { }
{
- \msg_warning:nnnn { ctex } { deprecated-command } { \CTEXindent }
- { \parindent is~ set~ to~ 2\ccwd. }
- \ctex_update_ccwd: \dim_set:Nn \parindent { 2 \ccwd }
+ \ctex_deprecated_command:Nn \CTEXindent
+ { \parindent is~set~to~2\ccwd. }
+ \ctex_update_ccwd:
+ \dim_set:Nn \parindent { 2 \ccwd }
}
\NewDocumentCommand \CTEXnoindent { }
{
- \msg_warning:nnnn { ctex } { deprecated-command } { \CTEXnoindent }
- { \parindent is~ set~ to~ 0pt. }
+ \ctex_deprecated_command:Nn \CTEXnoindent
+ { \parindent is~set~to~0pt. }
\dim_zero:N \parindent
}
-\PassOptionsToPackage { encoding = \l__ctex_encoding_tl } { zhnumber }
+\PassOptionsToPackage { encoding = \g__ctex_encoding_tl } { zhnumber }
\RequirePackage { zhnumber }
-\cs_new_nopar:Npn \chinese { \zhnum_counter:n }
+\cs_new:Npn \chinese { \zhnum_counter:n }
\cs_new_eq:NN \@chinese \@zhnum
\cs_new_eq:NN \Chinese \chinese
\cs_new_eq:NN \CTEXcounter \use_none:n
@@ -549,7 +542,7 @@
\NewDocumentCommand \CTEXdigits { m m }
{ \protected@edef #1 { \zhdigits {#2} } }
\cs_set_eq:NN \CTEX@todayold \today
-\keys_define:nn { ctex }
+\ctex_define:n
{
today .choice: ,
today / old .code:n =
@@ -575,7 +568,7 @@
\tl_new:N \proofname
\tl_set:Nn \proofname { Proof }
}
-\keys_define:nn { ctex }
+\ctex_define:n
{
contentsname .tl_set:N = \contentsname ,
listfigurename .tl_set:N = \listfigurename ,
@@ -593,7 +586,7 @@
\seq_new:N \c__ctex_headings_seq
\seq_gset_eq:NN \c__ctex_headings_seq \c__ctex_section_headings_seq
\seq_gput_left:Nn \c__ctex_headings_seq { part }
-\cs_new_protected_nopar:Npn \__ctex_initial_heading:n #1
+\cs_new_protected:Npn \__ctex_initial_heading:n #1
{
\tl_new:c { CTEX@pre#1 }
\tl_new:c { CTEX@post#1 }
@@ -623,7 +616,7 @@
\group_end:
}
}
-\cs_new_protected_nopar:Npn \__ctex_def_heading_keys:n #1
+\cs_new_protected:Npn \__ctex_def_heading_keys:n #1
{
\tl_put_right:Nx \l__ctex_tmp_tl
{
@@ -647,11 +640,8 @@
#1 / hang .bool_set:N = \exp_not:c { CTEX@#1@hang } ,
#1 / hang .initial:n = true ,
#1 / runin .bool_set:N = \exp_not:c { CTEX@#1@runin } ,
- #1 / tocline .code:n =
- {
- \cs_set:Npn \exp_not:c { CTEX@#1@tocline}
- \exp_not:n { ####1####2 } { ####1 }
- } ,
+ #1 / tocline .cs_set:Np = \exp_not:c { CTEX@#1@tocline}
+ \exp_not:n { ##1##2 } ,
\__ctex_plus_key_aux:nn {#1} { break } ,
\__ctex_plus_key_aux:nn {#1} { format } ,
\__ctex_plus_key_aux:nn {#1} { nameformat } ,
@@ -661,7 +651,7 @@
\__ctex_plus_key_aux:nn {#1} { aftertitle } ,
}
}
-\cs_new_nopar:Npn \__ctex_plus_key_aux:nn #1#2
+\cs_new:Npn \__ctex_plus_key_aux:nn #1#2
{
#1 / #2 .tl_set:N = \exp_not:c { CTEX@#1@#2 } ,
#1 / #2 + .code:n =
@@ -675,7 +665,7 @@
\cs_new_protected:Npn \__ctex_assign_heading_name:nnn #1#2#3
{
\tl_set:cn { CTEX@pre#1 } {#2}
- \IfNoValueTF {#3}
+ \tl_if_novalue:nTF {#3}
{ \tl_clear:c { CTEX@post#1 } }
{ \tl_set:cn { CTEX@post#1 } {#3} }
}
@@ -686,45 +676,57 @@
\__ctex_initial_heading:n {#1}
\__ctex_def_heading_keys:n {#1}
}
-\use:x
+\exp_args:NNo \group_end: \ctex_define:n { \l__ctex_tmp_tl }
+\cs_new_protected:Npn \CTEX@heading@format@initial
{
- \group_end:
- \keys_define:nn { ctex } { \exp_not:o { \l__ctex_tmp_tl } }
+ \normalfont
+ \tl_clear:N \l__ctex_autoindent_tl
+ \int_set:Nn \tex_interlinepenalty:D { 10 000 }
+ \tex_noindent:D
+ }
+\cs_new_protected:Npn \ctex_indent_box:n #1
+ {
+ \dim_set:Nn \tex_parindent:D {#1}
+ \__ctex_insert_indent:
+ }
+\cs_new_protected:Npn \__ctex_insert_indent:
+ {
+ \dim_compare:nNnF \tex_parindent:D = \c_zero_dim
+ { \tex_indent:D }
}
-\cs_new_protected_nopar:Npn \CTEX@fixheadingskip
+\cs_new_eq:NN \CTEX@indentbox \ctex_indent_box:n
+\cs_new_protected:Npn \CTEX@fixheadingskip
{
\par
\dim_set:Nn \tex_prevdepth:D { -1000pt }
\skip_sub:Nn \l__ctex_heading_skip { \tex_parskip:D }
}
\skip_new:N \l__ctex_heading_skip
-\cs_new_protected_nopar:Npn \CTEX@setheadingskip
+\cs_new_protected:Npn \CTEX@setheadingskip
{ \skip_set:Nn \l__ctex_heading_skip }
\cs_new_eq:NN \CTEX@headingskip \l__ctex_heading_skip
\ProvideDocumentCommand \partmark { m }
{ \markboth { } { } }
\cs_new_eq:NN \CTEXifname \use_ii:nn
-\cs_new_protected_nopar:Npn \CTEX@ifnametrue
+\cs_new_protected:Npn \CTEX@ifnametrue
{ \cs_set_eq:NN \CTEXifname \use_i:nn }
-\cs_new_protected_nopar:Npn \CTEX@ifnamefalse
+\cs_new_protected:Npn \CTEX@ifnamefalse
{ \cs_set_eq:NN \CTEXifname \use_ii:nn }
\cs_new_protected:Npn \CTEX@addtocline #1#2
{ \addcontentsline { toc } {#1} { \use:c { CTEX@#1@tocline } {#1} {#2} } }
-\cs_new_protected_nopar:Npn \CTEX@disableautoindent
- { \tl_clear:N \l__ctex_autoindent_tl }
\renewcommand\part{%
- \if@noskipsec \leavevmode \fi
- \par
- \CTEX@part@break
- \CTEX@setheadingskip \CTEX@part@beforeskip
- \ifodd \CTEX@part@fixskip \CTEX@fixheadingskip \fi
- \addvspace \CTEX@headingskip
- \ifodd \CTEX@part@afterindent
- \@afterindenttrue
- \else
- \@afterindentfalse
- \fi
- \secdef\@part\@spart}
+ \if@noskipsec \leavevmode \fi
+ \par
+ \CTEX@part@break
+ \CTEX@setheadingskip \CTEX@part@beforeskip
+ \ifodd \CTEX@part@fixskip \CTEX@fixheadingskip \fi
+ \addvspace \CTEX@headingskip
+ \ifodd \CTEX@part@afterindent
+ \@afterindenttrue
+ \else
+ \@afterindentfalse
+ \fi
+ \secdef\@part\@spart}
\def\@part[#1]#2{%
\ifnum \c@secnumdepth >\m@ne
\ifodd \CTEX@part@numbering
@@ -740,34 +742,36 @@
\fi
\CTEX@gettitle{#1}%
\CTEX@addtocline{part}{#1}%
- {\interlinepenalty \@M
- \CTEX@disableautoindent
- \normalfont \CTEX@part@format
- \CTEX@hangindent{part}%
- {\CTEXifname{\CTEX@partname\CTEX@part@aftername}{}}%
- \CTEX@part@titleformat{#2}%
- \partmark{#1}%
- \CTEX@part@aftertitle}%
+ \partmark{#1}%
+ \begingroup
+ \CTEX@heading@format@initial
+ \CTEX@part@format{%
+ \CTEX@headinghang{part}%
+ {\CTEXifname{\CTEX@partname\CTEX@part@aftername}{}}%
+ \CTEX@part@titleformat{#2}%
+ \CTEX@part@aftertitle}\par
+ \endgroup
\nobreak
\CTEX@setheadingskip \CTEX@part@afterskip
\ifodd \CTEX@part@fixskip \CTEX@fixheadingskip \fi
\vskip \CTEX@headingskip
\@afterheading}
\def\@spart#1{%
- \CTEX@ifnamefalse
- \CTEX@makeanchor@spart{part*}%
- \CTEX@gettitle{#1}%
- {\interlinepenalty \@M
- \CTEX@disableautoindent
- \normalfont \CTEX@part@format
- \CTEX@hangindent{part}{}%
- \CTEX@part@titleformat{#1}%
- \CTEX@part@aftertitle}%
- \nobreak
- \CTEX@setheadingskip \CTEX@part@afterskip
- \ifodd \CTEX@part@fixskip \CTEX@fixheadingskip \fi
- \vskip \CTEX@headingskip
- \@afterheading}
+ \CTEX@ifnamefalse
+ \CTEX@makeanchor@spart{part*}%
+ \CTEX@gettitle{#1}%
+ \begingroup
+ \CTEX@heading@format@initial
+ \CTEX@part@format{%
+ \CTEX@headinghang{part}{}%
+ \CTEX@part@titleformat{#1}%
+ \CTEX@part@aftertitle}\par
+ \endgroup
+ \nobreak
+ \CTEX@setheadingskip \CTEX@part@afterskip
+ \ifodd \CTEX@part@fixskip \CTEX@fixheadingskip \fi
+ \vskip \CTEX@headingskip
+ \@afterheading}
\def\@startsection#1#2#3#4#5#6{%
\if@noskipsec \leavevmode \fi
\par
@@ -810,22 +814,22 @@
\CTEX@gettitle{#7}%
\unless \ifodd \CTEX@runin
\begingroup
+ \CTEX@heading@format@initial
#6{%
- \CTEX@hangfrom{\hskip\glueexpr #3\relax\@svsec}%
- \interlinepenalty \@M
+ \CTEX@sectionhang{#3}{\@svsec}%
\csname CTEX@#1@titleformat\endcsname{#8}%
- \csname CTEX@#1@aftertitle\endcsname}%
+ \csname CTEX@#1@aftertitle\endcsname}\par
\endgroup
\csname #1mark\endcsname{#7}%
\CTEX@addtocline{#1}{#7}%
\else
\def\@svsechd{%
- #6{\hskip\glueexpr #3\relax
- \@svsec
- \csname CTEX@#1@titleformat\endcsname{#8}%
- \csname CTEX@#1@aftertitle\endcsname}%
- \csname #1mark\endcsname{#7}%
- \CTEX@addtocline{#1}{#7}}%
+ #6{%
+ {\CTEX@indentbox{#3}}\@svsec
+ \csname CTEX@#1@titleformat\endcsname{#8}%
+ \csname CTEX@#1@aftertitle\endcsname}%
+ \csname #1mark\endcsname{#7}%
+ \CTEX@addtocline{#1}{#7}}%
\fi
\@xsect{#5}}
\def\@ssect#1#2#3#4#5{%
@@ -833,15 +837,15 @@
\CTEX@gettitle{#5}%
\unless \ifodd \CTEX@runin
\begingroup
+ \CTEX@heading@format@initial
#4{%
- \CTEX@hangfrom{\hskip\glueexpr #1\relax}%
- \interlinepenalty \@M
+ \CTEX@sectionhang{#1}{}%
\CTEX@titleformat@n{#5}%
- \CTEX@aftertitle}%
+ \CTEX@aftertitle}\par
\endgroup
\else
- \def\@svsechd{#4{\hskip\glueexpr #1\relax
- \CTEX@titleformat@n{#5}\CTEX@aftertitle}}%
+ \def\@svsechd{#4{{\CTEX@indentbox{#1}}%
+ \CTEX@titleformat@n{#5}\CTEX@aftertitle}}%
\fi
\@xsect{#3}}
\def\@xsect#1{%
@@ -861,32 +865,47 @@
\clubpenalty\@M
\begingroup \@svsechd \endgroup
\unskip
- \hskip\glueexpr #1\relax
+ \CTEX@heading@glue{#1}%
\else
\clubpenalty \@clubpenalty
\everypar{}%
\fi}%
\fi
\ignorespaces}
-\cs_new_protected:Npn \CTEX@hangindent #1#2
+\cs_new_protected:Npn \CTEX@headinghang #1
{
- \dim_set:Nn \parindent { \use:c { CTEX@#1@indent } }
- \bool_if:cTF { CTEX@#1@hang }
- { \@hangfrom { \__ctex_indent_aux: #2 } }
- {#2}
+ \ctex_heading_hang:cnn
+ { CTEX@#1@hang }
+ { \use:c { CTEX@#1@indent } }
}
-\cs_new_protected_nopar:Npn \__ctex_indent_aux:
+\cs_new_protected:Npn \CTEX@sectionhang
+ { \ctex_heading_hang:Nnn \CTEX@hang }
+\cs_new_protected:Npn \ctex_heading_hang:Nnn #1#2#3
{
- \dim_compare:nNnF \parindent = \c_zero_dim
- { \skip_horizontal:n { \parindent } }
+ \dim_set:Nn \tex_parindent:D {#2}
+ \bool_if:NTF #1
+ { \ctex_hang_from:n }
+ { \use:n }
+ { \__ctex_insert_indent: #3 }
+ }
+\cs_new_protected:Npn \ctex_hang_from:n #1
+ {
+ \tex_noindent:D
+ \hbox_set:Nn \l__ctex_tmp_box {#1}
+ \tex_hangindent:D = \box_wd:N \l__ctex_tmp_box
+ \box_use_drop:N \l__ctex_tmp_box
}
-\cs_new_protected_nopar:Npn \CTEX@hangfrom
+\cs_generate_variant:Nn \ctex_heading_hang:Nnn { c }
+\cs_new_protected:Npn \ctex_heading_glue:n #1
{
- \bool_if:NTF \CTEX@hang
- { \@hangfrom }
- { \noindent \use:n }
+ \group_begin:
+ \skip_set:Nn \l__ctex_heading_skip {#1}
+ \dim_compare:nNnF \l__ctex_heading_skip = \c_zero_dim
+ { \skip_horizontal:N \l__ctex_heading_skip }
+ \group_end:
}
-\cs_new_protected_nopar:Npn \CTEX@update@sectionformat@n #1
+\cs_new_eq:NN \CTEX@heading@glue \ctex_heading_glue:n
+\cs_new_protected:Npn \CTEX@update@sectionformat@n #1
{
\cs_set_eq:Nc \CTEX@titleformat@n { CTEX@#1@titleformat }
\cs_set_eq:Nc \CTEX@aftertitle { CTEX@#1@aftertitle }
@@ -908,7 +927,7 @@
{ }
#2
}
-\cs_new_nopar:Npn \CTEXnumberline #1
+\cs_new:Npn \CTEXnumberline #1
{
\CTEXifname
{ \protect \numberline { \use:c { CTEXthe #1 } } }
@@ -918,7 +937,7 @@
\seq_map_inline:Nn \c__ctex_section_headings_seq
{
\int_incr:N \l__ctex_tmp_int
- \cs_gset_protected_nopar:cpx {#1}
+ \cs_gset_protected:cpx {#1}
{
\exp_not:N \@startsection {#1}
{ \int_use:N \l__ctex_tmp_int }
@@ -930,7 +949,7 @@
\cs_new:cpn { CTEX@#1@tocline } ##1##2
{ \CTEXnumberline { ##1 } ##2 }
}
-\keys_define:nn { ctex }
+\ctex_define:n
{
appendix .meta:nn = { ctex / appendix } {#1} ,
appendix / name .code:n =
@@ -942,7 +961,7 @@
\tl_new:N \CTEX@preappendix
\tl_new:N \CTEX@postappendix
\cs_new_eq:NN \CTEX@save@appendix \appendix
-\cs_gset_protected_nopar:Npn \appendix
+\cs_gset_protected:Npn \appendix
{
\CTEX@save@appendix
\gdef \CTEX@presection { \CTEX@preappendix }
@@ -950,7 +969,7 @@
\gdef \CTEX@postsection { \CTEX@postappendix }
\gdef \CTEX@section@numbering { \CTEX@appendix@numbering }
}
-\cs_new_protected_nopar:Npn \CTEX@makeanchor #1
+\cs_new_protected:Npn \CTEX@makeanchor #1
{ }
\seq_const_from_clist:Nn \c__ctex_headings_cs_seq
{ part , spart , sect , ssect }
@@ -959,7 +978,7 @@
\cs_new_eq:cc { CTEX@ #1 } { @ #1 }
\cs_new_eq:cN { CTEX@makeanchor@ #1 } \CTEX@makeanchor
}
-\cs_new_protected_nopar:Npn \CTEX@hyperheadinghook
+\cs_new_protected:Npn \CTEX@hyperheadinghook
{
\group_begin:
\ifHy@implicit
@@ -980,7 +999,7 @@
}
\ctex_at_end_package:nn { hyperref }
{
- \cs_gset_protected_nopar:Npn \CTEX@makeanchor #1
+ \cs_gset_protected:Npn \CTEX@makeanchor #1
{
\Hy@MakeCurrentHrefAuto {#1}
\Hy@raisedlink
@@ -995,14 +1014,14 @@
{ }
\ctex_at_end_package:nn { nameref }
{
- \cs_gset_protected_nopar:Npn \CTEX@gettitle { \NR@gettitle }
+ \cs_gset_protected:Npn \CTEX@gettitle { \NR@gettitle }
\seq_map_inline:Nn \c__ctex_headings_cs_seq
{
\cs_if_eq:ccT { NR@ #1 } { CTEX@ #1 }
{ \cs_gset_eq:cc { @ #1 } { CTEX@ #1 } }
}
}
-\cs_new_protected_nopar:Npn \ctex_titlesec_hook:
+\cs_new_protected:Npn \ctex_titlesec_hook:
{
\@ifpackagewith { titlesec } { explicit }
{
@@ -1022,17 +1041,17 @@
}
\seq_map_function:NN \c__ctex_section_headings_seq \__ctex_titlesec_hook:n
}
-\cs_new_protected_nopar:Npn \__ctex_titlesec_hook:n #1
+\cs_new_protected:Npn \__ctex_titlesec_hook:n #1
{
\__ctex_titlesec_format:n {#1}
\exp_args:Nc \__ctex_titlesec_spacing:Nn { ttls@#1 } {#1}
}
-\cs_new_protected_nopar:Npn \__ctex_titlesec_format:n #1
+\cs_new_protected:Npn \__ctex_titlesec_format:n #1
{
\cs_if_free:cF { ttlf@#1 }
{ \exp_args:Nc \__ctex_titlesec_format:Nn { ttlf@#1 } {#1} }
}
-\cs_new_protected_nopar:Npn \__ctex_titlesec_format:Nn #1#2
+\cs_new_protected:Npn \__ctex_titlesec_format:Nn #1#2
{
\tl_set:Nx #1
{
@@ -1042,7 +1061,7 @@
\tl_tail:N #1
}
}
-\cs_new_protected_nopar:Npn \__ctex_titlesec_format_explicit:Nn #1#2
+\cs_new_protected:Npn \__ctex_titlesec_format_explicit:Nn #1#2
{
\cs_set_nopar:Npx #1 ##1
{
@@ -1052,7 +1071,7 @@
\exp_args:No \tl_tail:n { #1 { } }
}
}
-\cs_new_protected_nopar:Npn \__ctex_titlesec_spacing:Nn #1#2
+\cs_new_protected:Npn \__ctex_titlesec_spacing:Nn #1#2
{ \tl_set:Nx #1 { \exp_after:wN \__ctex_titlesec_spacing:nnnnnn #1 {#2} } }
\cs_new:Npn \__ctex_titlesec_spacing:nnnnnn #1#2#3#4#5#6
{
@@ -1073,14 +1092,14 @@
{
\cs_if_free:NF \ttl@tocpart
{
- \cs_set_protected_nopar:Npn \ttl@tocpart
+ \cs_set_protected:Npn \ttl@tocpart
{ \tl_set:Nn \ttl@a { \CTEXthepart \hspace { 1em } } }
}
\seq_map_inline:Nn \c__ctex_headings_seq
{
\cs_if_exist:cF { ttl@toc #1 }
{
- \cs_new_protected_nopar:cpx { ttl@toc #1 }
+ \cs_new_protected:cpx { ttl@toc #1 }
{
\tl_set:Nn \exp_not:N \ttl@a
{
@@ -1093,7 +1112,7 @@
}
\group_begin:
\char_set_catcode_other:N \#
-\cs_new_protected_nopar:Npn \ctex_titleps_hook:
+\cs_new_protected:Npn \ctex_titleps_hook:
{
\ctex_patch_cmd:Nnn \ttl@settopmark
{ \protect \@namedef { the#1 } { \@nameuse { the#1 } } }
@@ -1115,12 +1134,12 @@
}
}
\group_end:
-\cs_new_nopar:Npn \CTEX@titlepslabel@set #1
+\cs_new:Npn \CTEX@titlepslabel@set #1
{
\cs_if_free:cF { CTEXthe#1 }
{ \protect \@namedef { CTEXthe#1 } { \@nameuse { CTEXthe#1 } } }
}
-\cs_new_nopar:Npn \CTEX@titlepslabel@clear #1
+\cs_new:Npn \CTEX@titlepslabel@clear #1
{
\cs_if_free:cF { CTEXthe#1 }
{ \protect \@namedef { CTEXthe#1 } { } }
@@ -1130,9 +1149,9 @@
\ctex_at_end_package:nn { titleps } { \ctex_titleps_hook: }
\ctex_at_end_package:nn { titleps }
{
- \cs_set_protected_nopar:Npn \ttl@setifthe #1
+ \cs_set_protected:Npn \ttl@setifthe #1
{
- \exp_args:Nco \cs_set_nopar:Npn { ifthe #1 }
+ \exp_args:Nco \cs_set:Npn { ifthe #1 }
{
\CTEXifname
{ \protect \@firstoftwo }
@@ -1159,19 +1178,24 @@
{ \CTEX@toc@width@n {#1} }
{ }
{ \ctex_patch_failure:N \numberline }
- \@ifpackageloaded { tocloft }
- { }
+ \cs_new_protected:Npn \__ctex_patch_toc_width:n \c_parameter_token 1
{
- \ctex_at_end_package:nn { tocloft }
+ \@ifpackageloaded { \c_parameter_token 1 }
+ { }
{
- \ctex_preto_cmd:NnnTF \numberline
- { \char_set_catcode_letter:n { 64 } }
- { \CTEX@toc@width@n {#1} }
- { }
- { \ctex_patch_failure:N \numberline }
+ \ctex_at_end_package:nn { \c_parameter_token 1 }
+ {
+ \ctex_preto_cmd:NnnTF \numberline
+ { \char_set_catcode_letter:n { 64 } }
+ { \CTEX@toc@width@n {#1} }
+ { }
+ { \ctex_patch_failure:N \numberline }
+ }
}
}
}
+\__ctex_patch_toc_width:n { tocloft }
+\__ctex_patch_toc_width:n { titletoc }
\if@twoside
\ctex_patch_cmd:Nnn \ps@headings
{ \ifnum \c@secnumdepth > \z@ \thesection \quad \fi }
@@ -1193,7 +1217,7 @@
{ \ifnum \c@secnumdepth > \@ne \thesubsection \hskip 1em \relax \fi }
{ \CTEXifname { \CTEXthesubsection \quad } { } }
}
-\cs_new_protected_nopar:Npn \CTEX@setcurrentlabel@n #1
+\cs_new_protected:Npn \CTEX@setcurrentlabel@n #1
{
\protected@edef \@currentlabel
{
@@ -1202,17 +1226,17 @@
{ \exp_not:o { \@currentlabel } }
}
}
-\cs_new_protected_nopar:Npn \ctex_varioref_hook:
+\cs_new_protected:Npn \ctex_varioref_hook:
{
\seq_map_inline:Nn \c__ctex_headings_seq
{ \ctex_fix_varioref_label:n { ##1 } }
}
-\cs_new_protected_nopar:Npn \ctex_fix_varioref_label:n #1
+\cs_new_protected:Npn \ctex_fix_varioref_label:n #1
{
\tl_if_empty:cT { p@#1 }
- { \exp_args:Nno \labelformat {#1} { \cs:w CTEX@the#1 \cs_end: } }
+ { \exp_args:Nnx \labelformat {#1} { \exp_not:c { CTEX@the#1 } } }
}
-\@ifpackageloaded { varioref }
+\cs_if_exist:NTF \labelformat
{ \ctex_varioref_hook: }
{
\cs_new_eq:NN \CTEX@save@refstepcounter \refstepcounter
@@ -1226,7 +1250,7 @@
\ctex_scheme_input:o { \l__ctex_scheme_tl }
\NewDocumentCommand \zihao { m }
{ \exp_args:Nx \ctex_zihao:n {#1} \tex_ignorespaces:D }
-\cs_new_protected_nopar:Npn \ctex_zihao:n #1
+\cs_new_protected:Npn \ctex_zihao:n #1
{
\prop_get:NnNTF \c__ctex_font_size_prop {#1} \l__ctex_font_size_tl
{ \exp_after:wN \fontsize \l__ctex_font_size_tl \selectfont }
@@ -1241,7 +1265,7 @@
}
\prop_new:N \c__ctex_font_size_prop
\seq_new:N \c__ctex_font_size_seq
-\cs_new_protected_nopar:Npn \__ctex_save_font_size:nn #1#2
+\cs_new_protected:Npn \__ctex_save_font_size:nn #1#2
{
\use:x
{
@@ -1273,12 +1297,12 @@
{ 0 } { 42 bp }
}
{ \__ctex_save_font_size:nn #1 }
-\cs_new_protected_nopar:Npn \ctex_declare_math_sizes:nnnn #1#2#3#4
+\cs_new_protected:Npn \ctex_declare_math_sizes:nnnn #1#2#3#4
{
\__ctex_get_font_sizes:Nn \l__ctex_font_size_tl { {#1} {#2} {#3} {#4} }
\exp_after:wN \DeclareMathSizes \l__ctex_font_size_tl
}
-\cs_new_protected_nopar:Npn \__ctex_get_font_sizes:Nn #1#2
+\cs_new_protected:Npn \__ctex_get_font_sizes:Nn #1#2
{
\tl_clear:N #1
\tl_map_inline:nn {#2}
@@ -1315,13 +1339,13 @@
{ \msg_error:nnn { ctex } { fontsize } {#2} }
}
\cs_new_protected:Npn \__ctex_set_font_size:nnNn #1#2#3#4
- { \cs_set_protected_nopar:Npn #3 { \@setfontsize #3 {#1} {#2} #4 } }
-\if_case:w \g__ctex_font_size_int
- \ctex_file_input:n { ctex-c5size.clo }
-\or:
- \ctex_file_input:n { ctex-cs4size.clo }
-\fi:
-\fp_compare:nNnF { \l__ctex_line_spread_fp } ? { \c_zero_fp }
+ { \cs_set_protected:Npn #3 { \@setfontsize #3 {#1} {#2} #4 } }
+\int_case:nn { \g__ctex_font_size_int }
+ {
+ { 0 } { \ctex_file_input:n { ctex-c5size.clo } }
+ { 1 } { \ctex_file_input:n { ctex-cs4size.clo } }
+ }
+\fp_if_nan:nF { \l__ctex_line_spread_fp }
{
\exp_args:Nx \linespread { \fp_use:N \l__ctex_line_spread_fp }
\group_begin: \footnotesize \exp_args:NNNo \group_end:
@@ -1332,47 +1356,76 @@
{ C \TeX }
\ctex_at_end_package:nn { hyperref }
{ \pdfstringdefDisableCommands { \tl_set:Nn \CTeX { CTeX } } }
-\keys_define:nn { ctex }
+\ctex_define:n
{
captiondelimiter .code:n =
{
- \msg_warning:nnn { ctex } { deprecated-option }
+ \ctex_deprecated_option:n
{ You~can~load~the~package~`caption'~to~get~its~functionality. }
}
}
-\cs_new_protected_nopar:Npn \ctex_fontset_error:n #1
+\cs_new_protected:Npn \ctex_fontset_error:n #1
{ \msg_critical:nnn { ctex } { fontset-unavailable } {#1} }
\msg_new:nnn { ctex } { fontset-unavailable }
{ CTeX~fontset~`#1'~is~unavailable~in~current~mode. }
-\cs_new_protected_nopar:Npn \ctex_load_fontset:
+\cs_new:Npx \ctex_fontset_case:nnn #1#2#3
{
- \tl_if_empty:NTF \g__ctex_fontset_tl
+ \sys_if_engine_pdftex:TF
+ {#1}
+ { \sys_if_engine_uptex:TF {#2} {#3} }
+ }
+\cs_new:Npx \ctex_fontset_case:nnnn #1#2#3#4
+ {
+ \sys_if_engine_pdftex:TF
+ { \sys_if_output_pdf:TF {#1} {#2} }
+ { \sys_if_engine_uptex:TF {#3} {#4} }
+ }
+\cs_new_protected:Npn \ctex_detect_platform:
+ {
+ \sys_if_platform_windows:TF
+ { \tl_gset:Nn \g__ctex_fontset_tl { windows } }
{
- \ctex_detected_platform:
- \ctex_file_input:n { ctex-fontset- \g__ctex_fontset_tl .def }
+ \ctex_if_platform_macos:TF
+ { \tl_gset:Nn \g__ctex_fontset_tl { mac } }
+ { \tl_gset:Nn \g__ctex_fontset_tl { fandol } }
}
+ }
+\cs_new_protected:Npn \ctex_if_platform_macos:TF
+ { \file_if_exist:nTF { /System/Library/Fonts/Menlo.ttc } }
+\cs_new_protected:Npn \ctex_load_fontset:
+ {
+ \tl_if_empty:NTF \g__ctex_fontset_tl
+ { \ctex_detect_platform: }
{
- \file_if_exist:nTF { ctex-fontset- \g__ctex_fontset_tl .def }
- { \ctex_file_input:n { ctex-fontset- \g__ctex_fontset_tl .def } }
+ \bool_lazy_or:nnTF
+ { \str_if_eq_p:on { \g__ctex_fontset_tl } { windowsnew } }
+ { \str_if_eq_p:on { \g__ctex_fontset_tl } { windowsold } }
{
- \use:x
+ \msg_warning:nnxx { ctex } { deprecated-fontset }
+ { \g__ctex_fontset_tl } { windows }
+ \tl_gset:Nn \g__ctex_fontset_tl { windows }
+ }
+ {
+ \file_if_exist:nF { ctex-fontset- \g__ctex_fontset_tl .def }
{
- \ctex_detected_platform:
- \msg_error:nnxx { ctex } { fontset-not-found }
- { \g__ctex_fontset_tl } { \exp_not:N \g__ctex_fontset_tl }
+ \use:x
+ {
+ \ctex_detect_platform:
+ \msg_error:nnxx { ctex } { fontset-not-found }
+ { \g__ctex_fontset_tl } { \exp_not:N \g__ctex_fontset_tl }
+ }
}
- \ctex_file_input:n { ctex-fontset- \g__ctex_fontset_tl .def }
}
}
+ \ctex_file_input:n { ctex-fontset- \g__ctex_fontset_tl .def }
}
-\@onlypreamble \ctex_load_fontset:
+\msg_new:nnn { ctex } { deprecated-fontset }
+ { CTeX~fontset~`#1'~is~deprecated.\\ Fontset~`#2'~will~be~used~instead. }
\msg_new:nnnn { ctex } { fontset-not-found }
- {
- CTeX~fontset~`#1'~could~not~be~found.\\
- Fontset~`#2'~will~be~used~instead.
- }
+ { CTeX~fontset~`#1'~could~not~be~found.\\ Fontset~`#2'~will~be~used~instead. }
{ You~may~run~`mktexlsr'~firstly. }
-\keys_define:nn { ctex }
+\@onlypreamble \ctex_load_fontset:
+\ctex_define:n
{
fontset .code:n =
{
@@ -1402,14 +1455,16 @@
}
{ Only~one~fontset~can~be~loaded~in~the~preamble. }
\msg_new:nnn { ctex } { fontset-only-preamble }
- {
- The~ `fontset'~ option~ can~ be~ used~ only~ in~ preamble.
- }
+ { The~`fontset'~option~can~be~used~only~in~preamble. }
\str_if_eq:onF { \g__ctex_fontset_tl } { none }
{ \ctex_load_fontset: }
\ctex_at_end:n { \ctex_file_input:n { ctex.cfg } }
%%
-%% This package consists of the file ctex.dtx,
+%% This package consists of the files ctex.dtx,
+%% ctxdoc.cls,
+%% ctxdocstrip.tex,
+%% ctex-zhconv.lua,
+%% ctex-zhconv-make.lua,
%% and the derived files ctex.pdf,
%% ctex.ins,
%% ctex.sty,
@@ -1419,16 +1474,15 @@
%% ctexbook.cls,
%% ctexrep.cls,
%% ctexbeamer.cls,
-%% ctxdoc.cls,
%% ctexcap.sty,
%% ctexhook.sty,
%% ctexpatch.sty,
%% ctex-c5size.clo,
%% ctex-cs4size.clo,
-%% ctex-article.def,
-%% ctex-book.def,
-%% ctex-report.def,
-%% ctex-beamer.def,
+%% ctex-heading-article.def,
+%% ctex-heading-book.def,
+%% ctex-heading-report.def,
+%% ctex-heading-beamer.def,
%% ctex-scheme-plain.def,
%% ctex-scheme-plain-article.def,
%% ctex-scheme-plain-book.def,
@@ -1443,6 +1497,7 @@
%% ctex-name-utf8.cfg,
%% ctex.cfg,
%% ctexopts.cfg,
+%% ctexbackend.cfg,
%% ctex-engine-pdftex.def,
%% ctex-engine-xetex.def,
%% ctex-engine-luatex.def,
@@ -1460,26 +1515,25 @@
%% jt2zhrm.fd,
%% jt2zhsf.fd,
%% jt2zhtt.fd,
-%% ctex-fontset-windows.def,
-%% ctex-fontset-windowsnew.def,
-%% ctex-fontset-windowsold.def,
%% ctex-fontset-adobe.def,
%% ctex-fontset-fandol.def,
+%% ctex-fontset-founder.def,
%% ctex-fontset-mac.def,
%% ctex-fontset-macnew.def,
%% ctex-fontset-macold.def,
-%% ctex-fontset-founder.def,
%% ctex-fontset-ubuntu.def,
+%% ctex-fontset-windows.def,
%% ctexspa.def,
%% ctexpunct.spa,
%% ctexmakespa.tex,
%% ctexspamacro.tex,
-%% ctxdocstrip.tex,
%% zhadobefonts.tex,
%% zhfandolfonts.tex,
%% zhfounderfonts.tex,
+%% zhmacfonts.tex,
%% zhubuntufonts.tex,
%% zhwindowsfonts.tex,
+%% ctex-zhconv-index.lua,
%% translator-theorem-dictionary-ChineseGBK.dict,
%% translator-theorem-dictionary-ChineseUTF8.dict, and
%% README.md.