Am 25.08.24 um 15:38 schrieb Joel via ntg-context:
I have a document with thousands of index entries. Here’s a sample code:
Some people lived in \index{cliff-dwelling}\index{dwellings+cliff-dwelling}cliff-dwellings, while others lived in \index{lean-to}\index{dwellings+lean-to}lean-tos.


I’m wondering if there is a short-cut means to set this up, such that if I can tell the document that any time it sees “cliff-dwellings” in an index, it will also add its page numbers to under “dwellings+cliff-dwelling”? In other words, is there an easier way to add these categories, then to go through the entire document and mark them? I already have a list of all the words.

For instance, in my above code, I must find every \index{cliff-dwelling} entry and add a \index{dwellings+cliff-dwelling} next to it...which would take hundreds of hours if I did that for every word. Is there a quicker way to tell it always also add it under "dwellings" too?

If it’s just a few instances, define a macro:

\define[1]\DwIndex{\index{#1}\index{dwellings+#1}#1}

For a list of words, a lookup table and a Lua function make sense.

With a comparable problem, normalizing location names, I used this:

-- lookups.lua
userdata = userdata or { }

userdata.Mapping = {
  ["Albano"] = "Albano (Provinz Rom)",
  ["Altona"] = "Altona (Hamburg)",
  ["Aurich"] = "Aurich (Ostfriesland)",
-- …
}

function userdata.Lookup(name)
  context(userdata.Mapping[name] or name)
end


%%% environment

\loadluafile[lookups.lua]
\defineregister[Location][]
\define[1]\LocIndex{\expanded{\Location{%
  \ctxlua{userdata.Lookup("#1")}}}}


Hraban
___________________________________________________________________________________
If your question is of interest to others as well, please add an entry to the 
Wiki!

maillist : ntg-context@ntg.nl / 
https://mailman.ntg.nl/mailman3/lists/ntg-context.ntg.nl
webpage  : https://www.pragma-ade.nl / https://context.aanhet.net (mirror)
archive  : https://github.com/contextgarden/context
wiki     : https://wiki.contextgarden.net
___________________________________________________________________________________

Reply via email to