reftex: Defining Index Macros

 
 5.5 Defining Index Macros
 =========================
 
 When writing a document with an index you will probably define
 additional macros which make entries into the index.  Let’s look at an
 example.
 
      \newcommand{\ix}[1]{#1\index{#1}}
      \newcommand{\nindex}[1]{\textit{#1}\index[name]{#1}}
      \newcommand{\astobj}[1]{\index{Astronomical Objects!#1}}
 
    The first macro ‘\ix’ typesets its argument in the text and places it
 into the index.  The second macro ‘\nindex’ typesets its argument in the
 text and places it into a separate index with the tag ‘name’(1).  The
 last macro also places its argument into the index, but as subitems
 under the main index entry ‘Astronomical Objects’.  Here is how to make
 RefTeX recognize and correctly interpret these macros, first with Emacs
 Lisp.
 
      (setq reftex-index-macros
            '(("\\ix{*}" "idx" ?x "" nil nil)
              ("\\nindex{*}" "name" ?n "" nil nil)
              ("\\astobj{*}" "idx" ?o "Astronomical Objects!" nil t)))
 
    Note that the index tag is ‘idx’ for the main index, and ‘name’ for
 the name index.  ‘idx’ and ‘glo’ are reserved for the default index and
 for the glossary.
 
    The character arguments ‘?x’, ‘?n’, and ‘?o’ are for quick
 identification of these macros when RefTeX inserts new index entries
 with ‘reftex-index’.  These codes need to be unique.  ‘?i’, ‘?I’, and
 ‘?g’ are reserved for the ‘\index’, ‘\index*’, and ‘\glossary’ macros,
 respectively.
 
    The following string is empty unless your macro adds a superordinate
 entry to the index key; this is the case for the ‘\astobj’ macro.
 
    The next entry can be a hook function to exclude certain matches, it
 almost always can be ‘nil’.
 
    The final element in the list indicates if the text being indexed
 needs to be repeated outside the macro.  For the normal index macros,
 this should be ‘t’.  Only if the macro typesets the entry in the text
 (like ‘\ix’ and ‘\nindex’ in the example do), this should be ‘nil’.
 
    To do the same thing with customize, you need to fill in the
 templates like this:
 
      Repeat:
      [INS] [DEL] List:
                  Macro with args: \ix{*}
                  Index Tag      : [Value Menu] String: idx
                  Access Key     : x
                  Key Prefix     :
                  Exclusion hook : nil
                  Repeat Outside : [Toggle]  off (nil)
      [INS] [DEL] List:
                  Macro with args: \nindex{*}
                  Index Tag      : [Value Menu] String: name
                  Access Key     : n
                  Key Prefix     :
                  Exclusion hook : nil
                  Repeat Outside : [Toggle]  off (nil)
      [INS] [DEL] List:
                  Macro with args: \astobj{*}
                  Index Tag      : [Value Menu] String: idx
                  Access Key     : o
                  Key Prefix     : Astronomical Objects!
                  Exclusion hook : nil
                  Repeat Outside : [Toggle]  on (non-nil)
      [INS]
 
    With the macro ‘\ix’ defined, you may want to change the default
 macro used for indexing a text phrase (SeeCreating Index Entries).
 This would be done like this
 
      (setq reftex-index-default-macro '(?x "idx"))
 
    which specifies that the macro identified with the character ‘?x’
 (the ‘\ix’ macro) should be used for indexing phrases and words already
 in the buffer with ‘C-c /’ (‘reftex-index-selection-or-word’).  The
 index tag is "idx".
 
    ---------- Footnotes ----------
 
    (1) We are using the syntax of the ‘index’ package here.