ctex-kit icon indicating copy to clipboard operation
ctex-kit copied to clipboard

xecjk可否将英文中的’标点符号保留半角形式

Open zwz opened this issue 6 years ago • 7 comments

这里是MWE

\documentclass{article}
\usepackage{xeCJK}                           % 如果注释掉不使用xeCJK,pdf效果是想要的
\title{Children’s Cognitive Ability}
\begin{document}
\maketitle
\end{document}

最终排版效果中会变成全角符号(不使用xecjk的化,结果还是半角形式) 因为是在英文字母中间,这个全角符号会很突兀,非常难看

zwz avatar May 16 '19 09:05 zwz

西文中应当使用 `'(U+0060、U+0027)来表示引号,而 (U+2018、U+2019、U+201C、U+201D)等「蝌蚪引号」应当预留给中文,以避免冲突。

众所周知引号的由于 Unicode 的坑所以变得很麻烦,所以在 TeX 里面这算是一种还算能接受的迂回手法。更多讨论参考 https://github.com/CTeX-org/ctex-kit/issues/389

stone-zeng avatar May 16 '19 09:05 stone-zeng

谢谢指出 但是某些输入法情况下可能不知不觉就输入 我对package的开发不是很懂 我之前是在想,有没有可能对这些标点符号前后的字符进行一定检测 如果是西文的话,就保留半角

zwz avatar May 16 '19 10:05 zwz

我之前是在想,有没有可能对这些标点符号前后的字符进行一定检测 如果是西文的话,就保留半角

简单的情形总能做,但免不了有特殊情况,比如引用一句话最后一个词恰好是英文;复杂的宏展开放在一起也无法顾及所有的可能性,所以就干脆舍弃这些检测。如果需要,还不如写的时候靠编辑器里面的查找替换来做。

此外,编辑器选好字体,设好语法高亮,这几种引号还是可以分得很清楚的。要不试试 ?(滑稽

stone-zeng avatar May 16 '19 10:05 stone-zeng

@zwz 也可以使用这个方案:

\newcommand\setchinese{%
  \xeCJKResetPunctClass
}
\newcommand\setenglish{%
  \xeCJKDeclareCharClass{HalfLeft}{"2018, "201C}%
  \xeCJKDeclareCharClass{HalfRight}{%
    "00B7, "2019, "201D, "2013, "2014, "2025, "2026, "2E3A%
  }%
}

然后就可以在正文中用 \setenglish\setchinese 切换语言了

zepinglee avatar May 16 '19 10:05 zepinglee

@stone-zeng 我这边倒都是简单的情况。 比如如果我已经\def\mytitle{Children’s Cognitive Ability} 如何去判断和处理\mytitle呢? (如果不是很复杂的话,能否给出一点判断的代码示例,我可以学着折腾一下)

@zepinglee 谢谢。不过我想如果有意去切换语言的话,可能也会注意到标点符号了,所以我更期望比较自动处理的方法

zwz avatar May 17 '19 01:05 zwz

@zwz

比如如果我已经\def\mytitle{Children’s Cognitive Ability} 如何去判断和处理\mytitle呢?

例子:

\documentclass{ctexart}
\def\mytitle{Children’s Cognitive Ability}

\begin{document}
\Large

Before: \mytitle

\edef\mytitle{%
  \xeCJKDeclareCharClass{Default}{`’}%
  \mytitle
  \xeCJKResetCharClass
}

After: \mytitle
\end{document}

效果: image

PS:这里假设 \mytitle 中所有出现的 都应归入非 CJK 字符类。

muzimuzhi avatar Jun 01 '19 02:06 muzimuzhi

局部的话,里面完全关掉 CJK 功能不就好了

muzimuzhi [email protected] 于 2019年6月1日周六 10:55写道:

@zwz https://github.com/zwz

比如如果我已经\def\mytitle{Children’s Cognitive Ability} 如何去判断和处理\mytitle呢?

例子:

\documentclass{ctexart} \def\mytitle{Children’s Cognitive Ability}

\begin{document} \Large

Before: \mytitle

\edef\mytitle{%

\xeCJKDeclareCharClass{Default}{`’}%

\mytitle

\xeCJKResetCharClass

}

After: \mytitle \end{document}

效果: [image: image] https://user-images.githubusercontent.com/6376638/58742946-816ff800-845b-11e9-880e-a78b10acba7b.png

PS:这里假设 \mytitle 中所有出现的 ’ 都应归入非 CJK 字符类。

— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub https://github.com/CTeX-org/ctex-kit/issues/431?email_source=notifications&email_token=AAELJ4YQAU4XOWGQCF73Q2DPYHQLDA5CNFSM4HNKNYI2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGODWWXHUQ#issuecomment-497906642, or mute the thread https://github.com/notifications/unsubscribe-auth/AAELJ4YXKEYP6EN4KU24YF3PYHQLDANCNFSM4HNKNYIQ .

leo-liu avatar Jun 12 '19 13:06 leo-liu