Skip to content

\newCJKfontfamily 定义的字体切换命令,效果溢出局部域 #751

@BigBoom20

Description

@BigBoom20

\begingroup
...
\endgroup

中使用 \newCJKfontfamily,那么该定义效果会对 \endgroup 随后的内容也生效,也就是存在效果溢出的问题。又注意到宏包说明文档中提及,该命令等价于以下两个命令\setCJKfamilyfont 和 \CJKfamily 的合并

Image 但是经测试,这两个命令仅在局部域中生效,也就是不存在效果溢出的问题。因此,从宏包文档宣称两种定义方式等价,以及通过\setCJKfamilyfont 和 \CJKfamily 的定义不尊在效果溢出这两点来看, \newCJKfontfamily 的效果溢出是否是一个 bug?

详细过程可见如下代码。编译环境:Win11 25H2 + TeXLive 2025

\documentclass{article}
\usepackage{xeCJK}


\begin{document}


\begingroup
  \setCJKfamilyfont{sethei}{SimHei}
  \newcommand*\sethei{\CJKfamily{sethei}}
  %或者可将上行命令替换为
  %\NewDocumentCommand\sethei{}{\CJKfamily{sethei}}
  %或者可将上行命令替换为
  %\DeclareRobustCommand*\sethei{\CJKfamily{sethei}}
  \fbox{\sethei 中文字体测试 ABCDabcd1234}
\endgroup

%group 外执行 \sethei 会显示 Undefined control sequence
%\fbox{\sethei 中文字体测试 ABCDabcd1234}


\vspace{2cm}

%宏包手册上宣称 \newCJKfontfamily 等价于 \setCJKfamilyfont 和 \CJKfamily 两者的合并. 
%但是,若在 group 内使用 \newCJKfontfamily,那么 group 外仍会受到影响,
%也就是该定义方式并不局限于 group 内,这与上面的测试结果不同


\begingroup
  \newCJKfontfamily\newhei{SimHei}
  \fbox{\newhei 中文字体测试 ABCDabcd1234}
\endgroup

%即使在 group 外使用如下命令,也可正常通过编译
\fbox{\newhei 中文字体测试 ABCDabcd1234}


\end{document}

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions