CTeX-org / ctex-kit

Macro Packages and Scripts for Chinese TeX users
966 stars 124 forks source link

Could `babel` be introduced for localization? #626

Open CastleStar14654 opened 2 years ago

CastleStar14654 commented 2 years ago

当前 ctex 系列为自行对各结构名进行重定义。babel 目前已经提供了非常初步的中文结构名本地化(通过 *.ini 文件实现),可以生成“第 x 章”“第 x 部分”“图 x”以及 \today 的本地化等效果。使用方法可以为

\usepackage[<other languages>,chinese,provide=*]{babel}% 中文为主语言,添加其他语言

\usepackage{babel}
\babelprovide{chinese}

是否有可能方便地将当前 ctex 系列的本地化迁移至 babel 的框架之上、继续添加章节名的数字中文化等细节?这样 #350 等依赖于 babel 的问题也可得到一定解决。

或者可以将 babel 的引入方法在文档中做简要介绍,有需要的使用者可以自行调用 babel

qinglee commented 2 years ago

当初重构 ctex 2.x 的时候,我考虑过这个问题。我记得那时的 babel 代码写的比较死,给的接口很少,需要大改,并且那时中文社区也没有使用 babel 的习惯,就没做了。

粗看了一下,现在的 babel 好像比那时候灵活多了,可以重新考虑一下。

CastleStar14654 commented 2 years ago

babel 对章节和部分的重命名是靠把 \@makechapterhead 中的 \@chapapp\space\thechapter 自动替换成 \bbl@chfmt 并把 \@part 中的 \partname\nobreakspace\thepart 自动替换成 \bbl@partformat 实现的,其实和 ctex 手动换成 \CTEX@chaptername 以及 \CTEX@partname 类似。

目前 ctex 系列文档类和 babel 冲突的应该只有章名和部分名;我测试了一下 ctexbook,也确实如此。其他的结构名都可以随着 babel 的 \selectlanguage 命令改变(包括“附录”)。

babel 有的几个其他问题是

  1. 似乎其定义的中文 *.ini 文件只给出了 UTF8 的定义,也许对基于 pdfLaTeX 的中文情况支持不佳。
  2. babel 简中定义的“章”和“部分”在 2022-05-22 的 3.75 版之前是反的。

中西文字体混排的工作 xeCJK 完成得优秀得多,仅使用babel 的示例中的字符间距、西文两侧额外空格加入等都不尽人意(babel 开发者也不觉得 babel 有必要取代 ctex 等专门处理东亚文字的工具)。但把本地化部分迁移到 babel 似乎还是可以考虑的。最大的潜在便利就是,如果有用英文撰写基于 ctexbook 文档类的论文需求的话,使用 babel-english 比撤销 ctex 做的汉化还是方便规整很多的。

CastleStar14654 commented 2 years ago

babel 可能还能用于实现 CJK 分语言/变体使用不同字体配置 #628