Closed chianjin closed 1 year ago
经过尝试,发现导致出现这种情况的表面原因了。我在尝试设置字体大小为营造尺三分,换算为9.6mm,如果直接以 9.6mm 来设置 \fontsize 就会出现这种情况。
以 1 inch = 72.27pt 换算,9.6mm 相当于 27.31465 pt,以 1 inch =72 pt 换算,相当于 27.21260 pt。尝试了 27.3pt,结果仍然出现上述问题。尝试 27pt 、27.2pt 没问题。扩大范围尝试发现,与整数部分无关,只要小数部分在某些特定值的附近就会出现上述情况。
可能是浮点运算误差导致的问题。
很有意思的一个现象。
当然,本人并了解底层的算法实现,猜测是浮点数转换时的精度问题,这个问题在计算机技术当中很常见。这种转换误差对结果一般不会有很严重的影响,即使有也很少见,除非时一些特殊情况。
如果这个问题真的是因为浮点数精度问题,我也算头一会遇到显著影响的例子。
也有可能是底层算法在某些数值点上有发散趋势,当然都是我猜测的。
夹注包中与此相关的是 \__jiazhu_good_break:
,你可以尝试清空此命令看一下
\cs_set_eq:NN \__jiazhu_good_break: \prg_do_nothing:
如果还不行,就得提供完整例子具体分析。
感谢答复。清空 \__jiazhu_good_break:
命令,不能解决问题。
行宽是直接由字符尺寸和每行字数计算后设置的,最初设置是字符大小 9.6mm,每行 21 字符。又试验了不同字符大小和每行字数组合,结果各不相同,除了发现与整数部分无关之后,没有其他什么规律。所以,我倾向认为是浮点数转换以及后期计算结果截断造成的。
还好问题并不大,通过微调字符尺寸即可避免,微调也是很小的,在 0.01pt 量级,也就几微米到几十微米。肉眼看不出来,按 600dpi 算,一个像素到不了。
所以,就不纠结了。
看了下 jiazhu.sty
里代码,\__jiazhu_good_break:
是处理夹注与正文之间的断行。
现在这个问题是,夹注后正文第一个字符之后的断行,应该与\__jiazhu_good_break:
没有直接的关系。
行末单字无法断行,是因为单字前面没有可伸展的空白。
具体来说,若想要在单字后顺利断行,该单字必须顶格,而唯一的办法是拉伸该单字与其前面夹注之间的空白。但若此空白无法伸展,那么TeX就找不到合法的断行点,从而硬要放俩字而导致overfull。
解决方法是为afterskip
增加弹性(为了对称可以为beforeskip
加上同样的弹性),例如:afterskip=0pt plus 0.1em
这样。
又要麻烦 @qinglee 兄了。
我猜想应该是某种禁则阻止了行末单字后自动断行,翻看 xeCJK 等文档,未找到相关说明。请问该如何解决。