Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

关于 xeCJK 对 CJKfntef 的处理 #449

Closed
muzimuzhi opened this issue Aug 28, 2019 · 3 comments
Closed

关于 xeCJK 对 CJKfntef 的处理 #449

muzimuzhi opened this issue Aug 28, 2019 · 3 comments

Comments

@muzimuzhi
Copy link
Contributor

涉及到的 xeCJK 的源码段为

ctex-kit/xeCJK/xeCJK.dtx

Lines 8794 to 8817 in dce0e53

% 由于 \pkg{xeCJK} 禁止 \pkg{CJKulem} 的载入,因此当使用 \pkg{ctex} 宏包的 |fntef|
% 选项时,就会出现 \tn{normalem} 没有定义的问题。此时改用 \pkg{xeCJKfntef} 以便
% 载入 \pkg{ulem}。
%
% 判断过于繁琐,应该在 \pkg{ctex} 包中妥善处理。这段代码应在 \pkg{ctex} 包发布
% 新版本后删去。
% \begin{macrocode}
\cs_if_eq:NNTF \ifCTEX@fntef \tex_iftrue:D
{ \AtEndOfPackage { \RequirePackage { xeCJKfntef } } }
{
\@@_at_end_preamble:n
{
\xeCJK_if_package_loaded:nF { xeCJKfntef }
{
\xeCJK_if_package_loaded:nTF { CJKfntef }
{ \RequirePackage { xeCJKfntef } }
{
\xeCJK_if_package_loaded:nT { ulem }
{ \RequirePackage { xeCJKfntef } }
}
}
}
}
% \end{macrocode}

  1. 请问 \ifCTEX@fntef 是在哪里定义的
    尝试了在当前最新版本的 ctex, xeCJK, xeCJKfntef 中搜索,都没有找到
  2. 根据 判断过于繁琐,应该在 \pkg{ctex} 包中妥善处理。这段代码应在 \pkg{ctex} 包发布新版本后删去。,现在 ctex 中是否已经处理?在 xecjk 是否可以删去?

ctex 中的相关源码段

ctex-kit/ctex/ctex.dtx

Lines 6218 to 6295 in dce0e53

% \CTeX{} 宏集对 \pdfTeX{} 与 \XeTeX{} 引擎,分别载入 \pkg{CJKfntef} 或
% \pkg{xeCJKfntef} 宏包,并关闭宏包默认的彩色等多余格式。
%
% \changes{v2.0}{2015/03/25}{默认关闭 \pkg{CJKfntef} 或 \pkg{xeCJKfntef} 的彩
% 色设置。}
% \changes{v2.0}{2015/03/25}{\tn{CTEXunderdot}, \tn{CTEXunderline},
% \tn{CTEXunderdblline}, \tn{CTEXunderwave}, \tn{CTEXsout}, \tn{CTEXxout} 是过
% 时命令;\env{CTEXfilltwosides} 是过时环境。}
%
% 载入 \pkg{CJKfntef} 或 \pkg{xeCJKfntef} 并做适当格式设置。有关 |\CTEX| 开头
% 的宏定义是过时命令,仅做兼容性保留。
%
% \begin{macrocode}
%<*pdftex>
\RequirePackage { CJKfntef }
\normalem
\cs_new_protected_nopar:Npn \@@_clear_fntef_color:n #1
{ \tl_clear:c { CJK#1color } }
%</pdftex>
%<*xetex>
\RequirePackage { xeCJKfntef }
\@ifpackagelater { xeCJKfntef } { 2014/11/04 }
{
\cs_new_protected_nopar:Npn \@@_clear_fntef_color:n #1
{ \xeCJKsetup { #1 / format = { } } }
}
{
\cs_new_protected_nopar:Npn \@@_clear_fntef_color:n #1
{ \tl_clear:c { CJK#1color } }
}
%</xetex>
%<*luatex|uptex|aptex>
\msg_new:nnn { ctex } { fntef-not-available }
%<luatex> { Functions~ of~ `CJKfntef'~ is~ not~ available~ in~ LuaLaTeX. }
%<uptex> { Functions~ of~ `CJKfntef'~ is~ not~ available~ in~ upLaTeX. }
%<aptex> { Functions~ of~ `CJKfntef'~ is~ not~ available~ in~ ApLaTeX. }
\msg_warning:nn { ctex } { fntef-not-available }
%</luatex|uptex|aptex>
\clist_map_inline:nn
{ underdot , underline , underdblline , underwave , sout , xout }
%<*pdftex|xetex>
{
\@@_clear_fntef_color:n {#1}
\cs_new_protected_nopar:cpx { CTEX#1 }
{
\msg_warning:nnnn { ctex } { deprecated-command } { \exp_not:c { CTEX#1 } }
{ You~ can~ use~ the~ command~ with~ prefix~ \exp_not:N \CJK~ instead. }
\exp_not:c { CJK#1 }
}
}
\cs_new_protected_nopar:Npn { \CTEXfilltwosides }
{
\msg_warning:nnnn { ctex } { deprecated-environment } { CTEXfilltwosides }
{ You~ can~ use~ `CJKfilltwosides'~ environment~ instead. }
\CJKfilltwosides
}
\cs_new_protected_nopar:Npn { \endCTEXfilltwosides } { \endCJKfilltwosides }
%</pdftex|xetex>
%<*luatex|uptex|aptex>
{ \cs_new_eq:cN { CTEX#1 } \use:n }
\cs_new_eq:NN \CTEXfilltwosides \use_none:n
\cs_new_eq:NN \endCTEXfilltwosides \prg_do_nothing:
%</luatex|uptex|aptex>
%<*pdftex>
\clist_map_inline:nn
{
underdotbasesep , underdotsep , underlinebasesep ,
underlinesep , underdbllinesep , underdbllinebasesep ,
underwavebasesep , underwavesep , southeight ,
underdotcolor , underwavecolor , underlinecolor ,
underdbllinecolor , soutcolor , xoutcolor
}
{
\cs_new_eq:cc { CTEX#1 } { CJK#1 }
\cs_set_nopar:cpx { CJK#1 } { \exp_not:c { CTEX#1 } }
}
%</pdftex>
% \end{macrocode}

@muzimuzhi
Copy link
Contributor Author

muzimuzhi commented Aug 28, 2019

会关注到这段 xeCJK 源码,是观察到:

虽然 xeCJK + CJKfntef 会加载 xeCJKfntef,但因为是通过 \xeCJK_at_end_preamble:n 加载的,所以在 preamble 部分 xeCJKfntef 中定义的 l3keys 选项(例如 xeCJK/options/underdot)无法通过 \xeCJKsetup{...} 设置。

@qinglee
Copy link
Member

qinglee commented Oct 5, 2019

这段代码确实过于繁琐,需要清理。

@qinglee
Copy link
Member

qinglee commented Feb 17, 2020

\ifCTEX@fntef 是 ctex v2.0 之前版本定义的,这段代码目前已经清除掉了。

需要注意的是,目前载入 ulem 包后,也不再自动载入 xeCJKfntef 补丁,需要用户显式载入 xeCJKfntef。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants