bsa@telotech.uucp (Brandon S. Allbery) (07/28/89)
Here I go, delving into something I should probably keep out of...
I want to reimplement my troff indexing scheme in LaTeX, now that I have it up
and running (and found a copy of the manual). (This is the same one I offered
to others; I'll post the troff version soon, since I've received a few
requests for it. I should note that some parts of it look a bit weird because
troff is broken on this system; it should work on other systems, however.)
(BTW, I'm curious as to why LaTeX doesn't have a multilevel-index mechanism
already. It seems common enough in many technical books I've seen.)
The troff macros look like:
.sX primary-head [secondary-head [-]]
which inserts an index entry for "primary-head, secondary-head" and, if the
secondary-head is non-null, inserts a "see" entry for "secondary-head
primary-head" unless the third argument is blank.
Under LaTeX, I see this happening as follows:
\tag{primary}[secondary] -- insert index entries
\tag*{primary}[secondary] -- insert main index entry
but suppress "see" entry
I would like these to output the tags in "secondary primary" form into the
text body as well, unless another optional (first) argument is provided; in
that case, output the first argument instead:
\tag[printedform]{primary}[secondary]
-- insert index entries and print
"printedform" in text body
\tag*[printedform]{primary}[secondary]
-- as above, but suppress "see" entry
My main problem is that I can't quite get a handle on what magic incantations
one uses to trap * and optional arguments in LaTeX macros. The manual doesn't
go in-depth on hacking LaTeX, and I haven't been able to figure out what the
stuff in latex.tex is doing. Can someone explain to me (in words of one
syllable or less ;-) how one goes about processing *-commands and optional
arguments in home-grown LaTeX macros?
(I'll probably post the result of this when I'm done, since someone out there
might be able to find a use for hierarchical indexes.)
Thanks in advance,
++Brandon
Brandon S. Allbery @ telotech, inc. (I do not speak for telotech. Ever.)
*This article may only be redistributed if all articles listed in the header's*
* References: field, and all articles listing this one in their References: *
* fields, are also redistributed. *chris@mimsy.UUCP (Chris Torek) (07/28/89)
In article <1989Jul28.020403.15263@telotech.uucp> bsa@telotech.uucp (Brandon S. Allbery) writes: >... I can't quite get a handle on what magic incantations one uses to >trap * and optional arguments in LaTeX macros. Stars are found with \@ifstar, and optional arguments with \@ifnextchar[; some documentation for these can be found near line 1500 of latex.tex. Essentially, one defines \foo as \def\foo{\@ifstar{\@starredfoo}{\@regularfoo}} for starred things, and \def\bar{\@ifnextchar[{\@bar}{@bar[defaultarg]} for things that have optional arguments with defaults. >The manual doesn't go in-depth on hacking LaTeX, latex.tex is actually more informative than {\em The \LaTeX book}. >Can someone explain to me (in words of one syllable or less ;-) how one >goes about processing *-commands and optional arguments in home-grown >LaTeX macros? Only a little of TeX can be explained this way :-) . However, it is worth noting here that in raw TeX, one can get funny characters into macros in two ways: either set the \catcode of the characters to 11 (`letter'), or use something like \expandafter\def\csname w&e*i+r-d\endcsname{foo} \csname ...\endcsname turns `...' into a control sequence regardless of what is in the `...'. The \expandafter makes TeX `pick up' the \def, hold on to it, read the next token (\csname), expand it (gobbling up the ...\endcsname), and then act on the \def. \expandafter can be very strange; see {\em The \TeX book}, in particular Appendix D. LaTeX has some internal macros to `sanitise' these \csname tricks (\@namedef, \@nameuse). -- In-Real-Life: Chris Torek, Univ of MD Comp Sci Dept (+1 301 454 7163) Domain: chris@mimsy.umd.edu Path: uunet!mimsy!chris
chpf127@ut-emx.UUCP (John W. Eaton) (07/28/89)
In article <1989Jul28.020403.15263@telotech.uucp> bsa@telotech.uucp (Brandon S. Allbery) writes: > I want to reimplement my troff indexing scheme in LaTeX, now that I > have it up and running (and found a copy of the manual). It may be worth looking at MakeIndex first. Source is available via anonymous ftp from sun.soe.clarkson.edu > (BTW, I'm curious as to why LaTeX doesn't have a multilevel-index > mechanism already. It seems common enough in many technical books > I've seen.) Used with MakeIndex I believe it does. If this doesn't do what you want it might still be a good place to start. > My main problem is that I can't quite get a handle on what magic > incantations one uses to trap * and optional arguments in LaTeX > macros. The manual doesn't go in-depth on hacking LaTeX, and I > haven't been able to figure out what the stuff in latex.tex is > doing. As the LaTeX book is mostly for users, it seems to me that a detailed explanation of latex.tex is sort of beyond its scope (not that I haven't ever wanted such a description myself :-). > Can someone explain to me (in words of one syllable or less ;-) how > one goes about processing *-commands and optional arguments in > home-grown LaTeX macros? Buy the TeXbook. Read it. (Oops, a two syllable word snuck in there :-) -- John Eaton chpf127@emx.utexas.edu Department of Chemical Engineering The University of Texas at Austin Austin, Texas 78712