# Changes

,  18:47, 18 September 2019
m
no edit summary
=Tricks=
* {{cmd|writetoregister}} (sometimes needed to avoid macro expansion issues)
* A register per chapter: {{cmd|placeregister}}<tt>[index][criterium=chapter]</tt>
* Place a word in text ''and'' index: <tt>\def\Tindex#1{\index{#1}#1}</tt> -- Please someone enhance this to get space correction, [] sorting etc.!
* Get uppercase-letter heads: {{cmd|setupregisterwritetoregister}}<tt>[index][n=2(sometimes needed to avoid macro expansion issues,command=\Word,style=normal]</tt>'''MkII only''')
== Collapse Page Numbers ==
Often index entries like "mouse 2,3,4,5" aren’t desired, instead ConTeXt should shorten it to "mouse 2–5". This is called collapsing.There are a few two ways to collapse page numbers. The first way is to use the : # {{cmd|setupregister}}[compress=yes ] # Enclose several pages in {{cmd|startregister}} … {{cmd|stopregister}}: <texcode>\startregister[index][Keycode1]{Keyword} % lots of text\stopregister[index][Keycode1]</texcode> The first parameter to the of {{cmd|setupregisterstartregister}} commandis the name of the index – "index" is the default index, but you might use your self defined registers as wellThe second parameter is a keyword to distinguish several overlapping range-entries. It’s also possible to use the sorting parameter:
The second way is to mark several pages for the same entry using {{cmd|startregister}}<tttexcode>[index][mymouse]{mouse}</tt> ... {{cmd|stopregister}}<tt>[index][mymouse]</tt>. This becomes e.g. "mouse 12--16". Note that if you have two or more of these ranges, you need them to have different <tt>[key]</tt> values to stop the system treating them as part of a great big range. So, use {{cmd|startregister}}<tt>[index][mymouse1]{mouse}</tt> ... {{cmd|stopregister}}<tt>[index][mymouse1]</tt> and then {{cmd|\startregister}}<tt>[index][mymouse2]{mouse}</tt> ... {{cmd|stopregister}}<tt>[index][mymouse2]</tt> to get two independent ranges in the list. {{cmd|startregister}} takes four arguments, of which two are mandatory: {{cmd|startregister}}<tt>[NAME_OF_REGISTER]{ENTRY_NAME}</tt>. The other arguments are <tt>[KEY_FOR_RANGE]</tt> and <tt>[KEY_FOR_SORTING]</tt>. To give an example: {{cmd|startregister}}<tt>[index][levi][Levi-Strauss]{Lévi|-|Strauss}</tt>. This will start a range with the key <tt>levi</tt> which will put the entry "Lévi-Strauss" in the register "index" (the "normal" register) and sort it under "Levi-Strauss." To mark the end % lots of the range, you write {{cmd|text\stopregister}}<tt>[index][levi]</tttexcode>.
This will create a range with the key <tt>levi</tt> which will put the entry "Lévi-Strauss" in the register "index" (the "normal" register) and sort it under "Levi-Strauss."
The vertical spaces between the entry groups for subsequent letters is governed by the parameter <tt>before</tt> in the same command (default: <tt>\blank</tt>, change to <tt>before={}</tt> to get no additional space).
=Sorting=
The sorting of the index is influenced by the current [[Language Codes|language]]. You can override that with the {{key|language}} key of {{cmd|setupregister}}.
There are a few additional "languages" for sorting, as defined in {{src|sort-lan.mkiv}}:
* <tt>DIN 5007-1</tt> (German) normal sorting, ß = ss
* <tt>DIN 5007-2</tt> (German) phonebook sorting, ä = ae, ö = oe, ü = ue, ß = ss
* <tt>Duden</tt> (German) ß = s
* <tt>de-AT</tt> (Austrian German) phonebook sorting; umlauts after base vocal (a, ä, o, ö, u, ü)
* <tt>cu</tt> (Church Slavonic)
* <tt>ocs-scn</tt> (Scientific Old Slavonic transcription)
* <tt>ru-iso9</tt> (Russian transcription)

Additionally, there’s the {{key|method}} key that influences the order of upper-/lowercase and diacritics:

The details lay in a rather obscure set of methods (see {{src|sort-ini.lua|source}}), for which the following presets are defined:

* {{key|default}} = {{key|"zc,pc,zm,pm,uc"}} (uppercase like lowercase, diacritics separate)
* {{key|before}} = {{key|"mm,mc,uc"}} (upper before lower, diacritics ignored)
* {{key|after}} = {{key|"pm,mc,uc}} (lower before upper, diacritics ignored)
* {{key|first}} = {{key|"pc,mm,uc"}} (lower before upper, diacritics separate)
* {{key|last}} = {{key|"mc,mm,uc"}} (upper before lower, diacritics separate)
* If you don’t set the sorting method, the preset "first" ist used (and not "default").
* There’s no preset for the combination "uppercase like lowercase, diacritics ignored", try {{key|"zm,pm,zc,zm,uc"}}.
* The sorting is also influenced by the current language or the language setting in {{cmd|setupregister}}.

e.g.
<texcode>
\setupregister[index][
n=1,
language=Duden,
method={zm,pm,zc,zm,uc},
]
</texcode>
=Coupled Registers=
Note the two possible definitions, and the pitfalls with each one. If you are still having trouble with specific {{cmd|index}} commands, try using the alternative definition. When they are used in the right context, these three possible ways of placing an index term (the plain {{cmd|index}}, or it wrapped in one of the two possible {{cmd|doflushatpar}}s, should solve any problem.

=Impact on hyphenation, and on line breaking as a consequence=

{{cmd|index}} is attached to a word, so it modifies the word boundaries. That influences its hyphenation and likely the paragraph's line breaking. To prevent that, you can write:

<texcode>
This is an indexed term\wordboundary\index{Term}. % instead of simply ... term\index{Term}.
</texcode>

That way, ConTeXt knows that the word "term" is ended by the "m" and not by something attached to it by {{cmd|index}}, and the effect on hyphenation and line breaking is the same as if we wrote:

<texcode>
This is an indexed term.
</texcode>
13

edits