Review of : The L^{A}TEX Companion^{∗}

David M. Jones and David E. Wald

In darkness languishes the precious stone. When will its excellence enchant the world?

– Barry Hughart

Michel Goossens, Frank Mittelbach and Alexander Samarin, The L^{A}TEX Companion. Addison-Wesley, 1993. xxx + 492 pp. + index (36 pp.) ISBN 0-201-54199-8.

Without question, this book is absolutely necessary for all who use, support, modify, or rue the day that they first heard of L^{A}TEX. You should all run right out and get a copy. We’ll wait.

⋮

All set? Good. Now we’ll tell you what you’ve just acquired.

In recent years there has been an explosion of books about TEX and L^{A}TEX, and the majority of L^{A}TEX users have probably gone from gnashing their teeth over the lack of supplemental documentation to gnashing their teeth over which of the numerous books on the market are the best investment for their time and money. Let there be no confusion about the L^{A}TEX Companion: the Companion belongs next to the TEXbook and the L^{A}TEX manual as a book that every L^{A}TEX user should have available.

Since its introduction in the early 80’s, L^{A}TEX has been the center of a flurry of grassroots development, with contributors world-wide producing a variety of style files and support packages, many of which have become basic necessities to any welldressed L^{A}TEX installation. In recent years, this development has reached a minor crisis point, with several slightly incompatible variants of L^{A}TEX coming into common use.

As anyone who has been following the recent development of L^{A}TEX knows, the L^{A}TEX3 team, spearheaded by Frank Mittelbach, Chris Rowley, and Rainer Schöpf, has taken over the development of L^{A}TEX, and is in the process of producing a completely rewritten L^{A}TEX3 [1–3]. Recently, the L^{A}TEX3 team, in an attempt to head off the aforementioned crisis, announced the imminent release of a single “state of the art” version of L^{A}TEX, to be designated L^{A}TEX2ε.

∗ This review originally appeared in TUGboat 15(2):103–106, June 1994, and appears here by permission.

Along with the “crisis of infinite formats,” there has been a corresponding crisis in documentation. Beyond Lamport’s manual presenting the original core of L^{A}TEX, there has been no central source that systematically presented the most useful style files, the most necessary support programs and, frankly, the best-known tricks for convincing L^{A}TEX to behave itself. Even when documentation exists, it has tended to circulate in the form of electronic folklore, or unpublished documents distributed with individual macro packages, supplemented by the occasional TUGboat article. The unfortunate result is that many worthy packages have languished in darkness for lack of widely-available documentation.

In other words, there exists a gap between the numerous L^{A}TEX primers now available on the market and the various comprehensive lists and archives of L^{A}TEX styles now available electronically. The authors of this book have taken it upon themselves to fill this gap. They are in a particularly good position to do so, as one of them is a member of the core L^{A}TEX3 team, and all three have extensive experience in supporting L^{A}TEX and initiating novices into its deeper mysteries.

The Companion is designed to be used alongside Lamport’s L^{A}TEX manual; as such, it assumes that the reader is familiar with the core system as documented in Lamport’s book, and gives frequent cross-references to the L^{A}TEX manual. Each chapter focuses on a different aspect of document preparation and presents a carefully-chosen combination of packages, utilities, and less well-known features, which allow the user to transcend the boundaries of Lamport’s book.

Since Chapter 2 is in many ways typical of the rest of the book, we will give an extended description of it to illustrate the flavor of documentation provided by the Companion. Chapter 2 covers the physical and logical structure of a L^{A}TEX document. The first section covers the package and class interface to L^{A}TEX2ε, which replaces the \documentstyle interface of L^{A}TEX 2.09. Succeeding sections cover sectioning commands, tables of contents, and crossreferencing.

The discussion of sectioning commands begins with a brief summary of their syntax and use, covering roughly the material presented in Section 2.2.3 and Appendix C.3 of the L^{A}TEX manual. The authors don’t stop here, however; they also present a wealth of information on modifying the behavior of sectioning commands and on defining new ones. (As anyone who has supported L^{A}TEX—or who has read any newsgroup or mailing list where L^{A}TEX is discussed—well knows, this is exactly the sort of question that is asked repeatedly by L^{A}TEX users, and which the determined user has usually had to delve into the L^{A}TEX source code to answer.)

The discussion of tables of contents follows similar lines, and is supplemented by a description of the nonstandard minitoc package, which can be used to create a separate table of contents at the beginning of each chapter of a book or report.

The chapter concludes with a description of L^{A}TEX’s cross-referencing features, together with descriptions of the varioref and xr packages, which support alternate styles of referencing and crossreferences between documents.

Moving along, Chapter 3 covers the formatting of paragraphs, lists, and other structures; Chapter 4 discusses page layout; and Chapters 5 and 6 cover tables and floats in depth.

Chapter 7 presents the first of several major extensions to L^{A}TEX, the L^{A}TEX2ε font selection scheme. Since the New Font Selection Scheme is the single largest difference between L^{A}TEX 2.09 and L^{A}TEX2ε, this chapter is perhaps the most important in the book. The scheme is indeed described well, with the first sections providing a detailed introduction to the basic vocabulary and features of font selection, and the latter sections providing full details for those wishing to install new fonts.

Chapter 8, entitled “Higher Mathematics,” will be welcome reading to anyone to whom mathematical typesetting is of more than passing interest. It has long been a source of amusement—and occasional chagrin—that although TEX’s raison d’être has always been its superb support for mathematical typesetting, L^{A}TEX hardly represents an advantage over plain TEX in this regard, and has been lagging behind AMS-TEX for some years. Thus, we were delighted when AMS-L^{A}TEX was released a few years ago, and are now pleased that AMS-L^{A}TEX has been fully legitimized by Chapter 8, which provides a detailed introduction to and description of the various features of this excellent package. Armed with the L^{A}TEX Companion, we will now continue with renewed vigor our campaign to see that every L^{A}TEX site installs the AMS-L^{A}TEX package and brings L^{A}TEX out of the dark ages of mathematical typesetting.^{1}

