我发现 \someline(用于获取行号的引用)破坏了字体的字距调整。
例如,我想调整字符“,”和“1”之间的字距,我通过在 fontforge 中为我的字体添加字距规则来实现。在这个例子中,我添加了很多空格,以便更好地显示。
现在,如果我按顺序写两行包含两个字符的行,并在第二行中在\someline
这些字符之间插入一个命令
\startluacode
fonts.handlers.otf.addfeature {
name = "ktest",
type = "kern",
data = { [","] = { ["1"] = 500 } }
}
\stopluacode
\definefontfeature
[default]
[default]
[ktest=yes]
\setupbodyfont[modern]
\starttext
p.1,123\par
p.1,\someline[x]123\par
\stoptext
然后我得到以下结果:
第一行中的空格是字距调整。在第二行中,显然通过插入 来阻止字距调整\someline
。在我看来,这个命令似乎产生了一些自己的标记,因此“,”和“1”不再连续。
那么如何才能获取某个位置的行号的引用,同时调整该位置字符的字距呢?
我可能需要补充一点,实际上问题更加复杂,而仅仅将其放到\someline
另一个位置并不是一个选择。
答案1
正如我已经怀疑的那样,在和\someline
之间插入了额外的节点。我们可以使用以下方法将其可视化:,
1
\showboxbreadth=\maxdimen
\showboxdepth=\maxdimen
\tracingoutput=1
\tracingonline=1
\normalshipout\vbox{
p.1,\someline[x]123\par
}
\tracingoutput=0
\tracingonline=0
日志文件将包含
\vbox(7.98761+2.32672)x426.78743, direction TLT
.\hbox(7.98761+2.32672)x426.78743, glue set 389.46393fil, direction TLT
..\localpar
...\localinterlinepenalty=0
...\localbrokenpenalty=0
...\localleftbox=null
...\localrightbox=null
..\hbox(0.0+0.0)x0.0, direction TLT
..<1: lmroman10-regular @ 12.0pt> p
..<1: lmroman10-regular @ 12.0pt> .
..<1: lmroman10-regular @ 12.0pt> 1
..<1: lmroman10-regular @ 12.0pt> ,
..\hbox(0.0+0.0)x0.0, direction TLT
...\latelua0 <function reference 790>
..\hbox(0.0+0.0)x0.0, direction TLT
...\latelua0 <function reference 791>
..<1: lmroman10-regular @ 12.0pt> 1
..<1: lmroman10-regular @ 12.0pt> 2
..<1: lmroman10-regular @ 12.0pt> 3
..\penalty 10000
..\glue(\parfillskip) 0.0 plus 1.0fil
..\glue(\rightskip) 0.0