Open ChihSee-Hsie opened 2 years ago
这是 jiazhu
宏包算法上的局限。简单来说,每当需要插入新夹注的时候,就得知道该行的正文还剩余多少空间;剩余空间足够的话就直接把新夹注放在这一行,剩余空间不足的话就得对新夹注做折行的处理。
jiazhu
宏包借用「行间公式」(相当于 \[...\]
)来获取这个信息,结果就是某种「贪心算法」:一旦出现新夹注,新夹注前面的正文就会变成「段落的最后一行」,从而左对齐(直排就是顶对齐),自然就是密排;而新夹注后面的正文则是在剩余的空间里排布,若剩余空间不足整数个字,则多余的空白只会均摊到这些「后面的正文」中去。同一行连续出现好几个夹注的时候,多余的空白只会均摊到「最后一个正文片段」。在你的例子中,最后一个正文片段仅有两个字,所以多余的空白会全部集中在这两个字之间^1,尤其明显。
目前,我想不到什么算法能够代替「行间公式」,所以你能尝试的解决方案就是手动微调。假设你的例子中:正文一行 17 字、夹注字号为正文一半,字距不均的那行正文有 13 字、两个夹注占据两个正文字空间,一共就是 15 字,余下空白加到夹注的 beforeskip
、afterskip
即可。例如:
...汎\jiazhu[beforeskip=0.5em plus 1pt minus 1pt,afterskip=0.5em plus 1pt minus 1pt]{芳梵反}%
彼柏舟亦汎其流耿耿\jiazhu[beforeskip=0.5em plus 1pt minus 1pt,afterskip=0.5em plus 1pt minus 1pt]{古幸反}%
不寐...
感谢回复。我在想这种特殊排版有没有可能用编译多次的方式解决——第一次只计算出盒子的长度,第二次将盒子作为一个元素与字符共同排版,往中间填字。
我并不了解 LaTeX 编译的底层逻辑,这只是一个粗浅的想法。但 LaTeX 生成各种标签以及目录都需要编译两次甚至三次,是否有可能提供借鉴呢?
如题,我在使用 upLaTeX 排版时用到了 jiazhu.sty,感觉比较好,惟其夹注前后字距发生了变化,具体见下图:
可见其第一行夹注之前是密排,夹注之后到行末「不寐」二字变成分散对齐。我想这可能与 jiazhu.sty 在插入夹注时需要断行有关,但尚不知如何解决。有方家能解答此惑者,我在此预致谢忱。