背景

背景

背景

在 ConTeXt 中,可以使用以下方法创建多级索引:

\index{level1+level2}text

如果 的值与level2的前一个索引值匹配level2,则 的文本level2不会重复。

问题

我希望level2按照如下所示的预期结果重复进行:

重复章节标题

在图像中,SECTION A重复了(以红色标识),但仅仅是因为在代码片段中中间的“ SECTION A”实际上包含一个额外的空格(即“ SECTION A”)。

当完全相同的章节标题实际上重复时(以橙色标识),该章节标题将被隐藏。

代码

为了说明问题:

\define[1]\AnimalName{%
  \expanded{\index{#1+\namedstructurevariable{section}{title}}{#1}}%
}

\define[1]\AnimalQuant{#1}
\define[1]\AnimalGroup{#1}
\define[3]\Animal{
  \startitem
    \AnimalQuant{#1} \AnimalGroup{#2} \AnimalName{#3}
  \stopitem
}

\setupregister[index][
  textstyle=\em,
  style=\tfa\bold,
  balance=no,
  command=\Word,
]

\starttext
  \placeindex[compress=yes]
  \startchapter[title={Chapter 1}]
    \startsection[title={Section A}]
      \Animal{6}{rookery}{albatross}
      \Animal{12}{wisdom}{wombat}
      \Animal{10}{plague}{locusts}
      \Animal{11}{lounge}{lizard}
      \Animal{6}{pride}{lion}
      \startitem
        5 array \index{hedgehog+SECTION A}hedgehog
      \stopitem
      \startitem
        7 army \index{herring+SECTION A }herring
      \stopitem
      \startitem
        100 bloat \index{hippopotamuses+SECTION A}hippopotamuses
      \stopitem
    \stopsection
  \stopchapter
\stoptext

改变:

7 army \index{herring+SECTION A }herring

改为(删除 后面的多余空格SECTION A):

7 army \index{herring+SECTION A}herring

做出完全相同的操作后SECTION A,索引被折叠(隐藏/删除):

缺少 2 级

问题

如何防止 ConTeXt 折叠重复的 2 级索引标题?

答案1

这是 ConTeXt 的一个问题。解决方法如下:

  1. 编辑context/tex/texmf-context/tex/context/base/strc-reg.lua/strc-reg.lua
  2. 从第 695 行开始更改:

        for i=1,4 do -- max 4
            if list[i] then
                e[i] = list[i][1]
            end
            if e[i] ~= done[i] then
                if e[i] and e[i] ~= "" then
                    done[i] = e[i]
                    for j=i+1,4 do done[j] = false end
    
                    if n == i then
                        context.stopregisterentries()
                        context.startregisterentries(n)
                    else
                        while n > i do
                            n = n - 1
                            context.stopregisterentries()
                        end
                        while n < i do
                            n = n + 1
                            context.startregisterentries(n)
                        end
                    end
                    local internal  = entry.references.internal or 0
                    local seeparent = entry.references.seeparent or ""
                    local processor = entry.processors and entry.processors[1] or ""
                    if metadata then
                        context.registerentry(processor,internal,seeparent,function() helpers.title(e[i],metadata) end)
                    else -- ?
                        context.registerentry(processor,internal,seeindex,e[i])
                    end
                else
                    done[i] = false
                    for j=i,4 do done[j] = false end
                end
            end
        end
    

保存文件然后使用重新编译context --make

相关内容