Chapter 9 addresses another issue that has been of burning interest in the L^{A}TEX community for

1 While approving of the sentiment, one of the authors of this review would like to distance himself from the evangelical tone of this paragraph, and wishes to remind the other author that there are several full-flavored decaffeinated coffees on the market. several years—support for typesetting in languages other than American English. The authors briefly discuss the handling of alternate character sets and encodings such as the Cork standard, and then discuss the Babel package of Johannes Braams, as well as an alternate package for French typography.

Chapter 10 discusses several extensions to L^{A}TEX’s picture environment, a subject which leads naturally to Chapter 11, which tackles the complex issues surrounding the use of PostScript in L^{A}TEX documents. This chapter covers such diverse topics as choice of DVI device driver, use of PostScript graphics, installation of PostScript fonts, and various PostScript \special effects.

Chapters 12 and 13 discuss two auxiliary programs that, although they are an essential part of any L^{A}TEX installation, have long suffered from a dearth of documentation. Chapter 12 describes makeindex in detail, bringing into print for essentially the first time a comprehensive discussion not only of the L^{A}TEX interface for creating indexes and the use of the makeindex program itself, but also of makeindex style files and packages for producing documents with multiple indexes. Chapter 13 is a similarly detailed description of BibTEX. This chapter, in fact, seems capable of replacing not only Appendix B of Lamport’s book, but also much of the documentation supplied with BibTEX itself, since it not only subsumes them, but also offers an extensive list of non-standard BibTEX style files.

Chapter 14 describes the doc system for writing self-documenting L^{A}TEX code and perhaps should have been merged with Appendix A, which is an overview of L^{A}TEX for writers of packages and classes. Appendix B rounds the book out with a brief introduction to the major resources for TEX users. The first part of this appendix describes the major electronic sites that serve as sources for TEX software (which will surely be appreciated by those whose curiosity has been piqued by the rest of the book), and the second gives a list of TEX user groups throughout the world. Regrettably missing is a separate list of the major mailing lists and newsgroups devoted to TEX.

The book ends with a well-annotated bibliography that should serve as a valuable introduction to the literature, a well-constructed—though occasionally incomplete—index, and a combination colophon and empirical software study that should prove enlightening to anyone who has used or is contemplating using L^{A}TEX to produce a book-length document.

Although we recommend the Companion without hesitation, there are a few caveats worth mentioning. The major one is that this book, like L^{A}TEX2ε, is a snapshot of a rapidly changing system. As such, there are aspects of the book that are sure to be confusing to anyone who has not been following the development of L^{A}TEX over the past several years, and there are other aspects that are likely to become obsolete in the near future. For example, although the discussion of BibTEX in Chapter 13 is comprehensive as of this writing, this may cease to be true with the eventual release of BibTEX 1.0. Similarly, all of the cross-references to the L^{A}TEX manual refer to the first edition of the book, which will soon be superceded.^{2}

Another problem is that the very thoroughness of the book may occasionally present obstacles for readers who merely want to use the new features documented in the book without becoming intimately acquainted with all aspects of the new system. For example, although the description of the font system in Chapter 7 is very detailed, this means that the reader is ten pages into the chapter before being told the now-preferred method for changing to an italic font. Similarly, there is no place where the reader can turn to find a brief summary of the most important differences between L^{A}TEX 2.09 and L^{A}TEX2ε.^{3} We hope that with the release of a new edition of Lamport’s L^{A}TEX manual, beginners will be able to find the answers to their questions with less difficulty.

A final difficulty with the book results from L^{A}TEX itself. Experience with L^{A}TEX has taught us that there are many perfectly reasonable things a user wishes to do that are impossible in L^{A}TEX with the published interface. Such tasks often require a use of L^{A}TEX’s internal commands, and the Companion has to deal with this. To their credit, the authors have handled this delicate situation with tact, presenting a careful selection of internals without requiring the user to understand the entire composition of the program. Naturally, it is our hope that with the eventual release of L^{A}TEX3, this last diffi-

2 A related problem is that L^{A}TEX2ε itself is still under development. Although a stable distribution version of L^{A}TEX2ε is expected soon, many of the packages described in the Companion have not yet been converted into L^{A}TEX2ε packages, which is likely to cause discrepancies between the actual behavior of some packages and the behavior described in the Companion.

3 Most likely, this reflects the history of the book: When the book was begun, there were no plans to release a new version of L^{A}TEX, and indeed, production of the book was well underway before the necessity of L^{A}TEX2ε became evident. culty (and, dare we hope, the need for two separate manuals) will disappear.

References

[1] Frank Mittelbach and Chris Rowley. L^{A}TEX 2.09 ↪ L^{A}TEX3. TUGboat, 13(1):96–101, April 1992.

[2] Frank Mittelbach and Rainer Schöpf. With L^{A}TEX into the Nineties. TUGboat, 10(4):681– 690, December 1989.

[3] Frank Mittelbach and Rainer Schöpf. Towards L^{A}TEX 3.0. TUGboat, 12(1):74–79, March 1991.

⋄ David M. Jones

MIT Laboratory for Computer

Science 545 Technology Square Cambridge, MA 02139

                                                                     dmjones@theory.lcs.mit.edu

⋄ David E. Wald

MIT Laboratory for Computer

Science 545 Technology Square Cambridge, MA 02139

                                                                     wald@theory.lcs.mit.edu