-
Notifications
You must be signed in to change notification settings - Fork 124
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: 关于重构的一些要点 #511
Comments
嗯,当初模型没选好,做法激进了些。 另外,xeCJK 在标点后面加的 简单的例子: \font\zhs = "[SourceHanSerifSC-Regular.otf]" at 10pt \relax
\font\zhti = "[SourceHanSerifSC-Regular.otf];language=ZHT" at 10pt \relax
\font\zhtii = "[SourceHanSerifTC-Regular.otf]" at 10pt \relax
\def\SHOW{\showthe\XeTeXglyphbounds 3 \XeTeXcharglyph`,\relax}
\zhs \SHOW
\zhti \SHOW
\zhtii \SHOW
\bye 结果是
|
@qinglee 嗯,最早我是在「破折号宽度」那个 issue 里发现的,其实不只是 language 的问题,而是 GSUB 的问题。通过
测量出来的值全都对应被替换之前的,如果给简体中文字体加上
|
目前居中标点是在 |
@qinglee 我觉得新模型可以试一试,我加了一小节「兼容性讨论」:
|
代码得再整理整理,但是效果还不错的样子。 % 只载入 fontspec,不载入 xeCJK,从底层重建
\makeatletter
\ExplSyntaxOn
\tl_new:N \l_@@_CJKglue_tl
\tl_set:Nn \l_@@_CJKglue_tl { 0em plus 0.25em }
\fp_new:N \l_@@_punct_width_ratio_fp
\fp_set:Nn \l_@@_punct_width_ratio_fp { 1 } % 1=全角样式,0.5=半角样式
\XeTeXinterchartokenstate = \c_one_int
\newXeTeXintercharclass \g_@@_CJK_class
\newXeTeXintercharclass \g_@@_Closing_LeftHalf_class
\newXeTeXintercharclass \g_@@_Closing_MiddleHalf_class
\newXeTeXintercharclass \g_@@_Closing_Full_class
\newXeTeXintercharclass \g_@@_Opening_RightHalf_class
\newXeTeXintercharclass \g_@@_Opening_Full_class
% 省略 300 多行非常粗糙的实验代码…… 对简体中文横排的默认设置如下试排《后汉书》对繁体中文横排需要重新分配类型 |
繁中的感叹号是可以左右挤压的吗?在 clreq 的此条评论中,
似乎认为繁体感叹号跟问号一样是不可挤压的。 |
感觉这个可以直接参考 LuaTeX-ja 的默认标点挤压规则了,在 texmf-dist/tex/luatex/luatexja 下的 jfm-ujis.lua(横排)和 jfm-ujisv.lua(竖排)内,默认规则很详细,调整方法跟 InDesign 类似,也挺直观的。 |
@tanukihee JIS 对中间标点的规定已经实现呀,按照下面这个算法
如果 TeX 决定在 另外,你展示的那张图里有个比较迷的问题:
我猜第4行是「为了网格对齐,牺牲行末对齐」,但是第5行又「为了行末对齐,牺牲网格对齐」,很不一致啊。按照目前「closing + 偏左半边/上半边」的算法,是处于行末的偏靠式标点一律占据半角空间(段末除外),这是符合 GB/T 15834—2011 的:
|
JIS 中句号在末尾是不能调整的 这大概也能算是一种标准与实际的脱节?
繁中的标点挤压我并不太清楚,不过 MS Word 的行末标点确实是优先调右空白,再调左空白的……在大多数 DTP 软件中(比如 Adobe InDesign)中,中点前后的空白是要一起挤压,前后必须相同的,看来是我先入为主了😂 |
新算法的确是前后空白一起挤压。但是断行时发生的事情,是另外一回事。举例「繁中全角的句号」,出现在行中时大概是这样的:
而出现在行末时会变成这样:
所谓「前后必须相同的」,其实是要求保留行末句号后面的
小结一下,对于这些 closing 标点(偏靠式、居中一半式)后面补上的可以挤压的空白,各文种要求如下:
|
以下内容摘自《組文社的青葱歲月》(作者:許定銘,《明報月刊》文化附冊《明月》2015年三月號),截图来源:香港文化資料庫。遵守《中华人民共和国著作权法》和《著作權法》合理使用。 繁中印刷品里,标点符号的排版有点迷啊几乎不考虑「避头尾」推测两个原因:
但其实也有为了「避头尾」调过标点啊标点之间的挤压更迷 |
字符类之间需要插入的代码基本稳定下来了,做了一个比较实用的拓展——支持「窄体」(等价地支持「宽体」)。 测试字体是「未来荧黑」,用了 开发仓库:https://github.com/RuixiZhang42/newxeCJK \documentclass{article}
\usepackage{fontspec}
\input{newxeCJK}
\setmainfont{<中文字体家族>}
\begin{document}
<正文>
\end{document} |
大神,现在写latex时,要求用microtype包,可是没法用xelatex编译。我看到你空间里给了个兼容的包,然后该怎么办呢?我是小白,不知道怎么重新替换掉已经安装的xelatex了,谢谢大神。 |
@suiyun0234 建议单独提问,可以发到 https://github.com/CTeX-org/forum |
目的
开这条 issue 的目的是为了统一整合 xeCJK 未来重构需要注意的要点。个人能力有限,会有总结不到位之处,欢迎大家补充。
本 issue 的结构
这条评论里提出第一个要点,未来的要点在下面依次提出。每个要点关注某些具体方面,会提供 MWE、截取相关 log、指出目前的不足、提出「理想的效果」。
单个标点符号的处理
通过如下 MWE 可以看出
xeCJK
其实对待标点符号也是「加法模式」,但是「过于激进」。log 里相关的部分如下:
问题分析
以全角句号
U+3002
为例,目前的效果是通过 log 可见两大不足:
\rule
的宽度随字体而变,例如中易宋体的句号后面紧跟 -64.453125% 宽的 rule,而思源宋体(简体)的句号后面紧跟 -67.7% 宽的 rule;重构要点
我们从铅字排印入手,提出如下两条要点:
组合:closing + 偏左半边
例如
U+FF0C
、句号U+3002
、顿号U+3001
、点号U+FF0E
。U+FF1A
、分号U+FF1B
、叹号U+FF01
、问号U+FF1F
。理想效果应该是
组合:closing + 偏右半边
这种组合不可能。
组合:closing + 居中一半
例如
U+FF0C
、句号U+3002
、顿号U+3001
、点号U+FF0E
,日文用到的冒号U+FF1A
。U+FF1A
、分号U+FF1B
,日文用到的分号U+FF1B
。理想效果应该是
组合:closing + 居中占满
例如
U+FF01
、问号U+FF1F
。U+FF1B
,简体中文用到的叹号U+FF01
、问号U+FF1F
,等等。理想效果应该是
其余组合:opening + XXXX
如上分析,可以依次给出理想的效果。
The text was updated successfully, but these errors were encountered: