ConTeXt:\someline 破坏了字体的字距规则

ConTeXt:\someline 破坏了字体的字距规则

我发现 \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

相关内容