ConTeXt:使用处理器对索引中的子条目进行样式化

ConTeXt:使用处理器对索引中的子条目进行样式化

背景

在 ConTeXt 中,您可以使用

\defineregister [first]
\setupregister[first]
  [indicator=no,
  expansion=no]
\defineregister [second]
\setupregister[second]
 [indicator=no]
\defineregister [third]
\setupregister[third]
  [indicator=no]
\defineprocessor [relevant] [color=blue]


\starttext %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  \placefirst  \page \placesecond \page \placethird \page
  Text before.
  Text \first {foo} \first{relevant->bar 1+asdf} \first{baz}text.
  Text after.
\stoptext %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

创建一个具有第一级和第二级条目的单独样式的索引条目(示例取自 contextgarden wiki,并进行了一些修改)。这将产生

输出 #1

问题

对于我的索引设计,子条目必须具有与主条目不同的样式(在此示例中,它们应该是蓝色的,在我的书中,它们应该是倾斜的,而主条目具有正常的字体样式)。因此,我尝试仅将处理器应用于子条目,

\first{bar 1+relevant->asdf}

这导致

输出 #2

我预期的结果是蓝色的“asdf”和黑色的“bar”。

问题

有没有办法将处理器仅应用于索引中的子条目,或者是否有另一种机制可以产生我预期的结果?

答案1

不幸的是,由于它是在 Lua 中实现的,因此无法在宏级别访问寄存器排版。不过,存在一个简单的解决方法。您只需在子级旁边声明父级,其余语法保持不变。

\defineregister[first]

\setupregister
  [first]
  [
    indicator=no,
    expansion=no,
  ]

\defineprocessor
  [relevant]
  [color=blue]

\starttext
\placefirst

Text with labels\first{bar 1}\first{relevant->bar 1+asdf}
\stoptext

在此处输入图片描述

相关内容