在空格填上合适的字
问题描述
- 精选答案
-
针对下面的一些情况,需要有不同的策略:
pdfTeX + CJK,
一定要手动加
XeTeX + xeCJK,
不一定要加
pTeX/upTeX/pTeX-ng,
一定不要加
LuaTeX + LuaTeX-ja,
一定不要加
pTeX系列和LuaTeX就简单些,因为都遵循JIS标准,之所以不需要加空格的原因是:空格会被转换为一个glue,而这个glue通常都会比JIS中规定的要大不少,所以在“汉字-非汉字”之间插空格就会造成不当间距。其实这俩,对于空格的处理还是一如既往,如TeX82那样的行为,只是加了很好的
自动处理间距
功能。XeTeX的不一定要加,是因为默认情况下,“汉字-非汉字”之间
默认
插入的是一个空格,所以蠢萌的例子其实不会有太大的视觉上的误差,但,如果我们配置一下,如:那么出来的距离就不对,所以,不一定要加空格只是适用于默认情况。XeTeX处理空格的行为也和TeX82一样,只是可以设定一下char的class,然后在不同的class之间加入钩子,xeCJK就是这么插入间距的。但是由于XeTeX本身设计的原因,这类钩子其实不是太好用。
至于pdfTeX,万年不建议使用,但是呢,在各大学校(211啦,985啦)都是有一批坚定的用户的,这个时候,需要手动加空格,因为CJK包真不能处理这种间距。
为嘛pTeX系和LuaTeX能够进行精准的间距处理,因为在把文本处理为TeX内部链表之后,还会有额外的函数会遍历一遍链表检查一次间距,也就是说,要做两次。或者换句话说,xeCJK使用宏实现的东西,在pTeX系中用C实现了,在LuaTeX中使用Lua callback实现了。
那么问题来了,pTeX系是怎样判断什么是汉字,什么是非汉字呢?使用一个固定是函数,判断编码是否在某个区间?当然不是这样。TeX的大杀器,catcode就可以出场了。pTeX将TeX82的16个catcode扩展为了19个,其中有一个用来分配以代表汉字,而另一个代表谚文。
那么问题来了,TeX的catcode干啥的呢?catcode是丢给TeX的状态机用的东西。pTeX在读取文本文件的时候,会有上百种状态(我不知道啥叫状态机,你们自己理解去啊)。比如我们输入一段英文,换行,然后我们又打了一段英文,如:
这种情况输出的最后将是:
这里面的空格glue就是某种状态下,TeX在处理时自动输入的。
pTeX中多了一些状态,比如:
会出现结果:
而不是:
当然了,如果是非汉字的谚文,那么会自动加入一个空格glue的。
总结:空格在通常情况下会最终产生一个空格大小的glue,而在汉字处理的时候,如果手动加空格在某些场景下是会产生不太准确或者过大的间距,所以最好是不加空格,丢给TeX处理。如果手动加空格,也不是不可以,反正国内又不要求汉字与非汉字之间到底加多大的间距,所以在XeTeX等里面加空格也可以的啊。
扩展了内部状态和catcode之后,这种机制就快捷粗暴多了,要不我能不耐下心做pTeX-ng嘛。
猜你喜欢内容
-
简单网:构建全网教育数据枢纽,让知识检索化繁为...
简单网:构建全网教育数据枢纽,让知识检索化繁为“简”回答数有0条优质答案参考
-
去三亚有什么好玩的地方
去三亚有什么好玩的地方回答数有1条优质答案参考
-
石狮一日游必去景点推荐
石狮一日游必去景点推荐回答数有1条优质答案参考
-
电气工程师的证书考取条件是什么
电气工程师的证书考取条件是什么回答数有1条优质答案参考
-
房地产估价师的具体报考条件有啥
房地产估价师的具体报考条件有啥回答数有1条优质答案参考
-
房产经纪人的工作内容具体包含什么
房产经纪人的工作内容具体包含什么回答数有1条优质答案参考
-
学习小提琴都有哪些难点
学习小提琴都有哪些难点回答数有1条优质答案参考
-
企业行政管理证书的含金量怎么样
企业行政管理证书的含金量怎么样回答数有1条优质答案参考
-
初学者要怎么入门小提琴
初学者要怎么入门小提琴回答数有1条优质答案参考
-
报考珠宝鉴定师要啥条件
报考珠宝鉴定师要啥条件回答数有1条优质答案参考
















