例如,当我写(?代表任何 CJK 字符)时,它会报告错误
\TeX??????
由于\TeX??????
不是定义的命令。
为了使其正确,我必须{}
在 后插入一个空格或\TeX
。
但是 CJK 字符很少(对我来说从来没有)用作命令名称的一部分。
所以我想知道是否可以进行配置并使其\TeX??????
工作。
我正在使用带有 xeCJK 包的 XeTeX。
答案1
如果我问\showthe\catcode`私
,XeTeX 会回答
> 11.
因此,日语字符可以成为控制序列名称的一部分。这是 XeTeX 初始化的一部分。将类别代码更改为 12 既不推荐也不容易:您需要识别所有包含日语字符的 Unicode 块并执行循环来更改类别代码。不过,您可能会遇到意想不到的问题。
\documentclass{article}
\usepackage{xeCJK}
\setCJKmainfont{Hiragino Mincho ProN}
\begin{document}
私は\TeXを使います
私は\TeX を使います
\end{document}
后面只要留一个空格就可以了\TeX
。
控制台输出是
! Undefined control sequence.
l.8 私は\TeXを使います
?
最终输出为
如果日语部分无法理解,那就怪谷歌翻译吧。
如果你最终决定使用循环,那么它们如下:
\documentclass{article}
\usepackage{xeCJK}
\setCJKmainfont{Hiragino Mincho ProN}
\ExplSyntaxOn
\cs_new_protected:Nn \jiewuza_make_other:nn
{
\int_step_function:nnN { #1 } { #2 } \char_set_catcode_other:n
}
\jiewuza_make_other:nn { "4E00 } { "9FEF } % CJK ideographs
\jiewuza_make_other:nn { "3041 } { "30FF } % Hiragana-Katakana
\jiewuza_make_other:nn { "31F0 } { "31FF } % Katakana additional
\jiewuza_make_other:nn { "32D0 } { "32FE } % Katakana circled
\jiewuza_make_other:nn { "FF01 } { "FFEE } % fullwidth-halfwidth
\ExplSyntaxOff
\begin{document}
私は\TeXを使います
私は\TeX を使います
\end{document}
答案2
xetex -ini
在 iniTeX 状态下读取unicode-letters.def
,所有 unicode 字母的 catcode 11 都在此处设置(参见此文件的第 45 行)。您可以使用 cactode 12 重新声明所有此类字母,而不会对功能产生任何影响(例外:您不能在控制序列中使用此类 unicode 字母)。您可以通过以下代码执行此操作:
\begingroup
\def\skipdefs #1\fi\fi{}
\def\C#1 #2 #3 {}
\def\L#1 #2 #3 {}
\def\l#1 {\global \catcode"#1=12 }
\expandafter\skipdefs \input unicode-letters.def
%\endgroup is in unicode-letters.def file