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:增加选项处理引号的样式 #389

Open
zepinglee opened this issue Nov 19, 2018 · 6 comments
Open

xeCJK:增加选项处理引号的样式 #389

zepinglee opened this issue Nov 19, 2018 · 6 comments

Comments

@zepinglee
Copy link
Member

Unicode 中的引号、省略号、间隔号的编码是中西文共用的,xeCJK 会设置这几个字符使用中文字体。
我建议增加一个选项允许切换这几个符号使用西文字体,这样可以在以西文为主的文章中插入汉字而不影响引号的字形。

\documentclass{article}
\usepackage{xeCJK}
\setCJKmainfont{SimSun}
\begin{document}
a``a''a'a\par
a“a”a’a
\end{document}

使用 xelatex 排版的结果是:
screen shot 2018-11-19 at 7 20 54 pm

去掉 xeCJK 相关的命令后,使用 pdflatex 排版的效果是:
screen shot 2018-11-19 at 7 21 59 pm

另外,建议 ctex 的文档类在设置 scheme=plain 时,引号等符号使用西文的字形。

@RuixiZhang42
Copy link
Member

中西文的标点符号码位共享的确让人头疼。不过,在第一例中,仍然可以通过 TeX 本身的合字获取西文字体的标点:两个 U+0060 `` 对应西文的左双引号、三个 U+002D --- 对应西文的 em dash(我的这条评论)等等。书写长篇西文时,个人并没有通过输入法获取 U+201C 、U+2014 这些字符的经验,基本都是按照 TeX 原生的习惯书写。如果只为插入少数几个汉字,直接搭配 \makexeCJKactive/\makexeCJKinactive 感觉就可以了。

CTeX 文档类选项 scheme 主要涉及汉化,而 scheme = plain 时“只提供了中文支持功能”,感觉跟标点符号有些不沾边。同样地,如果引擎是 XeLaTeX,用 \makexeCJKactive/\makexeCJKinactive 也应该够了。

@RuixiZhang42
Copy link
Member

RuixiZhang42 commented Nov 20, 2018

以下一个简单的 switch 也可以考虑:

% !TeX program = XeLaTeX
% !OS = Windows 8.1
\documentclass{article}
\usepackage{xeCJK}
\setCJKmainfont{SimSun}

\ExplSyntaxOn
\NewDocumentCommand \xeCJKUseLatinPunct { }
  {
    \xeCJKDeclareCharClass { HalfLeft }
      {
        "2018 , "201C
      }
    \xeCJKDeclareCharClass { HalfRight }
      {
        "00B7 , "2019 , "201D , "2013 , "2014 , "2025 , "2026 , "2027 , "2E3A
      }
  }
\ExplSyntaxOff

\begin{document}
a``a''a'a中文\par
a“a”a’a中文\par
\xeCJKUseLatinPunct
a“a”a’a中文\par
\xeCJKResetPunctClass
a“a”a’a中文
\end{document}

punct

@zepinglee
Copy link
Member Author

@RuixiZhang42 啊我没注意到 xeCJKactive 这个选项,感谢提供的 switch!

这个问题的原由是学校论文的模板,某留学生在正文中使用英文写的,并且使用了 unicode 引号和撇号。但是论文的封面页必须用中文,所以依赖 xeCJK,所以才出现了这个问题。

我认为在西文中使用 U+201C 等符号是没什么问题的,因为现在很多编辑器都有“smart quote”功能,而且在 mac 下可以用 option + [ / ] / { / } / - 输入 / / / / 等 unicode 字符。

关于 scheme = plain “只提供了中文支持功能”,我认为是在加了 \usepackage[UTF8,scheme=plain]{ctex} 前后不应该造成西文的变化,包括西文的标点符号,不应该进行汉化处理。

@RuixiZhang42
Copy link
Member

RuixiZhang42 commented Nov 20, 2018

@zepinglee 倒也不是标点汉化。一切都是码位共享惹的祸,总得把这些共享的标点归为某一类。另,\makexeCJKinactive 了之后汉字就完全不能处理了,所以自造的 \xeCJKUseLatinPunct 还是比较方便。我个人还是偏向 TeX 原生的书写习惯。

注:源代码稍作了修改,不把共用标点归入 Default 类,而是相应地归入 HalfLeft 与 HalfRight 类。

@zepinglee
Copy link
Member Author

嗯,确实是 unicode 的锅,但是这里正因为是 ambiguous 才有必要做个接口供用户选择。

顺便发现

\prop_const_from_keyval:Nn \c_@@_ambigious_char_prop
的 ambiguous 拼错了

@muzimuzhi
Copy link
Contributor

顺便发现

ctex-kit/xeCJK/xeCJK.dtx

Line 8616 in 54b341c

\prop_const_from_keyval:Nn \c_@@_ambigious_char_prop
的 ambiguous 拼错了

给这个拼写错误单独开了一个 issue(#390),并提交了一个 pull request(#391)来修复它。

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

4 participants