加载 xeCJK 时避免使用全角英文标点符号

加载 xeCJK 时避免使用全角英文标点符号

当加载包 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}

相关内容