![加载 xeCJK 时避免使用全角英文标点符号](https://linux22.com/image/418560/%E5%8A%A0%E8%BD%BD%20xeCJK%20%E6%97%B6%E9%81%BF%E5%85%8D%E4%BD%BF%E7%94%A8%E5%85%A8%E8%A7%92%E8%8B%B1%E6%96%87%E6%A0%87%E7%82%B9%E7%AC%A6%E5%8F%B7.png)
当加载包 xeCJK 时,在英文文本中使用 Unicode 双引号“和”时,标点符号的行为会在所有地方发生变化(不仅仅是在 CJK 上下文中),例如双引号变成全角,这意味着在拉丁字母上下文中有太多空间。
比较以下两行的结果,其中第一行使用 Unicode 双引号,第二行使用 TeX 连字符 `` 和 ''
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{xeCJK}
\begin{document}
(“This is a quoted sentence.”)
(``This is a quoted sentence.'')
\end{document}
xeCJK.sty
为了避免这种情况,我找到了一个相当激进的解决方案:我通过重新定义\c__xeCJK_CL_chars_clist
和来更改文件的代码\c__xeCJK_OP_chars_clist
:
\clist_const:Nn \c__xeCJK_CL_chars_clist
{
"2E3A ,
"3001 , "3002 , "3009 , "300B , "300D , "300F , "3011 , "3015 , "3017 , "3019 ,
"301B , "301E , "301F , "FE11 , "FE12 , "FE18 , "FE36 , "FE38 , "FE3A , "FE3C ,
"FE3E , "FE40 , "FE42 , "FE44 , "FE48 , "FE50 , "FE52 , "FE5A , "FE5C , "FE5E ,
"FF09 , "FF0C , "FF0E , "FF3D , "FF5D , "FF60 , "FF61 , "FF63 , "FF64
}
\clist_const:Nn \c__xeCJK_OP_chars_clist
{
"3008 , "300A , "300C , "300E , "3010 , "3014 , "3016 , "3018 , "301A , "301D ,
"FE17 , "FE35 , "FE37 , "FE39 , "FE3B , "FE3D , "FE3F , "FE41 , "FE43 , "FE47 ,
"FE59 , "FE5B , "FE5D , "FF08 , "FF3B , "FF5B , "FF5F , "FF62
}
但当然,更改随时可能更新的包的代码绝对不是一个好主意,更不用说我的 CJK 文本现在不再有全角双引号了。
因此,我想知道是否存在一种更优雅的方法来激活和取消激活全角双引号,而无需更改代码xeCJK.sty
。
答案1
也许像这样
\documentclass{article}
\usepackage{xeCJK}
\usepackage{newunicodechar}
\newunicodechar{“}{%
\iftrue % if latin script not sure best xecjk test
``%
\else
\string“%
\fi}
\newunicodechar{”}{%
\iftrue % if latin script not sure best xecjk test
''%
\else
\string”%
\fi}
\begin{document}
(“This is a quoted sentence.”)
(``This is a quoted sentence.'')
\end{document}