Is there a way to centrally add a list of indexed items to a sub category?
I have a document like this: \starttext \index{dogs} \index{cats} \index{flowers} \index{snails} \index{trees} \placeindex \stoptext As I understand, if you use \index{animals+dogs}, it will place dogs as a sub-category of dogs. Is there any way to control this centrally, for instance: \addtosub[animals]{dogs, cats, snails} \addtosub[plants]{flowers, trees} Such a way would make it so \index{dogs} places an entry for "dog" under "d" and "animals --> dogs" under "a". --Joel
Am 15.05.23 um 03:37 schrieb Joel via ntg-context:
I have a document like this:
\starttext \index{dogs}
\index{cats}
\index{flowers}
\index{snails}
\index{trees}
\placeindex
\stoptext
As I understand, if you use \index{animals+dogs}, it will place dogs as a sub-category of dogs.
Is there any way to control this centrally, for instance:
\addtosub[animals]{dogs, cats, snails} \addtosub[plants]{flowers, trees}
Such a way would make it so \index{dogs} places an entry for "dog" under "d" and "animals --> dogs" under "a".
I’d suggest to cook your own macro, e.g. for a book with a lot of person index entries, I used a lookup table to unify different spellings or name changes (married, titles etc.) like this: """% environment: \loadluafile[lookups] % Index lookups \defineregister[Person][] \defineprocessor[italics][style=italicface] \define[1]\Passim{\emph{passim}} \defineprocessor[passim][command=\Passim] \define[1]\nPerson{% \expanded{\Person{\ctxlua{userdata.Lookup("#1")}}}% } \define[1]\TPerson{% \expanded{\Person[kursiv->]{\ctxlua{userdata.Lookup("#1")}}}% }#1} \define[1]\nCPerson{\expanded{\Person[italics->]{\ctxlua{userdata.Lookup("#1")}}}}% \define[1]\TCPerson{\expanded{\Person[italics->]{\ctxlua{userdata.Lookup("#1")}}}#1}% """ """lookups.lua: userdata = userdata or { } userdata.Lookups = { … ["Pauline, geb. Fichtner Erdmannsdörfer"] = "Erdmannsdörfer, Pauline, geb. Fichtner", ["Pauline Erdmannsdörfer"] = "Erdmannsdörfer, Pauline, geb. Fichtner", ["Pauline Erdmannsdörfer-Fichtner"] = "Erdmannsdörfer, Pauline, geb. Fichtner", … } function userdata.Lookup(name) context(userdata.Lookups[name] or name) end """ In a similar way you could setup an \Animal macro to use a lookup table how the entry should get indexed. Hraban
On 5/15/2023 3:37 AM, Joel via ntg-context wrote:
I have a document like this:
\starttext \index{dogs}
\index{cats}
\index{flowers}
\index{snails}
\index{trees}
\placeindex
\stoptext
As I understand, if you use \index{animals+dogs}, it will place dogs as a sub-category of dogs.
Is there any way to control this centrally, for instance:
\addtosub[animals]{dogs, cats, snails} \addtosub[plants]{flowers, trees}
Such a way would make it so \index{dogs} places an entry for "dog" under "d" and "animals --> dogs" under "a".
\starttexdefinition protected IndexA#1#2 \index{#2} \doloopoverlist {#1} { \index{##1+#2} } \stoptexdefinition \starttexdefinition tolerant protected IndexB[#1]#:#*#2 \index{#2} \doloopoverlist {#1} { \index{##1+#2} } \stoptexdefinition \starttext a\IndexA{animals}{dogs} a\IndexA{animals}{cats} a\IndexA{plants}{flowers} a\IndexA{animals,small}{snails} a\IndexA{plants,huge}{trees} \page b\IndexB[animals] {dogs} b\IndexB[animals] {cats} b\IndexB[plants] {flowers} b\IndexB[animals,small]{snails} b\IndexB[plants,huge] {trees} \page c\IndexB{dogs} c\IndexB{cats} c\IndexB{flowers} c\IndexB{snails} c\IndexB{trees} \page \placeindex \stoptext ----------------------------------------------------------------- Hans Hagen | PRAGMA ADE Ridderstraat 27 | 8061 GH Hasselt | The Netherlands tel: 038 477 53 69 | www.pragma-ade.nl | www.pragma-pod.nl -----------------------------------------------------------------
On Mon, 15 May 2023 09:40:22 +0200
Hans Hagen via ntg-context
\starttexdefinition tolerant protected IndexB[#1]#:#*#2 \index{#2} \doloopoverlist {#1} { \index{##1+#2} } \stoptexdefinition
Awesome! However, I think that Joel was looking for a solution closer to what Hraban suggested, creating automatic subcategories. I would do that through a additional macros: \starttexdefinition protected Animals#1 \index{#1} \index{animals+#1} #1 ) \starttexdefinition protected Plants#1 \index{#1} \index{plants+#1} #1 ) \Animals{dogs} \Plants{trees} I use as a general indexing macro: \starttexdefinition tolerant protected Index[#1]#:#*#2 \index[#1]{#2} #2 \stoptexdefinition Alan
On Mon, 15 May 2023 01:37:53 +0000 (UTC)
Joel via ntg-context
Such a way would make it so \index{dogs} places an entry for "dog" under "d" and "animals --> dogs" under "a".
Might I suggest that an alternate way of handling this could be: \seeindex{dogs}{animals+dogs} with \index{animals+dogs} It's the author's choice, but this avoids redundant page entries and a very long \placeindex. (Note that we recently extended \seeindex to handle the {...+...} syntax for both arguments.) Alan
participants (4)
-
Alan Braslau
-
Hans Hagen
-
Henning Hraban Ramm
-
Joel