jiazhu 包跨页位置偏移和夹注后正文不能自动对齐的问题
chianjin opened this issue · 11 comments
夹注包在我的线装书直排应用中显示效果相当好。不过有两个小问题:
- 你可以尝试将
\topskip
的值调大一点,这个值是控制页面首行的基线位置的,LaTeX 的标准文档类根据选项的不同,默认值分别是10pt/11pt/12pt
,可能比正文和夹注的首行高度都小,所以首行基线的位置就不统一。如果调大\topskip
,相关的页面参数和你画的框线也要做适当的偏移调整,才能与原来的效果一致。除此之外,我想不到其他更合适的办法。 - 技术实现不复杂,但我没有相关方面的经验,想不到怎么处理合适,期待后来人吧。
关于问题 2,在需要对齐的夹注设置 afterskip=1em
,不知道能不能符合要求。
感谢指导。尝试结果如下:
-
设置\topskip是可以调整跨页夹注首行的位置。似乎小于某个值的时候,才会对首行位置有影响;而超过另一个值的时候,其他页面正文首行也会移动。例如,正文20pt,基线间距30pt,似乎要大于14pt才有肉眼可见的调整,大约在16.5pt左右差不多能调整到位,当超过17.5pt时其他页面页发生偏移。这些数据未仔细测量,手工调整,肉眼观察得到的,不一定准确。而手工调整到准确位置太难了。
-
afterskip参数不是我所提出的问题。我提出的问题,换句话是要求双行夹注的前一行字数必须是偶数,且前一行字数大于等于第二行字数。
这两个问题,我暂时有手动解决办法,就是我提问的时候说的方法,虽然略有麻烦,输出效果能满足要求。而且未来若 jiazhu 包代码中能直接解决,我觉得应该也不需要修改现在排版中代码。
\topskip
在大于首行的高度时才有意义,我不知道你正文的字体大小是多少,就是直接将 \topskip
设置成正文的 \baselineskip
也未尝不可,可以保证首行的基线在同一个位置之上。
正文字体大小是20pt,\baselineskip
是30pt,根据我前面尝试的情况,\topskip
不能设置为\baselineskip
。
如果首行的高度大于 \topskip
的值,那么首行的基线到页面顶部的距离就等于首行的高度。汉字虽然是方块字,但是每个汉字的高度还是参差不齐的,没有办法保证每一行的高度都相等,也就没有办法保证页面首行基线的位置是一样的。何况你这里用了夹注,夹注的高度与正文的高度也不一致,就表现得更加明显。
如果首行的高度小于 \topskip
的值,TeX 会在首行之前加入一个高度为 \topskip
与首行高度之差的间距,保证首行的基线距离与页面顶部的距离等于 \topskip
。这也就是我们调大 \topskip
的原因。调大之后,页面都会发生偏移,可以设置页面顶部的一些参数加以补偿。比较方便的是通过 geometry
包来设置,将选项 tmargin
的值相应调小一点。
感谢耐心解释。
不过我暂时还是用我自己丑陋的解决方式。即使我现在能调整好位置,一旦改变字体大小和行间距之后,又要重新调整一遍,很麻烦了。
目前我自己的方法虽然丑陋,但能适应字体大小和行距的变化,效果也是满意的。
期待大神们不断更新完善。
关于问题 2,你再试试在导言区加入下面的修改代码,就是保证夹注的行宽总是汉字宽度的偶数倍。
\ExplSyntaxOn
\cs_set_protected:Npn \__jiazhu_dim_normalize:N #1
{
\int_set:Nn \l_tmpa_int
{ \dim_ratio:nn {#1} { \l__jiazhu_unit_dim } }
\int_if_even:nF { \l_tmpa_int }
{ \int_incr:N \l_tmpa_int }
\dim_set:Nn #1 { \l__jiazhu_unit_dim * \l_tmpa_int }
}
\cs_set_protected:Npn \__jiazhu_extract_max_width:N #1
{
\dim_set:Nn \l__jiazhu_width_dim { \box_wd:N #1 }
\dim_set_eq:NN \l__jiazhu_max_dim \l__jiazhu_width_dim
}
\ExplSyntaxOff
十分感谢,问题 2 已经解决。
问题 1,据我的观察仅发生夹注跨页且无正文的首行。我是这么推测的:
- 夹注位置是根据正文基线位置而确定的,只要这一行有正文,无论出现在什么位置,包括跨页首行,夹注都能找到正确的位置。
- 如果是整行夹注,没有正文的话,有两种情况:如果不是首行,就根据前行位置定位;如果是首行,因为没有正文,那就只能就依照页面相关参数确定位置,于是出现了位置偏移的问题。
所以我就想是否可以“手动断开分成两个夹注,中间插入一个零宽度的影子汉字”即
\jiazhu{...}\vphantom{家}\jiazhu{...}
实践证明,我的方法是有效的,上面的推测也许是成立的。
你的推测是正确的,夹注和之前的正文虽然看起来是在同一行之上,但其实他们根本就不是在同一段之中。在内部技术处理中,大概示意为
夹注前正文
$$
这里的数学环境是为了取得上一行的剩余宽度
$$
<一些间距处理>夹注